# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1271419194 -10800 # Node ID d87d32eab1a9046e6b47d778ac60a64ef7343e78 # Parent 951a5db380a07cbb9c2e9da34b44bc0deb0cc856 Revision: 201015 Kit: 201015 diff -r 951a5db380a0 -r d87d32eab1a9 group/bld.inf --- a/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include - -#include "../videoeditor_plat/group/bld.inf" -#include "../videditor/group/bld.inf" -#include "../videoeditorengine/group/bld.inf" - -PRJ_EXPORTS - -//../inc_sdk/foo.h MW_LAYER_PUBLIC_EXPORT_PATH(foo.h) -//../inc_domain/foo.h MW_LAYER_PLATFORM_EXPORT_PATH(foo.h) \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 layers.sysdef.xml --- a/layers.sysdef.xml Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ - - -]> - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 package_definition.xml --- a/package_definition.xml Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 sysdef_1_4_0.dtd --- a/sysdef_1_4_0.dtd Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/ManualVideoEditor.rss --- a/videditor/ManualVideoEditor/data/ManualVideoEditor.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2744 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// RESOURCE IDENTIFIER -NAME MVED // 4 letter ID - -// INCLUDES - -#include -#include "manualvideoeditor.hrh" -#include "manualvideoeditor.loc" -#include -#include - -#include -#include -#include -#include // Key codes -#include // avkon.loc is NOT included in this file if -#include -#include -#include -#include -#include -#if defined(__WINS__) -#define vei_bitmap_file "\\epoc32\\release\\"$(PLATFORM)"\\"$(CFG)"\\Z\\"APP_BITMAP_DIR"\\manualvideoeditor.mif" -#define vei_uic_bitmap_file "\\epoc32\\release\\"$(PLATFORM)"\\"$(CFG)"\\Z\\"APP_BITMAP_DIR"\\videoeditoruicomponents.mif" -#else -#define vei_bitmap_file ""APP_BITMAP_DIR"\\manualvideoeditor.mif" -#define vei_uic_bitmap_file ""APP_BITMAP_DIR"\\videoeditoruicomponents.mif" -#endif - - -// RESOURCE DEFINITIONS - - -RESOURCE RSS_SIGNATURE { } - -RESOURCE TBUF { buf="mveditor"; } - -RESOURCE EIK_APP_INFO - { - cba=R_AVKON_SOFTKEYS_OPTIONS_EXIT; - } - -RESOURCE LOCALISABLE_APP_INFO r_vei_localisable_app_info - { - short_caption=qtn_app_short_caption_string; - caption_and_icon = - CAPTION_AND_ICON_INFO - { - caption=qtn_app_caption_string; - number_of_icons=1; - icon_file=APP_BITMAP_DIR"\\ManualVideoEditor_aif.mif"; - }; - } -//---------------------------------------------------- -// -// r_vei_editvideo_titlescreen_text_query -// data query for the title screen text -// -//---------------------------------------------------- -// -RESOURCE DIALOG r_vei_editvideo_titlescreen_text_query - { - flags=EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_OK_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EVeiTitleScreenTextQuery; - control = AVKON_DATA_QUERY - { - layout = EDataLayout; - label = qtn_vei_textinserting_for_title_screen; - - control = - EDWIN - { - width = 50; - lines = 5; - maxlength = 50; - }; - }; - } - }; - } - - -//---------------------------------------------------- -// -// r_vei_hotkeys -// ?description -// -//---------------------------------------------------- -// -RESOURCE HOTKEYS r_vei_hotkeys - { - control= - { - HOTKEY { command=EAknCmdExit; key='e'; } - }; - } - -//===================================================== -// -// ***** AVKON VIEWS ***** -// -// -//===================================================== - -//---------------------------------------------------- -// -// r_vei_settings_view -// ?description -// -//---------------------------------------------------- -// -RESOURCE AVKON_VIEW r_vei_settings_view - { - hotkeys=r_vei_hotkeys; - menubar=r_vei_menubar_settings_view; - cba=R_AVKON_SOFTKEYS_SELECTION_LIST; - } - -//---------------------------------------------------- -// -// r_vei_edit_video -// ?description -// -//---------------------------------------------------- -// -RESOURCE AVKON_VIEW r_vei_edit_video_view - { - hotkeys=r_vei_hotkeys; - menubar=r_vei_menubar_edit_video_view; - cba=R_AVKON_SOFTKEYS_SELECTION_LIST; - } - -//---------------------------------------------------- -// -// r_vei_cut_video -// ?description -// -//---------------------------------------------------- -// -RESOURCE AVKON_VIEW r_vei_cut_video_view - { - hotkeys=r_vei_hotkeys; - menubar=r_vei_menubar_cut_video_view; - cba=R_AVKON_SOFTKEYS_SELECTION_LIST; - } - -//---------------------------------------------------- -// -// r_vei_cut_audio -// ?description -// -//---------------------------------------------------- -// -RESOURCE AVKON_VIEW r_vei_cut_audio_view - { - hotkeys=r_vei_hotkeys; - menubar=r_vei_menubar_cut_video_view; - cba=R_AVKON_SOFTKEYS_SELECTION_LIST; - } - -//---------------------------------------------------- -// -// r_vei_trim_for_mms_view -// ?description -// -//---------------------------------------------------- -// -RESOURCE AVKON_VIEW r_vei_trim_for_mms_view - { - hotkeys=r_vei_hotkeys; - menubar=r_vei_menubar_trim_for_mms_view; - cba=R_AVKON_SOFTKEYS_OPTIONS_BACK; - } - -//===================================================== -// -// ***** MENU BARS ***** -// -// -//===================================================== - - -//---------------------------------------------------- -// -// r_vei_menubar_trim_for_mms_view -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_BAR r_vei_menubar_trim_for_mms_view - { - titles= - { - MENU_TITLE - { - menu_pane=r_vei_menu_pane_trim_for_mms_view; - txt=""; - } - }; - } - -//----------------------------------------------------- -// -// r_vei_menubar_settings_view -// ?description -// -//---------------------------------------------------- -// - -RESOURCE MENU_BAR r_vei_menubar_settings_view - { - titles= - { - MENU_TITLE { menu_pane=r_vei_settings_view_menu; } - }; - } - - -//----------------------------------------------------- -// -// r_vei_menubar_edit_video_view -// ?description -// -//---------------------------------------------------- -// - -RESOURCE MENU_BAR r_vei_menubar_edit_video_view - { - titles= - { - MENU_TITLE { menu_pane=r_vei_edit_video_view_menu; } - }; - } - -//----------------------------------------------------- -// -// r_vei_menubar_cut_video_view -// ?description -// -//---------------------------------------------------- -// - -RESOURCE MENU_BAR r_vei_menubar_cut_video_view - { - titles= - { - MENU_TITLE { menu_pane=r_vei_cut_video_view_menu; } - }; - } - -//----------------------------------------------------- -// -// r_vei_preview -// ?description -// -//---------------------------------------------------- -// - -RESOURCE MENU_BAR r_vei_preview_bar - { - titles= - { - MENU_TITLE { menu_pane=r_vei_preview_menu; } - }; - } - - -//===================================================== -// -// ***** MENU PANES ***** -// -// -//===================================================== - -//---------------------------------------------------- -// -// r_vei_menu_pane_trim_for_mms_view -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_menu_pane_trim_for_mms_view - { - items= - { - MENU_ITEM { command=EVeiCmdSendViaMms; txt=qtn_vei_menu_send_via_mms; }, - MENU_ITEM { command=EVeiCmdPreview; txt=qtn_vei_menu_preview; }, -// MENU_ITEM { command=EVeiCmdVideoLength; txt=qtn_vei_menu_video_length; }, - MENU_ITEM { command=EVeiCmdTrimForMmsViewHelp; txt=qtn_clipb_litxt_help; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_view_edit_video_menu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_edit_video_menu - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoCutting; txt=qtn_vei_edit_video_cmd_edit_video_cutting; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoMove; txt=qtn_vei_list_query_select_video_move; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoColorEffect;txt=qtn_vei_list_query_select_video_color_effect; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoSlowMotion; txt=qtn_vei_list_query_select_video_slow_motion; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoMute; txt=qtn_vei_list_query_select_video_mute; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoUnmute; txt=qtn_vei_list_query_select_video_unmute; }, - MENU_ITEM { command=EVeiCmdEditVideoAdjustVolume; txt = qtn_vei_edit_video_cmd_edit_adj_vol; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoRemove; txt=qtn_vei_list_query_select_video_remove; }, - MENU_ITEM { command=EVeiCmdEditVideoDuplicate; txt=qtn_vei_list_query_select_video_duplicate; } - }; - } - -//---------------------------------------------------- -// -// r_vei_settings_view_menu -// ?description -// -//---------------------------------------------------- -// - -RESOURCE MENU_PANE r_vei_settings_view_menu - { - items= - { - MENU_ITEM { command=EVeiCmdSettingsViewChange; txt=qtn_options_change; }, - MENU_ITEM { command=EVeiCmdSettingsViewHelp; txt=qtn_options_help; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_menu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_menu - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideo; txt = qtn_vei_edit_video_cmd_edit_video; cascade=r_vei_edit_video_view_edit_video_submenu; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditAudio; txt = qtn_vei_edit_video_cmd_edit_audio; cascade=r_vei_edit_video_view_edit_audio_submenu; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditStartTransition; txt = qtn_vei_edit_video_cmd_edit_tran; cascade=r_vei_edit_video_view_edit_start_transition_submenu; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditText; txt = qtn_ved_menu_editt; cascade = r_vei_edit_video_view_edit_text_submenu; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditImage; txt = qtn_ved_menu_editi; cascade = r_vei_edit_video_view_edit_image_submenu; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditMiddleTransition; txt = qtn_vei_edit_video_cmd_edit_tran; cascade=r_vei_edit_video_view_edit_middle_transition_submenu; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditEndTransition; txt = qtn_vei_edit_video_cmd_edit_tran; cascade=r_vei_edit_video_view_edit_end_transition_submenu; }, - MENU_ITEM { command=EVeiCmdEditVideoViewInsert; txt = qtn_vei_edit_video_cmd_insert; cascade=r_vei_edit_video_view_insert; }, - MENU_ITEM { command=EVeiCmdEditVideoViewMovie; txt = qtn_ved_menu_movie; cascade = r_vei_edit_video_view_movie_submenu; }, - MENU_ITEM { command=EVeiCmdEditVideoViewSettings; txt = qtn_options_settings; }, - MENU_ITEM { command=EVeiCmdEditVideoViewHelp; txt = qtn_options_help; }, - MENU_ITEM { command=EEikCmdExit; txt = qtn_options_exit; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_view_audio_mixing_menu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_audio_mixing_menu - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewPreview; txt = qtn_vei_edit_video_cmd_preview; cascade=r_vei_edit_video_view_movie_preview;}, - MENU_ITEM { command=EVeiCmdEditVideoMixAudioCancel; txt = text_softkey_cancel; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_view_movie_submenu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_movie_submenu - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewPreview; txt = qtn_vei_edit_video_cmd_preview; cascade=r_vei_edit_video_view_movie_preview;}, - MENU_ITEM { command=EVeiCmdEditVideoViewTrimForMms; txt = qtn_ved_smenu_movie_mms; }, - MENU_ITEM { command=EVeiCmdEditVideoViewSaveTo; txt = qtn_vei_edit_video_cmd_save_to; }, - MENU_ITEM { command=EVeiCmdEditVideoMixAudio; txt = qtn_vei_edit_video_cmd_audio_mix; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_view_movie_preview -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_movie_preview - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewPreviewLarge; txt = qtn_ved_smenu_movie_lpreview; }, - MENU_ITEM { command=EVeiCmdEditVideoViewPreviewSmall; txt = qtn_ved_smenu_movie_spreview; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_view_insert -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_insert - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewInsertVideo; txt = qtn_vei_edit_video_cmd_insert_video; }, - MENU_ITEM { command=EVeiCmdEditVideoViewInsertImage; txt = qtn_ved_smenu_insert_image;}, - MENU_ITEM { command=EVeiCmdEditVideoViewInsertText; txt = qtn_ved_smenu_insert_text;}, - MENU_ITEM { command=EVeiCmdEditVideoViewInsertAudio; txt = qtn_vei_edit_video_cmd_insert_audio; }, - MENU_ITEM { command=EVeiCmdEditVideoViewInsertNewAudio; txt = qtn_vei_edit_video_cmd_insert_new_audio; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_view_edit_text_submenu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_edit_text_submenu -{ - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewEditTextMove; txt = qtn_ved_smenu_editt_move; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditTextRemove; txt = qtn_ved_smenu_editt_remove; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditTextChangeDuration; txt = qtn_ved_smenu_editt_dur; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditTextChangeText; txt = qtn_ved_smenu_editt_text; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditTextSetTextColor; txt = qtn_ved_smenu_editt_color; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditTextSetBackGround; txt = qtn_ved_smenu_editt_bg; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditTextStyle; txt = qtn_ved_smenu_editt_style; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditTextAddColorEffect; txt = qtn_ved_smenu_editt_color_effect; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditTextDuplicate; txt = qtn_ved_smenu_editt_duplicate; } - }; -} - - -//---------------------------------------------------- -// -// r_vei_edit_video_view_edit_image_submenu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_edit_image_submenu -{ - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewEditImageMove; txt = qtn_ved_smenu_editi_move; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditImageRemove; txt = qtn_ved_smenu_editi_remove; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditImageChangeDuration; txt = qtn_ved_smenu_editt_dur; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditImageBackGround; txt = qtn_ved_smenu_editi_bg; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditImageAddColorEffect; txt = qtn_ved_smenu_editi_color_effect; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditImageDuplicate; txt = qtn_ved_smenu_editi_duplicate; } - }; -} - -//---------------------------------------------------- -// -// r_vei_edit_video_view_edit_video_submenu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_edit_video_submenu - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoCutting; txt=qtn_vei_edit_video_cmd_edit_video_cutting; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoMove; txt=qtn_vei_edit_video_cmd_edit_video_move; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoColorEffect;txt=qtn_vei_edit_video_cmd_edit_video_color_effect; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoSlowMotion; txt=qtn_vei_edit_video_cmd_edit_video_slow_motion; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoMute; txt=qtn_vei_edit_video_cmd_edit_video_mute; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoUnmute; txt=qtn_vei_edit_video_cmd_edit_video_unmute; }, - MENU_ITEM { command=EVeiCmdEditVideoAdjustVolume; txt=qtn_vei_edit_video_cmd_edit_adj_vol; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoRemove; txt=qtn_vei_edit_video_cmd_edit_video_remove; }, - MENU_ITEM { command=EVeiCmdEditVideoDuplicate; txt=qtn_vei_edit_video_cmd_edit_duplicate; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_view_edit_audio_submenu //Options -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_edit_audio_submenu - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewEditVideoCutting; txt = qtn_vei_edit_video_cmd_edit_video_cutting; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditAudioMove; txt = qtn_vei_edit_video_cmd_edit_audio_move; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditAudioSetDuration; txt = qtn_ved_smenu_editt_dur; }, - MENU_ITEM { command=EVeiCmdEditVideoAdjustVolume; txt = qtn_vei_edit_video_cmd_edit_adj_vol; }, - MENU_ITEM { command=EVeiCmdEditVideoViewEditAudioRemove; txt = qtn_vei_edit_video_cmd_edit_audio_remove; }, - MENU_ITEM { command=EVeiCmdEditVideoDuplicate; txt = qtn_vei_edit_video_cmd_edit_duplicate; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_view_edit_start_transition_submenu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_edit_start_transition_submenu - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionFadeFromBlack; txt=qtn_vei_edit_video_cmd_edit_tran_fade_from_black; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionFadeFromWhite; txt=qtn_vei_edit_video_cmd_edit_tran_fade_from_white; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionNone; txt=qtn_vei_edit_video_cmd_edit_tran_no_tran; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_view_edit_middle_transition_submenu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_edit_middle_transition_submenu - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionCrossfade; txt=qtn_ved_smenu_editt_cf; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionWipeFromTop; txt=qtn_ved_smenu_editt_wipet; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionWipeFromBottom; txt=qtn_ved_smenu_editt_wipeb; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionWipeFromLeft; txt=qtn_ved_smenu_editt_wipel; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionWipeFromRight; txt=qtn_ved_smenu_editt_wiper; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionDipToBlack; txt=qtn_vei_edit_video_cmd_edit_tran_dip_to_black; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionDipToWhite; txt=qtn_vei_edit_video_cmd_edit_tran_dip_to_white; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionNone; txt=qtn_vei_edit_video_cmd_edit_tran_no_tran; } - }; - } - -//---------------------------------------------------- -// -// r_vei_edit_video_view_edit_end_transition_submenu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_edit_video_view_edit_end_transition_submenu - { - items= - { - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionFadeToBlack; txt=qtn_vei_edit_video_cmd_edit_tran_fade_to_black; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionFadeToWhite; txt=qtn_vei_edit_video_cmd_edit_tran_fade_to_white; }, - MENU_ITEM { command=EVeiCmdEditVideoViewTransitionNone; txt=qtn_vei_edit_video_cmd_edit_tran_no_tran; } - }; - } - -//---------------------------------------------------- -// -// r_vei_preview_menu -// ?description -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_preview_menu - { - items= - { - MENU_ITEM { command=EVeiCmdCutVideoViewPlay; txt=qtn_vei_cmd_play; }, - MENU_ITEM { command=EVeiCmdPlayViewStop; txt=text_softkey_stop; }, - MENU_ITEM { command=EVeiCmdCutVideoTakeSnapshot; txt = qtn_vei_cmd_take_snapshot; } - }; - } - -//---------------------------------------------------- -// -// r_vei_cut_video_menu -// ?description -// -//---------------------------------------------------- -// - -RESOURCE MENU_PANE r_vei_cut_video_view_menu - { - items= - { - MENU_ITEM { command=EVeiCmdCutVideoViewPlay; txt=qtn_vei_cut_video_cmd_play; }, - MENU_ITEM { command=EVeiCmdCutVideoViewContinue; txt=qtn_vei_cut_video_cmd_continue; }, - MENU_ITEM { command=EVeiCmdCutVideoViewPlayMarked; txt=qtn_vei_cut_video_cmd_play_marked; }, - MENU_ITEM { command=EVeiCmdCutVideoViewMarkIn; txt=qtn_vei_cut_video_cmd_mark_in; }, - MENU_ITEM { command=EVeiCmdCutVideoViewMarkOut; txt=qtn_vei_cut_video_cmd_mark_out; }, - MENU_ITEM { command=EVeiCmdCutVideoViewClearMarks; txt=qtn_vei_cut_video_cmd_clear_marks; cascade = r_vei_cut_video_view_menu_clear_marks; }, - MENU_ITEM { command=EVeiCmdCutVideoViewStop; txt=text_softkey_stop; }, - MENU_ITEM { command=EVeiCmdCutVideoTakeSnapshot; txt = qtn_vei_cmd_take_snapshot; }, - MENU_ITEM { command=EVeiCmdCutVideoViewHelp; txt=qtn_options_help; } - }; - } -//---------------------------------------------------- -// -// r_vei_videos_view_menu_mark -// Videos view mark submenu. -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_cut_video_view_menu_clear_marks - { - items= - { - MENU_ITEM { command=EVeiCmdCutVideoViewClearMarksIn; txt=qtn_vei_cut_video_cmd_clear_marks_in; }, - MENU_ITEM { command=EVeiCmdCutVideoViewClearMarksOut; txt=qtn_vei_cut_video_cmd_clear_marks_out; }, - MENU_ITEM { command=EVeiCmdCutVideoViewClearMarksInOut; txt=qtn_vei_cut_video_cmd_clear_marks_in_out; } - }; - } - - -//===================================================== -// -// ***** POPUPS ***** -// -// -//===================================================== - -// -// Start transtion -// -RESOURCE ARRAY r_vei_start_transition_list_box_array - { - items = - { - LBUF - { - txt = qtn_vei_list_query_select_tran_fade_from_black; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_fade_from_white; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_no_tran; - } - }; - } - -// -// Middle transtion -// -RESOURCE ARRAY r_vei_middle_transition_list_box_array - { - items = - { - LBUF - { - - txt = qtn_vei_list_query_select_tran_wipe_top; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_wipe_bottom; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_wipe_left; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_wipe_right; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_crossfade; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_dip_to_black; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_dip_to_white; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_no_tran; - } - }; - } - -// -// End transtion -// -RESOURCE ARRAY r_vei_end_transition_list_box_array - { - items = - { - LBUF - { - txt = qtn_vei_list_query_select_tran_fade_to_black; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_fade_to_white; - }, - LBUF - { - txt = qtn_vei_list_query_select_tran_no_tran; - } - }; - } - - -// -// Insert audio -// -RESOURCE ARRAY r_vei_insert_audio_list_box_array - { - items = - { - LBUF - { - txt = qtn_vei_list_query_insert_sound_type_sound; - }, - LBUF - { - txt = qtn_vei_list_query_insert_sound_type_new_audio; - - } - }; - } - -// -// Insert stuff to video track -// -RESOURCE ARRAY r_vei_insert_stuff_list_box_array - { - items = - { - LBUF - { - txt = qtn_ved_menu_insert_video; - }, - LBUF - { - txt = qtn_ved_menu_insert_image; - }, - LBUF - { - txt = qtn_ved_menu_insert_text; - } - }; - } - -// -// Edit video -// - -RESOURCE ARRAY r_vei_edit_video_list_box_array - { - items = - { - LBUF - { - txt = qtn_vei_edit_video_cmd_edit_video_cutting; - }, - LBUF - { - txt = qtn_vei_list_query_select_video_move; - }, - LBUF - { - txt = qtn_vei_list_query_select_video_color_effect; - }, - LBUF - { - txt = qtn_vei_list_query_select_video_slow_motion; - }, - LBUF - { - txt = qtn_vei_list_query_select_video_mute; - }, - LBUF - { - txt = qtn_vei_list_query_select_video_unmute; - }, - LBUF - { - txt = qtn_vei_edit_video_cmd_edit_adj_vol; - }, - LBUF - { - txt = qtn_vei_list_query_select_video_remove; - }, - LBUF - { - txt = qtn_vei_list_query_select_video_duplicate; - } - }; - } - -// -// Edit text style -// - -RESOURCE ARRAY r_vei_insert_text_list_box_array - { - items = - { - LBUF - { - txt = qtn_ved_menu_insert_text_t; - }, - LBUF - { - txt = qtn_ved_menu_insert_text_tf; - }, - LBUF - { - txt = qtn_ved_menu_insert_text_subt; - }, - LBUF - { - txt = qtn_ved_menu_insert_text_subtf; - }, - LBUF - { - txt = qtn_ved_menu_insert_text_credit; - } - }; - } - -// -// EDIT TEXT - Selectionkey menu, PopUpList -// - -RESOURCE ARRAY r_vei_edit_text_list_box_array - { - items = - { - LBUF - { - txt = qtn_ved_smenu_editt_move; - }, - LBUF - { - txt = qtn_ved_smenu_editt_remove; - }, - LBUF - { - txt = qtn_ved_smenu_editt_dur; - }, - LBUF - { - txt = qtn_ved_smenu_editt_text; - }, - LBUF - { - txt = qtn_ved_smenu_editt_color; - }, - LBUF - { - txt = qtn_ved_smenu_editt_bg; - }, - LBUF - { - txt = qtn_ved_smenu_editt_color_effect; - }, - LBUF - { - txt = qtn_ved_smenu_editt_style; - }, - LBUF - { - txt = qtn_ved_smenu_editt_duplicate; - } - }; - } - -// -// EDIT IMAGE - Selectionkey menu, PopUpList -// - -RESOURCE ARRAY r_vei_edit_image_list_box_array - { - items = - { - LBUF - { - txt = qtn_ved_smenu_editi_move; - }, - LBUF - { - txt = qtn_ved_smenu_editi_remove; - }, - LBUF - { - txt = qtn_ved_menu_editt_dur; - }, - LBUF - { - txt = qtn_ved_smenu_editi_bg; - }, - LBUF - { - txt = qtn_ved_smenu_editi_color_effect; - }, - LBUF - { - txt = qtn_ved_smenu_editi_duplicate; - } - }; - } - -// -// EDIT AUDIO - Selectionkey menu, PopUpList -// - -RESOURCE ARRAY r_vei_edit_audio_list_box_array - { - items = - { - LBUF - { - txt = qtn_vei_list_query_select_video_cut; - }, - LBUF - { - txt = qtn_vei_list_query_select_video_move; - }, - LBUF - { - txt = qtn_ved_menu_editt_dur; - }, - LBUF - { - txt = qtn_vei_edit_video_cmd_edit_adj_vol; - }, - LBUF - { - txt = qtn_vei_list_query_select_video_remove; - }, - LBUF - { - txt = qtn_vei_list_query_select_video_duplicate; - } - }; - } - -//---------------------------------------------------- -// -// r_vei_titlescreen_background_listbox_array -// ?description -// -//---------------------------------------------------- -// -RESOURCE ARRAY r_vei_titlescreen_background_listbox_array - { - items = - { - LBUF - { - txt = qtn_ved_menu_editt_select_bg_image; - }, - LBUF - { - txt = qtn_ved_menu_editt_select_bg_color; - } - }; - } - -//---------------------------------------------------- -// -// r_vei_effect_list_box_array -// ?description -// -//---------------------------------------------------- -// -RESOURCE ARRAY r_vei_effect_list_box_array - { - items = - { - LBUF - { - txt = qtn_vei_list_query_select_effect_black_white; - }, - LBUF - { - txt = qtn_ved_menu_editt_select_bg_color; - }, - LBUF - { - txt = qtn_vei_list_query_select_effect_no_effect; - } - }; - } - -//---------------------------------------------------- -// -// ***** VIEW TITLES ****** -// -// -//---------------------------------------------------- -// -RESOURCE TITLE_PANE r_vei_edit_video_view_title_name - { - txt = qtn_vei_edit_video_title_edit_video; - } - -RESOURCE TITLE_PANE r_vei_preview_view_title_name - { - txt = qtn_vei_edit_preview_title_preview; - } - -RESOURCE TITLE_PANE r_vei_cutvideo_view_title_name - { - txt = qtn_vei_cut_video_title_cut_video; - } - -RESOURCE TITLE_PANE r_vei_settings_view_title_name - { - txt = qtn_vei_settings_title_settings; - } - -RESOURCE TITLE_PANE r_vei_trim_for_mms_view_title_name - { - txt = qtn_vei_trim_mms_title; - } - -RESOURCE TITLE_PANE r_vei_cutaudio_view_title_name - { - txt = qtn_vei_cut_audio_title; - } -RESOURCE TITLE_PANE r_vei_adjust_volume_view_title_name - { - txt = qtn_vei_edit_video_cmd_edit_adj_vol; - } -RESOURCE TITLE_PANE r_vei_audio_mix_view_title_name - { - txt = qtn_vei_edit_video_cmd_audio_mix; - } - - - -//===================================================== -// -// ***** RESOURCE DIALOGS ***** -// -// -//===================================================== - -//---------------------------------------------------- -// -// r_vei_wait_dialog -// -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_wait_dialog - { - flags = EAknWaitNoteFlags; - buttons = R_AVKON_SOFTKEYS_EMPTY; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control= AVKON_NOTE - { - layout = EWaitLayout; - singular_label = qtn_gen_note_inserting; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - animation = R_QGN_GRAF_WAIT_BAR_ANIM; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_vei_wait_dialog_processing -// -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_wait_dialog_processing - { - flags = EAknWaitNoteFlags; - buttons = R_AVKON_SOFTKEYS_EMPTY; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control= AVKON_NOTE - { - layout = EWaitLayout; - singular_label = qtn_ved_processing_for_mms; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - animation = R_QGN_GRAF_WAIT_BAR_ANIM; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_vei_wait_dialog_inserting_video -// -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_wait_dialog_inserting_video - { - flags = EAknWaitNoteFlags; - buttons = R_AVKON_SOFTKEYS_EMPTY; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control= AVKON_NOTE - { - layout = EWaitLayout; - singular_label = qtn_ved_inserting_video; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - animation = R_QGN_GRAF_WAIT_BAR_ANIM; - }; - } - }; - } -//---------------------------------------------------- -// -// r_vei_wait_dialog_inserting_image -// -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_wait_dialog_inserting_image - { - flags = EAknWaitNoteFlags; - buttons = R_AVKON_SOFTKEYS_EMPTY; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control= AVKON_NOTE - { - layout = EWaitLayout; - singular_label = qtn_ved_inserting_image; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - animation = R_QGN_GRAF_WAIT_BAR_ANIM; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_confirmation_query -// Confirmation query -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_confirmation_query - { - flags=EGeneralQueryFlags; - buttons=R_AVKON_SOFTKEYS_YES_NO; - items= - { - DLG_LINE - { - type=EAknCtQuery; - id=EGeneralQuery; - control= AVKON_CONFIRMATION_QUERY - { - layout = EConfirmationLayout; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_vei_confirmation_query_cancel_textinsert -// Confirmation query -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_confirmation_query_cancel_textinsert - { - flags=EGeneralQueryFlags; - buttons=R_AVKON_SOFTKEYS_OK_EMPTY; - items= - { - DLG_LINE - { - type=EAknCtQuery; - id=EGeneralQuery; - control= AVKON_CONFIRMATION_QUERY - { - layout = EConfirmationLayout; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_progress_note -// Progress note -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_progress_note_with_cancel - { - flags = EAknProgressNoteFlags; - buttons = R_AVKON_SOFTKEYS_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control = AVKON_NOTE - { - layout = EProgressLayout; -// singular_label = qtn_vei_progress_note_processing; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - }; - } - }; - } -//---------------------------------------------------- -// -// r_videoeditor_progress_note -// Progress note -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_progress_note - { - flags = EAknProgressNoteFlags; - buttons = R_AVKON_SOFTKEYS_EMPTY; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control = AVKON_NOTE - { - layout = EProgressLayout; - singular_label = qtn_vei_progress_note_processing; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - }; - } - }; - } - -/** P L A Y V I E W */ - -//---------------------------------------------------- -// -// r_vei_softkeys_pause_stop -// CBA for pause and back softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_preview_pause_back - { - buttons = - { - CBA_BUTTON - { - id = EVeiCmdPlayViewPause; - txt = text_softkey_pause; - }, - CBA_BUTTON - { - id = EAknSoftkeyBack; - txt = text_softkey_back; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_play_stop -// CBA for play and stop softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_continue_stop //7 - { - buttons = - { - CBA_BUTTON - { - id = EVeiCmdCutVideoViewContinue; - txt = qtn_vei_record; - }, - CBA_BUTTON - { - id=EVeiCmdCutVideoViewStop; - txt = text_softkey_stop; - } - }; - } - -RESOURCE VOLUME r_vei_volume_control - { - flags = ENaviPaneVolumeControl; - value = 5; - } - -//---------------------------------------------------- -// -// r_vei_softkeys_pause_stop -// CBA for pause and stop softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_pause_stop - { - buttons = - { - CBA_BUTTON - { - id = EVeiCmdPlayViewPause; - txt = text_softkey_pause; - }, - CBA_BUTTON - { - id=EVeiCmdPlayViewStop; - txt = text_softkey_stop; - } - }; - } - -RESOURCE CBA r_vei_softkeys_record_cancel - { - buttons = - { - CBA_BUTTON - { - id = EVeiCmdEditVideoViewRecord; - txt = qtn_vei_record; - }, - CBA_BUTTON - { - id=EVeiCmdEditVideoViewRecordCancel; - txt = text_softkey_cancel; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_options_done -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_options_done //3 - { - buttons = - { - CBA_BUTTON - { - id = EAknSoftkeyOptions; - txt = text_softkey_option; - }, - CBA_BUTTON - { - id = EVeiCmdCutVideoViewDone; - txt = text_softkey_done; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_empty_out -// CBA for options/out softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_empty_out //6 - { - buttons = - { - CBA_BUTTON - { - id=EVeiCmdCutVideoViewStop; - txt = text_softkey_stop; - }, - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkOut; - //txt = qtn_vei_cut_video_cmd_mark_out; - txt = qtn_vei_mark_out; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_in_out -// CBA for in out softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_in_out //5 - { - buttons = - { - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkIn; - //txt = qtn_vei_cut_video_cmd_mark_in; - txt = qtn_vei_mark_in; - }, - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkOut; - //txt = qtn_vei_cut_video_cmd_mark_out; - txt = qtn_vei_mark_out; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_in_empty -// CBA for options/out softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_in_empty //4 - { - buttons = - { - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkIn; - //txt = qtn_vei_cut_video_cmd_mark_in; - txt = qtn_vei_mark_in; - }, - CBA_BUTTON - { - id=EVeiCmdCutVideoViewStop; - txt = text_softkey_stop; - } - }; - } -//---------------------------------------------------- -// -// r_vei_softkeys_preview_play_back -// CBA for play/back softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_preview_play_back - { - buttons = - { - CBA_BUTTON - { - id = EVeiCmdCutVideoViewPlay; - txt = qtn_vei_cmd_play; - }, - CBA_BUTTON - { - id = EAknSoftkeyBack; - txt = text_softkey_back; - } - }; - } - - - -//---------------------------------------------------------------------------- -// -// r_vei_setting_item_list -// Settings item list for application settings. -// -//---------------------------------------------------------------------------- -// -RESOURCE AVKON_SETTING_ITEM_LIST r_vei_setting_item_list - { - flags = EAknSettingPageNoOrdinalDisplayed; // Numbers not shown on left. - title = qtn_vei_settings_title_settings; - items = - { - AVKON_SETTING_ITEM - { - identifier = EVeiVideoNameSettingItem; - name = qtn_vei_settings_label1_default_movie_name; - setting_page_resource = r_vei_settings_view_video_page; - }, - AVKON_SETTING_ITEM - { - identifier = EVeiSnapshotNameSettingItem; - setting_page_resource = r_vei_settings_view_snapshot_page; - name = qtn_vei_settings_label2_default_snapshot_name; - }, - AVKON_SETTING_ITEM - { - identifier = EVeiSaveQualitySettingItem; - name = qtn_vei_setting_item_save_quality; - setting_page_resource = r_vei_setting_page_save_quality; - associated_resource = r_vei_save_quality_popup_setting_texts; - }, - AVKON_SETTING_ITEM - { - identifier = EVeiMemoryInUseSettingItem; - name = qtn_vei_settings_label3_memory_in_use; - } - }; - } - -//----------------------------------------------------------------------------- -// -// r_vei_settings_view_video_page -// Page for setting the default video name. -// -//----------------------------------------------------------------------------- -// -RESOURCE AVKON_SETTING_PAGE r_vei_settings_view_video_page - { - label = qtn_vei_settings_label1_default_movie_name; - type = EEikCtEdwin; - editor_resource_id = r_vei_text_editor; - } - -//----------------------------------------------------------------------------- -// -// r_vei_settings_view_snapshot_page -// Page for setting the default snapshot name. -// -//----------------------------------------------------------------------------- -// -RESOURCE AVKON_SETTING_PAGE r_vei_settings_view_snapshot_page - { - label = qtn_vei_settings_label2_default_snapshot_name; - type = EEikCtEdwin; - editor_resource_id = r_vei_text_editor; - } - -//----------------------------------------------------------------------------- -// -// r_vei_text_editor -// General text editor for setting pages. -// -//----------------------------------------------------------------------------- -// -RESOURCE EDWIN r_vei_text_editor - { - maxlength = 126; - } - -//---------------------------------------------------- -// -// r_vei_setting_page_save_quality -// -// -//---------------------------------------------------- -// -RESOURCE AVKON_SETTING_PAGE r_vei_setting_page_save_quality - { - label= qtn_vei_setting_item_save_quality; - type = EAknCtPopupSettingList; - editor_resource_id = r_vei_editor_save_quality; - } - -//---------------------------------------------------- -// -// r_settingslist_hints_popup_setting_list -// popup setting list for the hint item of the -// setting list -// -//---------------------------------------------------- -// -RESOURCE POPUP_SETTING_LIST r_vei_editor_save_quality - { - } - -//---------------------------------------------------- -// -// r_settingslist_hints_popup_setting_texts -// popped up and non-popped up texts for the hint -// item of the setting list -// -//---------------------------------------------------- -// -RESOURCE AVKON_POPUP_SETTING_TEXTS r_vei_save_quality_popup_setting_texts - { - setting_texts_resource = r_vei_save_quality_texts; - popped_up_texts_resource = r_vei_save_quality_popup_texts; - } - -//---------------------------------------------------- -// -// r_vei_save_quality_texts -// non-popped up texts for the hint -// item of the setting list -// -//---------------------------------------------------- -// -RESOURCE ARRAY r_vei_save_quality_texts - { - items = - { - AVKON_ENUMERATED_TEXT - { - value = 0; - text = qtn_vei_save_quality_auto; - }, - AVKON_ENUMERATED_TEXT - { - value = 1; - text = qtn_vei_save_quality_mms; - }, - AVKON_ENUMERATED_TEXT - { - value = 2; - text = qtn_vei_save_quality_medium; - }, - AVKON_ENUMERATED_TEXT - { - value = 3; - text = qtn_vei_save_quality_best; - } - - }; - } - -//---------------------------------------------------- -// -// r_vei_save_quality_popup_texts -// popped up texts for the hint -// item of the setting list -// -//---------------------------------------------------- -// -RESOURCE ARRAY r_vei_save_quality_popup_texts - { - items = - { - LBUF - { - txt = qtn_vei_save_quality_auto; - }, - LBUF - { - txt = qtn_vei_save_quality_mms; - }, - LBUF - { - txt = qtn_vei_save_quality_medium; - }, - LBUF - { - txt = qtn_vei_save_quality_best; - } - }; - } - - - -//----------------------------------------------------------------------------- -// -// r_ved_left_right_silent_skey_list -// Key sound definition, disables the long and repeat key press sounds for -// the left and righ navi-keys. -// -//----------------------------------------------------------------------------- -// -RESOURCE AVKON_SKEY_LIST r_ved_left_right_silent_skey_list - { - list = - { - AVKON_SKEY_INFO - { - key = EStdKeyRightArrow; - sid = EAvkonSIDNoSound; - type = ESKeyTypeLong; - }, - AVKON_SKEY_INFO - { - key = EStdKeyRightArrow; - sid = EAvkonSIDNoSound; - type = ESKeyTypeRepeat; - }, - AVKON_SKEY_INFO - { - key = EStdKeyLeftArrow; - sid = EAvkonSIDNoSound; - type =ESKeyTypeLong; - }, - AVKON_SKEY_INFO - { - key = EStdKeyLeftArrow; - sid = EAvkonSIDNoSound; - type =ESKeyTypeRepeat; - } - }; - } - - - - -RESOURCE AVKON_LIST_QUERY r_vei_titlescreen_background_list_query - { - items = - { - AVKON_LIST_QUERY_DLG_LINE - { - control = AVKON_LIST_QUERY_CONTROL - { - listtype = EAknCtSinglePopupMenuListBox; - heading = qtn_ved_smenu_editt_select_heading_background; - listbox = AVKON_LIST_QUERY_LIST - { - array_id = r_vei_titlescreen_background_listbox_array; - }; - }; - } - }; - } - -// ============================== ANIMATION =================================== -RESOURCE BMPANIM_DATA r_vei_crossfade_animation - { - frameinterval = 50; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_crossfade_animation_array; - } - -RESOURCE ARRAY r_vei_crossfade_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade01; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade01_mask; - }, - BMPANIM_FRAME - { - time = 100; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade02; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade02_mask; - }, - BMPANIM_FRAME - { - time = 100; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade03; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade03_mask; - }, - BMPANIM_FRAME - { - time = 100; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade04; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade04_mask; - }, - BMPANIM_FRAME - { - time = 100; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade05; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade05_mask; - }, - BMPANIM_FRAME - { - time = 100; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade06; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade06_mask; - }, - BMPANIM_FRAME - { - time = 100; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade07; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade07_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade08; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_crossfade08_mask; - } - }; - } - -RESOURCE BMPANIM_DATA r_vei_fade_to_black_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_fade_to_black_animation_array; - } - -RESOURCE ARRAY r_vei_fade_to_black_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack1; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack1_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack2; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack2_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack3; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack3_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack4; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack4_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack5; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack5_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack6; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack6_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack7; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack7_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack8; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetoblack8_mask; - } - }; - } - -RESOURCE BMPANIM_DATA r_vei_fade_from_black_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_fade_from_black_animation_array; - } - -RESOURCE ARRAY r_vei_fade_from_black_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack1; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack1_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack2; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack2_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack3; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack3_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack4; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack4_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack5; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack5_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack6; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack6_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack7; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack7_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack8; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromblack8_mask; - } - }; - } - -RESOURCE BMPANIM_DATA r_vei_fade_from_white_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_fade_from_white_animation_array; - } - -RESOURCE ARRAY r_vei_fade_from_white_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite1; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite1_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite2; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite2_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite3; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite3_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite4; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite4_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite5; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite5_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite6; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite6_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite7; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite7_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite8; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadefromwhite8_mask; - } - }; - } - - -RESOURCE BMPANIM_DATA r_vei_fade_to_white_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_fade_to_white_animation_array; - } - -RESOURCE ARRAY r_vei_fade_to_white_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite1; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite1_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite2; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite2_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite3; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite3_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite4; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite4_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite5; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite5_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite6; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite6_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite7; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite7_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite8; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_fadetowhite8_mask; - } - }; - } - -RESOURCE BMPANIM_DATA r_vei_wipe_left_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_wipe_left_animation_array; - } - -RESOURCE ARRAY r_vei_wipe_left_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft1; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft1_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft2; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft2_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft3; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft3_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft4; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft4_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft5; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft5_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft6; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft6_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft7; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipeleft7_mask; - } - }; - } - - -RESOURCE BMPANIM_DATA r_vei_wipe_right_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_wipe_right_animation_array; - } - -RESOURCE ARRAY r_vei_wipe_right_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight1; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight1_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight2; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight2_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight3; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight3_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight4; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight4_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight5; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight5_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight6; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight6_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight7; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wiperight7_mask; - } - }; - } - -RESOURCE BMPANIM_DATA r_vei_wipe_bottom_to_top_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_wipe_bottom_to_top_animation_array; - } - -RESOURCE ARRAY r_vei_wipe_bottom_to_top_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop1; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop1_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop2; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop2_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop3; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop3_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop4; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop4_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop5; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop5_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop6; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop6_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop7; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop7_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop8; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop8_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop9; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipebototop9_mask; - } - }; - } - - -RESOURCE BMPANIM_DATA r_vei_wipe_top_to_bottom_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_wipe_top_to_bottom_animation_array; - } - -RESOURCE ARRAY r_vei_wipe_top_to_bottom_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo1; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo1_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo2; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo2_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo3; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo3_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo4; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo4_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo5; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo5_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo6; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo6_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo7; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo7_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo8; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo8_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo9; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_wipetoptobo9_mask; - } - }; - } - -RESOURCE BMPANIM_DATA r_vei_dip_to_black_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_dip_to_black_animation_array; - } - -RESOURCE ARRAY r_vei_dip_to_black_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack01; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack01_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack02; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack02_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack03; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack03_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack04; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack04_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack05; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack05_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack06; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack06_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack07; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack07_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack08; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack08_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack09; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack09_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack10; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack10_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack11; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack11_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack12; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack12_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack13; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptoblack13_mask; - } - }; - } - -RESOURCE BMPANIM_DATA r_vei_dip_to_white_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_vei_dip_to_white_animation_array; - } - -RESOURCE ARRAY r_vei_dip_to_white_animation_array - { - items = - { - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite01; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite01_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite02; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite02_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite03; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite03_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite04; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite04_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite05; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite05_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite06; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite06_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite07; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite07_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite08; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite08_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite09; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite09_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite10; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite10_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite11; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite11_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite12; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite12_mask; - }, - BMPANIM_FRAME - { - time = 500; - bmpid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite13; - maskid = EMbmManualvideoeditorQgn_graf_ve_trans_diptowhite13_mask; - } - }; - } -// ============================== NOTE STRINGS ================================ - -//----------------------------------------------------------------------------- -// -// r_ved_mmc_not_inserted -// Information note text, shown when memory card is not accessible. -// -//----------------------------------------------------------------------------- -// -RESOURCE TBUF r_ved_mmc_not_inserted - { - buf = qtn_ved_mmc_not_inserted; - } - - -//----------------------------------------------------------------------------- -// -// r_vei_illegal_filename -// Warning note text, used when user has entered illegal file name, for -// example in Settings view. -// -//----------------------------------------------------------------------------- -// -RESOURCE TBUF r_vei_illegal_filename - { - buf = qtn_fldr_illegal_characters; - } - - -//----------------------------------------------------------------------------- -// -// r_vei_unsuitable_filename -// Warning note text, used when user has entered illegal file name, for -// example in Settings view. -// -//----------------------------------------------------------------------------- -// -RESOURCE TBUF r_vei_unsuitable_filename - { - buf = qtn_fldr_bad_file_name; - } - - -//----------------------------------------------------------------------------- -// -// r_ved_mmc_not_inserted -// Progress note text, used when the movie is processed for MMS composer. -// -//----------------------------------------------------------------------------- -// -RESOURCE TBUF r_ved_processing_for_mms - { - buf = qtn_ved_processing_for_mms; - } - - -// ============================ MAIN PANE STRINGS ============================= - -//----------------------------------------------------------------------------- -// -// r_ved_thumbnail_start_text -// Main pane text above the thumbnail which shows the starting point for MMS -// trimming. Used in 'Trim for MMS' view. -// -//----------------------------------------------------------------------------- -// -RESOURCE TBUF r_ved_thumbnail_start_text - { - buf = qtn_ved_trim_start; - } - - -//----------------------------------------------------------------------------- -// -// r_ved_thumbnail_end_text -// Main pane text above the thumbnail which shows the ending point for MMS -// trimming. Used in 'Trim for MMS' view. -// -//----------------------------------------------------------------------------- -// -RESOURCE TBUF r_ved_thumbnail_end_text - { - buf = qtn_ved_trim_end; - } - - -// Time navi pane string (formats the shown time) -RESOURCE TBUF64 r_vei_navi_time { buf = qtn_time_prog_total_min_sec; } -RESOURCE TBUF256 r_vei_error_note { buf= qtn_err_eikon_general; } - -RESOURCE TBUF256 r_vei_move_video_navilabel { buf = qtn_vei_navilabel_move_video; } -RESOURCE TBUF64 r_vei_move_audio_navilabel { buf = qtn_vei_navilabel_move_audio; } -RESOURCE TBUF256 r_vei_confirm_exit_save { buf = qtn_vei_confirmation_note_quit_save; } -RESOURCE TBUF256 r_vei_confirm_overwrite { buf = qtn_fldr_overwrite_query; } - -// -// TRANSITION -// -RESOURCE TBUF64 r_vei_start_transition_effect_name_none { buf = qtn_vei_edit_video_main_tran_no; } -RESOURCE TBUF64 r_vei_start_transition_effect_name_fade_from_black { buf = qtn_vei_edit_video_main_tran_fade_from_black; } -RESOURCE TBUF64 r_vei_start_transition_effect_name_fade_from_white { buf = qtn_vei_edit_video_main_tran_fade_from_white; } -RESOURCE TBUF64 r_vei_middle_transition_effect_name_none { buf = qtn_vei_edit_video_main_tran_no; } -RESOURCE TBUF64 r_vei_middle_transition_effect_name_dip_to_black { buf = qtn_vei_edit_video_main_tran_dip_to_black; } -RESOURCE TBUF64 r_vei_middle_transition_effect_name_dip_to_white { buf = qtn_vei_edit_video_main_tran_dip_to_white; } -RESOURCE TBUF64 r_vei_middle_transition_effect_name_crossfade { buf = qtn_vei_edit_video_main_tran_crossfade; } -RESOURCE TBUF128 r_vei_middle_transition_effect_name_wipe_left { buf = qtn_vei_edit_video_main_tran_wipe_left; } -RESOURCE TBUF128 r_vei_middle_transition_effect_name_wipe_right { buf = qtn_vei_edit_video_main_tran_wipe_right; } -RESOURCE TBUF64 r_vei_middle_transition_effect_name_wipe_top { buf = qtn_vei_edit_video_main_tran_wipe_top; } -RESOURCE TBUF64 r_vei_middle_transition_effect_name_wipe_bottom { buf = qtn_vei_edit_video_main_tran_wipe_bottom; } -RESOURCE TBUF64 r_vei_end_transition_effect_name_none { buf = qtn_vei_edit_video_main_tran_no; } -RESOURCE TBUF64 r_vei_end_transition_effect_name_fade_to_black { buf = qtn_vei_edit_video_main_tran_fade_to_black; } -RESOURCE TBUF64 r_vei_end_transition_effect_name_fade_to_white { buf = qtn_vei_edit_video_main_tran_fade_to_white; } - -// -// NOTE -// -RESOURCE TBUF128 r_vei_note_video_saved { buf = qtn_vei_edit_video_note_saved; } -RESOURCE TBUF128 r_vei_note_snapshot_saved { buf = qtn_vei_note_snapshot_saved; } -RESOURCE TBUF128 r_vei_note_snapshot_taken_to_images { buf = qtn_vei_note_snapshot_taken_to_images; } -RESOURCE TBUF r_vei_note_confirmation_query_cancel_textinsert { buf = qtn_vei_confirm_note_cancel_textinsert; } - -// -// PROGRESS NOTE -// -RESOURCE TBUF64 r_vei_progress_note_saving { buf = qtn_gen_note_saving; } -RESOURCE TBUF64 r_vei_progress_note_cut { buf = qtn_vei_progress_note_preparing_to_cut; } -RESOURCE TBUF128 r_vei_progress_note_color_effect { buf = qtn_vei_progress_note_applying_color_effect; } -RESOURCE TBUF64 r_vei_progress_note_cutting_video { buf = qtn_vei_progress_note_cutting_video; } -RESOURCE TBUF128 r_vei_progress_note_saving_image { buf = qtn_ved_saving_snapshot; } -RESOURCE TBUF128 r_vei_progress_note_inserting_audio { buf = qtn_ved_inserting_audio; } -RESOURCE TBUF r_vei_progress_note_inserting_media { buf = qtn_ved_inserting_mult_media; } - -RESOURCE TBUF128 r_vei_video_failed { buf = qtn_vei_video_failed; } -RESOURCE TBUF64 r_vei_progress_note_send { buf = qtn_vei_progress_note_preparing_to_send; } -RESOURCE TBUF64 r_vei_remove_clip_query { buf = qtn_query_common_conf_remove; } - -RESOURCE TBUF r_vei_popup_select_effect_title { buf = qtn_vei_list_query_select_effect; } - -RESOURCE TBUF128 r_vei_navi_pane_duration { buf = qtn_vei_navi_change_audio_duration; } -RESOURCE TBUF256 r_vei_recording_failed { buf = qtn_vei_recording_failed; } - -RESOURCE TBUF128 r_vei_not_enough_space { buf = qtn_memlo_not_enough_memory; } -RESOURCE TBUF128 r_vei_memory_running_out { buf = qtn_memlo_memory_running_out; } -RESOURCE TBUF128 r_vei_progress_note_processing { buf = qtn_ved_processing_movie; } - - -// -// Main pane - Text descriptive name -// -RESOURCE TBUF256 r_vei_edit_view_title_name { buf = qtn_vei_edit_video_main_text_t; } -RESOURCE TBUF256 r_vei_edit_view_title_fading_name { buf = qtn_vei_edit_video_main_text_tf; } -RESOURCE TBUF256 r_vei_edit_view_subtitle_name { buf = qtn_vei_edit_video_main_text_subt; } -RESOURCE TBUF256 r_vei_edit_view_subtitle_fading_name { buf = qtn_vei_edit_video_main_text_subtf; } -RESOURCE TBUF256 r_vei_edit_view_credits_name { buf = qtn_vei_edit_video_main_text_credit; } - -RESOURCE TBUF128 r_vei_edit_view_no_video { buf = qtn_ved_edit_video_no_video; } -RESOURCE TBUF128 r_vei_edit_view_no_audio { buf = qtn_ved_edit_video_no_audio; } -RESOURCE TBUF64 r_vei_query_file_name { buf = qtn_vei_data_query_set_file_name; } - -// -// POPUP Titles -// -RESOURCE TBUF r_vei_popup_edit_image_title { buf = qtn_ved_menu_title_edit_image; } -RESOURCE TBUF r_vei_popup_edit_text_title { buf = qtn_ved_menu_title_edit_text; } -RESOURCE TBUF r_vei_popup_edit_video_title { buf = qtn_ved_menu_title_edit_video; } -RESOURCE TBUF r_vei_popup_edit_audio_title { buf = qtn_ved_menu_title_edit_audio; } -RESOURCE TBUF r_vei_popup_insert_audio_title { buf = qtn_vei_list_query_insert_sound_type; } -RESOURCE TBUF r_vei_popup_insert_stuff_title { buf = qtn_ved_menu_title_insert_video; } -RESOURCE TBUF r_vei_popup_select_text_style_title { buf = qtn_ved_smenu_heading_editt; } -RESOURCE TBUF64 r_vei_transtion_popup_title { buf = qtn_vei_list_query_select_tran_title; } - -// -// ERRORNOTES -// -RESOURCE TBUF r_vei_errornote_audio_inserting_failed { buf = qtn_ved_audio_insert_failed; } -RESOURCE TBUF r_vei_errornote_image_inserting_failed { buf = qtn_ved_image_insert_failed; } -RESOURCE TBUF r_vei_edit_view_new_audio { buf = qtn_vei_edit_video_main_new_audio; } - -RESOURCE TBUF r_vei_warning_note_inserting_failed { buf = qtn_ved_inserting_failed_continue; } - -// SETTINGS -RESOURCE TBUF128 r_vei_settings_view_settings_item_value { buf = qtn_vei_settings_value1_movie; } -RESOURCE TBUF128 r_vei_settings_view_settings_item2_value { buf = qtn_vei_settings_value2_snapshot; } - - -// Layouts -/* -//----------------------------------------------------------------------------- -// -// r_ved_start_text_pane_portrait -// Layout for 'Start:' text. -// -//----------------------------------------------------------------------------- -// -RESOURCE AVKON_LAYOUT_TEXT r_ved_start_text_pane_portrait - { - font = EAknLogicalFontPrimaryFont; - C = 215; - l = 4; - r = 178; - B = 21; - W = 170; - J = ELayoutAlignLeft; - } - -//----------------------------------------------------------------------------- -// -// r_ved_end_text_pane_portrait -// Layout for 'End:' text. -// -//----------------------------------------------------------------------------- -// -RESOURCE AVKON_LAYOUT_TEXT r_ved_end_text_pane_portrait - { - font = EAknLogicalFontPrimaryFont; - C = 215; - l = 178; - r = 4; - B = 21; - W = 170; - J = ELayoutAlignLeft; - } - - -RESOURCE AVKON_LAYOUT_RECT r_ved_clip_thumbnail_start_pane_portrait - { - C = ELayoutEmpty; - l = 4; - t = 31; - r = ELayoutEmpty; - b = ELayoutEmpty; - W = 170; - H = 139; - } - -RESOURCE AVKON_LAYOUT_RECT r_ved_clip_thumbnail_end_pane_portrait - { - C = ELayoutEmpty; - l = 178; - t = 31; - r = 4; - b = 115; - W = 170; - H = 139; - } - -RESOURCE AVKON_LAYOUT_RECT r_ved_trim_timeline_pane_g1_portrait - { - C = 215; - l = 4; - t = 220; - r = ELayoutEmpty; - b = ELayoutEmpty; - W = 24; - H = 24; - } - -RESOURCE AVKON_LAYOUT_RECT r_ved_trim_timeline_pane_portrait - { - C = ELayoutEmpty; - l = 38; - t = 215; - r = ELayoutEmpty; - b = ELayoutEmpty; - W = 306; - H = 34; - } -*/ -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/ManualVideoEditor_caption.rss --- a/videditor/ManualVideoEditor/data/ManualVideoEditor_caption.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "manualvideoeditor.loc" -#include - -RESOURCE CAPTION_DATA -{ - caption=qtn_app_caption_string; - shortcaption=qtn_app_short_caption_string; -} diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/ManualVideoEditor_reg.rss --- a/videditor/ManualVideoEditor/data/ManualVideoEditor_reg.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include -#include - -UID2 KUidAppRegistrationResourceFile -UID3 0x10208A29 - -RESOURCE APP_REGISTRATION_INFO - { - app_file="ManualVideoEditor"; - localisable_resource_file = APP_RESOURCE_DIR"\\manualvideoeditor"; - localisable_resource_id = R_VEI_LOCALISABLE_APP_INFO; - hidden = KAppIsHidden; - embeddability = KAppEmbeddable; - launch = KAppLaunchInForeground; - } diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/help/VideoEditorHelp.cshlp.txt --- a/videditor/ManualVideoEditor/data/help/VideoEditorHelp.cshlp.txt Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ - -/* -* ============================================================================ -* Name : VideoEditorHelp.cshlp.txt -* Part of : Video Editor / ?Module_name -* Description : ?Description -* Version : %version: 2 % << Don't touch! Updated by Synergy at check-out. -* -* Copyright © 2007 Nokia. All rights reserved. -* This material, including documentation and any related computer -* programs, is protected by copyright controlled by Nokia. All -* rights are reserved. Copying, including reproducing, storing, -* adapting or translating, any or all of this material requires the -* prior written consent of Nokia. This material also contains -* confidential information which may not be disclosed to others -* without the prior written consent of Nokia. -* ============================================================================ -* Template version: 4.1 -*/ - - - - - - - 0x101FFA9C - - - - - - - - - VideoEditorHelp.rtf - - VideoEditorHelp.hlp - custom.xml - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/help/VideoEditorHelp.hlp Binary file videditor/ManualVideoEditor/data/help/VideoEditorHelp.hlp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/help/VideoEditorHelp.rtf --- a/videditor/ManualVideoEditor/data/help/VideoEditorHelp.rtf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -{\rtf1\ansi\ansicpg1252\uc1\deff1\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial{\*\falt Arial};}{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;} -{\f6\froman\fcharset0\fprq2{\*\panose 02020603040505020304}Tms Rmn{\*\falt Times New Roman};}{\f10\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f40\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;} -{\f48\froman\fcharset2\fprq2{\*\panose 05030102010509060703}Webdings;}{\f58\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f174\froman\fcharset238\fprq2 Times New Roman CE;}{\f175\froman\fcharset204\fprq2 Times New Roman Cyr;} -{\f177\froman\fcharset161\fprq2 Times New Roman Greek;}{\f178\froman\fcharset162\fprq2 Times New Roman Tur;}{\f179\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f180\froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f181\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f182\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f184\fswiss\fcharset238\fprq2 Arial CE{\*\falt Arial};}{\f185\fswiss\fcharset204\fprq2 Arial Cyr{\*\falt Arial};} -{\f187\fswiss\fcharset161\fprq2 Arial Greek{\*\falt Arial};}{\f188\fswiss\fcharset162\fprq2 Arial Tur{\*\falt Arial};}{\f189\fswiss\fcharset177\fprq2 Arial (Hebrew){\*\falt Arial};}{\f190\fswiss\fcharset178\fprq2 Arial (Arabic){\*\falt Arial};} -{\f191\fswiss\fcharset186\fprq2 Arial Baltic{\*\falt Arial};}{\f192\fswiss\fcharset163\fprq2 Arial (Vietnamese){\*\falt Arial};}{\f194\fmodern\fcharset238\fprq1 Courier New CE;}{\f195\fmodern\fcharset204\fprq1 Courier New Cyr;} -{\f197\fmodern\fcharset161\fprq1 Courier New Greek;}{\f198\fmodern\fcharset162\fprq1 Courier New Tur;}{\f199\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f200\fmodern\fcharset178\fprq1 Courier New (Arabic);} -{\f201\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f202\fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f574\fswiss\fcharset238\fprq2 Verdana CE;}{\f575\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f577\fswiss\fcharset161\fprq2 Verdana Greek;} -{\f578\fswiss\fcharset162\fprq2 Verdana Tur;}{\f581\fswiss\fcharset186\fprq2 Verdana Baltic;}{\f582\fswiss\fcharset163\fprq2 Verdana (Vietnamese);}{\f754\fswiss\fcharset238\fprq2 Arial Narrow CE;}{\f755\fswiss\fcharset204\fprq2 Arial Narrow Cyr;} -{\f757\fswiss\fcharset161\fprq2 Arial Narrow Greek;}{\f758\fswiss\fcharset162\fprq2 Arial Narrow Tur;}{\f761\fswiss\fcharset186\fprq2 Arial Narrow Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0; -\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128; -\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \snext0 Normal;}{ -\s1\ql \li0\ri0\sb360\sa240\keepn\widctlpar\nooverflow\faroman\outlinelevel0\rin0\lin0\itap0 \b\f1\fs32\lang2057\langfe1033\kerning28\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 1;}{\s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt -\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\nooverflow\faroman\outlinelevel1\rin0\lin0\rtlgutter\itap0 \b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 2;}{ -\s3\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \tqr\tx9072\nooverflow\faroman\outlinelevel2\rin0\lin0\rtlgutter\itap0 \b\f1\fs28\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 3;}{ -\s4\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqr\tx9072\nooverflow\faroman\outlinelevel3\rin0\lin0\rtlgutter\itap0 \b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 4;}{ -\s5\ql \li0\ri0\sa120\keepn\widctlpar\nooverflow\faroman\outlinelevel4\rin0\lin0\itap0 \b\f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 5;}{ -\s6\ql \li0\ri0\sb240\sa60\widctlpar\nooverflow\faroman\outlinelevel5\rin0\lin0\itap0 \i\f1\fs22\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 6;}{ -\s7\ql \li0\ri0\sb240\sa60\widctlpar\nooverflow\faroman\outlinelevel6\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 7;}{ -\s8\ql \li0\ri0\sb240\sa60\widctlpar\nooverflow\faroman\outlinelevel7\rin0\lin0\itap0 \i\f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 8;}{ -\s9\ql \li0\ri0\sb240\sa60\widctlpar\nooverflow\faroman\outlinelevel8\rin0\lin0\itap0 \i\f1\fs18\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 9;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\* -\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv -\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{\s15\ql \fi-284\li284\ri0\sa120\widctlpar\tx284{\*\pn \pnlvlblt\ilvl10\ls2047\pnrnot0 -\pnf3\pnstart1\pnindent283\pnhang {\pntxtb \'b7}}\nooverflow\faroman\ls2047\ilvl10\rin0\lin284\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext15 List Bullet;}{ -\s16\ql \li284\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin284\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext16 List Continue;}{\s17\ql \fi-284\li284\ri0\sa120\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0 -\pndec\pnstart1\pnindent283\pnhang {\pntxta .}}\nooverflow\faroman\ls2047\ilvl11\rin0\lin284\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext17 List Number;}{\*\cs18 \additive \super \sbasedon10 \ssemihidden -endnote reference;}{\s19\ql \fi-284\li568\ri0\sa120\widctlpar{\*\pn \pnlvlblt\ilvl10\ls2047\pnrnot0\pnf3\pnstart1\pnindent283\pnhang {\pntxtb \'b7}}\nooverflow\faroman\ls2047\ilvl10\rin0\lin568\itap0 -\f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext19 List Bullet 2;}{\s20\ql \li0\ri0\sb360\sa240\keepn\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \b\f1\fs32\cf9\lang2057\langfe1033\kerning28\cgrid\langnp2057\langfenp1033 -\sbasedon0 \snext20 Category UID;}{\*\cs21 \additive \b\f2\fs20 \sbasedon10 Key Name;}{\s22\ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\cf13\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext22 Synonyms;}{ -\s23\ql \fi-284\li284\ri0\sa120\widctlpar\tx284{\*\pn \pnlvlbody\ilvl0\ls2047\pnrnot0\pndec\pnf6 }\nooverflow\faroman\ls2047\rin0\lin284\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon17 \snext23 List Manual;}{ -\s24\ql \fi-284\li568\ri0\sa120\widctlpar{\*\pn \pnlvlbody\ilvl11\ls2047\pnrnot0\pndec\pnstart1\pnindent283\pnhang {\pntxta .}}\nooverflow\faroman\ls2047\ilvl11\rin0\lin568\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 -\sbasedon0 \snext24 List Number 2;}{\s25\ql \li566\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin566\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext25 List Continue 2;}{ -\s26\ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\cf11\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext26 Definition Term;}{\s27\ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 -\f1\fs20\cf11\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon26 \snext27 Definition Definition;}{\s28\ql \fi-283\li283\ri0\sa120\widctlpar{\*\pn \pnlvlblt\ilvl10\ls2047\pnrnot0\pnf10\pnstart1\pnindent283\pnhang {\pntxtb F}} -\nooverflow\faroman\ls2047\ilvl10\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext28 Tip;}{\s29\ql \fi-283\li283\ri0\sa120\widctlpar{\*\pn \pnlvlblt\ilvl10\ls2047\pnrnot0\pnf10\pnstart1\pnindent283\pnhang -{\pntxtb ?}}\nooverflow\faroman\ls2047\ilvl10\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon28 \snext29 Note;}{\s30\ql \fi-283\li283\ri0\sa120\widctlpar{\*\pn \pnlvlblt\ilvl10\ls2047\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb ~}}\nooverflow\faroman\ls2047\ilvl10\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon29 \snext30 Important;}{\s31\ql \fi-284\li568\ri0\sa120\widctlpar\tx284{\*\pn -\pnlvlbody\ilvl0\ls2047\pnrnot0\pndec\pnf6 }\nooverflow\faroman\ls2047\rin0\lin568\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon24 \snext31 List Manual 2;}{\s32\ql \li0\ri0\sa120\widctlpar -\tqc\tx4153\tqr\tx8306\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext32 footer;}{\s33\ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 -\i\f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext33 Comment;}{\*\cs34 \additive \b\f1\fs20 \sbasedon10 App Text;}{\*\cs35 \additive \scaps\f58\fs20\cf13 \sbasedon10 Graphic Link;}{\s36\ql \fi-283\li283\ri0\sa120\widctlpar -\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl10\ls2047\pnrnot0\pnf48\pnstart1\pnindent283\pnhang {\pntxtb \'a2}}\nooverflow\faroman\ls2047\ilvl10\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext36 -Context;}{\s37\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlblt\ilvl10\ls2047\pnrnot0\pnf48\pnstart1\pnindent283\pnhang {\pntxtb i}}\nooverflow\faroman\ls2047\ilvl10\rin0\lin283\itap0 -\f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext37 Index;}{\*\cs38 \additive \i\f1\fs20\ulnone\cf0\nosupersub \sbasedon10 Context Comment;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\listtable -{\list\listtemplateid-1008425822\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li643\jclisttab\tx643\lin643 }{\listname ;}\listid-129} -{\list\listtemplateid1404049864\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li643\jclisttab\tx643\lin643 }{\listname -;}\listid-125}{\list\listtemplateid-1401655024\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\fi-360\li360\jclisttab\tx360\lin360 }{\listname -;}\listid-120}{\list\listtemplateid-1370049202\listsimple{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li360\jclisttab\tx360\lin360 } -{\listname ;}\listid-119}{\list\listtemplateid-1236236044\listsimple{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\'01*;}{\levelnumbers;}}{\listname ;}\listid-2}}{\*\listoverridetable -{\listoverride\listid-119\listoverridecount0\ls1}{\listoverride\listid-120\listoverridecount0\ls2}{\listoverride\listid-125\listoverridecount0\ls3}{\listoverride\listid-129\listoverridecount0\ls4}{\listoverride\listid-119\listoverridecount0\ls5} -{\listoverride\listid-120\listoverridecount0\ls6}{\listoverride\listid-125\listoverridecount0\ls7}{\listoverride\listid-129\listoverridecount0\ls8}{\listoverride\listid-119\listoverridecount0\ls9}{\listoverride\listid-120\listoverridecount0\ls10} -{\listoverride\listid-125\listoverridecount0\ls11}{\listoverride\listid-129\listoverridecount0\ls12}{\listoverride\listid-119\listoverridecount0\ls13}{\listoverride\listid-120\listoverridecount0\ls14}{\listoverride\listid-125\listoverridecount0\ls15} -{\listoverride\listid-129\listoverridecount0\ls16}{\listoverride\listid-119\listoverridecount0\ls17}{\listoverride\listid-120\listoverridecount0\ls18}{\listoverride\listid-125\listoverridecount0\ls19}{\listoverride\listid-129\listoverridecount0\ls20} -{\listoverride\listid-119\listoverridecount0\ls21}{\listoverride\listid-120\listoverridecount0\ls22}{\listoverride\listid-125\listoverridecount0\ls23}{\listoverride\listid-129\listoverridecount0\ls24}{\listoverride\listid-2\listoverridecount1{\lfolevel -\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3934 ?;}{\levelnumbers;}\f48\fbias0 \fi-283\li283\lin283 }}\ls25}{\listoverride\listid-2 -\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3991 ?;}{\levelnumbers;}\f48\fbias0 \fi-283\li283\lin283 }}\ls26} -{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext\'01\u-3970 ?;}{\levelnumbers;}\f48\fbias0 -\fi-283\li283\lin283 }}\ls27}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent283{\leveltext -\'01\u-4026 ?;}{\levelnumbers;}\f10\fbias0 \fi-283\li283\lin283 }}\ls28}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelold\levelspace0 -\levelindent283{\leveltext\'01\u-4033 ?;}{\levelnumbers;}\f10\fbias0 \fi-283\li283\lin283 }}\ls29}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 -\levelold\levelspace0\levelindent283{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-283\li283\lin283 }}\ls30}}{\*\rsidtbl \rsid4339534\rsid4791705\rsid4999843\rsid5054838\rsid6100133\rsid6823436\rsid8657082\rsid9900545\rsid10618944\rsid11021345 -\rsid11672662\rsid12463523}{\*\generator Microsoft Word 11.0.6359;}{\info{\title Author: }{\author Mikko Nieminen}{\operator Mikko Nieminen}{\creatim\yr2004\mo12\dy22\hr13\min54}{\revtim\yr2005\mo2\dy23\hr9\min9}{\version11}{\edmins74}{\nofpages2} -{\nofwords170}{\nofchars970}{\*\company Dell Computer Corporation}{\nofcharsws1138}{\vern24703}}\paperw11907\paperh16840\margl567\margr7371\margt567\margb567 -\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow1\dgvshow0 -\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\bdrrlswsix\nolnhtadjtbl\oldas\viewnobound1\nojkernpunct\rsidroot4339534 \fet0{\*\template G:\\epoc32\\cshlpcmp_template\\cshelp2000.dot}{\*\ftnsep \pard\plain -\ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid4791705 \chftnsep -\par }}{\*\ftnsepc \pard\plain \ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid4791705 \chftnsepc -\par }}{\*\aftnsep \pard\plain \ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid4791705 \chftnsep -\par }}{\*\aftnsepc \pard\plain \ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid4791705 \chftnsepc -\par }}\sectd \psz9\sbknone\linex0\endnhere\sectdefaultcl\sftnbj {\footer \pard\plain \qc \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\field{\*\fldinst {\insrsid4339534 PAGE } -}{\fldrslt {\lang1024\langfe1024\noproof\insrsid10618944 2}}}{\insrsid4339534 -\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}} -{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8 -\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \s33\ql \li0\ri0\sa120\widctlpar\nooverflow\faroman\rin0\lin0\itap0 -\i\f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid4339534 Author: }{\insrsid4999843 Mikko.Nieminen@geracap.fi}{\insrsid4339534 -\par Date: }{\insrsid4791705 22.}{\insrsid6823436 02.2005}{\insrsid4339534 -\par Version: }{\insrsid6823436 1.1}{\insrsid4339534 -\par }{\insrsid4999843 Description: This help source file is intended only for testing the Video Editor context/view sensitive helps. -\par }\pard\plain \s1\ql \li0\ri0\sb360\sa240\keepn\widctlpar\nooverflow\faroman\outlinelevel0\rin0\lin0\itap0 \b\f1\fs32\lang2057\langfe1033\kerning28\cgrid\langnp2057\langfenp1033 {\insrsid4791705 Video editor}{\insrsid4339534 -\par }\pard\plain \s20\ql \li0\ri0\sb360\sa240\keepn\widctlpar\nooverflow\faroman\rin0\lin0\itap0 \b\f1\fs32\cf9\lang2057\langfe1033\kerning28\cgrid\langnp2057\langfenp1033 {\insrsid4791705\charrsid4791705 0x101FFA9C}{\insrsid4339534\charrsid4791705 -\par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072\nooverflow\faroman\outlinelevel1\rin0\lin0\rtlgutter\itap0 \b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 { -\insrsid4791705 Trim for MMS}{\insrsid4339534 -\par {\pntext\pard\plain\s36 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid12463523 \loch\af48\dbch\af0\hich\f48 \'a2\tab}}\pard\plain \s36\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls25\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb \'a2}}\nooverflow\faroman\ls25\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid12463523 VedHlpTrimForMmsView}{\insrsid4339534 -\par {\pntext\pard\plain\s37 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid12463523 \loch\af48\dbch\af0\hich\f48 \'69\tab}}\pard\plain \s37\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls26\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb i}}\nooverflow\faroman\ls26\rin0\lin283\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid12463523 Trimming videos}{\insrsid4339534 -\par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid11021345 This topic is }{\insrsid9900545 for}{\insrsid11021345 }{ -\b\insrsid11021345 Trim for MMS}{\insrsid11021345 view.}{\insrsid4339534\charrsid11021345 -\par {\pntext\pard\plain\s15 \f3\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid11021345\charrsid8657082 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\ql \fi-284\li284\ri0\sa120\widctlpar\tx284{\*\pn \pnlvlbody\ilvl0\ls30\pnrnot0 -\pnf3\pnstart1\pnindent283\pnhang {\pntxtb \'b7}}\nooverflow\faroman\ls30\rin0\lin284\itap0\pararsid12463523 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid11021345\charrsid8657082 -"Aina ku m\'e4 hypp\'e4\'e4n ja p\'e4\'e4sen siihen hyppyrin nokalle, niin mulle tulee sellanen "bon voyage" -tunne, siis ett\'e4 m\'e4 oon kokenu t\'e4n joskus aikasemminkin."}{\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid11021345 }{ -\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid8657082 -}{\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid11021345 M. Nyk\'e4nen}{\lang1035\langfe1033\langnp1035\insrsid4791705\charrsid9900545 -\par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\outlinelevel1\rin0\lin0\rtlgutter\itap0\pararsid9900545 -\b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid9900545 Settings -\par {\pntext\pard\plain\s36 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid9900545 \loch\af48\dbch\af0\hich\f48 \'a2\tab}}\pard\plain \s36\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls25\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb \'a2}}\nooverflow\faroman\ls25\rin0\lin283\itap0\pararsid9900545 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid9900545 VedHlpSettingsView -\par {\pntext\pard\plain\s37 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid9900545 \loch\af48\dbch\af0\hich\f48 \'69\tab}}\pard\plain \s37\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls26\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb i}}\nooverflow\faroman\ls26\rin0\lin283\itap0\pararsid9900545 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid9900545 Settings -\par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0\pararsid9900545 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid9900545 This topic is for }{\b\insrsid9900545 -Settings}{\insrsid9900545 view.}{\insrsid9900545\charrsid11021345 -\par {\pntext\pard\plain\s15 \f3\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid9900545\charrsid9900545 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\ql \fi-284\li284\ri0\sa120\widctlpar\tx284{\*\pn \pnlvlbody\ilvl0\ls30\pnrnot0 -\pnf3\pnstart1\pnindent283\pnhang {\pntxtb \'b7}}\nooverflow\faroman\ls30\rin0\lin284\itap0\pararsid9900545 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid9900545\charrsid9900545 -"Kaikki on allright ainakin minulla. En tied\'e4, onko muilla."}{\lang1035\langfe1033\langnp1035\insrsid9900545\charrsid9900545 }{\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid9900545 -M. Nyk\'e4nen}{ -\lang1035\langfe1033\langnp1035\insrsid9900545\charrsid9900545 -\par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\outlinelevel1\rin0\lin0\rtlgutter\itap0\pararsid5054838 -\b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid5054838 Edit video -\par {\pntext\pard\plain\s36 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid5054838 \loch\af48\dbch\af0\hich\f48 \'a2\tab}}\pard\plain \s36\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls25\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb \'a2}}\nooverflow\faroman\ls25\rin0\lin283\itap0\pararsid5054838 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid5054838 VedHlpEditVideoView -\par {\pntext\pard\plain\s37 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid5054838 \loch\af48\dbch\af0\hich\f48 \'69\tab}}\pard\plain \s37\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls26\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb i}}\nooverflow\faroman\ls26\rin0\lin283\itap0\pararsid5054838 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid5054838 Editing videos -\par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0\pararsid5054838 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid5054838 This topic is for }{\b\insrsid5054838 -Edit video}{\insrsid5054838 view.}{\insrsid5054838\charrsid11021345 -\par {\pntext\pard\plain\s15 \f3\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid5054838\charrsid5054838 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\ql \fi-284\li284\ri0\sa120\widctlpar\tx284{\*\pn \pnlvlbody\ilvl0\ls30\pnrnot0 -\pnf3\pnstart1\pnindent283\pnhang {\pntxtb \'b7}}\nooverflow\faroman\ls30\rin0\lin284\itap0\pararsid5054838 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid5054838\charrsid5054838 -"Jokainen ts\'e4\'e4nssi on mahdollisuus!"}{\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid5054838 -M. Nyk\'e4nen}{\lang1035\langfe1033\langnp1035\insrsid5054838\charrsid9900545 -\par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\outlinelevel1\rin0\lin0\rtlgutter\itap0\pararsid5054838 -\b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid5054838 Cut video -\par {\pntext\pard\plain\s36 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid5054838 \loch\af48\dbch\af0\hich\f48 \'a2\tab}}\pard\plain \s36\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls25\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb \'a2}}\nooverflow\faroman\ls25\rin0\lin283\itap0\pararsid5054838 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid5054838 VedHlpCutVideoView -\par {\pntext\pard\plain\s37 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid5054838 \loch\af48\dbch\af0\hich\f48 \'69\tab}}\pard\plain \s37\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls26\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb i}}\nooverflow\faroman\ls26\rin0\lin283\itap0\pararsid5054838 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid5054838 Cutting videos -\par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0\pararsid5054838 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid5054838 This topic is for }{\b\insrsid5054838 -Cut video}{\insrsid5054838 view.}{\insrsid5054838\charrsid11021345 -\par {\pntext\pard\plain\s15 \f3\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid5054838\charrsid5054838 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\ql \fi-284\li284\ri0\sa120\widctlpar\tx284{\*\pn \pnlvlbody\ilvl0\ls30\pnrnot0 -\pnf3\pnstart1\pnindent283\pnhang {\pntxtb \'b7}}\nooverflow\faroman\ls30\rin0\lin284\itap0\pararsid5054838 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid5054838\charrsid5054838 -"Se on ihan fifty-sixty miten k\'e4y."}{\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid5054838 -M. Nyk\'e4nen}{\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid5054838\charrsid5054838 -\par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\outlinelevel1\rin0\lin0\rtlgutter\itap0\pararsid6100133 -\b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid6100133 Cut audio -\par {\pntext\pard\plain\s36 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid6100133 \loch\af48\dbch\af0\hich\f48 \'a2\tab}}\pard\plain \s36\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls25\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb \'a2}}\nooverflow\faroman\ls25\rin0\lin283\itap0\pararsid6100133 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid6100133 VedHlpCutAudioView -\par {\pntext\pard\plain\s37 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid6100133 \loch\af48\dbch\af0\hich\f48 \'69\tab}}\pard\plain \s37\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls26\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb i}}\nooverflow\faroman\ls26\rin0\lin283\itap0\pararsid6100133 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid6100133 Cutting audio clips -\par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0\pararsid6100133 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid6100133 This topic is for }{\b\insrsid6100133 -Cut audio}{\insrsid6100133 view.}{\insrsid6100133\charrsid11021345 -\par {\pntext\pard\plain\s15 \f3\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid6100133\charrsid6100133 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\ql \fi-284\li284\ri0\sa120\widctlpar\tx284{\*\pn \pnlvlbody\ilvl0\ls30\pnrnot0 -\pnf3\pnstart1\pnindent283\pnhang {\pntxtb \'b7}}\nooverflow\faroman\ls30\rin0\lin284\itap0\pararsid6100133 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid6100133\charrsid6100133 -"Rakkaus on kuin lankaker\'e4 - se alkaa ja loppuu."}{\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid6100133 -M. Nyk\'e4nen -\par }\pard\plain \s2\ql \li0\ri0\sb120\sa120\keepn\widctlpar\brdrt\brdrs\brdrw30\brsp20 \brdrb\brdrs\brdrw30\brsp20 \tqr\tx9072{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\outlinelevel1\rin0\lin0\rtlgutter\itap0\pararsid10618944 -\b\f1\fs24\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid10618944 Preview movies -\par {\pntext\pard\plain\s36 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid10618944\charrsid10618944 \loch\af48\dbch\af0\hich\f48 \'a2\tab}}\pard\plain \s36\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls25\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb \'a2}}\nooverflow\faroman\ls25\rin0\lin283\itap0\pararsid10618944 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid10618944\charrsid10618944 VedHlpPreviewView}{\insrsid10618944 -\par {\pntext\pard\plain\s37 \f48\fs20\lang2057\langfe1033\langnp2057\insrsid10618944 \loch\af48\dbch\af0\hich\f48 \'69\tab}}\pard\plain \s37\ql \fi-283\li283\ri0\sa120\widctlpar\brdrb\brdrs\brdrw15\brsp20 {\*\pn \pnlvlbody\ilvl0\ls26\pnrnot0 -\pnf48\pnstart1\pnindent283\pnhang {\pntxtb i}}\nooverflow\faroman\ls26\rin0\lin283\itap0\pararsid10618944 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid10618944 Previewing movie -\par }\pard\plain \ql \li0\ri0\sa120\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\nooverflow\faroman\rin0\lin0\itap0\pararsid10618944 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\insrsid10618944 This topic is for }{\b\insrsid10618944 -Preview}{\insrsid10618944 view.}{\insrsid10618944\charrsid11021345 -\par {\pntext\pard\plain\s15 \f3\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid10618944\charrsid6100133 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s15\ql \fi-284\li284\ri0\sa120\widctlpar\tx284{\*\pn \pnlvlbody\ilvl0\ls30\pnrnot0 -\pnf3\pnstart1\pnindent283\pnhang {\pntxtb \'b7}}\nooverflow\faroman\ls30\rin0\lin284\itap0\pararsid10618944 \f1\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid10618944\charrsid6100133 -"Rakkaus on kuin lankaker\'e4 - se alkaa ja loppuu."}{\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid10618944 -M. Nyk\'e4nen}{\f40\fs15\cf1\lang1035\langfe1033\langnp1035\insrsid10618944\charrsid5054838 -\par }\pard \s15\ql \li0\ri0\sa120\widctlpar\tx284\nooverflow\faroman\rin0\lin0\itap0\pararsid9900545 {\lang1035\langfe1033\langnp1035\insrsid9900545\charrsid11021345 -\par }} \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/help/custom.xml --- a/videditor/ManualVideoEditor/data/help/custom.xml Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/icons.mk --- a/videditor/ManualVideoEditor/data/icons.mk Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -# -# Copyright (c) 2010 Ixonos Plc. -# All rights reserved. -# This component and the accompanying materials are made available -# under the terms of the "Eclipse Public License v1.0" -# which accompanies this distribution, and is available -# at the URL "http://www.eclipse.org/legal/epl-v10.html". -# -# Initial Contributors: -# Nokia Corporation - Initial contribution -# -# Contributors: -# Ixonos Plc -# -# Description: -# - -ifeq (WINSCW,$(findstring WINSCW, $(PLATFORM))) -ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z -else -ZDIR=$(EPOCROOT)epoc32\data\Z -endif - -TARGETDIR=$(ZDIR)\resource\apps -HEADERDIR=$(EPOCROOT)epoc32\include -ICONTARGETFILENAME=$(TARGETDIR)\ManualVideoEditor.mif -HEADERFILENAME=$(HEADERDIR)\ManualVideoEditor.mbg - -do_nothing: - @rem do_nothing - -MAKMAKE : do_nothing - -BLD : do_nothing - -CLEAN : do_nothing - -LIB : do_nothing - -CLEANLIB : do_nothing - -RESOURCE : - mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \ - qgn_graf_ve_symbol_audio.svg \ - qgn_prop_ve_file_video.svg \ - qgn_prop_ve_file_audio.svg \ - qgn_prop_ve_slow.svg \ - qgn_prop_ve_bw.svg \ - qgn_prop_ve_colour.svg \ - qgn_prop_ve_muted.svg \ - qgn_graf_ve_symbol_cut_audio.svg \ - qgn_prop_ve_rec.svg \ - qgn_graf_ve_trans_diptoblack01.svg \ - qgn_graf_ve_trans_diptoblack02.svg \ - qgn_graf_ve_trans_diptoblack03.svg \ - qgn_graf_ve_trans_diptoblack04.svg \ - qgn_graf_ve_trans_diptoblack05.svg \ - qgn_graf_ve_trans_diptoblack06.svg \ - qgn_graf_ve_trans_diptoblack07.svg \ - qgn_graf_ve_trans_diptoblack08.svg \ - qgn_graf_ve_trans_diptoblack09.svg \ - qgn_graf_ve_trans_diptoblack10.svg \ - qgn_graf_ve_trans_diptoblack11.svg \ - qgn_graf_ve_trans_diptoblack12.svg \ - qgn_graf_ve_trans_diptoblack13.svg \ - qgn_graf_ve_trans_diptowhite01.svg \ - qgn_graf_ve_trans_diptowhite02.svg \ - qgn_graf_ve_trans_diptowhite03.svg \ - qgn_graf_ve_trans_diptowhite04.svg \ - qgn_graf_ve_trans_diptowhite05.svg \ - qgn_graf_ve_trans_diptowhite06.svg \ - qgn_graf_ve_trans_diptowhite07.svg \ - qgn_graf_ve_trans_diptowhite08.svg \ - qgn_graf_ve_trans_diptowhite09.svg \ - qgn_graf_ve_trans_diptowhite10.svg \ - qgn_graf_ve_trans_diptowhite11.svg \ - qgn_graf_ve_trans_diptowhite12.svg \ - qgn_graf_ve_trans_diptowhite13.svg \ - qgn_graf_ve_trans_crossfade01.svg \ - qgn_graf_ve_trans_crossfade02.svg \ - qgn_graf_ve_trans_crossfade03.svg \ - qgn_graf_ve_trans_crossfade04.svg \ - qgn_graf_ve_trans_crossfade05.svg \ - qgn_graf_ve_trans_crossfade06.svg \ - qgn_graf_ve_trans_crossfade07.svg \ - qgn_graf_ve_trans_crossfade08.svg \ - qgn_graf_ve_trans_fadetoblack1.svg \ - qgn_graf_ve_trans_fadetoblack2.svg \ - qgn_graf_ve_trans_fadetoblack3.svg \ - qgn_graf_ve_trans_fadetoblack4.svg \ - qgn_graf_ve_trans_fadetoblack5.svg \ - qgn_graf_ve_trans_fadetoblack6.svg \ - qgn_graf_ve_trans_fadetoblack7.svg \ - qgn_graf_ve_trans_fadetoblack8.svg \ - qgn_graf_ve_trans_fadetowhite1.svg \ - qgn_graf_ve_trans_fadetowhite2.svg \ - qgn_graf_ve_trans_fadetowhite3.svg \ - qgn_graf_ve_trans_fadetowhite4.svg \ - qgn_graf_ve_trans_fadetowhite5.svg \ - qgn_graf_ve_trans_fadetowhite6.svg \ - qgn_graf_ve_trans_fadetowhite7.svg \ - qgn_graf_ve_trans_fadetowhite8.svg \ - qgn_graf_ve_trans_fadefromblack1.svg \ - qgn_graf_ve_trans_fadefromblack2.svg \ - qgn_graf_ve_trans_fadefromblack3.svg \ - qgn_graf_ve_trans_fadefromblack4.svg \ - qgn_graf_ve_trans_fadefromblack5.svg \ - qgn_graf_ve_trans_fadefromblack6.svg \ - qgn_graf_ve_trans_fadefromblack7.svg \ - qgn_graf_ve_trans_fadefromblack8.svg \ - qgn_graf_ve_trans_fadefromwhite1.svg \ - qgn_graf_ve_trans_fadefromwhite2.svg \ - qgn_graf_ve_trans_fadefromwhite3.svg \ - qgn_graf_ve_trans_fadefromwhite4.svg \ - qgn_graf_ve_trans_fadefromwhite5.svg \ - qgn_graf_ve_trans_fadefromwhite6.svg \ - qgn_graf_ve_trans_fadefromwhite7.svg \ - qgn_graf_ve_trans_fadefromwhite8.svg \ - qgn_graf_ve_trans_wipeleft1.svg \ - qgn_graf_ve_trans_wipeleft2.svg \ - qgn_graf_ve_trans_wipeleft3.svg \ - qgn_graf_ve_trans_wipeleft4.svg \ - qgn_graf_ve_trans_wipeleft5.svg \ - qgn_graf_ve_trans_wipeleft6.svg \ - qgn_graf_ve_trans_wipeleft7.svg \ - qgn_graf_ve_trans_wiperight1.svg \ - qgn_graf_ve_trans_wiperight2.svg \ - qgn_graf_ve_trans_wiperight3.svg \ - qgn_graf_ve_trans_wiperight4.svg \ - qgn_graf_ve_trans_wiperight5.svg \ - qgn_graf_ve_trans_wiperight6.svg \ - qgn_graf_ve_trans_wiperight7.svg \ - qgn_graf_ve_trans_wipebototop1.svg \ - qgn_graf_ve_trans_wipebototop2.svg \ - qgn_graf_ve_trans_wipebototop3.svg \ - qgn_graf_ve_trans_wipebototop4.svg \ - qgn_graf_ve_trans_wipebototop5.svg \ - qgn_graf_ve_trans_wipebototop6.svg \ - qgn_graf_ve_trans_wipebototop7.svg \ - qgn_graf_ve_trans_wipebototop8.svg \ - qgn_graf_ve_trans_wipebototop9.svg \ - qgn_graf_ve_trans_wipetoptobo1.svg \ - qgn_graf_ve_trans_wipetoptobo2.svg \ - qgn_graf_ve_trans_wipetoptobo3.svg \ - qgn_graf_ve_trans_wipetoptobo4.svg \ - qgn_graf_ve_trans_wipetoptobo5.svg \ - qgn_graf_ve_trans_wipetoptobo6.svg \ - qgn_graf_ve_trans_wipetoptobo7.svg \ - qgn_graf_ve_trans_wipetoptobo8.svg \ - qgn_graf_ve_trans_wipetoptobo9.svg - -FREEZE : do_nothing - -SAVESPACE : do_nothing - -RELEASABLES : - @echo $(HEADERFILENAME)&& \ - @echo $(ICONTARGETFILENAME) - -FINAL : do_nothing - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/icons_aif_scalable.mk --- a/videditor/ManualVideoEditor/data/icons_aif_scalable.mk Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -# -# Copyright (c) 2010 Ixonos Plc. -# All rights reserved. -# This component and the accompanying materials are made available -# under the terms of the "Eclipse Public License v1.0" -# which accompanies this distribution, and is available -# at the URL "http://www.eclipse.org/legal/epl-v10.html". -# -# Initial Contributors: -# Nokia Corporation - Initial contribution -# -# Contributors: -# Ixonos Plc -# -# Description: -# - -ifeq (WINSCW,$(findstring WINSCW, $(PLATFORM))) -ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z -else -ZDIR=$(EPOCROOT)epoc32\data\Z -endif - -TARGETDIR=$(ZDIR)\resource\apps -HEADERDIR=$(EPOCROOT)epoc32\include -ICONTARGETFILENAME=$(TARGETDIR)\ManualVideoEditor_aif.MIF -HEADERFILENAME=$(HEADERDIR)\ManualVideoEditor_aif.MBG - -do_nothing: - @rem do_nothing - -MAKMAKE : do_nothing - -BLD : do_nothing - -CLEAN : do_nothing - -LIB : do_nothing - -CLEANLIB : do_nothing - -RESOURCE : - mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \ - /c8,8 qgn_menu_ve_cxt.svg - -FREEZE : do_nothing - -SAVESPACE : do_nothing - -RELEASABLES : - @echo $(HEADERFILENAME)&& \ - @echo $(ICONTARGETFILENAME) - -FINAL : do_nothing - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_symbol_audio.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_symbol_audio.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_symbol_cut_audio.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_symbol_cut_audio.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade01.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade01.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade02.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade02.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade03.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade03.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade04.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade04.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade05.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade05.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade06.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade06.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade07.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade07.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade08.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade08.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade1.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade2.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade3.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade4.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade5.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade5.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade6.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade6.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade7.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade7.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade8.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_crossfade8.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack01.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack01.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack02.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack02.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack03.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack03.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack04.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack04.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack05.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack05.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack06.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack06.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack07.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack07.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack08.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack08.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack09.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack09.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack10.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack10.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack11.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack11.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack12.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack12.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack13.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptoblack13.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite01.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite01.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite02.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite02.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite03.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite03.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite04.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite04.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite05.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite05.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite06.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite06.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite07.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite07.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite08.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite08.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite09.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite09.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite10.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite10.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite11.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite11.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite12.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite12.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite13.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_diptowhite13.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack1.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack2.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack3.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack4.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack5.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack5.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack6.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack6.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack7.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack7.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack8.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromblack8.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite1.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite2.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite3.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite4.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite5.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite5.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite6.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite6.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite7.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite7.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite8.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadefromwhite8.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack1.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack2.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack3.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack4.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack5.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack5.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack6.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack6.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack7.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack7.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack8.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetoblack8.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite1.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite2.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite3.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite4.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite5.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite5.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite6.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite6.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite7.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite7.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite8.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_fadetowhite8.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop1.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop2.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop3.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop4.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop5.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop5.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop6.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop6.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop7.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop7.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop8.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop8.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop9.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipebototop9.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft1.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft2.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft3.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft4.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft5.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft5.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft6.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft6.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft7.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipeleft7.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight1.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight2.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight3.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight4.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight5.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight5.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight6.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight6.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight7.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wiperight7.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo1.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo2.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo3.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo4.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo5.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo5.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo6.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo6.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo7.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo7.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo8.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo8.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo9.svg --- a/videditor/ManualVideoEditor/data/qgn_graf_ve_trans_wipetoptobo9.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_menu_ve_cxt.svg --- a/videditor/ManualVideoEditor/data/qgn_menu_ve_cxt.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_prop_ve_bw.svg --- a/videditor/ManualVideoEditor/data/qgn_prop_ve_bw.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_prop_ve_colour.svg --- a/videditor/ManualVideoEditor/data/qgn_prop_ve_colour.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ - - - - -]> - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_prop_ve_file_audio.svg --- a/videditor/ManualVideoEditor/data/qgn_prop_ve_file_audio.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ - - - - -]> - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_prop_ve_file_video.svg --- a/videditor/ManualVideoEditor/data/qgn_prop_ve_file_video.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_prop_ve_muted.svg --- a/videditor/ManualVideoEditor/data/qgn_prop_ve_muted.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ - - - - -]> - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_prop_ve_rec.svg --- a/videditor/ManualVideoEditor/data/qgn_prop_ve_rec.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - - - - -]> - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/data/qgn_prop_ve_slow.svg --- a/videditor/ManualVideoEditor/data/qgn_prop_ve_slow.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ - - - - -]> - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/group/ManualVideoEditorUi.mmp --- a/videditor/ManualVideoEditor/group/ManualVideoEditorUi.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - -// To get the APP_LAYER_SYSTEMINCLUDE-definition -#include - -#include -#include "../../Group/buildconfig.hrh" - -#if defined( __DEBUG_ON__ ) -MACRO DEBUG_ON -#endif -#if defined( __DEBUG_ON_ALWAYS__ ) -MACRO DEBUG_ON_ALWAYS -#endif -#if defined(__DEBUG_ON__) || defined(__DEBUG_ON_ALWAYS__) -LIBRARY flogger.lib -#endif - -#if defined (__GET_PAUSE_THUMBNAIL__) -MACRO GET_PAUSE_THUMBNAIL -#endif - -TARGET ManualVideoEditor.exe -TARGETTYPE exe -UID 0x100039CE 0x10208A29 -CAPABILITY CAP_APPLICATION MultiMediaDD -SECUREID 0x10208A29 -VENDORID VID_DEFAULT - -EPOCSTACKSIZE 0x8000 -EPOCHEAPSIZE 0x100000 0x1600000 - -SOURCEPATH ../src -SOURCE VeiApp.cpp -SOURCE VeiAppUi.cpp -SOURCE VeiDocument.cpp -SOURCE VeiEditVideoContainer.cpp -SOURCE VeiEditVideoView.cpp -SOURCE VeiSettingsView.cpp -SOURCE VeiSettingsContainer.cpp -SOURCE VeiCutVideoView.cpp -SOURCE VeiCutVideoContainer.cpp -SOURCE VeiCutAudioView.cpp -SOURCE VeiCutAudioContainer.cpp -SOURCE VeiSettingItemList.cpp -SOURCE FileNameSettingItem.cpp -SOURCE VeiTrimForMmsView.cpp -SOURCE VeiTrimForMmsContainer.cpp -SOURCE VeiIconBox.cpp -SOURCE VeiPopup.cpp -SOURCE SampleArrayHandler.cpp -SOURCE StoryboardItems.cpp -SOURCE TransitionInfo.cpp - -START RESOURCE ../data/ManualVideoEditor.rss -HEADER -TARGETPATH APP_RESOURCE_DIR -LANG sc -END - -START RESOURCE ../data/Manualvideoeditor_reg.rss -DEPENDS manualvideoeditor.rsg -TARGETPATH /private/10003a3f/apps -END - - -USERINCLUDE . -USERINCLUDE ../inc -USERINCLUDE ../../VideoEditorCommon/inc -USERINCLUDE ../../VideoEditorUiComponents/inc - -// Default system include paths for application layer modules. -APP_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE . -SYSTEMINCLUDE /epoc32/include/ECom -SYSTEMINCLUDE /epoc32/include/mda/client -SYSTEMINCLUDE /epoc32/include/mmf/server -SYSTEMINCLUDE /epoc32/include/mmf/common - -LIBRARY aknicon.lib -LIBRARY AknLayout2.lib -LIBRARY aknlayout2adaptation.lib -LIBRARY aknlayout2scalable.lib -LIBRARY aknskins.lib -LIBRARY apgrfx.lib -LIBRARY apparc.lib -LIBRARY avkon.lib -LIBRARY bafl.lib -LIBRARY bitgdi.lib -LIBRARY BitmapTransforms.lib -LIBRARY bmpanim.lib -LIBRARY cdlengine.lib -LIBRARY charconv.lib -LIBRARY CommonDialogs.lib -LIBRARY commonengine.lib //StringLoader -LIBRARY commonui.lib //Globalerror -LIBRARY cone.lib -LIBRARY efsrv.lib -LIBRARY egul.lib -LIBRARY eikcoctl.lib -LIBRARY eikcore.lib -LIBRARY eikctl.lib -LIBRARY estor.lib //FOR settings view rreadstream -LIBRARY euser.lib -LIBRARY fbscli.lib -LIBRARY gdi.lib -LIBRARY hlplch.lib -LIBRARY ImageConversion.lib //image conversion -LIBRARY MediaClientAudio.lib -LIBRARY MGFetch.lib -LIBRARY mmfserverbaseclasses.lib // Wav to AMR conversion -LIBRARY PlatformEnv.lib //volume settings, pathinfos -LIBRARY SendUi.lib -LIBRARY servicehandler.lib -LIBRARY sysutil.lib -LIBRARY VedEngine.lib -LIBRARY VideoEditorCommon.lib -LIBRARY VideoEditorUiComponents.lib -LIBRARY ws32.lib - - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/group/bld.inf --- a/videditor/ManualVideoEditor/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Build information file for Build Manual Video Editor. -* -*/ - - -#include - -#include "../../Group/buildconfig.hrh" - - -PRJ_PLATFORMS -DEFAULT - -// Exported headers -PRJ_EXPORTS -../rom/ManualVideoEditor.iby CORE_APP_LAYER_IBY_EXPORT_PATH(ManualVideoEditor.iby) -../rom/ManualVideoEditor_resource.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(ManualVideoEditor_resource.iby) - -// ROM build files -PRJ_MMPFILES -gnumakefile ../data/icons.mk -gnumakefile ../data/icons_aif_scalable.mk -../group/ManualVideoEditorUI.mmp - -PRJ_TESTMMPFILES -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/FileNameSettingItem.h --- a/videditor/ManualVideoEditor/inc/FileNameSettingItem.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __FILENAMESETTINGITEM_H__ -#define __FILENAMESETTINGITEM_H__ - -// INCLUDES -#include - -// CONSTANTS -_LIT( KCharColon, ":" ); // Illegal character for filename. -const TText KCharDot = '.'; // Dot character. - -// CLASS DECLARATION - -/** - * Custom setting item for filename. Filename validity is checked. - */ -class CFileNameSettingItem: public CAknTextSettingItem -{ -public: - // Constructor and destructor - - /** - * Constructor. - * - * @param aIdentifier Resource identifier for this setting item. - * @param aText Setting text. - * @param aIllegalFilenameTextResourceID Resource identifier for - * warning note text. - * @param aUnsuitableFilenameTextResourceID Resource identifier for - * warning note text. - */ - CFileNameSettingItem( TInt aIdentifier, - TDes& aText, - TInt aIllegalFilenameTextResourceID, - TInt aUnsuitableFilenameTextResourceID ); - - /** - * Destructor. - */ - ~CFileNameSettingItem(); - -public: - // Functions from base classes - - /** - * From MAknSettingPageObserver, handles events reported - * by the setting page. - * - * @param aSettingPage Notified setting page. - * @param aEventType Occured event type. - */ - void HandleSettingPageEventL( CAknSettingPage* aSettingPage, - TAknSettingPageEvent aEventType ); - - /** - * From CAknTextSettingItem, this launches the setting - * page for text editing. - * - * @param aCalledFromMenu Ignored in this and under laying - * CAknTextSettingItem class. - */ - void EditItemL( TBool aCalledFromMenu ); - -private: - // Data - - /** - * The text in editor before editing is started. - */ - HBufC* iTextBeforeEditing; - - /** - * Indicates whether ok is pressed and the file name is incorrect. - */ - TBool iInvalidFilenameOked; - - /** - * Resource identifier for illegal file name string. - */ - TInt iIllegalFilenameTextResourceID; - - /** - * Resource identifier for unsuitable file name string. - */ - TInt iUnsuitableFilenameTextResourceID; - -}; -#endif // __FILENAMESETTINGITEM_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/ManualVideoEditor.hrh --- a/videditor/ManualVideoEditor/inc/ManualVideoEditor.hrh Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef MANUALVIDEOEDITOR_HRH -#define MANUALVIDEOEDITOR_HRH - -enum TVeijoCommandIds - { - EVeiCmdHelp = 1, -/* Cut video */ - EVeiCmdCutVideoViewPlay, - EVeiCmdCutVideoViewPlayMarked, - EVeiCmdCutVideoViewClearMarks, - EVeiCmdCutVideoViewClearMarksIn, - EVeiCmdCutVideoViewClearMarksOut, - EVeiCmdCutVideoViewClearMarksInOut, - EVeiCmdCutVideoViewHelp, - EVeiCmdCutVideoViewBack, - EVeiCmdCutVideoViewDone, // 10 - EVeiCmdCutVideoViewMarkIn, - EVeiCmdCutVideoViewMarkOut, - EVeiCmdCutVideoViewContinue, - EVeiCmdCutVideoViewStop, - EVeiCmdCutVideoVolumeDown, - EVeiCmdCutVideoVolumeUp, - EVeiCmdCutVideoTakeSnapshot, - EVeiCmdPlayPreview, - EVeiCmdSettingsViewBack, - EVeiCmdPlayViewPause, // 20 - EVeiCmdPlayViewStop, - EVeiCmdEditVideoViewPreview, - EVeiCmdEditVideoViewTrimForMms, - EVeiCmdEditVideoViewPreviewLarge, - EVeiCmdEditVideoViewPreviewSmall, - EVeiCmdEditVideoViewMovie, - EVeiCmdEditVideoViewInsert, - EVeiCmdEditVideoViewSettings, - EVeiCmdEditVideoViewInsertVideo, - EVeiCmdEditVideoViewInsertAudio, // 30 - EVeiCmdEditVideoViewInsertImage, - EVeiCmdEditVideoViewInsertText, -/* Insert Title*/ - EVeiCmdEditVideoViewInsertTextTitle, - EVeiCmdEditVideoViewInsertTextTitleFading, - EVeiCmdEditVideoViewInsertTextSubTitle, - EVeiCmdEditVideoViewInsertTextSubTitleFading, - EVeiCmdEditVideoViewInsertTextCredits, - EVeiCmdEditVideoViewInsertTitleScreen, -/* Edit Text */ - EVeiCmdEditVideoViewEditText, - EVeiCmdEditVideoViewEditTextMove, // 40 - EVeiCmdEditVideoViewEditTextRemove, - EVeiCmdEditVideoViewEditTextChangeDuration, - EVeiCmdEditVideoViewEditTextChangeText, - EVeiCmdEditVideoViewEditTextSetTextColor, - EVeiCmdEditVideoViewEditTextSetBackGround, - EVeiCmdEditVideoViewEditTextStyle, - EVeiCmdEditVideoViewEditTextAddColorEffect, - EVeiCmdEditVideoViewEditTextDuplicate, - EVeiCmdEditVideoViewEditTextStyleTitle, - EVeiCmdEditVideoViewEditTextStyleTitleFading, // 50 - EVeiCmdEditVideoViewEditTextStyleSubTitle, - EVeiCmdEditVideoViewEditTextStyleSubTitleFading, - EVeiCmdEditVideoViewEditTextStyleCredit, -/* Edit Image*/ - EVeiCmdEditVideoViewEditImage, - EVeiCmdEditVideoViewEditImageMove, - EVeiCmdEditVideoViewEditImageRemove, - EVeiCmdEditVideoViewEditImageChangeDuration, - EVeiCmdEditVideoViewEditImageBackGround, - EVeiCmdEditVideoViewEditImageAddColorEffect, - EVeiCmdEditVideoViewEditImageDuplicate, // 60 - EVeiTitleScreenTextQuery, - EVeiCmdEditVideoViewInsertNewAudio, - EVeiCmdEditVideoViewRecord, - EVeiCmdEditVideoViewRecordCancel, - EVeiCmdEditVideoViewRecordStop, - EVeiCmdEditVideoViewRecordPause, - EVeiCmdEditVideoViewContinue, -/* Edit Video */ - EVeiCmdEditVideoViewEditVideo, - EVeiCmdEditVideoViewEditVideoMove, - EVeiCmdEditVideoViewEditVideoCutting, // 70 - EVeiCmdEditVideoViewEditVideoColorEffect, - EVeiCmdEditVideoViewEditVideoSlowMotion, - EVeiCmdEditVideoViewEditVideoMute, - EVeiCmdEditVideoViewEditVideoUnmute, - EVeiCmdEditVideoViewEditVideoRemove, - EVeiCmdAddVideoClipMem, - EVeiCmdSendMovie, - EVeiCmdEditVideoDuplicate, -/* Edit Audio */ - EVeiCmdEditVideoViewEditAudio, - EVeiCmdEditVideoViewEditAudioMove, // 80 - EVeiCmdEditVideoViewEditAudioDuration, - EVeiCmdEditVideoViewEditAudioRemove, - EVeiCmdEditVideoViewEditAudioSetDuration, -/* Transition */ - EVeiCmdEditVideoViewEditStartTransition, - EVeiCmdEditVideoViewEditMiddleTransition, - EVeiCmdEditVideoViewEditEndTransition, - EVeiCmdEditVideoViewTransitionNone, - EVeiCmdEditVideoViewTransitionFadeFromBlack, - EVeiCmdEditVideoViewTransitionFadeFromWhite, - EVeiCmdEditVideoViewTransitionDipToBlack, // 90 - EVeiCmdEditVideoViewTransitionDipToWhite, - EVeiCmdEditVideoViewTransitionFadeToBlack, - EVeiCmdEditVideoViewTransitionFadeToWhite, - EVeiCmdEditVideoViewTransitionWipeFromLeft, - EVeiCmdEditVideoViewTransitionWipeFromRight, - EVeiCmdEditVideoViewTransitionWipeFromTop, - EVeiCmdEditVideoViewTransitionWipeFromBottom, - EVeiCmdEditVideoViewTransitionCrossfade, - EVeiCmdEditVideoViewTransitionKeyUp, - EVeiCmdEditVideoViewTransitionKeyDown, // 100 - EVeiCmdEditVideoViewSaveTo, - EVeiCmdEditVideoMixAudio, - EVeiCmdEditVideoMixAudioCancel, - EVeiCmdEditVideoAdjustVolume, - EVeiCmdEditVideoViewHelp, - EVeiCmdEditVideoViewSend, - EVeiCmdEditVideoViewContainerShowMenu, - EVeiCmdCutAudioViewHelp, -/* Settings View */ - EVeiCmdSettingsViewChange, - EVeiCmdSettingsViewHelp, // 110 -/* Trim for MMS view */ - EVeiCmdSendViaMms, - EVeiCmdPreview, - EVeiCmdTrimForMmsViewHelp - }; - - - // Video Editor view IDs. -enum TVeiViewIds - { - EVeiCutVideoView, - EVeiEditVideoView, - EVeiSettingsView, - EVeiTrimForMmsView, - EVeiCutAudioView - }; - - // Setting items - enum TVeiSettingItems - { - EVeiVideoNameSettingItem, - EVeiSnapshotNameSettingItem, - EVeiMemoryInUseSettingItem, - EVeiSaveQualitySettingItem - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/SampleArrayHandler.h --- a/videditor/ManualVideoEditor/inc/SampleArrayHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEISAMPLE_ARRAY_HANDLER_H -#define VEISAMPLE_ARRAY_HANDLER_H - -#include -/** - * CSampleArrayHandler container control class. - * - * Container for CVeiCutAudioView. - */ -class CSampleArrayHandler: public CBase -{ -public: - /** - * Creates a CStoryboardContainer object, which will draw itself to aRect. - * - * @param aRect Frame rectangle for container. - * @param aMovie movie being edited - * - * @return a pointer to the created instance of CStoryboardContainer - */ - static CSampleArrayHandler* NewL(); - - /** - * Creates a CStoryboardContainer object, which will draw itself to aRect. - * Leaves the created object in the cleanup stack. - * - * @param aRect Frame rectangle for container. - * @param aMovie movie being edited - * - * @return a pointer to the created instance of CStoryboardContainer - */ - static CSampleArrayHandler* NewLC(); - - /** - * Default constructor. - * - * @param aRect Frame rectangle for container. - * @param aView pointer to the view. - */ - void ConstructL(); - - /** - * Destructor. - */ - virtual ~CSampleArrayHandler(); - -public: - - void SetVisualizationArray( TInt8* aVisualization, TInt aResolution ); - - TInt8 Sample( const TInt aIndex )const; - void ScaleAudioVisualization( const TInt8& aHeight ); - TInt Size()const; - TInt CurrentPoint()const; - void SetCurrentPoint( const TTimeIntervalMicroSeconds& aTime ); - void SetCutInPoint( const TTimeIntervalMicroSeconds& aCutInTime ); - void SetCutOutPoint( const TTimeIntervalMicroSeconds& aCutOutTime ); - TBool SampleCutted( const TInt aIndex )const; - -private: - - /** - * Constructor. - * - * @param - - */ - CSampleArrayHandler(); - -private: - //data - - TInt8* iVisualization; - TInt iVisualizationSize; - TInt8 iMaxSample; - TInt8 iMaxSampleInCurrentScale; - TReal iScaleFactor; - - TTimeIntervalMicroSeconds iCurrentTime; - TTimeIntervalMicroSeconds iCutInTime; - TTimeIntervalMicroSeconds iCutOutTime; - - TInt iCurrentIndex; - TInt iCutInSampleIndex; - TInt iCutOutSampleIndex; - - TInt iMarkOutCounter; - TInt iMarkInCounter; - - TInt iPreviousScreenMode; - TInt iCurrentScreenMode; - - TTimeIntervalMicroSeconds iMarkedInTime; - TTimeIntervalMicroSeconds iMarkedOutTime; -}; -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/StoryboardItems.h --- a/videditor/ManualVideoEditor/inc/StoryboardItems.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef STORYBOARDITEMS_H -#define STORYBOARDITEMS_H - -#include - -class CFbsBitmap; - - -/** - * Storyboard video item - */ -class CStoryboardVideoItem: public CBase -{ -public: - static CStoryboardVideoItem* NewL( const CFbsBitmap& aStartIcon, - const CFbsBitmap& aStartIconMask, - const TDesC& aFilename, - TBool aIsFile, - const TDesC& aAlbum = KNullDesC ); - - static CStoryboardVideoItem* NewLC( const CFbsBitmap& aStartIcon, - const CFbsBitmap& aStartIconMask, - const TDesC& aFilename, - TBool aIsFile, - const TDesC& aAlbum = KNullDesC ); - - virtual ~CStoryboardVideoItem(); - void InsertLastFrameL( const CFbsBitmap& aBitmap, const CFbsBitmap& aMask ); - void InsertFirstFrameL( const CFbsBitmap& aBitmap, const CFbsBitmap& aMask ); - void InsertTimelineFrameL( const CFbsBitmap& aBitmap, const CFbsBitmap& aMask ); - - CStoryboardVideoItem(); -private: - - void ConstructL( const CFbsBitmap& aStartIcon, - const CFbsBitmap& aStartIconMask, - const TDesC& aFilename, - TBool aIsFile, - const TDesC& aAlbum ); - - - -public: - CFbsBitmap* iIconBitmap; - CFbsBitmap* iIconMask; - - CFbsBitmap* iLastFrameBitmap; - CFbsBitmap* iLastFrameMask; - - CFbsBitmap* iTimelineBitmap; - CFbsBitmap* iTimelineMask; - - TSize iIconSize; - HBufC* iFilename; - HBufC* iAlbumName; - TBool iIsFile; - TTime iDateModified; -}; - -/** - * Storyboard audio item. - */ -class CStoryboardAudioItem: public CBase -{ -public: - static CStoryboardAudioItem* NewLC( TBool aRecordedAudio, - const TDesC& aFilename ); - virtual ~CStoryboardAudioItem(); - -private: - CStoryboardAudioItem( TBool aRecordedAudio ); - void ConstructL( const TDesC& aFilename ); - -public: - TBool iRecordedAudio; - HBufC* iFilename; -}; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/TransitionInfo.h --- a/videditor/ManualVideoEditor/inc/TransitionInfo.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef TRANSITIONINFO_H -#define TRANSITIONINFO_H - -#include -#include - - -/** - * Transition info. - */ -class CTransitionInfo: public CBase -{ -public: - /* Constructors & Destructor. */ - static CTransitionInfo* NewL(); - static CTransitionInfo* NewLC(); - virtual ~CTransitionInfo(); - - /* - * Methods for querying transition icons and names. The icons and - * names are NOT to be deleted by the caller. - */ - HBufC* StartTransitionName( TVedStartTransitionEffect aEffect ); - HBufC* MiddleTransitionName( TVedMiddleTransitionEffect aEffect ); - HBufC* EndTransitionName( TVedEndTransitionEffect aEffect ); - -private: - /* Private constructors. */ - void ConstructL(); - CTransitionInfo(); - -private: - /* Data. */ - RPointerArray < HBufC > iStartTransitionNameArray; - RPointerArray < HBufC > iMiddleTransitionNameArray; - RPointerArray < HBufC > iEndTransitionNameArray; -}; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiApp.h --- a/videditor/ManualVideoEditor/inc/VeiApp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef VEDAPP_H -#define VEDAPP_H - -// INCLUDES -// System includes -#include - -// CLASS DECLARATION - -/** - * CVeiApp application class. - * Provides factory to create concrete document object. - */ -class CVeiApp: public CAknApplication -{ - -public: -private: - // Functions from base classes - - /** - * From CApaApplication, creates CVeiDocument document object. - * @return A pointer to the created document object. - */ - CApaDocument* CreateDocumentL(); - - /** - * From CApaApplication, returns application's UID (KUidveijo). - * @return The value of KUidveijo. - */ - TUid AppDllUid()const; - - CDictionaryStore* OpenIniFileLC( RFs& aFs )const; - -}; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiAppUi.h --- a/videditor/ManualVideoEditor/inc/VeiAppUi.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,182 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef VEDAPPUI_H -#define VEDAPPUI_H - -// INCLUDES -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -// User includes -#include "VeiSettingsView.h" -#include "VideoEditorDebugUtils.h" - -// FORWARD DECLARATIONS -class CVeiSettingsView; -class CVeiEditVideoView; -class CVeiCutVideoView; -class CVeiSettingsView; -class CVeiCutAudioView; -class CVeiTrimForMmsView; -class CSendUi; -class CEikAppUi; -class CMGXFileNotificationHandler; - -/** - * Application UI class. - * Provides support for the following features: - * - EIKON control architecture - * - view architecture - * - status pane - * - */ -class CVeiAppUi: public CAknViewAppUi, - public MMGXFileNotificationObserver -{ -public: - // // Constructors and destructor - - /** - * Default constructor. - */ - void ConstructL(); - - /** - * Destructor. - */ - ~CVeiAppUi(); - -public: - // New functions - inline TInt GetVolumeLevel() { return iVolume; }; - - inline void SetVolumeLevel( TInt aVolume ) { iVolume=aVolume; }; - - void InsertVideoClipToMovieL( TBool aDoOpen, const TDesC& aFilename ); - - CVeiAppUi(); - - /** HandleError - * - * @CAknAppUi - */ - virtual TErrorHandlerResponse HandleError( TInt aError, - const SExtendedError& aExtErr, - TDes& aErrorText, - TDes& aContextText ); - - /** - * Reads application settings data from ini-file. - * - * @param aSettings Settings data where values are read. - */ - void ReadSettingsL( TVeiSettings& aSettings )const; - - /** - * Writes application settings data to ini-file. - * - * @param aSettings Settings data where values are written. - */ - void WriteSettingsL( const TVeiSettings& aSettings )const; - - inline TBool AppIsOnTheWayToDestruction() { return iOnTheWayToDestruction; }; - -private: - /** - * From CEikAppUi, takes care of command handling. - * @param aCommand command to be handled - */ - void HandleCommandL( TInt aCommand ); - - /** - * From CEikAppUi, handles key events. - * @param aKeyEvent Event to handled. - * @param aType Type of the key event. - * @return Response code (EKeyWasConsumed, EKeyWasNotConsumed). - */ - virtual TKeyResponse HandleKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ); - - /** - * From CAknAppUiBase. - * Calls CAknViewAppUi::HandleScreenDeviceChangedL(). - */ - virtual void HandleScreenDeviceChangedL(); - - /** - * From @c CEikAppUi. Handles a change to the application's resources which - * are shared across the environment. This function calls - * @param aType The type of resources that have changed. - */ - virtual void HandleResourceChangeL( TInt aType ); - - /** - * From CAknAppUi, HandleForegroundEventL( TBool aForeground ) - * @param aForeground - */ - virtual void HandleForegroundEventL( TBool aForeground ); - - // From MMGXFileNotificationObserver - virtual void HandleFileNotificationEventL(); - -private: - //Data - - CVeiEditVideoView* iEditVideoView; - - CVeiSettingsView* iSettingsView; - - CVeiCutVideoView* iCutVideoView; - - CVeiCutAudioView* iCutAudioView; - - CMGXFileNotificationHandler* iFileNotificationHandler; - - /** - * Trim for MMS view. - */ - CVeiTrimForMmsView* iTrimForMmsView; - - /** - * Common volume setting. - */ - TInt iVolume; - - /** - * Send UI, MMS/Infrared/BT - */ - CSendUi* iSendAppUi; - - TProcessPriority iOriginalProcessPriority; - TBool iProcessPriorityAltered; - - TBool iOnTheWayToDestruction; -}; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiCutAudioContainer.h --- a/videditor/ManualVideoEditor/inc/VeiCutAudioContainer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,541 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEICUTAUDIOCONTAINER_H -#define VEICUTAUDIOCONTAINER_H - -#include -#include -#include -#include -#include -#include -#include - -#include "VeiRemConTarget.h" - -class CVeiCutAudioView; -class CVeiCutterBar; -class CAknsBasicBackgroundControlContext; -class CVeiErrorUI; -class CVeiTextDisplay; -class CSampleArrayHandler; - - -const TInt KMinCutAudioVolumeLevel = 1; -const TInt KMaxCutAudioVolumeLevel = 10; - -/** - * CVeiCutAudioContainer container control class. - * - * Container for CVeiCutAudioView. - */ -class CVeiCutAudioContainer: public CCoeControl, - public MCoeControlObserver, - public MMdaAudioPlayerCallback, - public MVedAudioClipVisualizationObserver, - public MProgressDialogCallback, - public MVeiMediakeyObserver -{ -public: - /** - * Edit state. - */ - enum TCutAudioState - { - EStateInitializing = 1, - EStateOpening, - EStateStoppedInitial, - EStateStopped, - EStatePlaying, - EStatePlayingMenuOpen, - EStatePaused, - EStateTerminating - }; - - enum TMarkState - { - ENoMark = 0, - EMarked - }; - - - - /** - * Start or end mark. - */ - enum TCutMark - { - ENoMarks, - EStartMark, - EEndMark - }; - - - -public: - /** - * Creates a CStoryboardContainer object, which will draw itself to aRect. - * - * @param aRect Frame rectangle for container. - * @param aMovie movie being edited - * - * @return a pointer to the created instance of CStoryboardContainer - */ - static CVeiCutAudioContainer* NewL( const TRect& aRect, - CVeiCutAudioView& aView, - CVeiErrorUI& aErrorUI ); - - /** - * Creates a CStoryboardContainer object, which will draw itself to aRect. - * Leaves the created object in the cleanup stack. - * - * @param aRect Frame rectangle for container. - * @param aMovie movie being edited - * - * @return a pointer to the created instance of CStoryboardContainer - */ - static CVeiCutAudioContainer* NewLC( const TRect& aRect, - CVeiCutAudioView& aView, - CVeiErrorUI& aErrorUI ); - - /** - * Default constructor. - * - * @param aRect Frame rectangle for container. - * @param aView pointer to the view. - */ - void ConstructL( const TRect& aRect, - CVeiCutAudioView& aView, - CVeiErrorUI& aErrorUI ); - - /** - * Destructor. - */ - virtual ~CVeiCutAudioContainer(); - -public: - void OpenAudioFileL( const TDesC& aFileName ); - - /** - * ###Missin' description### - * - * @param aState - */ - void SetStateL( CVeiCutAudioContainer::TCutAudioState aState ); - /** - * Starts playing. - * - * @param aStartTime - */ - void PlayL( const TTimeIntervalMicroSeconds& aStartTime = TTimeIntervalMicroSeconds( 0 ) ); - - /** - * Stops playing. - */ - void StopL(); - - /** - * Pauses playing. - */ - void PauseL(); - - /** - * Closes the stream. - */ - void CloseStreamL(); - - /** - * Returns the playback position. - * - * @return playback position - */ - const TTimeIntervalMicroSeconds& PlaybackPositionL(); - - /** - * Marks the in point. - */ - void MarkedInL(); - - /** - * Marks the out point. - */ - void MarkedOutL(); - - /** - * Change volume level. Changes current volume level by given amount. - * - * @param aVolumeChange volume change - */ - void SetVolumeL( TInt aVolumeChange ); - - /** - * Sets cut in time to cut video bar. - * - * @param aTime Cut in time - */ - void SetInTimeL( const TTimeIntervalMicroSeconds& aTime ); - - /** - * Sets cut out time to cut video bar. - * - * @param aTime Cut out time - */ - void SetOutTimeL( const TTimeIntervalMicroSeconds& aTime ); - - /** - * Sets duration to cut video bar. - * - * @param aTime duration - */ - void SetDuration( const TTimeIntervalMicroSeconds& aDuration ); - -public: - /** - * Update function that is called by the static callback method. - */ - void DoUpdate(); - - /** - * From CCoeControl, OfferKeyEventL. - * - * @param aKeyEvent key event - * @param aType event code - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); - - /** - * Returns total length of the video clip. - * - * @return total length - */ - const TTimeIntervalMicroSeconds& TotalLength(); - - /** - * Returns the player state. - * - * @return player state - */ - inline TCutAudioState State() { return iState; }; - /** - * Returns current volume level. - * - * @return volume level - */ - inline TInt Volume() const { return iInternalVolume; }; - - /** - * Returns minimum volume level. - * - * @return min volume level - */ - inline TInt MinVolume() const { return 1; }; - - /** - * Returns maximum volume level. - * - * @return max volume level - */ - inline TInt MaxVolume()const { return iMaxVolume; }; - - /** - * Returns the visualization resolution. - * - * @return The visualization resolution, i.e. the size of the sample array - */ - TInt VisualizationResolution()const; - - /** - * Prepares the control for termination; stops audio playback - * and sets the state to EStateTerminating. - * - */ - void PrepareForTerminationL(); - -public: - virtual void NotifyAudioClipVisualizationStarted( const CVedAudioClipInfo& aInfo ); - - virtual void NotifyAudioClipVisualizationProgressed( const CVedAudioClipInfo& aInfo, - TInt aPercentage ); - virtual void NotifyAudioClipVisualizationCompleted( const CVedAudioClipInfo& aInfo, - TInt aError, - TInt8* aVisualization, - TInt aResolution); - -private: - /** - * Callback function for the timer. - * - * @param aThis self pointer - * - * @return dummy value - */ - static TInt DoAudioBarUpdate( TAny* aThis ); - - /** - * From MMdaAudioPlayerCallback - */ - virtual void MapcInitComplete( TInt aError, - const TTimeIntervalMicroSeconds& aDuration ); - - virtual void MapcPlayComplete( TInt aError ); - - /** - * Time increment. - * - * @param aKeyCount number a key events - * @return time - */ - TInt TimeIncrement( TInt aKeyCount )const; - - /** - * Constructor. - * - * @param aView instance of cut audio view - * @param aErrorUI instance of CVeiErrorUI - */ - CVeiCutAudioContainer( const TRect& aRect, - CVeiCutAudioView& aView, - CVeiErrorUI& aErrorUI ); - - - /** - * Continue playing - */ - void ResumeL(); - - /** - * Gets intra frame bitmap from video clip. - * - * @param aTime intra frame time. - */ - void GetThumbAtL( TTimeIntervalMicroSeconds aTime ); - - /** - * From CoeControl, MopSupplyObject. - * - * @param aId - */ - virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); - - /** - * From CoeControl, SizeChanged. - */ - void SizeChanged(); - - /** - * From CoeControl, CountComponentControls. - * - * @return number of component controls in this control - */ - TInt CountComponentControls()const; - - /** - * From CCoeControl, ComponentControl. - * - * @param aIndex index of the control to return - */ - CCoeControl* ComponentControl( TInt aIndex )const; - - /** - * From CCoeControl,Draw. - * - * @param aRect region of the control to be redrawn - */ - void Draw( const TRect& aRect )const; - - /** - * From CCoeControl, gets the control's help context. Associates the - * control with a particular Help file and topic in a context sensitive - * application. - * - * @param aContext Control's help context. - */ - void GetHelpContext( TCoeHelpContext& aContext )const; - - /** - * From CCoeControl, HandleControlEventL - */ - void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ); - - /** - * HandlePointerEventL - * Handles pen inputs - * - * @param aPointerEvent pointer event - */ - void HandlePointerEventL( const TPointerEvent& aPointerEvent ); - - /** - * Handles progress bar touch events - * @param aPBRect Current progress bar rectangle - * @param aPressedPoint The x coordinate value that was pressed - * inside the progress bar - * @param aDragMarks ETrue if the user drags start or end marks. - * EFalse otherwise - */ - void HandleProgressBarTouchL( TRect aPBRect, TInt aPressedPoint, TBool aDragMarks, CVeiCutAudioContainer::TCutMark aCutMark = ENoMarks ); - - - - /** - * Update function that is called when visualization must be changed. - */ - void UpdateVisualizationL(); - - /** - * Get the visualization data from the engine - */ - void GetVisualizationL(); - - /** - * From MProgressDialogCallback - */ - void DialogDismissedL( TInt aButtonId ); - - /** Callback function */ - static TInt AsyncBack( TAny* aThis ); - - /** - * Propagate command to view's HandleCommandL - */ - void HandleCommandL( TInt aCommand ); - - /** - * Draw the visualization, including background and indicators etc. - * to a bitmap, which can be blitted to the screen. - */ - void DrawToBufBitmapL(); - - /** - * Start a progress note dialog - */ - void LaunchProgressNoteL(); - - /** HandleVolumeUpL - * - * @see MVeiMediakeyObserver - */ - virtual void HandleVolumeUpL(); - - /** HandleVolumeDownL - * - * @see MVeiMediakeyObserver - */ - virtual void HandleVolumeDownL(); - -private: - //data - /** cut video view */ - CVeiCutAudioView& iView; - - /** Error UI */ - CVeiErrorUI& iErrorUI; - - /** Current state. */ - TCutAudioState iState; - - /** Previous state. */ - TCutAudioState iPrevState; - - /** cut audio bar. */ - CVeiCutterBar* iCutAudioBar; - - /** Last position. */ - TTimeIntervalMicroSeconds iLastPosition; - - /** Video clip duration */ - TTimeIntervalMicroSeconds iDuration; - - /** - * Control context that provides a layout background with a - * background bitmap and its layout rectangle. - */ - CAknsBasicBackgroundControlContext* iBgContext; - - /** Videoplayerutility volume */ - TInt iInternalVolume; - - /** Max volume */ - TInt iMaxVolume; - - /** Key repeat count in seek function. */ - TInt iKeyRepeatCount; - - /** Seek thumbnail position in video clip. */ - TTimeIntervalMicroSeconds iSeekPos; - - /** Seek - flag. */ - TBool iSeeking; - - /** Frame ready - flag */ - TBool iFrameReady; - - /** Last keycode, used in OfferKeyEventL(); */ - TUint iLastKeyCode; - - CFbsBitmap* iPauseBitmap; - CFbsBitmap* iPauseBitmapMask; - - /// Double buffer bitmap - CFbsBitmap* iBufBitmap; - - CPeriodic* iVideoBarTimer; - CMdaAudioPlayerUtility* iAudioSamplePlayer; - TRect iCutTimeDisplayRect; - CVeiTextDisplay* iCutTimeDisplay; - TRect iIconDisplayRect; - - CSampleArrayHandler* iSampleArrayHandler; - - TInt iMarkOutCounter; - TInt iMarkInCounter; - - TInt iPreviousScreenMode; - TInt iCurrentScreenMode; - - TMarkState iMarkInState; - TMarkState iMarkOutState; - - TTimeIntervalMicroSeconds iMarkedInTime; - TTimeIntervalMicroSeconds iMarkedOutTime; - - /** Progress note. */ - CAknProgressDialog* iProgressNote; - - /** Callback utility */ - CAsyncCallBack* iCallBack; - - /** Remote connection API used to handle the volume keys. */ - CVeiRemConTarget* iRemConTarget; - - /** ETrue if user is dragging the start or end mark with a pen, - EFalse otherwise */ - TBool iIsMarkDrag; - - /** ETrue if the pen is in start or end mark area when it goes down, - EFalse otherwise */ - TBool iIsMarkTapped; - - /** Indicates which mark the user has tapped */ - TCutMark iTappedMark; -}; -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiCutAudioView.h --- a/videditor/ManualVideoEditor/inc/VeiCutAudioView.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,361 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEICUTAUDIOVIEW_H -#define VEICUTAUDIOVIEW_H - - -#include -#include -#include -#include - -#include "VeiCutAudioContainer.h" - - -class CVeiCutAudioContainer; -class CAknTitlePane; -class CAknNavigationDecorator; -class CAknNavigationControlContainer; -class CPeriodic; -class CMdaAudioRecorderUtility; -class CMdaAudioType; -class TMdaClipLocation; -class CVeiErrorUI; - -/** - * CVeiCutAudioView view class. - * - */ -class CVeiCutAudioView: public CAknView -{ -public: - // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CVeiCutAudioView* NewL(); - - /** - * Two-phased constructor. - */ - static CVeiCutAudioView* NewLC(); - - /** - * Destructor. - */ - virtual ~CVeiCutAudioView(); - -protected: - - /** - * From CAknView, HandleForegroundEventL( TBool aForeground ) - * - * @param aForeground - */ - virtual void HandleForegroundEventL( TBool aForeground ); - -private: - // From CAknView - - /** - * From CAknView, DynInitMenuPaneL. - * - * @param aResourceId resource id - * @param aMenuPane menu pane - */ - void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); - -public: - /** - * From CAknView, Id. - * - * @return view id. - */ - TUid Id()const; - - - CVeiCutAudioView(); - - /** - * Default constructor. - */ - void ConstructL(); - - /** - * From CAknView, HandleCommandL(TInt aCommand); - * - * @param aCommand - */ - void HandleCommandL( TInt aCommand ); - - /** - * Draws the time label navi. - */ - void DrawTimeNaviL(); - - /** - * Clears the in and/or out points. - * - * @param aClearIn whether to clear the in point - * @param aClearOut whether to clear the out point - */ - void ClearInOutL( TBool aClearIn, TBool aClearOut ); - - /** - * Sets the movie and index - * - * @param aVideoClip movie name - * @param aIndex index of the video clip in movie - */ - void SetVideoClipAndIndex( CVedMovie& aVideoClip, TInt aIndex ); - - /** - * Sets the volume - * - * @param aVolume Volume level. - */ - void SetVolume( TInt aVolume ); - - /** - * Returns the cut out time. - * - * @return cut out time - */ - TUint OutPointTime(); - - /** - * Returns the cut in time. - * - * @return cut in time - */ - TUint InPointTime(); - - /** - * Changes the CBA (command button array) according to the edit - * state. - * - * @param aState current state - */ - void UpdateCBAL( TInt aState ); - - /** - * Updates the time label navi. This method is called by the - * static callback function. - */ - void UpdateTimeL(); - - /** - * Starts the navi pane update, that is, the periodic timer. - */ - void StartNaviPaneUpdateL(); - - /** - * Stops the navi pane update. - */ - void StopNaviPaneUpdateL(); - - /** - * Adjusts the volume up. - */ - void VolumeUpL(); - - /** - * Adjusts the volume down. - */ - void VolumeDownL(); - - /** - * Mutes the volume. - */ - void VolumeMuteL(); - - /** - * Static callback function for hiding the volume indicator. - * - * @param aPtr self pointer - * - * @return dummy value - */ - static TInt HideVolumeCallbackL( TAny* aPtr ); - - /** - * Hides the volume indicator. - */ - void HideVolume(); - - /** - * Gets visualization values. - */ - void GetAudioVisualizationL(); - - /** - * Cancels visualization process. - */ - void CancelVisualizationL(); - - /** Possible mark states */ - enum TMarkState - { - EMarkStateIn, - EMarkStateOut, - EMarkStateInOut - }; - - /** - * - */ - void HandleStatusPaneSizeChange(); - - /** Callback function */ - static TInt AsyncOpenAudioFile( TAny* aThis ); - - /** - * Handles a change to the control's resources. - */ - void HandleResourceChange( TInt aType ); - - /** - * Moves the start or end mark when user drags them. - * - * @param aPosition position where the mark is moved to - * @param aMarkType EStartMark or EEndMark - * @return - - */ - void MoveStartOrEndMarkL( TTimeIntervalMicroSeconds aPosition, CVeiCutAudioContainer::TCutMark aMarkType ); - -private: - /** - * Starts playing the clip. If the clip is paused, resumes - * playing. - */ - void PlayPreviewL(); - - /** - * Pauses the playback. - */ - void PausePreviewL(); - - /** - * Plays the marked section of the clip. - */ - void PlayMarkedL(); - - /** - * Marks the in point to the current point. - */ - void MarkInL(); - - /** - * Marks the out point to the current point. - */ - void MarkOutL(); - - /** - * Creates the time label navi. - * - * @return time label navi - */ - CAknNavigationDecorator* CreateTimeLabelNaviL(); - - /** - * Static callback function for the periodical timer that updates - * the time navi. - * - * @param aPtr self pointer - * - * @return dummy value - */ - static TInt UpdateTimeCallbackL( TAny* aPtr ); - - /** - * start processing the input file - */ - void OpenAudioFileL(); - -private: - - /** - * From AknView, DoActivateL. - * - * @param aPrevViewId previous view id - * @param aCustomMessageId custom message id - * @param aCustomMessage custom message - */ - void DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * From AknView, DoDeactivate - */ - void DoDeactivate(); - -private: - // Data - /* cut video container */ - CVeiCutAudioContainer* iContainer; - - /* index of the video clip in the movie */ - TUint iIndex; - - /* movie */ - CVedMovie* iMovie; - - /** Time updater. */ - CPeriodic* iTimeUpdater; - - /** Pointer to the navi pane. */ - CAknNavigationControlContainer* iNaviPane; - - /** Time navi. */ - CAknNavigationDecorator* iTimeNavi; - - /** Volume hiding timer. */ - CPeriodic* iVolumeHider; - - /** Volume navi decorator. */ - CAknNavigationDecorator* iVolumeNavi; - - /** Popup menu state flag */ - TBool iPopupMenuOpened; - - /** Audio muted flag */ - TBool iAudioMuted; - - /** play marked flag */ - TBool iPlayMarked; - - /** current mark state */ - TMarkState iMarkState; - - /** Error number */ - TInt iErrorNmb; - - TTimeIntervalMicroSeconds iOriginalCutInTime; - /** Error UI */ - CVeiErrorUI* iErrorUI; - - /** Callback utility */ - CAsyncCallBack* iCallBack; -}; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiCutVideoContainer.h --- a/videditor/ManualVideoEditor/inc/VeiCutVideoContainer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,527 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEICUTVIDEOCONTAINER_H -#define VEICUTVIDEOCONTAINER_H - -#include -#include -#include -#include -#include - -#include "VeiVideoDisplay.h" -#include "VeiImageConverter.h" -#include "VeiRemConTarget.h" - -class CVeiCutVideoView; -class CVeiCutterBar; -class CAknsBasicBackgroundControlContext; -class CVeiErrorUI; -class CVeiVideoDisplay; -class CVeiTextDisplay; - -const TInt KMinCutVideoVolumeLevel = 1; -const TInt KVeiCutBarHeight = 20; -const TInt KProgressbarFinalValue = 50; -_LIT( KEncoderType, "JPEG" ); // encoder type for image conversion - -/** - * CVeiCutVideoContainer container control class. - * - * Container for CVeiCutVideoView. - */ -class CVeiCutVideoContainer: public CCoeControl, - public MCoeControlObserver, - public MVedVideoClipFrameObserver, - public MVedVideoClipInfoObserver, - public MConverterController, - public MProgressDialogCallback, - public MVeiVideoDisplayObserver, - public MVeiMediakeyObserver -{ -public: - /** - * Edit state. - */ - enum TCutVideoState - { - EStateInitializing = 1, - EStateOpening, - EStateStoppedInitial, - EStateStopped, - EStatePlaying, - EStatePlayingMenuOpen, - EStatePaused, - EStateGettingFrame, - EStateBuffering, - EStateTerminating - }; - - - /** - * Start or end mark. - */ - enum TCutMark - { - ENoMark, - EStartMark, - EEndMark - }; - - - -public: - - /** - * Creates a CVeiCutVideoContainer object, which will draw itself to aRect. - * - * @param aRect Frame rectangle for container. - * @param aView - * - * @return a pointer to the created instance of CStoryboardContainer - */ - static CVeiCutVideoContainer* NewL( const TRect& aRect, - CVeiCutVideoView& aView, - CVeiErrorUI& aErrorUI ); - - /** - * Creates a CVeiCutVideoContainer object, which will draw itself to aRect. - * Leaves the created object in the cleanup stack. - * - * @param aRect Frame rectangle for container. - * @param aMovie movie being edited - * - * @return a pointer to the created instance of CStoryboardContainer - */ - static CVeiCutVideoContainer* NewLC( const TRect& aRect, - CVeiCutVideoView& aView, - CVeiErrorUI& aErrorUI ); - - /** - * Default constructor. - * - * @param aRect Frame rectangle for container. - * @param aView pointer to the view. - */ - void ConstructL( const TRect& aRect, - CVeiCutVideoView& aView, - CVeiErrorUI& aErrorUI ); - - /** - * Destructor. - */ - virtual ~CVeiCutVideoContainer(); - -public: - /** - * Takes one thumbnail bitmap from given file. - * - * @param aFilename name of video clip file - */ - void GetThumbL( const TDesC& aFilename ); - - /** - * ###Missin' description### - * - * @param aState - */ - void SetStateL( CVeiCutVideoContainer::TCutVideoState aState, - TBool aUpdateCBA = ETrue); - /** - * Starts playing. - * - * @param aStartTime - */ - void PlayL( const TDesC& aFilename ); - void PlayMarkedL( const TDesC& aFilename, - const TTimeIntervalMicroSeconds& aStartTime, - const TTimeIntervalMicroSeconds& aEndTime ); - /** - * Stops playing. - */ - void StopL(); - - /** - * Pauses playing. - */ - void PauseL( TBool aUpdateCBA = ETrue ); - - /** - * Closes the stream. - */ - void CloseStreamL(); - - /** - * Returns the playback position. - * - * @return playback position - */ - TTimeIntervalMicroSeconds PlaybackPositionL(); - - /** - * Marks the in point. - */ - void MarkedInL(); - - /** - * Marks the out point. - */ - void MarkedOutL(); - - /** - * Sets cut in time to cut video bar. - * - * @param aTime Cut ín time - */ - void SetInTime( const TTimeIntervalMicroSeconds& aTime ); - - /** - * Sets cut out time to cut video bar. - * - * @param aTime Cut out time - */ - void SetOutTime( const TTimeIntervalMicroSeconds& aTime ); - - /** - * Takes the snapshot from current frame - */ - void TakeSnapshotL(); - - void MuteL(); -public: - - /** - * Update function that is called by the static callback method. - */ - void DoUpdate(); - - // from MVeiVideoDisplayObserver - virtual void NotifyVideoDisplayEvent( const TPlayerEvent aEvent, - const TInt& aInfo = 0 ); - - virtual void NotifyVideoClipFrameCompleted( CVedVideoClipInfo& aInfo, - TInt aError, - CFbsBitmap* aFrame); - /** - * Called to notify that video clip info is ready - * for reading. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - * @param aInfo video clip info - * @param aError KErrNone if info is ready - * for reading; one of the system wide - * error codes if reading file failed - */ - virtual void NotifyVideoClipInfoReady( CVedVideoClipInfo& aInfo, - TInt aError ); - - /** - * From CCoeControl, OfferKeyEventL. - * - * @param aKeyEvent key event - * @param aType event code - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); - - /** - * From MProgressDialogCallback, DialogDismissedL. - * - * @param aButtonId button id - */ - virtual void DialogDismissedL( TInt aButtonId ); - - /** - * Opens a video clip file and initializes videoplayerutility. - * - * @param aFilename file to open - */ - void OpenFileL( const TDesC& aFilename /*, TBool aStartPlaying = EFalse */ ); - - /** - * Prepares the control for termination; stops video playback - * and sets the state to EStateTerminating. - * - */ - void PrepareForTerminationL(); - - // From MConverterController - void NotifyCompletion( TInt aErr ); - -private: - /** - * Callback function for the timer. - * - * @param aThis self pointer - * - * @return dummy value - */ - static TInt DoAudioBarUpdate( TAny* aThis ); - - /** - * Time increment. - * - * @param aKeyCount number a key events - * @return time - */ - TInt TimeIncrement( TInt aKeyCount )const; - - /** - * Constructor. - * - * @param aView instance of cut video view - * @param aErrorUI instance of CVeiErrorUI - */ - CVeiCutVideoContainer( const TRect& aRect, - CVeiCutVideoView& aView, - CVeiErrorUI& aErrorUI ); - - /** - * Gets intra frame bitmap from video clip. - * - * @param aTime intra frame time. - */ - void GetThumbAtL( const TTimeIntervalMicroSeconds& aTime ); - - /** - * From CoeControl, MopSupplyObject. - * - * @param aId - */ - virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); - - /** - * From CoeControl, SizeChanged. - */ - void SizeChanged(); - - /** - * From CoeControl, CountComponentControls. - * - * @return number of component controls in this control - */ - TInt CountComponentControls()const; - - /** - * From CCoeControl, ComponentControl. - * - * @param aIndex index of the control to return - */ - CCoeControl* ComponentControl( TInt aIndex )const; - - /** - * From CCoeControl,Draw. - * - * @param aRect region of the control to be redrawn - */ - void Draw( const TRect& aRect )const; - - /** - * From CCoeControl, gets the control's help context. Associates the - * control with a particular Help file and topic in a context sensitive - * application. - * - * @param aContext Control's help context. - */ - void GetHelpContext( TCoeHelpContext& aContext )const; - - /** - * From CCoeControl, HandleControlEventL - */ - void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ); - - /** - * HandlePointerEventL - * Handles pen inputs - * - * @param aPointerEvent pointer event - */ - void HandlePointerEventL( const TPointerEvent& aPointerEvent ); - - /** - * Handles progress bar touch events - * @param aPBRect Current progress bar rectangle - * @param aPressedPoint The x coordinate value that was pressed - * inside the progress bar - * @param aDragMarks ETrue if the user drags start or end marks. - * EFalse otherwise - */ - void HandleProgressBarTouchL( TRect aPBRect, TInt aPressedPoint, TBool aDragMarks, CVeiCutVideoContainer::TCutMark aCutMark = ENoMark ); - - /* - * Indicates ProgressNote. - * - */ - void ShowProgressNoteL(); - - /** - * Shows information note with given message. - * - * @param aMessage message to show. - */ - void ShowInformationNoteL( const TDesC& aMessage )const; - - /** - * The entity of ProgressCallBackL() function - * @return 0 when work is done, otherwise return 1. - */ - TInt UpdateProgressNoteL(); - - /** - * Saves snapshot. - */ - void SaveSnapshotL(); - - /** - * Cancels saving of the snapshot. - */ - void CancelSnapshotSave(); - - void StopProgressDialog(); - - void ShowGlobalErrorNote( const TInt aErr ); - - /** HandleVolumeUpL - * - * @see MVeiMediakeyObserver - */ - virtual void HandleVolumeUpL(); - - /** HandleVolumeDownL - * - * @see MVeiMediakeyObserver - */ - virtual void HandleVolumeDownL(); - - /** Callback function */ - static TInt AsyncTakeSnapshot( TAny* aThis ); - /** Callback function */ - static TInt AsyncSaveSnapshot( TAny* aThis ); - -private: - //data - /** cut video view */ - CVeiCutVideoView& iView; - - /** Error UI */ - CVeiErrorUI& iErrorUI; - - /** Video clip info*/ - CVedVideoClipInfo* iVideoClipInfo; - - /** Current state. */ - TCutVideoState iState; - - /** Previous state. */ - TCutVideoState iPreviousState; - - /** Previous state. */ - TCutVideoState iPrevState; - - /** cut video bar. */ - CVeiCutterBar* iCutVideoBar; - - /** Last position. */ - TTimeIntervalMicroSeconds iLastPosition; - - /** Video clip duration */ - TTimeIntervalMicroSeconds iDuration; - - /** - * Control context that provides a layout background with a - * background bitmap and its layout rectangle. - */ - CAknsBasicBackgroundControlContext* iBgContext; - - TInt iInternalVolume; - - /** Key repeat count in seek function. */ - TInt iKeyRepeatCount; - - /** Seek thumbnail position in video clip. */ - TTimeIntervalMicroSeconds iSeekPos; - - /** Seek - flag. */ - TBool iSeeking; - - /** Frame ready - flag */ - TBool iFrameReady; - - /** Last keycode, used in OfferKeyEventL(); */ - TUint iLastKeyCode; - - /** The actuall calls to ICL are done from this image converter. */ - CVeiImageConverter* iConverter; - - //** Whether we need to take snapshot. */ - TBool iTakeSnapshot; - - /** Progress dialog */ - CAknProgressDialog* iProgressDialog; - - /** Progress info for the progress dialog. */ - CEikProgressInfo* iProgressInfo; - - HBufC* iSaveToFileName; - TSize iFrameSize; - CPeriodic* iVideoBarTimer; - CVeiVideoDisplay* iVideoDisplay; - TRect iDisplayRect; - TRect iCutTimeDisplayRect; - CVeiTextDisplay* iCutTimeDisplay; - TBool iPlayOrPlayMarked; - - TRect iIconDisplayRect; - - CFbsBitmap* iPauseBitmap; - CFbsBitmap* iPauseBitmapMask; - - /** Callback utilities */ - CAsyncCallBack* iCallBackSaveSnapshot; - CAsyncCallBack* iCallBackTakeSnapshot; - - /** Remote connection API used to handle the volume keys. */ - CVeiRemConTarget* iRemConTarget; - - TBool iTakeSnapshotWaiting; - - /** ETrue if user is dragging the start or end mark with a pen, - EFalse otherwise */ - TBool iIsMarkDrag; - - /** ETrue if the pen is in start or end mark area when it goes down, - EFalse otherwise */ - TBool iIsMarkTapped; - - /** Indicates which mark the user has tapped */ - TCutMark iTappedMark; - - -#include "veicutvideocontainer.inl" - -}; -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiCutVideoContainer.inl --- a/videditor/ManualVideoEditor/inc/VeiCutVideoContainer.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEICUTVIDEOCONTAINER_INL__ -#define __VEICUTVIDEOCONTAINER_INL__ - -public: - /** - * Returns total length of the video clip. - * - * @return total length - */ - inline TTimeIntervalMicroSeconds TotalLength() { return iDuration; }; - - /** - * Returns the player state. - * - * @return player state - */ - inline TCutVideoState State() { return iState; }; - /** - * Returns current volume level. - * - * @return volume level - */ - inline TInt Volume() const { return iInternalVolume; }; - - /** - * Returns minimum volume level. - * - * @return min volume level - */ - inline TInt MinVolume() const { return KMinCutVideoVolumeLevel; }; - - /** - * Returns maximum volume level. - * - * @return max volume level - */ - inline TInt MaxVolume() const { return KMaxVolumeLevel; }; - /** - * Change volume level. Changes current volume level to given level. - * - * @param aVolumeLevel new volume level - */ - inline void SetVolume( TInt aVolumeLevel ) { iInternalVolume = aVolumeLevel; }; - -#endif // __VEICUTVIDEOCONTAINER diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiCutVideoView.h --- a/videditor/ManualVideoEditor/inc/VeiCutVideoView.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,431 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEICUTVIDEOVIEW_H -#define VEICUTVIDEOVIEW_H - - -#include -#include -#include -#include -#include -#include - -#include "VeiCutVideoContainer.h" - - -class CVeiCutVideoContainer; -class CAknTitlePane; -class CAknNavigationDecorator; -class CAknNavigationControlContainer; -class CPeriodic; -class CVeiErrorUI; -class CAknMemorySelectionDialog; - -/** - * CVeiCutVideoView view class. - * - */ -class CVeiCutVideoView: public CAknView, - public MVedMovieObserver, - public MVedMovieProcessingObserver, - public MProgressDialogCallback -{ -public: - - /** - * Default constructor. - */ - void ConstructL(); - - /** - * Destructor. - */ - virtual ~CVeiCutVideoView(); - -protected: - - /** - * From CAknView, HandleForegroundEventL( TBool aForeground ) - * - * @param aForeground - */ - virtual void HandleForegroundEventL( TBool aForeground ); - -private: - - /** - * From CAknView, DynInitMenuPaneL. - * - * @param aResourceId resource id - * @param aMenuPane menu pane - */ - void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); - - /** - * From MVedMovieProcessingObserver - */ - virtual void NotifyMovieProcessingStartedL( CVedMovie& aMovie ); - virtual void NotifyMovieProcessingProgressed( CVedMovie& aMovie, - TInt aPercentage ); - virtual void NotifyMovieProcessingCompleted( CVedMovie& aMovie, - TInt aError ); - - /** - * From MVedMovieObserver - */ - virtual void NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyVideoClipAddingFailed( CVedMovie& aMovie, TInt aError ); - - virtual void NotifyVideoClipRemoved( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyVideoClipIndicesChanged( CVedMovie& aMovie, - TInt aOldIndex, - TInt aNewIndex ); - - virtual void NotifyVideoClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipColorEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipAudioSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyStartTransitionEffectChanged( CVedMovie& aMovie ); - - virtual void NotifyMiddleTransitionEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyEndTransitionEffectChanged( CVedMovie& aMovie ); - - virtual void NotifyAudioClipAdded( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyAudioClipAddingFailed( CVedMovie& aMovie, TInt aError ); - - virtual void NotifyAudioClipRemoved( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyAudioClipIndicesChanged( CVedMovie& aMovie, - TInt aOldIndex, - TInt aNewIndex ); - - virtual void NotifyAudioClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyMovieReseted( CVedMovie& aMovie ); - - virtual void NotifyVideoClipGeneratorSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipDescriptiveNameChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyMovieQualityChanged( CVedMovie& aMovie ); - - virtual void NotifyMovieOutputParametersChanged( CVedMovie& aMovie ); - - virtual void NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - /** - * From MProgressDialogCallback - */ - void DialogDismissedL( TInt aButtonId ); - - -public: - /** - * - * - * @return VeiCutVideoView Uid - */ - TUid Id()const; - - /** - * Starts temporary clip processing. - */ - void GenerateEffectedClipL(); - - /** - * From CAknView, HandleCommandL(TInt aCommand); - * - * @param aCommand - */ - void HandleCommandL( TInt aCommand ); - - /** - * Draws the time label navi. - */ - void DrawTimeNaviL(); - - /** - * Clears the in and/or out points. - * - * @param aClearIn whether to clear the in point - * @param aClearOut whether to clear the out point - */ - void ClearInOutL( TBool aClearIn, TBool aClearOut ); - - /** - * Sets the movie and index - * - * @param aVideoClip movie name - * @param aIndex index of the video clip in movie - */ - void SetVideoClipAndIndex( CVedMovie& aVideoClip, TInt aIndex ); - - /** - * Returns the cut out time. - * - * @return cut out time - */ - TUint OutPointTime(); - - /** - * Returns the cut in time. - * - * @return cut in time - */ - TUint InPointTime(); - - /** - * Changes the CBA (command button array) according to the edit - * state. - * - * @param aState current state - */ - void UpdateCBAL( TInt aState ); - - /** - * Updates the time label navi. This method is called by the - * static callback function. - */ - void UpdateTimeL(); - - /** - * Starts the navi pane update, that is, the periodic timer. - */ - void StartNaviPaneUpdateL(); - - /** - * Stops the navi pane update. - */ - void StopNaviPaneUpdateL(); - - /** - * - */ - void ShowVolumeLabelL( TInt aVolume ); - - /** - * Mutes the volume. - */ - void VolumeMuteL(); - - /** - * Static callback function for hiding the volume indicator. - * - * @param aPtr self pointer - * - * @return dummy value - */ - static TInt HideVolumeCallbackL( TAny* aPtr ); - - /** - * Hides the volume indicator. - */ - void HideVolume(); - - /** Possible mark states */ - enum TMarkState - { - EMarkStateIn, - EMarkStateOut, - EMarkStateInOut - }; - - void HandleStatusPaneSizeChange(); - - /** - * No description. - * - * - * @return No description. - */ - TBool IsEnoughFreeSpaceToSaveL(); // const; - TTimeIntervalMicroSeconds GetVideoClipCutInTime(); - TTimeIntervalMicroSeconds GetVideoClipCutOutTime(); - - /** - * Handles a change to the control's resources. - */ - void HandleResourceChange( TInt aType ); - - - /** - * Moves the start or end mark when user drags them. - * - * @param aPosition position where the mark is moved to - * @param aMarkType EStartMark or EEndMark - * @return - - */ - void MoveStartOrEndMarkL( TTimeIntervalMicroSeconds aPosition, CVeiCutVideoContainer::TCutMark aMarkType ); - - - -private: - /** - * Starts playing the clip. If the clip is paused, resumes - * playing. - */ - void PlayPreviewL(); - - /** - * Pauses the playback. - */ - void PausePreviewL(); - - /** - * Plays the marked section of the clip. - */ - void PlayMarkedL(); - - /** - * Marks the in point to the current point. - */ - void MarkInL(); - - /** - * Marks the out point to the current point. - */ - void MarkOutL(); - - /** - * Creates the time label navi. - * - * @return time label navi - */ - CAknNavigationDecorator* CreateTimeLabelNaviL(); - - /** - * Static callback function for the periodical timer that updates - * the time navi. - * - * @param aPtr self pointer - * - * @return dummy value - */ - static TInt UpdateTimeCallbackL( TAny* aPtr ); - -private: - - /** - * From AknView, DoActivateL. - * - * @param aPrevViewId previous view id - * @param aCustomMessageId custom message id - * @param aCustomMessage custom message - */ - void DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * From AknView, DoDeactivate - */ - void DoDeactivate(); - -private: - // Data - /* cut video container */ - CVeiCutVideoContainer* iContainer; - - /* index of the video clip in the movie */ - TUint iIndex; - - /* name of the temp file. possibly effected*/ - HBufC* iProcessedTempFile; - - /* movie */ - CVedMovie* iMovie; - - /* temp movie. used to create effected clip */ - CVedMovie* iTempMovie; - - /** Time updater. */ - CPeriodic* iTimeUpdater; - - /** Pointer to the navi pane. */ - CAknNavigationControlContainer* iNaviPane; - - /** Time navi. */ - CAknNavigationDecorator* iTimeNavi; - - /** Progress note. */ - CAknProgressDialog* iProgressNote; - - /** Progress info for the progress note. */ - CEikProgressInfo* iProgressInfo; - - /** Volume hiding timer. */ - CPeriodic* iVolumeHider; - - /** Volume navi decorator. */ - CAknNavigationDecorator* iVolumeNavi; - - /** Popup menu state flag */ - TBool iPopupMenuOpened; - - /** Audio muted flag */ - TBool iAudioMuted; - - /** current mark state */ - TMarkState iMarkState; - - /** Error number */ - TInt iErrorNmb; - - /** Error UI */ - CVeiErrorUI* iErrorUI; - - CAknMemorySelectionDialog::TMemory iMemoryInUse; - - TVeiSettings iMovieSaveSettings; - - -#include "veicutvideoview.inl" -}; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiCutVideoView.inl --- a/videditor/ManualVideoEditor/inc/VeiCutVideoView.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEIEDITVIDEOCONTAINER_INL__ -#define __VEIEDITVIDEOCONTAINER_INL__ - -public: - - - inline HBufC* TempFilename() { return iProcessedTempFile; }; - -#endif //__VEIEDITVIDEOCONTAINER_INL__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiDocument.h --- a/videditor/ManualVideoEditor/inc/VeiDocument.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEDDOCUMENT_H -#define VEDDOCUMENT_H - -// INCLUDES -#include - -// CONSTANTS - -// FORWARD DECLARATIONS -class CEikAppUi; - -// CLASS DECLARATION - -/** - * CVeiDocument application class. - */ -class CVeiDocument: public CAiwGenericParamConsumer -{ -public: - // Constructors and destructor - /** - * Two-phased constructor. - */ - static CVeiDocument* NewL( CEikApplication& aApp ); - - //CFileStore* OpenFileL(TBool aDoOpen,const TDesC& aFilename,RFs& aFs); - //void OpenFileL(TBool aDoOpen , RFile& aFile); - void OpenFileL( CFileStore* & aFileStore, RFile& aFile ); - - /** - * Destructor. - */ - virtual ~CVeiDocument(); - // virtual void RestoreL(const CStreamStore& aStore, const CStreamDictionary& aStreamDic); - -private: - - /** - * Default constructor. - */ - CVeiDocument( CEikApplication& aApp ); - void ConstructL(); - -private: - - /** - * From CEikDocument, create CVeiAppUi "App UI" object. - */ - CEikAppUi* CreateAppUiL(); -}; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiEditVideoContainer.h --- a/videditor/ManualVideoEditor/inc/VeiEditVideoContainer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,837 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEDEDITVIDEOCONTAINER_H -#define VEDEDITVIDEOCONTAINER_H - -#include -#include -#include -#include -#include -#include -#include - -#include "veivideodisplay.h" -#include "veiframetaker.h" -#include "veicutterbar.h" -#include "VeiDisplayLighter.h" -#include "VeiImageClipGenerator.h" -#include "VeiTitleClipGenerator.h" -#include "VeiImageConverter.h" -#include "VeiRemConTarget.h" -#include "VideoEditorCommon.h" - -const TInt KMaxZoomFactorX = 4; -const TInt KMaxZoomFactorY = 2; - -const TInt KVolumeSliderMin = -10; -const TInt KVolumeSliderMax = 10; -const TInt KVolumeSliderStep = 1; - -class CVedMovie; -class CVeiEditVideoView; -class CAknProgressDialog; -class CEikProgressInfo; -class CAknsBasicBackgroundControlContext; -class CVeiVideoDisplay; -class CVeiTextDisplay; -class CVeiCutterBar; -class CPeriodic; -class CVeiIconBox; -class CAknNavigationDecorator; -class CVeiSlider; -class CStoryboardVideoItem; -class CStoryboardAudioItem; -class CTransitionInfo; - -using namespace VideoEditor; - - -/** - * CVeiEditVideoContainer container control class. - * - */ -class CVeiEditVideoContainer: public CCoeControl, - public MCoeControlObserver, - public MVedMovieObserver, - public MVedVideoClipFrameObserver, - public MVedVideoClipInfoObserver, - public MProgressDialogCallback, - public MConverterController, - public MVeiVideoDisplayObserver, - public MVeiFrameTakerObserver, - public MVeiMediakeyObserver - - -{ -public: - - /** - * Creates a CVeiEditVideoContainer object, which will draw - * itself to aRect. - * - * @param aRect Frame rectangle for container. - * @param aMovie movie being edited - * @param aView owner - * - * @return a pointer to the created instance of CVeiEditVideoContainer - */ - static CVeiEditVideoContainer* NewL( const TRect& aRect, - CVedMovie& aMovie, - CVeiEditVideoView& aView ); - - /** - * Creates a CVeiEditVideoContainer object, which will draw - * itself to aRect. - * Leaves the created object in the cleanup stack. - * - * @param aRect Frame rectangle for container. - * @param aMovie movie being edited - * @param aView owner - * - * @return a pointer to the created instance of CVeiEditVideoContainer - */ - static CVeiEditVideoContainer* NewLC( const TRect& aRect, - CVedMovie& aMovie, - CVeiEditVideoView& aView ); - - /** - * Constructor. - * - * @param aMovie instance of CVedMovie - * @param aView instance of Edit Video View - */ - CVeiEditVideoContainer( CVedMovie& aMovie, CVeiEditVideoView& aView ); - - /** - * Default constructor. - * @param aRect Frame rectangle for container. - */ - void ConstructL( const TRect& aRect ); - - /** - * Destructor. - */ - virtual ~CVeiEditVideoContainer(); - - /** - * Enumeration for selection mode - */ - enum TSelectionMode - { - EModeNavigation = 0, - EModeMove, - EModeDuration, - EModeRecordingSetStart, - EModeRecording, - EModeRecordingPaused, - EModeSlowMotion, - EModePreview, - EModeMixingAudio, - EModeAdjustVolume - }; - - /** - * Enumeration for preview state - */ - enum TPreviewState - { - EStateInitializing = 0, - EStateOpening, - EStateStopped, - EStatePlaying, - EStatePaused, - EStateClosed, - EStateBuffering, - EStateGettingFrame, - EStateTerminating - }; - - TBool CurrentClipIsFile(); - - /** - * Sets cursor position to aCurrentIndex. If cursor is on audio track, - * audio index is set and if in video track, video cursor is set. - * - * @param aCurrentIndex Cursor position - */ - void SetCurrentIndex( TInt aCurrentIndex ); - - /** - * Returns the current index. - * - * @return current index - */ - TInt CurrentIndex()const; - - /** - * Updates thumbnail in video array. - * - * @aIndex Index in video array - */ - void UpdateThumbnailL( TInt aIndex ); - - /** - * Sets the selected status. - * - * @param aSelected status - */ - void SetSelectionMode( TSelectionMode aSelectionMode ); - - /** - * Control iInfoDisplay's arrows visibility . - */ - void ArrowsControl()const; - - /** - * Returns the current index and decrements index. - * - * @return current index - */ - TUint GetAndDecrementCurrentIndex(); - - void SetCursorLocation( TCursorLocation aCursorLocation ); - - void PlayVideoFileL( const TDesC& aFilename, const TBool& aFullScreen ); - - void PauseVideoL(); - - /** - * Starts playing video - */ - void PlayVideo( const TDesC& aFilename, TBool& aFullScreen ); - - void StopVideo( TBool aCloseStream ); - - /** - * Set starting value of slow motion. - * - * @param aSlowMotionStartValue slow motion value - */ - void SetSlowMotionStartValueL( TInt aSlowMotionStartValue ); - - void SetRecordedAudioDuration( const TTimeIntervalMicroSeconds& aDuration ); - void DrawTrackBoxes()const; - -public: - - /** - * Update function that is called by the static callback method. - */ - void DoUpdate(); - /** - * - */ - void SetFinishedStatus( TBool aStatus ); - /** - * - */ - void TakeSnapshotL(); - - /** - * Saves snapshot. - */ - void SaveSnapshotL(); - /** - * Gets intra frame bitmap from video clip. - * - * @param aTime intra frame time. - */ - void GetThumbAtL( const TTimeIntervalMicroSeconds& aTime ); - - /** - * - */ - TTimeIntervalMicroSeconds TotalLength(); - - /** - * Returns the playback position. - * @return playback position - */ - TTimeIntervalMicroSeconds PlaybackPositionL(); - - - /** - * Sets hole screen to black - * - * - */ - void SetBlackScreen( TBool aBlack ); - - - /** - * Returns snapshots size by bytes. - * - * - */ - TInt SnapshotSize(); - - /** - * Returns audio mixing ratio between original and imported track. - * Used in EModeMixAudio - * - */ - TInt AudioMixingRatio()const; - - /** - * Returns clip volume, used in EModeAdjustVolume - * - */ - TInt Volume()const; - - /** - * Prepares the control for termination; stops video playback - * and set the state to EStateTerminating. - * - */ - void PrepareForTerminationL(); - -private: - - /** - * Callback function for the timer. - * - * @param aThis self pointer - * - * @return dummy value 42 - */ - static TInt Update( TAny* aThis ); - - void StartZooming(); - - void ShowMiddleAnimationL( TVedMiddleTransitionEffect aMiddleEffect ); - - void ShowEndAnimationL( TVedEndTransitionEffect aEndEffect ); - - void ShowStartAnimationL( TVedStartTransitionEffect aStartEffect ); - - void SetColourToningIcons( TInt aIndex ); - - /** - * Handles video item timeline touch events - * @param aPointerEvent pointer event - */ - void HandleVideoTimelineTouchL( TPointerEvent aPointerEvent ); - - /** - * Handles volume slider touch events - * @param aPointerEvent pointer event - */ - void HandleVolumeSliderTouchL( TPointerEvent aPointerEvent ); - - /** - * Calculates the rects for the video items in the timeline - * and adds them to iVideoItemRectArray - */ - void CalculateVideoClipRects(); - - /** - * Goes through the table iVideoItemRectArray and - * finds the clip that the user has clicked. - * @param aPressedPointX The x coordinate value that was pressed - * inside the timeline - * @return index of the clip that the user has clicked or -1 if - * the click was in the empty part of the timeline - */ - TInt FindClickedClip( TInt aPressedPointX ); - -private: - - /** - * Gets album from aFilename. If file belongs to album, album name is - * returned in aAlbumName, otherwise KNullDesc. - */ - void GetAlbumL( const TDesC& aFilename, TDes& aAlbumName )const; - - /** - * Starts active object which takes thumbnails from videoclip. - * When completed -> NotifyFramesCompleted(...) - */ - void StartFrameTakerL( TInt aIndex ); - - /** - * - */ - void ConvertBW( CFbsBitmap& aBitmap )const; - - /** - * - */ - void ConvertToning( CFbsBitmap& aBitmap )const; - - - /** - * Gets an object whose type is encapsulated by the specified TTypeUid - * object. - * - * @param aId Encapsulates the Uid that identifies the type of object - * required. - * - * @return - */ - virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); - - - virtual void NotifyFramesCompleted( CFbsBitmap* aFirstFrame, - CFbsBitmap* aLastFrame, - CFbsBitmap* aTimelineFrame, - TInt aError ); - - - virtual void NotifyVideoDisplayEvent( const TPlayerEvent aEvent, - const TInt& aInfo = 0 ); - /** - * From MVedVideoClipInfoObserver - */ - virtual void NotifyVideoClipInfoReady( CVedVideoClipInfo& aInfo, - TInt aError ); - void NotifyCompletion( TInt aErr ); - - /** - * From MVedMovieObserver - */ - virtual void NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyVideoClipAddingFailed( CVedMovie& aMovie, TInt aError ); - - virtual void NotifyVideoClipRemoved( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyVideoClipIndicesChanged( CVedMovie& aMovie, - TInt aOldIndex, - TInt aNewIndex ); - - virtual void NotifyVideoClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipColorEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipAudioSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyStartTransitionEffectChanged( CVedMovie& aMovie ); - - virtual void NotifyMiddleTransitionEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyEndTransitionEffectChanged( CVedMovie& aMovie ); - - virtual void NotifyAudioClipAdded( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyAudioClipAddingFailed( CVedMovie& aMovie, - TInt aError ); - - virtual void NotifyAudioClipRemoved( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyAudioClipIndicesChanged( CVedMovie& aMovie, - TInt aOldIndex, - TInt aNewIndex ); - - virtual void NotifyAudioClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyMovieReseted( CVedMovie& aMovie ); - - virtual void NotifyVideoClipFrameCompleted( CVedVideoClipInfo& aInfo, - TInt aError, - CFbsBitmap* aFrame ); - - virtual void NotifyVideoClipGeneratorSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipDescriptiveNameChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyMovieQualityChanged( CVedMovie& aMovie ); - - virtual void NotifyMovieOutputParametersChanged( CVedMovie& aMovie ); - - virtual void NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void DialogDismissedL( TInt aButtonId ); - - /** - * Moves selected audio clip right. Only for OfferKeyEventL use. - * - * @return EKeyWasConsumed if key event was processed and - * EKeyWasNotConsumed if it was not. - */ - TKeyResponse MoveAudioRight(); - - /** - * Moves selected audio clip left. Only for OfferKeyEventL use. - * - * @return EKeyWasConsumed if key event was processed and - * EKeyWasNotConsumed if it was not. - */ - TKeyResponse MoveAudioLeft(); - - - /** - * Time increment. - * - * @return Time in milliseconds - */ - TInt TimeIncrement( TInt aKeyCount )const; - - /* - * From CoeControl,SizeChanged. - */ - void SizeChanged(); - - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); - /** - * From CoeControl,CountComponentControls. - */ - TInt CountComponentControls()const; - - /** - * From CCoeControl,ComponentControl. - */ - CCoeControl* ComponentControl( TInt aIndex )const; - - /** - * From CCoeControl,Draw. - */ - void Draw( const TRect& aRect )const; - - /** - * From CCoeControl. Handles a change to the control's resources. - * @param aType A message UID value. - */ - void HandleResourceChange( TInt aType ); - - /** - * From CCoeControl, gets the control's help context. Associates the - * control with a particular Help file and topic in a context sensitive - * application. - * - * @param aContext Control's help context. - */ - void GetHelpContext( TCoeHelpContext& aContext )const; - - /** - * Draws play head when previewing video - */ - void DrawPlayHead() /*const*/; - - /** - * From MCoeControlObserver, called when there is a control event - * to handle. - * - * @param aControl control originating the event - * @param aEventType event type - */ - void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ); - - /** - * From CCoeControl - * - * @param aPointerEvent pointer event - */ - void HandlePointerEventL( const TPointerEvent& aPointerEvent ); - - /** - * Callback function for the playhead timer. - * @param aThis self pointer - * @return dummy value 42 - */ - static TInt UpdatePosition( TAny* aThis ); - - /** - * Update function that is called by the static - * callback method - UpdatePosition. - */ - void DoUpdatePosition(); - - /** - * Returns the boolean is audioclip cutted. - * - * @return TBool - */ - TBool IsAudioClipCutted(); - - TKeyResponse HandleScrollBarL( const TKeyEvent& aKeyEvent, - TEventCode aType ); - - void CreateScrollBarL( const TRect& aRect ); - - /** - * Cancels saving of the snapshot. - */ - void CancelSnapshotSave(); - - /** - * Starts progress dialog - * - * @param aDialogResId resource id of the dialog - * @param aTextResId text of dialog - */ - void StartProgressDialogL( const TInt aDialogResId, const TInt aTextResId ); - - void SetPreviewState( const TPreviewState aNewState ); - - /** HandleVolumeUpL - * - * @see MVeiMediakeyObserver - */ - virtual void HandleVolumeUpL(); - - /** HandleVolumeDownL - * - * @see MVeiMediakeyObserver - */ - virtual void HandleVolumeDownL(); - - /** Callback function */ - static TInt AsyncTakeSnapshot( TAny* aThis ); - -private: - CVeiDisplayLighter* iScreenLight; - /** View eg.owner*/ - CVeiEditVideoView& iView; - - /** Movie being edited. */ - CVedMovie& iMovie; - - /** Currently processed thumbnail index. */ - TInt iCurrentlyProcessedIndex; - - /** Video cursor position. */ - TInt iVideoCursorPos; - - /** Audio cursor position. */ - TInt iAudioCursorPos; - - /** No thumbnail icon. */ - CFbsBitmap* iNoThumbnailIcon; - CFbsBitmap* iNoThumbnailIconMask; - - /** Audio icon. */ - CFbsBitmap* iAudioIcon; - - /** Audio mixing icon. */ - CFbsBitmap* iAudioMixingIcon; - - CFbsBitmap* iAudioTrackIcon; - CFbsBitmap* iAudioTrackIconMask; - /** Video track icon. */ - CFbsBitmap* iVideoTrackIcon; - CFbsBitmap* iVideoTrackIconMask; - - /** Array of video items. */ - RPointerArray < CStoryboardVideoItem > iVideoItemArray; - - /** Array of audio items. */ - RPointerArray < CStoryboardAudioItem > iAudioItemArray; - - /** Array of video item rects. */ - RArray < TRect > iVideoItemRectArray; - - /** The index of the clip that the user has clicked. */ - TInt iClickedClip; - - /** The part of the timeline that doesn't include video clips. - If there are no video clips, the rect is the same as the - whole timeline (=iVideoBarBox) */ - TRect iEmptyVideoTimeLineRect; - - /** Cursor location. */ - TCursorLocation iCursorLocation; - - /** Selection mode. */ - TSelectionMode iSelectionMode; - - /** Transition info. */ - CTransitionInfo* iTransitionInfo; - - /** Previous cursor location. */ - TCursorLocation iPrevCursorLocation; - - /** Key repeat count. Incremented in OfferKeyEventL() */ - TInt iKeyRepeatCount; - - TSize iTransitionMarkerSize; - TRect iVideoBarBox; - TRect iAudioBarBox; - TPoint iAudioBarIconPos; - TRect iAudioTrackBox; - TPoint iVideoBarIconPos; - TRect iVideoTrackBox; - TRect iBarArea; - TRect iTextArea; - TInt iTextBaseline; - TRect iIconArea; - TRect iIconTopEmptyArea; - TRect iIconBottomEmptyArea; - TInt iIconTextBaseline; - TPoint iHorizontalSliderPoint; - TSize iHorizontalSliderSize; - TPoint iVerticalSliderPoint; - TSize iVerticalSliderSize; - - CAknProgressDialog* iProgressDialog; - //CEikProgressInfo* iProgressInfo; - - /** Background context. Skin stuff. */ - CAknsBasicBackgroundControlContext* iBgContext; - - TTimeIntervalMicroSeconds iRecordedAudioStartTime; - TTimeIntervalMicroSeconds iRecordedAudioDuration; - - TBool iRecordedAudio; - - TInt iZoomFactorX; - TInt iZoomFactorY; - CPeriodic* iZoomTimer; - - CVeiVideoDisplay* iVideoDisplay; - - CVeiVideoDisplay* iTransitionDisplayLeft; // left hand side - CVeiVideoDisplay* iTransitionDisplayRight; // right hand side - TRect iTransitionDisplayLeftBox; - TRect iTransitionDisplayRightBox; - - CVeiTextDisplay* iInfoDisplay; - CVeiTextDisplay* iArrowsDisplay; - - TRect iVideoDisplayBox; - TRect iVideoDisplayBoxOnTransition; - TRect iInfoDisplayBox; - TRect iSlowMotionBox; - TRect iTransitionArrowsBox; - - CVeiCutterBar* iDummyCutBar; - CVeiCutterBar* iDummyCutBarLeft; - - /* Iconbox */ - CVeiIconBox* iEffectSymbols; - TRect iEffectSymbolBox; - - TRect iDummyCutBarBox; - TRect iDummyCutBarBoxOnTransition; - - CFbsBitmap* iGradientBitmap; - - TBool iFinished; - TBool iTakeSnapshot; - HBufC* iSaveToFileName; - - /** Seek thumbnail position in video clip. */ - TTimeIntervalMicroSeconds iSeekPos; - - /** Seek - flag. */ - TBool iSeeking; - - /** Last keycode, used in OfferKeyEventL(); */ - TUint iLastKeyCode; - - /** Last position. */ - TTimeIntervalMicroSeconds iLastPosition; - - - /** Periodic timer used for playhead update . */ - CPeriodic* iPeriodic; - /** Current point. This is where the horizontal bar is drawn. */ - TUint iCurrentPoint; - CVeiImageConverter* iConverter; - - TInt iSlowMotionValue; - - //** Preview flag. */ - TBool iFullScreenSelected; - - CVeiFrameTaker* iFrameTaker; - - //** GetFrame-flag for seeking functionality. */ - TBool iSeekingFrame; - - HBufC* iTempFileName; - - CVedVideoClipInfo* iTempVideoInfo; - - /** Current preview state. */ - TPreviewState iPreviewState; - /** Previous preview state. */ - TPreviewState iPreviousPreviewState; - - TInt iCurrentPointX; - TBool iCloseStream; - TBool iFrameReady; - TBool iBackKeyPressed; - /** Previous cursor location for preview. */ - TCursorLocation iCursorPreviousLocation; - - /** Flag indicating to draw the screen black. */ - TBool iBlackScreen; - - /** Horizontal slider component. */ - CVeiSlider* iHorizontalSlider; - /** Vertical slider component. */ - CVeiSlider* iVerticalSlider; - - /** Flag telling whether video file must be reopened in preview. */ - TBool iMustBeReopened; - - /** Pause indicator. */ - TRect iPauseIconBox; - CFbsBitmap* iPauseBitmap; - CFbsBitmap* iPauseBitmapMask; - - /** Remote connection API used to handle the volume keys. */ - CVeiRemConTarget* iRemConTarget; - - TBool iTakeSnapshotWaiting; - - /** Callback utility */ - CAsyncCallBack* iCallBack; - - /** ETrue if user is dragging a video clip with touch, - EFalse otherwise */ - TBool iIsVideoDrag; - - /** ETrue if the pen goes down inside a timeline video clip - EFalse otherwise */ - TBool iIsVideoTapped; - - /** The position where the user is dragging the clip into */ - TInt iNewClipPosition; - -#include "veieditvideocontainer.inl" -}; - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiEditVideoContainer.inl --- a/videditor/ManualVideoEditor/inc/VeiEditVideoContainer.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEIEDITVIDEOCONTAINER_INL__ -#define __VEIEDITVIDEOCONTAINER_INL__ - -public: - inline TSelectionMode SelectionMode() { return iSelectionMode; }; - - inline void SetVideoCursorPosition( TUint aPosition ) { iVideoCursorPos = aPosition; }; - - inline TCursorLocation CursorLocation() { return iCursorLocation; }; - - inline TTimeIntervalMicroSeconds RecordedAudioStartTime() const { return iRecordedAudioStartTime; }; - - inline TTimeIntervalMicroSeconds RecordedAudioDuration() const { return iRecordedAudioDuration; }; - - inline void SetRecordedAudioStartTime( TTimeIntervalMicroSeconds aStartTime ) - { - iRecordedAudioStartTime = aStartTime; - } - - inline TPreviewState PreviewState() { return iPreviewState; }; - - inline void SetRecordedAudio( TBool aRecordedAudio ) - { - iRecordedAudio = aRecordedAudio; - } - - /** - * Return value of slow motion in container. - * - * @return TInt - */ - inline TInt SlowMotionValue() { return iSlowMotionValue; }; - -#endif //__VEIEDITVIDEOCONTAINER_INL__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiEditVideoView.h --- a/videditor/ManualVideoEditor/inc/VeiEditVideoView.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1070 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef VEDEDITVIDEOVIEW_H -#define VEDEDITVIDEOVIEW_H - -// INCLUDES -#include -#include -#include -#include -#include -#include -#include "VeiAddQueue.h" -#include "VeiTitleClipGenerator.h" -#include "VeiImageClipGenerator.h" -#include "VeiPopup.h" - -#include "veisettingsview.h" - -#include - -// CONSTANTS -const TUid KView4Id = {4}; -const TInt KMinVolume = 1; -const TInt KMaxVolume = 10; - -// FORWARD DECLARATIONS -class CVeiEditVideoContainer; -class CVeiCutVideoView; -class CVeiCutAudioView; -class CAknNaviLabel; -class CVeiEditVideoLabelNavi; -class CAknNavigationControlContainer; -class CAknNavigationDecorator; -class MGFetch; -class CAknProgressDialog; -class CSendUi; -class CVedMovie; -class CMdaAudioConvertUtility; -class MAknsDataContext; -class CMdaAudioRecorderUtility; -class CVeiErrorUI; -class CVeiTempMaker; -class CAknMemorySelectionDialog; -class CAknWaitDialog; - -class CVeiAddQueue; - -class CVeiTextDisplay; -class CVeiPopup; - - - -// CLASS DECLARATION - -/** - * CVeiEditVideoView view class. - */ -class CVeiEditVideoView: public CAknView, - public MProgressDialogCallback, - public MVedMovieObserver, - public MVedMovieProcessingObserver, - public MVedAudioClipInfoObserver, - public MMdaObjectStateChangeObserver, - public MVeiImageClipGeneratorObserver, - public MVeiTitleClipGeneratorObserver, - public MVeiQueueObserver - -{ - -public: - //Constructors and destructor - - /** - * Static factory constructor. - * - * @param aCutView Instance of cut video view. - * @param aCutAudioView No description. - * @param aSendAppUi No description. - * @return Created CVeiEditVideoView instance. - */ - static CVeiEditVideoView* NewL( CVeiCutVideoView& aCutView, - CVeiCutAudioView& aCutAudioView, - CSendUi& aSendAppUi ); - - /** - * Static factory constructor. Leaves the created object in the - * cleanup stack. - * - * @param aCutView Instance of cut video view. - * @param aCutAudioView No description. - * @param aSendAppUi No description. - * @return Created CVeiEditVideoView instance. - */ - static CVeiEditVideoView* NewLC( CVeiCutVideoView& aCutView, - CVeiCutAudioView& aCutAudioView, - CSendUi& aSendAppUi ); - - /** - * Destructor. - */ - virtual ~CVeiEditVideoView(); - - TUid Id()const; - -public: - // New functions - - void CancelWaitDialog( TInt aError = 0 ); - /** - * Inserts video clip to movie - * - * @param aFilename Video clip to insert. - * @param aStartNow No description. - * @return KErrNone if process was started, - * KErrNotReady if movie was not ready. - */ - TInt AddClipL( const TDesC& aFilename, TBool aStartNow ); - - /** - * Shows error note with given message. - * - * @param aResourceId No description. - * @param aError No description. - */ - void ShowErrorNote( const TInt aResourceId, TInt aError = 0 )const; - - /** - * Shows global error note for given error. - * There are empirically tested error codes for which platform shows something - * For other ones platform does not show anything and for them default string is showed. - * These error codes must be individually tested for every phone model. - * - * @param aError standard error code - */ - void ShowGlobalErrorNote( TInt aError = 0 )const; - - /** - * Returns audio duration of the movie. - * - * @return movie audio duration in microseconds - */ - TTimeIntervalMicroSeconds OriginalAudioDuration()const; - - /** - * Inserts next video clip to movie from videoclip array. - */ - void AddNext(); - - /** - * Processing wait modes - */ - enum TWaitMode - { - ENotWaiting = 0x6300, // 25344 - EProcessingMovieSave, - EProcessingMovieSaveThenQuit, - EOpeningAudioInfo, - EConvertingAudio, - EProcessingMovieForCutting, - EProcessingMoviePreview, - EProcessingMovieSend, - EProcessingError, - ECuttingAudio, - EDuplicating, - EProcessingMovieTrimMms, - ESlowMotion, - EProcessingAudioError - }; - - /** - * Editor states - */ - enum TEditorState - { - EPreview = 0x6500, // 25856 - EQuickPreview, - EEdit, - EBufferingVideo, - EMixAudio, - EAdjustVolume - }; - - void SetEditorState( TEditorState aState ); - - void UpdateMediaGalleryL(); - - TRect ClientOrApplicationRect( TBool aFullScreenSelected )const; - - /** - * Stores App UI orientation. - * - * @return No description. - */ - void StoreOrientation(); - - /** - * Restores the previously stored App UI orientation. - * - * @return No description. - */ - void RestoreOrientation(); - - /** - * Handles a change to the control's resources. - */ - void HandleResourceChange( TInt aType ); - -public: - // Functions from base classes - - /** - * From MProgressDialogCallback, callback method gets - * called when a dialog is dismissed. - * - * @param aButtonId Button id. - */ - virtual void DialogDismissedL( TInt aButtonId ); - - /** - * From MEikMenuObserver, dynamically initialises a menu - * pane. The Uikon framework calls this function, if it is implemented - * in a menu’s observer, immediately before the menu pane is activated. - * - * @param aResourceId Resource ID identifying the menu pane to - * initialise. - * @param aMenuPane The in-memory representation of the menu pane. - */ - void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); - - /** - * From CAknView, no description. - * - * @param aCommand No description. - */ - void HandleCommandL( TInt aCommand ); - - - /** - * No description. - */ - void InsertNewAudio(); - - /** - * No description. - */ - void SetFullScreenSelected( TBool aFullScreenSelected ); - - /** - * Starts navipane update. - */ - void StartNaviPaneUpdateL(); - - /** - * Stops the navi pane update. - */ - void StopNaviPaneUpdateL(); - - /** - * No description. - */ - void ShowVolumeLabelL( TInt aVolume ); - - /** - * No description. - */ - void DoUpdateEditNaviLabelL()const; - virtual void HandleScreenDeviceChangedL(); - - /** - * No description. - * - * - * @return No description. - */ - TBool IsEnoughFreeSpaceToSaveL( TInt aBytesToAdd = 0 )const; - - void SetCbaL( TEditorState aState ); - -protected: - // New functions - - /** - * Callback function to be called when the - * iAudioRecordPeriodic is scheduled after a timer event. - * - * @param aThis Pointer to this class. - * @return Always one (1); indicates that this callback function - * should be called again. - */ - static TInt UpdateAudioRecording( TAny* aThis ); - - static TInt UpdateNaviPreviewing( TAny* aThis ); - - /** - * No description. - */ - void DoUpdateAudioRecording(); - - /** - * No description. - * - * - * @return No description. - */ - TBool IsEnoughFreeSpaceToSave2L( TInt aBytesToAdd = 0 )const; - - /** - * Renames generated iTempfile and opens - * CSendUi. - */ - void SendMovieL(); - - /** - * If needed, creates temporary video clip for CVeiPreviewView and - * activates PreviewView. - */ - void StartTempFileProcessingL(); - - /** - * Shows information note with given message. - * - * @param aMessage Message to show. - */ - void ShowInformationNoteL( const TDesC& aMessage )const; - - /** - * Updates EditLabel - */ - void UpdateEditNaviLabel()const; - - /** - * Removes selected clip(audio or video) from the movie. - * Confirmation note is shown. - */ - void RemoveCurrentClipL(); - - /** - * Creates editlabel. - * - * @return No description. - */ - CAknNavigationDecorator* CreateEditNaviLabelL(); - - /** - * Creates editlabel. - * - * @return No description. - */ - CAknNavigationDecorator* CreatePreviewNaviLabelL(); - - - /** - * Creates movelabel. - * - * @return No description. - */ - CAknNavigationDecorator* CreateMoveNaviLabelL(); - - /** - * Save movie to file. - * - * @param aQuitAfterSaving after saving move to VideosView - * @return ETrue if quit after saving, - * EFalse otherwise. - */ - TBool SaveL( TWaitMode aQuitAfterSaving ); - - /** - * Checks the memory card availability, if MMC is selected as save - * store in application settings. An information note is shown in - * following situations: - * - MMC not inserted - * - MMC corrupted (unformatted) - * [- MMC is read-only (not implemented)] - * - * If note is popped up, this function waits until it's dismissed. - */ - void CheckMemoryCardAvailabilityL(); - - static TInt HideVolumeCallbackL( TAny* aPtr ); - - /** - * Hides the volume indicator. - */ - void HideVolume(); - -protected: - // Functions from base classes - - /** - * From CAknView, activates this view. - * - * @param aPrevViewId Previous view id. - * @param aCustomMessageId Custom message id. - * @param aCustomMessage Custom message. - */ - void DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * From CAknView, deactivates this view. - */ - void DoDeactivate(); - - /** - * From CAknView, HandleForegroundEventL( TBool aForeground ). - * - * @param aForeground No description. - */ - virtual void HandleForegroundEventL( TBool aForeground ); - - virtual void NotifyQueueProcessingStarted( - MVeiQueueObserver::TProcessing aMode = - MVeiQueueObserver::ENotProcessing ); - - virtual void NotifyQueueEmpty( TInt aInserted, TInt aFailed ); - - virtual void NotifyQueueProcessingProgressed( TInt aProcessedCount, - TInt aPercentage ); - - virtual TBool NotifyQueueClipFailed( const TDesC& aFilename, TInt aError ); - - /** - * From MMdaObjectStateChangeObserver, no description. - * - * @param aObject No description. - * @param aPreviousState No description. - * @param aCurrentState No description. - * @param aErrorCode No description. - */ - virtual void MoscoStateChangeEvent( CBase* aObject, - TInt aPreviousState, - TInt aCurrentState, - TInt aErrorCode ); - - /** - * From MVedAudioClipInfoObserver, no description. - * - * @param aInfo No description. - * @param aError No description. - */ - virtual void NotifyAudioClipInfoReady( CVedAudioClipInfo& aInfo, - TInt aError ); - - /** - * From MVedMovieProcessingObserver, no description. - * - * @param aMovie No description. - */ - virtual void NotifyMovieProcessingStartedL( CVedMovie& aMovie ); - - /** - * From MVedMovieProcessingObserver, no description. - * - * @param aMovie No description. - * @param aPercentage No description. - */ - virtual void NotifyMovieProcessingProgressed( CVedMovie& aMovie, - TInt aPercentage ); - - /** - * From MVedMovieProcessingObserver, no description. - * - * @param aMovie No description. - * @param aError No description. - */ - virtual void NotifyMovieProcessingCompleted( CVedMovie& aMovie, - TInt aError ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aIndex No description. - */ - virtual void NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aError No description. - */ - virtual void NotifyVideoClipAddingFailed( CVedMovie& aMovie, - TInt aError ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aIndex No description. - */ - virtual void NotifyVideoClipRemoved( CVedMovie& aMovie, TInt aIndex ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aOldIndex No description. - * @param aNewIndex No description. - */ - virtual void NotifyVideoClipIndicesChanged( CVedMovie& aMovie, - TInt aOldIndex, - TInt aNewIndex ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aIndex No description. - */ - virtual void NotifyVideoClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aIndex No description. - */ - virtual void NotifyVideoClipColorEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - */ - virtual void NotifyStartTransitionEffectChanged( CVedMovie& aMovie ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aIndex No description. - */ - virtual void NotifyMiddleTransitionEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - */ - virtual void NotifyEndTransitionEffectChanged( CVedMovie& aMovie ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aIndex No description. - */ - virtual void NotifyAudioClipAdded( CVedMovie& aMovie, TInt aIndex ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aError No description. - */ - virtual void NotifyAudioClipAddingFailed( CVedMovie& aMovie, - TInt aError ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aIndex No description. - */ - virtual void NotifyAudioClipRemoved( CVedMovie& aMovie, TInt aIndex ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aOldIndex No description. - * @param aNewIndex No description. - */ - virtual void NotifyAudioClipIndicesChanged( CVedMovie& aMovie, - TInt aOldIndex, - TInt aNewIndex ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - * @param aIndex No description. - */ - virtual void NotifyAudioClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - /** - * From MVedMovieObserver, no description. - * - * @param aMovie No description. - */ - virtual void NotifyMovieReseted( CVedMovie& aMovie ); - - /** - * Called to notify that the audio settings of a video clip have changed. - * - * @param aMovie movie - * @param aClip changed video clip - */ - virtual void NotifyVideoClipAudioSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - /** - * Called to notify that some generator-specific settings of - * a generated video clip have changed. - * - * @param aMovie movie - * @param aClip changed video clip - */ - virtual void NotifyVideoClipGeneratorSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - /** - * Called to notify that the descriptive name of a clip has changed. - * - * @param aMovie movie - * @param aIndex changed video clip index - */ - virtual void NotifyVideoClipDescriptiveNameChanged( CVedMovie& aMovie, - TInt aIndex ); - - /** - * Called to notify that the quality setting of the movie has been - * changed. - * - * @param aMovie movie - */ - virtual void NotifyMovieQualityChanged( CVedMovie& aMovie ); - - /** - * Called to notify that the output parameters have been changed - * - * @param aMovie movie - */ - virtual void NotifyMovieOutputParametersChanged( CVedMovie& aMovie ); - - /** - * Called to notify that a dynamic level mark has been inserted - * to an audio clip. - * - * @param aMovie movie - * @param aClipIndex audio clip index - * @param aMarkIndex index of the inserted level mark - */ - virtual void NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - /** - * Called to notify that a dynamic level mark has been inserted - * to an audio clip. - * - * @param aMovie movie - * @param aClipIndex audio clip index - * @param aMarkIndex index of the inserted level mark - */ - virtual void NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - /** - * Called to notify that a dynamic level mark has been inserted - * to an audio clip. - * - * @param aMovie movie - * @param aClipIndex audio clip index - * @param aMarkIndex index of the inserted level mark - */ - virtual void NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - /** - * Called to notify that a dynamic level mark has been inserted - * to an audio clip. - * - * @param aMovie movie - * @param aClipIndex audio clip index - * @param aMarkIndex index of the inserted level mark - */ - virtual void NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - - /** - * From MVedImageClipGeneratorObserver - */ - virtual void NotifyImageClipGeneratorInitializationComplete( - CVeiImageClipGenerator& aGenerator, - TInt aError ); - - virtual void NotifyTitleClipBackgroundImageLoadComplete( - CVeiTitleClipGenerator& aGenerator, - TInt aError); - - -private: - - void UpdateInsertingProgressNoteL( TInt aProcessed ); - - /** - * C++ default constructor. - * - * @param aCutView instance of cut video view - * @param aVideoList instance of videolist - */ - CVeiEditVideoView( CVeiCutVideoView& aCutView, - CVeiCutAudioView& aCutAudioView, - CSendUi& aSendAppUi ); - - - /** - * Symbian 2nd phase constructor. - */ - void ConstructL(); - - - void ShowAndHandleSendMenuCommandsL(); - - void BrowseStartTransition( TBool aUpOrDown ); - - /** - * Check is videoclip mms compatible. - * - * @param - */ - void MmsSendCompatibleCheck(); - - - /** - * this function decides whether audio mixing can be made - */ - TBool MixingConditionsOk()const; - - /** - * this function fades either the videos' audio level or the imported sounds' audio level in the movie - * - */ - void MixAudio(); - - - /** - * this function removes dynamic level marks from all the video and audio clip(s) in the movie - * - */ - //void RemoveAudioMixingLevelMarks(); - - /** - * this function removes dynamic level marks from the individual video clip(s) in the movie - * @param aIndex index of video clip where marks are to be removed from - * if aIndex is empty or has negative value, marks are removed from every video clip currently in the movie - * - */ - //void RemoveVideoClipVolumeLevelMarks(TInt aIndex = -1); - - /** - * this function removes video dynamic level marks from the individual audio clip(s) in the movie - * @param aIndex index of audio clip where marks are to be removed from - * if aIndex is empty or has negative value, marks are removed from every audio clip currently in the movie - * - */ - //void RemoveAudioClipVolumeLevelMarks(TInt aIndex = -1); - - /** - * this function adjusts volume of the video's audio or the imported audio - * - */ - void AdjustVolumeL(); - - /** Callback function */ - static TInt AsyncBackSend( TAny* aThis ); - /** Callback function */ - static TInt AsyncBackSaveThenExitL( TAny* aThis ); - - /** - * This function is called to tell whether the movie's state has changed so that new temporary movie - * file have to be processed. The file is needed in previewing for example. - * The processing starts when the temporary movie file is next time needed. - * @param aUpdateNeeded tells whether new temporary movie file is needed - */ - void SetNewTempFileNeeded( const TBool aUpdateNeeded ); - - /* - There is an GetDurationEstimateL() method in CVedMovie that - estimates end cutpoint with given target size and start cutpoint for current movie. - This method gives end cutpoint time in movie's time scale. - - If end cutpoint is not in the first clip but in some subsequent clip things are not straightforward. - The clip accomodatint the end cutpoint must be localized as well as the exact timepoint in clip's - time scale. - - If clips have been edited (e.g. marks set) before call to GetDurationEstimateL(), things get - more complicated. - - If slow motion is applied to clips things get even more complicated. - - There is no resrictions of usage presented in the documentation of CVedMovie::GetDurationEstimateL() (vedmovie.h) - - */ - TBool FitsToMmsL(); - - -private: - // Data - - /** - * Cut video view. - */ - CVeiCutVideoView& iCutView; - - /** - * Cut audio view. - */ - CVeiCutAudioView& iCutAudioView; - - /** - * No description. - */ - CSendUi& iSendAppUi; - - /** - * No description. - */ - CVedAudioClipInfo* iAudioClipInfo; - - /** - * No description. - */ - CAknNavigationControlContainer* iNaviPane; - - /** - * Edit label. - */ - CAknNavigationDecorator* iEditLabel; - - /** - * Preview label. - */ - CAknNavigationDecorator* iPreviewLabel; - - /** - * Move label. - */ - CAknNavigationDecorator* iMoveLabel; - - /** - * Progress info for the progress dialog. - */ - //CEikProgressInfo* iProgressInfo; - - /** - * Progress dialog. - */ - CAknProgressDialog* iProgressNote; - - /** - * Original audio clip index. - */ - TInt iOriginalAudioClipIndex; - - /** - * Original video clip index. - */ - TInt iOriginalVideoClipIndex; - - /** - * Original audio clip starting point. - */ - TTimeIntervalMicroSeconds iOriginalAudioStartPoint; - - /** - *Original audio clip duration. - */ - TTimeIntervalMicroSeconds iOriginalAudioDuration; - - /** - * Original video clip cut in time. - */ - TTimeIntervalMicroSeconds iOriginalCutInTime; - TTimeIntervalMicroSeconds iOriginalCutOutTime; - - /** - * Original audio clip cut in time. - */ - TTimeIntervalMicroSeconds iOriginalAudioCutInTime; - TTimeIntervalMicroSeconds iOriginalAudioCutOutTime; - - TTimeIntervalMicroSeconds iOriginalVideoStartPoint; - - TTimeIntervalMicroSeconds iOriginalVideoCutInTime; - - TTimeIntervalMicroSeconds iOriginalVideoCutOutTime; - - /** - * No description. - */ - TInt iCutVideoIndex; - - /** - * No description. - */ - TInt iCutAudioIndex; - - /** - * No description. - */ - TUid iGivenSendCommand; - - /** - * Temporary file name for storing preview clip. - */ - HBufC* iTempFile; - - /** - * Temporary file name for storing preview clip. - */ - HBufC* iTempRecordedAudio; - - /** - * Wait mode; are we waiting for progress or wait note? - */ - TWaitMode iWaitMode; - - /** - * No description. - */ - TBool iMovieSavedFlag; - - /** - * For indicating the first movie clip adding. - */ - TBool iMovieFirstAddFlag; - - /** - * No description. - */ - TBool iUpdateTemp; - - /** - * No description. - */ - TBool iConverting; - - /** - * No description. - */ - CMdaAudioRecorderUtility* iRecorder; - - /** - * No description. - */ - CPeriodic* iAudioRecordPeriodic; - - CPeriodic* iPreviewUpdatePeriodic; - - /** Volume navi decorator. */ - CAknNavigationDecorator* iVolumeNavi; - - /** - * No description. - */ - TTimeIntervalMicroSeconds iRecordedAudioMaxDuration; - - /** - * No description. - */ - CVeiErrorUI* iErrorUI; - - /** - * No description. - */ - TInt iErrorNmb; - - /** - * No description. - */ - HBufC* iSaveToFileName; - - /** - * No description. - */ - TBool iSendKey; - - /** - * No description. - */ - CVeiTempMaker* iTempMaker; - - TEditorState iEditorState; - - CAknWaitDialog* iWaitDialog; - - CVedVideoClipGenerator* iGenerator; - - CVeiAddQueue* iMediaQueue; - - TBool iFullScreenSelected; - - /** Volume hiding timer. */ - CPeriodic* iVolumeHider; - - - /** - * Indicates whether or not the memory card accessibility is checked. - * Usually accessibility is checked only once. - */ - TBool iMemoryCardChecked; - - CVeiPopup* iPopup; - - /** - * No description. - */ - CVedMovie* iMovie; - - /** - * No description. - */ - CVeiEditVideoContainer* iContainer; - - TInt iOriginalVideoSpeed; - - TVeiSettings iMovieSaveSettings; - CAknMemorySelectionDialog::TMemory iMemoryInUse; - - - CVedMovie::TVedMovieQuality iBackupSaveQuality; - - TBool iChangedFromMMCToPhoneMemory; - - TInt iPercentProcessed; - - /** - * Store the original orientation when forcing to portrait - */ - CAknAppUiBase::TAppUiOrientation iOriginalOrientation; - - /** Callback utility */ - CAsyncCallBack* iCallBack; - -#include "veieditvideoview.inl" -}; - -#endif // VEDEDITVIDEOVIEW_H - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiEditVideoView.inl --- a/videditor/ManualVideoEditor/inc/VeiEditVideoView.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEIEDITVIDEOVIEW_INL__ -#define __VEIEDITVIDEOVIEW_INL__ - -public: - /** - * Set temporary filename to aFilename - * - * @param aFilename - */ - inline void TempFilename( HBufC& aFilename ) const { aFilename = *iTempFile; }; - - inline void SetSendKey( TBool aState ) { iSendKey = aState; }; - - inline void SetConfirmExit() - { - iUpdateTemp = ETrue; - iMovieSavedFlag = EFalse; - }; - - inline TEditorState EditorState() { return iEditorState; }; - - /** - * No description. - * - * @return No description. - */ - inline TWaitMode WaitMode() { return iWaitMode; }; - - inline void SetWaitMode( TWaitMode aMode ) { iWaitMode = aMode; } - - inline CVeiPopup* Popup() { return iPopup; } - - inline CVedMovie* Movie() { return iMovie; } - - inline CVeiEditVideoContainer* Container() { return iContainer; } - -#endif //__VEIEDITVIDEOVIEW_INL__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiIconBox.h --- a/videditor/ManualVideoEditor/inc/VeiIconBox.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef VEIICONBOX_H -#define VEIICONBOX_H - -#include -#include - -#include -// FORWARD DECLARATIONS -class CFbsBitmap; - - -/** - * VeiDummyCutBar control class. - */ -class CVeiIconBox: public CCoeControl /*, public MVideoPlayerUtilityObserver*/ -{ -public: - /** - * Destructor. - */ - virtual ~CVeiIconBox(); - - /** - * Static factory method. - * - * @return the created VeiDummyCutBar object - */ - static CVeiIconBox* NewL( const TRect& aRect, const CCoeControl* aParent ); - - /** - * Static factory method. Leaves the created object in the cleanup - * stack. - * - * @return the created CVeiCutAudioBar object - */ - static CVeiIconBox* NewLC( const TRect& aRect, const CCoeControl* aParent ); - -public: - void SetVolumeMuteIconVisibility( TBool aVisible ); - void SetSlowMotionIconVisibility( TBool aVisible ); - void SetBlackAndWhiteIconVisibility( TBool aVisible ); - void SetColourIconVisibility( TBool aVisible ); - void SetRecAudioIconVisibility( TBool aVisible ); - void SetPauseAudioIconVisibility( TBool aVisible ); - - - /** - * Screen mode change - * - */ - void SetLandscapeScreenOrientation( TBool aLandscapeScreenOrientation ); - -private: - /** - * Default constructor. - * - */ - void ConstructL( const TRect& aRect, const CCoeControl* aParent ); - - /** - * From CCoeControl,Draw. - * - * @param aRect rectangle to draw - */ - void Draw( const TRect& aRect )const; - void SizeChanged(); - - -private: - // data - - CFbsBitmap* iVolumeMute; - CFbsBitmap* iVolumeMuteMask; - CFbsBitmap* iSlowMotion; - CFbsBitmap* iSlowMotionMask; - CFbsBitmap* iBlackAndWhite; - CFbsBitmap* iBlackAndWhiteMask; - CFbsBitmap* iColour; - CFbsBitmap* iColourMask; - CFbsBitmap* iRecAudio; - CFbsBitmap* iRecAudioMask; - CFbsBitmap* iPauseAudio; - CFbsBitmap* iPauseAudioMask; - - TBool iVolumeMuteIconVisible; - TBool iSlowMotionIconVisible; - TBool iBlackAndWhiteIconVisible; - TBool iColourIconVisible; - TBool iRecAudioIconVisibile; - TBool iPauseAudioIconVisibile; - TBool iLandscapeScreenOrientation; - - -}; -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiPopup.h --- a/videditor/ManualVideoEditor/inc/VeiPopup.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,184 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEIPOPUP_H -#define VEIPOPUP_H - -// INCLUDES -//#include - -//#include - -const TInt KAmountOfMenuItems = 9; - -class CVeiEditVideoView; - -// CLASS DECLARATION - -/** - * CVeiPopup view class. - */ -class CVeiPopup: public CBase - -{ -public: - //Constructors and destructor - - /** - * Static factory constructor. - * - * @param aView Instance of video view. - * @return Created CVeiPopup instance. - */ - - static CVeiPopup* NewL( CVeiEditVideoView& aView ); - - - /** - * Static factory constructor. Leaves the created object in the - * cleanup stack. - * - * @param aView Instance of video view. - * @return Created CVeiPopup instance. - */ - - static CVeiPopup* NewLC( CVeiEditVideoView& aView ); - - /** - * Destructor. - */ - virtual ~CVeiPopup(); - - -public: - // New functions - - /** - * Opens insert audio popup list. - */ - void ShowInsertAudioPopupList(); - - /** - * Opens video/image/text popup list. - */ - void ShowInsertStuffPopupList(); - - /** - * Opens insert text popup list. - */ - void ShowInsertTextPopupList(); - - /** - * Opens edit video popup list. - */ - void ShowEditVideoPopupList(); - - /** - * Opens edit text popup list. - */ - void ShowEditTextPopupList(); - - /** - * Opens edit image popup list. - */ - void ShowEditImagePopupList(); - - /** - * Opens edit text style popup list where text style can be selescted. - */ - void ShowEditTextStylePopUpList(); - - /** - * Opens edit audio popup list. - */ - void ShowEditAudioPopupList(); - - /** - * Executes a popup list menu where end transition can be selected. - */ - void ShowEndTransitionPopupListL(); - - /** - * Executes a popup list menu where middle transition can be selected. - */ - void ShowMiddleTransitionPopupListL(); - - /** - * Executes a popup list menu where start transition can be selected. - */ - void ShowStartTransitionPopupListL(); - - /** - * Opens effect selection popup list. - */ - void ShowEffectSelectionPopupListL(); - - /** - * Shows the color selector dialog. - */ - TBool ShowColorSelectorL( TRgb& aColor )const; - - /** - * Shows the background selection dialog. - */ - TInt ShowTitleScreenBackgroundSelectionPopupL( TBool& aImageSelected )const; - - /** - * Opens insert text popup list. - */ - void ShowTitleScreenStyleSelectionPopupL(); - - -protected: - // New functions - - /** - * Shows a popup list with given parameters. - * - * @param aSoftkeysResourceId Softkeys id. - * @param aPopupTitleResourceId Title for popup. - * @param aArrayResourceId Array for items. - * @param aTablesize Index of removed item (from array). - * @param aDynPopup is popup dynamic or not. - * @return Returns the index of selected item. - */ - TInt ExecutePopupListL( TInt aSoftkeysResourceId, - TInt aPopupTitleResourceId, - TInt aArrayResourceId, - TInt aTablesize, - TBool aDynPopup ) const; -private: - /** - * Symbian 2nd phase constructor. - */ - void ConstructL(); - - CVeiPopup( CVeiEditVideoView& aView ); - - -private: - // Data - CVeiEditVideoView& iView; - TInt RemoveArrayIndex[KAmountOfMenuItems]; - -}; - -#endif // VEIPOPUP_H - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiSettingItemList.h --- a/videditor/ManualVideoEditor/inc/VeiSettingItemList.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef VEISETTINGITEMLIST_H -#define VEISETTINGSITEMLIST_H - -// INCLUDES -#include -#include "VeiSettings.h" - -// CLASS DECLARATION - -/** - * Setting item list for setting items. - */ -class CVeiSettingItemList: public CAknSettingItemList -{ -public: - // Constructor and destructor - - /** - * C++ default constructor for constructing this object. - * - * @param aSettings Reference to settings data class. - */ - CVeiSettingItemList( TVeiSettings& aSettings ); - - /** - * Destroys the object and releases all memory objects. - */ - ~CVeiSettingItemList(); - -public: - // New functions - - /** - * This launches the setting page for the highlighted item by calling - * EditItemL on it. - */ - void ChangeFocusedItemL(); - -public: - // Functions from base classes - - /** - * From CAknSettingItemList, this launches the setting - * page for the current item by calling EditItemL on it. - * Corresponding value is also saved by calling it's - * StoreL function. - * - * @param aIndex Current item's (Visible) index in the list. - * @param aCalledFromMenu In this case, passed directly to the base - * class. - */ - void EditItemL( TInt aIndex, TBool aCalledFromMenu ); - -protected: - // Functions from base classes - - /** - * From CAknSettingItemList, framework method to create - * a setting item based upon the user id aSettingId. - * Implementation decides what type to contruct. - * - * @param aSettingId ID to use to determine the type of the setting item. - * @return A constructed (not 2nd-stage constructed) setting item. - */ - CAknSettingItem* CreateSettingItemL( TInt aSettingId ); - - /** - * From CCoeControl, responds to size changes to sets the - * size and position of the contents of this control.Resizes the - * setting list accordingly. - */ - void SizeChanged(); - -private: - // Data - - /** - * Application settings data. - */ - TVeiSettings& iSettings; - -}; - -#endif // VEISETTINGSITEMLIST_H - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiSettingsContainer.h --- a/videditor/ManualVideoEditor/inc/VeiSettingsContainer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef VEISETTINGSCONTAINER_H -#define VEISETTINGSCONTAINER_H - -// INCLUDES -#include - -// CLASS DECLARATION -class CVeiSettingItemList; -class TVeiSettings; - -/** - * CVeiSettingsContainer container control class. - */ -class CVeiSettingsContainer: public CCoeControl -{ -public: - // Constructors and destructor - - /** - * Default constructor. - * - * @param aRect Frame rectangle for container. - * @param aSettings Reference to application settings. - */ - void ConstructL( const TRect& aRect, TVeiSettings& aSettings ); - - /** - * Destructor. - */ - virtual ~CVeiSettingsContainer(); - -public: - // New functions - - /** - * This launches the setting page for the highlighted item by calling - * EditItemL on it. The responsibility is handled to - * CVeiSettingItemList. - */ - void ChangeFocusedItemL(); - -private: - // From CCoeControl - - /** - * From CCoeControl, gets the specified component of - * a compound control. - * - * @param aIndex The index of the control to get. - * @return The component control with an index of aIndex. - */ - CCoeControl* ComponentControl( TInt aIndex )const; - - /** - * From CCoeControl, gets the number of controls contained - * in a compound control. - * - * @return The number of component controls contained by this control. - */ - TInt CountComponentControls()const; - - /** - * From CCoeControl, gets the control's help context. - * Associates this control with a particular Help file and topic in - * a context sensitive application. Sets public data members of - * aContext to the required Help file UID (iMajor) and - * context descriptor (iContext). - * - * @param aContext The control's help context. - */ - void GetHelpContext( TCoeHelpContext& aContext )const; - - /** - * From CoeControl, handles key events by passing them to - * CVeiSettingItemList. - * - * @param aKeyEvent The key event. - * @param aType The type of key event: EEventKey, - * EEventKeyUp or EEventKeyDown. - * @return Indicates whether or not the key event was used by this - * control. - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); - - void HandleResourceChange( TInt aType ); - - void SizeChanged(); - -private: - // Data - - /** - * Setting item list for handling all the setting items. - */ - CVeiSettingItemList* iSettingItemList; - -}; - -#endif // VEISETTINGSCONTAINER_H - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiSettingsView.h --- a/videditor/ManualVideoEditor/inc/VeiSettingsView.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEISETTINGSVIEW_H -#define VEISETTINGSVIEW_H - -// INCLUDES -// System includes -#include // CAknView -// User includes -#include "VeiSettings.h" // TVeiSettings - -// FORWARD DECLARATIONS -class CVeiSettingsContainer; - -// CLASS DECLARATION - -/** - * CVeiSettingsView view class. - */ -class CVeiSettingsView: public CAknView -{ -public: - // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CVeiSettingsView* NewL(); - - /** - * Two-phased constructor. - */ - static CVeiSettingsView* NewLC(); - - /** - * Destructor. - */ - ~CVeiSettingsView(); - -public: - // From CAknView - - /** - * - */ - TUid Id()const; - - /** - * - */ - void HandleCommandL( TInt aCommand ); - - /** - * - */ - void HandleClientRectChange(); - -private: - // From CAknView - - /** - * From AknView - */ - void DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * From AknView - */ - void DoDeactivate(); - -private: - - /** - * C++ default constructor. - */ - CVeiSettingsView(); - - /** - * Symbian 2nd phase constructor. - */ - void ConstructL(); - -private: - // Data - - /** - * Container. - */ - CVeiSettingsContainer* iContainer; - - /** - * - */ - TVeiSettings iSettings; - - /** - * Store the original orientation when forcing to portrait - */ - //CAknAppUiBase::TAppUiOrientation iOriginalOrientation; -}; - -#endif - -// End of Files diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiTrimForMmsContainer.h --- a/videditor/ManualVideoEditor/inc/VeiTrimForMmsContainer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,395 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEITRIMFORMMSCONTAINER_H -#define VEITRIMFORMMSCONTAINER_H - -// INCLUDES -// System includes -#include // TAknLayoutText -#include -#include -#include -#include -// User includes -#include "VeiVideoDisplay.h" -#include "VeiFrameTaker.h" -#include "VeiTrimForMmsView.h" -#include "VeiDisplayLighter.h" - -// FORWARD DECLARATIONS -class CVeiCutterBar; -class CVeiTrimForMmsView; -class CVeiTrimForMmsView; -class CAknsBasicBackgroundControlContext; -class CAknProgressDialog; -//class CEikProgressInfo; - -// CLASS DECLARATION - -/** - * - */ -class CVeiTrimForMmsContainer: public CCoeControl, - public MVedMovieObserver, - public MVeiVideoDisplayObserver, - public MVeiFrameTakerObserver, - public MProgressDialogCallback -{ -public: - - static CVeiTrimForMmsContainer* NewL( const TRect& aRect, - CVedMovie& aMovie, - CVeiTrimForMmsView& aView ); - - static CVeiTrimForMmsContainer* NewLC( const TRect& aRect, - CVedMovie& aMovie, - CVeiTrimForMmsView& aView ); - - ~CVeiTrimForMmsContainer(); - -public: - // New functions - - const TTimeIntervalMicroSeconds& CutInTime()const; - - const TTimeIntervalMicroSeconds& CutOutTime()const; - - void SetMaxMmsSize( TInt aMaxSizeInBytes ); - - /** - * Start full screen preview. Calls CVeiVideoDisplay. - * - * @param aFilename filename. - * @param aRect full screen size. - */ - void PlayL( const TDesC& aFilename, const TRect& aRect ); - - /** - * Stop preview. Stops CVeiVideoDisplay - * - * @param aCloseStream - */ - void Stop( TBool aCloseStream ); - - /** - * - */ - void PauseL(); - - /** - * Return the video display state of CVeiTrimForMmsContainer. - * - * @param - */ - TInt PreviewState()const; - - void StartFrameTakerL( TInt aIndex ); - -private: - // From CCoeControl - - virtual void DialogDismissedL( TInt aButtonId ); - - CCoeControl* ComponentControl( TInt aIndex )const; - - TInt CountComponentControls()const; - - /** - * Gets the control's help context. Associates the control with a - * particular Help file and topic in a context sensitive application. - * - * @param aContext The control's help context. - */ - void GetHelpContext( TCoeHelpContext& aContext )const; - - void Draw( const TRect& aRect )const; - - void SizeChanged(); - - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ); - -private: - // From MVeiVideoDisplayObserver - - virtual void NotifyVideoDisplayEvent( const TPlayerEvent aEvent, - const TInt& aInfo = 0 ); - - virtual void NotifyFramesCompleted( CFbsBitmap* aFirstFrame, - CFbsBitmap* aLastFrame, - CFbsBitmap* /*aTimelineFrame*/, - TInt aError ); - - - /** - * Gets an object whose type is encapsulated by the specified TTypeUid - * object. - * - * @param aId Encapsulates the Uid that identifies the type of object - * required. - * - * @return - */ - virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); - -protected: - // From MVedMovieObserver - - virtual void NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyVideoClipAddingFailed( CVedMovie& aMovie, TInt aError ); - - virtual void NotifyVideoClipRemoved( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyVideoClipIndicesChanged( CVedMovie& aMovie, - TInt aOldIndex, - TInt aNewIndex ); - - virtual void NotifyVideoClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipColorEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipAudioSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipGeneratorSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipDescriptiveNameChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyStartTransitionEffectChanged( CVedMovie& aMovie ); - - virtual void NotifyMiddleTransitionEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyEndTransitionEffectChanged( CVedMovie& aMovie ); - - virtual void NotifyAudioClipAdded( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyAudioClipAddingFailed( CVedMovie& aMovie, TInt aError ); - - virtual void NotifyAudioClipRemoved( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyAudioClipIndicesChanged( CVedMovie& aMovie, - TInt aOldIndex, - TInt aNewIndex ); - - virtual void NotifyAudioClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyMovieQualityChanged( CVedMovie& aMovie ); - - virtual void NotifyMovieReseted( CVedMovie& aMovie ); - - virtual void NotifyMovieOutputParametersChanged( CVedMovie& aMovie ); - - virtual void NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - -private: - // New functions - TInt TimeIncrement( TInt aKeyCount )const; - -private: - // Constructors - - CVeiTrimForMmsContainer( CVedMovie& aMovie, CVeiTrimForMmsView& aView ); - - void ConstructL( const TRect& aRect ); - -private: - - /** - * Controls - */ - enum TTrimForMmsControls - { - ECutFrame, - EVideoDisplayStart, - EVideoDisplayEnd, - EVideoPreview, - ENumberOfControls // This is always the last one! - }; - -public: - - /** - * Preview states - */ - enum TPreviewState - { - EIdle = 0, - ELoading, - EPreview, - EPlaying, - EStop, - EStopAndExit, - EOpeningFile, - EPause - }; - -private: - // Data - - /** - * Whether or not the last key pressed was left or right navi-key. - */ - TBool iLastKeyLeftOrRight; - - /** - * - */ - TInt iVideoDisplayStartIndex; - - /** - * - */ - TInt iVideoDisplayEndIndex; - - /** - * - */ - TRect iVideoDisplayEndRect; - - /** - * Text layout for main pane's end text. - */ - TAknLayoutText iLayoutTextEnd; - - /** - * Text layout for main pane's start text. - */ - TAknLayoutText iLayoutTextStart; - - /** - * Layout for start thumbnail. - */ - TAknLayoutRect iLayoutRectStart; - - /** - * Layout for end thumbnail. - */ - TAknLayoutRect iLayoutRectEnd; - - /** - * Layout for trim timeline icon. - */ - TAknLayoutRect iLayoutRectIcon; - - /** - * Layout for cut frame. - */ - TAknLayoutRect iLayoutRectCutFrame; - - /** - * Text shown above the end thumbnail. - */ - HBufC* iEndText; - - /** - * Text shown above the start thumbnail. - */ - HBufC* iStartText; - - /** - * - */ - CVeiCutterBar* iCutterBar; - /** - * - */ - CVedMovie& iMovie; - - /** - * - */ - CVeiVideoDisplay* iVideoDisplayStart; - - /** - * - */ - CVeiVideoDisplay* iVideoDisplayEnd; - - CVeiVideoDisplay* iVideoDisplay; - - TPreviewState iPreviewState; - - TRect iPreviewRect; - - CVeiFrameTaker* iFrameTaker; - - /* - * Updated by NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ) - */ - TInt iClipIndex; - - CVeiTrimForMmsView& iView; - - - TRect iStartTextBox; - TRect iEndTextBox; - TRect iVideoDisplayStartRect; - TRect iTimelineRect; - TRect iCutIconRect; - TRect iAdjustRect; - - TPoint iCutIconPoint; - TSize iCutIconSize; - - TTimeIntervalMicroSeconds iSeekPos; - TTimeIntervalMicroSeconds iSeekEndPos; - TTimeIntervalMicroSeconds iDuration; - TInt iKeyRepeatCount; - /** Background context. Skin stuff. */ - CAknsBasicBackgroundControlContext* iBgContext; - - CVeiDisplayLighter* iScreenLight; - TInt iMaxMmsSize; - TBool iBlack; - - - TBool iSeekEvent; - /** - * Progress dialog. - */ - CAknProgressDialog* iProgressNote; - - /** Progress info for the progress note. */ - CEikProgressInfo* iProgressInfo; - TBool iKeyEnable; -}; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VeiTrimForMmsView.h --- a/videditor/ManualVideoEditor/inc/VeiTrimForMmsView.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,355 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef VEITRIMFORMMSVIEW_H -#define VEITRIMFORMMSVIEW_H - -// INCLUDES -// System includes -#include // CAknView -#include -#include // CVedmovie -// User includes -#include "VeiSettings.h" - -// FORWARD DECLARATIONS -class CAknNavigationDecorator; -class CAknProgressDialog; -class CVeiErrorUI; -class CSendUi; -class CVeiTrimForMmsContainer; -class CVedMovie; -class CMessageData; -class CEikProgressInfo; -class CVeiTempMaker; - - - -// CLASS DECLARATION - -/** - * - */ -class CVeiTrimForMmsView: public CAknView, - public MVedMovieObserver, - public MVedMovieProcessingObserver - -{ -public: - // Constructors and destructor - - static CVeiTrimForMmsView* NewL( CSendUi& aSendAppUi ); - - static CVeiTrimForMmsView* NewLC( CSendUi& aSendAppUi ); - - virtual ~CVeiTrimForMmsView(); - - /** - * Preview states - */ - enum TPreviewState - { - EIdle = 0, - ELoading, - EPreview, - EPlaying, - EStop, - EStopAndExit, - EOpeningFile, - EPause - }; - -public: - void UpdateNaviPaneL( const TInt& aSizeInBytes, - const TTimeIntervalMicroSeconds& aTime ); - - void UpdateNaviPaneSize(); - - /** - * Trim states - */ - enum TTrimState - { - ESeek = 0, - EFullPreview - }; - - void SetTrimStateL( TTrimState aState ); - - /** - * From MProgressDialogCallback, callback method gets - * called when a dialog is dismissed. - * - * @param aButtonId Button id. - */ - virtual void DialogDismissedL( TInt aButtonId ); - void ProcessNeeded( TBool aProcessNeed ); - - /** - * Shows global error note for given error. - * - * @param aError No description. - */ - void ShowGlobalErrorNoteL( TInt aError = 0 )const; - - /** - * Handles a change to the control's resources. - */ - void HandleResourceChange( TInt aType ); - -private: - // From CAknView - - TUid Id()const; - - void HandleCommandL( TInt aCommand ); - - void DoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - void DoDeactivate(); - - void HandleStatusPaneSizeChange(); - - void ReadSettingsL( TVeiSettings& aSettings )const; - -protected: - // From MVedMovieObserver - - virtual void NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyVideoClipAddingFailed( CVedMovie& aMovie, TInt aError ); - - virtual void NotifyVideoClipRemoved( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyVideoClipIndicesChanged( CVedMovie& aMovie, - TInt aOldIndex, - TInt aNewIndex ); - - virtual void NotifyVideoClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipColorEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipAudioSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipGeneratorSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyVideoClipDescriptiveNameChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyStartTransitionEffectChanged( CVedMovie& aMovie ); - - virtual void NotifyMiddleTransitionEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyEndTransitionEffectChanged( CVedMovie& aMovie ); - - virtual void NotifyAudioClipAdded( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyAudioClipAddingFailed( CVedMovie& aMovie, TInt aError ); - - virtual void NotifyAudioClipRemoved( CVedMovie& aMovie, TInt aIndex ); - - virtual void NotifyAudioClipIndicesChanged( CVedMovie& aMovie, - TInt aOldIndex, - TInt aNewIndex ); - - virtual void NotifyAudioClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - - virtual void NotifyMovieQualityChanged( CVedMovie& aMovie ); - - virtual void NotifyMovieReseted( CVedMovie& aMovie ); - - virtual void NotifyMovieOutputParametersChanged( CVedMovie& aMovie ); - - virtual void NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - - virtual void NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex ); - -protected: - // From MVedMovieProcessingObserver - - /** - * Called to notify that a new movie processing operation has been started. - * - * @param aMovie movie - */ - void NotifyMovieProcessingStartedL( CVedMovie& aMovie ); - - /** - * Called to inform about the current progress of the movie processing operation. - * - * @param aMovie movie - * @param aPercentage percentage of the operation completed, must be - * in range 0..100 - */ - void NotifyMovieProcessingProgressed( CVedMovie& aMovie, TInt aPercentage ); - - /** - * Called to notify that the movie processing operation has been completed. - * - * @param aMovie movie - * @param aError error code why the operation was completed. - * KErrNone if the operation was completed - * successfully. - */ - void NotifyMovieProcessingCompleted( CVedMovie& aMovie, TInt aError ); - -private: - // New functions - - void CmdSoftkeyCancelL(); - - /** - * - */ - void CmdSoftkeyOkL(); - - - /** - * Send via multimedia command handling. - */ - void CmdSendViaMultimediaL(); - - void CmdSoftkeyBackL(); - - void PushKeySoundL( const TInt aResourceId )const; - - void PopKeySound()const; - - /** - * Sets the text for title pane. - */ - void SetTitlePaneTextL()const; - - void CreateNaviPaneL(); - - void SetNaviPaneDurationLabelL( const TTimeIntervalMicroSeconds& aTime ); - - void SetNaviPaneSizeLabelL( const TInt& aSizeInBytes ); - - /** - * Start full screen preview. - */ - void PlayPreviewL(); - -private: - // Constructors - - CVeiTrimForMmsView( CSendUi& aSendAppUi ); - - void ConstructL(); - -private: - // Data - - /** - * Cut in time in microseconds (clip timebase) for trimmed video. - */ - TTimeIntervalMicroSeconds iCutInTime; - - /** - * Cut out time in microseconds (clip timebase) for trimmed video. - */ - TTimeIntervalMicroSeconds iCutOutTime; - - /** - * Progress note for saving the trimmed video - */ - CAknProgressDialog* iProgressNote; - - /** - * Progress info for the progress dialog. - */ - CEikProgressInfo* iProgressInfo; - - /** - * Container - */ - CVeiTrimForMmsContainer* iContainer; - - /** - * Navigation pane decorator - */ - CAknNavigationDecorator* iNaviDecorator; - - /** - * - */ - CSendUi& iSendAppUi; - - /** - * - */ - CVedMovie* iVedMovie; - - /** - * Previous view which activated this view. - */ - TVwsViewId iPreviousViewId; - - /** - * Utility class to display error notes by applications. - */ - CVeiErrorUI* iErrorUi; - - /** - * No description. - */ - CVeiTempMaker* iTempMaker; - - /** - * Temporary file name for storing preview/send clip. - */ - HBufC* iTempFile; - - - TTrimState iTrimState; - - TVeiSettings iMovieSaveSettings; - - /* - * Indecates if process needed. - */ - TBool iProcessNeeded; - - - -}; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/inc/VideoEditorHelp.hlp.hrh --- a/videditor/ManualVideoEditor/inc/VideoEditorHelp.hlp.hrh Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* This file contains all the Video Editor contextual help -* identifiers for the CSHelp system (implemented in -* HlpLauncher). -* -*/ - - - -#ifndef __VIDEOEDITORHELP_HLP_HRH__ -#define __VIDEOEDITORHELP_HLP_HRH__ - -// CONSTANTS -_LIT(KVED_HLP_EDIT_VIDEO_VIEW,"VED_HLP_EDIT_VIDEO_VIEW"); //Video editing view -_LIT(KVED_HLP_SETTINGS_VIEW,"VED_HLP_SETTINGS_VIEW"); //Settings view -_LIT(KVED_HLP_PREVIEW_VIEW,"VED_HLP_PREVIEW_VIEW"); //Play view -_LIT(KVED_HLP_CUT_VIDEO_VIEW,"VIE_HLP_CUT"); //Cut video view -_LIT(KVED_HLP_CUT_AUDIO_VIEW,"VED_HLP_CUT_AUDIO_VIEW"); //Cut audio view -_LIT(KVED_HLP_TRIM_FOR_MMS_VIEW,"VED_HLP_TRIM_FOR_MMS_VIEW"); //Trim video clip for MMS view - -#endif // __VIDEOEDITORHELP_HLP_HRH__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/rom/ManualVideoEditor.iby --- a/videditor/ManualVideoEditor/rom/ManualVideoEditor.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_MANUAL_VIDEO_EDITOR - -#ifndef __MANUALVIDEOEDITOR_IBY__ -#define __MANUALVIDEOEDITOR_IBY__ - - -#include - -// UI -S60_APP_EXE(ManualVideoEditor) -S60_APP_AIF_RSC(ManualVideoEditor) -S60_APP_BITMAP(ManualVideoEditor) -S60_APP_AIF_ICONS(ManualVideoEditor) -#endif // __MANUALVIDEOEDITOR_IBY__ - -#endif // RD_S60_MANUAL_VIDEO_EDITOR \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/rom/ManualVideoEditor_resource.iby --- a/videditor/ManualVideoEditor/rom/ManualVideoEditor_resource.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_MANUAL_VIDEO_EDITOR - -#ifndef __MANUALVIDEOEDITORRESOURCES_IBY__ -#define __MANUALVIDEOEDITORRESOURCES_IBY__ - -#include - -S60_APP_RESOURCE(ManualVideoEditor) -S60_APP_CAPTION(ManualVideoEditor) - -#endif // __MANUALVIDEOEDITORRESOURCES_IBY__ - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/FileNameSettingItem.cpp --- a/videditor/ManualVideoEditor/src/FileNameSettingItem.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES -#include "FileNameSettingItem.h" -#include -#include - - -CFileNameSettingItem::CFileNameSettingItem( TInt aIdentifier, TDes& aText, - TInt aIllegalFilenameTextResourceID, - TInt aUnsuitableFilenameTextResourceID ) - :CAknTextSettingItem( aIdentifier, aText ), - iIllegalFilenameTextResourceID(aIllegalFilenameTextResourceID), - iUnsuitableFilenameTextResourceID(aUnsuitableFilenameTextResourceID) - { - } - -CFileNameSettingItem::~CFileNameSettingItem() - { - if ( iTextBeforeEditing ) - { - delete iTextBeforeEditing; - } - } - -void CFileNameSettingItem::EditItemL( TBool aCalledFromMenu ) - { - if ( !iInvalidFilenameOked ) - { - // Delete old buffer if allocated - if ( iTextBeforeEditing ) - { - delete iTextBeforeEditing; - iTextBeforeEditing = NULL; - } - // Save the value before editing it - iTextBeforeEditing = HBufC::NewL( SettingTextL().Length()); - iTextBeforeEditing->Des().Copy( SettingTextL()); - } - CAknTextSettingItem::EditItemL( aCalledFromMenu ); - } - -void CFileNameSettingItem::HandleSettingPageEventL( - CAknSettingPage* aSettingPage, - TAknSettingPageEvent aEventType ) - { - - switch ( aEventType ) - { - /** - * Cancel event. - */ - case EEventSettingCancelled: - { - if ( iInvalidFilenameOked ) - { - iInvalidFilenameOked = EFalse; // Reset invalid filename flag - - TPtr internalText = InternalTextPtr(); - internalText.Delete( 0, internalText.Length()); - internalText.Append( *iTextBeforeEditing ); - StoreL(); - LoadL(); - } - break; - } - /** - * Change event. - */ - case EEventSettingChanged: - break; - /** - * Ok event. - */ - case EEventSettingOked: - { - RFs fileSystem; - - CleanupClosePushL( fileSystem ); - User::LeaveIfError( fileSystem.Connect()); - - TText illegalCharacter; - - if ( !fileSystem.IsValidName( SettingTextL(), illegalCharacter ) ) - { - iInvalidFilenameOked = ETrue; - - HBufC* noteText; - - // If dot keyed - if ( illegalCharacter == KCharDot ) - { - noteText = StringLoader::LoadLC( iUnsuitableFilenameTextResourceID ); - } - else - { - noteText = StringLoader::LoadLC( iIllegalFilenameTextResourceID ); - } - - CAknWarningNote* note = new( ELeave )CAknWarningNote( ETrue ); - - note->ExecuteLD( *noteText ); - CleanupStack::PopAndDestroy( noteText ); - - EditItemL( EFalse ); // Start editing the text again. - } - else if ( SettingTextL().Find( KCharColon ) == 1 ) - { - iInvalidFilenameOked = ETrue; - - // Load note text from resources. - HBufC* noteText = StringLoader::LoadLC( iIllegalFilenameTextResourceID ); - - - CAknWarningNote* note = new( ELeave )CAknWarningNote( ETrue ); - note->ExecuteLD( *noteText ); - - CleanupStack::PopAndDestroy( noteText ); // Pop and destroy. - - EditItemL( EFalse ); // Start editing the text again. - } - else - { - // Do nothing. - } - - CleanupStack::PopAndDestroy( &fileSystem ); - break; - } - } - // Super class handles events. - CAknTextSettingItem::HandleSettingPageEventL( aSettingPage, aEventType ); - - } -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/SampleArrayHandler.cpp --- a/videditor/ManualVideoEditor/src/SampleArrayHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES -// System includes -// User includes -#include - -#include "SampleArrayHandler.h" -#include "VideoEditorCommon.h" // Video Editor UID - -#include "VideoEditorDebugUtils.h" - -// ================= MEMBER FUNCTIONS ======================= -CSampleArrayHandler* CSampleArrayHandler::NewL() - { - CSampleArrayHandler* self = CSampleArrayHandler::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -CSampleArrayHandler* CSampleArrayHandler::NewLC() - { - CSampleArrayHandler* self = new( ELeave )CSampleArrayHandler(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -void CSampleArrayHandler::ConstructL() - { - } - -CSampleArrayHandler::CSampleArrayHandler() - { - } - - -CSampleArrayHandler::~CSampleArrayHandler() - { - delete [] iVisualization; - } - -void CSampleArrayHandler::SetVisualizationArray(TInt8* aVisualization, TInt aResolution) - { - LOG( KVideoEditorLogFile, "CSampleArrayHandler::SetVisualizationArray, In" ); - iVisualization = aVisualization; - iVisualizationSize = aResolution; - - // for testing - /* for (TInt i = 0; i < iVisualizationSize; i++) - { - if (i == 127) - iVisualization[i] = i - 127; - else - iVisualization[i] = i; - } - */ - TInt8 temp = 0; // help variable used in finding the biggest current sample value - for ( TInt i = 0; i < iVisualizationSize; i++ ) - { - if ( iVisualization[i] > temp ) - { - temp = iVisualization[i]; - } - //LOGFMT2(KVideoEditorLogFile, "CSampleArrayHandler::SetVisualizationArray, SAMPLE[%d]:%d", i, iVisualization[i]); - } - iMaxSample = temp; - - iScaleFactor = 1.0; // TReal - LOG( KVideoEditorLogFile, "CSampleArrayHandler::SetVisualizationArray, Out" ); - } - -void CSampleArrayHandler::ScaleAudioVisualization( const TInt8& aNewMaxValue ) - { - if ( iVisualization && ( aNewMaxValue != iMaxSampleInCurrentScale )) - { - iMaxSampleInCurrentScale = aNewMaxValue; - if ( !Math::IsZero(( TReal64 )iMaxSampleInCurrentScale )) - { - iScaleFactor = ( TReal64 )iMaxSampleInCurrentScale / ( TReal64 )iMaxSample; - - } - - /* - //for testing - if (1 > coeff) - { - for (TInt i = 0; i < iVisualizationSize; i++) - { - LOGFMT(KVideoEditorLogFile, "before scaling:%d", iVisualization[i]); - iVisualization[i] *= coeff; - LOGFMT(KVideoEditorLogFile, "after scaling:%d", iVisualization[i]); - } - }*/ - } - } - -TInt8 CSampleArrayHandler::Sample( const TInt aIndex )const - { - // must be scaled down in order to fit into screen - if ( iScaleFactor < 1 ) - { - return (( iVisualization[aIndex]* 1000 )*( iScaleFactor* 1000 )) / 1000000; - - } - else - { - return iVisualization[aIndex]; - } - } - -TInt CSampleArrayHandler::Size()const - { - return iVisualizationSize; - } - -TInt CSampleArrayHandler::CurrentPoint()const - { - return iCurrentIndex; - } - -void CSampleArrayHandler::SetCurrentPoint(const TTimeIntervalMicroSeconds& aCurrentTime) - { - iCurrentTime = aCurrentTime; - iCurrentIndex = ( iCurrentTime.Int64() / 1000 ) / KAudioSampleInterval; - } - -void CSampleArrayHandler::SetCutInPoint(const TTimeIntervalMicroSeconds& aCutInTime) - { - iCutInTime = aCutInTime; - iCutInSampleIndex = ( iCutInTime.Int64() / 1000 ) / KAudioSampleInterval; - } - -void CSampleArrayHandler::SetCutOutPoint(const TTimeIntervalMicroSeconds& aCutOutTime) - { - iCutOutTime = aCutOutTime; - iCutOutSampleIndex = ( iCutOutTime.Int64() / 1000 ) / KAudioSampleInterval; - } - -TBool CSampleArrayHandler::SampleCutted( const TInt aIndex )const - { - return ( iCutInSampleIndex < aIndex ) && ( aIndex < iCutOutSampleIndex ); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/StoryboardItems.cpp --- a/videditor/ManualVideoEditor/src/StoryboardItems.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,196 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// System includes -#include - -// User includes -#include "StoryboardItems.h" - -// local constants -const TInt KNoThumbnailFrameWidth = 8; - - -// ================= MEMBER FUNCTIONS ======================= - -/* ********************************************************************** - * CStoryboardVideoItem - * **********************************************************************/ -CStoryboardVideoItem* CStoryboardVideoItem::NewL( const CFbsBitmap& aStartIcon, - const CFbsBitmap& aStartIconMask, - const TDesC& aFilename, - TBool aIsFile, - const TDesC& aAlbum ) - { - CStoryboardVideoItem* self = CStoryboardVideoItem::NewLC( aStartIcon, - aStartIconMask, aFilename, aIsFile, aAlbum ); - CleanupStack::Pop( self ); - return self; - } - -CStoryboardVideoItem* CStoryboardVideoItem::NewLC( const CFbsBitmap& aStartIcon, - const CFbsBitmap& aStartIconMask, - const TDesC& aFilename, - TBool aIsFile, - const TDesC& aAlbum ) - { - CStoryboardVideoItem* self = new( ELeave )CStoryboardVideoItem(); - CleanupStack::PushL( self ); - self->ConstructL( aStartIcon, aStartIconMask, aFilename, aIsFile, aAlbum ); - return self; - } - -CStoryboardVideoItem::~CStoryboardVideoItem() - { - if ( iFilename ) - { - delete iFilename; - } - - if ( iAlbumName ) - { - delete iAlbumName; - } - - delete iIconBitmap; - delete iIconMask; - - delete iLastFrameBitmap; - delete iLastFrameMask; - - delete iTimelineBitmap; - delete iTimelineMask; - } - -CStoryboardVideoItem::CStoryboardVideoItem() - { - } - -void CStoryboardVideoItem::InsertLastFrameL( const CFbsBitmap& aBitmap, const CFbsBitmap& aMask ) - { - delete iLastFrameBitmap; - iLastFrameBitmap = NULL; - delete iLastFrameMask; - iLastFrameMask = NULL; - - CFbsBitmap* icon = new( ELeave )CFbsBitmap; - icon->Duplicate( aBitmap.Handle()); - CFbsBitmap* mask = new( ELeave )CFbsBitmap; - mask->Duplicate( aMask.Handle()); - - iLastFrameBitmap = icon; - iLastFrameMask = mask; - } - -void CStoryboardVideoItem::InsertFirstFrameL( const CFbsBitmap& aBitmap, const CFbsBitmap& aMask ) - { - delete iIconBitmap; - iIconBitmap = NULL; - delete iIconMask; - iIconMask = NULL; - - CFbsBitmap* icon = new( ELeave )CFbsBitmap; - icon->Duplicate( aBitmap.Handle()); - CFbsBitmap* mask = new( ELeave )CFbsBitmap; - mask->Duplicate( aMask.Handle()); - - iIconBitmap = icon; - iIconMask = mask; - } - -void CStoryboardVideoItem::InsertTimelineFrameL( const CFbsBitmap& aBitmap, const CFbsBitmap& aMask ) - { - delete iTimelineBitmap; - iTimelineBitmap = NULL; - delete iTimelineMask; - iTimelineMask = NULL; - - CFbsBitmap* icon = new( ELeave )CFbsBitmap; - icon->Duplicate( aBitmap.Handle()); - CFbsBitmap* mask = new( ELeave )CFbsBitmap; - mask->Duplicate( aMask.Handle()); - - iTimelineBitmap = icon; - iTimelineMask = mask; - } - -void CStoryboardVideoItem::ConstructL( const CFbsBitmap& aStartIcon, - const CFbsBitmap& aStartIconMask, - const TDesC& aFilename, - TBool aIsFile, - const TDesC& aAlbum ) - { - CFbsBitmap* icon = new( ELeave )CFbsBitmap; - icon->Duplicate( aStartIcon.Handle()); - CFbsBitmap* mask = new( ELeave )CFbsBitmap; - mask->Duplicate( aStartIconMask.Handle()); - - TSize thumbResolution; - thumbResolution.iWidth = ( aStartIcon.SizeInPixels() ).iWidth-KNoThumbnailFrameWidth; - thumbResolution.iHeight = ( aStartIcon.SizeInPixels() ).iHeight-KNoThumbnailFrameWidth; - - iIconSize = thumbResolution; - iIconBitmap = icon; - iIconMask = mask; - - iFilename = HBufC::NewL( aFilename.Length()); - *iFilename = aFilename; - - iAlbumName = HBufC::NewL( aAlbum.Length()); - *iAlbumName = aAlbum; - - iDateModified.HomeTime(); - iIsFile = aIsFile; - } - -/* ********************************************************************** - * CStoryboardAudioItem - * **********************************************************************/ - -CStoryboardAudioItem* CStoryboardAudioItem::NewLC( TBool aRecordedAudio, - const TDesC& aFilename ) - { - CStoryboardAudioItem* self = new( ELeave )CStoryboardAudioItem( - aRecordedAudio ); - CleanupStack::PushL( self ); - self->ConstructL( aFilename ); - return self; - } - - -CStoryboardAudioItem::~CStoryboardAudioItem() - { - delete iFilename; - } - - -CStoryboardAudioItem::CStoryboardAudioItem(TBool aRecordedAudio) - : iRecordedAudio(aRecordedAudio) - { - } - -void CStoryboardAudioItem::ConstructL( const TDesC& aFilename ) - { - iFilename = HBufC::NewL( aFilename.Length()); - *iFilename = aFilename; - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/TransitionInfo.cpp --- a/videditor/ManualVideoEditor/src/TransitionInfo.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// System includes -#include -#include -#include - -// User includes -#include "TransitionInfo.h" -#include "VideoEditorDebugUtils.h" - - - -// ================= MEMBER FUNCTIONS ======================= - -/* ********************************************************************** - * CTransitionInfo - * **********************************************************************/ - - -CTransitionInfo* CTransitionInfo::NewL() - { - CTransitionInfo* self = NewLC(); - CleanupStack::Pop( self ); - return self; - } - -CTransitionInfo* CTransitionInfo::NewLC() - { - CTransitionInfo* self = new( ELeave )CTransitionInfo; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -CTransitionInfo::CTransitionInfo() - { - } - -void CTransitionInfo::ConstructL() - { - LOG( KVideoEditorLogFile, "CTransitionInfo::ConstructL: in" ); - - HBufC* buf; - CEikonEnv* eikonEnv = CEikonEnv::Static(); - - /* Load start transition effect names. */ - buf = StringLoader::LoadLC( R_VEI_START_TRANSITION_EFFECT_NAME_NONE, eikonEnv ); - User::LeaveIfError( iStartTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_START_TRANSITION_EFFECT_NAME_FADE_FROM_BLACK, eikonEnv ); - User::LeaveIfError( iStartTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_START_TRANSITION_EFFECT_NAME_FADE_FROM_WHITE, eikonEnv ); - User::LeaveIfError( iStartTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - - /* Load middle transition effect names. */ - buf = StringLoader::LoadLC( R_VEI_MIDDLE_TRANSITION_EFFECT_NAME_NONE, eikonEnv ); - User::LeaveIfError( iMiddleTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_MIDDLE_TRANSITION_EFFECT_NAME_DIP_TO_BLACK, eikonEnv ); - User::LeaveIfError( iMiddleTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_MIDDLE_TRANSITION_EFFECT_NAME_DIP_TO_WHITE, eikonEnv ); - User::LeaveIfError( iMiddleTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_MIDDLE_TRANSITION_EFFECT_NAME_CROSSFADE, eikonEnv ); - User::LeaveIfError( iMiddleTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_MIDDLE_TRANSITION_EFFECT_NAME_WIPE_LEFT, eikonEnv ); - User::LeaveIfError( iMiddleTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_MIDDLE_TRANSITION_EFFECT_NAME_WIPE_RIGHT, eikonEnv ); - User::LeaveIfError( iMiddleTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_MIDDLE_TRANSITION_EFFECT_NAME_WIPE_TOP, eikonEnv ); - User::LeaveIfError( iMiddleTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_MIDDLE_TRANSITION_EFFECT_NAME_WIPE_BOTTOM, eikonEnv ); - User::LeaveIfError( iMiddleTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - - - /* Load end transition effect names. */ - buf = StringLoader::LoadLC( R_VEI_END_TRANSITION_EFFECT_NAME_NONE, eikonEnv ); - User::LeaveIfError( iEndTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_END_TRANSITION_EFFECT_NAME_FADE_TO_BLACK, eikonEnv ); - User::LeaveIfError( iEndTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - buf = StringLoader::LoadLC( R_VEI_END_TRANSITION_EFFECT_NAME_FADE_TO_WHITE, eikonEnv ); - User::LeaveIfError( iEndTransitionNameArray.Append( buf )); - CleanupStack::Pop( buf ); - - LOG( KVideoEditorLogFile, "CTransitionInfo::ConstructL: out" ); - } - -CTransitionInfo::~CTransitionInfo() - { - iStartTransitionNameArray.ResetAndDestroy(); - iMiddleTransitionNameArray.ResetAndDestroy(); - iEndTransitionNameArray.ResetAndDestroy(); - } - -HBufC* CTransitionInfo::StartTransitionName( TVedStartTransitionEffect aEffect ) - { - return iStartTransitionNameArray[aEffect - ( TInt )EVedStartTransitionEffectNone]; - } - -HBufC* CTransitionInfo::MiddleTransitionName( TVedMiddleTransitionEffect aEffect ) - { - return iMiddleTransitionNameArray[aEffect - ( TInt )EVedMiddleTransitionEffectNone]; - } - -HBufC* CTransitionInfo::EndTransitionName( TVedEndTransitionEffect aEffect ) - { - return iEndTransitionNameArray[aEffect - ( TInt )EVedEndTransitionEffectNone]; - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiApp.cpp --- a/videditor/ManualVideoEditor/src/VeiApp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES -#include -// User includes -#include "VeiApp.h" -#include "VeiDocument.h" -#include "VideoEditorCommon.h" // Application UID -#include "VideoEditorDebugUtils.h" - -// ================= MEMBER FUNCTIONS ======================= - -// ================= OTHER EXPORTED FUNCTIONS ============== -// -// --------------------------------------------------------- -// NewApplication() -// Constructs CVeiApp -// Returns: created application object -// --------------------------------------------------------- -// -EXPORT_C CApaApplication* NewApplication() - { - return new CVeiApp; - } - -GLDEF_C TInt E32Main() - { - return EikStart::RunApplication( NewApplication ); - } - -// --------------------------------------------------------- -// CVeiApp::AppDllUid() -// Returns application UID -// --------------------------------------------------------- -// -TUid CVeiApp::AppDllUid()const - { - return KUidVideoEditor; - } - - -// --------------------------------------------------------- -// CVeiApp::CreateDocumentL() -// Creates CVeiDocument object -// --------------------------------------------------------- -// -CApaDocument* CVeiApp::CreateDocumentL() - { - LOG_RESET( KVideoEditorLogFile ); - return CVeiDocument::NewL( *this ); - } - -// --------------------------------------------------------- -// CVeiApp::OpenIniFileLC( RFs& aFs ) -// Enables INI file creation -// Returns: -// --------------------------------------------------------- -// -CDictionaryStore* CVeiApp::OpenIniFileLC( RFs& aFs )const - { - //Opens the application’s ini file if it exists. If an ini - //file does not exist for this application, or if it is corrupt, - //this function creates a new ini file and opens that. - //ini files are located on KIniFileDrive (by default, c:), - //in the same directory as the application DLL. - - return CEikApplication::OpenIniFileLC( aFs ); - } -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiAppUi.cpp --- a/videditor/ManualVideoEditor/src/VeiAppUi.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,374 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES -// System includes -#include -#include -#include -#include // HlpLauncher -#include -#include // CSendAppUi -#include -#include -#include - -// User includes -#include "manualvideoeditor.hrh" -#include "VeiAppUi.h" -#include "VeiEditVideoView.h" -#include "VeiSettingsView.h" -#include "VeiCutVideoView.h" -#include "VeiCutAudioView.h" -#include "VeiTrimForMmsView.h" -#include "VeiTempMaker.h" -#include "VideoEditorCommon.h" - - -// ================= MEMBER FUNCTIONS ======================= -// -// ---------------------------------------------------------- -// CVeiAppUi::ConstructL() -// ?implementation_description -// ---------------------------------------------------------- -// -void CVeiAppUi::ConstructL() - { - LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL In" ); - - BaseConstructL( EAppOrientationAutomatic | EAknEnableSkin ); - - CVeiTempMaker* maker = CVeiTempMaker::NewL(); - maker->EmptyTempFolder(); - delete maker; - - iSendAppUi = CSendUi::NewL(); - /* - * Cut video view and Cut audio view are references to edit video view and - * ownerships must be transfered(AddViewL(...)) to CAknViewAppUi(this) - * AFTER references are taken to edit video view. Otherwise exit is not clean. - */ - - // Cut Video view - iCutVideoView = new( ELeave )CVeiCutVideoView; - iCutVideoView->ConstructL(); - - // Cut Audio view - iCutAudioView = CVeiCutAudioView::NewL(); - - // Edit Video view - iEditVideoView = CVeiEditVideoView::NewL( *iCutVideoView, * iCutAudioView, * iSendAppUi ); - - AddViewL( iEditVideoView ); // transfer ownership to CAknViewAppUi - LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL EditVideoView OK" ); - - AddViewL( iCutAudioView ); - LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL CutAudioView OK" ); - - AddViewL( iCutVideoView ); // transfer ownership to CAknViewAppUi - LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL CutVideoView OK" ); - - //Trim for MMS view - iTrimForMmsView = CVeiTrimForMmsView::NewL( *iSendAppUi ); - AddViewL( iTrimForMmsView ); // Transfer ownership to CAknViewAppUi - LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL TrimForMmsView OK" ); - - //Settings view - iSettingsView = CVeiSettingsView::NewL(); - AddViewL( iSettingsView ); // Transfer ownership to CAknViewAppUi - LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL SettingsView OK" ); - - iVolume = - 1; // Volume not set - - iCoeEnv->RootWin().EnableScreenChangeEvents(); - - SetDefaultViewL( *iEditVideoView ); - - LOG( KVideoEditorLogFile, "CVeiAppUi::ConstructL Out" ); - } - -// ---------------------------------------------------- -// CVeiAppUi::~CVeiAppUi() -// Destructor -// Frees reserved resources -// ---------------------------------------------------- -// -CVeiAppUi::~CVeiAppUi() - { - LOG( KVideoEditorLogFile, "CVeiAppUi::~CVeiAppUi: In" ); - - delete iSendAppUi; - - LOG( KVideoEditorLogFile, "CVeiAppUi::~CVeiAppUi: Out" ); - } - -//============================================================================= -CVeiAppUi::CVeiAppUi() - { - } - -//============================================================================= -void CVeiAppUi::InsertVideoClipToMovieL( TBool aDoOpen, const TDesC& aFilename ) - { - LOGFMT( KVideoEditorLogFile, "CVeiAppUi::InsertVideoClipTomovieL (%S)", &aFilename ); - - - if ( iEditVideoView ) - { - iEditVideoView->AddClipL( aFilename, aDoOpen ); - } - } - -// ---------------------------------------------------- -// CVeiAppUi::HandleKeyEventL( -// const TKeyEvent& aKeyEvent,TEventCode /*aType*/) -// ?implementation_description -// ---------------------------------------------------- -// -TKeyResponse CVeiAppUi::HandleKeyEventL( const TKeyEvent& /*aKeyEvent*/, - TEventCode /*aType*/ ) - { - return EKeyWasNotConsumed; - } - - -// ---------------------------------------------------- -// CVeiAppUi::HandleCommandL(TInt aCommand) -// ?implementation_description -// ---------------------------------------------------- -// -void CVeiAppUi::HandleCommandL( TInt aCommand ) - { - LOGFMT( KVideoEditorLogFile, "CVeiAppUi::HandleCommandL( %d ): In", aCommand ); - - switch ( aCommand ) - { - // - // Context Sensitive Help launching for: - // -'Settings' view - // -'Trim for MMS' view - // -'Edit video' view - // -'Cut video' view - // -'Cut audio' view - // - case EAknCmdHelp: - case EVeiCmdSettingsViewHelp: - case EVeiCmdTrimForMmsViewHelp: - case EVeiCmdEditVideoViewHelp: - case EVeiCmdCutVideoViewHelp: - { - // Get the current context - CArrayFix < TCoeHelpContext > * context = AppHelpContextL(); - - // Launch the help application with current context topic - HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), - context ); - break; - } - case EAknSoftkeyBack: - case EEikCmdExit: - case EAknSoftkeyExit: - case EAknCmdExit: - { - iOnTheWayToDestruction = ETrue; - - CVeiTempMaker* maker = CVeiTempMaker::NewL(); - maker->EmptyTempFolder(); - delete maker; - - iEditVideoView->HandleCommandL( EAknSoftkeyOk ); - Exit(); - break; - } - default: - break; - } - LOG( KVideoEditorLogFile, "CVeiAppUi::HandleCommandL: Out" ); - } - -//============================================================================= -void CVeiAppUi::ReadSettingsL( TVeiSettings& aSettings )const - { - LOG( KVideoEditorLogFile, "CVeiAppUi::ReadSettingsL: in" ); - CDictionaryStore* store = Application()->OpenIniFileLC( iCoeEnv->FsSession() ); - - - TBool storePresent = store->IsPresentL( KUidVideoEditor ); // UID has an associated stream? - - if ( storePresent ) - { - RDictionaryReadStream readStream; - readStream.OpenLC( *store, KUidVideoEditor ); - - readStream >> aSettings; // Internalize data to TVeiSettings. - - CleanupStack::PopAndDestroy( &readStream ); - } - else - { - /* Read the default filenames from resources */ - HBufC* videoName = iEikonEnv->AllocReadResourceLC( R_VEI_SETTINGS_VIEW_SETTINGS_ITEM_VALUE ); - - const CFont* myFont = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - - aSettings.DefaultVideoName() = AknTextUtils::ChooseScalableText( videoName->Des(), * myFont, 400 ); - CleanupStack::PopAndDestroy( videoName ); - - HBufC* snapshotName = iEikonEnv->AllocReadResourceLC( R_VEI_SETTINGS_VIEW_SETTINGS_ITEM2_VALUE ); - - aSettings.DefaultSnapshotName() = AknTextUtils::ChooseScalableText( snapshotName->Des(), * myFont, 400 ); - CleanupStack::PopAndDestroy( snapshotName ); - - /* Memory card is used as a default target */ - aSettings.MemoryInUse() = CAknMemorySelectionDialog::EMemoryCard; - - /* Set save quality to "Auto" by default. */ - aSettings.SaveQuality() = TVeiSettings::EAuto; - - RDictionaryWriteStream writeStream; - writeStream.AssignLC( *store, KUidVideoEditor ); - - writeStream << aSettings; - - writeStream.CommitL(); - - store->CommitL(); - - CleanupStack::PopAndDestroy( &writeStream ); - } - CleanupStack::PopAndDestroy( store ); - LOG( KVideoEditorLogFile, "CVeiAppUi::ReadSettingsL: out" ); - } - -//============================================================================= -void CVeiAppUi::WriteSettingsL( const TVeiSettings& aSettings )const - { - LOG( KVideoEditorLogFile, "CVeiAppUi::WriteSettingsL: in" ); - CDictionaryStore* store = Application()->OpenIniFileLC( iCoeEnv->FsSession() ); - - RDictionaryWriteStream writeStream; - writeStream.AssignLC( *store, KUidVideoEditor ); - writeStream << aSettings; - writeStream.CommitL(); - - store->CommitL(); - - CleanupStack::PopAndDestroy( &writeStream ); - CleanupStack::PopAndDestroy( &store ); - LOG( KVideoEditorLogFile, "CVeiAppUi::WriteSettingsL: out" ); - } - -//============================================================================= -void CVeiAppUi::HandleScreenDeviceChangedL() - { - LOG( KVideoEditorLogFile, "CVeiAppUi::HandleScreenDeviceChangedL: In" ); - CAknViewAppUi::HandleScreenDeviceChangedL(); - if ( iEditVideoView ) - { - iEditVideoView->HandleScreenDeviceChangedL(); - } - LOG( KVideoEditorLogFile, "CVeiAppUi::HandleScreenDeviceChangedL: Out" ); - } - -//============================================================================= -void CVeiAppUi::HandleResourceChangeL( TInt aType ) - { - LOG( KVideoEditorLogFile, "CVeiAppUi::HandleResourceChangeL: In" ); - CAknAppUi::HandleResourceChangeL( aType ); - if ( iEditVideoView ) - { - iEditVideoView->HandleResourceChange( aType ); - } - if ( iCutVideoView ) - { - iCutVideoView->HandleResourceChange( aType ); - } - if ( iCutAudioView ) - { - iCutAudioView->HandleResourceChange( aType ); - } - if ( iTrimForMmsView ) - { - iTrimForMmsView->HandleResourceChange( aType ); - } - LOG( KVideoEditorLogFile, "CVeiAppUi::HandleResourceChangeL: Out" ); - } - -//============================================================================= -void CVeiAppUi::HandleFileNotificationEventL() - { - LOG( KVideoEditorLogFile, "CVeiAppUi::HandleFileNotificationEventL: In" ); - if ( iEditVideoView ) - { - if ( iEditVideoView->WaitMode() == CVeiEditVideoView ::EProcessingMovieSaveThenQuit ) - { - HandleCommandL( EAknCmdExit ); - } - } - LOG( KVideoEditorLogFile, "CVeiAppUi::HandleFileNotificationEventL: Out" ); - } - -//============================================================================= -void CVeiAppUi::HandleForegroundEventL( TBool aForeground ) - { - LOGFMT( KVideoEditorLogFile, "CVeiAppUi::HandleForegroundEventL: In: %d", aForeground ); - CAknViewAppUi::HandleForegroundEventL( aForeground ); - if ( !aForeground ) - { - // Set the priority to low. This is needed to handle the situations - // where the engine is performing heavy processing while the application - // is in background. - RProcess myProcess; - iOriginalProcessPriority = myProcess.Priority(); - LOGFMT3( KVideoEditorLogFile, - "CVeiAppUi::HandleForegroundEventL: changing priority of process %Ld from %d to %d", myProcess.Id().Id(), iOriginalProcessPriority, EPriorityLow ); - myProcess.SetPriority( EPriorityLow ); - iProcessPriorityAltered = ETrue; - } - else if ( iProcessPriorityAltered ) - { - // Return to normal priority. - RProcess myProcess; - TProcessPriority priority = myProcess.Priority(); - if ( priority < iOriginalProcessPriority ) - { - myProcess.SetPriority( iOriginalProcessPriority ); - } - iProcessPriorityAltered = EFalse; - LOGFMT2( KVideoEditorLogFile, - "CVeiAppUi::HandleForegroundEventL: process %Ld back to normal priority %d", myProcess.Id().Id(), priority ); - } - - LOG( KVideoEditorLogFile, "CVeiAppUi::HandleForegroundEventL: Out" ); - } - -//============================================================================= -TErrorHandlerResponse CVeiAppUi::HandleError ( TInt aError, - const SExtendedError & aExtErr, - TDes & aErrorText, - TDes & aContextText ) - { - LOGFMT( KVideoEditorLogFile, "CVeiAppUi::HandleError: %d", aError ); - - // Let the framework handle errors - return CAknViewAppUi::HandleError ( aError, aExtErr, aErrorText, aContextText ); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiCutAudioContainer.cpp --- a/videditor/ManualVideoEditor/src/VeiCutAudioContainer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1296 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// User includes -#include "manualvideoeditor.hrh" -#include "VeiAppUi.h" -#include "VeiCutAudioContainer.h" -#include "VeiCutAudioView.h" -#include "VeiCutterBar.h" -#include "veitextdisplay.h" -#include "VideoEditorCommon.h" // Video Editor UID -#include "VideoEditorHelp.hlp.hrh" // Topic contexts (literals) -#include "VeiVideoEditorSettings.h" -#include "VideoEditorUtils.h" -#include "SampleArrayHandler.h" -#include "VeiErrorUi.h" - - -// ================= MEMBER FUNCTIONS ======================= -CVeiCutAudioContainer* CVeiCutAudioContainer::NewL( const TRect& aRect, CVeiCutAudioView& aView, CVeiErrorUI& aErrorUI ) - { - CVeiCutAudioContainer* self = CVeiCutAudioContainer::NewLC( aRect, aView, aErrorUI ); - CleanupStack::Pop( self ); - return self; - } - -CVeiCutAudioContainer* CVeiCutAudioContainer::NewLC( const TRect& aRect, CVeiCutAudioView& aView, CVeiErrorUI& aErrorUI ) - { - CVeiCutAudioContainer* self = new (ELeave) CVeiCutAudioContainer( aRect, aView, aErrorUI ); - CleanupStack::PushL( self ); - self->ConstructL( aRect, aView, aErrorUI ); - return self; - } - -void CVeiCutAudioContainer::ConstructL( const TRect& aRect, CVeiCutAudioView& /*aView*/, CVeiErrorUI& /*aErrorUI*/ ) - { - CreateWindowL(); - - iState = EStateInitializing; - iFrameReady = EFalse; - - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - iSeeking = EFalse; - iCutAudioBar = CVeiCutterBar::NewL( this ); - iCutTimeDisplay = CVeiTextDisplay::NewL( iCutTimeDisplayRect, this ); - - iPreviousScreenMode = -1; - iCurrentScreenMode = -1; - - TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) ); - - AknIconUtils::CreateIconL( iPauseBitmap, iPauseBitmapMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_prop_ve_pause, - EMbmVideoeditoruicomponentsQgn_prop_ve_pause_mask ); - - SetRect( aRect ); - - iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse ); - - iAudioSamplePlayer = CMdaAudioPlayerUtility::NewL( *this,EMdaPriorityMax, - TMdaPriorityPreference( KAudioPrefVideoRecording ) ); - - iVideoBarTimer = CPeriodic::NewL( CActive::EPriorityLow ); - - iSampleArrayHandler = CSampleArrayHandler::NewL(); - - EnableDragEvents(); - - ActivateL(); - } - -CVeiCutAudioContainer::CVeiCutAudioContainer( const TRect& /*aRect*/, CVeiCutAudioView& aView, CVeiErrorUI& aErrorUI ):iView( aView ), iErrorUI( aErrorUI ) - { - } - -void CVeiCutAudioContainer::OpenAudioFileL( const TDesC& aFileName ) - { - if ( iAudioSamplePlayer ) - { - iAudioSamplePlayer->OpenFileL( aFileName ); - } - GetVisualizationL(); - } - -CVeiCutAudioContainer::~CVeiCutAudioContainer() - { - if ( iProgressNote ) - { - delete iProgressNote; - iProgressNote = NULL; - } - if ( iCutAudioBar ) - { - delete iCutAudioBar; - } - if ( iCutTimeDisplay ) - { - delete iCutTimeDisplay; - } - if ( iBgContext ) - { - delete iBgContext; - } - delete iPauseBitmap; - delete iPauseBitmapMask; - - if ( iVideoBarTimer ) - { - iVideoBarTimer->Cancel(); - delete iVideoBarTimer; - } - if ( iAudioSamplePlayer ) - { - delete iAudioSamplePlayer; - } - if (iSampleArrayHandler) - { - delete iSampleArrayHandler; - } - - delete iCallBack; - - delete iBufBitmap; - iBufBitmap = NULL; - - delete iRemConTarget; - } - -void CVeiCutAudioContainer::SizeChanged() - { - TSize videoScreenSize; - TRect rect( Rect() ); - if ( iBgContext ) - { - iBgContext->SetRect( rect ); - } - - iPreviousScreenMode = iCurrentScreenMode; - iCurrentScreenMode = iEikonEnv->ScreenDevice()->CurrentScreenMode(); - - - // Scissor icon - TAknLayoutRect scissorsIconLayout; - scissorsIconLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::main_vded_pane_g1()); - iCutAudioBar->SetComponentRect(CVeiCutterBar::EScissorsIcon, scissorsIconLayout.Rect()); - - // Progress bar - TAknLayoutRect progressBarLayout; - progressBarLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_slider_pane()); - iCutAudioBar->SetComponentRect(CVeiCutterBar::EProgressBar, progressBarLayout.Rect()); - - // left end of the slider when that part is unselected - TAknLayoutRect sliderLeftEndLayout; - sliderLeftEndLayout.LayoutRect( progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3() ); - iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, sliderLeftEndLayout.Rect() ); - - // middle part of the slider when that part is unselected - TAknLayoutRect sliderMiddleLayout; - sliderMiddleLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g5()); - iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon, sliderMiddleLayout.Rect() ); - - // right end of the slider when that part is unselected - TAknLayoutRect sliderRightEndLayout; - sliderRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4()); - iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon, sliderRightEndLayout.Rect() ); - - // left end of the cut selection slider - TAknLayoutRect sliderSelectedLeftEndLayout; - sliderSelectedLeftEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3()); - iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, sliderSelectedLeftEndLayout.Rect() ); - - // middle part of the cut selection slider - TAknLayoutRect sliderSelectedMiddleLayout; - sliderSelectedMiddleLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g5()); - iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon, sliderSelectedMiddleLayout.Rect() ); - - // right end of the cut selection slider - TAknLayoutRect sliderSelectedRightEndLayout; - sliderSelectedRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4()); - iCutAudioBar->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon, sliderSelectedRightEndLayout.Rect() ); - - // playhead - TAknLayoutRect playheadLayout; - playheadLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g1()); - iCutAudioBar->SetComponentRect( CVeiCutterBar::EPlayheadIcon, playheadLayout.Rect() ); - - // left/right border of cut selection slider - TAknLayoutRect cutAreaBorderLayout; - cutAreaBorderLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g2()); - iCutAudioBar->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon, cutAreaBorderLayout.Rect() ); - - - // Start cut time text - TAknLayoutText startTimeTextLayout; - startTimeTextLayout.LayoutText(rect, AknLayoutScalable_Apps::main_vded_pane_t1() ); - iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EStartTimeText, startTimeTextLayout.TextRect()); - - // End cut time text - TAknLayoutText endTimeTextLayout; - endTimeTextLayout.LayoutText(rect, AknLayoutScalable_Apps::main_vded_pane_t2() ); - iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EEndTimeText, endTimeTextLayout.TextRect()); - - // Start cut time icon - TAknLayoutRect startTimeIconLayout; - startTimeIconLayout.LayoutRect(rect, AknLayoutScalable_Apps::main_vded_pane_g2() ); - iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EStartTimeIcon, startTimeIconLayout.Rect()); - - // End cut time icon - TAknLayoutRect endTimeIconLayout; - endTimeIconLayout.LayoutRect(rect, AknLayoutScalable_Apps::main_vded_pane_g3() ); - iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EEndTimeIcon, endTimeIconLayout.Rect()); - - // Pause icon - - - - // Video Display - TAknLayoutRect videoDisplayLayout; - videoDisplayLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_video_pane()); - - iIconDisplayRect = videoDisplayLayout.Rect(); - LOGFMT2(KVideoEditorLogFile, "CVeiCutAudioContainer::SizeChanged(): iIconDisplayRect: %d,%d", iIconDisplayRect.iBr.iX, iIconDisplayRect.iBr.iY); - - //CVeiCutterBar - // : Change this when LAF data is ready - TPoint cutBarTl = TPoint(STATIC_CAST( TInt, rect.iBr.iX*0.0114 ), - STATIC_CAST( TInt, rect.iBr.iY*0.875 ) ); - TSize cutBarSize = TSize(STATIC_CAST( TInt, rect.iBr.iX*0.9773 ), - STATIC_CAST( TInt, rect.iBr.iY*0.0973 ) ); - - TRect cutBarRect( cutBarTl, cutBarSize ); - iCutAudioBar->SetRect( cutBarRect ); - - //CVeiTextDisplay - // : Change this when LAF data is ready - TPoint cutTimeDisplayTl = TPoint(cutBarTl.iX, - STATIC_CAST( TInt, rect.iBr.iY*0.757 ) ); - TSize cutTimeDisplaySize = TSize(cutBarSize.iWidth, - STATIC_CAST( TInt, rect.iBr.iY*0.0903 ) ); - - iCutTimeDisplayRect = TRect( cutTimeDisplayTl, cutTimeDisplaySize ); - iCutTimeDisplay->SetRect( iCutTimeDisplayRect ); - iCutTimeDisplay->SetLayout( CVeiTextDisplay::ECutInCutOut ); - - - - TInt iconWidth = STATIC_CAST( TInt, rect.iBr.iX * 0.07954545455 ); - AknIconUtils::SetSize( iPauseBitmap, TSize(iconWidth,iconWidth), EAspectRatioNotPreserved ); - - // Create buffer bitmap with the correct size - if (iBufBitmap) - { - delete iBufBitmap; - iBufBitmap = NULL; - } - TSize size = Rect().Size(); - TDisplayMode dmode = EColor64K; - // " ... If the instantiation process really needs - // not to leave, use "new CXxx" and check for NULL." - iBufBitmap = new CFbsBitmap; - TInt err = KErrNone; - if (iBufBitmap) - { - err = iBufBitmap->Create(size, dmode); - } - - if (iState != EStateInitializing && !err) - { - TRAP_IGNORE( DrawToBufBitmapL() ); - } - } - - -TTypeUid::Ptr CVeiCutAudioContainer::MopSupplyObject( TTypeUid aId ) - { - if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext ) - { - return MAknsControlContext::SupplyMopObject( aId, iBgContext ); - } - return CCoeControl::MopSupplyObject( aId ); - } - -TInt CVeiCutAudioContainer::CountComponentControls() const - { - return 2; - } - -CCoeControl* CVeiCutAudioContainer::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case 0: - return iCutAudioBar; - case 1: - return iCutTimeDisplay; - default: - return NULL; - } - } - -void CVeiCutAudioContainer::DrawToBufBitmapL() - { - // Create bitmap graphics context - CFbsBitmapDevice * bitmapDevice = CFbsBitmapDevice::NewL (iBufBitmap); - CleanupStack::PushL (bitmapDevice); - CFbsBitGc * bitmapContext = 0; - User::LeaveIfError (bitmapDevice->CreateContext (bitmapContext)); - CleanupStack::PushL (bitmapContext); - CGraphicsContext * graphicsContext = 0; - User::LeaveIfError (bitmapDevice->CreateContext (graphicsContext)); - CleanupStack::PushL (graphicsContext); - - // Draw skin background - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - AknsDrawUtils::DrawBackground( skin, cc, this, *((CBitmapContext*)graphicsContext), TPoint(0,0), Rect(), KAknsDrawParamDefault ); - - if ( iState == EStatePaused ) - { - TPoint pauseIconTl = TPoint( iIconDisplayRect.iTl.iX - STATIC_CAST( TInt, Rect().iBr.iX*0.105), - iIconDisplayRect.iTl.iY + STATIC_CAST( TInt, Rect().iBr.iY*0.178 )); - bitmapContext->BitBltMasked( pauseIconTl, iPauseBitmap, - TRect( TPoint(0,0), iPauseBitmap->SizeInPixels() ), - iPauseBitmapMask, EFalse ); - } - - if (iSampleArrayHandler) - { - bitmapContext->SetPenSize( TSize(2,1) ); - bitmapContext->SetBrushStyle(CGraphicsContext::ESolidBrush); - bitmapContext->SetBrushColor(KRgbWhite); - bitmapContext->SetPenColor( KRgbBlack); - bitmapContext->DrawRoundRect( iIconDisplayRect, TSize(4,4)); - - iSampleArrayHandler->ScaleAudioVisualization(iIconDisplayRect.Height()/2 - 3); // -2 to eliminate drawing columns to long - - // how many pixels are reserved for each vertical sample line - TInt diff = 1; - // how many samples fit in rect - TInt samplesInDisplay = iIconDisplayRect.Width()/diff; - - TBool started = EFalse; - TPoint topLeftHighlighted(iIconDisplayRect.iTl.iX, iIconDisplayRect.iTl.iY); - TPoint bottomRightLighted(iIconDisplayRect.iTl.iX, iIconDisplayRect.iBr.iY); - - for (TInt i = 0; (iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2 < iSampleArrayHandler->Size() && - iIconDisplayRect.iTl.iX + i*diff < iIconDisplayRect.iBr.iX; i++) - { - TInt x = iIconDisplayRect.iTl.iX + i*diff; - TInt y = iIconDisplayRect.iBr.iY - iIconDisplayRect.Height()/2; - - // in the beginning of clip, nothing is drawn on the left side of the rect - if ((iSampleArrayHandler->CurrentPoint() + i) - samplesInDisplay/2 > 1) - { - if (iSampleArrayHandler->SampleCutted((iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2)) - { - if (!started) - { - topLeftHighlighted.iX = x; - started = ETrue; - } - bottomRightLighted.iX = x; - bitmapContext->SetPenColor( KRgbRed ); - } - else - { - bitmapContext->SetBrushStyle(CGraphicsContext::EDiamondCrossHatchBrush); - TRect rec(TPoint(1,1), TPoint(2,2)); - bitmapContext->DrawRect( rec); - bitmapContext->SetPenColor( KRgbBlack); - } - - // to eliminate from drawing over surrounding black rect - if (x > iIconDisplayRect.iTl.iX + 1) - { - bitmapContext->DrawLine(TPoint(x, y), - TPoint(x, (y - 1) - iSampleArrayHandler->Sample((iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2))); - - bitmapContext->DrawLine(TPoint(x, y), - TPoint(x, (y + 1) + iSampleArrayHandler->Sample((iSampleArrayHandler->CurrentPoint()+i) - samplesInDisplay/2))); - } - } - } - - // not selected area is "dimmed" - bitmapContext->SetPenColor( KRgbBlack); - bitmapContext->SetDrawMode(CGraphicsContext::EDrawModeAND); - bitmapContext->SetBrushStyle(CGraphicsContext::EDiamondCrossHatchBrush); - - TPoint brArea1(topLeftHighlighted.iX, iIconDisplayRect.iBr.iY); - TRect rect1(iIconDisplayRect.iTl, brArea1); - bitmapContext->DrawRoundRect( rect1, TSize(4,4)); - - TPoint tlArea2(bottomRightLighted.iX, iIconDisplayRect.iTl.iY); - TRect rect2(tlArea2, iIconDisplayRect.iBr); - bitmapContext->DrawRoundRect( rect2, TSize(4,4)); - - bitmapContext->SetPenColor( KRgbGreen ); - bitmapContext->DrawLine(TPoint((iIconDisplayRect.iTl.iX + iIconDisplayRect.iBr.iX)/2, - iIconDisplayRect.iTl.iY + 1), - TPoint((iIconDisplayRect.iTl.iX + iIconDisplayRect.iBr.iX)/2, - iIconDisplayRect.iBr.iY - 2)); - } - - CleanupStack::PopAndDestroy( graphicsContext ); - CleanupStack::PopAndDestroy( bitmapContext ); - CleanupStack::PopAndDestroy( bitmapDevice ); - DrawDeferred(); - } - -void CVeiCutAudioContainer::Draw( const TRect& /*aRect*/ ) const - { - CWindowGc& gc = SystemGc(); - - if ( iBufBitmap && iBufBitmap->Handle() ) - { - gc.BitBlt(TPoint(0,0), iBufBitmap); - } - } - -// ---------------------------------------------------------------------------- -// CVeiCutAudioContainer::GetHelpContext(...) const -// -// Gets the control's help context. Associates the control with a particular -// Help file and topic in a context sensitive application. -// ---------------------------------------------------------------------------- -// -void CVeiCutAudioContainer::GetHelpContext( TCoeHelpContext& aContext ) const - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::GetHelpContext(): In"); - - // Set UID of the CS Help file (same as application UID). - aContext.iMajor = KUidVideoEditor; - - // Set the context/topic. - aContext.iContext = KVED_HLP_CUT_AUDIO_VIEW; - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::GetHelpContext(): Out"); - } - - -void CVeiCutAudioContainer::HandleControlEventL( - CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/) - { - } - -// ---------------------------------------------------------------------------- -// CVeiCutAudioContainer::HandlePointerEventL -// From CCoeControl -// ---------------------------------------------------------------------------- -// -void CVeiCutAudioContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent ) - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandlePointerEventL(): In"); - if( AknLayoutUtils::PenEnabled() && iCutAudioBar ) - { - CCoeControl::HandlePointerEventL( aPointerEvent ); - - switch( aPointerEvent.iType ) - { - case TPointerEvent::EButton1Down: - { - iIsMarkDrag = EFalse; - iIsMarkTapped = EFalse; - TRect startMarkRect = iCutAudioBar->StartMarkRect(); - TRect endMarkRect = iCutAudioBar->EndMarkRect(); - // check if the pen goes down inside the start mark - if (startMarkRect.Contains(aPointerEvent.iPosition)) - { - iIsMarkTapped = ETrue; - iTappedMark = EStartMark; - } - // check if the pen goes down inside the end mark - else if (endMarkRect.Contains(aPointerEvent.iPosition)) - { - iIsMarkTapped = ETrue; - iTappedMark = EEndMark; - } - - TRect progressBarRect(iCutAudioBar->ProgressBarRect()); - // check if the pen goes down inside the progress bar - if( progressBarRect.Contains( aPointerEvent.iPosition ) ) - { - iIsMarkDrag = EFalse; - } - break; - } - case TPointerEvent::EDrag: - { - - TRect progressBarRect(iCutAudioBar->ProgressBarRect()); - if ( progressBarRect.Contains( aPointerEvent.iPosition ) ) - { - - if (iIsMarkTapped) - { - iIsMarkDrag = ETrue; - HandleProgressBarTouchL( progressBarRect, - aPointerEvent.iPosition.iX, - ETrue, - iTappedMark ); - } - else - { - - HandleProgressBarTouchL( progressBarRect, - aPointerEvent.iPosition.iX, - EFalse); - } - } - break; - } - case TPointerEvent::EButton1Up: - { - // pen up event is handled if it wasn't dragged - if (!iIsMarkDrag) - { - TRect progressBarRect(iCutAudioBar->ProgressBarRect()); - // Check if pressed position is in progress bar's rect - if( progressBarRect.Contains( aPointerEvent.iPosition ) ) - { - HandleProgressBarTouchL( progressBarRect, - aPointerEvent.iPosition.iX, - EFalse); - } - } - break; - } - default: - { - break; - } - } - } - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandlePointerEventL(): Out"); - } - - -// ---------------------------------------------------------------------------- -// CVeiCutAudioContainer::HandleProgressBarTouchL -// -// ---------------------------------------------------------------------------- -// -void CVeiCutAudioContainer::HandleProgressBarTouchL( TRect aPBRect, - TInt aPressedPoint, - TBool aDragMarks, - CVeiCutAudioContainer::TCutMark aCutMark ) - { - if ( (AknLayoutUtils::PenEnabled()) && ( iState!=EStateInitializing )) - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleProgressBarTouchL(): In"); - - if (iState == EStatePlaying) - { - StopL(); - } - - // Progress Bar start and end points, and length - TInt pbEndPoint( aPBRect.iBr.iX ); - TInt pbStartPoint = ( aPBRect.iTl.iX ); - TInt totalPBLength( pbEndPoint - pbStartPoint ); - - // calculate the time position from the tapped progress bar coordinates - TTimeIntervalMicroSeconds newPosition( - ( ( aPressedPoint - pbStartPoint ) * - iAudioSamplePlayer->Duration().Int64() ) / - totalPBLength ); - - // move cut marks - if (aDragMarks) - { - // check that the start mark doesn't go past the end mark - // and not to the beginning - if ((aCutMark == EStartMark) && - (newPosition.Int64() > 0) && - (aPressedPoint < iCutAudioBar->EndMarkPoint() - 2*iCutAudioBar->EndMarkRect().Width())) - { - iView.MoveStartOrEndMarkL(newPosition, EStartMark); - iCutAudioBar->SetInPoint( newPosition ); - iCutTimeDisplay->SetCutIn( newPosition ); - } - // check that the end mark doesn't go before the start mark - // and not too close to the beginning - else if ((aCutMark == EEndMark) && - (newPosition.Int64() >= KMinCutVideoLength) && - (aPressedPoint > iCutAudioBar->StartMarkPoint() + 2*iCutAudioBar->StartMarkRect().Width())) - - { - iView.MoveStartOrEndMarkL(newPosition, EEndMark); - iCutAudioBar->SetOutPoint( newPosition ); - iCutTimeDisplay->SetCutOut( newPosition ); - } - } - - // move playhead - else if (( newPosition != iLastPosition ) && !aDragMarks) - { - iLastPosition = newPosition; - - iSeekPos = TTimeIntervalMicroSeconds( newPosition ); - - iCutAudioBar->SetCurrentPoint( (static_cast(iSeekPos.Int64() / 1000))); - iAudioSamplePlayer->SetPosition( iSeekPos ); - UpdateVisualizationL(); - - iView.UpdateTimeL(); - } - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleProgressBarTouchL(): Out"); - - }// PenEnabled - - } - - -void CVeiCutAudioContainer::PlayL( const TTimeIntervalMicroSeconds& aStartTime ) - { - LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL(): In, aStartTime:%Ld", aStartTime.Int64()); - if ( aStartTime != TTimeIntervalMicroSeconds(0) ) - { - LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 2, setting pos:%Ld", aStartTime.Int64()); - iAudioSamplePlayer->SetPosition( aStartTime ); - UpdateVisualizationL(); - } - else - { - LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 3, setting pos:%Ld", iSeekPos.Int64()); - iAudioSamplePlayer->SetPosition( iSeekPos ); - UpdateVisualizationL(); - } - - SetStateL( EStatePlaying ); - - iAudioSamplePlayer->Play(); - const TUint delay = 100000; - - if ( !iVideoBarTimer->IsActive() ) - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 4"); - iVideoBarTimer->Start( delay, delay, TCallBack( CVeiCutAudioContainer::DoAudioBarUpdate, this ) ); - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL() 5"); - } - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PlayL(): Out"); - } - -void CVeiCutAudioContainer::StopL() - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::StopL(): In"); - iAudioSamplePlayer->Stop(); - - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - iLastPosition = TTimeIntervalMicroSeconds( 0 ); - SetStateL( EStateStopped ); - PlaybackPositionL(); - - iVideoBarTimer->Cancel(); - iCutAudioBar->SetFinishedStatus( ETrue ); - - UpdateVisualizationL(); - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::StopL(): Out"); - } - -void CVeiCutAudioContainer::PauseL() - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PauseL(): In"); - - PlaybackPositionL(); - - iVideoBarTimer->Cancel(); - iAudioSamplePlayer->Pause(); - - if (iState != EStateInitializing) - { - SetStateL( EStatePaused ); - } - else - { - SetStateL( EStateStoppedInitial ); - } - iView.UpdateCBAL(iState); - // draw new visualization to bitmap - DrawToBufBitmapL(); - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PauseL(): Out"); - } - -void CVeiCutAudioContainer::CloseStreamL() - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::CloseStreamL(): In"); - - PlaybackPositionL(); - SetStateL( EStateStopped ); - - iAudioSamplePlayer->Stop(); - iAudioSamplePlayer->Close(); - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::CloseStreamL(): Out"); - } - -void CVeiCutAudioContainer::SetInTimeL( const TTimeIntervalMicroSeconds& aTime ) - { - iMarkedInTime = aTime; - if ( iCutTimeDisplay ) - { - iCutTimeDisplay->SetCutIn( aTime ); - } - if ( iCutAudioBar ) - { - iCutAudioBar->SetInPoint( aTime ); - } - if (iSampleArrayHandler) - { - iSampleArrayHandler->SetCutInPoint(aTime); - } - // draw new visualization to bitmap - DrawToBufBitmapL(); - } - -void CVeiCutAudioContainer::SetOutTimeL( const TTimeIntervalMicroSeconds& aTime ) - { - iMarkedOutTime = aTime; - if ( iCutTimeDisplay ) - { - iCutTimeDisplay->SetCutOut( aTime ); - } - if ( iCutAudioBar ) - { - iCutAudioBar->SetOutPoint( aTime ); - } - if (iSampleArrayHandler) - { - iSampleArrayHandler->SetCutOutPoint(aTime); - } - // draw new visualization to bitmap - DrawToBufBitmapL(); - } - -const TTimeIntervalMicroSeconds& CVeiCutAudioContainer::TotalLength() - { - return iDuration; - } - -const TTimeIntervalMicroSeconds& CVeiCutAudioContainer::PlaybackPositionL() - { - if (iSeeking) - { - return iSeekPos; - } - if (iState != EStatePlaying) - { - return iLastPosition; - } - - TInt posError = iAudioSamplePlayer->GetPosition( iLastPosition ); - //LOGFMT2(KVideoEditorLogFile, "CVeiCutAudioContainer::PlaybackPositionL(): %Ld, error: %d", iLastPosition.Int64(), posError); - posError = 0; - - return iLastPosition; - } - -TKeyResponse CVeiCutAudioContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) - { - if ( aType == EEventKeyDown ) - { - iKeyRepeatCount = 0; - - iAudioSamplePlayer->GetPosition( iSeekPos ); - - LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::OfferKeyEventL(): EEventKeyDown, pos: %Ld", iSeekPos.Int64()); - - return EKeyWasConsumed; - } - else if ( aType == EEventKeyUp ) - { - - if ( iSeeking == EFalse ) - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::OfferKeyEventL(): EEventKeyUp, seeking false"); - return EKeyWasNotConsumed; - } - - iSeeking = EFalse; - iLastPosition = iSeekPos; - iAudioSamplePlayer->SetPosition( iSeekPos ); - UpdateVisualizationL(); - if ( iState == EStatePlaying ) - { - iAudioSamplePlayer->Play(); - } - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::OfferKeyEventL(): EEventKeyUp, seeking true"); - - return EKeyWasConsumed; - } - else if ( aType == EEventKey ) - { - if ( ( aKeyEvent.iRepeats == 0 ) && - ( (aKeyEvent.iCode != EKeyDownArrow ) && - ( aKeyEvent.iCode != EKeyUpArrow ) ) ) - { - iAudioSamplePlayer->Pause(); - } - iLastKeyCode = aKeyEvent.iCode; - - switch (aKeyEvent.iCode) - { - case EKeyOK: - { - iView.HandleCommandL( EAknSoftkeyOk ); - return EKeyWasConsumed; - } - case EKeyDownArrow: - { - iView.ProcessCommandL( EVeiCmdCutVideoVolumeDown ); - return EKeyWasConsumed; - } - case EKeyUpArrow: - { - iView.ProcessCommandL( EVeiCmdCutVideoVolumeUp ); - return EKeyWasConsumed; - } - case EKeyRightArrow: - { - - if ( iSeeking == EFalse ) - { - iAudioSamplePlayer->Pause(); - } - - iSeeking = ETrue; - iKeyRepeatCount++; - - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - - TInt64 newPos = iSeekPos.Int64() + adjustment; - - if ( newPos > iAudioSamplePlayer->Duration().Int64() ) - { - newPos = iAudioSamplePlayer->Duration().Int64(); - } - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - iCutAudioBar->SetCurrentPoint( static_cast((iSeekPos.Int64() / 1000))); - - iView.UpdateTimeL(); - - // mieti onko eka rivi tarpeen - iAudioSamplePlayer->SetPosition( iSeekPos ); - UpdateVisualizationL(); - return EKeyWasConsumed; - } - - case EKeyLeftArrow: - { - if ( iSeeking == EFalse ) - { - iAudioSamplePlayer->Pause(); - } - - iSeeking = ETrue; - iKeyRepeatCount++; - - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - - TInt64 newPos = iSeekPos.Int64() - adjustment; - if ( newPos < 0 ) - { - newPos = 0; - } - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - iCutAudioBar->SetCurrentPoint(static_cast( (iSeekPos.Int64() / 1000))); - - iView.UpdateTimeL(); - iAudioSamplePlayer->SetPosition( iSeekPos ); - UpdateVisualizationL(); - return EKeyWasConsumed; - } - case EKeyBackspace: //Clear - { - iView.ClearInOutL( ETrue, ETrue ); - UpdateVisualizationL(); - return EKeyWasConsumed; - } - default: - { - return EKeyWasNotConsumed; - } - } - } - else - { - return EKeyWasNotConsumed; - } - } - - - -TInt CVeiCutAudioContainer::TimeIncrement(TInt aKeyCount) const - { - if ( aKeyCount < 3 ) - { - return 100000; - } - else if ( aKeyCount < 4 ) - { - return 300000; - } - else if ( aKeyCount < 5 ) - { - return 500000; - } - else if ( aKeyCount < 10 ) - { - return 1000000; - } - else if ( aKeyCount < 13 ) - { - return 2000000; - } - else if ( aKeyCount < 15 ) - { - return 3000000; - } - else - { - return 5000000; - } - } - -void CVeiCutAudioContainer::SetStateL(CVeiCutAudioContainer::TCutAudioState aState) - { - LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::SetStateL(): In: aState:%d", aState); - - iState = aState; - iView.UpdateCBAL( aState ); - - // If the foreground is lost while an arrow key is down, we do not get - // the key up -event, and iSeeking remains true. Reseting it here just in case. - iSeeking = EFalse; - - // While playing, grab the volume keys for adjusting playback volume. - // In other states let them pass e.g. to the music player. - if(EStatePlaying == iState) - { - if (!iRemConTarget) - { - iRemConTarget = CVeiRemConTarget::NewL( *this ); - } - } - else - { - delete iRemConTarget; - iRemConTarget = NULL; - } - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::SetStateL(): Out"); - } - -void CVeiCutAudioContainer::MarkedInL() - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedInL(): In"); - - if (iState == EStateInitializing || iState == EStateOpening) - { - return; - } - - TTimeIntervalMicroSeconds cutIn = PlaybackPositionL(); - if ( iCutTimeDisplay ) - { - iCutTimeDisplay->SetCutIn( cutIn ); - } - LOGFMT2(KVideoEditorLogFile, "\tIn point: %Ld, state: %d", cutIn.Int64(), iState); - - iCutAudioBar->SetInPoint( cutIn ); - - if (iSampleArrayHandler) - { - iSampleArrayHandler->SetCutInPoint(cutIn); - } - - if ( iState == EStatePlaying ) - { - PauseL(); - } - else - { - iView.UpdateCBAL( iState ); - } - - UpdateVisualizationL(); - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedInL(): Out"); - } - -void CVeiCutAudioContainer::MarkedOutL() - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedOutL(): In"); - - if (iState == EStateInitializing || iState == EStateOpening) - { - return; - } - - TTimeIntervalMicroSeconds cutOut = PlaybackPositionL(); - - if ( iCutTimeDisplay ) - { - iCutTimeDisplay->SetCutOut( cutOut ); - } - - LOGFMT2(KVideoEditorLogFile, "\tOut point: %Ld, state: %d", cutOut.Int64(), iState); - iCutAudioBar->SetOutPoint( cutOut ); - - if (iSampleArrayHandler) - { - iSampleArrayHandler->SetCutOutPoint(cutOut); - } - - if ( iState == EStatePlaying ) - { - PauseL(); - } - else - { - iView.UpdateCBAL( iState ); - } - - UpdateVisualizationL(); - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MarkedOutL(): Out"); - } - -void CVeiCutAudioContainer::SetVolumeL( TInt aVolumeChange ) - { - iInternalVolume += aVolumeChange; - - if ( iInternalVolume < 0 ) - { - iInternalVolume = 0; - } - if ( iInternalVolume > KMaxCutAudioVolumeLevel ) - { - iInternalVolume = KMaxCutAudioVolumeLevel; - } - - if ( iAudioSamplePlayer ) - { - TInt vol = STATIC_CAST( TInt, (iInternalVolume*iMaxVolume)/KMaxCutAudioVolumeLevel ); - iAudioSamplePlayer->SetVolume( vol ); - } - } - -TInt CVeiCutAudioContainer::DoAudioBarUpdate( TAny* aThis ) - { - STATIC_CAST( CVeiCutAudioContainer*, aThis )->DoUpdate(); - return 42; - } - -void CVeiCutAudioContainer::DoUpdate() - { - TTimeIntervalMicroSeconds time; - iAudioSamplePlayer->GetPosition( time ); - - if ( iSeeking ) - { - time = iSeekPos; - LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::DoUpdate(): 1, time:%Ld", time.Int64()); - } - else - { - LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::DoUpdate(): 2, time:%Ld", time.Int64()); - } - - iCutAudioBar->SetCurrentPoint(static_cast( (time.Int64() / 1000))); - iCutAudioBar->DrawDeferred(); - - TRAP_IGNORE( UpdateVisualizationL() ); - } - - -void CVeiCutAudioContainer::UpdateVisualizationL() - { - TTimeIntervalMicroSeconds time; - iAudioSamplePlayer->GetPosition( time ); - iSampleArrayHandler->SetCurrentPoint(time); - - DrawToBufBitmapL(); - } - -// @: not leave safe! -void CVeiCutAudioContainer::MapcInitComplete( TInt aError, - const TTimeIntervalMicroSeconds& DEBUGLOG_ARG(aDuration) ) - { - LOGFMT2(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcInitComplete(): In, aError:%d, aDuration:%Ld", aError, aDuration.Int64()); - if( aError == KErrNone ) // The sample is ready to play. - { - CVeiVideoEditorSettings::GetMediaPlayerVolumeLevelL( iInternalVolume ); - - iMaxVolume = iAudioSamplePlayer->MaxVolume(); - TInt vol = STATIC_CAST( TInt, (iInternalVolume*iMaxVolume)/KMaxCutAudioVolumeLevel ); - iAudioSamplePlayer->SetVolume( vol ); - /* Show mute icon in navipane */ - if ( vol == 0 ) - { - iView.VolumeDownL(); - } - } - iCutAudioBar->SetTotalDuration( iDuration ); - - SetStateL( EStateStoppedInitial ); - iView.UpdateTimeL(); - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcInitComplete(): Out"); - } - -void CVeiCutAudioContainer::SetDuration( const TTimeIntervalMicroSeconds& aDuration ) - { - iDuration = aDuration; - iCutAudioBar->SetTotalDuration( iDuration ); - } - -void CVeiCutAudioContainer::LaunchProgressNoteL() - { - iProgressNote = new ( ELeave ) CAknProgressDialog( REINTERPRET_CAST( CEikDialog**, - &iProgressNote), ETrue); - iProgressNote->SetCallback(this); - iProgressNote->PrepareLC( R_VEI_PROGRESS_NOTE_WITH_CANCEL ); - - HBufC* stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_CUT, iEikonEnv ); - iProgressNote->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy(stringholder); - - iProgressNote->GetProgressInfoL()->SetFinalValue( 100 ); - iProgressNote->RunLD(); - } - -void CVeiCutAudioContainer::MapcPlayComplete( TInt DEBUGLOG_ARG(aError) ) - { - LOGFMT(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcPlayComplete(): In, error:%d", aError); - - if (EStateTerminating == iState) - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcPlayComplete: app is closing..."); - return; - } - - TRAP_IGNORE( SetStateL( EStateStopped ) ); - iVideoBarTimer->Cancel(); - - iCutAudioBar->SetFinishedStatus( ETrue ); - iLastPosition = TTimeIntervalMicroSeconds( 0 ); - iSeekPos = 0; - TRAP_IGNORE( iView.StopNaviPaneUpdateL() ); - - TRAP_IGNORE( UpdateVisualizationL() ); - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::MapcPlayComplete(): Out"); - } - -void CVeiCutAudioContainer::NotifyAudioClipVisualizationStarted(const CVedAudioClipInfo& /*aInfo*/) - { - TRAP_IGNORE( LaunchProgressNoteL() ); - } - -void CVeiCutAudioContainer::NotifyAudioClipVisualizationProgressed(const CVedAudioClipInfo& /*aInfo*/, - TInt aPercentage) - { - if ( iProgressNote ) - { - TRAP_IGNORE( iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage ) ); - } - } - -void CVeiCutAudioContainer::NotifyAudioClipVisualizationCompleted(const CVedAudioClipInfo& /*aInfo*/, - TInt aError, TInt8* aVisualization, - TInt aResolution) - { - if ( iProgressNote ) - { - TRAP_IGNORE( iProgressNote->GetProgressInfoL()->SetAndDraw(100) ); - TRAP_IGNORE( iProgressNote->ProcessFinishedL() ); - } - if (KErrNone == aError) - { - iSampleArrayHandler->SetVisualizationArray(aVisualization, aResolution); - TRAP_IGNORE( DrawToBufBitmapL() ); - } - } - -TInt CVeiCutAudioContainer::VisualizationResolution() const - { - return iIconDisplayRect.Width(); - } - -void CVeiCutAudioContainer::DialogDismissedL( TInt aButtonId ) - { - if (aButtonId != EAknSoftkeyDone ) - { - iView.CancelVisualizationL(); - if (! iCallBack) - { - TCallBack cb (CVeiCutAudioContainer::AsyncBack, this); - iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard); - } - iCallBack->CallBack(); - } - } - -TInt CVeiCutAudioContainer::AsyncBack(TAny* aThis) - { - LOG( KVideoEditorLogFile, "CVeiCutAudioContainer::AsyncExit"); - - CVeiCutAudioContainer* view = static_cast(aThis); - TRAPD( err, view->HandleCommandL(EVeiCmdCutVideoViewBack) ); - - return err; - } - - -void CVeiCutAudioContainer::HandleCommandL(TInt aCommand) - { - iView.HandleCommandL(aCommand); - } - -void CVeiCutAudioContainer::GetVisualizationL() - { - iView.GetAudioVisualizationL(); - } - -//============================================================================= -void CVeiCutAudioContainer::HandleVolumeUpL() - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeUpL: in"); - - iView.VolumeUpL(); - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeUpL: out"); - } - -//============================================================================= -void CVeiCutAudioContainer::HandleVolumeDownL() - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeDownL: in"); - - iView.VolumeDownL(); - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::HandleVolumeDownL: out"); - } - -//============================================================================= -void CVeiCutAudioContainer::PrepareForTerminationL() - { - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PrepareForTerminationL: in"); - - SetStateL( EStateTerminating ); - - iVideoBarTimer->Cancel(); - iAudioSamplePlayer->Stop(); - iAudioSamplePlayer->Close(); - - LOG(KVideoEditorLogFile, "CVeiCutAudioContainer::PrepareForTerminationL: out"); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiCutAudioView.cpp --- a/videditor/ManualVideoEditor/src/VeiCutAudioView.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,989 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES -// System includes -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//User includes -#include "VeiAppUi.h" -#include "VeiCutAudioView.h" -#include "VeiCutAudioContainer.h" -#include "ManualVideoEditor.hrh" -#include "VeiTimeLabelNavi.h" -#include "VideoEditorCommon.h" -#include "VeiVideoEditorSettings.h" -#include "VeiErrorUi.h" - -CVeiCutAudioView* CVeiCutAudioView::NewL() - { - CVeiCutAudioView* self = CVeiCutAudioView::NewLC(); - CleanupStack::Pop( self ); - - return self; - } - - -CVeiCutAudioView* CVeiCutAudioView::NewLC() - { - CVeiCutAudioView* self = new (ELeave) CVeiCutAudioView(); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -CVeiCutAudioView::CVeiCutAudioView() - { - } - -void CVeiCutAudioView::ConstructL() - { - BaseConstructL( R_VEI_CUT_AUDIO_VIEW ); - - CEikStatusPane* sp = StatusPane(); - - iNaviPane = (CAknNavigationControlContainer*) sp->ControlL( - TUid::Uid(EEikStatusPaneUidNavi)); - - iTimeNavi = CreateTimeLabelNaviL(); - iTimeNavi->SetMopParent( this ); - - iVolumeNavi = iNaviPane->CreateVolumeIndicatorL( - R_AVKON_NAVI_PANE_VOLUME_INDICATOR ); - - iErrorUI = CVeiErrorUI::NewL( *iCoeEnv ); - - iTimeUpdater = CPeriodic::NewL( CActive::EPriorityLow ); - iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow ); - } - -// --------------------------------------------------------- -// CVeiCutAudioView::~CVeiCutAudioView() -// ?implementation_description -// --------------------------------------------------------- -// -CVeiCutAudioView::~CVeiCutAudioView() - { - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - delete iContainer; - iContainer = 0; - } - if ( iTimeUpdater ) - { - iTimeUpdater->Cancel(); - delete iTimeUpdater; - } - if ( iVolumeHider ) - { - iVolumeHider->Cancel(); - delete iVolumeHider; - } - - if ( iErrorUI ) - { - delete iErrorUI; - } - - delete iVolumeNavi; - - delete iTimeNavi; - - delete iCallBack; - } - - -void CVeiCutAudioView::DynInitMenuPaneL( TInt aResourceId,CEikMenuPane* aMenuPane ) - { - TInt state = iContainer->State(); - - if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU_CLEAR_MARKS) - { - // delet in, out, in & out as necessary. - - if (iMovie->AudioClipCutInTime(iIndex) <= TTimeIntervalMicroSeconds(0)) - { - aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksIn, ETrue); - } - if (iMovie->AudioClipCutOutTime(iIndex) >= iMovie->AudioClipInfo(iIndex)->Duration() ) - { - aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksOut, ETrue); - } - if (!((iMovie->AudioClipCutOutTime(iIndex) < iMovie->AudioClipInfo(iIndex)->Duration()) - && (iMovie->AudioClipCutInTime(iIndex) > TTimeIntervalMicroSeconds(0)))) - { - aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksInOut, ETrue); - } - } - - if ( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoTakeSnapshot, ETrue ); - - if ( iPopupMenuOpened != EFalse ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewHelp, ETrue ); - } - - if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) && - iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo( iIndex )->Duration() ) ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewPlayMarked ); - } - if ( state != CVeiCutAudioContainer::EStatePlayingMenuOpen && - state != CVeiCutAudioContainer::EStatePaused ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewContinue ); - } - if ( ( state == CVeiCutAudioContainer::EStateStopped ) || - ( state == CVeiCutAudioContainer::EStateStoppedInitial ) ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewStop ); - } - - if ( ( iMovie->AudioClipCutOutTime( iIndex ) >= iMovie->AudioClipInfo( iIndex )->Duration() ) && - ( iMovie->AudioClipCutInTime( iIndex ) <= TTimeIntervalMicroSeconds( 0 ) ) ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue ); - } - if ( state == CVeiCutAudioContainer::EStatePaused ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue ); - } - if ( state == CVeiCutAudioContainer::EStateStoppedInitial ) - { - //aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue ); - //aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue ); - } - } - - if ( aResourceId != R_VEI_CUT_VIDEO_VIEW_MENU ) - return; - - - if ( ( state != CVeiCutAudioContainer::EStateStopped ) && - ( state != CVeiCutAudioContainer::EStateStoppedInitial ) && - ( state != CVeiCutAudioContainer::EStatePaused ) ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue ); - } - else - { - if ( iContainer->PlaybackPositionL() <= iMovie->AudioClipCutInTime( iIndex ) ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue ); - } - else - { - if ( iContainer->PlaybackPositionL() >= iMovie->AudioClipCutOutTime( iIndex ) ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue ); - } - } - } - - } - -TUid CVeiCutAudioView::Id() const - { - return TUid::Uid( EVeiCutAudioView ); - } - -void CVeiCutAudioView::HandleCommandL(TInt aCommand) - { - switch ( aCommand ) - { - case EAknSoftkeyOk: - { - iPopupMenuOpened = ETrue; - if (iContainer->State() == CVeiCutAudioContainer::EStatePlaying) - { - PausePreviewL(); - iContainer->SetStateL(CVeiCutAudioContainer::EStatePlayingMenuOpen); - } - - MenuBar()->TryDisplayMenuBarL(); - if (iContainer->State() == CVeiCutAudioContainer::EStatePlayingMenuOpen) - { - iContainer->SetStateL(CVeiCutAudioContainer::EStatePaused); - } - iPopupMenuOpened = EFalse; - break; - } - case EVeiCmdCutVideoViewDone: - case EVeiCmdCutVideoViewBack: - case EAknSoftkeyBack: - { - iContainer->CloseStreamL(); - - StopNaviPaneUpdateL(); - - // Activate Edit Video view - AppUi()->ActivateLocalViewL( TUid::Uid(EVeiEditVideoView) ); - break; - } - - case EVeiCmdCutVideoViewMarkIn: - { - MarkInL(); - break; - } - case EVeiCmdCutVideoViewMarkOut: - { - MarkOutL(); - break; - } - case EVeiCmdCutVideoViewClearMarksInOut: - { - ClearInOutL( ETrue, ETrue ); - break; - } - case EVeiCmdCutVideoViewClearMarksIn: - { - ClearInOutL( ETrue, EFalse ); - break; - } - case EVeiCmdCutVideoViewClearMarksOut: - { - ClearInOutL( EFalse, ETrue ); - break; - } - case EVeiCmdCutVideoViewPlayMarked: - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( EFalse ); - PlayMarkedL(); - break; - } - case EVeiCmdCutVideoViewPlay: - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( EFalse ); - iNaviPane->PushL( *iTimeNavi ); - - PlayPreviewL(); - break; - } - case EVeiCmdCutVideoViewStop: - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( EFalse ); - iNaviPane->PushL( *iTimeNavi ); - iContainer->StopL(); - StopNaviPaneUpdateL(); - break; - } - case EVeiCmdCutVideoViewContinue: - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( EFalse ); - iNaviPane->PushL( *iTimeNavi ); - PlayPreviewL(); - break; - } - case EVeiCmdCutVideoVolumeDown: - { - if ( !iAudioMuted ) - { - VolumeDownL(); - } - break; - } - case EVeiCmdCutVideoVolumeUp: - { - if ( !iAudioMuted ) - { - VolumeUpL(); - } - break; - } - // - // Options->Help - // - case EVeiCmdCutVideoViewHelp: - { - // CS Help launching is handled in Video Editor's AppUi. - AppUi()->HandleCommandL( EVeiCmdCutVideoViewHelp ); - break; - } - default: - { - AppUi()->HandleCommandL( aCommand ); - break; - } - } - } - - -void CVeiCutAudioView::DoActivateL( - const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/, - const TDesC8& /*aCustomMessage*/) - { - - if (!iContainer) - { - iContainer = CVeiCutAudioContainer::NewL( AppUi()->ClientRect(), *this, *iErrorUI ); - iContainer->SetMopParent( this ); - AppUi()->AddToStackL( *this, iContainer ); - } - - CEikStatusPane *statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); - - CAknTitlePane* titlePane = (CAknTitlePane*) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ); - TResourceReader reader1; - iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_CUTAUDIO_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader1 ); - CleanupStack::PopAndDestroy(); //reader1 - - iNaviPane->PushL( *iTimeNavi ); - - iAudioMuted = EFalse; - - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())-> - SetVolumeIconVisibilityL( ETrue ); - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( EFalse ); - - iContainer->SetInTimeL( iMovie->AudioClipCutInTime( iIndex ) ); - iContainer->SetOutTimeL( iMovie->AudioClipCutOutTime( iIndex ) ); - iContainer->SetDuration( iMovie->AudioClipInfo( iIndex )->Duration() ); - - // -/* TTimeIntervalMicroSeconds time1 = iMovie->AudioClipInfo( iIndex )->Duration(); - TTimeIntervalMicroSeconds time2 = iMovie->AudioClipCutInTime( iIndex ); - TTimeIntervalMicroSeconds time3 = iMovie->AudioClipCutOutTime( iIndex ); - TTimeIntervalMicroSeconds time4 = iMovie->AudioClipStartTime( iIndex ); - TTimeIntervalMicroSeconds time5 = iMovie->AudioClipEndTime( iIndex ); - TTimeIntervalMicroSeconds time6 = iMovie->AudioClipEditedDuration( iIndex ); - TTimeIntervalMicroSeconds time7(time3.Int64() - time2.Int64()); - TTimeIntervalMicroSeconds time8(time5.Int64() - time4.Int64()); -*/ // - - // Start processing the file asynchronously. This is needed because - // CVeiCutAudioContainer::OpenAudioFileL launches a progress dialog. - // If it is called syncronously the previous view deactivation has - // not completed, and view shutter dismisses the progress dialog... - if (! iCallBack) - { - TCallBack cb (CVeiCutAudioView::AsyncOpenAudioFile, this); - iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard); - } - iCallBack->CallBack(); - - iOriginalCutInTime = iMovie->AudioClipCutInTime( iIndex ); - - DrawTimeNaviL(); - - iErrorNmb = 0; - } - -// --------------------------------------------------------- -// CVeiCutAudioView::AsyncOpenAudioFile -// ?implementation_description -// --------------------------------------------------------- -// -TInt CVeiCutAudioView::AsyncOpenAudioFile(TAny* aThis) - { - LOG( KVideoEditorLogFile, "CVeiCutAudioView::AsyncOpenAudioFile"); - - // In the asynchronous version, trap the rest of the functions - // to make sure that the caller's TRequestStatus is always - // completed, also in case of failures. - CVeiCutAudioView* view = static_cast(aThis); - TRAPD(err, view->OpenAudioFileL() ); - - if (err) - { - // Display error message here, otherwise it would be quietly ignored. - TBuf<256> unused; - view->AppUi()->HandleError(err, SExtendedError(), unused, unused); - } - - return err; - } - -// --------------------------------------------------------- -// CVeiCutAudioView::OpenAudioFileL() -// ?implementation_description -// --------------------------------------------------------- -// -void CVeiCutAudioView::OpenAudioFileL() - { - TFileName audioClipFileName = iMovie->AudioClipInfo( iIndex )->FileName(); - iContainer->OpenAudioFileL( audioClipFileName ); - } - -// --------------------------------------------------------- -// CVeiCutAudioView::DoDeactivate() -// ?implementation_description -// --------------------------------------------------------- -// -void CVeiCutAudioView::DoDeactivate() - { - iNaviPane->Pop( iVolumeNavi ); - - if ( iTimeUpdater ) - { - iTimeUpdater->Cancel(); - } - if ( iVolumeHider ) - { - iVolumeHider->Cancel(); - } - if ( iContainer ) - { - iNaviPane->Pop( iTimeNavi ); - AppUi()->RemoveFromViewStack( *this, iContainer ); - - delete iContainer; - iContainer = NULL; - } - - } - -void CVeiCutAudioView::SetVideoClipAndIndex( CVedMovie& aVideoClip, TInt aIndex ) - { - iMovie = &aVideoClip; - - iIndex = aIndex; - } - -void CVeiCutAudioView::PlayPreviewL() - { - iPlayMarked = EFalse; - StartNaviPaneUpdateL(); - iContainer->PlayL(); - } - -void CVeiCutAudioView::PausePreviewL() - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( ETrue ); - StopNaviPaneUpdateL(); - iContainer->PauseL(); - } - -void CVeiCutAudioView::UpdateCBAL(TInt aState) - { - switch (aState) - { - case CVeiCutAudioContainer::EStateInitializing: - case CVeiCutAudioContainer::EStateOpening: - { - Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY); - break; - } - case CVeiCutAudioContainer::EStateStoppedInitial: - { - if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) ) && - ( iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo(iIndex)->Duration() ) ) - { - Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK); - } - else - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_DONE); - } - break; - } - case CVeiCutAudioContainer::EStatePaused: - case CVeiCutAudioContainer::EStateStopped: - { - if ( ( iMovie->AudioClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) ) && - ( iMovie->AudioClipCutOutTime( iIndex ) == iMovie->AudioClipInfo(iIndex)->Duration() ) ) - { - Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK); - } - else - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_DONE); - } - break; - } - case CVeiCutAudioContainer::EStatePlaying: - { - - if ( iContainer->PlaybackPositionL() < iMovie->AudioClipCutInTime( iIndex ) ) - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_EMPTY ); - iMarkState = EMarkStateIn; - } - else if ( iContainer->PlaybackPositionL() < iMovie->AudioClipCutOutTime( iIndex ) ) - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_OUT ); - iMarkState = EMarkStateInOut; - } - else if ( ( iContainer->PlaybackPositionL() > iMovie->AudioClipCutOutTime( iIndex ) ) && iPlayMarked ) - { - iContainer->StopL(); - iPlayMarked = EFalse; - } - else - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_EMPTY_OUT ); - iMarkState = EMarkStateOut; - } - break; - } - default: - { - break; - } - } - Cba()->DrawDeferred(); - } - -void CVeiCutAudioView::PlayMarkedL() - { - TTimeIntervalMicroSeconds audioPlayStartTime; - audioPlayStartTime = iMovie->AudioClipCutInTime( iIndex ); - - TTimeIntervalMicroSeconds audioPlayCutOutTime; - audioPlayCutOutTime = iMovie->AudioClipCutOutTime( iIndex ); - - if ( !(( audioPlayStartTime.Int64() + 50000 ) > audioPlayCutOutTime.Int64() ) ) - { - iPlayMarked = ETrue; - StartNaviPaneUpdateL(); - - iContainer->PlayL( audioPlayStartTime.Int64() + 1000 ); - } - else - { - iContainer->StopL(); - } - } - -void CVeiCutAudioView::ClearInOutL( TBool aClearIn, TBool aClearOut ) - { - if ( aClearIn ) - { - iMovie->AudioClipSetCutInTime( iIndex, TTimeIntervalMicroSeconds( 0 ) ); - iContainer->SetInTimeL( iMovie->AudioClipCutInTime( iIndex ) ); - } - if ( aClearOut ) - { - TTimeIntervalMicroSeconds audioClipOriginalDuration; - audioClipOriginalDuration = iMovie->AudioClipInfo( iIndex )->Duration(); - iMovie->AudioClipSetCutOutTime( iIndex, audioClipOriginalDuration ); - iContainer->SetOutTimeL( audioClipOriginalDuration ); - } - - TTimeIntervalMicroSeconds cutin = iMovie->AudioClipCutInTime( iIndex ); - TTimeIntervalMicroSeconds cutout = iMovie->AudioClipCutOutTime( iIndex ); - - if ( ( cutin == TTimeIntervalMicroSeconds( 0 ) ) && - ( cutout == iMovie->AudioClipInfo(iIndex)->Duration() ) ) - { - Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK); - Cba()->DrawDeferred(); - } - } - -void CVeiCutAudioView::MarkInL() - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( ETrue ); - StopNaviPaneUpdateL(); -/* Check that cut in time is before cut out time */ - TTimeIntervalMicroSeconds cutOutTime = iMovie->AudioClipCutOutTime( iIndex ); - TTimeIntervalMicroSeconds cutInTime = iContainer->PlaybackPositionL(); - if ( cutInTime >= cutOutTime ) - { - cutInTime = cutOutTime.Int64() - 100000; - } - - iMovie->AudioClipSetCutInTime( iIndex, cutInTime ); - iContainer->MarkedInL(); - } - -void CVeiCutAudioView::MarkOutL() - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( ETrue ); - StopNaviPaneUpdateL(); - - TTimeIntervalMicroSeconds cutOutTime = iContainer->PlaybackPositionL(); - TTimeIntervalMicroSeconds cutInTime = iMovie->AudioClipCutInTime( iIndex ); - if ( cutOutTime <= cutInTime ) - { - cutOutTime = cutInTime.Int64() + 100000; - } - - //iMovie->AudioClipSetCutOutTime( iIndex, iContainer->PlaybackPositionL() ); - iMovie->AudioClipSetCutOutTime( iIndex, cutOutTime ); - iContainer->MarkedOutL(); - } - -void CVeiCutAudioView::MoveStartOrEndMarkL( TTimeIntervalMicroSeconds aPosition, CVeiCutAudioContainer::TCutMark aMarkType ) - { - LOG(KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, In"); - - StopNaviPaneUpdateL(); - - LOG(KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, 2"); - - if ( aMarkType == CVeiCutAudioContainer::EStartMark ) - { - iMovie->VideoClipSetCutInTime( iIndex, aPosition ); - } - else if ( aMarkType == CVeiCutAudioContainer::EEndMark ) - { - iMovie->VideoClipSetCutOutTime( iIndex, aPosition ); - } - LOG( KVideoEditorLogFile, "CVeiCutAudioView::MoveStartOrEndMarkL, Out" ); - } - - -TUint CVeiCutAudioView::InPointTime() - { - if ( !iMovie ) - { - return 0; - } - else - { - return (static_cast(iMovie->AudioClipCutInTime(iIndex).Int64() / 1000)); - } - } - -TUint CVeiCutAudioView::OutPointTime() - { - if ( !iMovie ) - { - return 0; - } - else - { - return (static_cast(iMovie->AudioClipCutOutTime(iIndex).Int64() / 1000)); - } - } - -CAknNavigationDecorator* CVeiCutAudioView::CreateTimeLabelNaviL() - { - CVeiTimeLabelNavi* timelabelnavi = CVeiTimeLabelNavi::NewLC(); - CAknNavigationDecorator* decoratedFolder = - CAknNavigationDecorator::NewL(iNaviPane, timelabelnavi, CAknNavigationDecorator::ENotSpecified); - CleanupStack::Pop(timelabelnavi); - - CleanupStack::PushL(decoratedFolder); - decoratedFolder->SetContainerWindowL(*iNaviPane); - CleanupStack::Pop(decoratedFolder); - decoratedFolder->MakeScrollButtonVisible(EFalse); - - return decoratedFolder; - } - -TInt CVeiCutAudioView::UpdateTimeCallbackL(TAny* aPtr) - { - CVeiCutAudioView* view = (CVeiCutAudioView*)aPtr; - - view->UpdateTimeL(); - - return 1; - } - - -void CVeiCutAudioView::UpdateTimeL() - { - DrawTimeNaviL(); - - TTimeIntervalMicroSeconds playbackPos = iContainer->PlaybackPositionL(); - - if (iMarkState == EMarkStateIn) - { - if (playbackPos > iMovie->AudioClipCutInTime( iIndex )) - { - UpdateCBAL(iContainer->State()); - } - } - else if (iMarkState == EMarkStateOut) - { - if (playbackPos < iMovie->AudioClipCutOutTime( iIndex )) - { - UpdateCBAL(iContainer->State()); - } - } - else - { - if ((playbackPos < iMovie->AudioClipCutInTime( iIndex )) || - (playbackPos > iMovie->AudioClipCutOutTime( iIndex ))) - { - UpdateCBAL(iContainer->State()); - } - } - } - -void CVeiCutAudioView::DrawTimeNaviL() - { - TTime elapsed( iContainer->PlaybackPositionL().Int64() ); - TTime total( iContainer->TotalLength().Int64() ); - - TBuf<16> elapsedBuf; - TBuf<16> totalBuf; - - HBufC* dateFormatString; - - if ( ( total.Int64() / 1000 ) < 3600000 ) // check if time is over 99:59 - { - dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_MIN_SEC ); - } - else - { - dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_LONG ); - } - - elapsed.FormatL(elapsedBuf, *dateFormatString); - total.FormatL(totalBuf, *dateFormatString); - CleanupStack::PopAndDestroy(dateFormatString); - - CDesCArrayFlat* strings = new (ELeave) CDesCArrayFlat(2); - CleanupStack::PushL(strings); - strings->AppendL(elapsedBuf); - strings->AppendL(totalBuf); - HBufC* stringholder = StringLoader::LoadL(R_VEI_NAVI_TIME, *strings, iEikonEnv); - CleanupStack::PopAndDestroy(strings); - CleanupStack::PushL(stringholder); - - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLabelL(stringholder->Des()); - - CleanupStack::PopAndDestroy(stringholder); - - - /* Prevent the screen light dimming. */ - if (elapsed.DateTime().Second() == 0 || elapsed.DateTime().Second() == 15 || elapsed.DateTime().Second() == 30 || elapsed.DateTime().Second() == 45) - { - User::ResetInactivityTime(); - } - } - - -void CVeiCutAudioView::StartNaviPaneUpdateL() - { - DrawTimeNaviL(); - if (iTimeUpdater && !iTimeUpdater->IsActive()) - { - iTimeUpdater->Start(500000, 500000, TCallBack(CVeiCutAudioView::UpdateTimeCallbackL, this)); - } - } - -void CVeiCutAudioView::StopNaviPaneUpdateL() - { - if (iContainer) - { - DrawTimeNaviL(); - } - if (iTimeUpdater && iTimeUpdater->IsActive()) - { - iTimeUpdater->Cancel(); - } - } - -TInt CVeiCutAudioView::HideVolumeCallbackL(TAny* aPtr) - { - CVeiCutAudioView* view = (CVeiCutAudioView*)aPtr; - view->HideVolume(); - return 0; - } - -void CVeiCutAudioView::HideVolume() - { - iNaviPane->Pop(iVolumeNavi); - } - -void CVeiCutAudioView::VolumeMuteL() - { - iContainer->SetVolumeL(-1000); - } - -void CVeiCutAudioView::VolumeDownL() - { - iContainer->SetVolumeL(-1); - TInt volume = iContainer->Volume(); - if (iVolumeHider->IsActive()) - { - iVolumeHider->Cancel(); - } - if (volume == 0) - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())-> - SetVolumeIconVisibilityL( EFalse ); - HideVolume(); - volume = 1; - return; - } - - iNaviPane->PushL(*iVolumeNavi); - iVolumeHider->Start(1000000, 100000, TCallBack(CVeiCutAudioView::HideVolumeCallbackL, this)); - - STATIC_CAST(CAknVolumeControl*, iVolumeNavi->DecoratedControl())->SetValue(volume); - - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(ETrue); - - if (volume < iContainer->MaxVolume()) - { - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(ETrue); - } - else - { - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(EFalse); - } - } - -void CVeiCutAudioView::VolumeUpL() - { - iContainer->SetVolumeL(1); - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())-> - SetVolumeIconVisibilityL( ETrue ); - - TInt volume = iContainer->Volume(); - if (iVolumeHider->IsActive()) - { - iVolumeHider->Cancel(); - } - iNaviPane->PushL(*iVolumeNavi); - iVolumeHider->Start(1000000, 1000000, TCallBack(CVeiCutAudioView::HideVolumeCallbackL, this)); - - STATIC_CAST(CAknVolumeControl*, iVolumeNavi->DecoratedControl())->SetValue(volume); - - if (volume > iContainer->MinVolume() + 1) - { - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(ETrue); - } - else - { - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(EFalse); - } - - if (volume < iContainer->MaxVolume()) - { - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(ETrue); - } - else - { - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(EFalse); - } - - } - -void CVeiCutAudioView::HandleForegroundEventL ( TBool aForeground ) - { - if ( !aForeground ) - { - // If the application is closing down, calling PauseL could result in - // a callback from the MMF player after the container is already deleted, - // causing KERN-EXEC 3 - if ( static_cast( AppUi() )->AppIsOnTheWayToDestruction() ) - { - iContainer->PrepareForTerminationL(); - } - else - { - iContainer->PauseL(); - } - iNaviPane->Pop( iTimeNavi ); - } - else - { - iNaviPane->PushL( *iTimeNavi ); - } - } - -// --------------------------------------------------------- -// CVeiCutAudioView::HandleStatusPaneSizeChange() -// --------------------------------------------------------- -// -void CVeiCutAudioView::HandleStatusPaneSizeChange() - { - if ( iContainer ) - { - iContainer->SetRect( AppUi()->ClientRect() ); - } - } - -void CVeiCutAudioView::GetAudioVisualizationL() - { - LOG(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization(), In"); - CVedAudioClipInfo* audioInfo = NULL; - if (iMovie) - { - audioInfo = iMovie->AudioClipInfo( iIndex ); - if (audioInfo && iContainer) - { - TInt64 duration = audioInfo->Duration().Int64(); - TInt resolution = (duration/1000)/KAudioSampleInterval; - - LOGFMT(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization() 2, calling audioInfo->GetVisualizationL(*iContainer, resolution, 1), where resolution is:%Ld", resolution); - audioInfo->GetVisualizationL(*iContainer, resolution, 1); - } - } - - LOG(KVideoEditorLogFile, "CVeiCutAudioView::GetAudioVisualization(), Out"); - } - -void CVeiCutAudioView::CancelVisualizationL() - { - CVedAudioClipInfo* audioInfo = NULL; - if (iMovie) - { - audioInfo = iMovie->AudioClipInfo( iIndex ); - } - if (audioInfo && iContainer) - { - TInt resolution = (audioInfo->Duration().Int64()/1000)/KAudioSampleInterval; - audioInfo->CancelVisualizationL(); - } - } - -void CVeiCutAudioView::HandleResourceChange(TInt aType) - { - LOGFMT(KVideoEditorLogFile, "CVeiCutAudioView::HandleResourceChange() In, aType:%d", aType); - - if (KAknsMessageSkinChange == aType) - { - // Handle skin change in the navi label controls - they do not receive - // it automatically since they are not in the control stack - iTimeNavi->DecoratedControl()->HandleResourceChange( aType ); - iVolumeNavi->DecoratedControl()->HandleResourceChange( aType ); - } - - LOG(KVideoEditorLogFile, "CVeiCutAudioView::HandleResourceChange() Out"); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiCutVideoContainer.cpp --- a/videditor/ManualVideoEditor/src/VeiCutVideoContainer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1653 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -// User includes -#include "VeiAppUi.h" -#include "VeiCutterBar.h" -#include "VeiCutVideoContainer.h" -#include "VeiCutVideoView.h" -#include "veitextdisplay.h" -#include "VideoEditorHelp.hlp.hrh" // Topic contexts (literals) -#include "VideoEditorCommon.h" -#include "VideoEditorUtils.h" -#include "VeiErrorUi.h" - - -// ================= MEMBER FUNCTIONS ======================= -void CleanupRarray( TAny* object ) - { - (( RImageTypeDescriptionArray*)object)->ResetAndDestroy(); - } - -CVeiCutVideoContainer* CVeiCutVideoContainer::NewL( const TRect& aRect, CVeiCutVideoView& aView, CVeiErrorUI& aErrorUI ) - { - CVeiCutVideoContainer* self = CVeiCutVideoContainer::NewLC( aRect, aView, aErrorUI ); - CleanupStack::Pop( self ); - return self; - } - -CVeiCutVideoContainer* CVeiCutVideoContainer::NewLC( const TRect& aRect, CVeiCutVideoView& aView, CVeiErrorUI& aErrorUI ) - { - CVeiCutVideoContainer* self = new (ELeave) CVeiCutVideoContainer( aRect, aView, aErrorUI ); - CleanupStack::PushL( self ); - self->ConstructL( aRect, aView, aErrorUI ); - return self; - } - -void CVeiCutVideoContainer::ConstructL( const TRect& aRect, CVeiCutVideoView& /*aView*/, CVeiErrorUI& /*aErrorUI*/ ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::ConstructL: in"); - CreateWindowL(); - - iInternalVolume = 0; - - iState = EStateInitializing; - iFrameReady = EFalse; - iPlayOrPlayMarked = EFalse; - - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - iSeeking = EFalse; - iCutVideoBar = CVeiCutterBar::NewL( this ); - - iConverter = CVeiImageConverter::NewL( this ); - iTakeSnapshot = EFalse; - iVideoDisplay = CVeiVideoDisplay::NewL( iDisplayRect, this, *this ); - iCutTimeDisplay = CVeiTextDisplay::NewL( iCutTimeDisplayRect, this ); - - TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) ); - - AknIconUtils::CreateIconL( iPauseBitmap, iPauseBitmapMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_prop_ve_pause, - EMbmVideoeditoruicomponentsQgn_prop_ve_pause_mask ); - - SetRect( aRect ); - - iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse ); - iVideoBarTimer = CPeriodic::NewL( CActive::EPriorityLow ); - - EnableDragEvents(); - - ActivateL(); - - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::ConstructL: out"); - } - -CVeiCutVideoContainer::CVeiCutVideoContainer( const TRect& /*aRect*/, CVeiCutVideoView& aView, CVeiErrorUI& aErrorUI ):iView( aView ), iErrorUI( aErrorUI ) - { - } - - -CVeiCutVideoContainer::~CVeiCutVideoContainer() - { - if ( iCutVideoBar ) - { - delete iCutVideoBar; - } - if ( iBgContext ) - { - delete iBgContext; - } - if ( iVideoDisplay ) - { - delete iVideoDisplay; - } - if ( iCutTimeDisplay ) - { - delete iCutTimeDisplay; - } - if ( iVideoClipInfo ) - { - delete iVideoClipInfo; - iVideoClipInfo = NULL; - } - if ( iConverter ) - { - iConverter->Cancel(); - delete iConverter; - } - if ( iVideoBarTimer ) - { - iVideoBarTimer->Cancel(); - delete iVideoBarTimer; - } - - if ( iProgressDialog ) - { - delete iProgressDialog; - iProgressDialog = NULL; - } - if ( iSaveToFileName ) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - - delete iPauseBitmap; - delete iPauseBitmapMask; - - delete iRemConTarget; - - delete iCallBackSaveSnapshot; - delete iCallBackTakeSnapshot; - } - -void CVeiCutVideoContainer::DialogDismissedL( TInt aButtonId ) - { - if ( aButtonId == -1 ) - { // when pressing cancel button. - CancelSnapshotSave(); - } - iTakeSnapshot = EFalse; - } - -void CVeiCutVideoContainer::SizeChanged() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::SizeChanged(): In"); - TSize videoScreenSize; - TRect rect( Rect() ); - if ( iBgContext ) - { - iBgContext->SetRect( rect ); - } - LOGFMT2(KVideoEditorLogFile, "CVeiCutVideoContainer::SizeChanged(): Rect(): %d,%d", rect.iBr.iX, rect.iBr.iY); - - // Scissor icon - TAknLayoutRect scissorsIconLayout; - scissorsIconLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::main_vded_pane_g1()); - iCutVideoBar->SetComponentRect(CVeiCutterBar::EScissorsIcon, scissorsIconLayout.Rect()); - - // Progress bar - TAknLayoutRect progressBarLayout; - progressBarLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_slider_pane()); - iCutVideoBar->SetComponentRect(CVeiCutterBar::EProgressBar, progressBarLayout.Rect()); - - // left end of the slider when that part is unselected - TAknLayoutRect sliderLeftEndLayout; - sliderLeftEndLayout.LayoutRect( progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3() ); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, sliderLeftEndLayout.Rect() ); - - // middle part of the slider when that part is unselected - TAknLayoutRect sliderMiddleLayout; - sliderMiddleLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g5()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon, sliderMiddleLayout.Rect() ); - - // right end of the slider when that part is unselected - TAknLayoutRect sliderRightEndLayout; - sliderRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon, sliderRightEndLayout.Rect() ); - - // left end of the cut selection slider - TAknLayoutRect sliderSelectedLeftEndLayout; - sliderSelectedLeftEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, sliderSelectedLeftEndLayout.Rect() ); - - // middle part of the cut selection slider - TAknLayoutRect sliderSelectedMiddleLayout; - sliderSelectedMiddleLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g5()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon, sliderSelectedMiddleLayout.Rect() ); - - // right end of the cut selection slider - TAknLayoutRect sliderSelectedRightEndLayout; - sliderSelectedRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon, sliderSelectedRightEndLayout.Rect() ); - - // playhead - TAknLayoutRect playheadLayout; - playheadLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g1()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::EPlayheadIcon, playheadLayout.Rect() ); - - // left/right border of cut selection slider - TAknLayoutRect cutAreaBorderLayout; - cutAreaBorderLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g2()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon, cutAreaBorderLayout.Rect() ); - - - // Start cut time text - TAknLayoutText startTimeTextLayout; - startTimeTextLayout.LayoutText(rect, AknLayoutScalable_Apps::main_vded_pane_t1() ); - iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EStartTimeText, startTimeTextLayout.TextRect()); - - // End cut time text - TAknLayoutText endTimeTextLayout; - endTimeTextLayout.LayoutText(rect, AknLayoutScalable_Apps::main_vded_pane_t2() ); - iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EEndTimeText, endTimeTextLayout.TextRect()); - - // Start cut time icon - TAknLayoutRect startTimeIconLayout; - startTimeIconLayout.LayoutRect(rect, AknLayoutScalable_Apps::main_vded_pane_g2() ); - iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EStartTimeIcon, startTimeIconLayout.Rect()); - - // End cut time icon - TAknLayoutRect endTimeIconLayout; - endTimeIconLayout.LayoutRect(rect, AknLayoutScalable_Apps::main_vded_pane_g3() ); - iCutTimeDisplay->SetComponentRect(CVeiTextDisplay::EEndTimeIcon, endTimeIconLayout.Rect()); - - // Pause icon - - - - // Video Display - TAknLayoutRect videoDisplayLayout; - videoDisplayLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_video_pane()); - iVideoDisplay->SetRect(videoDisplayLayout.Rect()); - - iDisplayRect = videoDisplayLayout.Rect(); - iIconDisplayRect = videoDisplayLayout.Rect(); - LOGFMT2(KVideoEditorLogFile, "CVeiCutVideoContainer::SizeChanged(): iDisplayRect: %d,%d", iDisplayRect.iBr.iX, iDisplayRect.iBr.iY); - - //CVeiCutterBar - // : Change this when LAF data is ready - TPoint cutBarTl = TPoint(STATIC_CAST( TInt, rect.iBr.iX*0.0114 ), - STATIC_CAST( TInt, rect.iBr.iY*0.875 ) ); - TSize cutBarSize = TSize(STATIC_CAST( TInt, rect.iBr.iX*0.9773 ), - STATIC_CAST( TInt, rect.iBr.iY*0.0973 ) ); - - TRect cutBarRect( cutBarTl, cutBarSize ); - iCutVideoBar->SetRect( cutBarRect ); - - //CVeiTextDisplay - // : Change this when LAF data is ready - TPoint cutTimeDisplayTl = TPoint(cutBarTl.iX, - STATIC_CAST( TInt, rect.iBr.iY*0.757 ) ); - TSize cutTimeDisplaySize = TSize(cutBarSize.iWidth, - STATIC_CAST( TInt, rect.iBr.iY*0.0903 ) ); - - iCutTimeDisplayRect = TRect( cutTimeDisplayTl, cutTimeDisplaySize ); - iCutTimeDisplay->SetRect( iCutTimeDisplayRect ); - iCutTimeDisplay->SetLayout( CVeiTextDisplay::ECutInCutOut ); - - - TInt iconWidth = STATIC_CAST( TInt, rect.iBr.iX * 0.07954545455 ); - AknIconUtils::SetSize( iPauseBitmap, TSize(iconWidth,iconWidth), EAspectRatioNotPreserved ); - - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::SizeChanged(): Out"); - } - -TTypeUid::Ptr CVeiCutVideoContainer::MopSupplyObject( TTypeUid aId ) - { - if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext ) - { - return MAknsControlContext::SupplyMopObject( aId, iBgContext ); - } - return CCoeControl::MopSupplyObject( aId ); - } - -TInt CVeiCutVideoContainer::CountComponentControls() const - { - return 3; - } - -CCoeControl* CVeiCutVideoContainer::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case 0: - return iCutVideoBar; - case 1: - return iVideoDisplay; - case 2: - return iCutTimeDisplay; - default: - return NULL; - } - } - -void CVeiCutVideoContainer::Draw( const TRect& aRect ) const - { - CWindowGc& gc = SystemGc(); - // draw skin background - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - AknsDrawUtils::Background( skin, cc, this, gc, aRect ); - - if ( EStatePaused == iState ) - { - TPoint pauseIconTl = TPoint( iIconDisplayRect.iTl.iX - STATIC_CAST( TInt, Rect().iBr.iX*0.105), - iIconDisplayRect.iTl.iY + STATIC_CAST( TInt, Rect().iBr.iY*0.178 )); - gc.BitBltMasked( pauseIconTl, iPauseBitmap, - TRect( TPoint(0,0), iPauseBitmap->SizeInPixels() ), - iPauseBitmapMask, EFalse ); - } - } - - -// ---------------------------------------------------------------------------- -// CVeiCutVideoContainer::GetHelpContext(...) const -// -// Gets the control's help context. Associates the control with a particular -// Help file and topic in a context sensitive application. -// ---------------------------------------------------------------------------- -// -void CVeiCutVideoContainer::GetHelpContext( TCoeHelpContext& aContext ) const - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::GetHelpContext(): In"); - - // Set UID of the CS Help file (same as application UID). - aContext.iMajor = KUidVideoEditor; - - // Set the context/topic. - aContext.iContext = KVED_HLP_CUT_VIDEO_VIEW; - - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::GetHelpContext(): Out"); - } - - -void CVeiCutVideoContainer::HandleControlEventL( - CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/) - { - } - -// ---------------------------------------------------------------------------- -// CVeiCutVideoContainer::HandlePointerEventL -// From CCoeControl -// ---------------------------------------------------------------------------- -// -void CVeiCutVideoContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent ) - { - LOG( KVideoEditorLogFile, "CVeiCutVideoContainer::HandlePointerEventL(): In" ); - if( AknLayoutUtils::PenEnabled() && iCutVideoBar ) - { - CCoeControl::HandlePointerEventL( aPointerEvent ); - - switch( aPointerEvent.iType ) - { - case TPointerEvent::EButton1Down: - { - iIsMarkDrag = EFalse; - iIsMarkTapped = EFalse; - TRect startMarkRect = iCutVideoBar->StartMarkRect(); - TRect endMarkRect = iCutVideoBar->EndMarkRect(); - // check if the pen goes down inside the start mark - if (startMarkRect.Contains(aPointerEvent.iPosition)) - { - iIsMarkTapped = ETrue; - iTappedMark = EStartMark; - } - // check if the pen goes down inside the end mark - else if (endMarkRect.Contains(aPointerEvent.iPosition)) - { - iIsMarkTapped = ETrue; - iTappedMark = EEndMark; - } - - TRect progressBarRect(iCutVideoBar->ProgressBarRect()); - // check if the pen goes down inside the progress bar - if( progressBarRect.Contains( aPointerEvent.iPosition ) ) - { - iIsMarkDrag = EFalse; - } - break; - } - case TPointerEvent::EDrag: - { - - TRect progressBarRect(iCutVideoBar->ProgressBarRect()); - if ( progressBarRect.Contains( aPointerEvent.iPosition ) ) - { - - if (iIsMarkTapped) - { - iIsMarkDrag = ETrue; - HandleProgressBarTouchL( progressBarRect, - aPointerEvent.iPosition.iX, - ETrue, - iTappedMark ); - } - else - { - - HandleProgressBarTouchL( progressBarRect, - aPointerEvent.iPosition.iX, - EFalse); - } - } - break; - } - case TPointerEvent::EButton1Up: - { - // pen up event is handled if it wasn't dragged - if (!iIsMarkDrag) - { - TRect progressBarRect(iCutVideoBar->ProgressBarRect()); - // Check if pressed position is in progress bar's rect - if( progressBarRect.Contains( aPointerEvent.iPosition ) ) - { - HandleProgressBarTouchL( progressBarRect, - aPointerEvent.iPosition.iX, - EFalse); - } - } - break; - } - default: - { - break; - } - } - } - LOG( KVideoEditorLogFile, "CVeiCutVideoContainer::HandlePointerEventL(): Out" ); - } - - -// ---------------------------------------------------------------------------- -// CVeiCutVideoContainer::HandleProgressBarTouchL -// -// ---------------------------------------------------------------------------- -// -void CVeiCutVideoContainer::HandleProgressBarTouchL( TRect aPBRect, - TInt aPressedPoint, - TBool aDragMarks, - CVeiCutVideoContainer::TCutMark aCutMark ) - { - if (( AknLayoutUtils::PenEnabled() ) && ( iState!=EStateInitializing )) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::HandleProgressBarTouchL(): In"); - - if ( iState == EStatePlaying ) - { - StopL(); - } - - // Progress Bar start and end points, and length - TInt pbEndPoint( aPBRect.iBr.iX ); - TInt pbStartPoint = ( aPBRect.iTl.iX ); - TInt totalPBLength( pbEndPoint - pbStartPoint ); - - // calculate the time position from the tapped progress bar coordinates - TTimeIntervalMicroSeconds newPosition( - ( ( aPressedPoint - pbStartPoint ) * - iVideoClipInfo->Duration().Int64() ) / - totalPBLength ); - - // move cut marks - if (aDragMarks) - { - // check that the start mark doesn't go past the end mark - // and not to the beginning - if ((aCutMark == EStartMark) && - (newPosition.Int64() > 0) && - (aPressedPoint < iCutVideoBar->EndMarkPoint() - 2*iCutVideoBar->EndMarkRect().Width())) - { - iView.MoveStartOrEndMarkL(newPosition, EStartMark); - iCutVideoBar->SetInPoint( newPosition ); - iCutTimeDisplay->SetCutIn( newPosition ); - } - // check that the end mark doesn't go before the start mark - // and not too close to the beginning - else if ((aCutMark == EEndMark) && - (newPosition.Int64() >= KMinCutVideoLength) && - (aPressedPoint > iCutVideoBar->StartMarkPoint() + 2*iCutVideoBar->StartMarkRect().Width())) - - { - iView.MoveStartOrEndMarkL(newPosition, EEndMark); - iCutVideoBar->SetOutPoint( newPosition ); - iCutTimeDisplay->SetCutOut( newPosition ); - } - } - - // move playhead - else if (( newPosition != iLastPosition ) && !aDragMarks) - { - iLastPosition = newPosition; - - iSeekPos = TTimeIntervalMicroSeconds( newPosition ); - - iCutVideoBar->SetCurrentPoint(( static_cast(iSeekPos.Int64() / 1000) )); - iVideoDisplay->SetPositionL( iSeekPos ); - GetThumbAtL( iSeekPos ); - - iView.UpdateTimeL(); - } - - LOG( KVideoEditorLogFile, "CVeiCutVideoContainer::HandleProgressBarTouchL(): Out" ); - - }// PenEnabled - - } - - - - -void CVeiCutVideoContainer::PlayL( const TDesC& aFilename ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::PlayL: in"); - iVideoDisplay->SetPositionL( iSeekPos ); - - if (iVideoClipInfo && !iFrameReady) - { - iVideoClipInfo->CancelFrame(); - } - iVideoDisplay->PlayL( aFilename ); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::PlayL: out"); - } - -void CVeiCutVideoContainer::PlayMarkedL( const TDesC& aFilename, - const TTimeIntervalMicroSeconds& aStartTime, - const TTimeIntervalMicroSeconds& aEndTime ) - { - LOGFMT3(KVideoEditorLogFile, "CVeiCutVideoContainer::PlayMarkedL, In, aStartTime:%Ld, aEndTime:%Ld, aFilename:%S", aStartTime.Int64(), aEndTime.Int64(), &aFilename); - iPlayOrPlayMarked = ETrue; - - if (iVideoClipInfo && !iFrameReady) - { - iVideoClipInfo->CancelFrame(); - } - iVideoDisplay->PlayL( aFilename, aStartTime, aEndTime ); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::PlayMarkedL, Out"); - } - -void CVeiCutVideoContainer::StopL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::StopL, in"); - iVideoDisplay->Stop( EFalse ); - - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - SetStateL( EStateStopped ); - PlaybackPositionL(); - - if (iVideoBarTimer) - { - iVideoBarTimer->Cancel(); - } - - iCutVideoBar->SetFinishedStatus( ETrue ); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::StopL, in"); - } - -void CVeiCutVideoContainer::TakeSnapshotL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::TakeSnapshotL in"); - - if( !iVideoClipInfo || !iFrameReady ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::TakeSnapshotL: 1"); - if (!iFrameReady) - { - iTakeSnapshotWaiting = ETrue; - } - return; - } - - iTakeSnapshotWaiting = EFalse; - iTakeSnapshot = ETrue; - const TTimeIntervalMicroSeconds& pos = PlaybackPositionL(); - - GetThumbAtL( pos ); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::TakeSnapshotL out"); - } - -void CVeiCutVideoContainer::PauseL( TBool aUpdateCBA ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::PauseL: In"); - - if (EStatePlaying == iState) - { - iLastPosition = iVideoDisplay->PositionL(); - iSeekPos = iLastPosition; - // to set next start point - iVideoDisplay->SetPositionL(iSeekPos); - } - - iVideoDisplay->PauseL(); - if (iVideoBarTimer) - { - iVideoBarTimer->Cancel(); - } - - #ifdef GET_PAUSE_THUMBNAIL - GetThumbAtL( iLastPosition ); - #endif - - if (EStateStoppedInitial == iState || EStateStopped == iState || - (EStateGettingFrame == iState && - (EStateStoppedInitial == iPreviousState || EStateStopped == iPreviousState))) - { - // just to trigger cba-update - SetStateL( iState, aUpdateCBA ); - } - else if (EStateInitializing != iState) - { - SetStateL( EStatePaused, aUpdateCBA ); - } - else - { - SetStateL( EStateStoppedInitial ); - } - - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::PauseL: Out"); - } - -void CVeiCutVideoContainer::SaveSnapshotL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::SaveSnapshotL: In"); - //first we have to encode bitmap - // get encoder types - RImageTypeDescriptionArray imageTypes; - iConverter->GetEncoderImageTypesL( imageTypes ); - - CleanupStack::PushL( TCleanupItem( CleanupRarray, &imageTypes ) ); - - TInt selectedIdx = 0; - - for( TInt i=0; iDescription() == KEncoderType ) - { - selectedIdx = i; - } - } - - RFs& fs = iEikonEnv->FsSession(); - - TParse file; - TFileName newname; - TFileName snapshotdir; - - TVeiSettings saveSettings; - // Get default snapshot name from settings view - - STATIC_CAST( CVeiAppUi*, iEikonEnv->AppUi() )->ReadSettingsL( saveSettings ); - - CAknMemorySelectionDialog::TMemory memory( saveSettings.MemoryInUse() ); - - newname.Append( saveSettings.DefaultSnapshotName() ); - newname.Append( _L(".JPEG") ); - file.Set( newname, NULL, NULL ); - - TInt error = KErrNone; - - snapshotdir.Zero(); - - if ( memory == CAknMemorySelectionDialog::EPhoneMemory ) - { - snapshotdir.Append( PathInfo::PhoneMemoryRootPath() ); - } - else - { - snapshotdir.Append( PathInfo::MemoryCardRootPath() ); - } - snapshotdir.Append( PathInfo::ImagesPath() ); - - error = fs.MkDirAll( file.Path() ); - if ( ( error != KErrAlreadyExists ) && ( error != KErrNone ) ) - { - return; - } - - newname.Zero(); - newname.Append( file.NameAndExt() ); - newname.Insert( 0, snapshotdir ); - CApaApplication::GenerateFileName( fs, newname ); - - //for cancellation - if ( iSaveToFileName ) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - iSaveToFileName = HBufC::NewL( newname.Length() ); - *iSaveToFileName = newname; - - // request the actuall save/encode - // asynchronous, the result is reported via callback NotifyCompletion - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::SaveSnapshotL: 1, calling iConverter->StartToEncodeL"); - iConverter->StartToEncodeL( newname, - imageTypes[selectedIdx]->ImageType(), imageTypes[selectedIdx]->SubType()); - - CleanupStack::PopAndDestroy( &imageTypes ); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::SaveSnapshotL: Out"); - } - -void CVeiCutVideoContainer::CancelSnapshotSave() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::CancelSnapshotSave: in"); - if ( iConverter ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::CancelSnapshotSave: 1"); - iConverter->Cancel(); - iConverter->CancelEncoding(); //also close the file - } - if ( iSaveToFileName ) - { - LOGFMT(KVideoEditorLogFile, "CVeiCutVideoContainer::CancelSnapshotSave: 2, iSaveToFileName:%S", iSaveToFileName); - - RFs& fs = iEikonEnv->FsSession(); - /*TInt result =*/ fs.Delete( *iSaveToFileName ); - delete iSaveToFileName; - iSaveToFileName = NULL; - } - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::CancelSnapshotSave: out"); - } - -void CVeiCutVideoContainer::CloseStreamL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::CloseStreamL, in"); - if( !iFrameReady && iVideoClipInfo ) - { - iVideoClipInfo->CancelFrame(); - } - PlaybackPositionL(); - SetStateL( EStateStopped, EFalse ); - iView.UpdateCBAL(iState); - - iVideoDisplay->Stop( ETrue ); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::CloseStreamL, out"); - } - -void CVeiCutVideoContainer::SetInTime( const TTimeIntervalMicroSeconds& aTime ) - { - if ( iCutTimeDisplay ) - { - iCutTimeDisplay->SetCutIn( aTime ); - } - if ( iCutVideoBar ) - { - iCutVideoBar->SetInPoint( aTime ); - } - } - -void CVeiCutVideoContainer::SetOutTime( const TTimeIntervalMicroSeconds& aTime ) - { - if ( iCutTimeDisplay ) - { - iCutTimeDisplay->SetCutOut( aTime ); - } - - if ( iCutVideoBar ) - { - iCutVideoBar->SetOutPoint( aTime ); - } - } - -TTimeIntervalMicroSeconds CVeiCutVideoContainer::PlaybackPositionL() - { - if ( ( iSeeking ) || ( EStateStopped == iState ) ) - { - return iSeekPos; - } - if ( iState != EStatePlaying ) - { - return iLastPosition; - } - - if ( iVideoClipInfo && (iVideoDisplay->PositionL() < iVideoClipInfo->Duration()) ) - { - iLastPosition = iVideoDisplay->PositionL(); - } - - if ( ( iLastPosition == TTimeIntervalMicroSeconds( 0 ) ) && - ( iSeekPos != TTimeIntervalMicroSeconds( 0 ) ) ) - { - return iSeekPos; - } - - return iLastPosition; - } - -TKeyResponse CVeiCutVideoContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) - { - if ( aType == EEventKeyDown ) - { - iKeyRepeatCount = 0; - - TBool shiftKeyPressed = (aKeyEvent.iModifiers & EModifierShift ); - if( shiftKeyPressed ) - { - if( iView.IsEnoughFreeSpaceToSaveL() && (iTakeSnapshot == EFalse )) - { - /*if (EStatePlaying == iState) - { - PauseL(); - } - */ - TakeSnapshotL(); - } - return EKeyWasConsumed; - } - - return EKeyWasNotConsumed; - } - else if ( aType == EEventKeyUp ) - { - if ( iSeeking == EFalse ) - { - return EKeyWasNotConsumed; - } - iLastPosition = iSeekPos; - iVideoDisplay->SetPositionL( iSeekPos ); - - iSeeking = EFalse; - - if ( ( ( EStateStopped == iState ) || ( EStateStoppedInitial == iState ) - || ( EStatePaused == iState )) && - ( ( iLastKeyCode == EKeyLeftArrow ) || ( iLastKeyCode == EKeyRightArrow ) ) ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::OfferKeyEventL: 1, calling GetThumbAtL()"); - GetThumbAtL( iSeekPos ); - return EKeyWasConsumed; - } - else if ( EStatePlaying == iState ) - { - if ( iVideoBarTimer->IsActive() ) - { - iVideoBarTimer->Cancel(); - } - - if ( iVideoClipInfo && (iSeekPos >= iVideoClipInfo->Duration()) ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::OfferKeyEventL: 2, calling iVideoDisplay->Stop"); - iVideoDisplay->Stop( EFalse ); - } - else - { - iVideoDisplay->SetPositionL( iSeekPos ); - iVideoDisplay->ShowBlackScreen(); - if (iVideoClipInfo && !iFrameReady) - { - iVideoClipInfo->CancelFrame(); - } - iVideoDisplay->Play(); - } - return EKeyWasConsumed; - } - else - { - return EKeyWasConsumed; - } - } - else if ( aType == EEventKey ) - { - iLastKeyCode = aKeyEvent.iCode; - - switch (aKeyEvent.iCode) - { - case EKeyOK: - { - iView.HandleCommandL( EAknSoftkeyOk ); - return EKeyWasConsumed; - } - case EKeyDownArrow: - case EKeyUpArrow: - { - iVideoDisplay->OfferKeyEventL( aKeyEvent, aType ); - return EKeyWasConsumed; - } - case EKeyRightArrow: - { - iKeyRepeatCount++; - - if ( (iKeyRepeatCount > 2) && (iSeeking == EFalse) ) - { - if ( EStatePlaying == iState ) - { - iSeekPos = iVideoDisplay->PositionL(); - } - - iVideoDisplay->PauseL(); - iSeeking = ETrue; - iKeyRepeatCount = 0; - } - - if ( iSeeking && ( iState!=EStateInitializing ) && - ( iState!=EStatePlayingMenuOpen ) ) - { - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - - TInt64 newPos = iSeekPos.Int64() + adjustment; - if ( iVideoClipInfo && (newPos > iVideoClipInfo->Duration().Int64()) ) - { - newPos = iVideoClipInfo->Duration().Int64(); - } - - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - - iCutVideoBar->SetCurrentPoint( (static_cast(iSeekPos.Int64() / 1000))); - - iView.UpdateTimeL(); - return EKeyWasConsumed; - } - return EKeyWasNotConsumed; - } - - case EKeyLeftArrow: - { - iKeyRepeatCount++; - - if ( (iKeyRepeatCount > 2) && (iSeeking == EFalse) ) - { - - if ( EStatePlaying == iState ) - { - iSeekPos = iVideoDisplay->PositionL(); - } - - iVideoDisplay->PauseL(); - iSeeking = ETrue; - iKeyRepeatCount = 0; - } - - if ( iSeeking && ( iState!=EStateInitializing ) && - ( iState!=EStatePlayingMenuOpen ) ) - { - - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - - TInt64 newPos = iSeekPos.Int64() - adjustment; - if ( newPos < 0 ) - { - newPos = 0; - } - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - - iCutVideoBar->SetCurrentPoint( static_cast((iSeekPos.Int64() / 1000)) ); - - iView.UpdateTimeL(); - - return EKeyWasConsumed; - } - return EKeyWasNotConsumed; - } - case EKeyBackspace: //Clear - { - if (EStatePlaying != iState) - { - iView.ClearInOutL( ETrue, ETrue ); - } - - return EKeyWasConsumed; - } - default: - { - return EKeyWasNotConsumed; - } - } - } - else - { - return EKeyWasNotConsumed; - } - } - - - -TInt CVeiCutVideoContainer::TimeIncrement(TInt aKeyCount) const - { - if ( aKeyCount < 3 ) - { - return 100000; - } - else if ( aKeyCount < 4 ) - { - return 300000; - } - else if ( aKeyCount < 5 ) - { - return 500000; - } - else if ( aKeyCount < 10 ) - { - return 1000000; - } - else if ( aKeyCount < 13 ) - { - return 2000000; - } - else if ( aKeyCount < 15 ) - { - return 3000000; - } - else - { - return 5000000; - } - } - -TInt CVeiCutVideoContainer::UpdateProgressNoteL() - { - TTime intervalTime; - intervalTime.HomeTime(); - intervalTime += TTimeIntervalMicroSeconds( 50000 ); - TTime currentTime; - currentTime.HomeTime(); - while ( intervalTime > currentTime ) - { - currentTime.HomeTime(); - } - - iProgressInfo->IncrementAndDraw( 1 ); - - if ( KProgressbarFinalValue <= iProgressInfo->CurrentValue() ) - { - return 0; - } - return 1; - } - - -void CVeiCutVideoContainer::GetThumbL( const TDesC& aFilename ) - { - if ( iVideoClipInfo ) - { - delete iVideoClipInfo; - iVideoClipInfo = NULL; - } - - /*iVideoClipInfo = */CVedVideoClipInfo::NewL( aFilename, *this ); - } - - -void CVeiCutVideoContainer::GetThumbAtL( const TTimeIntervalMicroSeconds& aTime ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::GetThumbAtL: In"); - if( !iVideoClipInfo || ( !iFrameReady ) ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::GetThumbAtL: 1"); - return; - } - - TRect clipResolution = iVideoClipInfo->Resolution(); - TSize resolution( iVideoDisplay->Size() ); - - TInt frameIndex; - TInt totalFrameCount; - - frameIndex = iVideoClipInfo->GetVideoFrameIndexL( aTime ); - totalFrameCount = iVideoClipInfo->VideoFrameCount(); - - if ( frameIndex > totalFrameCount ) - { - frameIndex = totalFrameCount; - } - - //Generates a thumbnail bitmap of the given frame from video clip - if ( iTakeSnapshot ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::GetThumbAtL: 2"); - TDisplayMode displayMode = ENone; - TBool enhance = ETrue; - TSize resol( clipResolution.iBr.iX, clipResolution.iBr.iY ); - - /* : - check out on every phone before releasing whether videodisplay should be stopped before starting - asynchronous GetFrameL() - see how EStateGettingFrame is handled in SetPreviewState - Stopping frees memory and it is needed in memory sensible devices - */ - iVideoClipInfo->GetFrameL( *this, frameIndex, &resol, displayMode, enhance ); - SetStateL( EStateGettingFrame ); - iFrameReady = EFalse; - ShowProgressNoteL(); - } - else - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::GetThumbAtL: 3"); - /* : - check out on every phone before releasing whether videodisplay should be stopped before starting - asynchronous GetFrameL() - see how EStateGettingFrame is handled in SetPreviewState - Stopping frees memory and it is needed in memory sensible devices - */ - iVideoClipInfo->GetFrameL( *this, frameIndex, &resolution ); - SetStateL( EStateGettingFrame ); - iFrameReady = EFalse; - } - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::GetThumbAtL: out"); - } - -void CVeiCutVideoContainer::NotifyCompletion( TInt aErr ) - { - LOGFMT(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyCompletion: In, aErr:%d", aErr); - - if (EStateTerminating == iState) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyCompletion(): app is closing..."); - return; - } - - if ( KErrNone == aErr ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyCompletion: 1"); - - if (iProgressDialog) - { - TRAP_IGNORE(iProgressDialog->GetProgressInfoL()->SetAndDraw( KProgressbarFinalValue ); - iProgressDialog->ProcessFinishedL()); - } - } - else - { - if (iProgressDialog) - { - TRAP_IGNORE(iProgressDialog->GetProgressInfoL()->SetAndDraw( KProgressbarFinalValue ); - iProgressDialog->ProcessFinishedL()); - } - iErrorUI.ShowGlobalErrorNote( aErr ); - } - - // to eliminate previous (wrong) output file from being deleted in CancelSnapshotSave() - delete iSaveToFileName; - iSaveToFileName = NULL; - - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyCompletion: Out"); - } - -void CVeiCutVideoContainer::NotifyVideoClipInfoReady( CVedVideoClipInfo& aInfo, - TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoClipInfoReady, In, aError:%d", aError); - if (KErrNone == aError) - { - if (iVideoClipInfo) - { - delete iVideoClipInfo; - iVideoClipInfo = NULL; - } - iVideoClipInfo = &aInfo; - - TRect clipResolution = Rect(); - iDuration = iVideoClipInfo->Duration(); - iCutVideoBar->SetTotalDuration( iDuration ); - iView.DrawTimeNaviL(); - - TSize resolution( clipResolution.iBr.iX, clipResolution.iBr.iY-KVeiCutBarHeight ); - iFrameReady = EFalse; - iVideoClipInfo->GetFrameL( *this, 0, &resolution ); - } - SetStateL( EStateStoppedInitial ); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoClipInfoReady, Out"); - } - - -void CVeiCutVideoContainer::NotifyVideoClipFrameCompleted(CVedVideoClipInfo& /*aInfo*/, - TInt aError, - CFbsBitmap* aFrame) - { - LOGFMT(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoClipFrameCompleted, In, aError:%d", aError); - iFrameReady = ETrue; - - if (EStateGettingFrame == iState) - { - SetStateL(iPreviousState); - } - - if (KErrNone == aError && aFrame) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoClipFrameCompleted 1"); - - if ( iTakeSnapshot ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoClipFrameCompleted 2"); - iConverter->SetBitmap( aFrame ); - if (! iCallBackSaveSnapshot) - { - TCallBack cb (CVeiCutVideoContainer::AsyncSaveSnapshot, this); - iCallBackSaveSnapshot = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard); - } - iCallBackSaveSnapshot->CallBack(); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoClipFrameCompleted 3"); - } - else - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoClipFrameCompleted 4"); - TRAP_IGNORE(iVideoDisplay->ShowPictureL( *aFrame )); - delete aFrame; - aFrame = NULL; - - if (iTakeSnapshotWaiting) - { - if (! iCallBackTakeSnapshot) - { - TCallBack cb (CVeiCutVideoContainer::AsyncTakeSnapshot, this); - iCallBackTakeSnapshot = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard); - } - iCallBackTakeSnapshot->CallBack(); - } - } - } - else - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoClipFrameCompleted 5"); - if (aFrame) - { - delete aFrame; - aFrame = NULL; - } - - if (iProgressDialog) - { - iProgressInfo->SetAndDraw( KProgressbarFinalValue ); - TRAP_IGNORE(iProgressDialog->ProcessFinishedL()); - } - } - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoClipFrameCompleted, Out"); - } - -TInt CVeiCutVideoContainer::AsyncSaveSnapshot(TAny* aThis) - { - LOG( KVideoEditorLogFile, "CVeiCutVideoView::AsyncSaveSnapshot in"); - - // In the asynchronous version, trap the rest of the functions - // to make sure that the caller's TRequestStatus is always - // completed, also in case of failures. - CVeiCutVideoContainer* container = static_cast(aThis); - TInt err = KErrNone; - TRAP(err, container->SaveSnapshotL()); - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::AsyncSaveSnapshot 2, err:%d", err); - - if (KErrNone != err) - { - container->StopProgressDialog(); - container->ShowGlobalErrorNote(err); - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncSaveSnapshot 3, returning"); - return KErrNone; - } - -void CVeiCutVideoContainer::ShowGlobalErrorNote(const TInt aErr) - { - iErrorUI.ShowGlobalErrorNote( aErr ); - } - -void CVeiCutVideoContainer::StopProgressDialog() - { - if (iProgressDialog) - { - TRAP_IGNORE(iProgressDialog->GetProgressInfoL()->SetAndDraw( KProgressbarFinalValue ); - iProgressDialog->ProcessFinishedL()); - } - } - -void CVeiCutVideoContainer::NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, In"); - - if (EStateTerminating == iState) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent(): app is closing..."); - return; - } - - switch (aEvent) - { - case MVeiVideoDisplayObserver::ELoadingStarted: - { - SetStateL(EStateOpening); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::ELoadingStarted"); - break; - } - case MVeiVideoDisplayObserver::EOpenComplete: - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::EOpenComplete 1"); - iVideoDisplay->SetRotationL( EVideoRotationNone ); - TTimeIntervalMicroSeconds cutInTime = iView.GetVideoClipCutInTime(); - TTimeIntervalMicroSeconds cutOutTime = iView.GetVideoClipCutOutTime(); - - if ( iView.IsForeground() ) - { - if (iVideoClipInfo && !iFrameReady) - { - iVideoClipInfo->CancelFrame(); - } - if ( iPlayOrPlayMarked ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::EOpenComplete 2"); - iVideoDisplay->PlayMarkedL( cutInTime, cutOutTime ); - } - else - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::EOpenComplete 3"); - iVideoDisplay->Play(); - } - iPlayOrPlayMarked = EFalse; - } - else - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EOpenComplete 4"); - PauseL(); - } - break; - } - case MVeiVideoDisplayObserver::EBufferingStarted: - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EBufferingStarted"); - SetStateL( EStateBuffering ); - if ( iVideoBarTimer ) - { - iVideoBarTimer->Cancel(); - } - break; - } - case MVeiVideoDisplayObserver::ELoadingComplete: - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::ELoadingComplete 1"); - // if VED is put to background in the middle of the buffering - // iVideoDisplay->PauseL(); cannot be called during the buffering, so its called here - if (EStatePaused == iState) - { - iVideoDisplay->PauseL(); - } - else - { - SetStateL( EStatePlaying ); - if (iVideoClipInfo && !iFrameReady) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::ELoadingComplete 2"); - iVideoClipInfo->CancelFrame(); - } - if ( !iVideoBarTimer->IsActive() ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::ELoadingComplete 3"); - const TUint delay = 100000; - iVideoBarTimer->Start( delay, delay, TCallBack( CVeiCutVideoContainer::DoAudioBarUpdate, this ) ); - } - iVideoDisplay->ShowBlackScreen(); - DrawDeferred(); - } - break; - } - case MVeiVideoDisplayObserver::EPlayComplete: - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::EPlayComplete"); - iVideoDisplay->SetBlackScreen( EFalse ); - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - iLastPosition = TotalLength(); - iView.StopNaviPaneUpdateL(); - iCutVideoBar->SetFinishedStatus( ETrue ); - - if (iVideoBarTimer) - { - iVideoBarTimer->Cancel(); - } - - GetThumbAtL(0); - - SetStateL( EStateStopped ); - - if (KErrNoMemory == aInfo || KErrSessionClosed == aInfo) - { - iErrorUI.ShowGlobalErrorNote( aInfo ); - StopL(); - CloseStreamL(); - } - - DrawDeferred(); - break; - } - case MVeiVideoDisplayObserver::EStop: - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop"); - - if (EStateGettingFrame == iState) - { - break; - } - - if ( iVideoBarTimer ) - { - iVideoBarTimer->Cancel(); - } - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - GetThumbAtL(0); - iLastPosition = TotalLength(); - iView.StopNaviPaneUpdateL(); - iCutVideoBar->SetFinishedStatus( ETrue ); - - SetStateL( EStateStopped ); - DrawDeferred(); - break; - } - case MVeiVideoDisplayObserver::EVolumeLevelChanged: - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::EVolumeLevelChanged"); - TInt playerVolume = iVideoDisplay->Volume(); - iView.ShowVolumeLabelL( playerVolume ); - break; - } - case MVeiVideoDisplayObserver::EError: - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EError"); -// iErrorUI.ShowGlobalErrorNoteL( KErrGeneral ); - SetStateL( EStateStoppedInitial ); - break; - } - default: - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::default"); - break; - }; - } - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::NotifyVideoDisplayEvent, Out"); - } - - -void CVeiCutVideoContainer::SetStateL(CVeiCutVideoContainer::TCutVideoState aState, TBool aUpdateCBA) - { - LOGFMT2(KVideoEditorLogFile, "CVeiCutVideoContainer::SetStateL: in, iState:%d, aState:%d", iState, aState); - if (EStateGettingFrame == aState) - { - iPreviousState = iState; - } - - iState = aState; - if (EStatePaused == iState) - { - DrawNow(); - } - - // If the foreground is lost while an arrow key is down, we do not get - // the key up -event, and iSeeking remains true. Reseting it here just in case. - iSeeking = EFalse; - - if ( aUpdateCBA ) - { - iView.UpdateCBAL( iState ); - } - - // While playing, grab the volume keys for adjusting playback volume. - // In other states let them pass e.g. to the music player. - if(EStatePlaying == iState) - { - if (!iRemConTarget) - { - iRemConTarget = CVeiRemConTarget::NewL( *this ); - } - } - else - { - delete iRemConTarget; - iRemConTarget = NULL; - } - - if (EStateGettingFrame == aState) - { - /* : - check out on every phone before releasing whether videodisplay should be stopped before starting - asynchronous GetFrameL() - see how EStateGettingFrame is handled in SetPreviewState - Stopping frees memory and it is needed in memory sensible devices - */ - //iVideoDisplay->Stop(ETrue); - } - - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::SetStateL:: out"); - } - -void CVeiCutVideoContainer::MarkedInL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::MarkedInL, In"); - if ( EStateInitializing == iState ) - { - return; - } - const TTimeIntervalMicroSeconds& position = PlaybackPositionL(); - iSeekPos = position; - - LOGFMT(KVideoEditorLogFile, "CVeiCutVideoContainer::MarkedInL, 2, setting cutINpoint:%Ld", position.Int64()); - iCutVideoBar->SetInPoint( position ); - iCutTimeDisplay->SetCutIn( position ); - PauseL(); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::MarkedInL, Out"); - } - -void CVeiCutVideoContainer::MarkedOutL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::MarkedOutL, In"); - if ( EStateInitializing == iState ) - { - return; - } - const TTimeIntervalMicroSeconds& position = PlaybackPositionL(); - iSeekPos = position; - - LOGFMT(KVideoEditorLogFile, "CVeiCutVideoContainer::MarkedOutL, 2, setting cutOUTpoint:%Ld", position.Int64()); - iCutVideoBar->SetOutPoint( position ); - iCutTimeDisplay->SetCutOut( position ); - - PauseL(); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::MarkedOutL, Out"); - } - -void CVeiCutVideoContainer::ShowInformationNoteL( const TDesC& aMessage ) const - { - CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); - note->ExecuteLD( aMessage ); - } - -void CVeiCutVideoContainer::ShowProgressNoteL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::ShowProgressNoteL, in"); - iProgressDialog = new ( ELeave ) CAknProgressDialog( REINTERPRET_CAST( CEikDialog**, - &iProgressDialog ), ETrue); - iProgressDialog->SetCallback( this ); - iProgressDialog->PrepareLC( R_VEI_PROGRESS_NOTE_WITH_CANCEL ); - - HBufC* stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_SAVING_IMAGE, iEikonEnv ); - CleanupStack::PushL( stringholder ); - - iProgressDialog->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iProgressInfo = iProgressDialog->GetProgressInfoL(); - iProgressInfo->SetFinalValue( KProgressbarFinalValue ); - iProgressDialog->RunLD(); - - iProgressInfo->SetAndDraw( 50 ); - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::ShowProgressNoteL, Out"); - } - -TInt CVeiCutVideoContainer::DoAudioBarUpdate( TAny* aThis ) - { - STATIC_CAST( CVeiCutVideoContainer*, aThis )->DoUpdate(); - return 42; - } - -void CVeiCutVideoContainer::DoUpdate() - { - TTimeIntervalMicroSeconds time; - time = iVideoDisplay->PositionL(); - if ( iSeeking ) - { - time = iSeekPos; - LOGFMT(KVideoEditorLogFile, "CVeiCutVideoContainer::DoUpdate(): 1, time:%Ld", time.Int64()); - } - else - { - LOGFMT(KVideoEditorLogFile, "CVeiCutVideoContainer::DoUpdate(): 2, time:%Ld", time.Int64()); - } - iCutVideoBar->SetCurrentPoint( static_cast((time.Int64() / 1000))); - iCutVideoBar->DrawDeferred(); - } -void CVeiCutVideoContainer::MuteL() - { - iVideoDisplay->SetMuteL( ETrue ); - } - -//============================================================================= -void CVeiCutVideoContainer::HandleVolumeUpL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::HandleVolumeUpL: in"); - - iVideoDisplay->AdjustVolumeL( 1 ); - - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::HandleVolumeUpL: out"); - } - -//============================================================================= -void CVeiCutVideoContainer::HandleVolumeDownL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::HandleVolumeDownL: in"); - - iVideoDisplay->AdjustVolumeL( -1 ); - - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::HandleVolumeDownL: out"); - } - -//============================================================================= -void CVeiCutVideoContainer::PrepareForTerminationL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::PrepareForTerminationL: in"); - - SetStateL( EStateTerminating ); - - if( !iFrameReady && iVideoClipInfo ) - { - iVideoClipInfo->CancelFrame(); - } - iState = EStateTerminating; - iVideoDisplay->Stop( ETrue ); - - LOG(KVideoEditorLogFile, "CVeiCutVideoContainer::PrepareForTerminationL: out"); - } - - -TInt CVeiCutVideoContainer::AsyncTakeSnapshot(TAny* aThis) - { - LOG( KVideoEditorLogFile, "CVeiCutVideoContainer::AsyncTakeSnapshot"); - - // In the asynchronous version, trap the rest of the functions - // to make sure that the caller's TRequestStatus is always - // completed, also in case of failures. - CVeiCutVideoContainer* container = static_cast(aThis); - TInt err = KErrNone; - TRAP(err, container->TakeSnapshotL()); - LOGFMT( KVideoEditorLogFile, "CVeiCutVideoContainer::AsyncTakeSnapshot 1, err:%d", err); - User::LeaveIfError(err); - return KErrNone; - } -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiCutVideoView.cpp --- a/videditor/ManualVideoEditor/src/VeiCutVideoView.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1310 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "VeiAppUi.h" -#include "VeiCutVideoView.h" -#include "VeiCutVideoContainer.h" -#include "manualvideoeditor.hrh" -#include "veitempmaker.h" -#include "VeiTimeLabelNavi.h" -#include "VeiEditVideoView.h" -#include "VideoEditorCommon.h" -#include "VeiErrorUi.h" - -void CVeiCutVideoView::ConstructL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoView::ConstructL: in"); - - BaseConstructL( R_VEI_CUT_VIDEO_VIEW ); - - CEikStatusPane* sp = StatusPane(); - - iNaviPane = (CAknNavigationControlContainer*) sp->ControlL( - TUid::Uid(EEikStatusPaneUidNavi)); - - iTimeNavi = CreateTimeLabelNaviL(); - - iVolumeNavi = iNaviPane->CreateVolumeIndicatorL( - R_AVKON_NAVI_PANE_VOLUME_INDICATOR ); - - iErrorUI = CVeiErrorUI::NewL( *iCoeEnv ); - - iTimeUpdater = CPeriodic::NewL( CActive::EPriorityLow ); - iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow ); - - LOG(KVideoEditorLogFile, "CVeiCutVideoView::ConstructL: out"); - } - -// --------------------------------------------------------- -// CVeiCutVideoView::~CVeiCutVideoView() -// ?implementation_description -// --------------------------------------------------------- -// -CVeiCutVideoView::~CVeiCutVideoView() - { - if ( iProgressNote ) - { - delete iProgressNote; - iProgressNote = NULL; - } - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - delete iContainer; - iContainer = 0; - } - if ( iTempMovie ) - { - iTempMovie->Reset(); - delete iTempMovie; - iTempMovie = NULL; - } - if ( iTimeUpdater ) - { - iTimeUpdater->Cancel(); - delete iTimeUpdater; - } - if ( iVolumeHider ) - { - iVolumeHider->Cancel(); - delete iVolumeHider; - } - - if ( iErrorUI ) - { - delete iErrorUI; - } - - delete iVolumeNavi; - - delete iTimeNavi; - - delete iProcessedTempFile; - } - -TUid CVeiCutVideoView::Id() const - { - return TUid::Uid( EVeiCutVideoView ); - } - -void CVeiCutVideoView::DialogDismissedL( TInt aButtonId ) - { - if ( aButtonId != EAknSoftkeyDone ) - { - iTempMovie->CancelProcessing(); - } - else - { - if ( iErrorNmb == KErrNone ) - { - iContainer->SetInTime( iMovie->VideoClipCutInTime( iIndex ) ); - iContainer->SetOutTime( iMovie->VideoClipCutOutTime( iIndex ) ); - - iContainer->GetThumbL( *iProcessedTempFile ); - } - else - { - if ( iProcessedTempFile ) // delete temp - { - iEikonEnv->FsSession().Delete( *iProcessedTempFile ); - delete iProcessedTempFile; - iProcessedTempFile = NULL; - } - - iErrorUI->ShowGlobalErrorNote( iErrorNmb ); - iErrorNmb = 0; - HandleCommandL( EVeiCmdCutVideoViewBack ); - } - } - } - -void CVeiCutVideoView::DynInitMenuPaneL( TInt aResourceId,CEikMenuPane* aMenuPane ) - { - TInt state = iContainer->State(); - - if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU_CLEAR_MARKS) - { - // delete in, out, in & out as necessary. - - if (iMovie->VideoClipCutInTime(iIndex) <= TTimeIntervalMicroSeconds(0)) - { - aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksIn, ETrue); - } - if (iMovie->VideoClipCutOutTime(iIndex) >= iMovie->VideoClipInfo(iIndex)->Duration()) - { - aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksOut, ETrue); - } - - if (!((iMovie->VideoClipCutOutTime(iIndex) < iMovie->VideoClipInfo(iIndex)->Duration()) - && (iMovie->VideoClipCutInTime(iIndex) > TTimeIntervalMicroSeconds(0)))) - { - aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksInOut, ETrue); - } - } - - if ( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU ) - { - if ( iPopupMenuOpened != EFalse ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdCutVideoTakeSnapshot, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewHelp, ETrue ); - } - } - if ( !(( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU ) || - ( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU ) ) ) - return; - - if ( iContainer->PlaybackPositionL() >= iContainer->TotalLength() ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue ); - - } - if ( ( state == CVeiCutVideoContainer::EStatePaused ) || - ( state == CVeiCutVideoContainer::EStateInitializing ) ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue ); - } - - if ( ( state != CVeiCutVideoContainer::EStateStopped ) && - ( state != CVeiCutVideoContainer::EStateStoppedInitial ) && - ( state != CVeiCutVideoContainer::EStatePaused ) ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue ); - } - else - { - TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL(); - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iIndex ); - - TInt cutInFrameIndex = info->GetVideoFrameIndexL( iMovie->VideoClipCutInTime( iIndex )); - TInt cutOutFrameIndex = info->GetVideoFrameIndexL( iMovie->VideoClipCutOutTime( iIndex )); - TInt videoFrameCount = info->VideoFrameCount(); - - // if we are in the existing start/end mark position the start/end mark is removed from the menu - if (info->GetVideoFrameIndexL(pos) == cutInFrameIndex) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkIn ); - } - else if (info->GetVideoFrameIndexL(pos) == cutOutFrameIndex) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkOut ); - } - - if( cutInFrameIndex < (videoFrameCount-1 ) ) - { - cutInFrameIndex++; - } - - if( cutOutFrameIndex > 0 ) - { - cutOutFrameIndex--; - } - - TTimeIntervalMicroSeconds nextFramePosCutIn = info->VideoFrameStartTimeL( cutInFrameIndex ); - TTimeIntervalMicroSeconds previousFramePosCutOut = info->VideoFrameStartTimeL( cutOutFrameIndex ); - - if ( pos < nextFramePosCutIn ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkOut ); - } - else - { - if ( pos > previousFramePosCutOut ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkIn ); - } - } - // something crashes somewhere outside VED UI if end mark is put to near to begin - TInt ind = -1; - if (aMenuPane->MenuItemExists(EVeiCmdCutVideoViewMarkOut, ind) && pos.Int64() < KMinCutVideoLength) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkOut ); - } - } - if ( ( iMovie->VideoClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) && - iMovie->VideoClipCutOutTime( iIndex ) == iMovie->VideoClipInfo( iIndex )->Duration() ) ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewPlayMarked ); - } - if ( state != CVeiCutVideoContainer::EStatePlayingMenuOpen && - state != CVeiCutVideoContainer::EStatePaused ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewContinue ); - } - if ( ( state == CVeiCutVideoContainer::EStateStopped ) || - ( state == CVeiCutVideoContainer::EStateStoppedInitial ) || - ( state == CVeiCutVideoContainer::EStateOpening ) || - ( state == CVeiCutVideoContainer::EStateBuffering ) ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewStop ); - } - - if ( ( iMovie->VideoClipCutOutTime( iIndex ) >= iMovie->VideoClipInfo( iIndex )->Duration() ) && - ( iMovie->VideoClipCutInTime( iIndex ) <= TTimeIntervalMicroSeconds( 0 ) ) ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue ); - } - } - -void CVeiCutVideoView::HandleCommandL(TInt aCommand) - { - switch ( aCommand ) - { - case EAknSoftkeyOk: - { - iPopupMenuOpened = ETrue; - if (iContainer->State() == CVeiCutVideoContainer::EStatePlaying) - { - PausePreviewL(); - iContainer->SetStateL(CVeiCutVideoContainer::EStatePlayingMenuOpen); - } - - MenuBar()->TryDisplayMenuBarL(); - if (iContainer->State() == CVeiCutVideoContainer::EStatePlayingMenuOpen) - { - iContainer->SetStateL(CVeiCutVideoContainer::EStatePaused); - } - iPopupMenuOpened = EFalse; - break; - } - case EVeiCmdCutVideoViewDone: - case EVeiCmdCutVideoViewBack: - case EAknSoftkeyBack: - { - StopNaviPaneUpdateL(); - - iContainer->StopL(); - iContainer->CloseStreamL(); - - // Activate Edit Video view - AppUi()->ActivateLocalViewL( TUid::Uid(EVeiEditVideoView) ); - break; - } - - case EVeiCmdCutVideoViewMarkIn: - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( ETrue ); - MarkInL(); - break; - } - case EVeiCmdCutVideoViewMarkOut: - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( ETrue ); - MarkOutL(); - break; - } - case EVeiCmdCutVideoViewClearMarksInOut: - { - ClearInOutL( ETrue, ETrue ); - break; - } - case EVeiCmdCutVideoViewClearMarksIn: - { - ClearInOutL( ETrue, EFalse ); - break; - } - case EVeiCmdCutVideoViewClearMarksOut: - { - ClearInOutL( EFalse, ETrue ); - break; - } - case EVeiCmdCutVideoViewPlayMarked: - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( EFalse ); - PlayMarkedL(); - break; - } - case EVeiCmdCutVideoViewPlay: - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( EFalse ); - iNaviPane->PushL( *iTimeNavi ); - - PlayPreviewL(); - break; - } - case EVeiCmdCutVideoViewStop: - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( EFalse ); - iNaviPane->PushL( *iTimeNavi ); - StopNaviPaneUpdateL(); - iContainer->StopL(); - break; - } - case EVeiCmdCutVideoViewContinue: - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( EFalse ); - iNaviPane->PushL( *iTimeNavi ); - PlayPreviewL(); - break; - } - case EVeiCmdCutVideoTakeSnapshot: - { - if( IsEnoughFreeSpaceToSaveL() ) - { - iContainer->TakeSnapshotL(); - } - break; - } - // - // Options->Help - // - case EVeiCmdCutVideoViewHelp: - { - // CS Help launching is handled in Video Editor's AppUi. - AppUi()->HandleCommandL( EVeiCmdCutVideoViewHelp ); - break; - } - default: - { - AppUi()->HandleCommandL( aCommand ); - break; - } - } - } - -void CVeiCutVideoView::NotifyMovieProcessingStartedL( CVedMovie& /*aMovie*/ ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoView::NotifyMovieProcessingStartedL: In"); - iProgressNote = - new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**, - &iProgressNote), ETrue); - iProgressNote->SetCallback(this); - iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL ); - - HBufC* stringholder; - - stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_CUT, iEikonEnv ); - CleanupStack::PushL( stringholder ); - - iProgressNote->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iProgressInfo = iProgressNote->GetProgressInfoL(); - iProgressInfo->SetFinalValue(100); - LOG(KVideoEditorLogFile, "CVeiCutVideoView::NotifyMovieProcessingStartedL: Out"); - } - -void CVeiCutVideoView::NotifyMovieProcessingProgressed( CVedMovie& /*aMovie*/, TInt aPercentage ) - { - iProgressInfo->SetAndDraw( aPercentage ); - } - -void CVeiCutVideoView::NotifyMovieProcessingCompleted( CVedMovie& /*aMovie*/, TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeiCutVideoView::NotifyMovieProcessingCompleted: In, aError:%d", aError); - if ( iTempMovie ) //Effected clip is ready, Delete tempmovie - { - iTempMovie->Reset(); - delete iTempMovie; - iTempMovie = NULL; - } - - if ( aError == KErrCancel ) - { - HandleCommandL( EVeiCmdCutVideoViewBack ); - } - else - { - iProgressInfo->SetAndDraw(100); - iErrorNmb = aError; - iProgressNote->ProcessFinishedL(); - } - LOG(KVideoEditorLogFile, "CVeiCutVideoView::NotifyMovieProcessingCompleted: Out"); - } - -void CVeiCutVideoView::NotifyVideoClipAdded( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG(KVideoEditorLogFile, "CVeiCutVideoView::NotifyVideoClipAdded: In"); - - iTempMovie->UnregisterMovieObserver( this ); - iTempMovie->VideoClipSetColorEffect( 0, iMovie->VideoClipColorEffect( iIndex ) ); - iTempMovie->VideoClipSetColorTone( 0, iMovie->VideoClipColorTone( iIndex ) ); - iTempMovie->SetVideoClipVolumeGainL( 0, iMovie->GetVideoClipVolumeGainL( iIndex ) ); - - iProcessedTempFile = HBufC::NewL( KMaxFileName ); - - TRAPD( err, - CVeiTempMaker* maker = CVeiTempMaker::NewL(); - maker->GenerateTempFileName( *iProcessedTempFile, iMemoryInUse, iMovie->Format() ); - delete maker; - ); - - if ( err == KErrNone ) - { - TRAP( err, iTempMovie->ProcessL( *iProcessedTempFile, *this ) ); - } - - if ( err != KErrNone ) - { - iErrorUI->ShowGlobalErrorNote( err ); - - if ( iProcessedTempFile ) // delete temp - { - iEikonEnv->FsSession().Delete( *iProcessedTempFile ); - delete iProcessedTempFile; - iProcessedTempFile = NULL; - } - } - LOG(KVideoEditorLogFile, "CVeiCutVideoView::NotifyVideoClipAdded: Out"); - } - -void CVeiCutVideoView::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, TInt /*aError*/ ) - { - } - -void CVeiCutVideoView::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - -void CVeiCutVideoView::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, - TInt /*aNewIndex*/ ) - { - } - -void CVeiCutVideoView::NotifyVideoClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - -void CVeiCutVideoView::NotifyVideoClipColorEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - -void CVeiCutVideoView::NotifyVideoClipAudioSettingsChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiCutVideoView::NotifyStartTransitionEffectChanged( CVedMovie& /*aMovie*/ ) - { - } - -void CVeiCutVideoView::NotifyMiddleTransitionEffectChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiCutVideoView::NotifyEndTransitionEffectChanged( CVedMovie& /*aMovie*/ ) - { - } - -void CVeiCutVideoView::NotifyAudioClipAdded( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - -void CVeiCutVideoView::NotifyAudioClipAddingFailed( CVedMovie& /*aMovie*/, TInt /*aError*/ ) - { - } - -void CVeiCutVideoView::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - -void CVeiCutVideoView::NotifyAudioClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, - TInt /*aNewIndex*/ ) - { - } - -void CVeiCutVideoView::NotifyAudioClipTimingsChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiCutVideoView::NotifyMovieReseted( CVedMovie& /*aMovie*/ ) - { - } - -void CVeiCutVideoView::NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/, - TInt /*aIndex*/) - { - } - -void CVeiCutVideoView::NotifyVideoClipDescriptiveNameChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/) - { - } - -void CVeiCutVideoView::NotifyMovieQualityChanged(CVedMovie& /*aMovie*/) - { - } - -void CVeiCutVideoView::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/) - { - } - -void CVeiCutVideoView::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiCutVideoView::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiCutVideoView::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiCutVideoView::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiCutVideoView::DoActivateL( - const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/, - const TDesC8& /*aCustomMessage*/) - { - - if (!iContainer) - { - iContainer = CVeiCutVideoContainer::NewL( AppUi()->ClientRect(), *this, *iErrorUI ); - iContainer->SetMopParent( this ); - AppUi()->AddToStackL( *this, iContainer ); - } - - CEikStatusPane *statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); - - CAknTitlePane* titlePane = (CAknTitlePane*) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ); - TResourceReader reader1; - iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_CUTVIDEO_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader1 ); - CleanupStack::PopAndDestroy(); //reader1 - - UpdateCBAL( CVeiCutVideoContainer::EStateInitializing ); - iNaviPane->PushL( *iTimeNavi ); - - iAudioMuted = !( iMovie->VideoClipEditedHasAudio( iIndex ) ); - - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( EFalse ); - - if ( iAudioMuted ) - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())-> - SetVolumeIconVisibilityL( EFalse ); - VolumeMuteL(); - } - else - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())-> - SetVolumeIconVisibilityL( ETrue ); - } - iErrorNmb = 0; - - iContainer->SetInTime( iMovie->VideoClipCutInTime( iIndex ) ); - iContainer->SetOutTime( iMovie->VideoClipCutOutTime( iIndex ) ); - - CVedVideoClipInfo* clipinfo = iMovie->VideoClipInfo( iIndex ); - -/** -* First try to open video clip in videoplayerutility. If it leaves with error code -* KErrNotSupported(-5), then GenerateEffectedClipL() is called. -*/ if (EVedColorEffectBlackAndWhite == iMovie->VideoClipColorEffect( iIndex ) || - EVedColorEffectToning == iMovie->VideoClipColorEffect( iIndex )) - { - GenerateEffectedClipL(); - } - else if (iMovie->VideoClipInfo(iIndex)->HasAudio() && iMovie->GetVideoClipVolumeGainL(iIndex)) - { - GenerateEffectedClipL(); - } - else - { - iContainer->GetThumbL( clipinfo->FileName() ); - } - } - -void CVeiCutVideoView::GenerateEffectedClipL() - { - TEntry fileinfo; -// check if there is enough space to create temp file - RFs& fs = iEikonEnv->FsSession(); - - CVedVideoClipInfo* videoclipinfo = iMovie->VideoClipInfo( iIndex ); - - fs.Entry( videoclipinfo->FileName(), fileinfo ); - - TBool spaceBelowCriticalLevel( EFalse ); - - TVeiSettings movieSaveSettings; - - - STATIC_CAST( CVeiAppUi*, iEikonEnv->AppUi() )->ReadSettingsL( movieSaveSettings ); - - CAknMemorySelectionDialog::TMemory memoryInUse( movieSaveSettings.MemoryInUse() ); - - - if ( memoryInUse == CAknMemorySelectionDialog::EPhoneMemory ) - { - spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( - &fs, fileinfo.iSize, EDriveC ); - } - else - { - spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( - &fs, fileinfo.iSize ); - } - - if ( !spaceBelowCriticalLevel ) - { - iTempMovie = CVedMovie::NewL( NULL ); - iTempMovie->RegisterMovieObserverL( this ); - CVedVideoClipInfo* clipinfo = iMovie->VideoClipInfo( iIndex ); - iTempMovie->InsertVideoClipL( clipinfo->FileName(), 0 ); - } - else - { - HBufC* stringholder; - - stringholder = StringLoader::LoadLC( R_VEI_NOT_ENOUGH_SPACE, iEikonEnv ); - - CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue ); - dlg->ExecuteLD( *stringholder ); - - CleanupStack::PopAndDestroy( stringholder); - - HandleCommandL( EVeiCmdCutVideoViewBack ); - } - - } - -// --------------------------------------------------------- -// CVeiCutVideoView::HandleCommandL(TInt aCommand) -// ?implementation_description -// --------------------------------------------------------- -// -void CVeiCutVideoView::DoDeactivate() - { - iNaviPane->Pop( iVolumeNavi ); - - if ( iTimeUpdater ) - { - iTimeUpdater->Cancel(); - } - if ( iVolumeHider ) - { - iVolumeHider->Cancel(); - } - if ( iContainer ) - { - iNaviPane->Pop( iTimeNavi ); - AppUi()->RemoveFromViewStack( *this, iContainer ); - - delete iContainer; - iContainer = NULL; - } - - if ( iProcessedTempFile ) - { - iEikonEnv->FsSession().Delete( *iProcessedTempFile ); - delete iProcessedTempFile; - iProcessedTempFile = NULL; - } - - } - -void CVeiCutVideoView::SetVideoClipAndIndex( CVedMovie& aVideoClip, TInt aIndex ) - { - iMovie = &aVideoClip; - iIndex = aIndex; - } - -void CVeiCutVideoView::PlayPreviewL() - { - StartNaviPaneUpdateL(); - iContainer->PlayL( iMovie->VideoClipInfo( iIndex )->FileName() ); - } - -void CVeiCutVideoView::PausePreviewL() - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl() )-> - SetPauseIconVisibilityL( ETrue ); - StopNaviPaneUpdateL(); - - iContainer->PauseL(); - } - -void CVeiCutVideoView::UpdateCBAL(TInt aState) - { - switch (aState) - { - case CVeiCutVideoContainer::EStateInitializing: - case CVeiCutVideoContainer::EStateOpening: - case CVeiCutVideoContainer::EStateBuffering: - { - Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY); - break; - } - case CVeiCutVideoContainer::EStateStoppedInitial: - { - if ( ( iMovie->VideoClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) ) && - ( iMovie->VideoClipCutOutTime( iIndex ) == iMovie->VideoClipInfo(iIndex)->Duration() ) ) - { - Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK); - } - else - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_DONE); - } - break; - } - case CVeiCutVideoContainer::EStatePaused: - case CVeiCutVideoContainer::EStateStopped: - { - if ( ( iMovie->VideoClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) ) && - ( iMovie->VideoClipCutOutTime( iIndex ) == iMovie->VideoClipInfo(iIndex)->Duration() ) ) - { - Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK); - } - else - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_DONE); - } - break; - } - case CVeiCutVideoContainer::EStatePlaying: - { - if ( iContainer->PlaybackPositionL() < iMovie->VideoClipCutInTime( iIndex ) ) - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_EMPTY ); - iMarkState = EMarkStateIn; - } - else if ( iContainer->PlaybackPositionL() < iMovie->VideoClipCutOutTime( iIndex ) ) - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_OUT ); - iMarkState = EMarkStateInOut; - } - else - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_EMPTY_OUT ); - iMarkState = EMarkStateOut; - } - break; - } - default: - { - break; - } - } - Cba()->DrawDeferred(); - } - -void CVeiCutVideoView::PlayMarkedL() - { - LOGFMT3(KVideoEditorLogFile, "CVeiCutVideoView::PlayMarkedL: In: iIndex:%d, iMovie->VideoClipCutInTime():%Ld, iMovie->VideoClipCutOutTime():%Ld", iIndex, iMovie->VideoClipCutInTime( iIndex ).Int64(), iMovie->VideoClipCutOutTime( iIndex ).Int64()); - - StartNaviPaneUpdateL(); - iContainer->PlayMarkedL( iMovie->VideoClipInfo( iIndex )->FileName(), - iMovie->VideoClipCutInTime( iIndex ), iMovie->VideoClipCutOutTime( iIndex ) ); - - LOG(KVideoEditorLogFile, "CVeiCutVideoView::PlayMarkedL: Out"); - } - -void CVeiCutVideoView::ClearInOutL( TBool aClearIn, TBool aClearOut ) - { - if ( aClearIn ) - { - iMovie->VideoClipSetCutInTime( iIndex, TTimeIntervalMicroSeconds( 0 ) ); - iContainer->SetInTime( iMovie->VideoClipCutInTime( iIndex ) ); - } - if ( aClearOut ) - { - iMovie->VideoClipSetCutOutTime( iIndex, iMovie->VideoClipInfo( iIndex )->Duration() ); - iContainer->SetOutTime( iMovie->VideoClipInfo( iIndex )->Duration() ); - } - TTimeIntervalMicroSeconds cutin = iMovie->VideoClipCutInTime( iIndex ); - TTimeIntervalMicroSeconds cutout = iMovie->VideoClipCutOutTime( iIndex ); - - if ( ( cutin == TTimeIntervalMicroSeconds( 0 ) ) && - ( cutout == iMovie->VideoClipInfo(iIndex)->Duration() ) ) - { - Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK); - Cba()->DrawDeferred(); - } - } - -void CVeiCutVideoView::MarkInL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoView::MarkInL, In"); - TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL(); - -// TTimeIntervalMicroSeconds clipDuration = iMovie->VideoClipInfo( iIndex )->Duration(); -// CVedVideoClipInfo* info = iMovie->VideoClipInfo( iIndex ); -// TTimeIntervalMicroSeconds intraPos = info->VideoFrameStartTimeL( -// info->GetVideoFrameIndexL( pos ) ); - - if (iMovie->VideoClipCutOutTime(iIndex) > pos) - { - StopNaviPaneUpdateL(); - LOGFMT2(KVideoEditorLogFile, "CVeiCutVideoView::MarkInL, 2, iIndex:%d, pos:%Ld", iIndex, pos.Int64()); - iMovie->VideoClipSetCutInTime( iIndex, pos ); - iContainer->MarkedInL(); - } - - LOG(KVideoEditorLogFile, "CVeiCutVideoView::MarkInL, Out"); - } - -void CVeiCutVideoView::MarkOutL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoView::MarkOutL, In"); - TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL(); -// CVedVideoClipInfo* info = iMovie->VideoClipInfo( iIndex ); -// TTimeIntervalMicroSeconds intraPos = info->VideoFrameStartTimeL( -// info->GetVideoFrameIndexL( pos ) ); - - if (iMovie->VideoClipCutInTime(iIndex) < pos) - { - StopNaviPaneUpdateL(); - iMovie->VideoClipSetCutOutTime( iIndex, pos ); - LOGFMT2(KVideoEditorLogFile, "CVeiCutVideoView::MarkOutL, 2, iIndex:%d, pos:%Ld", iIndex, pos.Int64() ); - iContainer->MarkedOutL(); - } - LOG(KVideoEditorLogFile, "CVeiCutVideoView::MarkOutL, Out"); - } - -void CVeiCutVideoView::MoveStartOrEndMarkL( TTimeIntervalMicroSeconds aPosition, CVeiCutVideoContainer::TCutMark aMarkType ) - { - LOG( KVideoEditorLogFile, "CVeiCutVideoView::MoveStartOrEndMarkL, In" ); - - StopNaviPaneUpdateL(); - - LOG( KVideoEditorLogFile, "CVeiCutVideoView::MoveStartOrEndMarkL, 2" ); - - if ( aMarkType == CVeiCutVideoContainer::EStartMark ) - { - iMovie->VideoClipSetCutInTime( iIndex, aPosition ); - } - else if ( aMarkType == CVeiCutVideoContainer::EEndMark ) - { - iMovie->VideoClipSetCutOutTime( iIndex, aPosition ); - } - LOG( KVideoEditorLogFile, "CVeiCutVideoView::MoveStartOrEndMarkL, Out" ); - } - - -TUint CVeiCutVideoView::InPointTime() - { - if ( !iMovie ) - { - return 0; - } - else - { - return static_cast((iMovie->VideoClipCutInTime(iIndex).Int64() / 1000)); - } - } - -TUint CVeiCutVideoView::OutPointTime() - { - if ( !iMovie ) - { - return 0; - } - else - { - return static_cast(iMovie->VideoClipCutOutTime(iIndex).Int64() / 1000); - } - } - -CAknNavigationDecorator* CVeiCutVideoView::CreateTimeLabelNaviL() - { - LOG(KVideoEditorLogFile, "CVeiCutVideoView::CreateTimeLabelNaviL: in"); - CVeiTimeLabelNavi* timelabelnavi = CVeiTimeLabelNavi::NewLC(); - CAknNavigationDecorator* decoratedFolder = - CAknNavigationDecorator::NewL(iNaviPane, timelabelnavi, CAknNavigationDecorator::ENotSpecified); - CleanupStack::Pop(timelabelnavi); - - CleanupStack::PushL(decoratedFolder); - decoratedFolder->SetContainerWindowL(*iNaviPane); - CleanupStack::Pop(decoratedFolder); - decoratedFolder->MakeScrollButtonVisible(EFalse); - LOG(KVideoEditorLogFile, "CVeiCutVideoView::CreateTimeLabelNaviL: out"); - return decoratedFolder; - } - -TInt CVeiCutVideoView::UpdateTimeCallbackL(TAny* aPtr) - { - CVeiCutVideoView* view = (CVeiCutVideoView*)aPtr; - - view->UpdateTimeL(); - - return 1; - } - - -void CVeiCutVideoView::UpdateTimeL() - { - DrawTimeNaviL(); - - if (iMarkState == EMarkStateIn) - { - if (iContainer->PlaybackPositionL() > iMovie->VideoClipCutInTime( iIndex )) - { - UpdateCBAL(iContainer->State()); - } - } - else if (iMarkState == EMarkStateOut) - { - if (iContainer->PlaybackPositionL() < iMovie->VideoClipCutOutTime( iIndex )) - { - UpdateCBAL(iContainer->State()); - } - } - else - { - if ((iContainer->PlaybackPositionL() < iMovie->VideoClipCutInTime( iIndex )) || - (iContainer->PlaybackPositionL() > iMovie->VideoClipCutOutTime( iIndex ))) - { - UpdateCBAL(iContainer->State()); - } - } - } - -void CVeiCutVideoView::DrawTimeNaviL() - { - TTime elapsed( iContainer->PlaybackPositionL().Int64() ); - TTime total( iContainer->TotalLength().Int64() ); - - TBuf<16> elapsedBuf; - TBuf<16> totalBuf; - - HBufC* dateFormatString; - HBufC* stringholder; - - if ( ( total.Int64() / 1000 ) < 3600000 ) // check if time is over 99:59 - { - dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_MIN_SEC ); - - elapsed.FormatL(elapsedBuf, *dateFormatString); - total.FormatL(totalBuf, *dateFormatString); - CleanupStack::PopAndDestroy(dateFormatString); - - CDesCArrayFlat* strings = new (ELeave) CDesCArrayFlat(2); - CleanupStack::PushL(strings); - strings->AppendL(elapsedBuf); - strings->AppendL(totalBuf); - stringholder = StringLoader::LoadL(R_VEI_NAVI_TIME, *strings, iEikonEnv); - CleanupStack::PopAndDestroy(strings); - - - CleanupStack::PushL(stringholder); - - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLabelL(stringholder->Des()); - - CleanupStack::PopAndDestroy(stringholder); - } - else - { - TBuf<25> layoutTime; - TBuf<15> minsec; - TTimeIntervalMinutes minutes; - TTimeIntervalMicroSeconds32 seconds; - - TInt64 duration = ( iContainer->PlaybackPositionL().Int64() / 1000 ); - TChar timeSeparator = TLocale().TimeSeparator(2); - //over 1 minute - if( duration >= 60000 ) - { - minutes = TTimeIntervalMinutes(static_cast( duration) / 60000 ); - minsec.AppendNum( minutes.Int() ); - minsec.Append( timeSeparator ); - - duration = duration - minutes.Int() * 60000; - } - else - { - minsec.Append( _L( "00" ) ); - minsec.Append( timeSeparator ); - } - if( duration >= 1000 ) - { - seconds = TTimeIntervalMicroSeconds32( static_cast(duration) / 1000 ); - - if( seconds.Int() >= 60 ) - { - minsec.AppendNum( seconds.Int() - 60 ); - } - else - { - if ( seconds.Int() < 10 ) - { - minsec.Append( _L("0") ); - } - minsec.AppendNum( seconds.Int() ); - } - } - else - { - minsec.Append( _L("00") ); - } - layoutTime.Append( minsec ); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( layoutTime ); - - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLabelL(layoutTime); - } - - - /* Prevent the screen light dimming. */ - if (elapsed.DateTime().Second() == 0 || elapsed.DateTime().Second() == 15 || elapsed.DateTime().Second() == 30 || elapsed.DateTime().Second() == 45) - { - User::ResetInactivityTime(); - } - } - - -void CVeiCutVideoView::StartNaviPaneUpdateL() - { - DrawTimeNaviL(); - if (iTimeUpdater && !iTimeUpdater->IsActive()) - { - iTimeUpdater->Start(200000, 1000000/10, TCallBack(CVeiCutVideoView::UpdateTimeCallbackL, this)); - } - } - -void CVeiCutVideoView::StopNaviPaneUpdateL() - { - if (iContainer) - { - DrawTimeNaviL(); - } - if (iTimeUpdater && iTimeUpdater->IsActive()) - { - iTimeUpdater->Cancel(); - } - } - -TInt CVeiCutVideoView::HideVolumeCallbackL(TAny* aPtr) - { - CVeiCutVideoView* view = (CVeiCutVideoView*)aPtr; - view->HideVolume(); - return 0; - } - -void CVeiCutVideoView::HideVolume() - { - iNaviPane->Pop(iVolumeNavi); - } - -void CVeiCutVideoView::VolumeMuteL() - { - iContainer->MuteL(); - } - - - -void CVeiCutVideoView::ShowVolumeLabelL( TInt aVolume ) - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())-> - SetVolumeIconVisibilityL( ETrue ); - - if (iVolumeHider->IsActive()) - { - iVolumeHider->Cancel(); - } - if (aVolume == 0) - { - STATIC_CAST( CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())-> - SetVolumeIconVisibilityL( EFalse ); - HideVolume(); - return; - } - - iNaviPane->PushL(*iVolumeNavi); - iVolumeHider->Start(1000000, 1000000, TCallBack(CVeiCutVideoView::HideVolumeCallbackL, this)); - - STATIC_CAST(CAknVolumeControl*, iVolumeNavi->DecoratedControl())->SetValue(aVolume); - - if (aVolume > iContainer->MinVolume() + 1 ) - { - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(ETrue); - } - else - { - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetLeftArrowVisibilityL(EFalse); - } - - if (aVolume < iContainer->MaxVolume()) - { - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(ETrue); - } - else - { - STATIC_CAST(CVeiTimeLabelNavi*, iTimeNavi->DecoratedControl())->SetRightArrowVisibilityL(EFalse); - } - - } - -void CVeiCutVideoView::HandleForegroundEventL ( TBool aForeground ) - { - if ( !aForeground ) - { - // If the application is closing down, calling PauseL could result in - // a callback from the MMF player after the container is already deleted, - // causing KERN-EXEC 3 - if ( static_cast( AppUi() )->AppIsOnTheWayToDestruction() ) - { - iContainer->PrepareForTerminationL(); - } - else - { - iContainer->PauseL( EFalse ); - } - iNaviPane->Pop( iTimeNavi ); - } - else - { - UpdateCBAL( iContainer->State() ); - iNaviPane->PushL( *iTimeNavi ); - } - } - -// --------------------------------------------------------- -// CVeiCutVideoView::HandleStatusPaneSizeChange() -// --------------------------------------------------------- -// -void CVeiCutVideoView::HandleStatusPaneSizeChange() - { - if ( iContainer ) - { - iContainer->SetRect( AppUi()->ClientRect() ); - } - } - -TBool CVeiCutVideoView::IsEnoughFreeSpaceToSaveL()// const - { - - STATIC_CAST( CVeiAppUi*, AppUi() )->ReadSettingsL( iMovieSaveSettings ); - iMemoryInUse = iMovieSaveSettings.MemoryInUse(); - - RFs& fs = iEikonEnv->FsSession(); - TBool spaceBelowCriticalLevel( EFalse ); - - /* seek position of clip */ - TTimeIntervalMicroSeconds frame; - frame = iContainer->PlaybackPositionL(); - - /* frame index of position */ - TInt frameIndex; - frameIndex = iMovie->VideoClipInfo( iIndex )->GetVideoFrameIndexL( frame ); - - /* frame size */ - TInt sizeEstimate; - sizeEstimate = iMovie->VideoClipInfo( iIndex )->VideoFrameSizeL( frameIndex ); - - if ( iMemoryInUse == CAknMemorySelectionDialog::EPhoneMemory ) - { - spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( &fs, sizeEstimate, EDriveC ); - } - else - { - spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( &fs, sizeEstimate ); - } - - - if ( !spaceBelowCriticalLevel ) - { - return ETrue; - } - else - { - HBufC* stringholder; - stringholder = StringLoader::LoadLC( R_VEI_MEMORY_RUNNING_OUT, iEikonEnv ); - CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue ); - dlg->ExecuteLD( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - return EFalse; - } - } - -TTimeIntervalMicroSeconds CVeiCutVideoView::GetVideoClipCutInTime() - { - TTimeIntervalMicroSeconds cutInTime(0); - if ( iMovie ) - { - cutInTime = iMovie->VideoClipCutInTime( iIndex ); - } - return cutInTime; - } - -TTimeIntervalMicroSeconds CVeiCutVideoView::GetVideoClipCutOutTime() - { - TTimeIntervalMicroSeconds cutOutTime(0); - if ( iMovie ) - { - cutOutTime = iMovie->VideoClipCutOutTime( iIndex ); - } - return cutOutTime; - } - -void CVeiCutVideoView::HandleResourceChange(TInt aType) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoView::HandleResourceChange() In, aType:%d", aType); - - if (KAknsMessageSkinChange == aType) - { - // Handle skin change in the navi label controls - they do not receive - // it automatically since they are not in the control stack - iTimeNavi->DecoratedControl()->HandleResourceChange( aType ); - iVolumeNavi->DecoratedControl()->HandleResourceChange( aType ); - } - - LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleResourceChange() Out"); - } - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiDocument.cpp --- a/videditor/ManualVideoEditor/src/VeiDocument.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES -#include "VeiDocument.h" -#include "VeiAppUi.h" -#include "videoeditorcommon.h" -#include - -// ================= MEMBER FUNCTIONS ======================= - -// constructor -CVeiDocument::CVeiDocument(CEikApplication& aApp) -: CAiwGenericParamConsumer(aApp) - { - } - -// destructor -CVeiDocument::~CVeiDocument() - { - } - -// Default constructor can leave. -void CVeiDocument::ConstructL() - { - } - -// Two-phased constructor. -CVeiDocument* CVeiDocument::NewL( - CEikApplication& aApp) // CVeiApp reference - { - CVeiDocument* self = new (ELeave) CVeiDocument( aApp ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - -// ---------------------------------------------------- -// CVeiDocument::OpenFileL -// -// ---------------------------------------------------- -// -void CVeiDocument::OpenFileL(CFileStore*& /*aFileStore*/, RFile& aFile) - { - LOG(KVideoEditorLogFile, "CVeiDocument::OpenFileL: In"); - - // File handle is not used, but close it because Open File Service - // duplicates the handle and may not close it. - aFile.Close(); - - // Get the input files - CCoeEnv* coeEnv = CCoeEnv::Static(); - const CAiwGenericParamList* inParamList = NULL; - inParamList = GetInputParameters(); - const TAiwGenericParam* param = NULL; - TInt index(0); - if (inParamList && inParamList->Count() > 0) - { - LOGFMT(KVideoEditorLogFile, "\tAIW parameter count: %d", inParamList->Count()); - - param = inParamList->FindFirst( index,EGenericParamFile ); - - while( index != KErrNotFound ) - { - TFileName filename = param->Value().AsDes(); - LOGFMT(KVideoEditorLogFile, "\tInserting video clip to movie: %S", &filename); - STATIC_CAST( CVeiAppUi*, coeEnv->AppUi() )->InsertVideoClipToMovieL( - EFalse, filename ); - - param = inParamList->FindNext( index, EGenericParamFile ); - } - } - - TFileName filee; - filee.Append( _L("eeee")); - STATIC_CAST( CVeiAppUi*, coeEnv->AppUi() )->InsertVideoClipToMovieL( - ETrue, filee); - - LOG(KVideoEditorLogFile, "CVeiDocument::OpenFileL: Out"); - } - -// ---------------------------------------------------- -// CVeiDocument::CreateAppUiL() -// constructs CVeiAppUi -// ---------------------------------------------------- -// -CEikAppUi* CVeiDocument::CreateAppUiL() - { - return new (ELeave) CVeiAppUi; - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiEditVideoContainer.cpp --- a/videditor/ManualVideoEditor/src/VeiEditVideoContainer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5936 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "VeiEditVideoContainer.h" -#include "VeiVideoDisplay.h" -#include "VeiTextDisplay.h" -#include "VeiCutterBar.h" -#include "veiappui.h" -#include "veiframetaker.h" -#include "VeiIconBox.h" -#include "VideoEditorCommon.h" -#include "VideoEditorUtils.h" -#include "VideoEditorHelp.hlp.hrh" // Topic contexts (literals) -#include "VeiEditVideoView.h" -#include "ManualVideoEditor.hrh" -#include "VeiSlider.h" -#include "StoryboardItems.h" -#include "TransitionInfo.h" - - -// ================= MEMBER FUNCTIONS ======================= -void CleanupRArray( TAny* object ) - { - (( RImageTypeDescriptionArray*)object)->ResetAndDestroy(); - } - -CVeiEditVideoContainer* CVeiEditVideoContainer::NewL( const TRect& aRect, - CVedMovie& aMovie, CVeiEditVideoView& aView ) - { - CVeiEditVideoContainer* self = CVeiEditVideoContainer::NewLC( aRect, - aMovie, aView ); - CleanupStack::Pop( self ); - return self; - } - -CVeiEditVideoContainer* CVeiEditVideoContainer::NewLC( const TRect& aRect, - CVedMovie& aMovie, CVeiEditVideoView& aView ) - { - CVeiEditVideoContainer* self = new (ELeave) CVeiEditVideoContainer( aMovie, aView ); - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - return self; - } - -// --------------------------------------------------------- -// CVeiEditVideoContainer::ConstructL(const TRect& aRect) -// EPOC two phased constructor -// --------------------------------------------------------- -// -void CVeiEditVideoContainer::ConstructL( const TRect& aRect ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConstructL in"); - - CreateWindowL(); - - iMovie.RegisterMovieObserverL( this ); - - iConverter = CVeiImageConverter::NewL( this ); - - TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KManualVideoEditorIconFileId) ); - TFileName mbmPath2( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) ); - TFileName mbmPath3( VideoEditorUtils::IconFileNameAndPath(KVeiNonScalableIconFileId) ); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConstructL Loading bitmaps.."); - - // No thumbnail icon (shown when video thumb nail cannot be generated) - AknIconUtils::CreateIconL( iNoThumbnailIcon, iNoThumbnailIconMask, - mbmPath2, EMbmVideoeditoruicomponentsQgn_graf_ve_novideo, - EMbmVideoeditoruicomponentsQgn_graf_ve_novideo_mask ); - - iAudioIcon = AknIconUtils::CreateIconL( mbmPath, - EMbmManualvideoeditorQgn_graf_ve_symbol_audio ); - - // Video timeline icon - - AknIconUtils::CreateIconL( iVideoTrackIcon, iVideoTrackIconMask, - mbmPath, EMbmManualvideoeditorQgn_prop_ve_file_video, - EMbmManualvideoeditorQgn_prop_ve_file_video_mask ); - - // Audio timeline icon - - AknIconUtils::CreateIconL( iAudioTrackIcon, iAudioTrackIconMask, - mbmPath, EMbmManualvideoeditorQgn_prop_ve_file_audio, - EMbmManualvideoeditorQgn_prop_ve_file_audio_mask ); - - // Audio mixing icon - iAudioMixingIcon = AknIconUtils::CreateIconL( mbmPath3, - EMbmVideoeditorbitmapsMix_audio_background ); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConstructL Bitmaps OK!"); - - iTransitionInfo = CTransitionInfo::NewL(); - - iZoomTimer = CPeriodic::NewL( CActive::EPriorityLow ); - - iVideoDisplayBox = TRect(0,0,100,100); - - iVideoDisplay = CVeiVideoDisplay::NewL( iVideoDisplayBox, this, *this ); - -/* Video Display components for transitioin state*/ - iTransitionDisplayRight = CVeiVideoDisplay::NewL( iVideoDisplayBox, this, *this ); - iTransitionDisplayLeft = CVeiVideoDisplay::NewL( iVideoDisplayBox, this, *this ); - - iDummyCutBar = CVeiCutterBar::NewL( this, ETrue ); - iDummyCutBarLeft = CVeiCutterBar::NewL( this, ETrue ); - -/* IconBox */ - iEffectSymbolBox = TRect(0,0,10,10); - iEffectSymbols = CVeiIconBox::NewL( iEffectSymbolBox, this ); - - iInfoDisplay = CVeiTextDisplay::NewL( iVideoDisplayBox, this ); - iInfoDisplay->SetMopParent( this ); - iArrowsDisplay = CVeiTextDisplay::NewL( iVideoDisplayBox, this ); - - SetRect( aRect ); - iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse ); - - iFrameTaker = CVeiFrameTaker::NewL( *this ); - - iGradientBitmap = new(ELeave)CFbsBitmap; - TRgb startColor = TRgb( 0x7a, 0xbe, 0xe7); - TRgb endColor = TRgb( 0x00, 0x3e, 0x80 ); - TInt breadth = 30; - ColorUtils::TBitmapOrientation bitmapOrientation = ColorUtils::EBitmapOrientationHorizontal; - ColorUtils::CreateGradientBitmapL( *iGradientBitmap, iEikonEnv->WsSession(), breadth, - bitmapOrientation, startColor, endColor ); - LOG(KVideoEditorLogFile, "Gradient bitmap created.."); - SetCursorLocation( ECursorOnEmptyVideoTrack ); - -/* Timer to keep back light on when user is not giving key events */ - iScreenLight = CVeiDisplayLighter::NewL(); - - iCurrentPoint = 0; -/* Timer. Draws playhead */ - iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard ); - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - SetPreviewState(EStateInitializing); - - iBlackScreen = EFalse; - - CreateScrollBarL(aRect); - - AknIconUtils::CreateIconL( iPauseBitmap, iPauseBitmapMask, - mbmPath2, EMbmVideoeditoruicomponentsQgn_prop_ve_pause, - EMbmVideoeditoruicomponentsQgn_prop_ve_pause_mask ); - - EnableDragEvents(); - - ActivateL(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConstructL: out"); - } - -//=========================================================================== -void CVeiEditVideoContainer::CreateScrollBarL(const TRect& aRect) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::CreateScrollBarL: in"); - // create vertical slider control in the middle of the - // screen in vertical direction and 10 pixels from the - // right side of the screen - - iVerticalSlider = CVeiVerticalSlider::NewL(aRect, *this); - iVerticalSlider->SetMinimum( KVolumeSliderMin ); - iVerticalSlider->SetMaximum( KVolumeSliderMax ); - iVerticalSlider->SetStep( KVolumeSliderStep ); - - iVerticalSlider->SetPosition(0); - - iHorizontalSlider = CVeiHorizontalSlider::NewL(aRect, *this); - iHorizontalSlider->SetMinimum(-10); - iHorizontalSlider->SetMaximum(10); - iHorizontalSlider->SetStep(1); - - iHorizontalSlider->SetPosition(0); - - iVerticalSlider->MakeVisible(EFalse); - iHorizontalSlider->MakeVisible(EFalse); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::CreateScrollBarL: out"); - } - -//=========================================================================== -CVeiEditVideoContainer::CVeiEditVideoContainer( CVedMovie& aMovie, CVeiEditVideoView& aView ) - :iView( aView ), iMovie( aMovie ) - { - iCurrentlyProcessedIndex = -1; - iSelectionMode = EModeNavigation; - iVideoCursorPos = 0; - iAudioCursorPos = 0; - - iCursorLocation = ECursorOnEmptyVideoTrack; - iPrevCursorLocation = ECursorOnClip; - iTakeSnapshot = EFalse; - iSeeking = EFalse; - iCloseStream = EFalse; - iBackKeyPressed = EFalse; - /* Flag to make sure that engine has finished frame before trying to get next one. */ - iFrameReady = ETrue; - } - - -CVeiEditVideoContainer::~CVeiEditVideoContainer() - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::~CVeiEditVideoContainer(): In"); - if ( iMovie.MovieObserverIsRegistered( this ) ) - { - iMovie.UnregisterMovieObserver( this ); - } - - if ( iTempVideoInfo ) - { - iTempVideoInfo->CancelFrame(); - delete iTempVideoInfo; - iTempVideoInfo = NULL; - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::~CVeiEditVideoContainer(): iTempVideoInfo delete OK.."); - } - - if ( iConverter ) - { - iConverter->CancelEncoding(); - delete iConverter; - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::~CVeiEditVideoContainer(): iConverter delete OK.."); - } - - delete iTransitionInfo; - delete iScreenLight; - delete iVideoTrackIcon; - delete iVideoTrackIconMask; - delete iAudioTrackIcon; - delete iAudioTrackIconMask; - delete iAudioIcon; - delete iAudioMixingIcon; - delete iNoThumbnailIcon; - delete iNoThumbnailIconMask; - delete iGradientBitmap; - delete iBgContext; - delete iVideoDisplay; - delete iTransitionDisplayRight; - delete iTransitionDisplayLeft; - delete iDummyCutBar; - delete iDummyCutBarLeft; - delete iEffectSymbols; - delete iInfoDisplay; - delete iArrowsDisplay; - delete iFrameTaker; - delete iRemConTarget; - - if ( iZoomTimer ) - { - iZoomTimer->Cancel(); - delete iZoomTimer; - } - iVideoItemArray.ResetAndDestroy(); - iAudioItemArray.ResetAndDestroy(); - iVideoItemRectArray.Close(); - - if ( iPeriodic ) - { - iPeriodic->Cancel(); - delete iPeriodic; - } - - if ( iTempFileName ) - { - delete iTempFileName; - iTempFileName = NULL; - } - if ( iSaveToFileName ) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - - delete iHorizontalSlider; - delete iVerticalSlider; - - delete iPauseBitmap; - delete iPauseBitmapMask; - - delete iCallBack; - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::~CVeiEditVideoContainer(): Out"); - } - -// --------------------------------------------------------- -// CVeiEditVideoContainer::SizeChanged() -// Called by framework when the view size is changed -// --------------------------------------------------------- -// -void CVeiEditVideoContainer::SizeChanged() - { - LOGFMT2(KVideoEditorLogFile, "CVeiEditVideoContainer SizeChanged: In: (%d,%d)", Size().iWidth, Size().iHeight); - - TRect rect = Rect(); - - if ( iBgContext ) - iBgContext->SetRect( rect ); - - TInt audioTrackBoxTlX = -1; - TInt audioTrackBoxSizeWidth = -1; - TInt videoScreenSizeWidth = -1; - TInt videoScreenSizeHeight = -1; - TInt effectSymbolBoxTlXPortrait = -1; - TInt videoScreenXPortrait = -1; - TInt videoScreenYPortrait = -1; - TInt infoDisplayBoxSizeHeight = -1; - TInt thumbnailStartPaneBoxTlY = -1; - TInt thumbnailStartPaneBoxSizeWidth = -1; - TInt thumbnailStartPaneBoxSizeHeight = -1; - TInt thumbnailEndPaneBoxTlY = -1; - TInt sliderThickness = -1; - - switch( rect.iBr.iX ) - { - case 240: - case 320: - audioTrackBoxTlX = 25; - audioTrackBoxSizeWidth = 204; - videoScreenSizeWidth = 156; - videoScreenSizeHeight = 128; - effectSymbolBoxTlXPortrait = 23; - videoScreenXPortrait = 47; - videoScreenYPortrait = 2; - infoDisplayBoxSizeHeight = 24; - thumbnailStartPaneBoxTlY = 12; - thumbnailStartPaneBoxSizeWidth = 78; - thumbnailStartPaneBoxSizeHeight = 64; - thumbnailEndPaneBoxTlY = 12; - sliderThickness = 12; - break; - case 176: - case 208: - audioTrackBoxTlX = 19; - audioTrackBoxSizeWidth = rect.iBr.iX-25;//153; - videoScreenSizeWidth = 96; - videoScreenSizeHeight = 78; - effectSymbolBoxTlXPortrait = 25; - videoScreenXPortrait = 40; - videoScreenYPortrait = 2; - infoDisplayBoxSizeHeight = 15; - thumbnailStartPaneBoxTlY = 8; - thumbnailStartPaneBoxSizeWidth = 56; - thumbnailStartPaneBoxSizeHeight = 46; - thumbnailEndPaneBoxTlY = 8; - sliderThickness = 8; - break; - case 352: - case 416: - audioTrackBoxTlX = 38; - audioTrackBoxSizeWidth = 306; - videoScreenSizeWidth = 193; - videoScreenSizeHeight = 158; - effectSymbolBoxTlXPortrait = 43; - videoScreenXPortrait = 80; - videoScreenYPortrait = 4; - infoDisplayBoxSizeHeight = 31; - thumbnailStartPaneBoxTlY = 16; - thumbnailStartPaneBoxSizeWidth = 112; - thumbnailStartPaneBoxSizeHeight = 93; - thumbnailEndPaneBoxTlY = 16; - sliderThickness = 12; - break; - default: - audioTrackBoxTlX = 38; - audioTrackBoxSizeWidth = 306; - videoScreenSizeWidth = 193; - videoScreenSizeHeight = 158; - effectSymbolBoxTlXPortrait = 43; - videoScreenXPortrait = 80; - videoScreenYPortrait = 4; - infoDisplayBoxSizeHeight = 31; - thumbnailStartPaneBoxTlY = 16; - thumbnailStartPaneBoxSizeWidth = 112; - thumbnailStartPaneBoxSizeHeight = 93; - thumbnailEndPaneBoxTlY = 16; - sliderThickness = 12; - break; - }; - - iTransitionMarkerSize.iWidth = 7; - iTransitionMarkerSize.iHeight = 9; - - iAudioBarBox.iTl.iX = (rect.iTl.iX + 1) + iTransitionMarkerSize.iWidth / 2 + 20; - iAudioBarBox.iTl.iY = rect.iBr.iY - 16; - iAudioBarBox.iBr.iX = (rect.iBr.iX - 1) - iTransitionMarkerSize.iWidth / 2; - iAudioBarBox.iBr.iY = rect.iBr.iY - 1; - - TPoint audioTrackBoxTl = TPoint(audioTrackBoxTlX, - STATIC_CAST(TInt, rect.iBr.iY*0.8994 )); - - TSize audioTrackBoxSize = TSize(audioTrackBoxSizeWidth, - STATIC_CAST(TInt, rect.iBr.iY*0.0764 )); - iAudioTrackBox = TRect( audioTrackBoxTl, audioTrackBoxSize ); - - iAudioBarIconPos.iX = STATIC_CAST(TInt,0.01137*rect.iBr.iX);//rect.iTl.iX; - iAudioBarIconPos.iY = iAudioTrackBox.iTl.iY; - - AknIconUtils::SetSize( iVideoTrackIcon, TSize( iAudioTrackBox.Height(), iAudioTrackBox.Height() ) ); - AknIconUtils::SetSize( iAudioTrackIcon, TSize( iAudioTrackBox.Height(), iAudioTrackBox.Height() ) ); - - iAudioBarBox = iAudioTrackBox; - - iVideoBarBox.iTl.iX = iAudioBarBox.iTl.iX; - iVideoBarBox.iTl.iY = iAudioBarBox.iTl.iY - iTransitionMarkerSize.iHeight - 16; - iVideoBarBox.iBr.iX = iAudioBarBox.iBr.iX; - iVideoBarBox.iBr.iY = iAudioBarBox.iTl.iY - 10; - - TPoint videoTrackBoxTl = TPoint(audioTrackBoxTl.iX, - STATIC_CAST(TInt,rect.iBr.iY*0.7882 )); - - TSize videoTrackBoxSize = TSize(audioTrackBoxSize.iWidth, - STATIC_CAST(TInt, rect.iBr.iY*0.0764 )); - - iVideoTrackBox = TRect( videoTrackBoxTl, videoTrackBoxSize ); - - iVideoBarIconPos.iX = iAudioBarIconPos.iX; - iVideoBarIconPos.iY = iVideoTrackBox.iTl.iY; - - iVideoBarBox = iVideoTrackBox; - - iBarArea.iTl.iX = rect.iTl.iX; - iBarArea.iTl.iY = iVideoBarBox.iTl.iY; - iBarArea.iBr.iX = rect.iBr.iX; - iBarArea.iBr.iY = iAudioBarBox.iBr.iY; - - TBool landscape = VideoEditorUtils::IsLandscapeScreenOrientation(); - - if ( landscape ) //Landscape - { - // clip thumbnail pane - TInt videoScreenX = STATIC_CAST( TInt, rect.iBr.iX*0.0097 ); - TInt videoScreenY = STATIC_CAST( TInt, rect.iBr.iY*0.0139 ); - - TSize videoScreenSize( videoScreenSizeWidth, videoScreenSizeHeight ); - - iVideoDisplayBox = TRect( TPoint( videoScreenX, videoScreenY ), videoScreenSize ); - iVideoDisplay->SetRect( iVideoDisplayBox ); - - //clip cut timeline pane - TSize cutBarBoxSize = TSize(videoScreenSize.iWidth, - STATIC_CAST(TInt,rect.iBr.iY*0.09375 )); - iDummyCutBarBox = TRect( TPoint(iVideoDisplayBox.iTl.iX, iVideoDisplayBox.iBr.iY), cutBarBoxSize ); - iDummyCutBar->SetRect( iDummyCutBarBox ); - - //clip info pane - TSize infoDisplayBoxSize = TSize( STATIC_CAST(TInt,rect.iBr.iX*0.4159),STATIC_CAST(TInt,rect.iBr.iY*0.56) ); - iInfoDisplayBox = TRect( TPoint(iVideoDisplayBox.iBr.iX+videoScreenX, iVideoDisplayBox.iTl.iY), - infoDisplayBoxSize ); - - //clip indicator pane - TInt iconHeight = STATIC_CAST( TInt, rect.iBr.iY * 0.0972222222 ); - - TPoint effectSymbolBoxTl = TPoint( iInfoDisplayBox.iTl.iX, iInfoDisplayBox.iBr.iY/*+videoScreenY*/); - TSize effectSymbolBoxSize = TSize( STATIC_CAST(TInt,rect.iBr.iX*0.22115385), iconHeight ); - - iEffectSymbolBox = TRect( effectSymbolBoxTl, effectSymbolBoxSize); - iEffectSymbols->SetLandscapeScreenOrientation( landscape ); - - //pause indicator box (for preview state) - iPauseIconBox = TRect( effectSymbolBoxTl, TSize(iconHeight, iconHeight) ); - - //slider controls - if (iVerticalSlider) - { - iVerticalSliderSize = TSize(sliderThickness, iVideoDisplayBox.Height() + iDummyCutBarBox.Height()); - iVerticalSliderPoint = TPoint( rect.Width() - sliderThickness * 2, videoScreenY ); - iVerticalSlider->SetExtent( iVerticalSliderPoint, iVerticalSliderSize ); - } - if (iHorizontalSlider) - { - iHorizontalSliderSize = TSize(videoScreenSize.iWidth, sliderThickness); - iHorizontalSliderPoint = TPoint( videoScreenX, videoScreenY + videoScreenSize.iHeight + sliderThickness); - iHorizontalSlider->SetExtent( iHorizontalSliderPoint, iHorizontalSliderSize ); - } - - //transition - - //ved_clip_thumbnail_start_pane - TPoint thumbnailEndPaneBoxTl = TPoint(videoScreenX,videoScreenY); - - TSize thumbnailEndPaneBoxSize = TSize(STATIC_CAST(TInt, 0.3198*rect.iBr.iX), - STATIC_CAST(TInt,rect.iBr.iY*0.3785)); - - iTransitionDisplayLeftBox = TRect( thumbnailEndPaneBoxTl, thumbnailEndPaneBoxSize ); - iTransitionDisplayLeft->SetRect( iTransitionDisplayLeftBox ); - - - //ved_clip_thumbnail_end_pane - TPoint thumbnailStartPaneBoxTl = TPoint(STATIC_CAST(TInt, 0.6707*rect.iBr.iX),videoScreenY); - - TSize thumbnailStartPaneBoxSize = thumbnailEndPaneBoxSize; - - iTransitionDisplayRightBox = TRect( thumbnailStartPaneBoxTl, thumbnailStartPaneBoxSize ); - iTransitionDisplayRight->SetRect( iTransitionDisplayRightBox ); - - //ved_transition_info_pane - TPoint transitionArrowsBoxTl = TPoint(STATIC_CAST(TInt, 0.0866*rect.iBr.iX), - STATIC_CAST(TInt,0.4896*rect.iBr.iY ) ); - - TSize transitionArrowsBoxSize = TSize(STATIC_CAST(TInt, 0.827*rect.iBr.iX), - STATIC_CAST(TInt,0.2848*rect.iBr.iY ) ); - - iTransitionArrowsBox = TRect( transitionArrowsBoxTl, transitionArrowsBoxSize ); - - TInt SlowMotionBoxTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.1346 ); - TInt SlowMotionBoxTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.6806 ); - TInt SlowMotionBoxBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.4423077 ); - TInt SlowMotionBoxBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.7639 ); - - iSlowMotionBox = TRect(SlowMotionBoxTlX, SlowMotionBoxTlY, SlowMotionBoxBrX, - SlowMotionBoxBrY); - - TInt widthAndheight = STATIC_CAST( TInt, rect.iBr.iX * 0.057692 ); - - iArrowsDisplay->SetArrowSize(TSize( widthAndheight, widthAndheight )); - - // video display when cursor is on transition. - iVideoDisplayBoxOnTransition = TRect(TPoint((rect.iBr.iX/2) - - STATIC_CAST( TInt, 1.19*iTransitionDisplayRightBox.Size().iHeight)/2, - iTransitionDisplayLeftBox.iTl.iY), - TSize(STATIC_CAST( TInt, 1.19*iTransitionDisplayRightBox.Size().iHeight), - iTransitionDisplayRightBox.Size().iHeight)); // w:108, h:91 - - iDummyCutBarBoxOnTransition = TRect( TPoint(iTransitionDisplayRightBox.iTl.iX, - iTransitionDisplayRightBox.iBr.iY), TSize( iTransitionDisplayRightBox.Width(), - iDummyCutBarBox.Height() )); - } - else //Portrait - { - // clip thumbnail pane - TInt videoScreenX = videoScreenXPortrait; - TInt videoScreenY = videoScreenYPortrait; - - TSize videoScreenSize( videoScreenSizeWidth, videoScreenSizeHeight ); - - iVideoDisplayBox = TRect( TPoint( videoScreenX, videoScreenY ), videoScreenSize ); - iVideoDisplay->SetRect( iVideoDisplayBox ); - - //clip cut timeline pane - TSize cutBarBoxSize = TSize(videoScreenSize.iWidth, STATIC_CAST(TInt,rect.iBr.iY*0.0938 )); - iDummyCutBarBox = TRect( TPoint(iVideoDisplayBox.iTl.iX, - iVideoDisplayBox.iBr.iY - iVideoDisplay->GetBorderWidth()), cutBarBoxSize ); - iDummyCutBar->SetRect( iDummyCutBarBox ); - iDummyCutBarLeft->MakeVisible( EFalse ); - - //clip info pane - TPoint infoDisplayBoxTl = TPoint(STATIC_CAST(TInt, rect.iBr.iX*0.074), - STATIC_CAST(TInt, rect.iBr.iY*0.6598 )); - TSize infoDisplayBoxSize = TSize(STATIC_CAST(TInt, rect.iBr.iX*0.855), - infoDisplayBoxSizeHeight ); - iInfoDisplayBox = TRect( infoDisplayBoxTl, infoDisplayBoxSize ); - - //clip indicator pane - TInt iconWidth = STATIC_CAST( TInt, rect.iBr.iX * 0.07954545455 ); - - TInt effectSymbolBoxTlX = effectSymbolBoxTlXPortrait; - TInt effectSymbolBoxTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.131944444 ); - TSize effectSymbolBoxSize = TSize(iconWidth, STATIC_CAST(TInt,rect.iBr.iY * 0.3194444444 )); - - iEffectSymbolBox = TRect( TPoint(effectSymbolBoxTlX, effectSymbolBoxTlY), effectSymbolBoxSize); - iEffectSymbols->SetLandscapeScreenOrientation( landscape ); - - //pause indicator box (for preview state) - iPauseIconBox = TRect( iEffectSymbolBox.iTl, TSize(iconWidth, iconWidth) ); - - //slider controls - if (iVerticalSlider) - { - iVerticalSliderSize = TSize(sliderThickness, iVideoDisplayBox.Height() + iDummyCutBarBox.Height()); - iVerticalSliderPoint = TPoint( rect.Width() - sliderThickness * 2, videoScreenY ); - iVerticalSlider->SetExtent( iVerticalSliderPoint, iVerticalSliderSize ); - } - if (iHorizontalSlider) - { - iHorizontalSliderSize = TSize(videoScreenSize.iWidth, sliderThickness); - iHorizontalSliderPoint = TPoint( videoScreenX, videoScreenY + videoScreenSize.iHeight + sliderThickness); - iHorizontalSlider->SetExtent( iHorizontalSliderPoint, iHorizontalSliderSize ); - } - - //transition - - //ved_clip_thumbnail_start_pane - TPoint thumbnailStartPaneBoxTl = TPoint(STATIC_CAST(TInt, 0.6705*rect.iBr.iX), - thumbnailStartPaneBoxTlY); - - TSize thumbnailStartPaneBoxSize = TSize(thumbnailStartPaneBoxSizeWidth, - thumbnailStartPaneBoxSizeHeight); - - iTransitionDisplayRightBox = TRect( thumbnailStartPaneBoxTl, thumbnailStartPaneBoxSize ); - iTransitionDisplayRight->SetRect( iTransitionDisplayRightBox ); - - //ved_clip_thumbnail_end_pane - TPoint thumbnailEndPaneBoxTl = TPoint(STATIC_CAST(TInt, 0.0116*rect.iBr.iX), - thumbnailEndPaneBoxTlY ); - - TSize thumbnailEndPaneBoxSize = thumbnailStartPaneBoxSize; - - iTransitionDisplayLeftBox = TRect( thumbnailEndPaneBoxTl, thumbnailEndPaneBoxSize ); - iTransitionDisplayLeft->SetRect( iTransitionDisplayLeftBox ); - - TInt SlowMotionBoxTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.3 ); - TInt SlowMotionBoxTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.65 ); - TInt SlowMotionBoxBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.7 ); - TInt SlowMotionBoxBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.76 ); - - iSlowMotionBox = TRect(SlowMotionBoxTlX, SlowMotionBoxTlY, SlowMotionBoxBrX, - SlowMotionBoxBrY); - - //ved_transition_info_pane - TPoint transitionArrowsBoxTl = TPoint(STATIC_CAST(TInt, 0.0116*rect.iBr.iX), - STATIC_CAST(TInt,0.4792*rect.iBr.iY ) ); - - TSize transitionArrowsBoxSize = TSize(STATIC_CAST(TInt, 0.9773*rect.iBr.iX), - STATIC_CAST(TInt,0.2848*rect.iBr.iY ) ); - - iTransitionArrowsBox = TRect( transitionArrowsBoxTl, transitionArrowsBoxSize ); - - - TInt widthAndheight = STATIC_CAST( TInt, rect.iBr.iX * 0.068182 ); - - iInfoDisplay->SetArrowSize(TSize( widthAndheight, widthAndheight )); - iArrowsDisplay->SetArrowSize(TSize( widthAndheight, widthAndheight )); - - // video display when cursor is on transition. - iVideoDisplayBoxOnTransition = TRect( TPoint(STATIC_CAST( TInt, 0.341*rect.iBr.iX), - iTransitionDisplayLeftBox.iTl.iY), iTransitionDisplayRightBox.Size() ); - - iDummyCutBarBoxOnTransition = TRect( TPoint(iTransitionDisplayRightBox.iTl.iX, - iTransitionDisplayRightBox.iBr.iY - iVideoDisplay->GetBorderWidth()), - TSize( iTransitionDisplayRightBox.Width(), iDummyCutBarBox.Height() )); - } - - iInfoDisplay->SetRect( iInfoDisplayBox ); - iInfoDisplay->SetLandscapeScreenOrientation( landscape ); - iArrowsDisplay->SetRect(iSlowMotionBox); - - AknIconUtils::SetSize( iNoThumbnailIcon, TSize( iVideoDisplayBox.Size() ) ); - AknIconUtils::SetSize( iAudioIcon, TSize( iVideoDisplayBox.Size() ) ); - AknIconUtils::SetSize( iPauseBitmap, TSize( iPauseIconBox.Size() ), EAspectRatioNotPreserved ); - - // Update iconbox after screen rotation - iEffectSymbols->SetRect( iEffectSymbolBox ); - if ( CursorLocation() == ECursorOnTransition && - iView.EditorState() != CVeiEditVideoView::EPreview ) - { - SetCursorLocation( CursorLocation() ); - } - - iArrowsDisplay->DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer SizeChanged: Out"); - } - -TInt CVeiEditVideoContainer::CurrentIndex() const - { - if ((iCursorLocation == ECursorOnAudio) || - (iCursorLocation == ECursorOnEmptyAudioTrack)) - { - return iAudioCursorPos; - } - else - { - if ( iCursorLocation == ECursorOnEmptyVideoTrack ) - { - return iMovie.VideoClipCount() - 1; - } - - return iVideoCursorPos; - } - } - -TUint CVeiEditVideoContainer::GetAndDecrementCurrentIndex() - { - TUint ret = 0; - - if ( iCursorLocation == ECursorOnClip ) - { - ret = iVideoCursorPos; - if ( iVideoCursorPos > 0 ) - { - iVideoCursorPos--; - } - } - else if ( iCursorLocation == ECursorOnAudio ) - { - ret = iAudioCursorPos; - if ( iAudioCursorPos > 0 ) - { - iAudioCursorPos--; - } - } - else - { - User::Panic( _L("VideoEditor"), 0 ); - } - return ret; - } - -void CVeiEditVideoContainer::GetThumbAtL( const TTimeIntervalMicroSeconds& aTime ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::GetThumbAtL: In, iFrameReady:%d", iFrameReady); - if( !iTempVideoInfo || !iFrameReady ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetThumbAtL: 1"); - return; - } - - TSize resolution( iTempVideoInfo->Resolution() ); - TInt frameIndex = iTempVideoInfo->GetVideoFrameIndexL( aTime ); - - TInt totalFrameCount = iTempVideoInfo->VideoFrameCount(); - iFrameReady = EFalse; - if ( frameIndex > totalFrameCount ) - { - frameIndex = totalFrameCount; - } - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetThumbAtL: 2"); - /* : - check out on every phone before releasing whether videodisplay should be stopped before starting - asynchronous GetFrameL() - see how EStateGettingFrame is handled in SetPreviewState - Stopping frees memory and it is needed in memory sensible devices - */ - iTempVideoInfo->GetFrameL( *this, frameIndex, &resolution ); - SetPreviewState(EStateGettingFrame); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetThumbAtL: Out"); - } - -void CVeiEditVideoContainer::StartZooming() - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartZooming: In"); - - const TUint delay = 90000; - - if (iView.EditorState() != CVeiEditVideoView::EQuickPreview ) - { - iZoomFactorX = 0; - iZoomFactorY = 0; - } - else - { - iZoomFactorX = KMaxZoomFactorX; - iZoomFactorY = KMaxZoomFactorY; - } - - if ( iZoomTimer->IsActive() ) - { - iZoomTimer->Cancel(); - } - iZoomTimer->Start( delay, delay, TCallBack( CVeiEditVideoContainer::Update, this ) ); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartZooming: Out"); - } - -TKeyResponse CVeiEditVideoContainer::HandleScrollBarL ( - const TKeyEvent & aKeyEvent, - TEventCode aType - ) - { - TKeyResponse ret = EKeyWasNotConsumed; - - if (EEventKey == aType) - { - switch (aKeyEvent.iCode) - { - - case EKeyDownArrow: - { - iVerticalSlider->Increment(); - iVerticalSlider->DrawDeferred(); - ret = EKeyWasConsumed; - break; - } - case EKeyUpArrow: - { - iVerticalSlider->Decrement(); - iVerticalSlider->DrawDeferred(); - ret = EKeyWasConsumed; - break; - } - - case EKeyLeftArrow: - { - iHorizontalSlider->Decrement(); - iHorizontalSlider->DrawDeferred(); - ret = EKeyWasConsumed; - break; - } - case EKeyRightArrow: - { - iHorizontalSlider->Increment(); - iHorizontalSlider->DrawDeferred(); - ret = EKeyWasConsumed; - break; - } - - case EKeyOK: - { - ret = EKeyWasConsumed; - break; - } - - /*case EKeyLeftArrow: - case EKeyRightArrow: - { - ret = EKeyWasConsumed; - break; - }*/ - - default: - { - break; - } - } - } - - return ret; - } - - -TKeyResponse CVeiEditVideoContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType) - { - if (EModeMixingAudio == iSelectionMode || EModeAdjustVolume == iSelectionMode) - { - CVeiEditVideoView::TEditorState editorState = iView.EditorState(); - if (CVeiEditVideoView::EMixAudio == editorState || - CVeiEditVideoView::EAdjustVolume == editorState) - { - TKeyResponse ret = HandleScrollBarL(aKeyEvent, aType); - DrawDeferred(); - return ret; - } - } - - if ( iSeeking ) - { - DoUpdatePosition(); - } - - if ( aType == EEventKeyDown ) - { - - if ( iView.EditorState() == CVeiEditVideoView::EPreview )//large preview - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::OfferKeyEventL preview back"); - iVideoDisplay->Stop( ETrue ); - iBackKeyPressed = ETrue; - SetBlackScreen( EFalse ); - } - - iKeyRepeatCount = 0; - - // Shift key check. move clip - state - TBool shiftKeyPressed = (aKeyEvent.iModifiers & EModifierShift ); - if( shiftKeyPressed ) - { - if ( (iView.EditorState() == CVeiEditVideoView::EPreview ) && - (iPreviewState == EStatePlaying ))//large preview - { - iVideoDisplay->Stop( ETrue ); - - iView.SetFullScreenSelected( EFalse ); - SetBlackScreen( EFalse ); - return EKeyWasConsumed; - } - else if (((((iCursorLocation == ECursorOnClip) && (iMovie.VideoClipCount()>1) ) && (iView.EditorState() != CVeiEditVideoView::EQuickPreview)) || - ( (iCursorLocation == ECursorOnAudio) && (iMovie.AudioClipCount()>0) ) ) && - iSelectionMode == EModeNavigation ) - { - iView.ProcessCommandL( EVeiCmdEditVideoViewEditVideoMove ); - return EKeyWasConsumed; - } - else if (iView.EditorState() == CVeiEditVideoView::EQuickPreview) - { - if( iView.IsEnoughFreeSpaceToSaveL() && !iTakeSnapshot ) - { - /*if (EStatePlaying == iPreviewState) - { - PauseVideoL(); - } - */ - TakeSnapshotL(); - return EKeyWasConsumed; - } - } - return EKeyWasNotConsumed; - } - //Check that it's a seeking key and we're in a suitable state. - if ( iPreviewState != EStatePlaying ) - { - return EKeyWasNotConsumed; - } - - iSeekPos = iVideoDisplay->PositionL(); - - return EKeyWasConsumed; - } - else if ( aType == EEventKeyUp ) - { - iBackKeyPressed = EFalse; - - if ( (iView.EditorState() == CVeiEditVideoView::EPreview ) && - (iPreviewState == EStatePaused ))//large preview - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::OfferKeyEventL preview back"); - iVideoDisplay->Stop( ETrue ); - iBackKeyPressed = ETrue; - SetBlackScreen( EFalse ); - } - - - if ( iSeeking == EFalse ) - { - return EKeyWasNotConsumed; - } - iLastPosition = iSeekPos; - - iSeeking = EFalse; - - if ( (iPreviewState == EStatePaused || iPreviewState == EStateStopped) && - (iLastKeyCode == EKeyLeftArrow || iLastKeyCode == EKeyRightArrow) ) - { - GetThumbAtL( iSeekPos ); - return EKeyWasConsumed; - } - else if ( iPreviewState == EStatePlaying ) - { - if ( iTempVideoInfo && (iSeekPos >= iTempVideoInfo->Duration().Int64()) ) - { - iVideoDisplay->Stop( EFalse ); - } - else - { - iVideoDisplay->SetPositionL( iSeekPos ); - iVideoDisplay->ShowBlackScreen(); - DrawDeferred(); - if ( iTempVideoInfo && !iFrameReady) - { - iTempVideoInfo->CancelFrame(); - } - iVideoDisplay->Play(); - } - return EKeyWasConsumed; - } - else - { - return EKeyWasConsumed; - } - } - else if ( aType == EEventKey ) - { - iLastKeyCode = aKeyEvent.iCode; - iKeyRepeatCount++; - - if( iBackKeyPressed ) - { - iView.SetFullScreenSelected( EFalse ); - } - - if ( iView.EditorState() == CVeiEditVideoView::EPreview )//large preview - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::OfferKeyEventL preview back"); - iVideoDisplay->Stop( ETrue ); - iBackKeyPressed = ETrue; - SetBlackScreen( EFalse ); - } - - switch ( aKeyEvent.iCode ) - { - case EKeyOK: - { - if ( iBackKeyPressed ) - { - return EKeyWasNotConsumed; - } - if ( iView.EditorState() == CVeiEditVideoView::EPreview ) - { - iView.HandleCommandL( EAknSoftkeyBack ); - return EKeyWasConsumed; - } - - if ( ( iCursorLocation == ECursorOnClip && iMovie.VideoClipCount() == 0 ) || - ( iCursorLocation == ECursorOnEmptyVideoTrack ) ) - { - iView.Popup()->ShowInsertStuffPopupList(); - } - else if ( ( iSelectionMode == EModeRecordingSetStart ) || - ( iSelectionMode == EModeRecording ) || - ( iSelectionMode == EModeRecordingPaused ) ) - { - return EKeyWasConsumed; - } - else if ( ( iCursorLocation == ECursorOnAudio && iMovie.AudioClipCount() == 0 ) || - ( iCursorLocation == ECursorOnEmptyAudioTrack ) ) - { - iView.Popup()->ShowInsertAudioPopupList(); - } - else if ( ( iCursorLocation == ECursorOnClip || iCursorLocation == ECursorOnAudio ) - && ( iSelectionMode == EModeMove ) ) - { - iView.HandleCommandL( EAknSoftkeyOk ); - } - - else if (iCursorLocation == ECursorOnClip && iSelectionMode == EModeDuration) - { - iView.HandleCommandL( EAknSoftkeyOk ); - } - else if( iSelectionMode == EModeSlowMotion && iCursorLocation == ECursorOnClip ) - { - SetSelectionMode( CVeiEditVideoContainer::EModeSlowMotion ); - iView.HandleCommandL( EAknSoftkeyOk ); - iInfoDisplay->SetSlowMotionOn( EFalse ); - iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration ); - - ArrowsControl(); - } - else if ( iSelectionMode == EModeDuration && iCursorLocation == ECursorOnAudio ) - { - iView.HandleCommandL( EAknSoftkeyOk ); - } - - else - { - if (EStateGettingFrame != iPreviewState && EStateBuffering != iPreviewState && - EStateTerminating != iPreviewState && EStateOpening != iPreviewState) - { - iView.ProcessCommandL( EVeiCmdEditVideoViewContainerShowMenu ); - } - } - - return EKeyWasConsumed; - }// case EKeyOk - - case EKeyRightArrow: - { - if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview ) - { - if ( (iKeyRepeatCount > 2) && (iSeeking == EFalse) ) - { - if ( iPreviewState == EStatePlaying ) - { - iLastPosition = iVideoDisplay->PositionL(); - iSeekPos = iVideoDisplay->PositionL(); - } - - iVideoDisplay->PauseL(); - if (iPeriodic) - { - iPeriodic->Cancel(); - } - iSeeking = ETrue; - iKeyRepeatCount = 0; - } - - if ( iSeeking &&( iPreviewState == EStateStopped ) || - ( iPreviewState == EStatePlaying ) || - ( iPreviewState == EStatePaused ) ) - { - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - - TInt64 newPos = iSeekPos.Int64() + adjustment; - - if ( iTempVideoInfo && (newPos > iTempVideoInfo->Duration().Int64()) ) - { - newPos = iTempVideoInfo->Duration().Int64(); - } - - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - - iView.DoUpdateEditNaviLabelL(); - return EKeyWasConsumed; - } - } - - if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed ) - { - return EKeyWasNotConsumed; - } - if ( iCursorLocation == ECursorOnClip ) - { - //SM - RIGHT = MORE - if((iSelectionMode == EModeSlowMotion) && (iCursorLocation == ECursorOnClip)) - { - if( iSlowMotionValue < 1000) - { - iVideoDisplay->SetFrameIntervalL( -25 ); - iSlowMotionValue = iSlowMotionValue + 50; - iMovie.VideoClipSetSpeed( CurrentIndex(), iSlowMotionValue ); - iArrowsDisplay->SetSlowMotionPreset( iSlowMotionValue / 10); - ArrowsControl(); - } - return EKeyWasConsumed; - } - - if ( iSelectionMode == EModeNavigation ) - { - if ( iMovie.VideoClipCount() > 0 ) - { - ++iVideoCursorPos; - SetCursorLocation( ECursorOnTransition ); - } - } - else - { - if ( ( iSelectionMode == EModeMove ) && ( iVideoCursorPos < iMovie.VideoClipCount() - 1 ) ) - { - TInt oldplace = iVideoCursorPos; - ++iVideoCursorPos; - iMovie.VideoClipSetIndex( oldplace, iVideoCursorPos ); - } - } - - if (iSelectionMode == EModeDuration) - { - CVedVideoClipInfo* info = iMovie.VideoClipInfo( iVideoCursorPos ); - - TInt64 newDurationInt = iMovie.VideoClipEditedDuration( iVideoCursorPos ).Int64() + TimeIncrement(iKeyRepeatCount); - - if (info->Class() == EVedVideoClipClassGenerated) - { - if (info->Generator()->Uid() == KUidTitleClipGenerator) - { - CVeiTitleClipGenerator* generator = STATIC_CAST(CVeiTitleClipGenerator*, info->Generator()); - generator->SetDuration(TTimeIntervalMicroSeconds(newDurationInt)); - } - else if (info->Generator()->Uid() == KUidImageClipGenerator) - { - CVeiImageClipGenerator* generator = STATIC_CAST(CVeiImageClipGenerator*, info->Generator()); - generator->SetDuration(TTimeIntervalMicroSeconds(newDurationInt)); - } - } - } - - } // if ( iCursorLocation == ECursorOnClip ) - - else if ( iCursorLocation == ECursorOnTransition ) - { - if ( iVideoCursorPos < iMovie.VideoClipCount() ) - { - SetCursorLocation( ECursorOnClip ); - } - else - { - SetCursorLocation( ECursorOnEmptyVideoTrack ); - } - } - else if ( iCursorLocation == ECursorOnAudio ) - { - if ( iSelectionMode == EModeNavigation ) - { - if ( iAudioCursorPos < iMovie.AudioClipCount() - 1 ) - { - ++iAudioCursorPos; - SetCursorLocation( ECursorOnAudio ); - } - else - { - SetCursorLocation( ECursorOnEmptyAudioTrack ); - } - } - else if ( iSelectionMode == EModeMove ) - { - return MoveAudioRight(); - } - else if (iSelectionMode == EModeDuration) - { - - TTimeIntervalMicroSeconds clipCutOutTime = iMovie.AudioClipCutOutTime( iAudioCursorPos ); - - TInt64 newEndTimeInt = clipCutOutTime.Int64() + TimeIncrement(iKeyRepeatCount); - - if (iAudioCursorPos < (iMovie.AudioClipCount() - 1)) - { - TInt64 nextStartTimeInt = iMovie.AudioClipStartTime( iAudioCursorPos + 1 ).Int64(); - TInt64 currentEndTimeInt = iMovie.AudioClipEndTime( iAudioCursorPos ).Int64() + TimeIncrement(iKeyRepeatCount); - - if ( currentEndTimeInt > nextStartTimeInt) - { - newEndTimeInt = nextStartTimeInt - iMovie.AudioClipStartTime( iAudioCursorPos ).Int64(); - } - } - CVedAudioClipInfo* audioclipinfo = iMovie.AudioClipInfo( iAudioCursorPos ); - if (newEndTimeInt > audioclipinfo->Duration().Int64() ) - { - newEndTimeInt = audioclipinfo->Duration().Int64(); - } - iMovie.AudioClipSetCutOutTime( iAudioCursorPos, TTimeIntervalMicroSeconds( newEndTimeInt ) ); - } - } // else if ( iCursorLocation == ECursorOnAudio ) - DrawDeferred(); - - return EKeyWasConsumed; - } // case EKeyRightArrow - case EKeyLeftArrow: - { - if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview ) - { - iKeyRepeatCount++; - - if ( (iKeyRepeatCount > 2) && (iSeeking == EFalse) ) - { - - if ( iPreviewState == EStatePlaying ) - { - iLastPosition = iVideoDisplay->PositionL(); - iSeekPos = iVideoDisplay->PositionL(); - } - - iVideoDisplay->PauseL(); - if (iPeriodic) - { - iPeriodic->Cancel(); - } - iSeeking = ETrue; - - iKeyRepeatCount = 0; - } - - if ( iSeeking&&( iPreviewState == EStateStopped ) || - ( iPreviewState == EStatePlaying ) || - ( iPreviewState == EStatePaused ) ) - { - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - - TInt64 newPos = iSeekPos.Int64() - adjustment; - if ( newPos < 0 ) - { - newPos = 0; - } - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - - iView.DoUpdateEditNaviLabelL(); - return EKeyWasConsumed; - } - } - - if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed ) - { - return EKeyWasNotConsumed; - } - if ( iCursorLocation == ECursorOnClip ) - { - // SM - LEFT = LESS - if(( iSelectionMode == EModeSlowMotion) && (iCursorLocation == ECursorOnClip)) - { - - if( iSlowMotionValue > 250) - { - iVideoDisplay->SetFrameIntervalL( 25 ); - iSlowMotionValue = iSlowMotionValue - 50; - iMovie.VideoClipSetSpeed( CurrentIndex(), iSlowMotionValue ); - iArrowsDisplay->SetSlowMotionPreset( iSlowMotionValue / 10); - ArrowsControl(); - } - return EKeyWasConsumed; - } - - - if ( iSelectionMode == EModeNavigation ) - { - if ( iMovie.VideoClipCount() > 0 ) - { - SetCursorLocation( ECursorOnTransition ); - } - } - else - { - if ( ( iSelectionMode == EModeMove ) && ( iVideoCursorPos > 0 ) ) - { - TInt oldplace = iVideoCursorPos; - iVideoCursorPos--; - iMovie.VideoClipSetIndex( oldplace, iVideoCursorPos ); - } - } - - if (iSelectionMode == EModeDuration) - { - TInt64 newDurationInt = iMovie.VideoClipEditedDuration(iVideoCursorPos).Int64() - TimeIncrement(iKeyRepeatCount); - - if (newDurationInt < 1000000) - { - newDurationInt = 1000000; - } - - CVedVideoClipInfo* info = iMovie.VideoClipInfo(iVideoCursorPos); - if (info->Class() == EVedVideoClipClassGenerated) - { - if (info->Generator()->Uid() == KUidTitleClipGenerator) - { - CVeiTitleClipGenerator* generator = STATIC_CAST(CVeiTitleClipGenerator*, info->Generator()); - generator->SetDuration(TTimeIntervalMicroSeconds(newDurationInt)); - } - else if (info->Generator()->Uid() == KUidImageClipGenerator) - { - CVeiImageClipGenerator* generator = STATIC_CAST(CVeiImageClipGenerator*, info->Generator()); - generator->SetDuration(TTimeIntervalMicroSeconds(newDurationInt)); - } - } - } - - } - else if ( iCursorLocation == ECursorOnTransition ) - { - if ( iVideoCursorPos > 0 ) - { - --iVideoCursorPos; - SetCursorLocation( ECursorOnClip ); - } - } - else if ( iCursorLocation == ECursorOnAudio ) - { - if ( iSelectionMode == EModeNavigation ) - { - if ( iAudioCursorPos > 0 ) - { - iAudioCursorPos--; - SetCursorLocation( ECursorOnAudio ); - } - } - else if (iSelectionMode == EModeMove) - { - return MoveAudioLeft(); - } - else if (iSelectionMode == EModeDuration) - { - - TInt64 newDurationInt = iMovie.AudioClipCutOutTime( iAudioCursorPos ).Int64() - TimeIncrement(iKeyRepeatCount); - if (newDurationInt < 1000000) - { - newDurationInt = 1000000; - } - TInt64 newEndTimeInt = iMovie.AudioClipStartTime( iAudioCursorPos ).Int64() + newDurationInt; - for (TInt i = iMovie.VideoClipCount() - 1; i >= 0; i--) - { - if ( ( iMovie.AudioClipEndTime( iAudioCursorPos ) > iMovie.VideoClipEndTime( i ) ) && - TTimeIntervalMicroSeconds(newEndTimeInt) < iMovie.VideoClipEndTime( i ) ) - { - newDurationInt = iMovie.VideoClipEndTime( i ).Int64() - iMovie.AudioClipStartTime( iAudioCursorPos ).Int64(); - break; - } - } - if ( newDurationInt < ( iMovie.AudioClipCutInTime( iAudioCursorPos ).Int64() ) ) - { - newDurationInt = iMovie.AudioClipCutInTime( iAudioCursorPos ).Int64(); - } - iMovie.AudioClipSetCutOutTime( iAudioCursorPos, TTimeIntervalMicroSeconds( newDurationInt ) ); - } - } - - else if ( iCursorLocation == ECursorOnEmptyVideoTrack ) - { - if ( iMovie.VideoClipCount() > 0 ) - { - SetCursorLocation( ECursorOnTransition ); - } - } - else if ( iCursorLocation == ECursorOnEmptyAudioTrack ) - { - if ( iMovie.AudioClipCount() > 0 ) - { - SetCursorLocation( ECursorOnAudio ); - } - } - - DrawDeferred(); - return EKeyWasConsumed; - } // EKeyLeftArrow - - case EKeyUpArrow: - case EStdKeyIncVolume: - { - if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed ) - { - if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview ) - { - iVideoDisplay->OfferKeyEventL( aKeyEvent, aType ); - return EKeyWasConsumed; - } - return EKeyWasNotConsumed; - } - if ( ((iCursorLocation==ECursorOnAudio) || (iCursorLocation==ECursorOnEmptyAudioTrack) ) - && (iSelectionMode == EModeNavigation ) ) - { - SetCursorLocation( iPrevCursorLocation ); - DrawDeferred(); - return EKeyWasConsumed; - } - else if ( iCursorLocation == ECursorOnTransition ) - { - iView.HandleCommandL( EVeiCmdEditVideoViewTransitionKeyUp ); - return EKeyWasConsumed; - } - else - { - return EKeyWasNotConsumed; - } - } - case EKeyDownArrow: - case EStdKeyDecVolume: - { - if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed ) - { - if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview ) - { - iVideoDisplay->OfferKeyEventL( aKeyEvent, aType ); - return EKeyWasConsumed; - } - return EKeyWasNotConsumed; - } - if ( iCursorLocation == ECursorOnTransition ) - { - iView.HandleCommandL( EVeiCmdEditVideoViewTransitionKeyDown ); - return EKeyWasConsumed; - } - else if ( (iCursorLocation != ECursorOnAudio )&& (iSelectionMode == EModeNavigation) && - (iCursorLocation != ECursorOnEmptyAudioTrack ) ) - { - iPrevCursorLocation = iCursorLocation; - SetCursorLocation( ECursorOnAudio ); - DrawDeferred(); - return EKeyWasConsumed; - } - else - { - return EKeyWasNotConsumed; - } - } - case EKeyBackspace: //Clear 0x08 - { - if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed ) - { - return EKeyWasNotConsumed; - } - if ( ( ( iCursorLocation == ECursorOnClip ) || ( iCursorLocation == ECursorOnAudio ) ) - && ( ( iMovie.VideoClipCount() > 0 ) || ( iMovie.AudioClipCount() > 0 ) ) && ( iSelectionMode == EModeNavigation ) ) - { - iView.ProcessCommandL( EVeiCmdEditVideoViewEditVideoRemove ); - return EKeyWasConsumed; - } - else if ((iCursorLocation == ECursorOnTransition) && (iSelectionMode == EModeNavigation)) - { - iView.ProcessCommandL( EVeiCmdEditVideoViewTransitionNone ); - } - else if ( ( iSelectionMode == EModeSlowMotion )) - { - return EKeyWasNotConsumed; - } - return EKeyWasNotConsumed; - } - case EKeyYes: //Send 63586 - { - if ( iView.EditorState() != CVeiEditVideoView::EEdit || iBackKeyPressed ) - { - return EKeyWasNotConsumed; - } - if ( iSelectionMode == EModeNavigation ) - { - iView.SetSendKey( ETrue ); - iView.ProcessCommandL( EVeiCmdSendMovie ); - return EKeyWasConsumed; - } - break; - } - default: - { - return EKeyWasNotConsumed; - } - } - } - return EKeyWasNotConsumed; - } - - -TKeyResponse CVeiEditVideoContainer::MoveAudioLeft() - { - TInt i; - - TInt index = iAudioCursorPos; - - if ( iAudioCursorPos > 0 ) - { - TTimeIntervalMicroSeconds startTime = iMovie.AudioClipStartTime( iAudioCursorPos ); //second - TTimeIntervalMicroSeconds prevEndTime = iMovie.AudioClipEndTime( iAudioCursorPos-1 ); //first - - if ( startTime == prevEndTime ) - { - TInt newIndex = iAudioCursorPos - 1; - while ( newIndex > 0 ) - { - TTimeIntervalMicroSeconds newNextStartTime = iMovie.AudioClipStartTime( newIndex ); //first - TTimeIntervalMicroSeconds newPrevEndTime = iMovie.AudioClipEndTime( newIndex - 1); - - if ( newPrevEndTime == newNextStartTime ) - { - newIndex--; - } - else - { - break; - } - } - if ( ( newIndex == 0 ) && ( iMovie.AudioClipStartTime( 0 ) == TTimeIntervalMicroSeconds(0) ) ) - { - return EKeyWasConsumed; - } - - TInt64 newEndTimeInt = iMovie.AudioClipStartTime( newIndex ).Int64(); //first - - TInt64 newStartTimeInt = newEndTimeInt - iView.OriginalAudioDuration().Int64(); - - TInt64 newCutOutTimeInt = (newEndTimeInt - newStartTimeInt) + iMovie.AudioClipCutInTime( index ).Int64(); - - if (newStartTimeInt < 0) - { - newStartTimeInt = 0; - } - - if ( newIndex > 0 ) - { - TInt64 newPrevEndTimeInt = iMovie.AudioClipEndTime( newIndex - 1 ).Int64(); - if ( newStartTimeInt < newPrevEndTimeInt ) - { - newStartTimeInt = newPrevEndTimeInt; - } - } - - if ( (newCutOutTimeInt+newStartTimeInt) > iMovie.AudioClipStartTime( index - 1 ).Int64() ) - { - TInt64 audioStartTime = iMovie.AudioClipStartTime( index - 1 ).Int64(); - newCutOutTimeInt = (audioStartTime - newStartTimeInt) + iMovie.AudioClipCutInTime( index ).Int64(); - } - - iMovie.AudioClipSetStartTime( index,TTimeIntervalMicroSeconds( newStartTimeInt ) ); - iMovie.AudioClipSetCutOutTime( newIndex, TTimeIntervalMicroSeconds( newCutOutTimeInt ) ); - - iAudioCursorPos = newIndex; - - DrawDeferred(); - - return EKeyWasConsumed; - } - } - - TTimeIntervalMicroSeconds audioclipstart = iMovie.AudioClipStartTime( index ); - TTimeIntervalMicroSeconds audioclipend = iMovie.AudioClipEndTime( index ); - TInt64 audioclipeditedduration = iMovie.AudioClipEditedDuration( index ).Int64(); - - TInt64 newStartTimeInt = audioclipstart.Int64() - TimeIncrement( iKeyRepeatCount ); - - if ( newStartTimeInt < 0 ) - { - newStartTimeInt = 0; - } - - for ( i = iMovie.VideoClipCount() - 1; i >= 0; i-- ) - { - TTimeIntervalMicroSeconds endtime = iMovie.VideoClipEndTime( i ); - - if ( ( audioclipstart > endtime ) && TTimeIntervalMicroSeconds(newStartTimeInt) < endtime ) - { - newStartTimeInt = endtime.Int64(); - break; - } - } - - TInt64 newEndTimeInt = newStartTimeInt + audioclipeditedduration; - - for (i = iMovie.VideoClipCount() - 1; i >= 0; i-- ) - { - if ((audioclipend > iMovie.VideoClipEndTime(i)) && TTimeIntervalMicroSeconds(newEndTimeInt) < iMovie.VideoClipEndTime(i)) - { - newStartTimeInt = iMovie.VideoClipEndTime(i).Int64() - audioclipeditedduration; - break; - } - } - - if (iAudioCursorPos > 0) - { - TInt64 prevEndTimeInt = iMovie.AudioClipEndTime( iAudioCursorPos - 1 ).Int64(); - - if (newStartTimeInt < prevEndTimeInt) - { - newStartTimeInt = prevEndTimeInt; - } - } - iMovie.AudioClipSetStartTime( index, TTimeIntervalMicroSeconds(newStartTimeInt) ); - iAudioCursorPos = index; - return EKeyWasConsumed; - } - - -TKeyResponse CVeiEditVideoContainer::MoveAudioRight() - { - TInt i; - TInt index = iAudioCursorPos; - - if ( iAudioCursorPos < ( iMovie.AudioClipCount() - 1 ) ) - { - TTimeIntervalMicroSeconds endTime = iMovie.AudioClipEndTime( iAudioCursorPos ); - TTimeIntervalMicroSeconds nextStartTime = iMovie.AudioClipStartTime( iAudioCursorPos+1 ); - - if (endTime == nextStartTime) - { - TInt newIndex = iAudioCursorPos + 1; - while ( newIndex < ( iMovie.AudioClipCount() - 1 ) ) - { - TTimeIntervalMicroSeconds newPrevEndTime = iMovie.AudioClipEndTime( newIndex ); - TTimeIntervalMicroSeconds newNextStartTime = iMovie.AudioClipStartTime( newIndex+1 ); - - if (newPrevEndTime == newNextStartTime) - { - newIndex++; - } - else - { - break; - } - } - - TInt64 newStartTimeInt = iMovie.AudioClipEndTime( newIndex ).Int64(); - TInt64 newEndTimeInt = newStartTimeInt + iView.OriginalAudioDuration().Int64(); - - TInt64 newCutOutTimeInt = (newEndTimeInt - newStartTimeInt) + iMovie.AudioClipCutInTime( index ).Int64(); - - if ( newIndex < ( iMovie.AudioClipCount()-1 ) ) - { - TInt64 newNextStartTimeInt = iMovie.AudioClipStartTime(newIndex + 1).Int64(); - if ( newEndTimeInt > newNextStartTimeInt ) - { - newEndTimeInt = newNextStartTimeInt; - } - - if ( (newCutOutTimeInt+newStartTimeInt) > iMovie.AudioClipStartTime( newIndex + 1 ).Int64() ) - { - TInt64 audioStartTime = iMovie.AudioClipStartTime( newIndex + 1 ).Int64(); - newCutOutTimeInt = audioStartTime - newStartTimeInt; - } - } - - iMovie.AudioClipSetStartTime( index,TTimeIntervalMicroSeconds( newStartTimeInt ) ); - iMovie.AudioClipSetCutOutTime( newIndex, TTimeIntervalMicroSeconds( newCutOutTimeInt ) ); - - iAudioCursorPos = newIndex; - - DrawDeferred(); - - return EKeyWasConsumed; - } - } - - TInt64 newStartTimeInt = iMovie.AudioClipStartTime( iAudioCursorPos ).Int64() + TimeIncrement( iKeyRepeatCount ); - - for ( i = 0; i < iMovie.VideoClipCount(); i++ ) - { - TTimeIntervalMicroSeconds endtime = iMovie.VideoClipEndTime( i ); - TTimeIntervalMicroSeconds audioclipstart = iMovie.AudioClipStartTime( index ); - - if ( ( audioclipstart < endtime ) && TTimeIntervalMicroSeconds(newStartTimeInt) > endtime ) - { - newStartTimeInt = endtime.Int64(); - break; - } - } - - TInt64 audioclipeditedduration = iMovie.AudioClipEditedDuration( index ).Int64(); - - TInt64 newEndTimeInt = newStartTimeInt + audioclipeditedduration; - TTimeIntervalMicroSeconds audioclipend = iMovie.AudioClipEndTime( index ); - - for (i = 0; i < iMovie.VideoClipCount(); i++) - { - if ( ( audioclipend < iMovie.VideoClipEndTime(i)) && - TTimeIntervalMicroSeconds( newEndTimeInt ) > iMovie.VideoClipEndTime( i ) ) - { - newStartTimeInt = iMovie.VideoClipEndTime(i).Int64() - audioclipeditedduration; - break; - } - } - - if (iAudioCursorPos < (iMovie.AudioClipCount() - 1)) - { - newEndTimeInt = newStartTimeInt + audioclipeditedduration; - TInt64 nextStartTimeInt = iMovie.AudioClipStartTime( iAudioCursorPos + 1 ).Int64(); - - if (newEndTimeInt > nextStartTimeInt) - { - newStartTimeInt -= (newEndTimeInt - nextStartTimeInt); - } - } - iMovie.AudioClipSetStartTime( index, TTimeIntervalMicroSeconds(newStartTimeInt) ); - iAudioCursorPos = index; - return EKeyWasConsumed; - } - - -TInt CVeiEditVideoContainer::TimeIncrement(TInt aKeyCount) const - { - if ( aKeyCount < 3 ) - { - return 100000; - } - else if ( aKeyCount < 4 ) - { - return 300000; - } - else if ( aKeyCount < 5 ) - { - return 500000; - } - else if ( aKeyCount < 19 ) - { - return 1000000; - } - else - { - return 5000000; - } - } - - -TTimeIntervalMicroSeconds CVeiEditVideoContainer::TotalLength() - { - TTimeIntervalMicroSeconds duration = TTimeIntervalMicroSeconds(0); - - if ( iVideoDisplay ) - { - duration = iVideoDisplay->TotalLengthL(); - } - - return duration; - } - -// --------------------------------------------------------- -// CVeiEditVideoContainer::CountComponentControls() const -// --------------------------------------------------------- -// -TInt CVeiEditVideoContainer::CountComponentControls() const - { - if (EModeMixingAudio == iSelectionMode || EModeAdjustVolume == iSelectionMode) - { - return 9; // return nbr of controls inside this container - } - else - { - return 10; // return nbr of controls inside this container - } - } - -// --------------------------------------------------------- -// CVeiEditVideoContainer::ComponentControl(TInt aIndex) const -// --------------------------------------------------------- -// -CCoeControl* CVeiEditVideoContainer::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case 0: - return iVideoDisplay; - case 1: - return iInfoDisplay; - case 2: - return iDummyCutBarLeft; - case 3: - return iTransitionDisplayLeft; - case 4: - return iTransitionDisplayRight; - case 5: - return iEffectSymbols; - case 6: - return iArrowsDisplay; - case 7: - return iVerticalSlider; - case 8: - return iHorizontalSlider; - case 9: - // this one is not used in modes EModeMixingAudio and EModeAdjustVolume - if (EModeMixingAudio != iSelectionMode && EModeAdjustVolume != iSelectionMode) - { - return iDummyCutBar; - } - else - { - return NULL; - } - default: - return NULL; - } - } - -void CVeiEditVideoContainer::SaveSnapshotL() - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::SaveSnapshotL(): in"); - - //first we have to encode bitmap - // get encoder types - RImageTypeDescriptionArray imageTypes; - iConverter->GetEncoderImageTypesL( imageTypes ); - - CleanupStack::PushL( TCleanupItem( CleanupRArray, &imageTypes ) ); - - TInt selectedIdx = 0; - - _LIT( KEncoderType, "JPEG" ); // encoder type for image conversion - - for( TInt i=0; iDescription() == KEncoderType ) - { - selectedIdx = i; - } - } - - RFs& fs = iEikonEnv->FsSession(); - - TParse file; - TFileName newname; - TFileName snapshotdir; - - TVeiSettings saveSettings; - // Get default snapshot name from settings view - - STATIC_CAST( CVeiAppUi*, iEikonEnv->AppUi() )->ReadSettingsL( saveSettings ); - - CAknMemorySelectionDialog::TMemory memory( saveSettings.MemoryInUse() ); - - newname.Append( saveSettings.DefaultSnapshotName() ); - newname.Append( _L(".JPEG") ); - file.Set( newname, NULL, NULL ); - - TInt error = KErrNone; - - snapshotdir.Zero(); - - if ( memory == CAknMemorySelectionDialog::EPhoneMemory ) - { - snapshotdir.Append( PathInfo::PhoneMemoryRootPath() ); - } - else - { - snapshotdir.Append( PathInfo::MemoryCardRootPath() ); - } - snapshotdir.Append( PathInfo::ImagesPath() ); - - error = fs.MkDirAll( file.Path() ); - if ( ( error != KErrAlreadyExists ) && ( error != KErrNone ) ) - { - return; - } - - newname.Zero(); - newname.Append( file.NameAndExt() ); - newname.Insert( 0, snapshotdir ); - CApaApplication::GenerateFileName( fs, newname ); - - //for cancellation - if ( iSaveToFileName ) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - iSaveToFileName = HBufC::NewL( newname.Length() ); - *iSaveToFileName = newname; - - // request the actuall save/encode - // asynchronous, the result is reported via callback NotifyCompletion - iConverter->StartToEncodeL( newname, - imageTypes[selectedIdx]->ImageType(), imageTypes[selectedIdx]->SubType() ); - - /* - if (iProgressDialog) - { - delete iProgressDialog; - iProgressDialog = NULL; - } - - iProgressDialog = - new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**, - &iProgressDialog), ETrue); - iProgressDialog->SetCallback(this); - iProgressDialog->ExecuteDlgLD( R_VEI_PROGRESS_NOTE ); - - - HBufC* stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_SAVING_IMAGE, iEikonEnv ); - iProgressDialog->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iProgressDialog->GetProgressInfoL()->SetFinalValue(100); - */ - - CleanupStack::PopAndDestroy( &imageTypes ); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::SaveSnapshotL(): out"); - } - - -void CVeiEditVideoContainer::SetFinishedStatus( TBool aStatus ) - { - iFinished = aStatus; - iCurrentPoint = 0; - DrawPlayHead(); - } - -TInt CVeiEditVideoContainer::Update( TAny* aThis ) - { - STATIC_CAST( CVeiEditVideoContainer*, aThis )->DoUpdate(); - return 42; - } - -void CVeiEditVideoContainer::DoUpdate() - { - if (iView.EditorState() != CVeiEditVideoView::EQuickPreview ) - { - iZoomFactorX++; - iZoomFactorY++; - if ( iZoomFactorX > KMaxZoomFactorX ) - { - iZoomFactorX = KMaxZoomFactorX; - } - if ( iZoomFactorY > KMaxZoomFactorY ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::DoUpdate: Zooming completed"); - iZoomTimer->Cancel(); - } - } - else - { - iZoomFactorX--; - iZoomFactorY--; - if ( iZoomFactorX < 0 ) - { - iZoomFactorX = 0; - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::DoUpdate: Zooming completed"); - iZoomTimer->Cancel(); - } - if ( iZoomFactorY < 0 ) - { - iZoomFactorY = 0; - } - } - - if( iSelectionMode != EModePreview ) - { - DrawTrackBoxes(); - } - } - -TInt CVeiEditVideoContainer::UpdatePosition( TAny* aThis ) - { - STATIC_CAST( CVeiEditVideoContainer*, aThis )->DoUpdatePosition(); - return 42; - } - -void CVeiEditVideoContainer::DoUpdatePosition() - { - - TUint time = static_cast(PlaybackPositionL().Int64() / 1000); - - //LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::DoUpdatePosition(): 1, time:%d", time); - -/** Check if playhead needs to be drawn again*/ - TInt64 barDuration = iMovie.Duration().Int64(); - - if (barDuration < 30000000) - { - barDuration = 30000000; - } - else if (barDuration < 45000000) - { - barDuration = 45000000; - } - else{ - barDuration = ((barDuration / 30000000) + 1) * 30000000; - } - - TInt barWidth = iVideoBarBox.Width(); - - TInt videoClipCount = iMovie.VideoClipCount(); - TInt audioClipCount = iMovie.AudioClipCount(); - TInt lastVideoClipX(0); - TTimeIntervalMicroSeconds endTime; - - __ASSERT_ALWAYS( ((iMovie.VideoClipCount()>0) || (iMovie.AudioClipCount()>0)), - User::Panic( _L("VideoEditor" ), 34 ) ); - - - if (( videoClipCount > 0 ) && ( audioClipCount > 0 )) - { - TTimeIntervalMicroSeconds videoClipEndTime = iMovie.VideoClipEndTime( videoClipCount-1 ); - TTimeIntervalMicroSeconds audioClipEndTime = iMovie.AudioClipEndTime( audioClipCount-1 ); - if ( videoClipEndTime > audioClipEndTime ) - { - endTime = videoClipEndTime; - } - else - { - endTime = audioClipEndTime; - } - } - else if ( videoClipCount > 0 ) - { - endTime = iMovie.VideoClipEndTime( videoClipCount-1 ); - } - else - { - endTime = iMovie.AudioClipEndTime( audioClipCount-1 ); - } - - lastVideoClipX = iVideoBarBox.iTl.iX - + static_cast((((endTime.Int64() * barWidth)) / barDuration)) + 1; - - TInt width = lastVideoClipX - iVideoBarBox.iTl.iX; - - TUint totalTime = static_cast(iMovie.Duration().Int64() /1000); - TInt nextPosition = time * width / totalTime + iVideoBarBox.iTl.iX; - - if ( nextPosition != iCurrentPointX ) - { - iCurrentPoint = time; - DrawPlayHead(); - } - else - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::DoUpdatePosition 3, drawplayhead skipped"); - } - } - -void CVeiEditVideoContainer::PlayVideoFileL( const TDesC& aFilename, const TBool& aFullScreen ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideoFileL(): In"); - - if ( iTempFileName ) - { - delete iTempFileName; - iTempFileName = NULL; - } - - iTempFileName = HBufC::NewL(KMaxFileName); - *iTempFileName = aFilename; - - // Get default movie name from settings view - - TFileName newname; - TVeiSettings movieSaveSettings; - - STATIC_CAST( CVeiAppUi*, iEikonEnv->AppUi() )->ReadSettingsL( movieSaveSettings ); - - newname.Append( movieSaveSettings.DefaultVideoName() ); - iInfoDisplay->SetName( newname ); - - TTimeIntervalMicroSeconds movieDuration = iMovie.Duration(); - iInfoDisplay->SetDuration( movieDuration ); - - if ( iTempVideoInfo ) - { - delete iTempVideoInfo; - iTempVideoInfo = 0; - } - iFullScreenSelected = aFullScreen; - - if ( iCursorLocation == ECursorOnTransition ) - { - iTransitionDisplayLeft->MakeVisible( EFalse ); - iTransitionDisplayRight->MakeVisible( EFalse ); - iArrowsDisplay->SetUpperArrowVisibility( EFalse ); - iArrowsDisplay->SetLowerArrowVisibility( EFalse ); - iDummyCutBar->SetRect( iDummyCutBarBox ); - } - iInfoDisplay->MakeVisible( EFalse ); - iDummyCutBar->MakeVisible( EFalse ); - iDummyCutBarLeft->MakeVisible( EFalse ); - iEffectSymbols->MakeVisible( EFalse ); - iVideoDisplay->StopAnimation(); - - SetPreviewState(EStateOpening); - - if ( !iScreenLight->IsActive() ) - { - iScreenLight->Start(); - } - - if ( iFullScreenSelected ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideoFileL: fullscreen selected"); - iView.SetEditorState( CVeiEditVideoView::EPreview); - - SetBlackScreen( ETrue ); - iVideoDisplay->OpenFileL( aFilename ); - } - else - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideoFileL: fullscreen not selected"); - iView.SetEditorState( CVeiEditVideoView::EQuickPreview); - iVideoDisplay->SetRect( iVideoDisplayBox ); - iVideoDisplay->ShowBlackScreen(); - iInfoDisplay->SetRect( iInfoDisplayBox ); - - iDummyCutBar->MakeVisible( ETrue ); - iDummyCutBar->Dim( ETrue ); - iVideoDisplay->OpenFileL( aFilename ); - } - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideoFileL(): Out"); - } - -void CVeiEditVideoContainer::PlayVideo(const TDesC& /*aFilename*/, TBool& /*aFullScreen*/ ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideo In"); - - if ( iVideoDisplay ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideo(): 1"); - - // associated with, when put into background and back to foreground, play starts from different - // position it was paused (iSeekPos is not iLastPosition) - iVideoDisplay->SetPositionL( iSeekPos ); - - if ( iTempVideoInfo && !iFrameReady) - { - iTempVideoInfo->CancelFrame(); - } - iVideoDisplay->Play(); - } - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PlayVideo(): Out"); - } - -void CVeiEditVideoContainer::StopVideo( TBool aCloseStream ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::StopVideo: In, aCloseStream:%d", aCloseStream); - SetPreviewState(EStateStopped); - if ( iPeriodic ) - { - iPeriodic->Cancel(); - } - - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - iCloseStream = aCloseStream; - - iVideoDisplay->Stop( aCloseStream ); - - iScreenLight->Stop(); - if ( aCloseStream ) - { - SetPreviewState(EStateClosed); - } - else - { - SetFinishedStatus( ETrue ); - } - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StopVideo: out"); - } - -void CVeiEditVideoContainer::TakeSnapshotL() - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::TakeSnapshotL: In, iFrameReady:%d", iFrameReady); - - if( !iTempVideoInfo || !iFrameReady ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::TakeSnapshotL: 1"); - if (!iFrameReady) - { - iTakeSnapshotWaiting = ETrue; - } - return; - } - - iTakeSnapshotWaiting = EFalse; - iTakeSnapshot = ETrue; - TTimeIntervalMicroSeconds pos = PlaybackPositionL(); - - TInt frameIndex; - TInt totalFrameCount; - - frameIndex = iTempVideoInfo->GetVideoFrameIndexL( pos ); - totalFrameCount = iTempVideoInfo->VideoFrameCount(); - - if ( frameIndex > totalFrameCount ) - { - frameIndex = totalFrameCount; - } - - TRect clipResolution = Rect(); - TSize resol( clipResolution.iBr.iX, clipResolution.iBr.iY ); - TDisplayMode displayMode = ENone; - iFrameReady = EFalse; - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::TakeSnapshotL: 2"); - //iTempVideoInfo->GetFrameL(*this, frameIndex, &resol, displayMode, ETrue); - - /* : - check out on every phone before releasing whether videodisplay should be stopped before starting - asynchronous GetFrameL() - see how EStateGettingFrame is handled in SetPreviewState - Stopping frees memory and it is needed in memory sensible devices - */ - iTempVideoInfo->GetFrameL(*this, frameIndex, NULL, displayMode, ETrue); - SetPreviewState(EStateGettingFrame); - - StartProgressDialogL(R_VEI_PROGRESS_NOTE_WITH_CANCEL, R_VEI_PROGRESS_NOTE_SAVING_IMAGE); - - /* - if (iProgressDialog) - { - delete iProgressDialog; - iProgressDialog = NULL; - } - - iProgressDialog = - new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**, - &iProgressDialog), ETrue); - iProgressDialog->SetCallback(this); - iProgressDialog->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL ); - - - HBufC* stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_SAVING_IMAGE, iEikonEnv ); - iProgressDialog->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iProgressDialog->GetProgressInfoL()->SetFinalValue(100); - */ - // this is good place to start Progress Note, but for some reason this causes some phones to crash - // that is why progress note is started now in NotifyVideoClipFrameCompleted - //StartProgressDialogL(R_VEI_PROGRESS_NOTE_WITH_CANCEL, R_VEI_PROGRESS_NOTE_SAVING_IMAGE); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::TakeSnapshotL: Out"); - } - -void CVeiEditVideoContainer::PauseVideoL() - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::PauseVideoL: In, iPreviewState:%d", iPreviewState); - - // if-condition added in order to prevent entering to pause state (icon is showed) from "wrong" state - // etc. from "stopped" state - if (EStatePlaying == iPreviewState) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PauseVideoL 1"); - iLastPosition = iVideoDisplay->PositionL(); - - // think whether this should be here? - iSeekPos = iVideoDisplay->PositionL(); - iVideoDisplay->SetPositionL(iSeekPos); - } - iVideoDisplay->PauseL(); - SetPreviewState(EStatePaused); - iScreenLight->Stop(); - if ( iPeriodic ) - { - iPeriodic->Cancel(); - } - iView.StopNaviPaneUpdateL(); - - #ifdef GET_PAUSE_THUMBNAIL - GetThumbAtL( iLastPosition ); - #endif - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PauseVideoL out"); - } - -TTimeIntervalMicroSeconds CVeiEditVideoContainer::PlaybackPositionL() - { - if ( ( iSeeking ) || ( EStateStopped == iPreviewState) ) - { - return iSeekPos; - } - if ( EStatePlaying != iPreviewState ) - { - return iLastPosition; - } - - iLastPosition = iVideoDisplay->PositionL(); - - // for what situation is this for? - if ( ( iLastPosition == TTimeIntervalMicroSeconds( 0 ) ) && - ( iSeekPos != TTimeIntervalMicroSeconds( 0 ) ) ) - { - return iSeekPos; - } - // for what situation is this for? - return iLastPosition; - } - - -void CVeiEditVideoContainer::SetSelectionMode( TSelectionMode aSelectionMode ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::SetSelectionMode: In, aSelectionMode:%d", aSelectionMode); - iSelectionMode = aSelectionMode; - - if (EModeMixingAudio == iSelectionMode) - { - iHorizontalSlider->SetPosition(0); - - if (0 != iMovie.GetVideoClipVolumeGainL(KVedClipIndexAll)) - { - TReal gain = iMovie.GetVideoClipVolumeGainL(KVedClipIndexAll);///(KVolumeMaxGain/10); - gain = gain/(KVolumeMaxGain/10); - if (0 < gain) - { - gain += 0.5; - } - else - { - gain -= 0.5; - } - iHorizontalSlider->SetPosition( (TInt)(-gain) ); // see impl. of CSliderBar - } - - else if(0 != iMovie.GetAudioClipVolumeGainL(KVedClipIndexAll)) - { - TReal gain = iMovie.GetAudioClipVolumeGainL(KVedClipIndexAll);///(KVolumeMaxGain/10); - gain = gain/(KVolumeMaxGain/10); - if (0 < gain) - { - gain += 0.5; - } - else - { - gain -= 0.5; - } - iHorizontalSlider->SetPosition( (TInt)gain ); - } - - iHorizontalSlider->MakeVisible(ETrue); - iVerticalSlider->MakeVisible(EFalse); - iVideoDisplay->ShowPictureL( *iAudioMixingIcon ); - iInfoDisplay->MakeVisible(EFalse); - - - iVideoDisplay->StopAnimation(); - if ( iCursorLocation == ECursorOnTransition ) - { - iTransitionDisplayLeft->MakeVisible( EFalse ); - iTransitionDisplayRight->MakeVisible( EFalse ); - iArrowsDisplay->SetUpperArrowVisibility( EFalse ); - iArrowsDisplay->SetLowerArrowVisibility( EFalse ); - iDummyCutBar->SetRect( iDummyCutBarBox ); - } - - - } - else if (EModeAdjustVolume == iSelectionMode) - { - - iVerticalSlider->SetPosition(0); - - if (VideoEditor::ECursorOnClip == CursorLocation()) - { - if (0 != iMovie.GetVideoClipVolumeGainL(CurrentIndex())) - { - TReal adjustVolume = iMovie.GetVideoClipVolumeGainL(CurrentIndex());///(KVolumeMaxGain/10); - adjustVolume = adjustVolume/(KVolumeMaxGain/10); - - if (0 < adjustVolume) - { - adjustVolume += 0.5; - } - else if (0 > adjustVolume) - { - adjustVolume -= 0.5; - } - iVerticalSlider->SetPosition(-adjustVolume); // see impl. of CSliderBar - } - } - else if (VideoEditor::ECursorOnAudio == CursorLocation()) - { - if (0 != iMovie.GetAudioClipVolumeGainL(CurrentIndex())) - { - TReal adjustVolume = iMovie.GetAudioClipVolumeGainL(CurrentIndex());///(KVolumeMaxGain/10); - adjustVolume = adjustVolume/(KVolumeMaxGain/10); - - if (0 < adjustVolume) - { - adjustVolume += 0.5; - } - else if (0 > adjustVolume) - { - adjustVolume -= 0.5; - } - iVerticalSlider->SetPosition(-adjustVolume); - } - } - - iHorizontalSlider->MakeVisible(EFalse); - iVerticalSlider->MakeVisible(ETrue); - } - else - { - iHorizontalSlider->MakeVisible(EFalse); - iVerticalSlider->MakeVisible(EFalse); - } - - if ( iSelectionMode == EModeSlowMotion ) - { - ArrowsControl(); - } - - else - { - iInfoDisplay->SetSlowMotionOn( EFalse ); - switch(iSelectionMode) - { - case EModeRecordingSetStart: - iEffectSymbols->MakeVisible( ETrue ); - iEffectSymbols->SetPauseAudioIconVisibility( EFalse ); - iEffectSymbols->SetRecAudioIconVisibility( EFalse ); - break; - case EModeRecordingPaused: - iEffectSymbols->MakeVisible( ETrue ); - iInfoDisplay->SetLayout( CVeiTextDisplay::ERecordingPaused ); - iEffectSymbols->SetRecAudioIconVisibility( EFalse ); - iEffectSymbols->SetPauseAudioIconVisibility( ETrue ); - iEffectSymbols->DrawNow(); - break; - case EModeRecording: - iEffectSymbols->MakeVisible( ETrue ); - iEffectSymbols->SetPauseAudioIconVisibility( EFalse ); - iEffectSymbols->SetRecAudioIconVisibility( ETrue ); - break; - default: - iEffectSymbols->SetPauseAudioIconVisibility( EFalse ); - iEffectSymbols->SetRecAudioIconVisibility( EFalse ); - if ( !iFullScreenSelected ) - { - if ( VideoEditorUtils::IsLandscapeScreenOrientation() ) //Landscape - { - iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything ); - } - else - { - iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration ); - } - } - break; - } - } - - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::SetSelectionMode: Out"); - } - -TTypeUid::Ptr CVeiEditVideoContainer::MopSupplyObject( TTypeUid aId ) - { - if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext ) - { - return MAknsControlContext::SupplyMopObject( aId, iBgContext ); - } - return CCoeControl::MopSupplyObject( aId ); - } -// --------------------------------------------------------- -// CVeiEditVideoContainer::Draw(const TRect& aRect) const -// --------------------------------------------------------- -// -void CVeiEditVideoContainer::Draw( const TRect& /*aRect*/ ) const - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::Draw() In, iPreviewState:%d", iPreviewState); - CWindowGc& gc = SystemGc(); - - if(iBlackScreen) - { - gc.Clear( Rect() ); - gc.SetPenStyle( CWindowGc::ESolidPen ); - gc.SetBrushColor( KRgbBlack ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.DrawRect( Rect() ); - gc.SetPenStyle( CWindowGc::ESolidPen ); - gc.DrawRoundRect( Rect(), TSize(4,4)); - } - else - { - // Draw skin background - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - AknsDrawUtils::Background( skin, cc, this, gc, Rect() ); - - if ( EStatePaused == iPreviewState ) - { - gc.BitBltMasked( iPauseIconBox.iTl, iPauseBitmap, - TRect( TPoint(0,0), iPauseBitmap->SizeInPixels() ), - iPauseBitmapMask, EFalse ); - } - - if (EModeMixingAudio == iSelectionMode && CVeiEditVideoView::EMixAudio != iView.EditorState()) - { - iHorizontalSlider->MakeVisible(EFalse); - } - else if (EModeMixingAudio == iSelectionMode && CVeiEditVideoView::EMixAudio == iView.EditorState()) - { - iHorizontalSlider->MakeVisible(ETrue); - TPoint mixAudioVideoIconPoint(iHorizontalSliderPoint.iX, iHorizontalSliderPoint.iY + 20); - TRect videoTrackIconSourceRect(0, 0, iVideoTrackIcon->SizeInPixels().iWidth, - iVideoTrackIcon->SizeInPixels().iHeight); - gc.BitBltMasked( mixAudioVideoIconPoint, iVideoTrackIcon, videoTrackIconSourceRect, - iVideoTrackIconMask, EFalse); - - TPoint mixAudioAudioIconPoint(iHorizontalSliderPoint.iX + - iHorizontalSliderSize.iWidth - 15, iHorizontalSliderPoint.iY + 20); - TRect audioTrackIconSourceRect(0, 0, iAudioTrackIcon->SizeInPixels().iWidth, - iAudioTrackIcon->SizeInPixels().iHeight); - gc.BitBltMasked(mixAudioAudioIconPoint, iAudioTrackIcon, audioTrackIconSourceRect, - iAudioTrackIconMask, EFalse); - - return; - } - - else if (EModeAdjustVolume == iSelectionMode && CVeiEditVideoView::EAdjustVolume != iView.EditorState()) - { - iVerticalSlider->MakeVisible(EFalse); - } - else if (EModeAdjustVolume == iSelectionMode && CVeiEditVideoView::EAdjustVolume && iView.EditorState()) - { - iVerticalSlider->MakeVisible(ETrue); - TPoint pluspoint(iVerticalSliderPoint.iX - 12, iVerticalSliderPoint.iY + 20); - TPoint minuspoint(iVerticalSliderPoint.iX - 12, iVerticalSliderPoint.iY + iVerticalSliderSize.iHeight); - _LIT(KPlus, "+"); - _LIT(KMinus, "-"); - - const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - gc.UseFont( font ); - - // Get text color from skin - TRgb textColor( KRgbBlack ); - MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); - AknsUtils::GetCachedColor(skinInstance, textColor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); - gc.SetPenColor( textColor ); - - gc.DrawText( KPlus, pluspoint ); - gc.DrawText( KMinus, minuspoint ); - - gc.DiscardFont(); - - return; - } - - /* Initialize icon & text areas. */ - - CFbsBitmap* thumbnail = 0; - - TInt i; - - TSize roundEdgeSize(2,2); - - /* Draw bar area. */ - - TRgb rgbUnselectedBorder = TRgb( 132,132,132 ); - - TRgb rgbUnselectedTrackFill = TRgb(221,221,221); - TRgb rgbUnselectedTrackBorder = TRgb( 201,201,201 ); - TRgb rgbUnselectedTrackBorderOuterRect = TRgb( 162,162,162 ); - - TRgb rgbUnselectedAudioMarker = KRgbWhite; - - TRgb rgbUnselectedClip = TRgb( 140,166,198 ); - - TRgb rgbUnselectedTransition = KRgbWhite; - TRgb rgbSelectedBorder = TRgb( 94,97,101 ); - TRgb rgbSelectedAudioMarker = KRgbBlack; - TRgb rgbSelectedClip = TRgb( 108,139,182 ); - TRgb rgbSelectedTransition = TRgb( 0x00, 0x9b, 0xff ); - TRgb rgbActiveBorder = KRgbRed; - TRgb rgbActiveAudioMarker = KRgbRed; - TRgb rgbActiveClip = TRgb( 140,166,198 ); - - TRect videoTrackIconSourceRect(0, 0, iVideoTrackIcon->SizeInPixels().iWidth, - iVideoTrackIcon->SizeInPixels().iHeight); - - gc.BitBltMasked( iVideoBarIconPos, iVideoTrackIcon, videoTrackIconSourceRect, - iVideoTrackIconMask, EFalse); - - TRect audioTrackIconSourceRect(0, 0, iAudioTrackIcon->SizeInPixels().iWidth, - iAudioTrackIcon->SizeInPixels().iHeight); - gc.BitBltMasked(iAudioBarIconPos, iAudioTrackIcon, audioTrackIconSourceRect, - iAudioTrackIconMask, EFalse); - - gc.SetPenStyle( CGraphicsContext::ESolidPen ); - gc.SetPenColor( rgbUnselectedTrackBorderOuterRect ); - gc.SetBrushColor( rgbUnselectedTrackFill ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - - if ( ( iMovie.VideoClipCount() == 0 ) && ( iCursorLocation != ECursorOnAudio ) && - ( iCursorLocation != ECursorOnEmptyAudioTrack ) || - ( iCursorLocation == ECursorOnEmptyVideoTrack ) ) - { - gc.SetPenColor(rgbSelectedBorder); - gc.SetBrushColor( TRgb( 180,206,238 ) ); - } - - gc.DrawRoundRect(iVideoTrackBox, TSize(2,2)); - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - gc.SetPenColor(rgbUnselectedTrackBorder); - TRect outerRect(iVideoTrackBox); - outerRect.Shrink(1,1); - gc.DrawRoundRect(outerRect, TSize(2,2) ); - - - gc.SetPenColor( rgbUnselectedTrackBorderOuterRect ); - gc.SetBrushColor( rgbUnselectedTrackFill ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - - if (((iMovie.AudioClipCount() == 0) && (iCursorLocation == ECursorOnAudio) )|| - ( iCursorLocation == ECursorOnEmptyAudioTrack ) ) - { - gc.SetPenColor(rgbSelectedBorder); - gc.SetBrushColor( TRgb( 180,206,238 ) ); - } - - gc.DrawRoundRect(iAudioTrackBox, TSize(2,2)); - - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - gc.SetPenColor(rgbUnselectedTrackBorder); - outerRect = iAudioTrackBox; - outerRect.Shrink(1,1); - gc.DrawRoundRect(outerRect, TSize(2,2) ); - - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - - TInt64 barDuration = iMovie.Duration().Int64(); - TInt64 audioDuration(0); - if ( (iMovie.AudioClipCount() != 0) && ((iSelectionMode == EModeRecording ) || - (iSelectionMode == EModeRecordingPaused))) - { - audioDuration = (iMovie.AudioClipEndTime( iMovie.AudioClipCount() - 1 )).Int64(); - } - - audioDuration+= iRecordedAudioDuration.Int64(); - - if ( audioDuration > barDuration ) - { - barDuration = audioDuration; - } - - if ( iRecordedAudioStartTime > barDuration ) - { - barDuration = iRecordedAudioStartTime.Int64(); - } - if (barDuration < 30000000) - { - barDuration = 30000000; - } - else if (barDuration < 45000000) - { - barDuration = 45000000; - } - else{ - barDuration = ((barDuration / 30000000) + 1) * 30000000; - } - - TBool drawSelectedRect = EFalse; - TInt selectedAudioClipIndex( -1 ); - TRect selectedRect; - - gc.SetPenColor(rgbUnselectedBorder); - gc.SetBrushColor(rgbUnselectedClip); - - TRect audioBoxes = TRect(); - - TRect box; - box.iTl.iY = iAudioBarBox.iTl.iY; - box.iBr.iY = iAudioBarBox.iBr.iY; - TInt barWidth = iAudioBarBox.Width(); - TInt videoIndex = 0; - - for (i = 0; i < iMovie.AudioClipCount(); i++) - { - box.iTl.iX = iAudioBarBox.iTl.iX - + static_cast((iMovie.AudioClipStartTime(i).Int64() * barWidth) / - barDuration); - box.iBr.iX = iAudioBarBox.iTl.iX - + static_cast((iMovie.AudioClipEndTime(i).Int64() * barWidth) / barDuration)+ 1; - - if ((iCursorLocation == ECursorOnAudio) - && (i == CurrentIndex()) && (( iSelectionMode == EModeNavigation ) - || ( iSelectionMode == EModeMove ) || - ( iSelectionMode == EModeDuration ) )) - { - drawSelectedRect = ETrue; - selectedAudioClipIndex = i; - selectedRect = box; - } - else - { - gc.DrawRect(box); - - gc.SetPenColor(rgbUnselectedAudioMarker); - - audioBoxes.Resize( box.Size() ); - - if ( ( iMovie.AudioClipCutOutTime( i ).Int64() - - iMovie.AudioClipCutInTime( i ).Int64() ) < - iMovie.AudioClipInfo( i )->Duration().Int64() ) - { - TRect truncateBox; - truncateBox.iTl.iY = box.iTl.iY + 2; - truncateBox.iBr.iY = box.iBr.iY - 2; - - truncateBox.iTl.iX = box.iBr.iX - 4; - truncateBox.iBr.iX = truncateBox.iTl.iX + 1; - if (truncateBox.iTl.iX >= (box.iTl.iX + 2)) - { - gc.DrawRect(truncateBox); - } - - truncateBox.iTl.iX = box.iBr.iX - 7; - truncateBox.iBr.iX = truncateBox.iTl.iX + 1; - if (truncateBox.iTl.iX >= (box.iTl.iX + 2)) - { - gc.DrawRect(truncateBox); - } - - truncateBox.iTl.iX = box.iBr.iX - 10; - truncateBox.iBr.iX = truncateBox.iTl.iX + 1; - if (truncateBox.iTl.iX >= (box.iTl.iX + 2)) - { - gc.DrawRect(truncateBox); - } - } - - gc.SetPenColor(rgbUnselectedBorder); - } - - TTimeIntervalMicroSeconds audioClipStartTimeInt = iMovie.AudioClipStartTime(i).Int64() + iMovie.AudioClipCutInTime(i).Int64(); - TTimeIntervalMicroSeconds audioClipEndTimeInt = iMovie.AudioClipEndTime(i).Int64(); - - if ((audioClipStartTimeInt == TTimeIntervalMicroSeconds(0)) && (iMovie.VideoClipCount() > 0)) - { - TRect syncBox; - syncBox.iTl.iX = box.iTl.iX; - syncBox.iTl.iY = iVideoBarBox.iBr.iY; - syncBox.iBr.iX = box.iTl.iX + 1; - syncBox.iBr.iY = iAudioBarBox.iTl.iY; - - gc.DrawRect(syncBox); - } - - while (videoIndex < iMovie.VideoClipCount()) - { - TInt oldIndex = videoIndex; - if ( iMovie.VideoClipEndTime( oldIndex ) < audioClipStartTimeInt ) - { - videoIndex++; - } - else if ( iMovie.VideoClipEndTime( oldIndex ) == audioClipStartTimeInt ) - { - TRect syncBox; - syncBox.iTl.iX = box.iTl.iX; - syncBox.iTl.iY = iVideoBarBox.iBr.iY; - syncBox.iBr.iX = box.iTl.iX + 1; - syncBox.iBr.iY = iAudioBarBox.iTl.iY; - - gc.DrawRect(syncBox); - break; - } - else - { - break; - } - } - - while (videoIndex < iMovie.VideoClipCount()) - { - TInt oldIndex = videoIndex; - - if ( iMovie.VideoClipEndTime( oldIndex ) < audioClipEndTimeInt ) - { - videoIndex++; - } - else if ( iMovie.VideoClipEndTime( oldIndex ) == audioClipEndTimeInt ) - { - TRect syncBox; - syncBox.iTl.iX = box.iBr.iX - 1; - syncBox.iTl.iY = iVideoBarBox.iBr.iY; - syncBox.iBr.iX = box.iBr.iX; - syncBox.iBr.iY = iAudioBarBox.iTl.iY; - - gc.DrawRect(syncBox); - break; - } - else - { - break; - } - } - } - - if ((iSelectionMode == EModeRecordingSetStart) || (iSelectionMode == EModeRecording) - || (iSelectionMode == EModeRecordingPaused)) - { - box.iTl.iX = iAudioBarBox.iTl.iX - + static_cast((iRecordedAudioStartTime.Int64() * barWidth) / barDuration); - TInt64 recordedAudioEndTimeInt = iRecordedAudioStartTime.Int64() + iRecordedAudioDuration.Int64(); - box.iBr.iX = iAudioBarBox.iTl.iX - + static_cast((recordedAudioEndTimeInt * barWidth) / barDuration)+ 1; - - gc.SetPenColor(rgbActiveBorder); - gc.SetBrushColor(rgbSelectedClip); - gc.DrawRect(box); - gc.SetPenColor(rgbUnselectedBorder); - gc.SetBrushColor(rgbUnselectedClip); - } - - box.iTl.iY = iVideoBarBox.iTl.iY; - box.iBr.iY = iVideoBarBox.iBr.iY; - barWidth = iVideoBarBox.Width(); - - TRect videoBoxes = TRect(); - - for (i = 0; i < iMovie.VideoClipCount(); i++) - { - box.iTl.iX = iVideoBarBox.iTl.iX - + static_cast((iMovie.VideoClipStartTime( i ).Int64() * barWidth) / barDuration); - box.iBr.iX = iVideoBarBox.iTl.iX - + static_cast((iMovie.VideoClipEndTime( i ).Int64() * barWidth) / barDuration)+ 1; - - videoBoxes.Resize( box.Size() ); - - if ((iCursorLocation == ECursorOnClip) - && (i == CurrentIndex()) && ( iView.EditorState() == CVeiEditVideoView::EEdit )) - { - drawSelectedRect = ETrue; - selectedRect = box; - gc.DrawRect(box); - } - else - { - gc.DrawRect(box); - //Draw thumbnail in video box. - if ( i < iVideoItemArray.Count() ) - { - thumbnail = iVideoItemArray[i]->iTimelineBitmap; - } - if ( thumbnail ) - { - //TSize thumbnailSizeInPixels = thumbnail->SizeInPixels(); - TPoint pos( box.iTl.iX+1, box.iTl.iY+1 ); - TSize pieceSize = TSize(STATIC_CAST(TInt, (box.Height()-2)*1.22), box.Height()-2); - - if ( pieceSize.iWidth >= box.Width()-2 ) - { - pieceSize.SetSize( box.Width()-2, box.Height()-2 ); - } - TRect pieceRect( TPoint(0,0), pieceSize ); - gc.BitBlt( pos, thumbnail, pieceRect ); - } - - - //Draw play head. - if( iPreviewState == EStatePaused || iPreviewState == EStateStopped) - { - TRect bar( iBarArea );//bar rect. - - const TUint barY = 6; - - bar.iTl.iY += barY; - bar.iTl.iX += barY; - bar.iTl.iX += iVideoTrackIcon->SizeInPixels().iWidth; - bar.iBr.iY -= barY / 2; - bar.iBr.iX -= barY; - - - gc.SetBrushColor( KRgbBlack ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.SetPenColor( KRgbDarkGray ); - gc.SetPenStyle( CGraphicsContext::ESolidPen ); - - TPoint inPointList[3]; - inPointList[0] = TPoint( (iCurrentPointX - barY) + 1, iBarArea.iTl.iY - 5 ); - inPointList[1] = TPoint( (iCurrentPointX + barY) - 1, iBarArea.iTl.iY - 5 ); - inPointList[2] = TPoint( iCurrentPointX, bar.iTl.iY - 6 ); - gc.DrawPolygon( inPointList, 3 ); - - inPointList[0] = TPoint( (iCurrentPointX - barY) + 1, iBarArea.iBr.iY + 5 ); - inPointList[1] = TPoint( (iCurrentPointX + barY) - 1, iBarArea.iBr.iY + 5 ); - inPointList[2] = TPoint( iCurrentPointX, bar.iBr.iY ); - gc.DrawPolygon( inPointList, 3 ); - - gc.SetPenSize( TSize( 3, 1 ) ); - gc.DrawLine( TPoint( iCurrentPointX, bar.iTl.iY - 5 ), - TPoint( iCurrentPointX, bar.iBr.iY ) ); - - gc.SetPenColor(rgbUnselectedBorder); - gc.SetBrushColor(rgbUnselectedClip); - gc.SetPenSize( TSize( 1, 1 ) ); - } - } - } - - if (drawSelectedRect) - { - selectedRect.Grow( iZoomFactorX,iZoomFactorY ); - - - TRect outerBlackRect = selectedRect; - outerBlackRect.Grow(1,1); - gc.SetPenColor( KRgbBlack ); - gc.SetPenStyle( CGraphicsContext::ESolidPen ); - gc.DrawRoundRect( outerBlackRect, TSize(2,2) ); - - - if (iSelectionMode == EModeMove ) //Move, draw dashed outline - { - gc.SetPenStyle( CGraphicsContext::EDashedPen ); - gc.SetPenColor( KRgbBlack ); - gc.SetBrushColor(rgbActiveClip); - } - else - { - gc.SetPenColor(rgbSelectedBorder); - gc.SetBrushColor(rgbSelectedClip); - } - - gc.DrawRoundRect( selectedRect,roundEdgeSize ); - - selectedRect.Shrink(2,2); - gc.DrawBitmap( selectedRect, iGradientBitmap ); - - //Draw thumbnail in video box - if ( iCursorLocation == ECursorOnClip ) - { - selectedRect.Grow(2,2); - - thumbnail = iVideoItemArray[CurrentIndex()]->iTimelineBitmap; - if ( thumbnail ) - { - TPoint pos( selectedRect.iTl.iX+1, selectedRect.iTl.iY+1 ); - TSize pieceSize = TSize(STATIC_CAST(TInt, (selectedRect.Height()-2)*1.22), - selectedRect.Height()-2); - - if ( pieceSize.iWidth >= selectedRect.Width()-2 ) - { - pieceSize.SetSize( selectedRect.Width()-2, selectedRect.Height()-2 ); - } - TRect pieceRect( TPoint(0,0), pieceSize ); - gc.BitBlt( pos, thumbnail, pieceRect ); - } - } - drawSelectedRect = EFalse; - - if (iSelectionMode == EModeNavigation) - { - gc.SetPenColor(rgbSelectedAudioMarker); - } - else - { - gc.SetPenColor(rgbActiveAudioMarker); - } - - if ((selectedAudioClipIndex != -1) && - ( ( iMovie.AudioClipCutOutTime( selectedAudioClipIndex ).Int64() - - iMovie.AudioClipCutInTime( selectedAudioClipIndex ).Int64() ) < - iMovie.AudioClipInfo( selectedAudioClipIndex )->Duration().Int64() ) ) - { - TRect truncateBox; - truncateBox.iTl.iY = selectedRect.iTl.iY + 2; - truncateBox.iBr.iY = selectedRect.iBr.iY - 2; - - truncateBox.iTl.iX = selectedRect.iBr.iX - 4; - truncateBox.iBr.iX = truncateBox.iTl.iX + 1; - if (truncateBox.iTl.iX >= (selectedRect.iTl.iX + 2)) - { - gc.DrawRect(truncateBox); - } - - truncateBox.iTl.iX = selectedRect.iBr.iX - 7; - truncateBox.iBr.iX = truncateBox.iTl.iX + 1; - if (truncateBox.iTl.iX >= (selectedRect.iTl.iX + 2)) - { - gc.DrawRect(truncateBox); - } - - truncateBox.iTl.iX = selectedRect.iBr.iX - 10; - truncateBox.iBr.iX = truncateBox.iTl.iX + 1; - if (truncateBox.iTl.iX >= (selectedRect.iTl.iX + 2)) - { - gc.DrawRect(truncateBox); - } - } - } - - gc.SetPenStyle(CGraphicsContext::ESolidPen); - gc.SetPenColor(rgbUnselectedBorder); - gc.SetBrushColor(rgbUnselectedTransition); - - box.iTl.iY += (box.Height() - iTransitionMarkerSize.iHeight) / 2; - box.iBr.iY = box.iTl.iY + iTransitionMarkerSize.iHeight; - for (i = iMovie.VideoClipCount(); (i >= 0) && (iMovie.VideoClipCount() > 0); i--) - { - if ((i == 0) && (iMovie.VideoClipCount() > 0)) - { - box.iTl.iX = iVideoBarBox.iTl.iX - - (iTransitionMarkerSize.iWidth / 2); - } - else - { - box.iTl.iX = iVideoBarBox.iTl.iX - + static_cast((iMovie.VideoClipEndTime( i-1 ).Int64() * barWidth) / barDuration) - - (iTransitionMarkerSize.iWidth / 2); - } - - box.iBr.iX = box.iTl.iX + iTransitionMarkerSize.iWidth; - - if ((iCursorLocation == ECursorOnTransition) && (i == CurrentIndex() ) ) - { - drawSelectedRect = ETrue; - selectedRect = box; - } - else - { - if ( (iCursorLocation == ECursorOnClip) && (i == CurrentIndex() ) &&( iSelectionMode != EModePreview ) ) - { - box.Move( -iZoomFactorX,0); - box.Grow(0,iZoomFactorX/2); - gc.DrawRect(box); - box.Shrink(0,iZoomFactorX/2); - box.Move( iZoomFactorX,0 ); - } - else if ( (iCursorLocation == ECursorOnClip) && (i == CurrentIndex()+1 ) && ( iSelectionMode != EModePreview ) ) - { - box.Move( iZoomFactorX,0 ); - box.Grow(0,iZoomFactorX/2); - gc.DrawRect(box); - box.Shrink(0,iZoomFactorX/2); - box.Move( -iZoomFactorX,0 ); - } - else - { - gc.DrawRect(box); - } - } - } - - if (drawSelectedRect) - { - selectedRect.Grow(1,iZoomFactorX/2); - gc.SetPenColor(rgbSelectedBorder); - gc.SetBrushColor(rgbSelectedTransition); - gc.DrawRect(selectedRect); - } - - // draw the new position for the clip when a clip is dragged with touch - if ( iIsVideoDrag ) - { - TRgb rgbSelectedBorder = KRgbDarkMagenta; - TRgb rgbSelectedTransition = KRgbDarkMagenta; - gc.SetPenColor( rgbSelectedBorder ); - gc.SetBrushColor( rgbSelectedTransition ); - - box.iTl.iY = iVideoBarBox.iTl.iY; - box.iBr.iY = iVideoBarBox.iBr.iY; - - // clip is moved from right to left - if ( iClickedClip > iNewClipPosition ) - { - if ( iNewClipPosition == 0 ) - { - box.iTl.iX = iVideoItemRectArray[ iNewClipPosition ].iTl.iX; - box.iBr.iX = iVideoItemRectArray[ iNewClipPosition ].iTl.iX + 5; - } - else - { - box.iTl.iX = iVideoItemRectArray[ iNewClipPosition ].iTl.iX - 5; - box.iBr.iX = iVideoItemRectArray[ iNewClipPosition ].iTl.iX + 5; - } - gc.DrawRect( box ); - } - // clip is moved from left to right - else if ( iClickedClip < iNewClipPosition ) - { - box.iTl.iX = iVideoItemRectArray[ iNewClipPosition ].iBr.iX - 5; - box.iBr.iX = iVideoItemRectArray[ iNewClipPosition ].iBr.iX + 5; - gc.DrawRect( box ); - } - } - }//else - } - -void CVeiEditVideoContainer::HandleResourceChange(TInt aType) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleResourceChange() In, aType:%d", aType); - - if (KAknsMessageSkinChange == aType) - { - HandleComponentControlsResourceChange(aType); - } - CCoeControl::HandleResourceChange(aType); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleResourceChange() Out"); - } - -void CVeiEditVideoContainer::DrawTrackBoxes() const - { - if(!iBlackScreen) - { - TRect drawableRect = iBarArea; - drawableRect.iTl.iX = (iVideoTrackBox.iTl.iX - KMaxZoomFactorX) - 2; - drawableRect.iBr.iX = (iVideoTrackBox.iBr.iX + KMaxZoomFactorX) + 2; - drawableRect.iTl.iY = (iVideoTrackBox.iTl.iY - KMaxZoomFactorY) - 2; - drawableRect.iBr.iY = (iAudioTrackBox.iBr.iY + KMaxZoomFactorY) + 2; - - Window().Invalidate( drawableRect ); - ActivateGc(); - //Redraw of the window's invalid region. - Window().BeginRedraw( drawableRect ); - Draw( drawableRect ); - - Window().EndRedraw(); - DeactivateGc(); - } - } - - - - -// ---------------------------------------------------------------------------- -// CVeiEditVideoContainer::GetHelpContext(...) const -// -// Gets the control's help context. Associates the control with a particular -// Help file and topic in a context sensitive application. -// ---------------------------------------------------------------------------- -// -void CVeiEditVideoContainer::GetHelpContext( TCoeHelpContext& aContext ) const - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetHelpContext(): In"); - - // Set UID of the CS Help file (same as application UID). - aContext.iMajor = KUidVideoEditor; - - // Set the context/topic. - aContext.iContext = KVED_HLP_EDIT_VIDEO_VIEW; - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetHelpContext(): Out"); - } - - -void CVeiEditVideoContainer::ArrowsControl() const - { - - iInfoDisplay->SetLayout( CVeiTextDisplay::EOnlyName ); - iInfoDisplay->SetUpperArrowVisibility( EFalse ); - iInfoDisplay->SetLowerArrowVisibility( EFalse ); - iInfoDisplay->SetRightArrowVisibility( EFalse ); - iInfoDisplay->SetLeftArrowVisibility( EFalse ); - - iArrowsDisplay->MakeVisible( EFalse ); - iArrowsDisplay->SetUpperArrowVisibility( EFalse ); - iArrowsDisplay->SetLowerArrowVisibility( EFalse ); - iArrowsDisplay->SetRightArrowVisibility( EFalse ); - iArrowsDisplay->SetLeftArrowVisibility( EFalse ); - - iInfoDisplay->SetSlowMotionOn( EFalse ); - - iDummyCutBar->MakeVisible( ETrue ); - - if ( iCursorLocation == ECursorOnClip) - { - iInfoDisplay->MakeVisible( ETrue ); - iInfoDisplay->SetRect( iInfoDisplayBox ); - - if( VideoEditorUtils::IsLandscapeScreenOrientation() ) - { - iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything ); - } - else - { - iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration ); - } - - if (iSelectionMode == EModeSlowMotion) - { - iArrowsDisplay->MakeVisible( ETrue ); - - if( !VideoEditorUtils::IsLandscapeScreenOrientation() ) - { - iInfoDisplay->MakeVisible( EFalse ); - } - - iArrowsDisplay->SetSlowMotionOn( ETrue ); - iArrowsDisplay->SetLayout( CVeiTextDisplay::EArrowsHorizontal ); - - iDummyCutBar->MakeVisible( EFalse ); - - if ( iSlowMotionValue < 1000 ) - { - iArrowsDisplay->SetRightArrowVisibility( ETrue ); - } - if ( iSlowMotionValue > 250 ) - { - iArrowsDisplay->SetLeftArrowVisibility( ETrue ); - } - iArrowsDisplay->SetRect( iSlowMotionBox ); - } - else - { - iVideoDisplay->StopAnimation(); - } - } - else if ( iCursorLocation == ECursorOnAudio ) - { - iInfoDisplay->MakeVisible( ETrue ); - iInfoDisplay->SetRect( iInfoDisplayBox ); - - if( VideoEditorUtils::IsLandscapeScreenOrientation() ) - { - iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything ); - } - else - { - iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration ); - } - - } - else if ( iCursorLocation == ECursorOnTransition ) - { - iDummyCutBar->MakeVisible( ETrue ); - iInfoDisplay->MakeVisible( ETrue ); - - iInfoDisplay->SetUpperArrowVisibility( ETrue ); - iInfoDisplay->SetLowerArrowVisibility( ETrue ); - iInfoDisplay->SetLayout( CVeiTextDisplay::EArrowsVertical ); - iInfoDisplay->SetRect( iTransitionArrowsBox ); - } - if ( iView.EditorState() == CVeiEditVideoView::EMixAudio || - iView.EditorState() == CVeiEditVideoView::EAdjustVolume) - { - iDummyCutBar->MakeVisible( EFalse ); - } - - if ( iView.EditorState() == CVeiEditVideoView::EMixAudio) - { - iInfoDisplay->MakeVisible(EFalse); - } - if ( iView.EditorState() == CVeiEditVideoView::EAdjustVolume) - { - iInfoDisplay->MakeVisible(ETrue); - } - } - -void CVeiEditVideoContainer::DrawPlayHead() - { - CFbsBitmap* thumbnail = 0; - TRect redrawArea = TRect(iVideoBarIconPos.iX+iVideoTrackIcon->SizeInPixels().iWidth, - iBarArea.iTl.iY - 5, iBarArea.iBr.iX, iBarArea.iBr.iY + 10 ); - - Window().Invalidate( redrawArea ); - ActivateGc(); - //Redraw of the window's invalid region. - Window().BeginRedraw( redrawArea ); - CWindowGc& gc = SystemGc(); - - // Draw skin background - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - AknsDrawUtils::Background( skin, cc, this, gc, Rect() ); - - /* Draw bar area. */ - TInt i; - TRgb rgbUnselectedBorder = TRgb( 132,132,132 ); - TRgb rgbUnselectedTrackFill = TRgb(221,221,221); - TRgb rgbUnselectedTrackBorder = TRgb( 201,201,201 ); - TRgb rgbUnselectedTrackBorderOuterRect = TRgb( 162,162,162 ); - - TRgb rgbUnselectedAudioMarker = KRgbWhite; - TRgb rgbUnselectedClip = TRgb( 140,166,198 ); - TRgb rgbUnselectedTransition = KRgbWhite; - - gc.SetPenStyle( CGraphicsContext::ESolidPen ); - gc.SetPenColor( rgbUnselectedTrackBorderOuterRect ); - gc.SetBrushColor( rgbUnselectedTrackFill ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.DrawRoundRect(iVideoTrackBox, TSize(2,2)); - - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - gc.SetPenColor( rgbUnselectedTrackBorder ); - TRect outerRect( iVideoTrackBox ); - outerRect.Shrink(1,1); - gc.DrawRoundRect(outerRect, TSize(2,2) ); - - gc.SetPenColor( rgbUnselectedTrackBorderOuterRect ); - gc.SetBrushColor( rgbUnselectedTrackFill ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.DrawRoundRect(iAudioTrackBox, TSize(2,2)); - - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - gc.SetPenColor(rgbUnselectedTrackBorder); - outerRect = iAudioTrackBox; - outerRect.Shrink(1,1); - gc.DrawRoundRect(outerRect, TSize(2,2) ); - - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - - TInt64 barDuration = iMovie.Duration().Int64(); - TInt64 audioDuration(0); - if ( (iMovie.AudioClipCount() != 0) && (iSelectionMode == EModeRecording )) - { - audioDuration = (iMovie.AudioClipEndTime( iMovie.AudioClipCount() - 1 )).Int64(); - } - - audioDuration+= iRecordedAudioDuration.Int64(); - - if ( audioDuration > barDuration ) - { - barDuration = audioDuration; - } - - if ( iRecordedAudioStartTime > barDuration ) - { - barDuration = iRecordedAudioStartTime.Int64(); - } - if (barDuration < 30000000) - { - barDuration = 30000000; - } - else if (barDuration < 45000000) - { - barDuration = 45000000; - } - else{ - barDuration = ((barDuration / 30000000) + 1) * 30000000; - } - - gc.SetPenColor(rgbUnselectedBorder); - gc.SetBrushColor(rgbUnselectedClip); - - TRect audioBoxes = TRect(0,0,0,0); - - TRect box; - box.iTl.iY = iAudioBarBox.iTl.iY; - box.iBr.iY = iAudioBarBox.iBr.iY; - TInt barWidth = iAudioBarBox.Width(); - TInt videoIndex = 0; - - for (i = 0; i < iMovie.AudioClipCount(); i++) - { - box.iTl.iX = iAudioBarBox.iTl.iX - + static_cast((iMovie.AudioClipStartTime(i).Int64() * barWidth) / - barDuration); - box.iBr.iX = iAudioBarBox.iTl.iX - + static_cast((iMovie.AudioClipEndTime(i).Int64() * barWidth) / barDuration)+ 1; - - { - gc.DrawRect(box); - - gc.SetPenColor(rgbUnselectedAudioMarker); - - audioBoxes = box; - - gc.SetPenColor(rgbUnselectedAudioMarker); - - if ( ( iMovie.AudioClipCutOutTime( i ).Int64() - - iMovie.AudioClipCutInTime( i ).Int64() ) < - iMovie.AudioClipInfo( i )->Duration().Int64() ) - { - TRect truncateBox; - truncateBox.iTl.iY = box.iTl.iY + 2; - truncateBox.iBr.iY = box.iBr.iY - 2; - - truncateBox.iTl.iX = box.iBr.iX - 4; - truncateBox.iBr.iX = truncateBox.iTl.iX + 1; - if (truncateBox.iTl.iX >= (box.iTl.iX + 2)) - { - gc.DrawRect(truncateBox); - } - - truncateBox.iTl.iX = box.iBr.iX - 7; - truncateBox.iBr.iX = truncateBox.iTl.iX + 1; - if (truncateBox.iTl.iX >= (box.iTl.iX + 2)) - { - gc.DrawRect(truncateBox); - } - - truncateBox.iTl.iX = box.iBr.iX - 10; - truncateBox.iBr.iX = truncateBox.iTl.iX + 1; - if (truncateBox.iTl.iX >= (box.iTl.iX + 2)) - { - gc.DrawRect(truncateBox); - } - } - - gc.SetPenColor(rgbUnselectedBorder); - } - - TTimeIntervalMicroSeconds audioClipStartTimeInt = iMovie.AudioClipStartTime(i).Int64() + iMovie.AudioClipCutInTime(i).Int64(); - TTimeIntervalMicroSeconds audioClipEndTimeInt = iMovie.AudioClipEndTime(i).Int64(); - - if ((audioClipStartTimeInt == TTimeIntervalMicroSeconds(0)) && (iMovie.VideoClipCount() > 0)) - { - TRect syncBox; - syncBox.iTl.iX = box.iTl.iX; - syncBox.iTl.iY = iVideoBarBox.iBr.iY; - syncBox.iBr.iX = box.iTl.iX + 1; - syncBox.iBr.iY = iAudioBarBox.iTl.iY; - - gc.DrawRect(syncBox); - } - - while (videoIndex < iMovie.VideoClipCount()) - { - TInt oldIndex = videoIndex; - if ( iMovie.VideoClipEndTime( oldIndex ) < audioClipStartTimeInt ) - { - videoIndex++; - } - else if ( iMovie.VideoClipEndTime( oldIndex ) == audioClipStartTimeInt ) - { - TRect syncBox; - syncBox.iTl.iX = box.iTl.iX; - syncBox.iTl.iY = iVideoBarBox.iBr.iY; - syncBox.iBr.iX = box.iTl.iX + 1; - syncBox.iBr.iY = iAudioBarBox.iTl.iY; - - gc.DrawRect(syncBox); - break; - } - else - { - break; - } - } - - while (videoIndex < iMovie.VideoClipCount()) - { - TInt oldIndex = videoIndex; - - if ( iMovie.VideoClipEndTime( oldIndex ) < audioClipEndTimeInt ) - { - videoIndex++; - } - else if ( iMovie.VideoClipEndTime( oldIndex ) == audioClipEndTimeInt ) - { - TRect syncBox; - syncBox.iTl.iX = box.iBr.iX - 1; - syncBox.iTl.iY = iVideoBarBox.iBr.iY; - syncBox.iBr.iX = box.iBr.iX; - syncBox.iBr.iY = iAudioBarBox.iTl.iY; - - gc.DrawRect(syncBox); - break; - } - else - { - break; - } - } - } - - box.iTl.iY = iVideoBarBox.iTl.iY; - box.iBr.iY = iVideoBarBox.iBr.iY; - barWidth = iVideoBarBox.Width(); - - - TRect videoBoxes = TRect(); - - for (i = 0; i < iMovie.VideoClipCount(); i++) - { - box.iTl.iX = iVideoBarBox.iTl.iX - + static_cast((iMovie.VideoClipStartTime( i ).Int64() * barWidth) / barDuration); - box.iBr.iX = iVideoBarBox.iTl.iX - + static_cast((iMovie.VideoClipEndTime( i ).Int64() * barWidth) / barDuration) + 1; - - videoBoxes.Resize( box.Size() ); - - gc.DrawRect(box); - //Draw thumbnail in video boxes on the timeline. - thumbnail = iVideoItemArray[i]->iTimelineBitmap; - if ( thumbnail ) - { - TPoint pos( box.iTl.iX+1, box.iTl.iY+1 ); - - TSize pieceSize = TSize(STATIC_CAST(TInt, (box.Height()-2)*1.22), box.Height()-2); - - if ( pieceSize.iWidth >= box.Width()-2 ) - { - pieceSize.SetSize( box.Width()-2, box.Height()-2 ); - } - TRect pieceRect( TPoint(0,0), pieceSize ); - gc.BitBlt( pos, thumbnail, pieceRect ); - } - } - - gc.SetPenStyle(CGraphicsContext::ESolidPen); - gc.SetPenColor(rgbUnselectedBorder); - gc.SetBrushColor(rgbUnselectedTransition); - - box.iTl.iY += (box.Height() - iTransitionMarkerSize.iHeight) / 2; - box.iBr.iY = box.iTl.iY + iTransitionMarkerSize.iHeight; - for (i = iMovie.VideoClipCount(); (i >= 0) && (iMovie.VideoClipCount() > 0); i--) - { - if ((i == 0) && (iMovie.VideoClipCount() > 0)) - { - box.iTl.iX = iVideoBarBox.iTl.iX - - (iTransitionMarkerSize.iWidth / 2); - } - else - { - box.iTl.iX = iVideoBarBox.iTl.iX - + static_cast((iMovie.VideoClipEndTime( i-1 ).Int64() * barWidth) / barDuration) - - (iTransitionMarkerSize.iWidth / 2); - } - - box.iBr.iX = box.iTl.iX + iTransitionMarkerSize.iWidth; - - - gc.DrawRect(box); - } - - //Draw play head. - TRect bar( iBarArea );//bar rect. - const TUint barY = 6; - TUint width = videoBoxes.Width(); - TInt audioTrackWidth(0); - if ( audioBoxes.iBr.iX > 0 ) - { - audioTrackWidth = audioBoxes.iBr.iX - iAudioTrackBox.iTl.iX; - } - - if ( videoBoxes.Width() >= audioTrackWidth ) - { - width = videoBoxes.Width(); - } - else - { - width = audioTrackWidth; - } - TUint totalTime = static_cast(iMovie.Duration().Int64() /1000);//( iVideoDisplay->TotalLengthL().Int64() / 1000 ).Low(); - - if ( totalTime == 0 ) - { - totalTime = 1; - } - - TInt currentPointX = iCurrentPoint * width / totalTime + iVideoBarBox.iTl.iX; - iCurrentPointX = currentPointX; - - bar.iTl.iY += barY; - bar.iTl.iX += barY; - bar.iTl.iX += iVideoTrackIcon->SizeInPixels().iWidth; - bar.iBr.iY -= barY / 2; - bar.iBr.iX -= barY; - - - gc.SetBrushColor( KRgbBlack ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.SetPenColor( KRgbDarkGray ); - gc.SetPenStyle( CGraphicsContext::ESolidPen ); - - TPoint inPointList[3]; - inPointList[0] = TPoint( currentPointX - barY + 1, iBarArea.iTl.iY - 5 ); - inPointList[1] = TPoint( currentPointX + barY - 1, iBarArea.iTl.iY - 5 ); - inPointList[2] = TPoint( currentPointX, bar.iTl.iY - 6 ); - gc.DrawPolygon( inPointList, 3 ); - - inPointList[0] = TPoint( currentPointX - barY + 1, iBarArea.iBr.iY + 5 ); - inPointList[1] = TPoint( currentPointX + barY - 1, iBarArea.iBr.iY + 5 ); - inPointList[2] = TPoint( currentPointX, bar.iBr.iY ); - gc.DrawPolygon( inPointList, 3 ); - - gc.SetPenSize( TSize( 3, 1 ) ); - gc.DrawLine( TPoint( currentPointX, bar.iTl.iY - 5 ), - TPoint( currentPointX, bar.iBr.iY ) ); - - Window().EndRedraw(); - DeactivateGc(); - } - -void CVeiEditVideoContainer::DialogDismissedL( TInt aButtonId ) - { - iTakeSnapshot = EFalse; - if ( aButtonId == -1 ) - { - // when pressing cancel button. - /*if ( iTempVideoInfo && !iFrameReady) - { - iTempVideoInfo->CancelFrame(); - } - */ - CancelSnapshotSave(); - } - } - -void CVeiEditVideoContainer::CancelSnapshotSave() - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::CancelSnapshotSave: in"); - if ( iConverter ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::CancelSnapshotSave: 1"); - iConverter->Cancel(); - iConverter->CancelEncoding(); //also close the file - } - if ( iSaveToFileName ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::CancelSnapshotSave: 2, iSaveToFileName:%S", iSaveToFileName); - - RFs& fs = iEikonEnv->FsSession(); - TInt result = fs.Delete( *iSaveToFileName ); - delete iSaveToFileName; - iSaveToFileName = NULL; - } - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::CancelSnapshotSave: out"); - } - -void CVeiEditVideoContainer::SetCurrentIndex( TInt aCurrentIndex ) - { - if ( (iCursorLocation == ECursorOnAudio) || - (iCursorLocation == ECursorOnEmptyAudioTrack) ) - { - iAudioCursorPos = aCurrentIndex; - } - else - { - iVideoCursorPos = aCurrentIndex; - } - } - -void CVeiEditVideoContainer::NotifyVideoClipAdded( CVedMovie& /*aMovie*/, - TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipAdded: in"); - - CStoryboardVideoItem* item=0; - - if ( iView.WaitMode() == CVeiEditVideoView::EDuplicating ) - { - TTimeIntervalMicroSeconds cutInTime = iMovie.VideoClipCutInTime( aIndex - 1 ); - TTimeIntervalMicroSeconds cutOutTime = iMovie.VideoClipCutOutTime( aIndex - 1 ); - - iMovie.VideoClipSetColorEffect( aIndex, iMovie.VideoClipColorEffect( aIndex - 1 ) ); - iMovie.VideoClipSetColorTone( aIndex, iMovie.VideoClipColorTone( aIndex - 1 ) ); - iMovie.SetVideoClipVolumeGainL(aIndex, iMovie.GetVideoClipVolumeGainL(aIndex - 1)); - - iMovie.VideoClipSetSpeed( aIndex, iMovie.VideoClipSpeed( aIndex - 1 ) ); - iMovie.VideoClipSetMuted( aIndex, iMovie.VideoClipIsMuted( aIndex - 1 ) ); - - TBool isFile(iMovie.VideoClipInfo( aIndex )->Class() == EVedVideoClipClassFile); - if ( isFile ) - { - iMovie.VideoClipSetCutInTime( aIndex, cutInTime ); - iMovie.VideoClipSetCutOutTime( aIndex, cutOutTime ); - } - /* Copy bitmaps, names etc. to new storyboarditem. */ - TRAP_IGNORE( item = CStoryboardVideoItem::NewL( - *iVideoItemArray[aIndex-1]->iIconBitmap, - *iVideoItemArray[aIndex-1]->iIconMask, - *iVideoItemArray[aIndex-1]->iFilename, - iVideoItemArray[aIndex-1]->iIsFile, - *iVideoItemArray[aIndex-1]->iAlbumName ) ); - if (item) - { - item->InsertLastFrameL( *iVideoItemArray[aIndex-1]->iLastFrameBitmap, - *iVideoItemArray[aIndex-1]->iLastFrameMask ); - item->InsertTimelineFrameL( *iVideoItemArray[aIndex-1]->iTimelineBitmap, - *iVideoItemArray[aIndex-1]->iTimelineMask ); - - iVideoItemArray.Insert( item, aIndex ); - } - - iVideoCursorPos = aIndex; - iCursorLocation = ECursorOnClip; - DrawDeferred(); - iView.SetWaitMode( CVeiEditVideoView::ENotWaiting ); - SetCursorLocation( CursorLocation() ); - return; - } - - iCurrentlyProcessedIndex = aIndex; - TFileName fileName; - - TBool isFile(iMovie.VideoClipInfo( aIndex )->Class() == EVedVideoClipClassFile); - if ( isFile ) - { - fileName = iMovie.VideoClipInfo( aIndex )->FileName(); - } - else - { - CVedVideoClipInfo* info = iMovie.VideoClipInfo( aIndex ); - - if (info->Class() == EVedVideoClipClassGenerated) - { - if (info->Generator()->Uid() == KUidTitleClipGenerator) - { - fileName = iMovie.VideoClipInfo( aIndex )->DescriptiveName(); - } - else if (info->Generator()->Uid() == KUidImageClipGenerator) - { - CVeiImageClipGenerator* generator = STATIC_CAST(CVeiImageClipGenerator*, info->Generator()); - fileName = generator->ImageFilename(); - } - } - } - - TFileName albumName; - GetAlbumL( fileName, albumName ); - - TRAPD( error, (item = CStoryboardVideoItem::NewL( *iNoThumbnailIcon, - *iNoThumbnailIconMask, fileName, isFile, albumName )) ); - - if ( error == KErrNone ) - { - iVideoItemArray.Insert( item, iCurrentlyProcessedIndex ); - - iVideoCursorPos = aIndex; - iCursorLocation = ECursorOnClip; - iZoomFactorX = 0; - iZoomFactorY = 0; - - TRAPD( frameError, StartFrameTakerL( aIndex ) ); - if ( frameError ) - { - iMovie.RemoveVideoClip( aIndex ); - iView.ShowErrorNote( R_VEI_VIDEO_FAILED ); - iView.CancelWaitDialog(); - iView.AddNext(); - } - } - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipAdded: out"); - } - -void CVeiEditVideoContainer::NotifyVideoClipAddingFailed( CVedMovie& - /*aMovie*/, TInt DEBUGLOG_ARG(aError) ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipAddingFailed: In and Out, aError:%d", aError); - } - -void CVeiEditVideoContainer::NotifyVideoClipInfoReady( CVedVideoClipInfo& aInfo, - TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipInfoReady: In, aError:%d", aError); - // video info ready, get thumbnail - if (KErrNone == aError) - { - if (iTempVideoInfo) - { - delete iTempVideoInfo; - iTempVideoInfo = NULL; - } - iTempVideoInfo = &aInfo; - TSize thumbResolution; - thumbResolution = iVideoDisplay->GetScreenSize(); - /* Check if cursor is on transition. When editvideocontainer is activated - and right key is pressed very fast application crashes without this check */ - - TInt currentIndex; - currentIndex = CurrentIndex(); - - if ( iCursorLocation == ECursorOnTransition ) - { - currentIndex--; - } - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipInfoReady: 1"); - //we are in preview mode. - if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview ) - { - return; - } - - TTimeIntervalMicroSeconds cutInTime = iMovie.VideoClipCutInTime( currentIndex ); - TTimeIntervalMicroSeconds cutOutTime = iMovie.VideoClipCutOutTime( currentIndex ); - - TInt firstThumbNailIndex = iTempVideoInfo->GetVideoFrameIndexL( cutInTime ); - // TInt lastThumbNailIndex = aInfo.GetVideoFrameIndexL( cutOutTime ); - // lastThumbNailIndex--; - - TDisplayMode thumbnailDisplayMode( ENone ); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipInfoReady: 2"); - /* : - check out on every phone before releasing whether videodisplay should be stopped before starting - asynchronous GetFrameL() - see how EStateGettingFrame is handled in SetPreviewState - Stopping frees memory and it is needed in memory sensible devices - */ - TRAPD( err, iTempVideoInfo->GetFrameL( *this, firstThumbNailIndex, &thumbResolution, - thumbnailDisplayMode ) ); - if (KErrNone == err) - { - SetPreviewState(EStateGettingFrame); - } - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipInfoReady: 3, err:%d", err); - if ( KErrNone != err ) - { - if ( iProgressDialog ) - { - iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressDialog->ProcessFinishedL() ); - //iProgressDialog = NULL; - } - User::Panic( _L("VideoEditor"), 65 ); - } - } - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipInfoReady: Out"); - } - -void CVeiEditVideoContainer::NotifyVideoClipFrameCompleted(CVedVideoClipInfo& /*aInfo*/, - TInt aError, - CFbsBitmap* aFrame) - { - LOGFMT2(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipFrameCompleted: In, aError:%d, iTakeSnapshot:%d", aError, iTakeSnapshot); - - iFrameReady = ETrue; - - if (EStateGettingFrame == iPreviewState) - { - SetPreviewState(iPreviousPreviewState); - // SetEditorState is effective because iPreviewState is changed - iView.SetEditorState( iView.EditorState() ); - } - - if(KErrNone == aError && aFrame) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipFrameCompleted: 3 calling iVideoDisplay->ShowPictureL()"); - //TRAP_IGNORE(iVideoDisplay->ShowPictureL( *aFrame )); - - if ( iTakeSnapshot) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipFrameCompleted: 2"); - - // For some reason some phones crash in taking snapshot if this progress note is started - // earlier from TakeSnapshotL, that is why it is started now here - //StartProgressDialogL(R_VEI_PROGRESS_NOTE_WITH_CANCEL, R_VEI_PROGRESS_NOTE_SAVING_IMAGE); - iConverter->SetBitmap( aFrame ); - SaveSnapshotL(); - return; - } - TRAP_IGNORE(iVideoDisplay->ShowPictureL( *aFrame )); - delete aFrame; - aFrame = NULL; - if (iProgressDialog ) - { - iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressDialog->ProcessFinishedL() ); - //iProgressDialog = NULL; - } - DrawDeferred(); - if (iTakeSnapshotWaiting) - { - if (! iCallBack) - { - TCallBack cb (CVeiEditVideoContainer::AsyncTakeSnapshot, this); - iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard); - } - iCallBack->CallBack(); - } - return; - } - - if ( aFrame ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipFrameCompleted: 4"); - delete aFrame; - aFrame = NULL; - } - - if (iProgressDialog ) - { - iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressDialog->ProcessFinishedL() ); - //iProgressDialog = NULL; - } - else if ( KErrNone == aError) - { - iView.HandleCommandL( EAknSoftkeyOk ); - } -/* In case of an error, we'll do nothing. */ -/* If clip is too short, we won't get new thumbnail, so use old one->return; */ - if (KErrNone != aError) - { - iCurrentlyProcessedIndex = -1; - return; - } - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipFrameCompleted: Out"); - } - -void CVeiEditVideoContainer::NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/, - TInt aIndex) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipGeneratorSettingsChanged: In"); - iCurrentlyProcessedIndex = aIndex; - StartFrameTakerL( aIndex ); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipGeneratorSettingsChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyVideoClipDescriptiveNameChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipDescriptiveNameChanged: In"); - TFileName fileName; - fileName = iMovie.VideoClipInfo( CurrentIndex() )->DescriptiveName(); - iInfoDisplay->SetName(fileName); - iVideoDisplay->DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipDescriptiveNameChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyMovieQualityChanged(CVedMovie& /*aMovie*/) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMovieQualityChanged: In and Out"); - } -void CVeiEditVideoContainer::NotifyVideoClipRemoved( - CVedMovie& /*aMovie*/, TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipRemoved: In"); - CStoryboardVideoItem* item = iVideoItemArray[ aIndex ]; - iVideoItemArray.Remove( aIndex ); - delete item; - SetCursorLocation( ECursorOnClip ); - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipRemoved: Out"); - } - -void CVeiEditVideoContainer::NotifyVideoClipIndicesChanged( - CVedMovie& /*aMovie*/, TInt aOldIndex, TInt aNewIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipIndicesChanged: In"); - CStoryboardVideoItem* item = iVideoItemArray[ aOldIndex ]; - iVideoItemArray.Remove( aOldIndex ); - iVideoItemArray.Insert( item, aNewIndex ); - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipIndicesChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyVideoClipTimingsChanged( - CVedMovie& aMovie, TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipTimingsChanged: In"); - /* Check is slowmotion on */ - if ( iMovie.VideoClipSpeed( iVideoCursorPos ) != 1000 ) - { - iEffectSymbols->SetSlowMotionIconVisibility(ETrue); - } - else - { - // Engine sets mute automatically on if speed is set under 1000, but it does not return - // mute state to original if speed is reset to 1000, reclaimed to nokia - // problem is that we should respect user's mute settings prior to slow motion - // i.e. when removing slow motion mute settings should be reset to user defined value - // iMovie.VideoClipSetMuted(aIndex, EFalse); - iEffectSymbols->SetSlowMotionIconVisibility(EFalse); - } - /* If SM is on, audio is muted */ - if ((iMovie.VideoClipIsMuted(aIndex) != EFalse) || - (iMovie.VideoClipEditedHasAudio(aIndex) == EFalse)) - { - iEffectSymbols->SetVolumeMuteIconVisibility(ETrue); - } - else - { - iEffectSymbols->SetVolumeMuteIconVisibility(EFalse); - } - - TTimeIntervalMicroSeconds editedDuration = aMovie.VideoClipEditedDuration( aIndex ); - - iInfoDisplay->SetDuration( editedDuration ); - - DrawTrackBoxes(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipTimingsChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyVideoClipColorEffectChanged( - CVedMovie& /*aMovie*/, TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipColorEffectChanged: In"); - - if ( iView.WaitMode() != CVeiEditVideoView::EDuplicating ) - TRAP_IGNORE( UpdateThumbnailL( aIndex ) ); - - SetColourToningIcons(aIndex); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipColorEffectChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyVideoClipAudioSettingsChanged( - CVedMovie& /*aMovie*/, TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipAudioSettingsChanged: In"); - /* Check is Mute on */ - if ((iMovie.VideoClipIsMuted(aIndex) != EFalse) || - (iMovie.VideoClipEditedHasAudio(aIndex) == EFalse)) - { - iEffectSymbols->SetVolumeMuteIconVisibility(ETrue); - } - else - { - iEffectSymbols->SetVolumeMuteIconVisibility(EFalse); - } - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipAudioSettingsChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyStartTransitionEffectChanged( - CVedMovie& aMovie ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyStartTransitionEffectChanged: In"); - iInfoDisplay->SetName( *iTransitionInfo->StartTransitionName( aMovie.StartTransitionEffect() ) ); - - ShowStartAnimationL( aMovie.StartTransitionEffect() ); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyStartTransitionEffectChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyMiddleTransitionEffectChanged( - CVedMovie& aMovie, TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMiddleTransitionEffectChanged: In"); - iInfoDisplay->SetName( *iTransitionInfo->MiddleTransitionName( aMovie.MiddleTransitionEffect( aIndex ) ) ); - - ShowMiddleAnimationL( aMovie.MiddleTransitionEffect( aIndex ) ); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMiddleTransitionEffectChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyEndTransitionEffectChanged( - CVedMovie& aMovie ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyEndTransitionEffectChanged: In"); - iInfoDisplay->SetName( *iTransitionInfo->EndTransitionName( aMovie.EndTransitionEffect() ) ); - ShowEndAnimationL( aMovie.EndTransitionEffect() ); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyEndTransitionEffectChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyAudioClipAdded( - CVedMovie& aMovie, TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipAdded: In"); - CStoryboardAudioItem* item; -/* When audio clip is duplicated, check if original was recorded. - TMPXXXXX.XXX name is not shown on main pane if iRecordedAudio is ETrue. -**/ - if ( (aIndex > 0 ) && (iView.WaitMode() == CVeiEditVideoView::EDuplicating )) - { - if ( iAudioItemArray[aIndex-1]->iRecordedAudio == 1 ) - { - iRecordedAudio = ETrue; - } - } - - if (CVeiEditVideoView::EDuplicating == iView.WaitMode()) - { - //copy adjust volume parameter from original clip (aIndex - 1) - TReal adjustVolume = aMovie.GetAudioClipVolumeGainL(aIndex-1); - aMovie.SetAudioClipVolumeGainL(aIndex, (TInt)(adjustVolume)); - } - item = CStoryboardAudioItem::NewLC( iRecordedAudio, - aMovie.AudioClipInfo( aIndex )->FileName() ); - - iAudioCursorPos = aIndex; - - iAudioItemArray.Insert( item, aIndex ); - CleanupStack::Pop( item ); - - iView.SetWaitMode( CVeiEditVideoView::ENotWaiting ); - SetCursorLocation( ECursorOnAudio ); - iRecordedAudio = EFalse; - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipAdded: Out"); - } - -void CVeiEditVideoContainer::NotifyAudioClipAddingFailed( - CVedMovie& /*aMovie*/, TInt DEBUGLOG_ARG(aError) ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipAddingFailed: In, aError:%d", aError); - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipAddingFailed: Out"); - } - -void CVeiEditVideoContainer::NotifyAudioClipRemoved( - CVedMovie& /*aMovie*/, TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipRemoved: In"); - CStoryboardAudioItem* item = iAudioItemArray[aIndex]; - iAudioItemArray.Remove(aIndex); - delete item; - SetCursorLocation( ECursorOnAudio ); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipRemoved: Out"); - } - -void CVeiEditVideoContainer::NotifyAudioClipIndicesChanged( - CVedMovie& /*aMovie*/, TInt aOldIndex, TInt aNewIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipIndicesChanged: In"); - CStoryboardAudioItem* item = iAudioItemArray[ aOldIndex ]; - iAudioItemArray.Remove( aOldIndex ); - TInt err = iAudioItemArray.Insert( item, aNewIndex ); - if ( err != KErrNone ) - { - TBuf<30>buf; - buf.Format( _L("Audio clip moving failed (%d)."), err ); - } - - iAudioCursorPos = aNewIndex; - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipIndicesChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyAudioClipTimingsChanged( - CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipTimingsChanged: In"); - IsAudioClipCutted(); - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipTimingsChanged: Out"); - } - -void CVeiEditVideoContainer::NotifyMovieReseted( CVedMovie& /*aMovie*/ ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMovieReseted: In"); - iAudioItemArray.ResetAndDestroy(); - iVideoItemArray.ResetAndDestroy(); - iVideoCursorPos = 0; - iAudioCursorPos = 0; - iCursorLocation = ECursorOnClip; - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMovieReseted: Out"); - } - -void CVeiEditVideoContainer::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyMovieOutputParametersChanged: In and Out"); - // @ - } - -void CVeiEditVideoContainer::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - // @ - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipDynamicLevelMarkInserted: In and out"); - } - -void CVeiEditVideoContainer::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyAudioClipDynamicLevelMarkRemoved: In and out"); - // @ - } - -void CVeiEditVideoContainer::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipDynamicLevelMarkInserted: In and out"); - // @ - } - -void CVeiEditVideoContainer::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoClipDynamicLevelMarkRemoved: In and out"); - // @ - } - -void CVeiEditVideoContainer::UpdateThumbnailL( TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::UpdateThumbnailL: In"); - /*HBufC* stringholder; - - if (iProgressNote) - { - delete iProgressNote; - iProgressNote = NULL; - } - - iProgressNote = - new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**, - &iProgressNote), ETrue); - iProgressNote->SetCallback(this); - - if( iView.WaitMode() == CVeiEditVideoView::EProcessingMovieForCutting ) - { - stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_CUTTING_VIDEO, iEikonEnv ); - } - else - { - stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_COLOR_EFFECT, iEikonEnv ); - } - - iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE ); - iProgressNote->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iProgressNote->GetProgressInfoL()->SetFinalValue(100); - */ - TInt resid; - if( iView.WaitMode() == CVeiEditVideoView::EProcessingMovieForCutting ) - { - resid = R_VEI_PROGRESS_NOTE_CUTTING_VIDEO; - } - else - { - resid = R_VEI_PROGRESS_NOTE_COLOR_EFFECT; - } - StartProgressDialogL(R_VEI_PROGRESS_NOTE, resid); - - iCurrentlyProcessedIndex = iVideoCursorPos; - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::UpdateThumbnailL: 2"); - StartFrameTakerL( aIndex ); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::UpdateThumbnailL: Out"); - } - -// --------------------------------------------------------- -// CVeiEditVideoContainer::ConvertBW(CFbsBitmap& aBitmap) -// --------------------------------------------------------- -// -void CVeiEditVideoContainer::ConvertBW( CFbsBitmap& aBitmap ) const - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConvertBW: In"); - TInt width = aBitmap.SizeInPixels().iWidth; - TInt height = aBitmap.SizeInPixels().iHeight; - - TBitmapUtil bitmapUtil( &aBitmap ); - bitmapUtil.Begin( TPoint(0,0) ); - - for ( TInt y=0;y>16; - TInt G_out = (alpha + kg)>>16; - TInt B_out = (alpha + kb)>>16; - - if(R_out<0) R_out=0; if(R_out>255) R_out=255; - if(G_out<0) G_out=0; if(G_out>255) G_out=255; - if(B_out<0) B_out=0; if(B_out>255) B_out=255; - - bitmapUtil.SetPixel( TRgb(R_out,G_out,B_out).Color64K() ); - } - } - bitmapUtil.End(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::ConvertToning: Out"); - } - - -// --------------------------------------------------------- -// CVeiEditVideoContainer::HandleControlEventL( -// CCoeControl* aControl,TCoeEvent aEventType) -// --------------------------------------------------------- -// -void CVeiEditVideoContainer::HandleControlEventL( - CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/) - { - // : Add your control event handler code here - } - -// ---------------------------------------------------------------------------- -// CVeiEditVideoContainer::HandlePointerEventL -// From CCoeControl -// ---------------------------------------------------------------------------- -// -void CVeiEditVideoContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::HandlePointerEventL(): In" ); - - if( AknLayoutUtils::PenEnabled() ) - { - CCoeControl::HandlePointerEventL( aPointerEvent ); - - switch( aPointerEvent.iType ) - { - case TPointerEvent::EButton1Down: - { - LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::HandlePointerEventL(): EButton1Down" ); - - // Initialise the touch related member variables - iIsVideoDrag = EFalse; - iIsVideoTapped = EFalse; - - // the user taps the timeline bar - if( iVideoBarBox.Contains( aPointerEvent.iPosition ) ) - { - iCursorLocation = ECursorOnClip; - HandleVideoTimelineTouchL( aPointerEvent ); - } - // the user double-taps the cut bar - else if (( iDummyCutBar->Rect().Contains( aPointerEvent.iPosition )) && - ( aPointerEvent.iModifiers & EModifierDoubleClick )) - { - // open cut view - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoCutting ); - } - // : the user double taps the thumbnail (wait for the layout data) - // : the user taps the transition arrows (wait for the layout data) - - // the volume adjustment view is active and the user taps the volume slider - else if (( EModeAdjustVolume == iSelectionMode ) && - ( iVerticalSlider->Rect().Contains( aPointerEvent.iPosition ))) - { - HandleVolumeSliderTouchL( aPointerEvent ); - } - break; - } - case TPointerEvent::EDrag: - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoContainer::HandlePointerEventL(): \ - EDrag, iIsVideoTapped = %d", iIsVideoTapped ); - - // video drag takes effect only when the pointer has gone down inside a - // video clip (i.e. iIsVideoTapped == ETrue) - if ( iVideoBarBox.Contains( aPointerEvent.iPosition ) && ( iIsVideoTapped )) - { - iIsVideoDrag = ETrue; - HandleVideoTimelineTouchL( aPointerEvent ); - } - // the volume adjustment view is active and the user taps the volume slider - else if (( EModeAdjustVolume == iSelectionMode ) && - ( iVerticalSlider->Rect().Contains( aPointerEvent.iPosition ))) - { - HandleVolumeSliderTouchL( aPointerEvent ); - } - break; - } - case TPointerEvent::EButton1Up: - { - // pen up event is handled if it was dragged - if (iIsVideoDrag) - { - iIsVideoDrag = EFalse; - // pressed position is inside the timeline bar - if( iVideoBarBox.Contains( aPointerEvent.iPosition ) ) - { - HandleVideoTimelineTouchL( aPointerEvent ); - } - else - { - // the new position indicator has to be removed from the UI - iNewClipPosition = iClickedClip; - DrawNow(); - } - } - - break; - } - default: - { - break; - } - } - } - LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::HandlePointerEventL(): Out" ); - } - - -// ---------------------------------------------------------------------------- -// CVeiEditVideoContainer::HandleVideoTimelineTouchL -// -// ---------------------------------------------------------------------------- -// -void CVeiEditVideoContainer::HandleVideoTimelineTouchL( TPointerEvent aPointerEvent ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVideoTimelineTouchL(): In" ); - - CVeiEditVideoView::TEditorState state = iView.EditorState(); - - if (( AknLayoutUtils::PenEnabled() ) && - ( state!=CVeiEditVideoView::EPreview ) && - ( state!=CVeiEditVideoView::EQuickPreview )) - { - - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVideoTimelineTouchL, \ - iClickedClip:%d", iClickedClip ); - - // move video clip by dragging - if ( aPointerEvent.iType == TPointerEvent::EDrag ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVideoTimelineTouchL, EDrag, \ - aPointerEvent.iPosition.iX = %d", aPointerEvent.iPosition.iX ); - - // Find the clip that includes the current pointer position. - TInt clipIncludingDrag = FindClickedClip( aPointerEvent.iPosition.iX ); - - // the pen is inside the same clip where it went down - if (( clipIncludingDrag == iClickedClip )) - { - // the new position indicator has to be removed from UI - iNewClipPosition = iClickedClip; - } - - // the pen is on the empty part of the timeline - else if ( aPointerEvent.iPosition.iX > iEmptyVideoTimeLineRect.iTl.iX ) - { - // the last clip can't be moved right - if ( iClickedClip < iMovie.VideoClipCount() - 1 ) - { - iNewClipPosition = iMovie.VideoClipCount() - 1; - } - } - // the pen is on the left end of a video clip - else if (( clipIncludingDrag >= 0) && - ( iVideoItemRectArray[ clipIncludingDrag ].Contains( TPoint( aPointerEvent.iPosition.iX, iVideoBarBox.Center().iY ))) && - ( aPointerEvent.iPosition.iX <= iVideoItemRectArray[ clipIncludingDrag ].iTl.iX + iVideoItemRectArray[ clipIncludingDrag ].Width()/2 )) - { - // moving a clip from left to right - if (( iClickedClip < clipIncludingDrag ) && ( iClickedClip < clipIncludingDrag - 1 )) - { - iNewClipPosition = clipIncludingDrag - 1; - } - // moving a clip from right to left - else if ( iClickedClip > clipIncludingDrag ) - { - iNewClipPosition = clipIncludingDrag; - } - else - { - iNewClipPosition = iClickedClip; - } - } - // the pen is on the right end of a video clip - else if (( clipIncludingDrag >= 0) && - ( iVideoItemRectArray[ clipIncludingDrag ].Contains( TPoint( aPointerEvent.iPosition.iX, iVideoBarBox.Center().iY ))) && - ( aPointerEvent.iPosition.iX > iVideoItemRectArray[ clipIncludingDrag ].iTl.iX + iVideoItemRectArray[ clipIncludingDrag ].Width()/2 )) - { - // moving a clip from left to right - if (( iClickedClip < clipIncludingDrag )) - { - iNewClipPosition = clipIncludingDrag; - } - // moving a clip from right to left - else if ( iClickedClip > clipIncludingDrag + 1) - { - iNewClipPosition = clipIncludingDrag + 1; - } - else - { - iNewClipPosition = iClickedClip; - } - } - } - - // pen up event after dragging - else if ( aPointerEvent.iType == TPointerEvent::EButton1Up ) - { - iMovie.VideoClipSetIndex( iClickedClip, iNewClipPosition ); - if ( iVideoCursorPos != iNewClipPosition ) // eliminates blinking of the already selected clip - { - iVideoCursorPos = iNewClipPosition; - SetCursorLocation( ECursorOnClip ); - } - - } - // user taps a clip - else if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) - { - CalculateVideoClipRects(); - - iClickedClip = FindClickedClip( aPointerEvent.iPosition.iX ); - iNewClipPosition = iClickedClip; - - if ( iClickedClip >= 0 ) - { - iIsVideoTapped = ETrue; - if ( iClickedClip != iVideoCursorPos ) // eliminates blinking of the already selected clip - { - iVideoCursorPos = iClickedClip; - SetCursorLocation( ECursorOnClip ); - } - } - } - - // : when the user clicks a transition marker, the transition view should open - - DrawNow(); - LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVideoTimelineTouchL(): Out" ); - - }// PenEnabled - - } - - -// ---------------------------------------------------------------------------- -// CVeiEditVideoContainer::HandleVolumeSliderTouchL -// -// ---------------------------------------------------------------------------- -// -void CVeiEditVideoContainer::HandleVolumeSliderTouchL( TPointerEvent aPointerEvent ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeSliderTouchL in"); - - // calculate the new slider position - TInt newSliderPosition; - TInt volumeSliderSteps = KVolumeSliderMax - KVolumeSliderMin + 1; - TInt pointerPosInSlider = aPointerEvent.iPosition.iY - iVerticalSlider->Rect().iTl.iY; - newSliderPosition = (( volumeSliderSteps * pointerPosInSlider ) / iVerticalSlider->Rect().Height()) + KVolumeSliderMin; - - iVerticalSlider->SetPosition( newSliderPosition); - iVerticalSlider->DrawNow(); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeSliderTouchL out"); - } - - -// ---------------------------------------------------------------------------- -// CVeiEditVideoContainer::ClipContainingClick -// -// ---------------------------------------------------------------------------- -// -TInt CVeiEditVideoContainer::FindClickedClip( TInt aPressedPointX ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::FindClickedClip in"); - // Video Timeline start and end points, and length - TInt timelineLeftEnd( iVideoBarBox.iTl.iX ); - TInt timelineRightEnd( iVideoBarBox.iBr.iX ); - TInt totalPBLength( timelineRightEnd - timelineLeftEnd ); - - // check which part of the timeline contains the click - TInt clickedClip = -1; - TInt i = 0; - while (( clickedClip < 0) && ( i < iMovie.VideoClipCount() )) - { - if ( ( aPressedPointX > iVideoItemRectArray[i].iTl.iX ) && - ( aPressedPointX < iVideoItemRectArray[i].iBr.iX )) - { - clickedClip = i; - } - else - { - i++; - } - } - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::FindClickedClip out"); - return clickedClip; - } - - - -void CVeiEditVideoContainer::SetCursorLocation( TCursorLocation aCursorLocation ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::SetCursorLocation in"); - - iCursorLocation = aCursorLocation; - - if ( iView.EditorState() == CVeiEditVideoView::EMixAudio) - { - iVideoDisplay->MakeVisible( ETrue ); - iVideoDisplay->SetRect( iVideoDisplayBox ); - iVideoDisplay->ShowPictureL(*iAudioMixingIcon); - iInfoDisplay->MakeVisible(EFalse); - iHorizontalSlider->MakeVisible(ETrue); - return; - } - - iTransitionDisplayLeft->MakeVisible( EFalse ); - iTransitionDisplayRight->MakeVisible( EFalse ); - iDummyCutBarLeft->MakeVisible( EFalse ); - iInfoDisplay->SetRect( iInfoDisplayBox ); - iEffectSymbols->MakeVisible( EFalse ); - if (CVeiEditVideoContainer::EModeSlowMotion != iSelectionMode) - { - // currently slow motion wastes processing time in background - iVideoDisplay->StopAnimation(); - } - - if ( iCursorLocation == ECursorOnClip && iInfoDisplay ) - { - iVideoDisplay->MakeVisible( ETrue ); - iVideoDisplay->SetRect( iVideoDisplayBox ); - - if ( iMovie.VideoClipCount() > 0 ) - { - if ( (iVideoCursorPos > (iMovie.VideoClipCount()-1))) - { - iVideoCursorPos--; - } - - TParse parser; - - parser.Set( iVideoItemArray[ CurrentIndex() ]->iFilename->Des(), NULL, NULL ); - iVideoDisplay->ShowPictureL( *iVideoItemArray[CurrentIndex()]->iIconBitmap, - *iVideoItemArray[CurrentIndex()]->iIconMask ); - - iDummyCutBar->SetRect( iDummyCutBarBox ); - iDummyCutBar->Dim( EFalse ); - - // : start using LAF data when it is available - // iDummyCutBar->Rect() == (80, 160, 273, 204) includes the scissor icon and the progress bar - iDummyCutBar->SetComponentRect( CVeiCutterBar::EProgressBar, TRect(115, 160,273,204)); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, TRect(115, 160,135,204) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon, TRect(135,160,244,204) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon,TRect(244,160,273,204) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, TRect(115, 160,135,204) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon, TRect(135,160,244,204) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon,TRect(244,160,273,204) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::EScissorsIcon, TRect(80, 167,110,197) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon,TRect(115,160,124,204) ); - - TTimeIntervalMicroSeconds clipDuration = iMovie.VideoClipInfo( CurrentIndex())->Duration(); - TTimeIntervalMicroSeconds clipCutInTime = iMovie.VideoClipCutInTime( CurrentIndex() ); - TTimeIntervalMicroSeconds clipCutOutTime = iMovie.VideoClipCutOutTime( CurrentIndex() ); - - iDummyCutBar->SetTotalDuration( clipDuration ); - iDummyCutBar->SetInPoint( clipCutInTime ); - iDummyCutBar->SetOutPoint( clipCutOutTime ); - - TTime fileModified; - - RFs& fs = iEikonEnv->FsSession(); - if ( parser.ExtPresent() ) - { - fs.Modified( *iVideoItemArray[CurrentIndex()]->iFilename, fileModified ); - } - else - { - fileModified = iVideoItemArray[CurrentIndex()]->iDateModified; - } - - if ( VideoEditorUtils::IsLandscapeScreenOrientation() ) //Landscape - { - iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything ); - } - else - { - iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration ); - } - - iInfoDisplay->SetLocation( *iVideoItemArray[CurrentIndex()]->iAlbumName ); - - TFileName clipName = parser.Name(); - TTimeIntervalMicroSeconds editedDuration = iMovie.VideoClipEditedDuration( CurrentIndex() ); - iInfoDisplay->MakeVisible( ETrue ); - - if( !CurrentClipIsFile() ) - { - TFileName fileName; - fileName = iMovie.VideoClipInfo( CurrentIndex() )->DescriptiveName(); - iInfoDisplay->SetName(fileName); - } - else - { - iInfoDisplay->SetName( clipName ); - } - - iInfoDisplay->SetDuration( editedDuration ); - iInfoDisplay->SetTime( fileModified ); - - // *** IconBox drawing **** - // indicator icons are hidden in preview state - CVeiEditVideoView::TEditorState state = iView.EditorState(); - if (state != CVeiEditVideoView::EPreview && state != CVeiEditVideoView::EQuickPreview) - { - if ((iMovie.VideoClipIsMuted(iVideoCursorPos) != EFalse) || - (iMovie.VideoClipEditedHasAudio(iVideoCursorPos) == EFalse)) - { - iEffectSymbols->SetVolumeMuteIconVisibility(ETrue); - } - else - { - iEffectSymbols->SetVolumeMuteIconVisibility(EFalse); - } - - if ( iMovie.VideoClipSpeed( iVideoCursorPos ) != 1000 ) - { - iEffectSymbols->SetSlowMotionIconVisibility(ETrue); - } - else - { - iEffectSymbols->SetSlowMotionIconVisibility(EFalse); - } - - SetColourToningIcons(iVideoCursorPos); - - iEffectSymbols->MakeVisible( ETrue ); - iEffectSymbols->SetRect( iEffectSymbolBox ); - } - } - else - { - iInfoDisplay->SetLayout( CVeiTextDisplay::EOnlyName ); - iVideoDisplay->ShowBlankScreen(); - - iDummyCutBar->Dim( ETrue ); - HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NO_VIDEO, iEikonEnv ); - iInfoDisplay->SetName( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - } - StartZooming(); - } - else if ( iCursorLocation == ECursorOnEmptyVideoTrack ) - { - iVideoDisplay->MakeVisible( ETrue ); - iVideoDisplay->SetRect( iVideoDisplayBox ); - iDummyCutBar->SetRect( iDummyCutBarBox ); - iDummyCutBar->Dim( ETrue ); - iDummyCutBar->MakeVisible( EFalse); - - iInfoDisplay->SetLayout( CVeiTextDisplay::EOnlyName ); - iVideoDisplay->ShowBlankScreen(); - iInfoDisplay->MakeVisible( ETrue ); - - HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NO_VIDEO, iEikonEnv ); - iInfoDisplay->SetName( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - } - else if (( iCursorLocation == ECursorOnAudio ) && - (( iSelectionMode == EModeRecordingSetStart ) || - ( iSelectionMode == EModeRecording ))) - { - HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NEW_AUDIO, iEikonEnv ); - - iVideoDisplay->MakeVisible( ETrue ); - iInfoDisplay->MakeVisible( ETrue ); - iInfoDisplay->SetName( *stringholder ); - iVideoDisplay->ShowPictureL( *iAudioIcon ); - - iEffectSymbols->SetVolumeMuteIconVisibility( EFalse ); - iEffectSymbols->SetBlackAndWhiteIconVisibility( EFalse ); - iEffectSymbols->SetColourIconVisibility( EFalse ); - iEffectSymbols->SetSlowMotionIconVisibility( EFalse ); - - iVideoDisplay->SetRect( iVideoDisplayBox ); - iDummyCutBar->SetRect( iDummyCutBarBox ); - - if ( iSelectionMode == EModeRecordingSetStart ) - { - TTimeIntervalMicroSeconds duration = TTimeIntervalMicroSeconds(0); - iInfoDisplay->SetDuration( duration ); - } - else - { - iInfoDisplay->SetDuration( iRecordedAudioDuration ); - } - CleanupStack::PopAndDestroy( stringholder ); - } - else if ( iCursorLocation == ECursorOnAudio ) - { - - iVideoDisplay->MakeVisible( ETrue ); - iEffectSymbols->SetVolumeMuteIconVisibility( EFalse ); - iEffectSymbols->SetBlackAndWhiteIconVisibility( EFalse ); - iEffectSymbols->SetColourIconVisibility( EFalse ); - iEffectSymbols->SetSlowMotionIconVisibility( EFalse ); - - iVideoDisplay->SetRect( iVideoDisplayBox ); - iDummyCutBar->SetRect( iDummyCutBarBox ); - - if ( iMovie.AudioClipCount() > 0 ) - { - - CVedAudioClipInfo* audioclipinfo = iMovie.AudioClipInfo( CurrentIndex() ); - - TTimeIntervalMicroSeconds audioClipEditedDuration = iMovie.AudioClipEditedDuration( CurrentIndex() ); - TTimeIntervalMicroSeconds audioClipDuration = audioclipinfo->Duration(); - TTimeIntervalMicroSeconds audioClipCutInTime = iMovie.AudioClipCutInTime( CurrentIndex() ); - TTimeIntervalMicroSeconds audioClipCutOutTime = iMovie.AudioClipCutOutTime( CurrentIndex() ); - - iDummyCutBar->Dim( EFalse ); - - iDummyCutBar->SetTotalDuration( audioClipDuration ); - iDummyCutBar->SetInPoint( audioClipCutInTime ); - iDummyCutBar->SetOutPoint( audioClipCutOutTime ); - - TParse parser; - parser.Set( *iAudioItemArray[CurrentIndex()]->iFilename, NULL, NULL ); - iVideoDisplay->ShowPictureL( *iAudioIcon ); - - TTime fileModified; - - RFs& fs = iEikonEnv->FsSession(); - fs.Modified( parser.FullName(), fileModified ); - - if ( VideoEditorUtils::IsLandscapeScreenOrientation() ) //Landscape - { - iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything ); - } - else - { - iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration ); - } - TFileName audioClipName; - - if ( iAudioItemArray[CurrentIndex()]->iRecordedAudio ) - { - HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NEW_AUDIO, iEikonEnv ); - audioClipName = *stringholder; - CleanupStack::PopAndDestroy( stringholder ); - } - else - { - audioClipName = parser.Name(); - } - - iInfoDisplay->MakeVisible( ETrue ); - iInfoDisplay->SetName( audioClipName ); - iInfoDisplay->SetDuration( audioClipEditedDuration ); - iInfoDisplay->SetTime( fileModified ); - } - else - { - iVideoDisplay->MakeVisible( ETrue ); - iInfoDisplay->SetLayout( CVeiTextDisplay::EOnlyName ); - iVideoDisplay->ShowBlankScreen(); - iDummyCutBar->Dim( ETrue ); - iInfoDisplay->MakeVisible( ETrue ); - HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NO_AUDIO, iEikonEnv ); - iInfoDisplay->SetName( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - } - StartZooming(); - } - else if ( iCursorLocation == ECursorOnTransition ) - { - iVideoDisplay->MakeVisible( ETrue ); - iTransitionDisplayLeft->MakeVisible( ETrue ); - iTransitionDisplayRight->MakeVisible( ETrue ); - - TTimeIntervalMicroSeconds clipDuration; - TTimeIntervalMicroSeconds clipCutInTime; - TTimeIntervalMicroSeconds clipCutOutTime; - - TInt nextIndex; - nextIndex = iVideoCursorPos; - - if ( ( nextIndex < iMovie.VideoClipCount() ) ) // video on both sides OR no video on the left hand side - { - CStoryboardVideoItem* item = iVideoItemArray[ nextIndex ]; - - iConverter->ScaleL( item->iIconBitmap, item->iIconBitmap, iTransitionDisplayRight->GetScreenSize() ); - - clipDuration = iMovie.VideoClipInfo( nextIndex )->Duration(); - clipCutInTime = iMovie.VideoClipCutInTime( nextIndex ); - clipCutOutTime = iMovie.VideoClipCutOutTime( nextIndex ); - - iDummyCutBar->Dim( EFalse ); - iDummyCutBar->SetTotalDuration( clipDuration ); - iDummyCutBar->SetInPoint( clipCutInTime ); - iDummyCutBar->SetOutPoint( clipCutOutTime ); - } - else // no video on the right hand side - { - iTransitionDisplayRight->ShowBlankScreen(); - iDummyCutBar->Dim( ETrue ); - } - nextIndex--; - - if ( nextIndex >= 0 ) // video on both sides OR no video on the right hand side - { - CStoryboardVideoItem* item = iVideoItemArray[ nextIndex ]; - if ( item->iLastFrameBitmap != NULL ) - { - iTransitionDisplayLeft->ShowPictureL( *item->iLastFrameBitmap, *item->iLastFrameMask); - } - iDummyCutBarLeft->Dim( EFalse ); - - clipDuration = iMovie.VideoClipInfo( nextIndex )->Duration(); - clipCutInTime = iMovie.VideoClipCutInTime( nextIndex ); - clipCutOutTime = iMovie.VideoClipCutOutTime( nextIndex ); - - iDummyCutBarLeft->SetTotalDuration( clipDuration ); - iDummyCutBarLeft->SetInPoint( clipCutInTime ); - iDummyCutBarLeft->SetOutPoint( clipCutOutTime ); - } - else // no video on the left hand side - { - iTransitionDisplayLeft->ShowBlankScreen(); - iDummyCutBarLeft->Dim( ETrue ); - } - - iVideoDisplay->ShowBlankScreen(); - - iVideoDisplay->SetRect( iVideoDisplayBoxOnTransition ); - iDummyCutBar->SetRect( iDummyCutBarBoxOnTransition ); - - // : start using LAF data when it is available - // iDummyCutBar->Rect() == (321, 107, 433, 151) includes the scissor icon and the progress bar - iDummyCutBar->SetComponentRect( CVeiCutterBar::EProgressBar, TRect(355,107,433,151)); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, TRect(355,107,360 ,151) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon, TRect(360,107,400 ,151) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon,TRect(400,107,433 ,151) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, TRect(355,107,360 ,151) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon, TRect(360,107,400 ,151) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon,TRect(400,107,433 ,151) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::EScissorsIcon, TRect(321,107,350 ,151) ); - iDummyCutBar->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon,TRect(321,107,350 ,151) ); - - iDummyCutBarLeft->MakeVisible( ETrue ); - iDummyCutBarLeft->SetPosition( TPoint(iTransitionDisplayLeftBox.iTl.iX, - iTransitionDisplayLeftBox.iBr.iY- iVideoDisplay->GetBorderWidth() ) ); - iDummyCutBarLeft->SetSize( TSize( iTransitionDisplayLeftBox.Width(), iDummyCutBarBox.Height() ) ); - - // : start using LAF data when it is available - // iDummyCutBarLeft->Rect() == (5, 107, 117, 151) includes the scissor icon and the progress bar - iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::EProgressBar, TRect(35,107,117,151)); - iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, TRect(35,107,55 ,151) ); - iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon, TRect(55,107,100 ,151) ); - iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon,TRect(100,107,117 ,151) ); - iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, TRect(35,107,55 ,151) ); - iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon, TRect(55,107,100 ,151) ); - iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon,TRect(100,107,117 ,151) ); - iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::EScissorsIcon, TRect(5,107,30 ,151) ); - iDummyCutBarLeft->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon,TRect(5,107,30 ,151) ); - - ArrowsControl(); - - if ( iVideoCursorPos == 0 ) - { - ShowStartAnimationL( iMovie.StartTransitionEffect() ); - iInfoDisplay->SetName( *iTransitionInfo->StartTransitionName( iMovie.StartTransitionEffect() ) ); - } - else if ( iVideoCursorPos == iMovie.VideoClipCount() ) - { - iInfoDisplay->SetName( *iTransitionInfo->EndTransitionName( iMovie.EndTransitionEffect() ) ); - ShowEndAnimationL( iMovie.EndTransitionEffect() ); - } - else - { - iInfoDisplay->SetName( *iTransitionInfo->MiddleTransitionName( iMovie.MiddleTransitionEffect( CurrentIndex() - 1 ) ) ); - ShowMiddleAnimationL( iMovie.MiddleTransitionEffect( CurrentIndex() - 1 ) ); - } - StartZooming(); - } - else if ( iCursorLocation == ECursorOnEmptyAudioTrack ) - { - iVideoDisplay->MakeVisible( ETrue ); - iInfoDisplay->SetLayout( CVeiTextDisplay::EOnlyName ); - iVideoDisplay->ShowBlankScreen(); - iInfoDisplay->MakeVisible( ETrue ); - - HBufC* stringholder = StringLoader::LoadLC( R_VEI_EDIT_VIEW_NO_AUDIO, iEikonEnv ); - iInfoDisplay->SetName( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iVideoDisplay->SetRect( iVideoDisplayBox ); - iDummyCutBar->SetRect( iDummyCutBarBox ); - iDummyCutBar->Dim( ETrue ); - } - if ( iView.EditorState() == CVeiEditVideoView::EQuickPreview) - { - TFileName newname; - TVeiSettings movieSaveSettings; - STATIC_CAST( CVeiAppUi*, iEikonEnv->AppUi() )->ReadSettingsL( movieSaveSettings ); - newname.Append( movieSaveSettings.DefaultVideoName() ); - iInfoDisplay->SetName( newname ); - - TTimeIntervalMicroSeconds tempFileDuration; - tempFileDuration = iVideoDisplay->TotalLengthL(); - iInfoDisplay->SetDuration( tempFileDuration ); - } - /*if ( iView.EditorState() == CVeiEditVideoView::EMixAudio) - { - - //iHorizontalSliderSize = TSize(iHorizontalSlider->MinimumSize().iWidth, 50); - // iHorizontalSliderPoint = TPoint( videoScreenX - 25, + videoScreenY + videoScreenSize.iHeight + 70); - iHorizontalSlider->SetExtent( iHorizontalSliderPoint, iHorizontalSliderSize ); - iHorizontalSlider->MakeVisible(ETrue); - iHorizontalSlider->DrawDeferred(); - iVideoDisplay->ShowPictureL(*iAudioMixingIcon); - } - */ - } - -TBool CVeiEditVideoContainer::CurrentClipIsFile() - { - if ( (iCursorLocation == ECursorOnClip) && (iMovie.VideoClipCount() > 0 ) ) - { - return iVideoItemArray[ CurrentIndex() ]->iIsFile; - } - else - return EFalse; - } - - -void CVeiEditVideoContainer::ShowMiddleAnimationL( TVedMiddleTransitionEffect aMiddleEffect ) - { - switch( aMiddleEffect ) - { - case EVedMiddleTransitionEffectNone: - iVideoDisplay->StopAnimation(); - break; - case EVedMiddleTransitionEffectDipToBlack: - iVideoDisplay->ShowAnimationL( R_VEI_DIP_TO_BLACK_ANIMATION ); - break; - case EVedMiddleTransitionEffectDipToWhite: - iVideoDisplay->ShowAnimationL( R_VEI_DIP_TO_WHITE_ANIMATION ); - break; - case EVedMiddleTransitionEffectCrossfade: - iVideoDisplay->ShowAnimationL( R_VEI_CROSSFADE_ANIMATION ); - break; - case EVedMiddleTransitionEffectWipeLeftToRight: - iVideoDisplay->ShowAnimationL( R_VEI_WIPE_LEFT_ANIMATION ); - break; - case EVedMiddleTransitionEffectWipeRightToLeft: - iVideoDisplay->ShowAnimationL( R_VEI_WIPE_RIGHT_ANIMATION ); - break; - case EVedMiddleTransitionEffectWipeTopToBottom: - iVideoDisplay->ShowAnimationL( R_VEI_WIPE_TOP_TO_BOTTOM_ANIMATION ); - break; - case EVedMiddleTransitionEffectWipeBottomToTop: - iVideoDisplay->ShowAnimationL( R_VEI_WIPE_BOTTOM_TO_TOP_ANIMATION ); - break; - default: - break; - } - } - - -void CVeiEditVideoContainer::ShowStartAnimationL( TVedStartTransitionEffect aStartEffect ) - { - switch( aStartEffect ) - { - case EVedStartTransitionEffectNone: - iVideoDisplay->StopAnimation(); - break; - case EVedStartTransitionEffectFadeFromBlack: - iVideoDisplay->ShowAnimationL( R_VEI_FADE_FROM_BLACK_ANIMATION ); - break; - case EVedStartTransitionEffectFadeFromWhite: - iVideoDisplay->ShowAnimationL( R_VEI_FADE_FROM_WHITE_ANIMATION ); - break; - default: - break; - } - } - -void CVeiEditVideoContainer::ShowEndAnimationL( TVedEndTransitionEffect aEndEffect ) - { - switch( aEndEffect ) - { - case EVedEndTransitionEffectNone: - iVideoDisplay->StopAnimation(); - break; - case EVedEndTransitionEffectFadeToBlack: - iVideoDisplay->ShowAnimationL( R_VEI_FADE_TO_BLACK_ANIMATION ); - break; - case EVedEndTransitionEffectFadeToWhite: - iVideoDisplay->ShowAnimationL( R_VEI_FADE_TO_WHITE_ANIMATION ); - break; - default: - break; - } - } - - -void CVeiEditVideoContainer::NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo ) - { - LOGFMT4(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() In, \ - aEvent:%d, iFullScreenSelected:%d, iView.EditorState():%d, iPreviewState:%d", \ - aEvent, iFullScreenSelected, iView.EditorState(), iPreviewState); - - if (EStateTerminating == iPreviewState) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent(): app is closing..."); - return; - } - - switch (aEvent) - { - case MVeiVideoDisplayObserver::ELoadingStarted: - { - SetPreviewState(EStateOpening); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::ELoadingStarted"); - break; - } - case MVeiVideoDisplayObserver::EOpenComplete: - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EOpenComplete 1:%Ld", iVideoDisplay->PositionL().Int64()); - - iCursorPreviousLocation = CursorLocation(); - - if ( !iFullScreenSelected ) - { - TRAP_IGNORE( (/*iTempVideoInfo =*/ CVedVideoClipInfo::NewL( *iTempFileName,*this) ) ); - - //for draw function - iCursorLocation = ECursorOnClip; - } - - if ( CVeiEditVideoView::EPreview == iView.EditorState() )//Large preview - { - TRect wholeScreenRect = iView.ClientOrApplicationRect( iFullScreenSelected ); - SetRect( iView.ClientOrApplicationRect( iFullScreenSelected ) ); - iVideoDisplay->SetRect( wholeScreenRect ); - - if ( !VideoEditorUtils::IsLandscapeScreenOrientation() ) //Portrait - { - iVideoDisplay->SetRotationL( EVideoRotationClockwise90 ); - } - - if ( iView.IsForeground() ) - { - iVideoDisplay->ShowBlackScreen(); - DrawDeferred(); - if ( iTempVideoInfo && !iFrameReady) - { - iTempVideoInfo->CancelFrame(); - } - iVideoDisplay->Play(); - } - else - { - iView.SetEditorState( CVeiEditVideoView::EEdit ); - SetBlackScreen( EFalse ); - iView.SetFullScreenSelected( EFalse ); - iVideoDisplay->Stop( ETrue ); - } - - } - else //Small preview - { - iVideoDisplay->SetRect( iVideoDisplayBox ); - iInfoDisplay->SetRect( iInfoDisplayBox ); - iVideoDisplay->SetRotationL( EVideoRotationNone ); - - if ( !VideoEditorUtils::IsLandscapeScreenOrientation() ) //Portrait - { - iInfoDisplay->SetLayout( CVeiTextDisplay::ENameAndDuration ); - iInfoDisplay->MakeVisible( ETrue ); - } - else //Landscape - { - iInfoDisplay->SetLayout( CVeiTextDisplay::EEverything ); - iInfoDisplay->MakeVisible( ETrue ); - } - - if ( iView.IsForeground() ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EOpenComplete 2"); - iVideoDisplay->ShowBlackScreen(); - DrawDeferred(); - if ( iTempVideoInfo && !iFrameReady) - { - iTempVideoInfo->CancelFrame(); - } - iVideoDisplay->Play(); - } - else - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EOpenComplete 3"); - PauseVideoL(); - } - } - break; - } - case MVeiVideoDisplayObserver::EBufferingStarted: - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EBufferingStarted"); - SetPreviewState( EStateBuffering ); - if ( iPeriodic ) - { - iPeriodic->Cancel(); - } - break; - } - case MVeiVideoDisplayObserver::ELoadingComplete: - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::ELoadingComplete 1"); - - if (EStatePaused == iPreviewState) - { - iVideoDisplay->PauseL(); - } - else - { - SetPreviewState( EStatePlaying ); - - if (iFullScreenSelected) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::ELoadingComplete 2"); - iView.SetEditorState( CVeiEditVideoView::EPreview); - } - else - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::ELoadingComplete 3"); - iView.SetEditorState( CVeiEditVideoView::EQuickPreview); - DrawDeferred(); - iVideoDisplay->ShowBlackScreen(); - iScreenLight->Start(); - const TUint delay = 100000; - iPeriodic->Start( delay, delay, TCallBack( CVeiEditVideoContainer::UpdatePosition, this ) ); - TRAP_IGNORE(iView.StartNaviPaneUpdateL()); - } - } - break; - } - case MVeiVideoDisplayObserver::EPlayComplete: - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EPlayComplete 1"); - iScreenLight->Stop(); - if ( iPeriodic ) - { - iPeriodic->Cancel(); - } - - if ( !iFullScreenSelected ) - { - SetPreviewState(EStateStopped); - - iLastPosition = iVideoDisplay->TotalLengthL(); - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - SetFinishedStatus( ETrue ); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EPlayComplete 2"); - GetThumbAtL(0); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EPlayComplete 3"); - - iView.SetEditorState( CVeiEditVideoView::EQuickPreview ); - iView.StopNaviPaneUpdateL(); - } - else - { - if (EModeMixingAudio != iSelectionMode) - { - iView.SetEditorState( CVeiEditVideoView::EEdit ); - } - else - { - iView.SetEditorState(CVeiEditVideoView::EMixAudio); - } - - SetBlackScreen( EFalse ); - iView.SetFullScreenSelected( EFalse ); - iVideoDisplay->Stop( ETrue ); - DrawDeferred(); - } - - if (KErrNoMemory == aInfo || KErrSessionClosed == aInfo) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EPlayComplete 4"); - iView.ShowGlobalErrorNote( aInfo ); - StopVideo(ETrue); - } - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EPlayComplete 5"); - break; - } - case MVeiVideoDisplayObserver::EStop: - { - LOGFMT3(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop 1, \ - iFullScreenSelected:%d, iSelectionMode:%d, iCloseStream:%d", \ - iFullScreenSelected, iSelectionMode, iCloseStream); - - if ( iPeriodic ) - { - iPeriodic->Cancel(); - } - iView.StopNaviPaneUpdateL(); - - if (EStateGettingFrame == iPreviewState) - { - break; - } - // position must be set here to 0 because state EStateGettingFrame cannot be resoluted in player - // and position must not be set to 0 in that state - iVideoDisplay->SetPositionL(TTimeIntervalMicroSeconds( 0 )); - - if ( iFullScreenSelected || iCloseStream ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop 4"); - SetPreviewState(EStateClosed); - iVideoDisplay->SetBlackScreen( EFalse ); - iDummyCutBar->MakeVisible( ETrue ); - - if (EModeMixingAudio != iSelectionMode) - { - iView.SetEditorState( CVeiEditVideoView::EEdit ); - SetSelectionMode( EModeNavigation ); - } - else - { - iView.SetEditorState(CVeiEditVideoView::EMixAudio); - break; - } - SetCursorLocation( iCursorPreviousLocation ); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop 5"); - DrawDeferred(); - iCloseStream = EFalse; - break; - } - - if (EModeMixingAudio != iSelectionMode) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop 2"); - GetThumbAtL(0); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop 3"); - } - - SetPreviewState(EStateStopped); - iLastPosition = iVideoDisplay->TotalLengthL(); - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - iView.DoUpdateEditNaviLabelL(); - SetFinishedStatus( ETrue ); - iView.SetEditorState( CVeiEditVideoView::EQuickPreview ); - // redraw needed at least to erase pause icon - DrawDeferred(); - break; - } - case MVeiVideoDisplayObserver::EVolumeLevelChanged: - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EVolumeLevelChanged 1"); - TInt playerVolume = iVideoDisplay->Volume(); - iView.ShowVolumeLabelL( playerVolume ); - break; - } - case MVeiVideoDisplayObserver::EError: - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EError 1"); - iView.ShowGlobalErrorNote( aInfo ); - if (KErrMMAudioDevice == aInfo) - { - PauseVideoL(); - } - else - { - StopVideo(ETrue); - } - break; - } - default: - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() default case, aEvent:%d", aEvent); - }; - } - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyVideoDisplayEvent() Out"); - } - - -void CVeiEditVideoContainer::StartFrameTakerL( TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartFrameTakerL: In"); - -// First frame is shown in main display so it is bigger.. Last frame is always -// on transition display and one frame for the video timeline. - TSize firstThumbResolution = iVideoDisplay->GetScreenSize(); - TSize lastThumbResolution = iTransitionDisplayLeft->GetScreenSize(); - TSize timelineThumbResolution = TSize( 34, /*iVideoBarBox.Height()-2*/28 ); - - TTimeIntervalMicroSeconds cutInTime = iMovie.VideoClipCutInTime( aIndex ); - TTimeIntervalMicroSeconds cutOutTime = iMovie.VideoClipCutOutTime( aIndex ); - - - TInt frameCount = iMovie.VideoClipInfo(aIndex)->VideoFrameCount(); - - TInt firstThumbNailIndex = iMovie.VideoClipInfo(aIndex)->GetVideoFrameIndexL( cutInTime ); - TInt lastThumbNailIndex = iMovie.VideoClipInfo(aIndex)->GetVideoFrameIndexL( cutOutTime ); - if ( lastThumbNailIndex >= frameCount ) - { - lastThumbNailIndex = frameCount-1; - } - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartFrameTakerL: 2"); - - iFrameTaker->GetFramesL( *iMovie.VideoClipInfo(aIndex), - firstThumbNailIndex, &firstThumbResolution, - lastThumbNailIndex, &lastThumbResolution, - firstThumbNailIndex, &timelineThumbResolution, - EPriorityLow ); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartFrameTakerL: Out"); - } - -void CVeiEditVideoContainer::NotifyFramesCompleted( CFbsBitmap* aFirstFrame, - CFbsBitmap* aLastFrame, CFbsBitmap* aTimelineFrame, TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyFramesCompleted: In, aError:%d", aError); - CStoryboardVideoItem* item; - if( aError==KErrNone ) - { - if ( iMovie.VideoClipColorEffect( iVideoCursorPos ) == EVedColorEffectBlackAndWhite ) - { - ConvertBW( *aFirstFrame ); - ConvertBW( *aLastFrame ); - ConvertBW( *aTimelineFrame ); - } - if ( iMovie.VideoClipColorEffect( iVideoCursorPos ) == EVedColorEffectToning ) - { - //TRgb toning = iMovie.VideoClipColorTone(CurrentIndex()); - ConvertToning(*aFirstFrame); - ConvertToning(*aLastFrame); - ConvertToning(*aTimelineFrame); - } - - item = iVideoItemArray[ iCurrentlyProcessedIndex ]; - TRAP_IGNORE( - item->InsertLastFrameL( *aLastFrame, *aLastFrame ); - item->InsertFirstFrameL( *aFirstFrame, *aFirstFrame ); - item->InsertTimelineFrameL( *aTimelineFrame, *aTimelineFrame ); - iVideoDisplay->ShowPictureL( *item->iIconBitmap, *item->iIconMask); - ); - - // UpdateThumbnail launches progressnote. - if (iProgressDialog ) - { - iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressDialog->ProcessFinishedL() ); - //iProgressDialog = NULL; - } - iView.HandleCommandL( EAknSoftkeyOk ); - } - - // UpdateThumbnail launches progressnote. - if (iProgressDialog ) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyFramesCompleted: 2"); - iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressDialog->ProcessFinishedL() ); - //iProgressDialog = NULL; - } - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyFramesCompleted: 3"); - iCurrentlyProcessedIndex = -1; - iView.SetWaitMode( CVeiEditVideoView::ENotWaiting ); - SetCursorLocation( CursorLocation() ); - - iView.CancelWaitDialog(aError); - iView.AddNext(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyFramesCompleted: Out"); - } - -void CVeiEditVideoContainer::NotifyCompletion( TInt DEBUGLOG_ARG(aErr) ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyCompletion: In, err:%d", aErr); - - if (EStateTerminating == iPreviewState) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyCompletion(): app is closing..."); - return; - } - - if ( iTakeSnapshot ) - { - // to eliminate previous (wrong) output file from being deleted in CancelSnapshotSave() - delete iSaveToFileName; - iSaveToFileName = NULL; - - if ( iProgressDialog ) - { - iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressDialog->ProcessFinishedL() ); - //iProgressDialog = NULL; - } - return; - } - - TRAP_IGNORE(iTransitionDisplayRight->ShowPictureL( *iConverter->GetBitmap())); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::NotifyCompletion: Out"); - } - -void CVeiEditVideoContainer::SetSlowMotionStartValueL(TInt aSlowMotionStartValue) - { - iSlowMotionValue = aSlowMotionStartValue; - iArrowsDisplay->SetSlowMotionPreset( iSlowMotionValue / 10 ); - - TInt frameInterval = (1000-iSlowMotionValue)/2; - - iVideoDisplay->ShowAnimationL( R_VEI_SLOW_MOTION_ANIMATION, frameInterval ); - } - -void CVeiEditVideoContainer::SetRecordedAudioDuration( const TTimeIntervalMicroSeconds& aDuration ) - { - iRecordedAudioDuration = aDuration; - - if ( (iCursorLocation==ECursorOnTransition) && (CurrentIndex() > 0) ) - { - iVideoCursorPos--; - } - iInfoDisplay->SetLayout( CVeiTextDisplay::ERecording ); // Name and duration RED - iInfoDisplay->SetDuration( iRecordedAudioDuration ); - } - - -TBool CVeiEditVideoContainer::IsAudioClipCutted() - { - TTimeIntervalMicroSeconds audioClipDuration = iMovie.AudioClipInfo( CurrentIndex())->Duration(); - TTimeIntervalMicroSeconds audioClipCutInTime = iMovie.AudioClipCutInTime( CurrentIndex() ); - TTimeIntervalMicroSeconds audioClipCutOutTime = iMovie.AudioClipCutOutTime( CurrentIndex() ); - - TTimeIntervalMicroSeconds appendTime(500000); - TTimeIntervalMicroSeconds cuttedAudioDuration = ( audioClipCutOutTime.Int64() - audioClipCutInTime.Int64() ) + appendTime.Int64(); - iInfoDisplay->SetDuration( cuttedAudioDuration ); - - iDummyCutBar->SetTotalDuration( audioClipDuration ); - iDummyCutBar->SetInPoint( audioClipCutInTime ); - iDummyCutBar->SetOutPoint( audioClipCutOutTime ); - iDummyCutBar->Dim( EFalse ); - - if ( ( audioClipCutOutTime.Int64() - audioClipCutInTime.Int64() ) == audioClipDuration.Int64() ) - { - return EFalse; - } - else - { - return ETrue; - } - } - -/* Checks if aFilename is belongs to any album. Album name is returned, or KNullDesC -if aFilename does not belong to album. */ -void CVeiEditVideoContainer::GetAlbumL( const TDesC& aFilename, TDes& aAlbumName ) const - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetAlbumL: in"); - - CMGAlbumManager* albumManager = MGAlbumManagerFactory::NewAlbumManagerL(); - TInt albumCount = albumManager->AlbumCount(); - - // Get album Id - for( TInt i=0;iAlbumInfoLC( i ); - TInt albumId = albumInfo->Id(); - TInt itemCount = albumInfo->ItemCount(); - - TFileName albumName = albumInfo->Name(); - CleanupStack::PopAndDestroy(albumInfo); - - if ( itemCount > 0 ) - { - TInt itemPos; - CDesCArrayFlat* filenameArray = new (ELeave) CDesCArrayFlat( itemCount ); - CleanupStack::PushL (filenameArray); - - albumManager->GetAlbumFileArrayL( albumId, *filenameArray ); - - TInt isFound = filenameArray->Find( aFilename, itemPos ); - CleanupStack::PopAndDestroy (filenameArray); - - if ( isFound == KErrNone ) /* filename was found on filenamearray */ - { - delete albumManager; - aAlbumName.Append(albumName); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetAlbumL: out1"); - return; - } - } - } - delete albumManager; - - aAlbumName = KNullDesC; - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::GetAlbumL: out2"); - } - - -void CVeiEditVideoContainer::SetBlackScreen( TBool aBlack ) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::SetBlackScreen: In, aBlack:%d", aBlack); - - iBlackScreen = aBlack; - - // Black backbround for the preview - if ( iBlackScreen ) - { - iVideoDisplay->MakeVisible( EFalse ); - /* Video Display components for transitioin state*/ - iTransitionDisplayRight->MakeVisible( EFalse ); - iTransitionDisplayLeft->MakeVisible( EFalse ); - - iDummyCutBar->MakeVisible( EFalse ); - iDummyCutBarLeft->MakeVisible( EFalse ); - - /* IconBox */ - iEffectSymbols->MakeVisible( EFalse ); - iInfoDisplay->MakeVisible( EFalse ); - iArrowsDisplay->MakeVisible( EFalse ); - - iHorizontalSlider->MakeVisible( EFalse ); - iVerticalSlider->MakeVisible( EFalse ); - - if( iCursorLocation == ECursorOnTransition ) - { - iVideoDisplay->StopAnimation(); - } - } - else - { - SetCursorLocation( CursorLocation() ); - } - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::SetBlackScreen: Out"); - } - -TInt CVeiEditVideoContainer::SnapshotSize() - { - TInt sizeEstimate = 0; - - if( iTempVideoInfo ) - { - TTimeIntervalMicroSeconds playBackPos = PlaybackPositionL(); - TInt frame = iTempVideoInfo->GetVideoFrameIndexL( playBackPos ); - sizeEstimate = iTempVideoInfo->VideoFrameSizeL( frame ); - } - - return sizeEstimate; - } - -TInt CVeiEditVideoContainer::AudioMixingRatio() const - { - return iHorizontalSlider->SliderPosition(); - } - - -TInt CVeiEditVideoContainer::Volume() const - { - return -(iVerticalSlider->SliderPosition()); - } - -//============================================================================= -void CVeiEditVideoContainer::SetColourToningIcons(TInt /*aIndex*/) - { - if ( ( iMovie.VideoClipColorEffect( iVideoCursorPos ) ) == EVedColorEffectBlackAndWhite ) - { - iEffectSymbols->SetBlackAndWhiteIconVisibility(ETrue); - } - else - { - iEffectSymbols->SetBlackAndWhiteIconVisibility(EFalse); - } - if ( ( iMovie.VideoClipColorEffect( iVideoCursorPos ) ) == EVedColorEffectToning ) - { - iEffectSymbols->SetColourIconVisibility(ETrue); - } - else - { - iEffectSymbols->SetColourIconVisibility(EFalse); - } - } -//======================================================================================================= -void CVeiEditVideoContainer::StartProgressDialogL(const TInt aDialogResId, const TInt aTextResId) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartProgressDialogL: In"); - - if (iProgressDialog) - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartProgressDialogL: 1"); - delete iProgressDialog; - iProgressDialog = NULL; - } - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartProgressDialogL: 2"); - - iProgressDialog = new (ELeave) CAknProgressDialog( - reinterpret_cast(&iProgressDialog), ETrue ); - iProgressDialog->PrepareLC(aDialogResId); - iProgressDialog->SetCallback( this ); - - - HBufC* stringholder = StringLoader::LoadLC( aTextResId, iEikonEnv ); - iProgressDialog->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy(stringholder); - - iProgressDialog->GetProgressInfoL()->SetFinalValue( 100 ); - iProgressDialog->RunLD(); - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::StartProgressDialogL: Out"); - } - -//============================================================================= -void CVeiEditVideoContainer::SetPreviewState(const TPreviewState aNewState) - { - LOGFMT3(KVideoEditorLogFile, "CVeiEditVideoContainer::SetPreviewState In, aNewState:%d, iPreviewState:%d, iPreviousPreviewState:%d", aNewState, iPreviewState, iPreviousPreviewState); - - if (EStateGettingFrame == aNewState) - { - iPreviousPreviewState = iPreviewState; - } - iPreviewState = aNewState; - iSeeking = EFalse; - - /*if (EStateTerminating != iPreviewState) - { - iView.SetEditorState( iView.EditorState() ); - } - */ - - // Make sure that the pause indicator is drawn immediately - if (EStatePaused == iPreviewState) - { - DrawNow(); - } - - // While playing, grab the volume keys for adjusting playback volume. - // In other states let them pass e.g. to the music player. - if(EStatePlaying == aNewState) - { - if (!iRemConTarget) - { - // We can ignore the possible error - the if the remote connection - // fails, we just won't receive volume keys, which is a minor problem. - TRAPD(err, iRemConTarget = CVeiRemConTarget::NewL( *this ) ); - if (KErrNone != err) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoContainer::SetPreviewState: CVeiRemConTarget::NewL failed: %d", err); - } - } - } - else - { - delete iRemConTarget; - iRemConTarget = NULL; - } - - // : implement #ifdef here to facilitate easy remove of unnecessary stopping - //#ifdef STOP_PLAYER_DURING_GETFRAME - if (EStateGettingFrame == aNewState) - { - /* : - check out on every phone before releasing whether videodisplay should be stopped before starting - asynchronous GetFrameL() - see how EStateGettingFrame is handled in SetPreviewState - Stopping frees memory and it is needed in memory sensible devices - */ - //iVideoDisplay->Stop(ETrue); - // SetEditorState is effective because iPreviewState is changed - iView.SetEditorState( iView.EditorState() ); - } - //#endif - } - -//============================================================================= -void CVeiEditVideoContainer::HandleVolumeUpL() - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeUpL: in"); - - iVideoDisplay->AdjustVolumeL( 1 ); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeUpL: out"); - } - -//============================================================================= -void CVeiEditVideoContainer::HandleVolumeDownL() - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeDownL: in"); - - iVideoDisplay->AdjustVolumeL( -1 ); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::HandleVolumeDownL: out"); - } - -//============================================================================= -void CVeiEditVideoContainer::PrepareForTerminationL() - { - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PrepareForTerminationL: in"); - - SetPreviewState( EStateTerminating ); - iVideoDisplay->Stop(ETrue); - iScreenLight->Stop(); - - LOG(KVideoEditorLogFile, "CVeiEditVideoContainer::PrepareForTerminationL: out"); - } - -//============================================================================= -TInt CVeiEditVideoContainer::AsyncTakeSnapshot(TAny* aThis) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::AsyncTakeSnapshot"); - - // In the asynchronous version, trap the rest of the functions - // to make sure that the caller's TRequestStatus is always - // completed, also in case of failures. - CVeiEditVideoContainer* container = static_cast(aThis); - TInt err = KErrNone; - TRAP(err, container->TakeSnapshotL()); - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoContainer::AsyncTakeSnapshot 1, err:%d", err); - User::LeaveIfError(err); - return KErrNone; - } - -//============================================================================= -void CVeiEditVideoContainer::CalculateVideoClipRects() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::CalculateVideoClipRects: in" ); - iVideoItemRectArray.Reset(); - - TRect selectedRect; // rect of the highlighted clip - TRect videoClipRect; // rect of the video clip in timeline - TInt barWidth = iVideoBarBox.Width(); - TInt64 barDuration = iMovie.Duration().Int64(); - - TInt64 audioDuration(0); - if ( (iMovie.AudioClipCount() != 0) && ((iSelectionMode == EModeRecording ) || - (iSelectionMode == EModeRecordingPaused))) - { - audioDuration = (iMovie.AudioClipEndTime( iMovie.AudioClipCount() - 1 )).Int64(); - } - - audioDuration+= iRecordedAudioDuration.Int64(); - - if ( audioDuration > barDuration ) - { - barDuration = audioDuration; - } - if ( iRecordedAudioStartTime > barDuration ) - { - barDuration = iRecordedAudioStartTime.Int64(); - } - if (barDuration < 30000000) - { - barDuration = 30000000; - } - else if (barDuration < 45000000) - { - barDuration = 45000000; - } - else{ - barDuration = ((barDuration / 30000000) + 1) * 30000000; - } - - videoClipRect.iTl.iY = iVideoBarBox.iTl.iY; - videoClipRect.iBr.iY = iVideoBarBox.iBr.iY; - - // calculate the rect of each of the video clip - for (TInt i = 0; i < iMovie.VideoClipCount(); i++ ) - { - videoClipRect.iTl.iX = iVideoBarBox.iTl.iX - + static_cast( (iMovie.VideoClipStartTime( i ).Int64() * barWidth ) / barDuration ); - videoClipRect.iBr.iX = iVideoBarBox.iTl.iX - + static_cast( (iMovie.VideoClipEndTime( i ).Int64() * barWidth ) / barDuration )+ 1; - - if ((iCursorLocation == ECursorOnClip) - && (i == CurrentIndex()) && ( iView.EditorState() == CVeiEditVideoView::EEdit )) - // the current video clip selected - { - LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::CalculateVideoClipRects: selected clip" ); - selectedRect = videoClipRect; - selectedRect.Grow( iZoomFactorX,iZoomFactorY ); - iVideoItemRectArray.Insert( selectedRect, i ); - } - else - { - iVideoItemRectArray.Insert( videoClipRect, i ); - } - - LOGFMT6( KVideoEditorLogFile, "CVeiEditVideoContainer::CalculateVideoClipRects, iVideoItemRectArray.[%d]->Rect(): \ - (%d,%d,%d,%d), barWidth = %d ", \ - i, - iVideoItemRectArray[i].iTl.iX, - iVideoItemRectArray[i].iTl.iY, - iVideoItemRectArray[i].iBr.iX, - iVideoItemRectArray[i].iBr.iY, - barWidth ); - } - - // Calculate the empty rect of the timeline - if ( iMovie.VideoClipCount() > 0 ) - { - iEmptyVideoTimeLineRect.iTl = TPoint ( iVideoItemRectArray[ iMovie.VideoClipCount()-1 ].iBr.iX, iVideoBarBox.iTl.iY ); - iEmptyVideoTimeLineRect.iBr = iVideoBarBox.iBr; - } - else - { - iEmptyVideoTimeLineRect = iVideoBarBox; - } - - LOGFMT4( KVideoEditorLogFile, "CVeiEditVideoContainer::CalculateVideoClipRects, iEmptyVideoTimeLineRect: \ - (%d,%d,%d,%d) ", \ - iEmptyVideoTimeLineRect.iTl.iX, - iEmptyVideoTimeLineRect.iTl.iY, - iEmptyVideoTimeLineRect.iBr.iX, - iEmptyVideoTimeLineRect.iBr.iY ); - - LOG( KVideoEditorLogFile, "CVeiEditVideoContainer::CalculateVideoClipRects: out" ); - } -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiEditVideoView.cpp --- a/videditor/ManualVideoEditor/src/VeiEditVideoView.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5569 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -// User includes -#include "veiapp.h" -#include "veicutaudioview.h" -#include "VeiEditVideoView.h" -#include "VeiEditVideoContainer.h" -#include "manualvideoeditor.hrh" -#include "veieditvideolabelnavi.h" -#include "veicutvideoview.h" -#include "veiappui.h" -#include "VideoEditorCommon.h" -#include "VideoEditorUtils.h" -#include "VeiTimeLabelNavi.h" -#include "veiaddqueue.h" -#include "veitempmaker.h" -#include "videoeditorcommon.h" -#include "VeiImageClipGenerator.h" -#include "VeiTitleClipGenerator.h" -#include "VeiTextDisplay.h" -#include "VeiPopup.h" -#include "VeiVideoEditorSettings.h" -#include "VeiMGFetchVerifier.h" -#include "VeiErrorUi.h" - - -const TInt KTitleScreenMaxTextLength = 100; //2048; - - -void CleanupRestoreOrientation( TAny* object ) - { - LOG( KVideoEditorLogFile, "CleanupRestoreOrientation: in" ); - - CVeiEditVideoView* me = static_cast < CVeiEditVideoView* > ( object ); - me->RestoreOrientation(); - - LOG( KVideoEditorLogFile, "CleanupRestoreOrientation: Out" ); - } - -CVeiEditVideoView* CVeiEditVideoView::NewL( CVeiCutVideoView& aCutView, - CVeiCutAudioView& aCutAudioView, - CSendUi& aSendAppUi ) - { - CVeiEditVideoView* self = CVeiEditVideoView::NewLC( aCutView, aCutAudioView, aSendAppUi ); - CleanupStack::Pop( self ); - return self; - } - -CVeiEditVideoView* CVeiEditVideoView::NewLC( CVeiCutVideoView& aCutView, - CVeiCutAudioView& aCutAudioView, - CSendUi& aSendAppUi ) - { - CVeiEditVideoView* self = new ( ELeave ) CVeiEditVideoView( aCutView, aCutAudioView, aSendAppUi ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -CVeiEditVideoView::CVeiEditVideoView( CVeiCutVideoView& aCutView, - CVeiCutAudioView& aCutAudioView, - CSendUi& aSendAppUi ) - : iCutView( aCutView ), - iCutAudioView( aCutAudioView ), - iSendAppUi( aSendAppUi ), - iOriginalAudioStartPoint( -1 ), - iOriginalAudioDuration( -1 ), - iMemoryCardChecked(EFalse), - iOriginalOrientation( CAknAppUiBase::EAppUiOrientationAutomatic ) - { - iOriginalVideoClipIndex = - 1; - iMovieSavedFlag = ETrue; - SetNewTempFileNeeded( EFalse ); - iMovieFirstAddFlag = ETrue; - iWaitMode = ENotWaiting; - } - -void CVeiEditVideoView::ConstructL() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::ConstructL: in" ); - - BaseConstructL( R_VEI_EDIT_VIDEO_VIEW ); - - CEikStatusPane* sp = StatusPane(); - iNaviPane = ( CAknNavigationControlContainer* ) sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ); - - /** General navilabel(mms state, movie size, movie time). - Is visible always except when in moving state */ - iEditLabel = CreateEditNaviLabelL(); - - - /** Navilabel when previewing video in small preview */ - iPreviewLabel = CreatePreviewNaviLabelL(); - - /** Navipane updating timer when editor is on small preview - mode */ - iPreviewUpdatePeriodic = CPeriodic::NewL( CActive::EPriorityLow ); - - /* volume bars are showed when volume is changed in small preview */ - // iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow ); - - iVolumeNavi = iNaviPane->CreateVolumeIndicatorL( - R_AVKON_NAVI_PANE_VOLUME_INDICATOR ); - - /** Navilabel when audio or video clip is in moving state */ - iMoveLabel = CreateMoveNaviLabelL(); - - iTempMaker = CVeiTempMaker::NewL(); - - iErrorUI = CVeiErrorUI::NewL( *iCoeEnv ); - - iMovie = CVedMovie::NewL( NULL ); - iMovie->RegisterMovieObserverL( this ); - - /** All media files are added to video/audio tracks through mediaqueue */ - iMediaQueue = CVeiAddQueue::NewL( *this, * iMovie, * this ); - - iOriginalAudioDuration = TTimeIntervalMicroSeconds( - 1 ); - /* Create recorder with max priority. */ - iRecorder = CMdaAudioRecorderUtility::NewL( *this, NULL, EMdaPriorityMax, - TMdaPriorityPreference( KAudioPrefVideoRecording ) - /*EMdaPriorityPreferenceQuality*/ ); - iAudioRecordPeriodic = CPeriodic::NewL( CActive::EPriorityStandard ); - - /** Popup menus for video editor */ - iPopup = CVeiPopup::NewL( *this ); - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::ConstructL: out" ); - } - -TUid CVeiEditVideoView::Id()const - { - return TUid::Uid( EVeiEditVideoView ); - } - -CAknNavigationDecorator* CVeiEditVideoView::CreateMoveNaviLabelL() - { - CAknNaviLabel* movelabel = new( ELeave )CAknNaviLabel; - movelabel->SetNaviLabelType( CAknNaviLabel::ENavigationLabel ); - - CleanupStack::PushL( movelabel ); - - CAknNavigationDecorator* decoratedFolder = CAknNavigationDecorator::NewL( - iNaviPane, movelabel, CAknNavigationDecorator::ENotSpecified ); - - CleanupStack::Pop( movelabel ); - - CleanupStack::PushL( decoratedFolder ); - decoratedFolder->SetContainerWindowL( *iNaviPane ); - CleanupStack::Pop( decoratedFolder ); - decoratedFolder->MakeScrollButtonVisible( ETrue ); - - return decoratedFolder; - } - -CAknNavigationDecorator* CVeiEditVideoView::CreatePreviewNaviLabelL() - { - CVeiTimeLabelNavi* timelabelnavi = CVeiTimeLabelNavi::NewLC(); - CAknNavigationDecorator* decoratedFolder = CAknNavigationDecorator::NewL( - iNaviPane, timelabelnavi, CAknNavigationDecorator::ENotSpecified ); - CleanupStack::Pop( timelabelnavi ); - - CleanupStack::PushL( decoratedFolder ); - decoratedFolder->SetContainerWindowL( *iNaviPane ); - CleanupStack::Pop( decoratedFolder ); - decoratedFolder->MakeScrollButtonVisible( EFalse ); - - return decoratedFolder; - } - -/** - * Default navilabel. Shows MMS,Size and Time information. - */ -CAknNavigationDecorator* CVeiEditVideoView::CreateEditNaviLabelL() - { - CVeiEditVideoLabelNavi* editvideolabelnavi = CVeiEditVideoLabelNavi::NewLC(); - - editvideolabelnavi->SetState( CVeiEditVideoLabelNavi::EStateInitializing ); - - CAknNavigationDecorator* navidecorator = CAknNavigationDecorator::NewL( - iNaviPane, editvideolabelnavi, CAknNavigationDecorator::ENotSpecified ); - - CleanupStack::Pop( editvideolabelnavi ); - - CleanupStack::PushL( navidecorator ); - navidecorator->SetContainerWindowL( *iNaviPane ); - CleanupStack::Pop( navidecorator ); - navidecorator->MakeScrollButtonVisible( EFalse ); - - return navidecorator; - } - -CVeiEditVideoView::~CVeiEditVideoView() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: In" ); - - if ( iProgressNote ) - { - delete iProgressNote; - iProgressNote = NULL; - } - - if ( iPopup ) - { - delete iPopup; - iPopup = NULL; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iContainer" ); - if ( iContainer ) - { - AppUi()->RemoveFromStack( iContainer ); - delete iContainer; - iContainer = NULL; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iMediaQueue" ); - if ( iMediaQueue ) - { - delete iMediaQueue; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iMovie" ); - if ( iMovie ) - { - iMovie->Reset(); - //if application is closed from cut video view, observer is not - //registered. - if ( ( EProcessingMovieForCutting != iWaitMode ) && - ( ECuttingAudio != iWaitMode ) ) - { - iMovie->UnregisterMovieObserver( this ); - } - delete iMovie; - iMovie = NULL; - } - - if ( iAudioRecordPeriodic ) - { - iAudioRecordPeriodic->Cancel(); - delete iAudioRecordPeriodic; - } - - if ( iPreviewUpdatePeriodic ) - { - iPreviewUpdatePeriodic->Cancel(); - delete iPreviewUpdatePeriodic; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iTempFile" ); - if ( iTempFile ) - { - TInt err = iEikonEnv->FsSession().Delete( *iTempFile ); - if ( err ) - { - // what to do when error occurs in destructor??? - } - delete iTempFile; - iTempFile = NULL; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iSaveToFileName" ); - - if ( iSaveToFileName ) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - - if ( iTempRecordedAudio ) - { - TInt err = iEikonEnv->FsSession().Delete( *iTempRecordedAudio ); - if ( err ) - { - // what to do when error occurs in destructor??? - } - delete iTempRecordedAudio; - iTempRecordedAudio = NULL; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iTempMaker" ); - - if ( iTempMaker ) - { - delete iTempMaker; - iTempMaker = NULL; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iErrorUI" ); - if ( iErrorUI ) - { - delete iErrorUI; - iErrorUI = NULL; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iAudioClipInfo" ); - delete iAudioClipInfo; - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iEditLabel" ); - delete iEditLabel; - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iMoveLabel" ); - delete iMoveLabel; - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iPreviewLabel" ); - delete iPreviewLabel; - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iRecorder" ); - if ( iRecorder ) - { - delete iRecorder; - iRecorder = NULL; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iVolumeHider" ); - if ( iVolumeHider ) - { - iVolumeHider->Cancel(); - delete iVolumeHider; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: iVolumeNavi" ); - delete iVolumeNavi; - - delete iCallBack; - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::~CVeiEditVideoView: Out" ); - } - -void CVeiEditVideoView::DialogDismissedL( TInt aButtonId ) - { - LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: In, aButtonId:%d, iWaitMode:%d", aButtonId, iWaitMode ); - - IsEnoughFreeSpaceToSaveL(); - - if ( aButtonId != EAknSoftkeyDone ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: In, 2" ); - CMdaAudioRecorderUtility::TState rState; - rState = CMdaAudioClipUtility::ENotReady; - - if ( iRecorder ) - { - rState = iRecorder->State(); - } - - if (( EOpeningAudioInfo == iWaitMode ) || ( CMdaAudioClipUtility::EOpen == rState )) - { - delete iAudioClipInfo; - iAudioClipInfo = NULL; - iWaitMode = EProcessingError; - iMovie->CancelProcessing(); - } - else - { - iWaitMode = EProcessingError; - iMovie->CancelProcessing(); - } - } - else if ( EProcessingMovieSend == iWaitMode ) - { - //SendMovieL(); - if ( !iCallBack ) - { - TCallBack cb( CVeiEditVideoView::AsyncBackSend, this ); - iCallBack = new ( ELeave ) CAsyncCallBack( cb, CActive::EPriorityStandard ); - } - iCallBack->CallBack(); - } - else if ( EProcessingMovieTrimMms == iWaitMode ) - { - SetNewTempFileNeeded( EFalse ); - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 3, EProcessingMovieTrimMms" ); - - RFs& fs = iEikonEnv->FsSession(); - TEntry entry; - User::LeaveIfError( fs.Entry( *iTempFile, entry )); - TInt tempFileSize = entry.iSize / 1024; - TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi*, iEditLabel->DecoratedControl() )->GetMaxMmsSize(); - - LOGFMT2( KVideoEditorLogFile, - "CVeiEditVideoView::DialogDismissedL: 4, tempFileSize:%d, maxMmsSize:%d", tempFileSize, maxMmsSize ); - - if ( iMovie->IsMovieMMSCompatible()) - { - if ( tempFileSize <= maxMmsSize ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 5, MMS SIZE OK -- SEND" ); - iWaitMode = EProcessingMovieSend; - iGivenSendCommand = KSenduiMtmMmsUid; // MMS - - //SendMovieL(); - if ( !iCallBack ) - { - TCallBack cb( CVeiEditVideoView::AsyncBackSend, this ); - iCallBack = new( ELeave )CAsyncCallBack( cb, CActive::EPriorityStandard ); - } - iCallBack->CallBack(); - } - else - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 6, MMS SIZE FAILED - to TRIMM" ); - TBuf8 < 255 > conv8Filename; - CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, *iTempFile ); - iMovie->UnregisterMovieObserver( iContainer ); - iMovie->UnregisterMovieObserver( this ); - - AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid(0), conv8Filename ); - } - } - else - { - // if movie is not mms capable, trimming it does not help, instead its quality should be set - // trimming is made when other compatibility issues are fullfilled - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 7, MMS Compatible FAILED - to TRIMM" ); - TBuf8 < KMaxFileName > conv8Filename; - CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, *iTempFile ); - - iMovie->UnregisterMovieObserver( iContainer ); - iMovie->UnregisterMovieObserver( this ); - - AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid( 0 ), conv8Filename ); - } - iMovie->SetQuality( iBackupSaveQuality ); - return ; - } - else if (( EProcessingMovieSave == iWaitMode ) || - ( EProcessingMovieSaveThenQuit == iWaitMode )) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 8, EProcessingMovieSave|EProcessingMovieSaveThenQuit" ); - RFs& fs = iEikonEnv->FsSession(); - - CFileMan* fileman = CFileMan::NewL( fs ); - CleanupStack::PushL( fileman ); - - TInt moveErr( KErrNone ); - - if ( iTempFile->Left( 1 ) == iSaveToFileName->Left( 1 )) - { - moveErr = fileman->Rename( *iTempFile, * iSaveToFileName ); - LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 9, rename %S to %S", iTempFile, iSaveToFileName ); - } - else - { - moveErr = fileman->Move( *iTempFile, * iSaveToFileName ); - LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 10, moved %S to %S", iTempFile, iSaveToFileName ); - } - CleanupStack::PopAndDestroy( fileman ); - - delete iTempFile; - iTempFile = NULL; - - if ( moveErr ) - { - ShowGlobalErrorNote( moveErr ); - UpdateEditNaviLabel(); - iWaitMode = ENotWaiting; - return ; - } - - iMovieSavedFlag = ETrue; - - if ( EProcessingMovieSaveThenQuit == iWaitMode ) - { - iMovie->Reset(); - iMovieFirstAddFlag = ETrue; // True for the next edit process. - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 11" ); - UpdateMediaGalleryL(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 12, media gallery updated" ); - - if ( EProcessingMovieSaveThenQuit == iWaitMode ) - { - if ( !iCallBack ) - { - TCallBack cb( CVeiEditVideoView::AsyncBackSaveThenExitL, this ); - iCallBack = new( ELeave )CAsyncCallBack( cb, CActive::EPriorityStandard ); - - } - iCallBack->CallBack(); - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL Out" ); - return ; - } - else if ( EProcessingMoviePreview == iWaitMode && ( iTempFile != NULL )) - { - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview ); - iContainer->PlayVideoFileL( *iTempFile, iFullScreenSelected ); - } - else - { - if ( EProcessingError == iWaitMode ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 13" ); - if ( iTempFile ) - { - RFs& fs = iEikonEnv->FsSession(); - - fs.Delete( *iTempFile ); - delete iTempFile; - iTempFile = NULL; - SetNewTempFileNeeded( ETrue ); - } - - iWaitMode = ENotWaiting; - ShowGlobalErrorNote( iErrorNmb ); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 14" ); - UpdateEditNaviLabel(); - } - - if ( EProcessingAudioError == iWaitMode ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 15" ); - ShowErrorNote( R_VEI_ERRORNOTE_AUDIO_INSERTING_FAILED ); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: 16" ); - UpdateEditNaviLabel(); - iWaitMode = ENotWaiting; - } - - if ( iChangedFromMMCToPhoneMemory ) - { - HBufC* noteText = StringLoader::LoadLC( R_VED_MMC_NOT_INSERTED, - iEikonEnv ); - CAknInformationNote* informationNote = new( ELeave ) - CAknInformationNote( ETrue ); - informationNote->ExecuteLD( *noteText ); - - CleanupStack::PopAndDestroy( noteText ); - } - } - if ( EProcessingMovieSend != iWaitMode ) - { - iWaitMode = ENotWaiting; - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DialogDismissedL: Out" ); - } - - -TInt CVeiEditVideoView::AsyncBackSend( TAny* aThis ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSend" ); - - // In the asynchronous version, trap the rest of the functions - // to make sure that the caller's TRequestStatus is always - // completed, also in case of failures. - CVeiEditVideoView* view = static_cast < CVeiEditVideoView* > ( aThis ); - TInt err = KErrNone; - TRAP( err, view->SendMovieL()); - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSend 1, err:%d", err ); - - view->iWaitMode = ENotWaiting; - User::LeaveIfError( err ); - return KErrNone; - } - -TInt CVeiEditVideoView::AsyncBackSaveThenExitL( TAny* aThis ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSaveThenExitL In" ); - - // In the asynchronous version, trap the rest of the functions - // to make sure that the caller's TRequestStatus is always - // completed, also in case of failures. - - CVeiEditVideoView* view = static_cast < CVeiEditVideoView* > ( aThis ); - - view->AppUi()->HandleCommandL( EAknCmdExit ); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncBackSaveThenExitL 1" ); - return KErrNone; - } - -void CVeiEditVideoView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* - aMenuPane ) - { - if ( !iContainer || !iMovie ) - { - return ; - } - if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_MENU && CVeiEditVideoContainer - ::EModeMixingAudio == iContainer->SelectionMode()) - { - // Dim all the items and replace the with - // R_VEI_EDIT_VIDEO_VIEW_AUDIO_MIXING_MENU - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewInsert, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewMovie, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewSettings, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditStartTransition, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditMiddleTransition, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditEndTransition, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewHelp, ETrue ); - aMenuPane->SetItemDimmed( EEikCmdExit, ETrue ); - - aMenuPane->AddMenuItemsL( R_VEI_EDIT_VIDEO_VIEW_AUDIO_MIXING_MENU ); - - return ; - } - - if (( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_VIDEO_MENU ) || - ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_VIDEO_SUBMENU )) - { - // @ : if muted, remove AdjustVolume, if video has no audio, remove AdjustVolume - //if (!iMovie->VideoClipEditedHasAudio(iContainer->CurrentIndex())) - if ( !( iMovie->VideoClipInfo( iContainer->CurrentIndex()))->HasAudio()) - { - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoAdjustVolume ); - } - - if ( iMovie->VideoClipCount() < 2 ) - { - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoMove ); - } - - if ( iMovie->VideoClipIsMuteable( iContainer->CurrentIndex()) == EFalse - ) - { - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoMute ); - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoUnmute ); - } - else if ( iMovie->VideoClipIsMuted( iContainer->CurrentIndex())) - { - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoMute ); - } - else - { - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoUnmute ); - } - // remove "cut" if video duration < 1 sec. because engine/codec(s) do not handle them wholly at the moment - TTimeIntervalMicroSeconds duration = iMovie->VideoClipInfo( - iContainer->CurrentIndex())->Duration(); - if ( duration.Int64() < KMinCutVideoLength ) - { - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditVideoCutting ); - } - } - - if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_MOVIE_SUBMENU ) - { - if ( STATIC_CAST( CVeiEditVideoLabelNavi* , - iEditLabel->DecoratedControl())->IsMMSAvailable()) - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewTrimForMms, ETrue ); - } - - /*TInt tempint; - if (aMenuPane->MenuItemExists(EVeiCmdEditVideoMixAudio, tempint)) - { - if ((iMovie->VideoClipCount() > 0 && - (iMovie->VideoClipEditedHasAudio(0) && - iMovie->VideoClipEditedHasAudio(iMovie->VideoClipCount() - 1))) - && iMovie->AudioClipCount() > 0)*/ - if ( MixingConditionsOk()) - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoMixAudio, EFalse ); - } - else - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoMixAudio, ETrue ); - } - //} - } - - if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_MENU ) - { - if ( iSendKey ) - //Display send menu. - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewInsert, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewMovie, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewSettings, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditStartTransition, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditMiddleTransition, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditEndTransition, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewHelp, ETrue ); - aMenuPane->SetItemDimmed( EEikCmdExit, ETrue ); - - ShowAndHandleSendMenuCommandsL(); - - iSendKey = EFalse; - return ; - } - - if ( iMovie->VideoClipCount() == 0 ) - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue ); - } - - - if ( iMovie->VideoClipCount() == 0 && iMovie->AudioClipCount() == 0 ) - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditStartTransition, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditMiddleTransition, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditEndTransition, ETrue ); - - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewMovie, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue ); - return ; - } - else - { - TInt index = 0; - - aMenuPane->ItemAndPos( EVeiCmdEditVideoViewHelp, index ); - iSendAppUi.AddSendMenuItemL( *aMenuPane, index, EVeiCmdEditVideoViewSend ); - } - /* Remove irrelevant "edit" menus. */ - - if ( iContainer->CursorLocation() != VideoEditor::ECursorOnClip ) - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue ); - } - /* Checks if title or image */ - if (( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) && - ( iMovie->VideoClipCount() > 0 ) && - ( iMovie->VideoClipInfo( iContainer->CurrentIndex())->Class() - == EVedVideoClipClassGenerated - )) - { - /* Now refine the menu dimming to specific generators. */ - TUid generatorUid = iMovie->VideoClipInfo( - iContainer->CurrentIndex())->Generator()->Uid(); - - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue ); - if ( generatorUid == KUidImageClipGenerator ) - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue ); - } - else - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue ) - ; - } - } - else - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditImage, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue ); - } - - - if ( iContainer->CurrentClipIsFile()) - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue ); - } - else - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditVideo, ETrue ); - } - - if ( iContainer->CursorLocation() != VideoEditor::ECursorOnTransition ) - { - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditStartTransition ) - ; - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditEndTransition ); - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewEditMiddleTransition - ); - } - if (( iContainer->CursorLocation() != VideoEditor::ECursorOnAudio ) || - ( iMovie->AudioClipCount() == 0 )) - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditAudio, ETrue ); - } - - /* Remove irrelevant transition effect menus. */ - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) - { - aMenuPane->SetItemDimmed( EVeiCmdEditVideoViewEditText, ETrue ); - } - - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnTransition ) - { - if ( iContainer->CurrentIndex() == 0 ) - { - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewEditEndTransition ); - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewEditMiddleTransition ); - } - else if ( iContainer->CurrentIndex() < iMovie->VideoClipCount()) - { - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewEditStartTransition ); - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewEditEndTransition ); - } - else - { - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewEditStartTransition ); - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewEditMiddleTransition ); - } - } - } - - if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_START_TRANSITION_SUBMENU ) - { - switch ( iMovie->StartTransitionEffect()) - { - case EVedStartTransitionEffectNone: - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewTransitionNone ); - break; - case EVedStartTransitionEffectFadeFromBlack: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionFadeFromBlack ); - break; - case EVedStartTransitionEffectFadeFromWhite: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionFadeFromWhite ); - break; - default: - break; - } - } - - if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_END_TRANSITION_SUBMENU ) - { - switch ( iMovie->EndTransitionEffect()) - { - case EVedEndTransitionEffectNone: - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewTransitionNone ); - break; - case EVedEndTransitionEffectFadeToBlack: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionFadeToBlack ); - break; - case EVedEndTransitionEffectFadeToWhite: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionFadeToWhite ); - break; - default: - break; - } - } - - if ( aResourceId == R_VEI_EDIT_VIDEO_VIEW_EDIT_MIDDLE_TRANSITION_SUBMENU ) - { - TInt currentindex = iContainer->CurrentIndex() - 1; - switch ( iMovie->MiddleTransitionEffect( currentindex )) - { - case EVedMiddleTransitionEffectNone: - aMenuPane->DeleteMenuItem( EVeiCmdEditVideoViewTransitionNone ); - break; - case EVedMiddleTransitionEffectDipToBlack: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionDipToBlack ); - break; - case EVedMiddleTransitionEffectDipToWhite: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionDipToWhite ); - break; - case EVedMiddleTransitionEffectCrossfade: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionCrossfade ); - break; - case EVedMiddleTransitionEffectWipeLeftToRight: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionWipeFromLeft ); - break; - case EVedMiddleTransitionEffectWipeRightToLeft: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionWipeFromRight ); - break; - case EVedMiddleTransitionEffectWipeTopToBottom: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionWipeFromTop ); - break; - case EVedMiddleTransitionEffectWipeBottomToTop: - aMenuPane->DeleteMenuItem( - EVeiCmdEditVideoViewTransitionWipeFromBottom ); - break; - default: - break; - } - } - } - -void CVeiEditVideoView::HandleCommandL( TInt aCommand ) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::HandleCommandL( %d ): In", aCommand ); - - // At the startup HandleCommandL may get called before iContainer - // has been constructed. - if ( !iContainer ) - { - LOG( KVideoEditorLogFile, "\tiContainer == NULL" ); - AppUi()->HandleCommandL( aCommand ); - return ; - } - - TInt index; - switch ( aCommand ) - { - /* Cursor is on transition and up/key key is pressed*/ - case EVeiCmdEditVideoViewTransitionKeyUp: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionKeyUp" ); - BrowseStartTransition( ETrue ); - break; - } - case EVeiCmdEditVideoViewTransitionKeyDown: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionKeyDown" ); - BrowseStartTransition( EFalse ); - break; - } - case EVeiCmdSendMovie: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdSendMovie" ); - if (( iMovie->VideoClipCount() == 0 ) && - ( iMovie->AudioClipCount() == 0 )) - { - iSendKey = EFalse; - } - else - { - MenuBar()->TryDisplayMenuBarL(); - } - break; - } - case EAknSoftkeyDone: - { - LOG( KVideoEditorLogFile, "\tEAknSoftkeyDone" ); - - /*if (CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode()) - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - //iContainer->ArrowsControl(); - break; - } - */ - - if ( CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode()) - - { - - MixAudio(); - - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); - - VideoEditor::TCursorLocation cursorLocation = iContainer->CursorLocation(); - if (( cursorLocation == VideoEditor::ECursorOnClip ) && - ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeSlowMotion )) - - { - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - iContainer->ArrowsControl(); - } - else - { - iOriginalAudioClipIndex = - 1; - iOriginalVideoClipIndex = - 1; - iOriginalAudioStartPoint = TTimeIntervalMicroSeconds( -1 ); - iOriginalAudioDuration = TTimeIntervalMicroSeconds( -1 ); - - - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - } - SetEditorState( EEdit ); - UpdateEditNaviLabel(); - - // Setting the cursor location resets the image in the video display box - iContainer->SetCursorLocation( cursorLocation ); - } - break; - } - - case EAknSoftkeyOk: - { - LOG( KVideoEditorLogFile, "\tEAknSoftkeyOk" ); - - if ( CVeiEditVideoContainer::EModeAdjustVolume == iContainer->SelectionMode()) - - { - AdjustVolumeL(); - SetEditorState( EEdit ); - } - - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); - - if (( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) && - ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeSlowMotion )) - - { - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - iContainer->ArrowsControl(); - } - else - { - iOriginalAudioClipIndex = - 1; - iOriginalVideoClipIndex = - 1; - iOriginalAudioStartPoint = TTimeIntervalMicroSeconds( -1 ); - iOriginalAudioDuration = TTimeIntervalMicroSeconds( -1 ); - - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - } - UpdateEditNaviLabel(); - break; - } - case EAknSoftkeyCancel: - case EVeiCmdEditVideoMixAudioCancel: - { - LOG( KVideoEditorLogFile, "\tEAknSoftkeyCancel||EVeiCmdEditVideoMixAudioCancel" ); - - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); - - SetEditorState( EEdit ); - - if ( CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode() || - CVeiEditVideoContainer::EModeAdjustVolume == iContainer->SelectionMode()) - { - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - // Setting the cursor location resets the image in the video display box - iContainer->SetCursorLocation( iContainer->CursorLocation()); - break; - } - - if (( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) && - ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeSlowMotion )) - { - iMovie->VideoClipSetSpeed( iContainer->CurrentIndex(), iOriginalVideoSpeed ); - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - - iContainer->ArrowsControl(); - } - else - { - if ( iContainer->CursorLocation() == VideoEditor - ::ECursorOnAudio ) - { - if ( iOriginalAudioStartPoint >= TTimeIntervalMicroSeconds( 0 )) - { - iMovie->AudioClipSetStartTime( iContainer->CurrentIndex(), iOriginalAudioStartPoint ); - iOriginalAudioStartPoint = TTimeIntervalMicroSeconds( -1 ); - iMovie->AudioClipSetCutOutTime( iContainer->CurrentIndex(), iOriginalAudioDuration ); - iOriginalAudioDuration = TTimeIntervalMicroSeconds( -1 ); - } - else - { - index = iContainer->CurrentIndex(); - - iContainer->SetCurrentIndex( iOriginalAudioClipIndex ); - iOriginalAudioClipIndex = - 1; - iOriginalAudioDuration = TTimeIntervalMicroSeconds( -1 ); - - iMovie->RemoveAudioClip( index ); - } - } - else - { - if ( iContainer->SelectionMode() != CVeiEditVideoContainer::EModeDuration ) - { - iMovie->VideoClipSetIndex( iContainer->CurrentIndex(), iOriginalVideoClipIndex ); - iContainer->SetVideoCursorPosition( iOriginalVideoClipIndex ); - iOriginalVideoClipIndex = - 1; - } - else - { - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - if ( info->Class() == EVedVideoClipClassGenerated ) - { - if ( info->Generator()->Uid() == KUidTitleClipGenerator ) - { - CVeiTitleClipGenerator* generator = - STATIC_CAST( CVeiTitleClipGenerator* , info->Generator()); - generator->SetDuration( TTimeIntervalMicroSeconds( - iOriginalVideoCutOutTime.Int64() - - iOriginalVideoCutInTime.Int64())); - } - else if ( info->Generator()->Uid() == KUidImageClipGenerator ) - { - CVeiImageClipGenerator* generator = - STATIC_CAST( CVeiImageClipGenerator* , info->Generator()); - generator->SetDuration( TTimeIntervalMicroSeconds( - iOriginalVideoCutOutTime.Int64() - - iOriginalVideoCutInTime.Int64())); - } - } - } - } - } - - if ( iContainer->SelectionMode() == CVeiEditVideoContainer - ::EModePreview ) - { - iContainer->SetBlackScreen( EFalse ); - iContainer->SetRect( AppUi()->ClientRect()); - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - iContainer->ArrowsControl(); - } - else - { - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - UpdateEditNaviLabel(); - } - break; - } - case EVeiCmdEditVideoViewSend: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewSend" ); - ShowAndHandleSendMenuCommandsL(); - break; - } - - case EVeiCmdEditVideoViewPreviewLarge: - case EVeiCmdEditVideoViewPreviewSmall: - { - LOG( KVideoEditorLogFile, - "\tEVeiCmdEditVideoViewPreviewLarge||EVeiCmdEditVideoViewPreviewSmall" ); - - if ( CVeiEditVideoContainer::EModeMixingAudio == iContainer->SelectionMode()) - { - MixAudio(); - } - - if ( IsEnoughFreeSpaceToSaveL()) - { - if ( aCommand == EVeiCmdEditVideoViewPreviewLarge ) - { - iFullScreenSelected = ETrue; - } - else - { - iFullScreenSelected = EFalse; - } - iWaitMode = EProcessingMoviePreview; - StartTempFileProcessingL(); - } - break; - } - - /** - * Trim for MMS - */ - case EVeiCmdEditVideoViewTrimForMms: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTrimForMms" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - iWaitMode = EProcessingMovieTrimMms; - StartTempFileProcessingL(); - } - break; - } - /** - * Cut (Audio and Video) - */ - case EVeiCmdEditVideoViewEditVideoCutting: - { - LOG( KVideoEditorLogFile, - "\tEVeiCmdEditVideoViewEditVideoCutting" ); - - if ( IsEnoughFreeSpaceToSaveL()) - { - // Cut video - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) - { - __ASSERT_ALWAYS( iMovie->VideoClipCount() > 0, - User::Panic( _L( "VideoEditor" ), 34 )); - - iCutVideoIndex = iContainer->CurrentIndex(); - iWaitMode = EProcessingMovieForCutting; - iOriginalCutInTime = iMovie->VideoClipCutInTime( iCutVideoIndex ); - iOriginalCutOutTime = iMovie->VideoClipCutOutTime( iCutVideoIndex ); - - iMovie->UnregisterMovieObserver( iContainer ); - iMovie->UnregisterMovieObserver( this ); - - AppUi()->DeactivateActiveViewL(); - - // set file name & clip - iCutView.SetVideoClipAndIndex( *iMovie, iCutVideoIndex ) - ; - - // activate cut view - AppUi()->ActivateLocalViewL( iCutView.Id()); - } - else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) - // Cut audio - { - __ASSERT_ALWAYS( iMovie->AudioClipCount() > 0, - User::Panic( _L( "VideoEditor" ), 34 )); - - iCutAudioIndex = iContainer->CurrentIndex(); - iWaitMode = ECuttingAudio; - iOriginalAudioCutInTime = iMovie->AudioClipCutInTime( iCutAudioIndex ); - iOriginalAudioCutOutTime = iMovie->AudioClipCutOutTime( iCutAudioIndex ); - - iMovie->UnregisterMovieObserver( iContainer ); - iMovie->UnregisterMovieObserver( this ); - - AppUi()->DeactivateActiveViewL(); - - // set file name & clip - iCutAudioView.SetVideoClipAndIndex( *iMovie, iCutAudioIndex ); - // activate cut view - AppUi()->ActivateLocalViewL( TUid::Uid( EVeiCutAudioView )); - } - } - break; - } - /** - * Selection (joystick). - */ - case EVeiCmdEditVideoViewContainerShowMenu: - { - LOG( KVideoEditorLogFile, - "\tEVeiCmdEditVideoViewContainerShowMenu" ); - - //preview popup - if ( iEditorState != EEdit ) - { - if ( iEditorState == CVeiEditVideoView::EQuickPreview ) - { - StopNaviPaneUpdateL(); - iContainer->PauseVideoL(); - LOG( KVideoEditorLogFile, - "\tEVeiCmdEditVideoViewContainerShowMenu, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" ); - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK - ); - Cba()->DrawDeferred(); - } - MenuBar()->SetMenuTitleResourceId( R_VEI_PREVIEW_BAR ); - MenuBar()->TryDisplayMenuBarL(); - MenuBar()->SetMenuTitleResourceId( - R_VEI_MENUBAR_EDIT_VIDEO_VIEW ); - break; - } - switch ( iContainer->CursorLocation()) - { - case VideoEditor::ECursorOnAudio: - { - iPopup->ShowEditAudioPopupList(); - break; - } - case VideoEditor::ECursorOnClip: - { - if ( iMovie->VideoClipInfo( iContainer->CurrentIndex())->Class() == EVedVideoClipClassFile ) - { - iPopup->ShowEditVideoPopupList(); - } - else - { - - TUid generatorUid = iMovie->VideoClipInfo( - iContainer->CurrentIndex())->Generator()->Uid(); - if ( generatorUid == KUidImageClipGenerator ) - // Image - { - iPopup->ShowEditImagePopupList(); - } - else - // Text - { - iPopup->ShowEditTextPopupList(); - } - } - break; - } - /** - * Cursor on video transition. - */ - case VideoEditor::ECursorOnTransition: - { - if ( iContainer->CurrentIndex() == 0 ) - { - iPopup->ShowStartTransitionPopupListL(); - } - else if ( iContainer->CurrentIndex() < iMovie->VideoClipCount()) - { - iPopup->ShowMiddleTransitionPopupListL(); - } - else - { - iPopup->ShowEndTransitionPopupListL(); - } - break; - } - default: - break; - } - break; - } - case EVeiCmdEditVideoViewInsert: - case EVeiCmdEditVideoViewEditVideo: - case EVeiCmdEditVideoViewEditAudio: - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsert||EVeiCmdEditVideoViewEditVideo||EVeiCmdEditVideoViewEditAudio" ); - break; - case EVeiCmdEditVideoViewTransitionNone: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionNone" ); - - if ( iContainer->CurrentIndex() == 0 ) - { - iMovie->SetStartTransitionEffect( EVedStartTransitionEffectNone ); - } - else if ( iContainer->CurrentIndex() < iMovie->VideoClipCount()) - { - index = iContainer->CurrentIndex() - 1; - iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectNone, index ); - } - else - { - iMovie->SetEndTransitionEffect( EVedEndTransitionEffectNone ); - } - break; - } - case EVeiCmdEditVideoViewTransitionFadeFromBlack: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeFromBlack" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() == 0, User::Panic( _L( "VideoEditor" ), 34 )); - iMovie->SetStartTransitionEffect( EVedStartTransitionEffectFadeFromBlack ); - break; - } - case EVeiCmdEditVideoViewTransitionFadeFromWhite: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeFromWhite" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() == 0, User::Panic( _L( "VideoEditor" ), 34 )); - iMovie->SetStartTransitionEffect( EVedStartTransitionEffectFadeFromWhite ); - break; - } - case EVeiCmdEditVideoViewTransitionDipToBlack: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionDipToBlack" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 )); - __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 )); - index = iContainer->CurrentIndex() - 1; - iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectDipToBlack, index ); - break; - } - case EVeiCmdEditVideoViewTransitionDipToWhite: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionDipToWhite" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 )); - __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 )); - index = iContainer->CurrentIndex() - 1; - iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectDipToWhite, index ); - break; - } - case EVeiCmdEditVideoViewTransitionCrossfade: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionCrossfade" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 )); - __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 )); - index = iContainer->CurrentIndex() - 1; - iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectCrossfade, index ); - break; - } - case EVeiCmdEditVideoViewTransitionWipeFromLeft: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromLeft" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 )); - __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 )); - index = iContainer->CurrentIndex() - 1; - iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeLeftToRight, index ); - break; - } - case EVeiCmdEditVideoViewTransitionWipeFromRight: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromRight" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 )); - __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 )); - index = iContainer->CurrentIndex() - 1; - iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeRightToLeft, index ); - break; - } - case EVeiCmdEditVideoViewTransitionWipeFromTop: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromTop" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 )); - __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 )); - index = iContainer->CurrentIndex() - 1; - iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeTopToBottom, index ); - break; - } - case EVeiCmdEditVideoViewTransitionWipeFromBottom: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionWipeFromBottom" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() < iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 )); - __ASSERT_ALWAYS( iContainer->CurrentIndex() > 0, User::Panic( _L( "VideoEditor" ), 34 )); - index = iContainer->CurrentIndex() - 1; - iMovie->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeBottomToTop, index ); - break; - } - case EVeiCmdEditVideoViewTransitionFadeToBlack: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeToBlack" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() == iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 )); - iMovie->SetEndTransitionEffect( EVedEndTransitionEffectFadeToBlack ); - break; - } - case EVeiCmdEditVideoViewTransitionFadeToWhite: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewTransitionFadeToWhite" ); - __ASSERT_ALWAYS( iContainer->CurrentIndex() == iMovie->VideoClipCount(), User::Panic( _L( "VideoEditor" ), 34 )); - iMovie->SetEndTransitionEffect( EVedEndTransitionEffectFadeToWhite ); - break; - } - case EVeiCmdEditVideoViewEditStartTransition: - case EVeiCmdEditVideoViewEditMiddleTransition: - case EVeiCmdEditVideoViewEditEndTransition: - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditStartTransition||EVeiCmdEditVideoViewEditMiddleTransition||EVeiCmdEditVideoViewEditEndTransition" ); - break; - case EVeiCmdEditVideoViewSaveTo: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewSaveTo" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - TInt err; - TRAP( err, SaveL( EProcessingMovieSave )); - if ( err != KErrNone ) - { - ShowErrorNote( R_VEI_ERROR_NOTE ); - } - } - break; - } - case EVeiCmdEditVideoMixAudio: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoMixAudio" ); - SetEditorState( EMixAudio ); - break; - } - - case EVeiCmdEditVideoAdjustVolume: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoAdjustVolume" ); - SetEditorState( EAdjustVolume ); - break; - } - - case EVeiCmdEditVideoViewInsertVideo: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertVideo" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - __ASSERT_ALWAYS( iMediaQueue, User::Panic( _L( "CVeiEditVideoView" ), 1 )); - - if ( !iMediaQueue->ShowVideoClipDialogL( iContainer->CursorLocation(), iContainer->CurrentIndex())) - { - return ; - } - } - HandleScreenDeviceChangedL(); - break; - } - case EVeiCmdEditVideoDuplicate: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoDuplicate" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - TEntry fileinfo; - - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - - iWaitMode = EDuplicating; - - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) - { - CVedVideoClipInfo* previousInfo = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - - RFs& fs = iEikonEnv->FsSession(); - fs.Entry( previousInfo->FileName(), fileinfo ); - - if ( IsEnoughFreeSpaceToSaveL( fileinfo.iSize )) - { - iMovie->InsertVideoClipL( previousInfo->FileName(), iContainer->CurrentIndex() + 1 ); - } - } - else - { - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) - { - CVedAudioClipInfo* currentInfo = iMovie->AudioClipInfo( iContainer->CurrentIndex()); - TTimeIntervalMicroSeconds currentDuration = iMovie->AudioClipEditedDuration( iContainer->CurrentIndex()); - - TInt currentIndex = iContainer->CurrentIndex(); - - for ( TInt i = iMovie->AudioClipCount() - 1; i > currentIndex; i-- ) - { - TTimeIntervalMicroSeconds oldStartTime = iMovie->AudioClipStartTime( i ); - iMovie->AudioClipSetStartTime( i, TTimeIntervalMicroSeconds( oldStartTime.Int64() + currentDuration.Int64())); - } - - TTimeIntervalMicroSeconds currentAudioClipEndTime = iMovie->AudioClipEndTime( currentIndex ); - TTimeIntervalMicroSeconds currentCutInTime = iMovie->AudioClipCutInTime( currentIndex ); - TTimeIntervalMicroSeconds currentCutOutTime = iMovie->AudioClipCutOutTime( currentIndex ); - iMovie->AddAudioClipL( currentInfo->FileName(), currentAudioClipEndTime, currentCutInTime, currentCutOutTime ); - } - } - } - break; - } - - /* - * Insert TITLE text * - */ - case EVeiCmdEditVideoViewInsertText: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertText" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - iPopup->ShowInsertTextPopupList(); - } - break; - } - - case EVeiCmdEditVideoViewInsertTextTitle: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextTitle" ); - - if ( IsEnoughFreeSpaceToSaveL()) - { - StoreOrientation(); - CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this )); - AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait ); - - TSize res = TSize( iMovie->Resolution()); - - CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res, - EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - - HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_NAME, iEikonEnv ); - generator->SetDescriptiveNameL( *descriptiveName ); - CleanupStack::PopAndDestroy( descriptiveName ); - - generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - - /* Ask for text. */ - HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength ); - TPtr txtptr( text->Des()); - CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr ); - CleanupStack::PushL( textQuery ); - - textQuery->SetMaxLength( KTitleScreenMaxTextLength ); - //textQuery->SetPredictiveTextInputPermitted(ETrue); - CleanupStack::Pop( textQuery ); - - if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY )) - { - CleanupStack::PopAndDestroy( text ); - CleanupStack::PopAndDestroy( generator ); - CleanupStack::PopAndDestroy( this ); // restore appui orientation - break; - } - - generator->SetTextL( *text ); - CleanupStack::PopAndDestroy( text ); - - /* Insert generator into the movie. */ - TInt err = 0; - index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1; - TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index )); - - CleanupStack::Pop( generator ); - User::LeaveIfError( err ); - - CleanupStack::PopAndDestroy( this ); // restore appui orientation - } - break; - } - /* - * Insert TITLE (fading) text * - */ - case EVeiCmdEditVideoViewInsertTextTitleFading: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextTitleFading" ); - - if ( IsEnoughFreeSpaceToSaveL()) - { - - StoreOrientation(); - CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this )); - AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait ); - - TSize res = TSize( iMovie->Resolution()); - CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res, - EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - - HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_FADING_NAME, iEikonEnv ); - generator->SetDescriptiveNameL( *descriptiveName ); - CleanupStack::PopAndDestroy( descriptiveName ); - - generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - /* Ask for text. */ - HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength ); - TPtr txtptr( text->Des()); - - CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr ); - CleanupStack::PushL( textQuery ); - - textQuery->SetMaxLength( KTitleScreenMaxTextLength ); - //textQuery->SetPredictiveTextInputPermitted(ETrue); - CleanupStack::Pop( textQuery ); - - if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY )) - { - CleanupStack::PopAndDestroy( text ); - CleanupStack::PopAndDestroy( generator ); - CleanupStack::PopAndDestroy( this ); // restore appui orientation - break; - } - - generator->SetTextL( *text ); - CleanupStack::PopAndDestroy( text ); - - /* Insert generator into the movie. */ - TInt err = 0; - index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1; - TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index )); - CleanupStack::Pop( generator ); - User::LeaveIfError( err ); - - CleanupStack::PopAndDestroy( this ); // restore appui orientation - } - break; - } - /* - * Insert SUBTITLE text * - */ - case EVeiCmdEditVideoViewInsertTextSubTitle: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextSubTitle" ); - - if ( IsEnoughFreeSpaceToSaveL()) - { - StoreOrientation(); - CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this )); - AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait ); - - TSize res = TSize( iMovie->Resolution()); - CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res, - EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - - HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_NAME, iEikonEnv ); - generator->SetDescriptiveNameL( *descriptiveName ); - CleanupStack::PopAndDestroy( descriptiveName ); - - generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentLeft, - EVeiTitleClipVerticalAlignmentBottom ); - - /* Ask for text. */ - HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength ); - TPtr txtptr( text->Des()); - CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr ); - CleanupStack::PushL( textQuery ); - - textQuery->SetMaxLength( KTitleScreenMaxTextLength ); - //textQuery->SetPredictiveTextInputPermitted(ETrue); - CleanupStack::Pop( textQuery ); - - if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY )) - { - CleanupStack::PopAndDestroy( text ); - CleanupStack::PopAndDestroy( generator ); - CleanupStack::PopAndDestroy( this ); // restore appui orientation - break; - } - - generator->SetTextL( *text ); - CleanupStack::PopAndDestroy( text ); - - /* Insert generator into the movie. */ - TInt err = 0; - index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1; - TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index )); - CleanupStack::Pop( generator ); - User::LeaveIfError( err ); - - CleanupStack::PopAndDestroy( this ); // restore appui orientation - } - break; - } - /* - * Insert SUBTITLE (fading) text * - */ - case EVeiCmdEditVideoViewInsertTextSubTitleFading: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextSubTitleFading" ); - - if ( IsEnoughFreeSpaceToSaveL()) - { - StoreOrientation(); - CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this )); - AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait ); - - TSize res = TSize( iMovie->Resolution()); - CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res, - EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - - HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_FADING_NAME, iEikonEnv ); - generator->SetDescriptiveNameL( *descriptiveName ); - CleanupStack::PopAndDestroy( descriptiveName ); - - generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade, - EVeiTitleClipHorizontalAlignmentLeft, - EVeiTitleClipVerticalAlignmentBottom ); - - /* Ask for text. */ - HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength ); - TPtr txtptr( text->Des()); - CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr ); - CleanupStack::PushL( textQuery ); - - textQuery->SetMaxLength( KTitleScreenMaxTextLength ); - //textQuery->SetPredictiveTextInputPermitted(ETrue); - CleanupStack::Pop( textQuery ); - - if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY )) - { - CleanupStack::PopAndDestroy( text ); - CleanupStack::PopAndDestroy( generator ); - CleanupStack::PopAndDestroy( this ); // restore appui orientation - break; - } - - generator->SetTextL( *text ); - CleanupStack::PopAndDestroy( text ); - - /* Insert generator into the movie. */ - TInt err = 0; - index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1; - TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index )); - CleanupStack::Pop( generator ); - User::LeaveIfError( err ); - - CleanupStack::PopAndDestroy( this ); // restore appui orientation - } - break; - } - /* - * Insert CREDIT text * - */ - case EVeiCmdEditVideoViewInsertTextCredits: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertTextCredits" ); - - if ( IsEnoughFreeSpaceToSaveL()) - { - StoreOrientation(); - CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this )); - AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait ); - - TSize res = TSize( iMovie->Resolution()); - CVeiTitleClipGenerator* generator = CVeiTitleClipGenerator::NewLC( res, - EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - - HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_CREDITS_NAME, iEikonEnv ); - generator->SetDescriptiveNameL( *descriptiveName ); - CleanupStack::PopAndDestroy( descriptiveName ); - - generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionScrollBottomToTop, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - - /* Ask for text. */ - HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength ); - TPtr txtptr( text->Des()); - CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr ); - CleanupStack::PushL( textQuery ); - - textQuery->SetMaxLength( KTitleScreenMaxTextLength ); - //textQuery->SetPredictiveTextInputPermitted(ETrue); - CleanupStack::Pop( textQuery ); - - if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY )) - { - CleanupStack::PopAndDestroy( text ); - CleanupStack::PopAndDestroy( generator ); - CleanupStack::PopAndDestroy( this ); - break; - } - generator->SetTextL( *text ); - CleanupStack::PopAndDestroy( text ); - - /* Insert generator into the movie. */ - TInt err = 0; - index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1; - TRAP( err, iMovie->InsertVideoClipL( *generator, ETrue, index )); - CleanupStack::Pop( generator ); - User::LeaveIfError( err ); - - CleanupStack::PopAndDestroy( this ); // restore appui orientation - } - break; - } - - /* - * Edit Text * - */ - case EVeiCmdEditVideoViewEditTextMove: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextMove" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL ); - Cba()->DrawDeferred(); - - index = iContainer->CurrentIndex(); - - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) - { - iOriginalVideoClipIndex = index; - } - else - { - User::Panic( _L( "VideoEditor" ), 34 ); - } - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMove ); - UpdateEditNaviLabel(); - } - break; - } - case EVeiCmdEditVideoViewEditTextChangeDuration: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextChangeDuration" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL ); - Cba()->DrawDeferred(); - index = iContainer->CurrentIndex(); - - iOriginalVideoStartPoint = iMovie->VideoClipStartTime( index ); - iOriginalVideoCutInTime = iMovie->VideoClipCutInTime( index ); - iOriginalVideoCutOutTime = iMovie->VideoClipCutOutTime( index ); - - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeDuration ); - UpdateEditNaviLabel(); - } - break; - } - case EVeiCmdEditVideoViewEditTextChangeText: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextChangeText" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - StoreOrientation(); - CleanupStack::PushL( TCleanupItem( CleanupRestoreOrientation, this )); - AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait ); - - Cba()->DrawDeferred(); - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - - CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator()); - HBufC* text = HBufC::NewLC( KTitleScreenMaxTextLength ); - *text = (( CVeiTitleClipGenerator* )info->Generator())->Text(); - - TPtr txtptr( text->Des()); - CAknTextQueryDialog* textQuery = CAknTextQueryDialog::NewL( txtptr ); - CleanupStack::PushL( textQuery ); - - textQuery->SetMaxLength( KTitleScreenMaxTextLength ); - //textQuery->SetPredictiveTextInputPermitted(ETrue); - CleanupStack::Pop( textQuery ); - - if ( !textQuery->ExecuteLD( R_VEI_EDITVIDEO_TITLESCREEN_TEXT_QUERY )) - { - CleanupStack::PopAndDestroy( text ); - CleanupStack::PopAndDestroy( this ); // restore appui orientation - break; - } - generator->SetTextL( *text ); - CleanupStack::PopAndDestroy( text ); - UpdateEditNaviLabel(); - - CleanupStack::PopAndDestroy( this ); // restore appui orientation - } - break; - } - - case EVeiCmdEditVideoViewEditTextSetTextColor: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextSetTextColor" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator()); - - TRgb color = generator->TextColor(); - if ( !iPopup->ShowColorSelectorL( color )) - { - break; - } - generator->SetTextColorL( color ); - } - break; - } - case EVeiCmdEditVideoViewEditTextSetBackGround: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextSetBackGround" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator()); - - // ask for color or image - TBool imageSelected; - TInt err = iPopup->ShowTitleScreenBackgroundSelectionPopupL( imageSelected ); - if ( err != KErrNone ) - { - break; - } - - if ( imageSelected ) - { - CDesCArrayFlat* selectedFiles = new( ELeave )CDesCArrayFlat( 1 ); - CleanupStack::PushL( selectedFiles ); - - CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC(); - - if ( MGFetch::RunL( *selectedFiles, EImageFile, EFalse, mgFetchVerifier ) == EFalse ) - { - /* User cancelled the dialog. */ - CleanupStack::PopAndDestroy( mgFetchVerifier ); - CleanupStack::PopAndDestroy( selectedFiles ); - break; - } - - CleanupStack::PopAndDestroy( mgFetchVerifier ); - - if ( !iWaitDialog ) - { - iWaitDialog = new( ELeave )CAknWaitDialog( REINTERPRET_CAST( CEikDialog** , &iWaitDialog ), ETrue ); - iWaitDialog->ExecuteLD( R_VEI_WAIT_DIALOG_INSERTING_IMAGE ); - } - - - TRAP( err, generator->SetBackgroundImageL(( *selectedFiles )[0], * this )); - - if ( err ) - { - if ( iWaitDialog ) - { - CancelWaitDialog(); - } - ShowErrorNote( R_VEI_ERRORNOTE_IMAGE_INSERTING_FAILED ); - } - - CleanupStack::PopAndDestroy( selectedFiles ); - } - else - { - TRgb color = generator->BackgroundColor(); - if ( !iPopup->ShowColorSelectorL( color )) - { - break; - } - generator->SetBackgroundColorL( color ); - } - } - break; - } - case EVeiCmdEditVideoViewEditTextStyle: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyle" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - /* Ask for style. */ - iPopup->ShowTitleScreenStyleSelectionPopupL(); - } - break; - } - /* - * Edit text, AddColorEffect * - */ - case EVeiCmdEditVideoViewEditTextAddColorEffect: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextAddColorEffect" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - iPopup->ShowEffectSelectionPopupListL(); - } - break; - } - /* - * Edit text style * - */ - case EVeiCmdEditVideoViewEditTextStyleTitle: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleTitle" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - - CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator()); - - HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_NAME, iEikonEnv ); - generator->SetDescriptiveNameL( *descriptiveName ); - CleanupStack::PopAndDestroy( descriptiveName ); - - generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - } - break; - } - case EVeiCmdEditVideoViewEditTextStyleTitleFading: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleTitleFading" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - - CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator()); - - HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_TITLE_FADING_NAME, iEikonEnv ); - generator->SetDescriptiveNameL( *descriptiveName ); - CleanupStack::PopAndDestroy( descriptiveName ); - generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - } - break; - } - case EVeiCmdEditVideoViewEditTextStyleSubTitle: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleSubTitle" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - - CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator()); - - HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_NAME, iEikonEnv ); - generator->SetDescriptiveNameL( *descriptiveName ); - CleanupStack::PopAndDestroy( descriptiveName ); - generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentLeft, - EVeiTitleClipVerticalAlignmentBottom ); - - } - break; - } - case EVeiCmdEditVideoViewEditTextStyleSubTitleFading: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleSubTitleFading" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - - CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator()); - - HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_SUBTITLE_FADING_NAME, iEikonEnv ); - generator->SetDescriptiveNameL( *descriptiveName ); - CleanupStack::PopAndDestroy( descriptiveName ); - generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionFade, - EVeiTitleClipHorizontalAlignmentLeft, - EVeiTitleClipVerticalAlignmentBottom ); - } - break; - } - case EVeiCmdEditVideoViewEditTextStyleCredit: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextStyleCredit" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - - CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , info->Generator()); - - HBufC* descriptiveName = StringLoader::LoadLC( R_VEI_EDIT_VIEW_CREDITS_NAME, iEikonEnv ); - generator->SetDescriptiveNameL( *descriptiveName ); - CleanupStack::PopAndDestroy( descriptiveName ); - generator->SetTransitionAndAlignmentsL( EVeiTitleClipTransitionScrollBottomToTop, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter ); - } - break; - } - /* - * Edit text, Duplicate * - */ - case EVeiCmdEditVideoViewEditTextDuplicate: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditTextDuplicate" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - CVedVideoClipInfo* previousInfo = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - CVeiTitleClipGenerator* generator = STATIC_CAST( CVeiTitleClipGenerator* , previousInfo->Generator()); - - iWaitMode = EDuplicating; - - CVeiTitleClipGenerator* generator2 = CVeiTitleClipGenerator::NewLC( iMovie->Resolution(), - generator->Transition(), - generator->HorizontalAlignment(), - generator->VerticalAlignment()); - - generator2->SetDescriptiveNameL( generator->DescriptiveName()); - generator2->SetTransitionAndAlignmentsL( generator->Transition(), - generator->HorizontalAlignment(), - generator->VerticalAlignment() ); - generator2->SetTextL( generator->Text()); - generator2->SetTextColorL( generator->TextColor()); - - generator2->SetBackgroundColorL( generator->BackgroundColor()); - if ( generator->BackgroundImage()) - { - generator2->SetBackgroundImageL( generator->BackgroundImage()); - } - - generator2->SetDuration( generator->Duration()); - - TInt err = 0; - index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1; - TRAP( err, iMovie->InsertVideoClipL( *generator2, ETrue, index )); - - CleanupStack::Pop( generator2 ); - User::LeaveIfError( err ); - } - break; - } - /** - * Insert Image - */ - case EVeiCmdEditVideoViewInsertImage: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertImage" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - TTimeIntervalMicroSeconds duration( 5000000 ); - - CDesCArrayFlat* selectedFiles = new( ELeave )CDesCArrayFlat( 1 ); - CleanupStack::PushL( selectedFiles ); - - CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC(); - - if ( MGFetch::RunL( *selectedFiles, EImageFile, EFalse, mgFetchVerifier ) == EFalse ) - { - /* User cancelled the dialog. */ - CleanupStack::PopAndDestroy( mgFetchVerifier ); - CleanupStack::PopAndDestroy( selectedFiles ); - break; - } - - CleanupStack::PopAndDestroy( mgFetchVerifier ); - - if ( !iWaitDialog ) - { - iWaitDialog = new( ELeave )CAknWaitDialog( REINTERPRET_CAST( CEikDialog** , &iWaitDialog ), ETrue ); - iWaitDialog->ExecuteLD( R_VEI_WAIT_DIALOG_INSERTING_IMAGE ); - } - - RFs& fs = iEikonEnv->FsSession(); - - TRAPD( err, iGenerator = CVeiImageClipGenerator::NewL(( *selectedFiles )[0], - TSize( KMaxVideoFrameResolutionX, KMaxVideoFrameResolutionY ), - duration, - KRgbBlack, - KVideoClipGenetatorDisplayMode, - fs, - *this )); - if ( err ) - { - if ( iWaitDialog ) - { - CancelWaitDialog(); - } - ShowErrorNote( R_VEI_ERRORNOTE_IMAGE_INSERTING_FAILED ); - } - - CleanupStack::PopAndDestroy( selectedFiles ); - } - break; - } - - /** - * Edit Image * - */ - case EVeiCmdEditVideoViewEditImageMove: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageMove" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL ); - Cba()->DrawDeferred(); - - index = iContainer->CurrentIndex(); - - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) - { - iOriginalVideoClipIndex = index; - } - else - { - User::Panic( _L( "VideoEditor" ), 34 ); - } - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMove ); - UpdateEditNaviLabel(); - } - break; - } - - case EVeiCmdEditVideoViewEditImageChangeDuration: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageChangeDuration" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL ); - Cba()->DrawDeferred(); - index = iContainer->CurrentIndex(); - - iOriginalVideoStartPoint = iMovie->VideoClipStartTime( index ); - iOriginalVideoCutInTime = iMovie->VideoClipCutInTime( index ); - iOriginalVideoCutOutTime = iMovie->VideoClipCutOutTime( index ); - - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeDuration ); - UpdateEditNaviLabel(); - } - break; - } - case EVeiCmdEditVideoViewEditImageBackGround: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageBackGround" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - CVeiImageClipGenerator* generator = STATIC_CAST( CVeiImageClipGenerator* , info->Generator()); - - // ask for color - TRgb color = generator->BackgroundColor(); - if ( !iPopup->ShowColorSelectorL( color )) - { - break; - } - - generator->SetBackgroundColor( color ); - } - break; - } - case EVeiCmdEditVideoViewEditImageAddColorEffect: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageAddColorEffect" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - iPopup->ShowEffectSelectionPopupListL(); - } - break; - } - // * DUPLICATE Image * - case EVeiCmdEditVideoViewEditImageDuplicate: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditImageDuplicate" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - CVedVideoClipInfo* previousInfo = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - CVeiImageClipGenerator* generator = STATIC_CAST( CVeiImageClipGenerator* , previousInfo->Generator()); - - RFs& fs = iEikonEnv->FsSession(); - - iWaitMode = EDuplicating; - - iGenerator = CVeiImageClipGenerator::NewL( generator->ImageFilename(), - TSize( KMaxVideoFrameResolutionX, KMaxVideoFrameResolutionY ), - previousInfo->Duration(), - generator->BackgroundColor(), - KVideoClipGenetatorDisplayMode, - fs, - *this ); - } - break; - } - - /** - * Insert -> Sound clip - */ - case EVeiCmdEditVideoViewInsertAudio: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertAudio" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - if ( !iMediaQueue->ShowAudioClipDialogL()) - { - break; - } - } - HandleScreenDeviceChangedL(); - break; - } - /** - * Insert -> New sound clip - */ - case EVeiCmdEditVideoViewInsertNewAudio: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewInsertNewAudio" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - InsertNewAudio(); - } - break; - } - - case EVeiCmdEditVideoViewEditAudioSetDuration: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditAudioSetDuration" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL ); - Cba()->DrawDeferred(); - index = iContainer->CurrentIndex(); - - iOriginalAudioStartPoint = iMovie->AudioClipStartTime( index ); - iOriginalAudioDuration = iMovie->AudioClipEditedDuration( index ); - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeDuration ); - UpdateEditNaviLabel(); - } - break; - } - case EVeiCmdEditVideoViewSettings: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewSettings" ); - AppUi()->ActivateLocalViewL( TUid::Uid( EVeiSettingsView )); - break; - } - case EVeiCmdEditVideoViewRecord: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewRecord" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - /* Set the mode, CBAs and Navi label. */ - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecording ); - - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - Cba()->DrawDeferred(); - UpdateEditNaviLabel(); - - iRecordedAudioMaxDuration = TTimeIntervalMicroSeconds( - 1 ); - for ( TInt i = 0; i < iMovie->AudioClipCount(); i++ ) - { - - if ( iMovie->AudioClipStartTime( i ) > iContainer->RecordedAudioStartTime()) - { - TInt64 startTimeInt = iContainer->RecordedAudioStartTime().Int64(); - TInt64 nextStartTimeInt = iMovie->AudioClipStartTime( i ).Int64(); - iRecordedAudioMaxDuration = TTimeIntervalMicroSeconds( nextStartTimeInt - startTimeInt ); - break; - } - } - - iRecorder->RecordL(); - const TUint delay = 1000 * 1000 / 10; - - iAudioRecordPeriodic->Start( delay, delay, TCallBack( CVeiEditVideoView::UpdateAudioRecording, this )); - - iContainer->SetRecordedAudioDuration( TTimeIntervalMicroSeconds( 0 )); - } - break; - } - case EVeiCmdEditVideoViewRecordCancel: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewRecordCancel" ); - // cancel recording - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - iContainer->SetRecordedAudioStartTime( TTimeIntervalMicroSeconds( 0 )); - iContainer->SetCursorLocation( VideoEditor::ECursorOnAudio ); - Cba()->DrawDeferred(); - - UpdateEditNaviLabel(); - break; - } - /* - * Stop previewing - */ - case EVeiCmdPlayViewStop: - case EVeiCmdCutVideoViewStop: - case EVeiCmdEditVideoViewRecordStop: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewStop||EVeiCmdCutVideoViewStop||EVeiCmdEditVideoViewRecordStop" ); - if ( EditorState() == EQuickPreview ) - { - iContainer->StopVideo( EFalse ); - iContainer->SetFinishedStatus( ETrue ); - StopNaviPaneUpdateL(); - LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewStop||EVeiCmdCutVideoViewStop||EVeiCmdEditVideoViewRecordStop, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" ); - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK ); - Cba()->DrawDeferred(); - break; - } - - // stop recording - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); - UpdateEditNaviLabel(); - - iRecorder->Stop(); - iAudioRecordPeriodic->Cancel(); - - if ( iAudioClipInfo ) - { - delete iAudioClipInfo; - iAudioClipInfo = NULL; - } - - iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue ); - - iProgressNote->SetCallback( this ); - iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE ); - HBufC* stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_INSERTING_AUDIO, iEikonEnv ); - CleanupStack::PushL( stringholder ); - - iProgressNote->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( this ); // stringholder - - iProgressNote->GetProgressInfoL()->SetFinalValue( 100 ); - iWaitMode = EOpeningAudioInfo; - - iAudioClipInfo = CVedAudioClipInfo::NewL( *iTempRecordedAudio, *this ); - break; - } - case EVeiCmdPlayViewPause: - case EVeiCmdEditVideoViewRecordPause: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewPause||EVeiCmdEditVideoViewRecordPause" ); - if ( EditorState() == EQuickPreview ) - { - iContainer->PauseVideoL(); - StopNaviPaneUpdateL(); - - LOG( KVideoEditorLogFile, "\tEVeiCmdPlayViewPause||EVeiCmdEditVideoViewRecordPause, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" ); - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK ); - Cba()->DrawDeferred(); - } - else - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - Cba()->DrawDeferred(); - - // Pause recording - // Cba is set to CONTINUE_STOP in DoUpdateAudioRecording() - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecordingPaused ); - iRecorder->Stop(); - UpdateEditNaviLabel(); - } - break; - } - /* - * Preview continue: - */ - case EVeiCmdCutVideoViewPlay: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdCutVideoViewPlay" ); - - if ( !iUpdateTemp && !iTempFile && 1 == iMovie->VideoClipCount() ) - { - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview ); - iContainer->PlayVideo( iMovie->VideoClipInfo( 0 )->DescriptiveName(), iFullScreenSelected ); - } - else - { - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview ); - iContainer->PlayVideo( *iTempFile, iFullScreenSelected ); - } - - // @: think should this be put under condition play was started - // (actually play starts when "loadingComplete" event comes to NotifyVideoDisplayEvent - //StartNaviPaneUpdateL(); - break; - } - - case EVeiCmdCutVideoTakeSnapshot: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdCutVideoTakeSnapshot" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - iContainer->TakeSnapshotL(); - } - break; - } - - case EVeiCmdCutVideoViewContinue: - case EVeiCmdEditVideoViewContinue: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdCutVideoViewContinue||EVeiCmdEditVideoViewContinue" ); - if (( iRecorder->State() != CMdaAudioClipUtility::ERecording ) && - ( iRecorder->State() != CMdaAudioClipUtility::ENotReady ) ) - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - Cba()->DrawDeferred(); - - // Continue recording - iRecorder->RecordL(); - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecording ); - - UpdateEditNaviLabel(); - } - break; - } - case EVeiCmdEditVideoViewEditAudioMove: - case EVeiCmdEditVideoViewEditVideoMove: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditAudioMove||EVeiCmdEditVideoViewEditVideoMove" ); - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL ); - Cba()->DrawDeferred(); - - index = iContainer->CurrentIndex(); - - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) - { - iOriginalAudioStartPoint = iMovie->AudioClipStartTime( index ); - iOriginalAudioDuration = iMovie->AudioClipEditedDuration( index ); - } - else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) - { - iOriginalVideoClipIndex = index; - } - else - { - User::Panic( _L( "VideoEditor" ), 34 ); - } - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMove ); - UpdateEditNaviLabel(); - break; - } - /** - * Edit video clip -> Add colour effect - */ - case EVeiCmdEditVideoViewEditVideoColorEffect: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoColorEffect" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - iPopup->ShowEffectSelectionPopupListL(); - } - break; - } - /** - * Use slow motion - */ - case EVeiCmdEditVideoViewEditVideoSlowMotion: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoSlowMotion" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL ); - Cba()->DrawDeferred(); - iOriginalVideoSpeed = iMovie->VideoClipSpeed( iContainer->CurrentIndex()); - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeSlowMotion ); - iContainer->SetSlowMotionStartValueL( iOriginalVideoSpeed ); - iContainer->ArrowsControl(); - } - break; - } - case EVeiCmdEditVideoViewEditVideoMute: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoMute" ); - SetNewTempFileNeeded( ETrue ); - iMovie->VideoClipSetMuted( iContainer->CurrentIndex(), ETrue ); - break; - } - case EVeiCmdEditVideoViewEditVideoUnmute: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditVideoUnmute" ); - SetNewTempFileNeeded( ETrue ); - iMovie->VideoClipSetMuted( iContainer->CurrentIndex(), EFalse ); - break; - } - case EVeiCmdEditVideoViewEditAudioRemove: - case EVeiCmdEditVideoViewEditVideoRemove: - case EVeiCmdEditVideoViewEditTextRemove: - case EVeiCmdEditVideoViewEditImageRemove: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewEditAudioRemove||EVeiCmdEditVideoViewEditVideoRemove||EVeiCmdEditVideoViewEditTextRemove||EVeiCmdEditVideoViewEditImageRemove" ); - RemoveCurrentClipL(); - break; - } - /** - * Back - */ - case EAknSoftkeyBack: - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleCommandL: EAknSoftkeyBack" ); - LOGFMT( KVideoEditorLogFile, "\tiFullScreenSelected: %d", iFullScreenSelected ); - - if ( EditorState() != EEdit || iFullScreenSelected ) - { - iFullScreenSelected = EFalse; - iContainer->StopVideo( ETrue ); - StopNaviPaneUpdateL(); - UpdateEditNaviLabel(); - break; - } - else if ( !iMovieSavedFlag && ( iMovie->VideoClipCount() > 0 || iMovie->AudioClipCount() > 0 )) - { - HBufC* saveConfirmationString; // String holding the text shown in dialog. - CAknQueryDialog* dlg; // Save confirmation dialog. - TInt saveEditedVideo; // Query result. - - saveConfirmationString = StringLoader::LoadLC( R_VEI_CONFIRM_EXIT_SAVE, iEikonEnv ); - dlg = new( ELeave )CAknQueryDialog( *saveConfirmationString, CAknQueryDialog::ENoTone ); - saveEditedVideo = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY ); - - if ( !saveEditedVideo ) - // Do not save. - { - // Activate videos view. - AppUi()->HandleCommandL( EAknCmdExit ); - - iMovie->Reset(); - - iMovieSavedFlag = ETrue; // Movie is saved. - iMovieFirstAddFlag = ETrue; // True for the next edit process. - - AppUi()->HandleCommandL( aCommand ); - } - else - { - if ( SaveL( EProcessingMovieSaveThenQuit )) - // Quit after saving? - { - //iMovieSavedFlag = ETrue; // Movie is saved. - iMovieFirstAddFlag = ETrue; // True for the next edit process. - iWaitMode = EProcessingMovieSaveThenQuit; - } - } - - CleanupStack::PopAndDestroy( saveConfirmationString ); - } - // No changes to clip(s) or no clip(s) in time line. - else - { - // Remove all clips from edit view (for future use). - iMovie->Reset(); - - iMovieSavedFlag = ETrue; // Movie is saved. - iMovieFirstAddFlag = ETrue; // True for the next edit process. - AppUi()->HandleCommandL( aCommand ); - } - - break; - } - // - // Options->Help - // - case EVeiCmdEditVideoViewHelp: - { - LOG( KVideoEditorLogFile, "\tEVeiCmdEditVideoViewHelp" ); - // CS Help launching is handled in Video Editor's AppUi. - AppUi()->HandleCommandL( EVeiCmdEditVideoViewHelp ); - break; - } - /** - * Exit - */ - case EEikCmdExit: - { - LOG( KVideoEditorLogFile, "\tEEikCmdExit" ); - // Edited movie is not saved yet and there are video or audio clip(s) at the time line. - if ( !iMovieSavedFlag && ( iMovie->VideoClipCount() > 0 || iMovie->AudioClipCount() > 0 )) - { - HBufC* stringholder; // String holding the text shown in dialog. - - CAknQueryDialog* dlg; // Save confirmation dialog. - TInt queryok; // Query result. - - stringholder = StringLoader::LoadLC( R_VEI_CONFIRM_EXIT_SAVE, iEikonEnv ); - - dlg = new( ELeave )CAknQueryDialog( *stringholder, CAknQueryDialog::ENoTone ); - queryok = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY ); - - if ( !queryok ) - { - iMovie->Reset(); - AppUi()->HandleCommandL( aCommand ); - } - else - { - SaveL( EProcessingMovieSaveThenQuit ); - iWaitMode = EProcessingMovieSaveThenQuit; - } - - CleanupStack::PopAndDestroy( stringholder ); - } - else - // No changes to clip(s) or no clip(s) in time line. - { - iMovie->Reset(); // Remove all clips from edit view. - AppUi()->HandleCommandL( aCommand ); // Let appUi handle the exit. - } - break; - } - default: - { - LOG( KVideoEditorLogFile, "\tdefault" ); - AppUi()->HandleCommandL( aCommand ); - break; - } - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleCommandL: Out" ); - } - -void CVeiEditVideoView::HandleResourceChange( TInt aType ) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::HandleResourceChange() In, aType:%d", aType ); - - if ( KAknsMessageSkinChange == aType ) - { - // Handle skin change in the navi label controls - they do not receive - // it automatically since they are not in the control stack - iPreviewLabel->DecoratedControl()->HandleResourceChange( aType ); - iEditLabel->DecoratedControl()->HandleResourceChange( aType ); - iVolumeNavi->DecoratedControl()->HandleResourceChange( aType ); - iMoveLabel->DecoratedControl()->HandleResourceChange( aType ); - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleResourceChange() Out" ); - } - -void CVeiEditVideoView::SetEditorState( TEditorState aState ) - { - LOGFMT3( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState: in, aState:%d, iEditorState:%d, iFullScreenSelected:%d", aState, iEditorState, iFullScreenSelected ); - - CAknTitlePane* titlePane; - CEikStatusPane* statusPane; - TResourceReader reader1; - - iEditorState = aState; - - switch ( aState ) - { - case EPreview: - /* - if ( iFullScreenSelected ) - { - // @: this need more elaborating - // problem is: after large preview signal and battery pane are black in some phone models - //statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); - //statusPane ->MakeVisible( EFalse ); - Cba()->MakeVisible( EFalse ); - Cba()->DrawDeferred(); - } - else - { - iEditorState = EQuickPreview; - statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); - - titlePane = (CAknTitlePane*) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ); - iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_PREVIEW_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader1 ); - CleanupStack::PopAndDestroy(); //reader1 - - LOG(KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 1, setting R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK"); - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK ); - Cba()->DrawDeferred(); - } - */ - Cba()->MakeVisible( EFalse ); - Cba()->DrawDeferred(); - break; - case EQuickPreview: - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState: 2, iContainer->PreviewState():%d", iContainer->PreviewState()); - statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane(); - - titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle )); - iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_PREVIEW_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader1 ); - CleanupStack::PopAndDestroy(); //reader1 - - if (( iContainer->PreviewState() == CVeiEditVideoContainer::EStatePaused ) || - ( iContainer->PreviewState() == CVeiEditVideoContainer::EStateStopped )) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 3, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" ); - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK ); - } - else if (( iContainer->PreviewState() == CVeiEditVideoContainer::EStateOpening ) || - ( iContainer->PreviewState() == CVeiEditVideoContainer::EStateGettingFrame ) || - ( iContainer->PreviewState() == CVeiEditVideoContainer::EStateBuffering )) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 4, setting R_AVKON_SOFTKEYS_EMPTY" ); - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - } - else - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState, 5, setting R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK" ); - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PAUSE_BACK ); - } - Cba()->DrawDeferred(); - break; - } - case EEdit: - iContainer->SetRect( AppUi()->ClientRect()); - statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane(); - // @: this needs more elaborating - //statusPane ->MakeVisible( ETrue ); - - titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle )); - iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_EDIT_VIDEO_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader1 ); - CleanupStack::PopAndDestroy(); //reader1 - - Cba()->MakeVisible( ETrue ); - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); - break; - - case EMixAudio: - iContainer->SetRect( AppUi()->ClientRect()); - statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane(); - - titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle )); - iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_AUDIO_MIX_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader1 ); - CleanupStack::PopAndDestroy(); //reader1 - - Cba()->MakeVisible( ETrue ); - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_DONE ); - Cba()->DrawDeferred(); - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeMixingAudio ); - - break; - - case EAdjustVolume: - iContainer->SetRect( AppUi()->ClientRect()); - statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane(); - - titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle )); - iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_ADJUST_VOLUME_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader1 ); - CleanupStack::PopAndDestroy(); //reader1 - - Cba()->MakeVisible( ETrue ); - //Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_DONE); - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OK_CANCEL ); - Cba()->DrawDeferred(); - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeAdjustVolume ); - - break; - - - default: - { - break; - } - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SetEditorState: Out" ); - } - - -void CVeiEditVideoView::SendMovieL() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() -- SENDING" ); - - TEntry fileinfo; - - RFs& fs = iEikonEnv->FsSession(); - // Rename movie from xxxx.$$$ to defaultfilename from settingsview. - // looks better in attachment list.. - - // Get default movie name from settings view - - TPtr temppeet = iTempFile->Des(); - - TParse parse; - parse.Set( iMovieSaveSettings.DefaultVideoName(), &temppeet, NULL ); - - TFileName orgPathAndName = parse.FullName(); - - TVedVideoFormat movieQuality = iMovie->Format(); - if ( movieQuality == EVedVideoFormatMP4 ) - { - orgPathAndName.Replace( orgPathAndName.Length() - 4, 4, KExtMp4 ); - } - else - { - orgPathAndName.Replace( orgPathAndName.Length() - 4, 4, KExt3gp ); - } - - fs.Replace( *iTempFile, orgPathAndName ); - iTempFile->Des() = orgPathAndName; - - fs.Entry( *iTempFile, fileinfo ); - - DEBUGLOG_ARG( TInt tempFileSize = fileinfo.iSize / 1024 ); - LOGFMT3( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() 1, iWaitMode:%d, tempFileSize:%d, ValidateServiceL:%d", iWaitMode, tempFileSize, iSendAppUi.ValidateServiceL( iGivenSendCommand, TSendingCapabilities( 0, tempFileSize, TSendingCapabilities::ESupportsAttachments ))); - - if ( EProcessingMovieSend == iWaitMode - /*&& (iSendAppUi.ValidateServiceL( - iGivenSendCommand, - TSendingCapabilities( 0, - tempFileSize, - TSendingCapabilities::ESupportsAttachments ) ) ) */ ) - { - RFs shareFServer; - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL: shareFServer connect." ); - - User::LeaveIfError( shareFServer.Connect()); - shareFServer.ShareProtected(); - CleanupClosePushL < RFs > ( shareFServer ); - - RFile openFileHandle; - - TInt err = openFileHandle.Open( shareFServer, * iTempFile, EFileRead | EFileShareReadersOnly ); - if ( KErrNone != err ) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL 2: Could not open file %S with EFileShareReadersOnly. Trying EFileShareAny", iTempFile ); - User::LeaveIfError( openFileHandle.Open( shareFServer, * iTempFile, EFileRead | EFileShareAny )); - } - - CMessageData* messageData = CMessageData::NewLC(); - messageData->AppendAttachmentHandleL( openFileHandle ); - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() 3" ); - - iSendAppUi.CreateAndSendMessageL( iGivenSendCommand, messageData, KNullUid, EFalse ); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() 4" ); - CleanupStack::PopAndDestroy( messageData ); - - CleanupStack::PopAndDestroy( &shareFServer ); // shareFServer.Close(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL 5: shareFServer closed." ); - } - - DoUpdateEditNaviLabelL(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SendMovieL() Out" ); - } - - -void CVeiEditVideoView::StartTempFileProcessingL() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL: In" ); - - RFs& fs = iEikonEnv->FsSession(); - - TBool fileExists( ETrue ); - if ( iTempFile ) - { - fileExists = BaflUtils::FileExists( fs, * iTempFile ); - } - - /* to save from unnecessary processing before preview - prerequisites: - -user selected preview - -no movie modifying actions taken by user before preview (iUpdateTemp is EFalse) - */ - if ( EProcessingMoviePreview == iWaitMode && !iUpdateTemp && !iTempFile && 1 == iMovie->VideoClipCount()) - { - if ( iFullScreenSelected ) - { - iContainer->SetBlackScreen( ETrue ); - iContainer->SetRect( AppUi()->ApplicationRect()); - } - - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview ); - iContainer->PlayVideoFileL( iMovie->VideoClipInfo( 0 )->DescriptiveName(), iFullScreenSelected ); - } - else if ( EProcessingMovieTrimMms == iWaitMode && !iUpdateTemp && !iTempFile && 1 == iMovie->VideoClipCount() && !FitsToMmsL()) - { - /* - Read documentation of FitsToMmsL() in the header file - */ - TBuf8 < KMaxFileName > conv8Filename; - CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, iMovie->VideoClipInfo( 0 )->DescriptiveName()); - iMovie->UnregisterMovieObserver( iContainer ); - iMovie->UnregisterMovieObserver( this ); - AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid( 0 ), conv8Filename ); - } - else if ( iUpdateTemp || !fileExists || ( !iTempFile )) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 1, -- NEW TEMP" ); - - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - Cba()->DrawDeferred(); - if ( iTempFile && fileExists ) - { - User::LeaveIfError( fs.Delete( *iTempFile )); - delete iTempFile; - iTempFile = NULL; - } - - if ( !IsEnoughFreeSpaceToSaveL()) // modifies iMemoryInUse - { - return ; - } - - iTempFile = HBufC::NewL( KMaxFileName ); - iTempMaker->GenerateTempFileName( *iTempFile, iMemoryInUse, iMovie->Format()); - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 2, iTempFile:%S", iTempFile ); - - TVeiSettings movieSaveSettings; - - STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( movieSaveSettings ); - - TInt settingsSaveQuality = movieSaveSettings.SaveQuality(); - CVedMovie::TVedMovieQuality saveQuality; - - switch ( settingsSaveQuality ) - { - case TVeiSettings::EMmsCompatible: - { - saveQuality = CVedMovie::EQualityMMSInteroperability; - break; - } - case TVeiSettings::EMedium: - { - saveQuality = CVedMovie::EQualityResolutionMedium; - break; - } - case TVeiSettings::EBest: - { - saveQuality = CVedMovie::EQualityResolutionHigh; - break; - } - case TVeiSettings::EAuto: default: - { - saveQuality = CVedMovie::EQualityAutomatic; - break; - } - } - - iMovie->SetQuality( saveQuality ); - iBackupSaveQuality = saveQuality; - - if ( EProcessingMovieTrimMms == iWaitMode ) - { - if ( saveQuality != CVedMovie::EQualityMMSInteroperability ) - { - iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability ); - SetNewTempFileNeeded( ETrue ); - } - else - { - SetNewTempFileNeeded( EFalse ); - } - } - - TInt err; - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 3, calling iMovie->Process(%S)", iTempFile ); - TRAP( err, iMovie->ProcessL( *iTempFile, * this )); - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 4, err:%d", err ); - if ( err ) - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); - ShowGlobalErrorNote( err ); - } - } - else - /* use old temp file*/ - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 5, -- OLD TEMP" ); - if ( EProcessingMovieSend == iWaitMode ) - { - SendMovieL(); - } - else if ( EProcessingMovieTrimMms == iWaitMode ) - { - if ( iMovie->IsMovieMMSCompatible()) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL 6, MMS COMPATIBLE" ); - - TEntry entry; - User::LeaveIfError( fs.Entry( *iTempFile, entry )); - TInt tempFileSize = entry.iSize / 1024; - TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize(); - - if ( tempFileSize < maxMmsSize ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 7, -- MMS SIZE OK" ); - iWaitMode = EProcessingMovieSend; - SendMovieL(); - } - else - { - SetNewTempFileNeeded( EFalse ); - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 8, -- TRIM MMS" ); - - TBuf8 < KMaxFileName > conv8Filename; - CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename, * iTempFile ); - iMovie->UnregisterMovieObserver( iContainer ); - iMovie->UnregisterMovieObserver( this ); - AppUi()->ActivateLocalViewL( TUid::Uid( EVeiTrimForMmsView ), TUid::Uid( 0 ), conv8Filename ); - } - } - else - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL() 9, -- NO MMS COMPATIBLE" ); - - TInt err; - if ( EProcessingMovieTrimMms == iWaitMode ) - { - iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability ); - } - - TRAP( err, iMovie->ProcessL( *iTempFile, * this )); - - if ( err ) - { - ShowGlobalErrorNote( err ); - } - } - } - else if ( EProcessingMoviePreview == iWaitMode ) - { - if ( iFullScreenSelected ) - { - iContainer->SetBlackScreen( ETrue ); - iContainer->SetRect( AppUi()->ApplicationRect()); - } - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModePreview ); - iContainer->PlayVideoFileL( *iTempFile, iFullScreenSelected ); - } - else if (( EProcessingMovieSave == iWaitMode ) || ( EProcessingMovieSaveThenQuit == iWaitMode )) - { - CFileMan* fileman = CFileMan::NewL( fs ); - CleanupStack::PushL( fileman ); - - if ( iTempFile->Left( 1 ) == iSaveToFileName->Left( 1 )) - { - fileman->Rename( *iTempFile, * iSaveToFileName ); - } - else - { - fileman->Move( *iTempFile, * iSaveToFileName ); - } - - CleanupStack::PopAndDestroy( fileman ); - - HBufC* stringholder = StringLoader::LoadL( R_VEI_NOTE_VIDEO_SAVED, iEikonEnv ); - CleanupStack::PushL( stringholder ); - iWaitMode = ENotWaiting; - ShowInformationNoteL( *stringholder ); - iMovieSavedFlag = ETrue; - CleanupStack::PopAndDestroy( stringholder); - - UpdateMediaGalleryL(); - } - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::StartTempFileProcessingL: Out" ); - } - -void CVeiEditVideoView::InsertNewAudio() - { - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - Cba()->DrawDeferred(); - - iContainer->SetRecordedAudio( ETrue ); - - TInt64 startTimeInt = 0; - TInt64 durationInt = 1000000; - TInt currIndex( 0 ); - - if ((( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) || - ( iContainer->CursorLocation() == VideoEditor::ECursorOnEmptyAudioTrack )) && - ( iMovie->AudioClipCount() > 0 )) - { - currIndex = iContainer->CurrentIndex() + 1; - startTimeInt = iMovie->AudioClipEndTime( iContainer->CurrentIndex()).Int64(); - } - else - { - currIndex = iMovie->AudioClipCount() - 1; - if ( currIndex >= 0 ) - { - startTimeInt = iMovie->AudioClipEndTime( currIndex ).Int64(); - } - else - { - currIndex = 0; - } - } - - while ( currIndex < iMovie->AudioClipCount()) - { - // safety margin: it is not possible to insert new audio if there is less than 1s between clips - TInt64 adjustedClipStartTimeInt = iMovie->AudioClipStartTime( currIndex ).Int64() - 1000000; - - if ( startTimeInt > adjustedClipStartTimeInt ) - { - startTimeInt = iMovie->AudioClipEndTime( currIndex ).Int64(); - currIndex++; - } - else - { - break; - } - } - - if ( currIndex < iMovie->AudioClipCount()) - { - TInt64 endTimeInt = startTimeInt + durationInt; - TInt64 nextStartTimeInt = iMovie->AudioClipStartTime( currIndex ).Int64(); - - if ( endTimeInt > nextStartTimeInt ) - { - durationInt = nextStartTimeInt - startTimeInt; - } - } - - iContainer->SetRecordedAudioStartTime( TTimeIntervalMicroSeconds( startTimeInt )); - iContainer->SetRecordedAudioDuration( TTimeIntervalMicroSeconds( durationInt )); - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeRecordingSetStart ); - iContainer->SetCursorLocation( VideoEditor::ECursorOnAudio ); - - UpdateEditNaviLabel(); - - /* Create temp file. */ - if ( iTempRecordedAudio ) - { - delete iTempRecordedAudio; - iTempRecordedAudio = NULL; - } - - iTempRecordedAudio = HBufC::NewL( KMaxFileName ); - iTempMaker->GenerateTempFileName( *iTempRecordedAudio, iMemoryInUse, iMovie->Format(), ETrue ); - - /* Open the file, this is asynchronous so we'll come to our callback. */ - iRecorder->OpenFileL( *iTempRecordedAudio ); - } - -TBool CVeiEditVideoView::IsEnoughFreeSpaceToSaveL( TInt aBytesToAdd )const - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: in" ); - RFs& fs = iEikonEnv->FsSession(); - - TBool spaceBelowCriticalLevel( EFalse ); - - TInt sizeEstimate = iMovie->GetSizeEstimateL(); - sizeEstimate += aBytesToAdd; - - if ( iEditorState == EQuickPreview ) - { - TInt snapShotSize = iContainer->SnapshotSize(); - if ( snapShotSize != 0 ) - { - sizeEstimate = snapShotSize; - } - } - - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: 2, needed space: %d", sizeEstimate ); - - if ( iMemoryInUse == CAknMemorySelectionDialog::EPhoneMemory ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: " ); - spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( &fs, sizeEstimate, EDriveC ); - } - else - { - LOG( KVideoEditorLogFile, "\tMmc selected" ); - - spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( &fs, sizeEstimate ); - } - - if ( spaceBelowCriticalLevel ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL: 3, space is below critical level" ); - ShowErrorNote( R_VEI_MEMORY_RUNNING_OUT ); - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::IsEnoughFreeSpaceToSaveL out" ); - - return !spaceBelowCriticalLevel; - } - - -TBool CVeiEditVideoView::IsEnoughFreeSpaceToSave2L( TInt aBytesToAdd )const - { - RFs& fs = iEikonEnv->FsSession(); - TBool spaceBelowCriticalLevel( EFalse ); - TInt sizeEstimate = iMovie->GetSizeEstimateL(); - sizeEstimate += aBytesToAdd; - - if ( iMemoryInUse == CAknMemorySelectionDialog::EPhoneMemory ) - { - spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( &fs, sizeEstimate, EDriveC ); - } - else - { - spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( &fs, sizeEstimate ); - } - - if ( !spaceBelowCriticalLevel ) - { - return ETrue; - } - else - { - return EFalse; - } - } - -TBool CVeiEditVideoView::FitsToMmsL() - { - /* - Read documentation of FitsToMmsL() in the header file - */ - LOG( KVideoEditorLogFile, "CVeiEditVideoView::FitsToMmsL() in" ); - TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize(); - - CVedMovie::TVedMovieQuality origQuality = iMovie->Quality(); - iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability ); - TInt videoTimeLineSize = iMovie->GetSizeEstimateL() / 1024; - iMovie->SetQuality( origQuality ); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::FitsToMmsL() out" ); - videoTimeLineSize = videoTimeLineSize * 1.1; - return videoTimeLineSize < maxMmsSize; - } - -void CVeiEditVideoView::BrowseStartTransition( TBool aUpOrDown ) - { - TInt currentEffect; - TInt currentIndex = iContainer->CurrentIndex(); - - if ( currentIndex == 0 ) - { - currentEffect = iMovie->StartTransitionEffect(); - if ( aUpOrDown ) - { - if ( !( TVedStartTransitionEffect( currentEffect - 1 ) < EVedStartTransitionEffectNone )) - { - iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( currentEffect - 1 )); - } - else - { - iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( EVedStartTransitionEffectLast - 1 )); - } - } - else - { - if ( !( TVedStartTransitionEffect( currentEffect + 1 ) >= EVedStartTransitionEffectLast )) - { - iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( currentEffect + 1 )); - } - else - { - iMovie->SetStartTransitionEffect( TVedStartTransitionEffect( EVedStartTransitionEffectNone )); - } - } - } - else if ( currentIndex < iMovie->VideoClipCount()) - { - currentEffect = iMovie->MiddleTransitionEffect( currentIndex - 1 ); - - if ( aUpOrDown ) - { - if ( !( TVedMiddleTransitionEffect( currentEffect - 1 ) < EVedMiddleTransitionEffectNone )) - { - iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( currentEffect - 1 ), currentIndex - 1 ); - } - else - { - iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( EVedMiddleTransitionEffectLast - 1 ), currentIndex - 1 ); - } - } - else - { - if ( !( TVedMiddleTransitionEffect( currentEffect + 1 ) >= EVedMiddleTransitionEffectLast )) - { - iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( currentEffect + 1 ), currentIndex - 1 ); - } - else - { - iMovie->SetMiddleTransitionEffect( TVedMiddleTransitionEffect( EVedMiddleTransitionEffectNone ), currentIndex - 1 ); - } - } - } - else - { - currentEffect = iMovie->EndTransitionEffect(); - - if ( aUpOrDown ) - { - if ( !( TVedEndTransitionEffect( currentEffect - 1 ) < EVedEndTransitionEffectNone )) - { - iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( currentEffect - 1 )); - } - else - { - iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( EVedEndTransitionEffectLast - 1 )); - } - } - else - { - if ( !( TVedEndTransitionEffect( currentEffect + 1 ) >= EVedEndTransitionEffectLast )) - { - iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( currentEffect + 1 )); - } - else - { - iMovie->SetEndTransitionEffect( TVedEndTransitionEffect( EVedEndTransitionEffectNone )); - } - } - } - - } - -void CVeiEditVideoView::ShowErrorNote( const TInt aResourceId, TInt /*aError*/ )const - { - CVeiErrorUI::ShowErrorNote( *iEikonEnv, aResourceId ); - } - -void CVeiEditVideoView::ShowGlobalErrorNote( const TInt aError )const - { - iErrorUI->ShowGlobalErrorNote( aError ); - } - -void CVeiEditVideoView::ShowInformationNoteL( const TDesC& aMessage )const - { - CAknInformationNote* note = new( ELeave )CAknInformationNote( ETrue ); - note->ExecuteLD( aMessage ); - } - -void CVeiEditVideoView::ShowVolumeLabelL( TInt aVolume ) - { - STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetVolumeIconVisibilityL( ETrue ); - - if ( iVolumeHider && iVolumeHider->IsActive()) - { - iVolumeHider->Cancel(); - } - if ( aVolume == 0 ) - { - STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetVolumeIconVisibilityL( EFalse ); - HideVolume(); - return ; - } - - iNaviPane->PushL( *iVolumeNavi ); - if ( !iVolumeHider ) - { - iVolumeHider = CPeriodic::NewL( CActive::EPriorityLow ); - } - iVolumeHider->Start( 1000000, 1000000, TCallBack( CVeiEditVideoView::HideVolumeCallbackL, this )); - - STATIC_CAST( CAknVolumeControl* , iVolumeNavi->DecoratedControl())->SetValue( aVolume ); - - if ( aVolume > KMinVolume + 1 ) - { - STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetLeftArrowVisibilityL( ETrue ); - } - else - { - STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetLeftArrowVisibilityL( EFalse ); - } - - if ( aVolume < KMaxVolume ) - { - STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetRightArrowVisibilityL( ETrue ); - } - else - { - STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetRightArrowVisibilityL( EFalse ); - } - - } - -void CVeiEditVideoView::RemoveCurrentClipL() - { - if ( !iContainer ) - { - return ; - } - TParse fp; - - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) - { - if ( iMovie->AudioClipCount() == 0 ) - { - return ; - } - CVedAudioClipInfo* audioclipinfo = iMovie->AudioClipInfo( iContainer->CurrentIndex()); - fp.Set( audioclipinfo->FileName(), NULL, NULL ); - } - else - { - if ( iMovie->VideoClipCount() == 0 ) - { - return ; - } - - /* Get filename to remove query. */ - TBool isFile( iMovie->VideoClipInfo( iContainer->CurrentIndex())->Class() == EVedVideoClipClassFile ); - CVedVideoClipInfo* videoclipinfo = iMovie->VideoClipInfo( iContainer->CurrentIndex()); - - if ( isFile ) - { - fp.Set( videoclipinfo->FileName(), NULL, NULL ); - } - else - { - fp.Set( videoclipinfo->DescriptiveName(), NULL, NULL ); - } - } - - HBufC* stringholder = StringLoader::LoadL( R_VEI_REMOVE_CLIP_QUERY, fp.Name(), iEikonEnv ); - CleanupStack::PushL( stringholder ); - CAknQueryDialog* dlg = new( ELeave )CAknQueryDialog( *stringholder, CAknQueryDialog::ENoTone ); - TInt queryok = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY ); - CleanupStack::PopAndDestroy( stringholder ); - - if ( queryok ) - { - TUint currentIndex = iContainer->GetAndDecrementCurrentIndex(); - - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) - { - iMovie->RemoveAudioClip( currentIndex ); - } - else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) - { - iMovie->RemoveVideoClip( currentIndex ); - } - else - { - ShowErrorNote( R_VEI_ERROR_NOTE ); - } - } - } - - -TInt CVeiEditVideoView::AddClipL( const TDesC& aFilename, TBool aStartNow ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::AddClipL: In" ); - - if ( !iContainer ) - { - iContainer = new( ELeave )CVeiEditVideoContainer( *iMovie, * this ); - iContainer->SetMopParent( this ); - iContainer->ConstructL( AppUi()->ClientRect()); - AppUi()->AddToStackL( *this, iContainer ); - } - - iMediaQueue->InsertMediaL( aFilename ); - - if ( aStartNow ) - { - iMediaQueue->StartProcessingL(); - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::AddClipL: Out" ); - return KErrNone; - } - - -void CVeiEditVideoView::AddNext() - { - iMediaQueue->GetNext(); - } - -TBool CVeiEditVideoView::SaveL( TWaitMode aQuitAfterSaving ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: In" ); - RFs& fs = iEikonEnv->FsSession(); - - TParse file; - TFileName newname; - - // Get default movie name from settings view - CAknMemorySelectionDialog::TMemory memory( iMovieSaveSettings.MemoryInUse()); - - if ( memory == CAknMemorySelectionDialog::EPhoneMemory ) - { - newname = PathInfo::PhoneMemoryRootPath(); - } - else - { - newname = PathInfo::MemoryCardRootPath(); - } - - newname.Append( PathInfo::VideosPath()); - - TVedVideoFormat movieQuality = iMovie->Format(); - if ( movieQuality == EVedVideoFormatMP4 ) - { - newname.Append( KExtMp4 ); - } - else - { - newname.Append( KExt3gp ); - } - - file.Set( iMovieSaveSettings.DefaultVideoName(), &newname, NULL ); - - TInt error( KErrNone ); - error = fs.MkDirAll( file.DriveAndPath()); - - if (( error != KErrAlreadyExists ) && ( error != KErrNone )) - { - return EFalse; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: 2" ); - if ( IsEnoughFreeSpaceToSaveL()) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: 3" ); - //FileNameQuery - newname.Zero(); - newname.Append( file.FullName()); - - CApaApplication::GenerateFileName( fs, newname ); - CAknFileNamePromptDialog* dlg = CAknFileNamePromptDialog::NewL(); - CleanupStack::PushL( dlg ); - - HBufC* filenametitle = StringLoader::LoadLC( R_VEI_QUERY_FILE_NAME, iEikonEnv ); - - dlg->SetTitleL( *filenametitle ); - CleanupStack::PopAndDestroy( filenametitle ); - - TBool namegiven = dlg->ExecuteL( newname ); - CleanupStack::PopAndDestroy( dlg ); - - if ( namegiven ) - { - newname.Insert( 0, file.DriveAndPath()); - - file.Set( newname, NULL, NULL ); - - if ( BaflUtils::FileExists( fs, newname )) - { - TBool overWrite; - CAknQueryDialog* queryDlg; - - HBufC* overWriteConfirmationString; - overWriteConfirmationString = StringLoader::LoadLC( R_VEI_CONFIRM_OVERWRITE, file.Name(), iEikonEnv ); - queryDlg = new( ELeave )CAknQueryDialog( *overWriteConfirmationString, CAknQueryDialog::ENoTone ); - overWrite = queryDlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY ); - - CleanupStack::PopAndDestroy( overWriteConfirmationString ); - if ( !overWrite ) - { - return EFalse; - } - } - - iWaitMode = aQuitAfterSaving; - - if ( iSaveToFileName ) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - - iSaveToFileName = HBufC::NewL( newname.Length()); - *iSaveToFileName = newname; - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::SaveL: 4, iSaveToFileName:%S", iSaveToFileName ); - StartTempFileProcessingL(); - - return ETrue; - } - else - { - return EFalse; - } - } - - else - { - return EFalse; - } - } - - -// ---------------------------------------------------------------------------- -// CVeiEditVideoView::CheckMemoryCardAvailability() -// -// Checks the memory card availability if MMC is selected as save store in -// application settings. An information note is shown in following -// situations: -// - MMC not inserted -// - MMC corrupted (unformatted) -// [- MMC is read-only (not implemented)] -// -// If note is popped up, this function waits until it's dismissed. -// ---------------------------------------------------------------------------- -// -void CVeiEditVideoView::CheckMemoryCardAvailabilityL() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): in" ); - - // Read the video editor settings from ini file. - - iChangedFromMMCToPhoneMemory = EFalse; - - TVeiSettings settings; - STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( settings ); - - CAknMemorySelectionDialog::TMemory memoryInUse( settings.MemoryInUse()); - - // Check the MMC accessibility only if MMC is used as saving store. - if ( memoryInUse == CAknMemorySelectionDialog::EMemoryCard ) - { - RFs& fs = iEikonEnv->FsSession(); - TDriveInfo driveInfo; - - User::LeaveIfError( fs.Drive( driveInfo, KMmcDrive )); - - // Media is not present (MMC card not inserted). - if ( driveInfo.iType == EMediaNotPresent ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): no media" ); - iChangedFromMMCToPhoneMemory = ETrue; - - settings.MemoryInUse() = CAknMemorySelectionDialog::EPhoneMemory; - STATIC_CAST( CVeiAppUi* , AppUi())->WriteSettingsL( settings ); - } - // Media is present - else - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): media present" ); - - TVolumeInfo volumeInfo; - TInt volumeErr = fs.Volume( volumeInfo, KMmcDrive ); - LOGFMT( KVideoEditorLogFile, "CEditVideoView::CheckMemoryCardAvailability() Volume(): %d", volumeErr ); - - // Show note if media is corrupted/unformatted. - if ( volumeErr == KErrCorrupt ) - { - HBufC* noteText = StringLoader::LoadLC( R_VED_MMC_NOT_INSERTED, iEikonEnv ); - CAknInformationNote* informationNote = new( ELeave )CAknInformationNote( ETrue ); - informationNote->ExecuteLD( *noteText ); - - CleanupStack::PopAndDestroy( noteText ); - - settings.MemoryInUse() = CAknMemorySelectionDialog::EPhoneMemory; - STATIC_CAST( CVeiAppUi* , AppUi())->WriteSettingsL( settings ); - } - } - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::CheckMemoryCardAvailability(): out" ); - } - -void CVeiEditVideoView::UpdateEditNaviLabel()const - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateEditNaviLabel(): In" ); - if ( !iContainer ) - { - return ; - } - - TRAPD( err, DoUpdateEditNaviLabelL()); - - if ( err != KErrNone ) - { - ShowGlobalErrorNote( err ); - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateEditNaviLabel(): In" ); - } - -void CVeiEditVideoView::DoUpdateEditNaviLabelL()const - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): In" ); - - HBufC* buf; - - CAknNavigationDecorator* currentDecorator = iNaviPane->Top(); - - iNaviPane->Pop( iMoveLabel ); - iNaviPane->Pop( iPreviewLabel ); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): navi labels popped" ); - - TBool leftArrowVisible = EFalse; - TBool rightArrowVisible = EFalse; - - TInt currentIndex = iContainer->CurrentIndex(); - - TInt test = iContainer->SelectionMode(); - - // Draw the time indicators to the navi pane in Small preview state. - // However, if the volume indicator is being show, do not draw the time label - if ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModePreview && !iFullScreenSelected && !iVolumeHider ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): iContainer->SelectionMode() == CVeiEditVideoContainer::EModePreview && !iFullScreenSelected && !iVolumeHider" ); - - TTime elapsed( iContainer->PlaybackPositionL().Int64()); - TTime total( iContainer->TotalLength().Int64()); - - TBuf < 16 > elapsedBuf; - TBuf < 16 > totalBuf; - - HBufC* dateFormatString; - - // check if time is over 99:59 - if (( total.Int64() / 1000 ) < 3600000 ) - { - dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_MIN_SEC ); - } - else - { - dateFormatString = iEikonEnv->AllocReadResourceLC( R_QTN_TIME_DURAT_LONG ); - } - - elapsed.FormatL( elapsedBuf, * dateFormatString ); - total.FormatL( totalBuf, * dateFormatString ); - CleanupStack::PopAndDestroy( dateFormatString ); - - CDesCArrayFlat* strings = new CDesCArrayFlat( 2 ); - CleanupStack::PushL( strings ); - strings->AppendL( elapsedBuf ); - strings->AppendL( totalBuf ); - HBufC* stringholder = StringLoader::LoadL( R_VEI_NAVI_TIME, * strings, iEikonEnv ); - CleanupStack::PopAndDestroy( strings ); - CleanupStack::PushL( stringholder ); - - STATIC_CAST( CVeiTimeLabelNavi* , iPreviewLabel->DecoratedControl())->SetLabelL( stringholder->Des()); - - CleanupStack::PopAndDestroy( stringholder ); - - iNaviPane->PushL( *iPreviewLabel ); - } - - - else if ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeMove ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): iContainer->SelectionMode() == CVeiEditVideoContainer::EModeMove" ); - - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) - { - buf = StringLoader::LoadLC( R_VEI_MOVE_AUDIO_NAVILABEL, iEikonEnv ); - - TTimeIntervalMicroSeconds startTime = iMovie->AudioClipStartTime( currentIndex ); - - if (( currentIndex == 0 ) && ( startTime > TTimeIntervalMicroSeconds( 0 ))) - { - leftArrowVisible = ETrue; - } - else - { - if ( currentIndex >= 1 ) - { - TTimeIntervalMicroSeconds prevEndTime = iMovie->AudioClipEndTime( currentIndex - 1 ); - TTimeIntervalMicroSeconds modifiedStartTime = TTimeIntervalMicroSeconds( startTime.Int64() - 100000 ); - - if ( modifiedStartTime > prevEndTime ) - { - leftArrowVisible = ETrue; - } - } - } - - if ( currentIndex < ( iMovie->AudioClipCount() - 1 )) - { - TTimeIntervalMicroSeconds modifiedEndTime = TTimeIntervalMicroSeconds( iMovie->AudioClipEndTime( currentIndex ).Int64() + 100000 ); - TTimeIntervalMicroSeconds nextStartTime = iMovie->AudioClipStartTime( currentIndex + 1 ); - if ( modifiedEndTime < nextStartTime ) - { - rightArrowVisible = ETrue; - } - } - - if ( currentIndex == iMovie->AudioClipCount() - 1 ) - { - rightArrowVisible = ETrue; - } - } - else - { - buf = StringLoader::LoadLC( R_VEI_MOVE_VIDEO_NAVILABEL, iEikonEnv ); - - if ( currentIndex > 0 ) - { - leftArrowVisible = ETrue; - } - if ( currentIndex < iMovie->VideoClipCount() - 1 ) - { - rightArrowVisible = ETrue; - } - } - - STATIC_CAST( CAknNaviLabel* , iMoveLabel->DecoratedControl())->SetTextL( *buf ); - - CleanupStack::PopAndDestroy( buf ); - - iMoveLabel->DrawNow(); - - iMoveLabel->MakeScrollButtonVisible( ETrue ); - iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, !leftArrowVisible ); - iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, !rightArrowVisible ); - - iNaviPane->PushL( *iMoveLabel ); - } - else if ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeDuration ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): iContainer->SelectionMode() == CVeiEditVideoContainer::EModeDuration" ); - - buf = StringLoader::LoadLC( R_VEI_NAVI_PANE_DURATION, iEikonEnv ); - - STATIC_CAST( CAknNaviLabel* , iMoveLabel->DecoratedControl())->SetTextL( *buf ); - - CleanupStack::PopAndDestroy( buf ); - - iMoveLabel->DrawNow(); - - if ( currentDecorator ) - { - iMoveLabel->MakeScrollButtonVisible( ETrue ); - - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) - { - TTimeIntervalMicroSeconds editedDuration = iMovie->AudioClipEditedDuration( currentIndex ); - TTimeIntervalMicroSeconds duration = iMovie->AudioClipInfo( currentIndex )->Duration(); - - if ( editedDuration > TTimeIntervalMicroSeconds( 100000 )) - { - leftArrowVisible = ETrue; - } - - if ( editedDuration < duration ) - { - rightArrowVisible = ETrue; - } - } - else - // Cursor on generated video clip - { - TTimeIntervalMicroSeconds duration = iMovie->VideoClipInfo( currentIndex )->Duration(); - if ( duration > TTimeIntervalMicroSeconds( 100000 )) - { - leftArrowVisible = ETrue; - } - rightArrowVisible = ETrue; - } - - iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ELeftButton, !leftArrowVisible ); - iMoveLabel->SetScrollButtonDimmed( CAknNavigationDecorator::ERightButton, !rightArrowVisible ); - iNaviPane->PushL( *iMoveLabel ); - } - } - else - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): else-branch" ); - - TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize(); - - CVedMovie::TVedMovieQuality origQuality = iMovie->Quality(); - iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability ); - - TInt videoTimeLineSize = iMovie->GetSizeEstimateL() / 1024; - - iMovie->SetQuality( origQuality ); - - // Navipanes MMS icon control. - if ( videoTimeLineSize < maxMmsSize ) - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMmsAvailableL( ETrue ); - } - else - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMmsAvailableL( EFalse ); - } - - TInt size = iMovie->GetSizeEstimateL() / 1024; - /* If in recording state, show last audio clip end time+ recorded audio clip duration in navipane*/ - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL: iMovie->GetSizeEstimateL() OK : %d", size ); - TTimeIntervalMicroSeconds audioEndTime( 0 ); - if ((( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecording ) || - ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecordingPaused ))) - { - TInt audioCount = iMovie->AudioClipCount(); - /* check that cursor is on last audio clip */ - if (( audioCount > 0 ) && ( iContainer->CurrentIndex() == audioCount - 1 )) - { - audioEndTime = iMovie->AudioClipEndTime( audioCount - 1 ); - } - audioEndTime = audioEndTime.Int64() + iContainer->RecordedAudioDuration().Int64(); - /* - * Get recorded audio clip size and add it to engine size estimate - * The size won't match with size estimate that engine gives when recorded audio clip is added, - * - */ - RFs& fs = iEikonEnv->FsSession(); - TEntry entry; - - User::LeaveIfError( fs.Entry( *iTempRecordedAudio, entry )); - TInt recordedClipSize = entry.iSize / 1024; - size += recordedClipSize; - } - - if ( audioEndTime > iMovie->Duration()) - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetDurationLabelL( audioEndTime.Int64()); - } - else - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetDurationLabelL( iMovie->Duration().Int64()); - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL: iMovie->Duration() OK : %Ld", iMovie->Duration().Int64()); - } - - // Video line size to navipane. - STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetSizeLabelL( size ); - - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL: SetSizeLabelL(%d) OK", size ); - - // Get default memory from settings view - - if ( iMemoryInUse == CAknMemorySelectionDialog::EPhoneMemory ) - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryInUseL( ETrue ); - } - else - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryInUseL( EFalse ); - } - - if ( IsEnoughFreeSpaceToSave2L()) - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryAvailableL( ETrue ); - } - else - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetMemoryAvailableL( EFalse ); - } - if ( !currentDecorator ) - { - iNaviPane->PushL( *iEditLabel ); - } - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoUpdateEditNaviLabelL(): Out" ); - } - -void CVeiEditVideoView::NotifyQueueProcessingStarted( MVeiQueueObserver::TProcessing aMode ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingStarted: in" ); - - if ( iProgressNote ) - { - delete iProgressNote; - iProgressNote = NULL; - } - - if ( iWaitDialog ) - { - CancelWaitDialog(); - } - - HBufC* stringholder; - - switch ( aMode ) - { - case MVeiQueueObserver::EProcessingAudio: - - iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue ); - - iProgressNote->SetCallback( this ); - - iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL ); - - - stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_INSERTING_AUDIO, iEikonEnv ); - iProgressNote->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iWaitMode = EOpeningAudioInfo; - iProgressNote->GetProgressInfoL()->SetFinalValue( 100 ); - break; - case MVeiQueueObserver::EProcessingVideo: - - iWaitDialog = new( ELeave )CAknWaitDialog( REINTERPRET_CAST( CEikDialog** , &iWaitDialog ), ETrue ); - iWaitDialog->ExecuteLD( R_VEI_WAIT_DIALOG_INSERTING_VIDEO ); - break; - default: - iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue ); - - iProgressNote->SetCallback( this ); - - iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE ); - UpdateInsertingProgressNoteL( 1 ); - iProgressNote->GetProgressInfoL()->SetFinalValue( 100 ); - break; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingStarted: out" ); - } - -void CVeiEditVideoView::NotifyQueueProcessingProgressed( TInt aProcessedCount, TInt aPercentage ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingProgressed: in" ); - if ( iProgressNote ) - { - UpdateInsertingProgressNoteL( aProcessedCount ); - iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage ); - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueProcessingProgressed: out" ); - } - -TBool CVeiEditVideoView::NotifyQueueClipFailed( const TDesC& aFilename, TInt aError ) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueClipFailed: in, aError:%d", aError ); - - TBool result; - if ( aError == CVeiAddQueue::EInsertingSingleClip ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueClipFailed: 1" ); - ShowErrorNote( R_VEI_VIDEO_FAILED ); - result = ETrue; - } - else - { - TBool continueProcessing; - CAknQueryDialog* dlg; - HBufC* failedContinueString; - - failedContinueString = StringLoader::LoadLC( R_VEI_WARNING_NOTE_INSERTING_FAILED, aFilename, iEikonEnv ); - dlg = new( ELeave )CAknQueryDialog( *failedContinueString, CAknQueryDialog::ENoTone ); - continueProcessing = dlg->ExecuteLD( R_VEI_CONFIRMATION_QUERY ); - - CleanupStack::PopAndDestroy( failedContinueString ); - - result = continueProcessing; - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueClipFailed: out" ); - - return result; - } - -void CVeiEditVideoView::NotifyQueueEmpty( TInt /*aInserted*/, TInt DEBUGLOG_ARG( aFailed )) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueEmpty: in, aFailed:%d", aFailed ); - if ( iProgressNote ) - { - iProgressNote->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressNote->ProcessFinishedL()); - } - if ( iWaitDialog ) - { - CancelWaitDialog(); - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyQueueEmpty: out" ); - } - - -void CVeiEditVideoView::NotifyMovieProcessingStartedL( CVedMovie& /*aMovie*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingStartedL: in" ); - - iPercentProcessed = 0; - - iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue ); - iProgressNote->SetCallback( this ); - iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL ); - - HBufC* stringholder; - - if (( EProcessingMovieSend == iWaitMode ) && ( KSenduiMtmBtUid == iGivenSendCommand )) - { - stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv ); - } - else if ( EProcessingMovieSend == iWaitMode ) - { - stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_SEND, iEikonEnv ); - } - else if ( EProcessingMoviePreview == iWaitMode ) - { - stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv ); - } - else if ( EProcessingMovieTrimMms == iWaitMode ) - { - stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv ); - } - else - { - stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_SAVING, iEikonEnv ); - } - - CleanupStack::PushL( stringholder ); - - iProgressNote->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iProgressNote->GetProgressInfoL()->SetFinalValue( 100 ); - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingStartedL: out" ); - } - -void CVeiEditVideoView::NotifyMovieProcessingProgressed( CVedMovie& /*aMovie*/, TInt aPercentage ) - { - iPercentProcessed = aPercentage; - User::ResetInactivityTime(); - iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage ); - } - -void CVeiEditVideoView::NotifyMovieProcessingCompleted( CVedMovie& aMovie, TInt aError ) - { - LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: in, aError:%d, iPercentProcessed:%d", aError, iPercentProcessed ); - - aMovie.SetMovieSizeLimit( 0 ); // Movie size limit not in use - - if ( aError == KErrNone ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 2" ); - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); - SetNewTempFileNeeded( EFalse ); - iProgressNote->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressNote->ProcessFinishedL()); - } - else - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 3" ); - if ( iProgressNote ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 4" ); - iWaitMode = EProcessingError; - TRAP_IGNORE( iProgressNote->GetProgressInfoL()->SetAndDraw( 100 )); - iErrorNmb = aError; - TRAP_IGNORE( iProgressNote->ProcessFinishedL()); - } - else - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 5" ); - if ( iTempFile ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: 6" ); - RFs& fs = iEikonEnv->FsSession(); - - fs.Delete( *iTempFile ); - delete iTempFile; - iTempFile = NULL; - SetNewTempFileNeeded( ETrue ); - } - } - - // SetEditorState() must be called because of its side effects eventhough state has not changed, - // it sets CBAs. CBAs are set to empty before calling ProcessL() - if ( EMixAudio != iEditorState ) - { - SetEditorState( EEdit ); - } - else - { - SetEditorState( EMixAudio ); - } - - iContainer->SetBlackScreen( EFalse ); - iContainer->SetRect( AppUi()->ClientRect()); - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieProcessingCompleted: out" ); - } - -void CVeiEditVideoView::NotifyVideoClipAdded( CVedMovie& /*aMovie*/, TInt aIndex ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAdded: in" ); - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - - if ( iMovieFirstAddFlag ) - { - CVedVideoClipInfo* info = iMovie->VideoClipInfo( aIndex ); - - if ( EVedVideoClipClassGenerated != info->Class()) - { - SetNewTempFileNeeded( EFalse ); - iMovieSavedFlag = ETrue; - } - iMovieFirstAddFlag = EFalse; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAdded: Completed" ); - - STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->SetState( CVeiEditVideoLabelNavi::EStateEditView ); - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAdded: out" ); - } - -void CVeiEditVideoView::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, TInt DEBUGLOG_ARG( aError )) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAddingFailed: in, aError:%d", aError ); - if ( iProgressNote ) - { - iProgressNote->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressNote->ProcessFinishedL()); - } - - if ( iWaitDialog ) - { - CancelWaitDialog(); - } - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAddingFailed: out" ); - } - -void CVeiEditVideoView::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipRemoved: in" ); - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipRemoved: out" ); - } - -void CVeiEditVideoView::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipIndicesChanged: in" ); - iMovieSavedFlag = EFalse; - SetNewTempFileNeeded( ETrue ); - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipIndicesChanged: out" ); - } - -void CVeiEditVideoView::NotifyVideoClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipTimingsChanged: in" ); - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipTimingsChanged: out" ); - } - -void CVeiEditVideoView::NotifyVideoClipColorEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipColorEffectChanged: in" ); - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipColorEffectChanged: out" ); - } - -void CVeiEditVideoView::NotifyVideoClipAudioSettingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAudioSettingsChanged: in" ); - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipAudioSettingsChanged: out" ); - } - -void CVeiEditVideoView::NotifyStartTransitionEffectChanged( CVedMovie& /*aMovie*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyStartTransitionEffectChanged: in" ); - iMovieSavedFlag = EFalse; - SetNewTempFileNeeded( ETrue ); - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyStartTransitionEffectChanged: out" ); - } - -void CVeiEditVideoView::NotifyMiddleTransitionEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMiddleTransitionEffectChanged: in" ); - iMovieSavedFlag = EFalse; - SetNewTempFileNeeded( ETrue ); - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMiddleTransitionEffectChanged: out" ); - } - -void CVeiEditVideoView::NotifyEndTransitionEffectChanged( CVedMovie& /*aMovie*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyEndTransitionEffectChanged: in" ); - iMovieSavedFlag = EFalse; - SetNewTempFileNeeded( ETrue ); - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyEndTransitionEffectChanged: out" ); - } - -void CVeiEditVideoView::NotifyAudioClipAdded( CVedMovie& aMovie, TInt aIndex ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAdded: in" ); - iMovieSavedFlag = EFalse; - SetNewTempFileNeeded( ETrue ); - - if ( iProgressNote ) - { - iProgressNote->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressNote->ProcessFinishedL()); - } - - iOriginalAudioClipIndex = iContainer->CurrentIndex(); - - if ( iOriginalAudioClipIndex > aIndex ) - { - iOriginalAudioClipIndex--; - } - iContainer->SetCurrentIndex( aIndex ); - - iOriginalAudioStartPoint = TTimeIntervalMicroSeconds( - 1 ); - CVedAudioClipInfo* audioclipinfo = aMovie.AudioClipInfo( aIndex ); - iOriginalAudioDuration = audioclipinfo->Duration(); - - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAdded: out" ); - } - -void CVeiEditVideoView::NotifyAudioClipAddingFailed( CVedMovie& /*aMovie*/, TInt DEBUGLOG_ARG( aError )) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAddingFailed: in, aError:%d", aError ); - if ( iProgressNote ) - { - iProgressNote->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressNote->ProcessFinishedL()); - } - - if ( iWaitDialog ) - { - CancelWaitDialog(); - } - ShowErrorNote( R_VEI_ERRORNOTE_AUDIO_INSERTING_FAILED ); - - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipAddingFailed: out" ); - } - -void CVeiEditVideoView::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipRemoved: in" ); - if ( iTempRecordedAudio ) - { - delete iTempRecordedAudio; - iTempRecordedAudio = NULL; - } - iMovieSavedFlag = EFalse; - SetNewTempFileNeeded( ETrue ); - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipRemoved: out" ); - } - -void CVeiEditVideoView::NotifyAudioClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipIndicesChanged: in" ); - iMovieSavedFlag = EFalse; - SetNewTempFileNeeded( ETrue ); - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipIndicesChanged: out" ); - } - -void CVeiEditVideoView::NotifyAudioClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipTimingsChanged: in" ); - iMovieSavedFlag = EFalse; - SetNewTempFileNeeded( ETrue ); - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipTimingsChanged: out" ); - } - -void CVeiEditVideoView::NotifyMovieReseted( CVedMovie& /*aMovie*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieReseted: in" ); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieReseted: out" ); - } - -void CVeiEditVideoView::NotifyAudioClipInfoReady( CVedAudioClipInfo& aInfo, TInt aError ) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: in, aError:%d", aError ); - TInt err( KErrNone ); - - if ( aError == KErrNone ) - { - if ( aInfo.Type() == EVedAudioTypeUnrecognized ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 2: EVedAudioTypeUnrecognized" ); - - aError = KErrNotSupported; - - /*TPtrC filename = aInfo.FileName(); - - iTempRecordedAudio = HBufC::NewL(KMaxFileName); - iTempMaker->GenerateTempFileName( *iTempRecordedAudio, iMovie ); - - TRAP_IGNORE( iConverter->StartConversionL( filename, *iTempRecordedAudio) ); - - delete iTempRecordedAudio; - iTempRecordedAudio = NULL; - */ - } - else if (( aInfo.Type() == EVedAudioTypeAMR ) || - ( aInfo.Type() == EVedAudioTypeAMRWB ) || - ( aInfo.Type() == EVedAudioTypeMP3 ) || - ( aInfo.Type() == EVedAudioTypeAAC_LC ) || - ( aInfo.Type() == EVedAudioTypeAAC_LTP ) || - ( aInfo.Type() == EVedAudioTypeWAV )) - { - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 3" ); - TInt index = 0; - TInt64 startTimeInt = 0; - TInt64 durationInt = aInfo.Duration().Int64(); - - if ((( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) || - ( iContainer->CursorLocation() == VideoEditor::ECursorOnEmptyAudioTrack )) && - ( iMovie->AudioClipCount() > 0 )) - { - index = iContainer->CurrentIndex() + 1; - startTimeInt = iMovie->AudioClipEndTime( iContainer->CurrentIndex()).Int64(); - } - - while ( index < iMovie->AudioClipCount()) - { - if ( TTimeIntervalMicroSeconds( startTimeInt ) == iMovie->AudioClipStartTime( index )) - { - startTimeInt = iMovie->AudioClipEndTime( index ).Int64(); - index++; - } - else - { - break; - } - } - - if ( index < iMovie->AudioClipCount()) - { - TInt64 endTimeInt = startTimeInt + durationInt; - TInt64 nextStartTimeInt = iMovie->AudioClipStartTime( index ).Int64(); - if ( endTimeInt > nextStartTimeInt ) - { - durationInt = nextStartTimeInt - startTimeInt; - } - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 4" ); - TRAP( err, iMovie->AddAudioClipL( aInfo.FileName(), - TTimeIntervalMicroSeconds( startTimeInt ), - TTimeIntervalMicroSeconds( 0 ), - TTimeIntervalMicroSeconds( durationInt ))); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 5" ); - } - } - if (( aError != KErrNone ) || ( err != KErrNone )) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 6" ); - if ( aError != KErrCancel ) - { - if ( aError ) - { - iErrorNmb = aError; - } - else - { - iErrorNmb = err; - } - } - iWaitMode = EProcessingAudioError; - - iProgressNote->GetProgressInfoL()->SetAndDraw( 100 ); - TRAP_IGNORE( iProgressNote->ProcessFinishedL()); - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: out" ); - } - - - -void CVeiEditVideoView::NotifyVideoClipGeneratorSettingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipGeneratorSettingsChanged: in" ); - if ( iWaitDialog ) - { - iWaitDialog->ProcessFinishedL(); - } - - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - UpdateEditNaviLabel(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipGeneratorSettingsChanged: out" ); - } - -void CVeiEditVideoView::NotifyVideoClipDescriptiveNameChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipDescriptiveNameChanged: in and out" ); - } - -void CVeiEditVideoView::NotifyMovieQualityChanged( CVedMovie& /*aMovie*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieQualityChanged: in" ); - - // If there are text generator inserted into the movie, they need - // to be notified that the movie resolution has changed so that - // they can re-calculate the the wrapping etc. parameters. - /* TInt clipCount = iMovie->VideoClipCount(); - for (TInt i = 0; i < clipCount; i++) - { - CVedVideoClipInfo* clipInfo = iMovie->VideoClipInfo(i); - if (clipInfo->Class() == EVedVideoClipClassGenerated) - { - TUid generatorUid = clipInfo->Generator()->Uid(); - if (generatorUid == KUidTitleClipGenerator) - { - CVeiTitleClipGenerator* generator = static_cast(clipInfo->Generator()); - generator->RefreshTextFrameParametersL(); - } - } - }*/ - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieQualityChanged: out" ); - } - -void CVeiEditVideoView::NotifyMovieOutputParametersChanged( CVedMovie& /*aMovie*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyMovieOutputParametersChanged: in and out" ); - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - } - -void CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkInserted: in and out" ); - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - } - -void CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipDynamicLevelMarkRemoved: in and out" ); - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - } - -void CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkInserted: in and out" ); - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - } - -void CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyVideoClipDynamicLevelMarkRemoved: in and out" ); - SetNewTempFileNeeded( ETrue ); - iMovieSavedFlag = EFalse; - } - -void CVeiEditVideoView::MoscoStateChangeEvent( CBase* aObject, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode ) - { - LOGFMT3( KVideoEditorLogFile, "CVeiEditVideoView::MoscoStateChangeEvent: In: aPreviousState:%d, aCurrentState:%d, aErrorCode:%d", aPreviousState, aCurrentState, aErrorCode ); - - if ( aObject == iRecorder ) - { - if ( aErrorCode != KErrNone ) - { - ShowErrorNote( R_VEI_RECORDING_FAILED ); - - if ( iTempRecordedAudio ) - { - TInt err = iEikonEnv->FsSession().Delete( *iTempRecordedAudio ); - if ( err ){ - - } - delete iTempRecordedAudio; - iTempRecordedAudio = NULL; - } - - iContainer->SetSelectionMode( CVeiEditVideoContainer::EModeNavigation ); - TRAP_IGNORE( Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK )); - Cba()->DrawDeferred(); - UpdateEditNaviLabel(); - - iRecorder->Close(); - } - else if ( aCurrentState == CMdaAudioClipUtility::ERecording ) - { - const TUint delay = 1000 * 1000 / 10; - - if ( !iAudioRecordPeriodic->IsActive()) - { - iAudioRecordPeriodic->Start( delay, delay, TCallBack( CVeiEditVideoView::UpdateAudioRecording, this )); - } - - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PAUSE_STOP ); - Cba()->DrawDeferred(); - } - else if ( aPreviousState == CMdaAudioClipUtility::ENotReady ) - { - TRAP_IGNORE( Cba()->SetCommandSetL( R_VEI_SOFTKEYS_RECORD_CANCEL )); - Cba()->DrawDeferred(); - } - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::MoscoStateChangeEvent: Out" ); - } - - -void CVeiEditVideoView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, - TUid /*aCustomMessageId*/, - const TDesC8& /*aCustomMessage*/ ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoActivateL: In" ); - if ( !iMemoryCardChecked ) - { - CheckMemoryCardAvailabilityL(); - iMemoryCardChecked = ETrue; - } - - if ( !iContainer ) - { - iContainer = new( ELeave )CVeiEditVideoContainer( *iMovie, * this ); - iContainer->SetMopParent( this ); - iContainer->ConstructL( AppUi()->ClientRect()); - AppUi()->AddToStackL( *this, iContainer ); - } - - SetEditorState( EEdit ); - - // Add Context Pane icon - - /* TUid contextPaneUid; - contextPaneUid.iUid = EEikStatusPaneUidContext; - - CEikStatusPane* sp = StatusPane(); - CEikStatusPaneBase::TPaneCapabilities subPane = sp->PaneCapabilities( contextPaneUid ); - - if ( subPane.IsPresent() && subPane.IsAppOwned() ) - { - CAknContextPane* contextPane = (CAknContextPane*)sp->ControlL( contextPaneUid); - - TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KManualVideoEditorIconFileId) ); - }*/ - - // Quality is taken from settings and set to engine. - STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( iMovieSaveSettings ); - - TInt settingsSaveQuality = iMovieSaveSettings.SaveQuality(); - CVedMovie::TVedMovieQuality saveQuality; - - switch ( settingsSaveQuality ) - { - case TVeiSettings::EMmsCompatible: saveQuality = CVedMovie::EQualityMMSInteroperability; - break; - case TVeiSettings::EMedium: saveQuality = CVedMovie::EQualityResolutionMedium; - break; - case TVeiSettings::EBest: saveQuality = CVedMovie::EQualityResolutionHigh; - break; - case TVeiSettings::EAuto: default: - saveQuality = CVedMovie::EQualityAutomatic; - break; - } - - iMovie->SetQuality( saveQuality ); - iMemoryInUse = iMovieSaveSettings.MemoryInUse(); - - if (( EProcessingMovieForCutting == iWaitMode ) || - ( EProcessingMovieTrimMms == iWaitMode ) || - ( ECuttingAudio == iWaitMode )) - { - iMovie->RegisterMovieObserverL( this ); - iMovie->RegisterMovieObserverL( iContainer ); - } - - if ( EProcessingMovieForCutting == iWaitMode ) - { - // miksi laitetaan jos ollaan oltu rimmaamassa? - //SetNewTempFileNeeded(ETrue); - - TTimeIntervalMicroSeconds cutin; - TTimeIntervalMicroSeconds cutout; - cutin = iMovie->VideoClipCutInTime( iCutVideoIndex ); - cutout = iMovie->VideoClipCutOutTime( iCutVideoIndex ); - - if (( cutin != TTimeIntervalMicroSeconds( 0 )) || - ( cutout != iMovie->VideoClipInfo( iCutVideoIndex )->Duration())) - { - iMovieSavedFlag = EFalse; - } - - if (( cutin != iOriginalCutInTime ) || ( cutout != iOriginalCutOutTime ) ) - { - SetNewTempFileNeeded( ETrue ); - iContainer->DrawNow(); - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - iContainer->UpdateThumbnailL( iCutVideoIndex ); - } - iContainer->SetCursorLocation( VideoEditor::ECursorOnClip ); - } - else if ( ECuttingAudio == iWaitMode ) - { - - //SetNewTempFileNeeded(ETrue); - - TTimeIntervalMicroSeconds cutin; - TTimeIntervalMicroSeconds cutout; - cutin = iMovie->AudioClipCutInTime( iCutAudioIndex ); - cutout = iMovie->AudioClipCutOutTime( iCutAudioIndex ); - - if (( cutin != TTimeIntervalMicroSeconds( 0 )) || - ( cutout != iMovie->AudioClipInfo( iCutAudioIndex )->Duration())) - { - iMovieSavedFlag = EFalse; - } - - TTimeIntervalMicroSeconds currentEndTime; - TTimeIntervalMicroSeconds nextStartTime; - - for ( TInt i = iContainer->CurrentIndex(); i < ( iMovie->AudioClipCount() - 1 ); i++ ) - { - currentEndTime = iMovie->AudioClipEndTime( i ); - nextStartTime = iMovie->AudioClipStartTime( i + 1 ); - - if ( nextStartTime < currentEndTime ) - // what is the reason behind? - // is this a typo, should it be like this?: - //if ( nextStartTime != currentEndTime ) - { - nextStartTime = currentEndTime; - iMovie->AudioClipSetStartTime( i + 1, nextStartTime ); - } - } - if (( cutin != iOriginalAudioCutInTime ) || ( cutout != iOriginalAudioCutOutTime )) - { - SetNewTempFileNeeded( ETrue ); - iContainer->DrawNow(); - } - - iContainer->SetCursorLocation( VideoEditor::ECursorOnAudio ); - } - - iNaviPane->PushL( *iEditLabel ); - - iSendKey = EFalse; - iWaitMode = ENotWaiting; - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::DoActivateL: out" ); - } - -void CVeiEditVideoView::HandleForegroundEventL( TBool aForeground ) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL: in: %d", aForeground ); - - if ( !aForeground ) - { - // If the application is closing down, calling PauseVideoL could result in - // a callback from the MMF player after the container is already deleted, - // causing KERN-EXEC 3 - if ( static_cast < CVeiAppUi* > ( AppUi())->AppIsOnTheWayToDestruction()) - { - iContainer->PrepareForTerminationL(); - return ; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL 1" ); - //if ( (EditorState() != EEdit ) && iContainer) - if ( EPreview == EditorState() || EQuickPreview == EditorState()) - { - iContainer->PauseVideoL(); - } - // In phones with clamshell (läppäpuhelin) background can be activated with closing the shell - // iContainer's OfferKeyEvent do not get this kind of shell events - if ( EPreview == EditorState()) - // large preview - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL 2" ); - SetEditorState( CVeiEditVideoView::EEdit ); - iContainer->SetBlackScreen( EFalse ); - SetFullScreenSelected( EFalse ); - iContainer->StopVideo( ETrue ); - } - - if (( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecordingPaused ) || ( iContainer->SelectionMode() == CVeiEditVideoContainer::EModeRecording )) - { - HandleCommandL( EVeiCmdEditVideoViewRecordStop ); - } - DoDeactivate(); - } - else - { - if ( EditorState() != EEdit ) - { - if ( EMixAudio != EditorState() && EAdjustVolume != EditorState()) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL: 3, setting R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK" ); - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_PREVIEW_PLAY_BACK ); - } - Cba()->DrawDeferred(); - } - - /* When view is activated some clips can be deleted or - names can be changed.. So check that all video and audio clips are still available.*/ - if ( iMovie ) - { - TInt i; - TFileName clipName; - RFs& fs = iEikonEnv->FsSession(); - - for ( i = 0; i < iMovie->VideoClipCount(); i++ ) - { - if ( iMovie->VideoClipInfo( i )->Class() == EVedVideoClipClassFile ) - { - clipName = iMovie->VideoClipInfo( i )->FileName(); - - if ( !BaflUtils::FileExists( fs, clipName )) - { - iContainer->GetAndDecrementCurrentIndex(); - - iMovie->RemoveVideoClip( i ); - i--; - UpdateMediaGalleryL(); - } - clipName.Zero(); - } - } - - for ( i = 0; i < iMovie->AudioClipCount(); i++ ) - { - clipName = iMovie->AudioClipInfo( i )->FileName(); - - if ( !BaflUtils::FileExists( fs, clipName )) - { - iContainer->GetAndDecrementCurrentIndex(); - - iMovie->RemoveAudioClip( i ); - i--; - UpdateMediaGalleryL(); - } - clipName.Zero(); - } - - } - - UpdateEditNaviLabel(); - HandleScreenDeviceChangedL(); - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::HandleForegroundEventL: out" ); - } - -void CVeiEditVideoView::DoDeactivate() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView:DoDeactivate: In" ); - - iNaviPane->Pop( iEditLabel ); - - if ( iVolumeHider ) - { - iVolumeHider->Cancel(); - delete iVolumeHider; - iVolumeHider = NULL; - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView:DoDeactivate: Out" ); - } - - -TTimeIntervalMicroSeconds CVeiEditVideoView::OriginalAudioDuration()const - { - return iOriginalAudioDuration; - } - -TInt CVeiEditVideoView::UpdateNaviPreviewing( TAny* aThis ) - { - STATIC_CAST( CVeiEditVideoView* , aThis )->DoUpdateEditNaviLabelL(); - return 1; - } - - -TInt CVeiEditVideoView::UpdateAudioRecording( TAny* aThis ) - { - STATIC_CAST( CVeiEditVideoView* , aThis )->DoUpdateAudioRecording(); - return 1; - } - -void CVeiEditVideoView::DoUpdateAudioRecording() - { - if ( iRecorder->State() != CMdaAudioClipUtility::ERecording ) - { - iAudioRecordPeriodic->Cancel(); - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_CONTINUE_STOP ); - Cba()->DrawDeferred(); - } - else - { - TTimeIntervalMicroSeconds duration = iRecorder->Duration(); - - iContainer->SetRecordedAudioDuration( duration ); - iContainer->DrawTrackBoxes(); - - UpdateEditNaviLabel(); - - // !!!*** Safety margin of 0.5s because cropping does not work, remove when cropping fixed. ***!!! - duration = TTimeIntervalMicroSeconds( duration.Int64()); - - if (( iRecordedAudioMaxDuration >= TTimeIntervalMicroSeconds( 0 )) && ( duration > iRecordedAudioMaxDuration )) - { - TRAP_IGNORE( HandleCommandL( EVeiCmdEditVideoViewRecordStop )); - } - } - } - -void CVeiEditVideoView::CancelWaitDialog( TInt aError ) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: In, aError:%d", aError ); - if ( iWaitDialog ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 2" ); - iWaitDialog->ProcessFinishedL(); - } - - if ( aError ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 3" ); - ShowGlobalErrorNote( aError ); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 4" ); - } - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: 5" ); - Cba()->DrawDeferred(); - LOG( KVideoEditorLogFile, "CVeiEditVideoView::CancelWaitDialog: Out" ); - } - -void CVeiEditVideoView::NotifyImageClipGeneratorInitializationComplete( CVeiImageClipGenerator& /*aGenerator*/, TInt aError ) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyImageClipGeneratorInitializationComplete: in, aError:%d", aError ); - if ( aError != KErrNone ) - { - ShowGlobalErrorNote( aError ); - delete iGenerator; - iGenerator = 0; - return ; - } - - // insert the generator into movie - TInt index = ( iContainer->CurrentIndex() == iMovie->VideoClipCount()) ? iMovie->VideoClipCount(): iContainer->CurrentIndex() + 1; - iMovie->InsertVideoClipL( *iGenerator, ETrue, index ); - - // Generator is no longer our concern - iGenerator = 0; - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyImageClipGeneratorInitializationComplete: out" ); - } - - -void CVeiEditVideoView::NotifyTitleClipBackgroundImageLoadComplete( CVeiTitleClipGenerator& /*aGenerator*/, TInt aError ) - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyTitleClipBackgroundImageLoadComplete: in, aError:%d", aError ); - if ( aError != KErrNone ) - { - ShowGlobalErrorNote( aError ); - delete iGenerator; - iGenerator = 0; - return ; - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyTitleClipBackgroundImageLoadComplete: out" ); - } - -void CVeiEditVideoView::UpdateInsertingProgressNoteL( TInt aProcessed ) - { - TInt queueCount = iMediaQueue->Count(); - - CArrayFix < TInt > * numbers = new CArrayFixFlat < TInt > ( 2 ); - CleanupStack::PushL( numbers ); - numbers->AppendL( aProcessed ); - numbers->AppendL( queueCount ); - - HBufC* stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_INSERTING_MEDIA, * numbers, iEikonEnv ); - - CleanupStack::PushL( stringholder ); - - iProgressNote->SetTextL( *stringholder ); - iProgressNote->DrawNow(); // otherwise text is not drawn at all - CleanupStack::PopAndDestroy( stringholder ); - CleanupStack::PopAndDestroy( numbers ); - } - -void CVeiEditVideoView::MmsSendCompatibleCheck() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): in" ); - - TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iEditLabel->DecoratedControl())->GetMaxMmsSize()* 1024; - - CVedMovie::TVedMovieQuality origQuality = iMovie->Quality(); - iMovie->SetQuality( CVedMovie::EQualityMMSInteroperability ); - TInt sizeEstimate = 0; - TRAP_IGNORE( sizeEstimate = iMovie->GetSizeEstimateL()); - iMovie->SetQuality( origQuality ); - - LOGFMT2( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): maxMmsSize: %d, sizeEstimate: %d", maxMmsSize, sizeEstimate ); - - TInt movieSizeLimit = ( TInt )( maxMmsSize* 0.9 ); - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): testing, test:%d", movieSizeLimit ); - - if ( sizeEstimate < ( TInt )( maxMmsSize* 1.1 )) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): SetMovieSizeLimit..ok" ); - iMovie->SetMovieSizeLimit( movieSizeLimit ); - } - - TVeiSettings movieSaveSettings; - - if ( iMovie->IsMovieMMSCompatible()) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck: MMSCompatible YES" ); - iWaitMode = EProcessingMovieTrimMms; - StartTempFileProcessingL(); - } - else - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck: MMSCompatible NO" ); - iWaitMode = EProcessingMovieTrimMms; - movieSaveSettings.SaveQuality() = TVeiSettings::EMmsCompatible; - StartTempFileProcessingL(); - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::MmsSendCompatibleCheck(): out" ); - } - -// Screen twisting -/* -/* experimental code trying to fix this: -EECO-6W39YS -Manual Video Editor: Wrong layout displays if switching phone mode during large preview playing - -void CVeiEditVideoView::HandleScreenDeviceChangedL() -{ -LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() in"); -if ( iContainer ) -{ -// Orientation changed. Resize container rect and update component -//positions. - - -// iContainer->SetRect( ClientOrApplicationRect( iFullScreenSelected ) ); -// -// iContainer->SetRect( AppUi()->ClientRect() ); -// - -if(CVeiEditVideoContainer::EModePreview == iContainer->SelectionMode() && iFullScreenSelected && -CVeiEditVideoContainer::EStatePlaying == iContainer->PreviewState()) -{ -LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() 1"); -iContainer->SetBlackScreen( ETrue ); -iContainer->SetRect( ClientOrApplicationRect( iFullScreenSelected ) ); -return; -} -LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() 2"); -iContainer->SetCursorLocation( iContainer->CursorLocation() ); -iContainer->ArrowsControl(); - -iContainer->DrawDeferred(); -} -LOG(KVideoEditorLogFile, "CVeiEditVideoView::HandleScreenDeviceChangedL() out"); -} - */ -/* Screen twisting */ -void CVeiEditVideoView::HandleScreenDeviceChangedL() - { - if ( iContainer ) - { - // Orientation changed. Resize container rect and update component - //positions. - iContainer->SetRect( AppUi()->ClientRect()); - - iContainer->SetCursorLocation( iContainer->CursorLocation()); - iContainer->ArrowsControl(); - - iContainer->DrawDeferred(); - } - } - -void CVeiEditVideoView::HideVolume() - { - iNaviPane->Pop( iVolumeNavi ); - - delete iVolumeHider; - iVolumeHider = NULL; - } - -TInt CVeiEditVideoView::HideVolumeCallbackL( TAny* aPtr ) - { - CVeiEditVideoView* view = ( CVeiEditVideoView* )aPtr; - view->HideVolume(); - return 0; - } - -void CVeiEditVideoView::UpdateMediaGalleryL() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateMediaGalleryL(): In" ); - - - // Publish & Subscribe API used to make the saved file name available to AIW provider - if ( iSaveToFileName ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateMediaGalleryL(): Calling RProperty::Define(KUidVideoEditorProperties, VideoEditor::EPropertyFilename, RProperty::EText); " ); - TInt err = RProperty::Define( KUidVideoEditorProperties, VideoEditor::EPropertyFilename, RProperty::EText ); - if ( err != KErrAlreadyExists ) - { - User::LeaveIfError( err ); - } - User::LeaveIfError( RProperty::Set( KUidVideoEditorProperties, VideoEditor::EPropertyFilename, iSaveToFileName->Des())); - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::UpdateMediaGalleryL(): Out" ); - } - -void CVeiEditVideoView::SetFullScreenSelected( TBool aFullScreenSelected ) - { - iFullScreenSelected = aFullScreenSelected; - } - -void CVeiEditVideoView::StartNaviPaneUpdateL() - { - if ( iPreviewUpdatePeriodic ) - { - if ( iPreviewUpdatePeriodic->IsActive()) - { - iPreviewUpdatePeriodic->Cancel(); - } - - iPreviewUpdatePeriodic->Start( 100000, 100000, TCallBack( CVeiEditVideoView::UpdateNaviPreviewing, this )); - } - } - -void CVeiEditVideoView::ShowAndHandleSendMenuCommandsL() - { - /* Show send menu, postcard dimmed */ - CArrayFix < TUid > * mtmToDim = new( ELeave )CArrayFixFlat < TUid > ( 3 ); - TUid userSelection; - CleanupStack::PushL( mtmToDim ); - /* - this uid is empirically got with one device 19.10.2006 - there is currently (19.10.2006) no constans found in headers for Web Upload - */ - - const TInt KSenduiMtmOwnWebUploadIntValue = 536873429; - const TUid KSenduiMtmOwnWebUpload = - { - KSenduiMtmOwnWebUploadIntValue - }; - - mtmToDim->AppendL( KSenduiMtmPostcardUid ); - mtmToDim->AppendL( KSenduiMtmAudioMessageUid ); - mtmToDim->AppendL( KSenduiMtmOwnWebUpload ); - - - userSelection = iSendAppUi.ShowSendQueryL( NULL, TSendingCapabilities( 0, 0, TSendingCapabilities::ESupportsAttachments ), mtmToDim ); - CleanupStack::PopAndDestroy( mtmToDim ); - - iGivenSendCommand = userSelection; - - if ( IsEnoughFreeSpaceToSaveL()) - { - switch ( userSelection.iUid ) - { - case KSenduiMtmSmtpUidValue: - case KSenduiMtmImap4UidValue: - case KSenduiMtmPop3UidValue: - { - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: %d", userSelection.iUid ); - iWaitMode = EProcessingMovieSend; - StartTempFileProcessingL(); - break; - } - case KSenduiMtmIrUidValue: - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: KSenduiMtmIrUidValue" ); - iWaitMode = EProcessingMovieSend; - StartTempFileProcessingL(); - break; - } - case KSenduiMtmMmsUidValue: - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: KSenduiMtmMmsUidValue" ); - iWaitMode = EProcessingMovieTrimMms; - MmsSendCompatibleCheck(); - break; - } - case KSenduiMtmBtUidValue: - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL: MTM UID: KSenduiMtmBtUidValue" ); - iWaitMode = EProcessingMovieSend; - StartTempFileProcessingL(); - break; - } - /*case KSenduiMtmOwnWebUploadIntValue: // 0x200009D5 - { - LOG(KVideoEditorLogFile, "CVeiEditVideoView::ShowAndHandleSendMenuCommandsL 6: MTM UID: 536873429"); - iWaitMode = EProcessingMovieSend; - StartTempFileProcessingL(); - break; - } - */ - default: - break; - - } - } - } - -void CVeiEditVideoView::StopNaviPaneUpdateL() - { - DoUpdateEditNaviLabelL(); - - if ( iPreviewUpdatePeriodic && iPreviewUpdatePeriodic->IsActive()) - { - iPreviewUpdatePeriodic->Cancel(); - } - } - -TRect CVeiEditVideoView::ClientOrApplicationRect( TBool aFullScreenSelected )const - { - if ( aFullScreenSelected ) - { - return AppUi()->ApplicationRect(); - } - else - { - return AppUi()->ClientRect(); - } - - } - -TBool CVeiEditVideoView::MixingConditionsOk()const - { - // prerequisites for sound mixing: at least one video with audio and one imported audio exist - if ( iMovie->VideoClipCount() > 0 && iMovie->AudioClipCount() > 0 ) - { - for ( TInt i = 0; i < iMovie->VideoClipCount(); i++ ) - { - //if (iMovie->VideoClipEditedHasAudio(i)) - if ( iMovie->VideoClipInfo( i )->HasAudio()) - { - return ETrue; - } - } - } - return EFalse; - } - -/*void CVeiEditVideoView::MixAudio() -{ - -//TReal gainVideoNew(0); -//TReal gainAudioNew(0); - -TInt gainVideoNew(0); -TInt gainAudioNew(0); - -TInt gainVideoCurrent = iMovie->GetVideoClipVolumeGainL(KVedClipIndexAll); -TInt gainAudioCurrent = iMovie->GetAudioClipVolumeGainL(KVedClipIndexAll); - -// video clips are faded -if (iContainer->AudioMixingRatio() > 0) -{ -//@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int -//Math::Round(fadevideo, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2); - -gainVideoNew = iContainer->AudioMixingRatio()*(KVolumeMaxGain/10); -gainVideoNew += 0.5; // for making real to int rounding work in constructor of TVedDynamicLevelMark -gainVideoNew = 0 - gainVideoNew; -} -// audio clips are faded -else if (iContainer->AudioMixingRatio() < 0) -{ -//@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int -//Math::Round(fadeaudio, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2); -gainAudioNew = iContainer->AudioMixingRatio()*(KVolumeMaxGain/10); -gainAudioNew -= 0.5; // for making real to int rounding work in constructor of TVedDynamicLevelMark -} - -if (gainVideoNew != gainVideoCurrent) -{ -iMovie->SetVideoClipVolumeGainL(KVedClipIndexAll, gainVideoNew); -} -if (gainAudioNew != gainAudioCurrent) -{ -iMovie->SetAudioClipVolumeGainL(KVedClipIndexAll, gainAudioNew); -} -} - */ - -void CVeiEditVideoView::MixAudio() - { - TReal fadevideo( 0 ); - TReal fadeaudio( 0 ); - - // video clips are faded - if ( iContainer->AudioMixingRatio() > 0 ) - { - //@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int - //Math::Round(fadevideo, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2); - - fadevideo = iContainer->AudioMixingRatio()*( KVolumeMaxGain / 10 ); - fadevideo += 0.5; // for making real to int rounding work in constructor of TVedDynamicLevelMark - fadevideo = 0-fadevideo; - fadeaudio = 0; - } - // audio clips are faded - else if ( iContainer->AudioMixingRatio() < 0 ) - { - //@ : think how to tackle situations where value is form x.0, adding 0.5 gets wrong int - //Math::Round(fadeaudio, iContainer->AudioMixingRatio()*(KVolumeMaxGain/10), 2); - - fadeaudio = iContainer->AudioMixingRatio()*( KVolumeMaxGain / 10 ); - fadeaudio -= 0.5; // for making real to int rounding work in constructor of TVedDynamicLevelMark - fadevideo = 0; - } - - // video clips are faded - if ( iContainer->AudioMixingRatio() > 0 && iMovie->VideoClipCount() > 0 ) - { - TInt gain = iMovie->GetVideoClipVolumeGainL( KVedClipIndexAll ); ///(KVolumeMaxGain/10); - TInt gainNew = ( TInt )fadevideo; - if ( gainNew != gain ) - { - iMovie->SetAudioClipVolumeGainL( KVedClipIndexAll, 0 ); - iMovie->SetVideoClipVolumeGainL( KVedClipIndexAll, gainNew ); - } - } - // audio clips are faded - else if ( iContainer->AudioMixingRatio() < 0 && iMovie->AudioClipCount() > 0 ) - { - TInt gain = iMovie->GetAudioClipVolumeGainL( KVedClipIndexAll ); ///(KVolumeMaxGain/10); - TInt gainNew = ( TInt )fadeaudio; - if ( gainNew != gain ) - { - iMovie->SetVideoClipVolumeGainL( KVedClipIndexAll, 0 ); - iMovie->SetAudioClipVolumeGainL( KVedClipIndexAll, gainNew ); - } - } - else - //if marks set back to position '0' - { - if ( 0 != iMovie->GetVideoClipVolumeGainL( KVedClipIndexAll )) - { - iMovie->SetVideoClipVolumeGainL( KVedClipIndexAll, 0 ); - } - if ( 0 != iMovie->GetAudioClipVolumeGainL( KVedClipIndexAll )) - { - iMovie->SetAudioClipVolumeGainL( KVedClipIndexAll, 0 ); - } - } - } - -void CVeiEditVideoView::AdjustVolumeL() - { - TReal adjustVolume = iContainer->Volume()*( KVolumeMaxGain / 10 ); - // to make rounding to int work correctly in constructor of TVedDynamicLevelMark - // @ : if adjustvolume is x.0, rounding does not work, think how to fix problem - if ( 0 < adjustVolume ) - { - adjustVolume += 0.5; - } - else - { - adjustVolume -= 0.5; - } - - if ( iContainer->CursorLocation() == VideoEditor::ECursorOnClip ) - { - TReal currentVolume = iMovie->GetVideoClipVolumeGainL( iContainer->CurrentIndex()); ///(KVolumeMaxGain/10); - if ( 0 == iContainer->Volume()) - { - if ( 0 != ( TInt )currentVolume ) - { - iMovie->SetVideoClipVolumeGainL( iContainer->CurrentIndex(), 0 ); - } - } - else if (( TInt )currentVolume != ( TInt )adjustVolume ) - { - iMovie->SetVideoClipVolumeGainL( iContainer->CurrentIndex(), ( TInt )adjustVolume ); - } - } - else if ( iContainer->CursorLocation() == VideoEditor::ECursorOnAudio ) - { - TReal currentVolume = iMovie->GetAudioClipVolumeGainL( iContainer->CurrentIndex()); ///(KVolumeMaxGain/10); - if ( 0 == iContainer->Volume()) - { - if ( 0 != ( TInt )currentVolume ) - { - iMovie->SetAudioClipVolumeGainL( iContainer->CurrentIndex(), 0 ); - } - } - else if (( TInt )currentVolume != ( TInt )adjustVolume ) - { - iMovie->SetAudioClipVolumeGainL( iContainer->CurrentIndex(), ( TInt )adjustVolume ); - } - } - } - -void CVeiEditVideoView::StoreOrientation() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::StoreOrientation: in" ); - - iOriginalOrientation = AppUi()->Orientation(); - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::StoreOrientation: out" ); - } - -void CVeiEditVideoView::RestoreOrientation() - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::RestoreOrientation: in" ); - - TRAP_IGNORE( AppUi()->SetOrientationL( iOriginalOrientation )); - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::RestoreOrientation: out" ); - } - -void CVeiEditVideoView::SetNewTempFileNeeded( const TBool aUpdateNeeded ) - { - iUpdateTemp = aUpdateNeeded; - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiIconBox.cpp --- a/videditor/ManualVideoEditor/src/VeiIconBox.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,289 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// System includes -#include -#include -#include -#include - -// User includes -#include "veiappui.h" -#include "veieditvideocontainer.h" -#include "VeiIconBox.h" -#include "VideoEditorUtils.h" - - -CVeiIconBox* CVeiIconBox::NewL( const TRect& aRect, const CCoeControl* aParent ) - { - CVeiIconBox* self = CVeiIconBox::NewLC( aRect, aParent ); - CleanupStack::Pop( self ); - return self; - } - -CVeiIconBox* CVeiIconBox::NewLC( const TRect& aRect, const CCoeControl* aParent ) - { - CVeiIconBox* self = new( ELeave )CVeiIconBox; - CleanupStack::PushL( self ); - self->ConstructL( aRect, aParent ); - return self; - } - -void CVeiIconBox::ConstructL( const TRect& aRect, const CCoeControl* aParent ) - { - SetContainerWindowL( *aParent ); - - TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath( KManualVideoEditorIconFileId )); - TFileName mbmPath2( VideoEditorUtils::IconFileNameAndPath( KVideoEditorUiComponentsIconFileId )); - - AknIconUtils::CreateIconL( iVolumeMute, - iVolumeMuteMask, - mbmPath, - EMbmManualvideoeditorQgn_prop_ve_muted, - EMbmManualvideoeditorQgn_prop_ve_muted_mask ); - - AknIconUtils::CreateIconL( iSlowMotion, - iSlowMotionMask, - mbmPath, - EMbmManualvideoeditorQgn_prop_ve_slow, - EMbmManualvideoeditorQgn_prop_ve_slow_mask ); - - AknIconUtils::CreateIconL( iBlackAndWhite, - iBlackAndWhiteMask, - mbmPath, - EMbmManualvideoeditorQgn_prop_ve_bw, - EMbmManualvideoeditorQgn_prop_ve_bw_mask ); - - AknIconUtils::CreateIconL( iColour, - iColourMask, - mbmPath, - EMbmManualvideoeditorQgn_prop_ve_colour, - EMbmManualvideoeditorQgn_prop_ve_colour_mask ); - - AknIconUtils::CreateIconL( iRecAudio, - iRecAudioMask, - mbmPath, - EMbmManualvideoeditorQgn_prop_ve_rec, - EMbmManualvideoeditorQgn_prop_ve_rec_mask ); - - AknIconUtils::CreateIconL( iPauseAudio, - iPauseAudioMask, - mbmPath2, - EMbmVideoeditoruicomponentsQgn_prop_ve_pause, - EMbmVideoeditoruicomponentsQgn_prop_ve_pause_mask ); - - SetRect( aRect ); - ActivateL(); - } - -CVeiIconBox::~CVeiIconBox() - { - delete iBlackAndWhite; - delete iBlackAndWhiteMask; - delete iColour; - delete iColourMask; - delete iSlowMotion; - delete iSlowMotionMask; - delete iVolumeMute; - delete iVolumeMuteMask; - delete iRecAudio; - delete iRecAudioMask; - delete iPauseAudio; - delete iPauseAudioMask; - } - - -void CVeiIconBox::SizeChanged() - { - TRect rect = Rect(); - TSize iconSize; - if ( !iLandscapeScreenOrientation ) - { - iconSize.SetSize( rect.Width(), rect.Width()); - } - else - { - iconSize.SetSize( rect.Height(), rect.Height()); - } - - AknIconUtils::SetSize( iVolumeMute, iconSize, EAspectRatioNotPreserved ); - AknIconUtils::SetSize( iSlowMotion, iconSize, EAspectRatioNotPreserved ); - AknIconUtils::SetSize( iBlackAndWhite, iconSize, EAspectRatioNotPreserved ); - AknIconUtils::SetSize( iColour, iconSize, EAspectRatioNotPreserved ); - AknIconUtils::SetSize( iRecAudio, iconSize, EAspectRatioNotPreserved ); - AknIconUtils::SetSize( iPauseAudio, iconSize, EAspectRatioNotPreserved ); - } - -void CVeiIconBox::SetLandscapeScreenOrientation( TBool aLandscapeScreenOrientation ) - { - iLandscapeScreenOrientation = aLandscapeScreenOrientation; - } - -void CVeiIconBox::SetVolumeMuteIconVisibility( TBool aVisible ) - { - iVolumeMuteIconVisible = aVisible; - DrawDeferred(); - } - -void CVeiIconBox::SetSlowMotionIconVisibility( TBool aVisible ) - { - iSlowMotionIconVisible = aVisible; - DrawDeferred(); - } - -void CVeiIconBox::SetBlackAndWhiteIconVisibility( TBool aVisible ) - { - iBlackAndWhiteIconVisible = aVisible; - DrawDeferred(); - } - -void CVeiIconBox::SetColourIconVisibility( TBool aVisible ) - { - iColourIconVisible = aVisible; - DrawDeferred(); - } - -void CVeiIconBox::SetRecAudioIconVisibility( TBool aVisible ) - { - iRecAudioIconVisibile = aVisible; - DrawDeferred(); - } - -void CVeiIconBox::SetPauseAudioIconVisibility( TBool aVisible ) - { - iPauseAudioIconVisibile = aVisible; - DrawDeferred(); - } - - - -void CVeiIconBox::Draw( const TRect& aRect )const - { - CWindowGc& gc = SystemGc(); - - TRect rect = aRect; - - TPoint slowMotionPos; - TPoint BWPos; - - /* Icon area frame */ - - if ( !iLandscapeScreenOrientation ) - // Portrait - { - TInt symboldistance = STATIC_CAST( TInt, rect.Size().iHeight* 0.01428571 ); - /** volume, rec and pause icons are on same position.*/ - if ( iVolumeMuteIconVisible ) - { - TPoint audioMutePos( rect.iTl ); - TRect clipRect( TPoint( 0, 0 ), iVolumeMute->SizeInPixels().AsPoint()); - gc.BitBltMasked( audioMutePos, iVolumeMute, clipRect, iVolumeMuteMask, EFalse ); - } - else - { - if ( iRecAudioIconVisibile ) - { - TPoint audioRecPos( rect.iTl ); - TRect clipRect( TPoint( 0, 0 ), iRecAudio->SizeInPixels().AsPoint()); - gc.BitBltMasked( audioRecPos, iRecAudio, clipRect, iRecAudioMask, EFalse ); - } - else if ( iPauseAudioIconVisibile ) - { - TPoint audioPausePos( rect.iTl ); - TRect clipRect( TPoint( 0, 0 ), iPauseAudio->SizeInPixels().AsPoint()); - gc.BitBltMasked( audioPausePos, iPauseAudio, clipRect, iPauseAudioMask, EFalse ); - } - } - - if ( iSlowMotionIconVisible ) - { - slowMotionPos.SetXY( rect.iTl.iX, rect.iTl.iY + iVolumeMute->SizeInPixels().iHeight + symboldistance ); - TRect clipRect( TPoint( 0, 0 ), iVolumeMute->SizeInPixels().AsPoint()); - gc.BitBltMasked( slowMotionPos, iSlowMotion, clipRect, iSlowMotionMask, EFalse ); - } - - - if ( iBlackAndWhiteIconVisible ) - { - BWPos.SetXY( rect.iTl.iX, rect.iTl.iY + iVolumeMute->SizeInPixels().iHeight + iSlowMotion->SizeInPixels().iHeight + symboldistance* 2 ); - TRect clipRect( TPoint( 0, 0 ), iVolumeMute->SizeInPixels().AsPoint()); - gc.BitBltMasked( BWPos, iBlackAndWhite, clipRect, iBlackAndWhiteMask, EFalse ); - } - - if ( iColourIconVisible ) - { - BWPos.SetXY( rect.iTl.iX, rect.iTl.iY + iVolumeMute->SizeInPixels().iHeight + iSlowMotion->SizeInPixels().iHeight + symboldistance* 2 ); - TRect clipRect( TPoint( 0, 0 ), iVolumeMute->SizeInPixels().AsPoint()); - gc.BitBltMasked( BWPos, iColour, clipRect, iColourMask, EFalse ); - } - - - } - else - // Landscape - { - TInt symboldistance = STATIC_CAST( TInt, rect.Size().iWidth* 0.04347826 ); - if ( iVolumeMuteIconVisible ) - { - TPoint audioMutePos( rect.iTl ); - TRect clipRect( TPoint( 0, 0 ), iVolumeMute->SizeInPixels().AsPoint()); - gc.BitBltMasked( audioMutePos, iVolumeMute, clipRect, iVolumeMuteMask, EFalse ); - } - else - { - if ( iRecAudioIconVisibile ) - { - TPoint audioRecPos( rect.iTl ); - TRect clipRect( TPoint( 0, 0 ), iRecAudio->SizeInPixels().AsPoint()); - gc.BitBltMasked( audioRecPos, iRecAudio, clipRect, iRecAudioMask, EFalse ); - } - else if ( iPauseAudioIconVisibile ) - { - TPoint audioPausePos( rect.iTl ); - TRect clipRect( TPoint( 0, 0 ), iPauseAudio->SizeInPixels().AsPoint()); - gc.BitBltMasked( audioPausePos, iPauseAudio, clipRect, iPauseAudioMask, EFalse ); - } - } - - if ( iSlowMotionIconVisible ) - { - slowMotionPos.SetXY( rect.iTl.iX + iVolumeMute->SizeInPixels().iWidth + symboldistance, rect.iTl.iY ); - TRect clipRect( TPoint( 0, 0 ), iVolumeMute->SizeInPixels().AsPoint()); - gc.BitBltMasked( slowMotionPos, iSlowMotion, clipRect, iSlowMotionMask, EFalse ); - } - - if ( iBlackAndWhiteIconVisible ) - { - BWPos.SetXY( rect.iTl.iX + iVolumeMute->SizeInPixels().iWidth + iSlowMotion->SizeInPixels().iWidth + symboldistance * 2, rect.iTl.iY ); - TRect clipRect( TPoint( 0, 0 ), iVolumeMute->SizeInPixels().AsPoint()); - gc.BitBltMasked( BWPos, iBlackAndWhite, clipRect, iBlackAndWhiteMask, EFalse ); - } - - if ( iColourIconVisible ) - { - BWPos.SetXY( rect.iTl.iX + iVolumeMute->SizeInPixels().iWidth + iSlowMotion->SizeInPixels().iWidth + symboldistance * 2, rect.iTl.iY ); - TRect clipRect( TPoint( 0, 0 ), iVolumeMute->SizeInPixels().AsPoint()); - gc.BitBltMasked( BWPos, iColour, clipRect, iColourMask, EFalse ); - } - } - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiPopup.cpp --- a/videditor/ManualVideoEditor/src/VeiPopup.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1029 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// System includes -#include -#include - - -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "VeiEditVideoView.h" -#include "manualvideoeditor.hrh" -#include "veipopup.h" -#include "veiaddqueue.h" -#include "veieditvideocontainer.h" -#include "videoeditorcommon.h" -#include "veiappui.h" - - -CVeiPopup* CVeiPopup::NewL( CVeiEditVideoView& aView ) - { - CVeiPopup* self = CVeiPopup::NewLC( aView ); - CleanupStack::Pop( self ); - return self; - } - -CVeiPopup* CVeiPopup::NewLC( CVeiEditVideoView& aView ) - { - CVeiPopup* self = new( ELeave )CVeiPopup( aView ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -CVeiPopup::CVeiPopup( CVeiEditVideoView& aView ): iView( aView ) -{ - -} - - -void CVeiPopup::ConstructL() - { - LOG( KVideoEditorLogFile, "CVeiPopup::ConstructL: in" ); - LOG( KVideoEditorLogFile, "CVeiPopup::ConstructL: out" ); - } - -CVeiPopup::~CVeiPopup() - { - LOG( KVideoEditorLogFile, "CVeiPopup::~CVeiPopup" ); - } - -TInt CVeiPopup::ExecutePopupListL( TInt aSoftkeysResourceId, - TInt aPopupTitleResourceId, - TInt aArrayResourceId, - TInt aTablesize, - TBool aDynPopup ) const - { - - // Create listbox and PUSH it. - CAknSinglePopupMenuStyleListBox* listBox = new( ELeave )CAknSinglePopupMenuStyleListBox; - CleanupStack::PushL( listBox ); - - // Create popup list and PUSH it. - CAknPopupList* popupList = CAknPopupList::NewL( listBox, aSoftkeysResourceId ); - CleanupStack::PushL( popupList ); - - // Set title for popup from defined resource. - HBufC* title = CCoeEnv::Static()->AllocReadResourceLC( aPopupTitleResourceId ); - popupList->SetTitleL( *title ); - CleanupStack::PopAndDestroy( title ); - - // initialize listbox. - listBox->ConstructL( popupList, EAknListBoxMenuList ); - - // Make listitems. and PUSH it - CDesCArrayFlat* items = CCoeEnv::Static()->ReadDesCArrayResourceL( aArrayResourceId ); - CleanupStack::PushL( items ); - - // Remove given index if at correct range. - - if ( aDynPopup ) - { - TInt i; - for ( i = aTablesize - 1; i >= 0; i-- ) - { - if ( 0 == RemoveArrayIndex[i] ) - { - items->Delete( i ); - } - } - } - else - { - if ( aTablesize >= 0 && aTablesize <= ( items->Count() - 1 )) - { - items->Delete( aTablesize ); - } - } - - - // Set listitems. - CTextListBoxModel* model = listBox->Model(); - model->SetItemTextArray( items ); - model->SetOwnershipType( ELbmOwnsItemArray ); - - CleanupStack::Pop( items ); // Pop effect items - - listBox->CreateScrollBarFrameL( ETrue ); - listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); - - TInt popOk = popupList->ExecuteLD(); - - TInt returnValue; - - if ( popOk ) - { - // Return selected item's index. - returnValue = listBox->CurrentItemIndex(); - } - else - { - returnValue = - 1; - } - - // Clenup and destroy. - CleanupStack::Pop( popupList ); - CleanupStack::PopAndDestroy( listBox ); - - return returnValue; - } - - -void CVeiPopup::ShowEndTransitionPopupListL() - { - TInt removeIndex; - // Which effect to remove from listbox. - switch ( iView.Movie()->EndTransitionEffect()) - { - case EVedEndTransitionEffectFadeToBlack: - removeIndex = 0; - break; - case EVedEndTransitionEffectFadeToWhite: - removeIndex = 1; - break; - case EVedEndTransitionEffectNone: - removeIndex = 2; - break; - default: - removeIndex = - 1; - break; - } - - TInt selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, - R_VEI_TRANSTION_POPUP_TITLE, - R_VEI_END_TRANSITION_LIST_BOX_ARRAY, - removeIndex, - EFalse ); - - switch ( selectedIndex ) - { - case 0: - { - if ( removeIndex == 0 ) - { - iView.Movie()->SetEndTransitionEffect( EVedEndTransitionEffectFadeToWhite ); - } - else - { - iView.Movie()->SetEndTransitionEffect( EVedEndTransitionEffectFadeToBlack ); - } - break; - } - case 1: - { - if ( removeIndex <= 1 ) - { - iView.Movie()->SetEndTransitionEffect( EVedEndTransitionEffectNone ); - } - else - { - iView.Movie()->SetEndTransitionEffect( EVedEndTransitionEffectFadeToWhite ); - } - break; - } - default: - break; - } - - } - -void CVeiPopup::ShowMiddleTransitionPopupListL() - { - TInt currentindex = iView.Container()->CurrentIndex() - 1; - TInt removeIndex; - switch ( iView.Movie()->MiddleTransitionEffect( currentindex )) - { - case EVedMiddleTransitionEffectWipeTopToBottom: - removeIndex = 0; - break; - case EVedMiddleTransitionEffectWipeBottomToTop: - removeIndex = 1; - break; - case EVedMiddleTransitionEffectWipeLeftToRight: - removeIndex = 2; - break; - case EVedMiddleTransitionEffectWipeRightToLeft: - removeIndex = 3; - break; - case EVedMiddleTransitionEffectCrossfade: - removeIndex = 4; - break; - case EVedMiddleTransitionEffectDipToBlack: - removeIndex = 5; - break; - case EVedMiddleTransitionEffectDipToWhite: - removeIndex = 6; - break; - case EVedMiddleTransitionEffectNone: - removeIndex = 7; - break; - default: - removeIndex = - 1; - break; - } - - TInt selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, - R_VEI_TRANSTION_POPUP_TITLE, - R_VEI_MIDDLE_TRANSITION_LIST_BOX_ARRAY, - removeIndex, - EFalse ); - - switch ( selectedIndex ) - { - case 0: - { - if ( removeIndex == 0 ) - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeBottomToTop, currentindex ); - } - else - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeTopToBottom, currentindex ); - } - break; - } - case 1: - { - if ( removeIndex <= 1 ) - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeLeftToRight, currentindex ); - } - else - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeBottomToTop, currentindex ); - } - break; - } - case 2: - { - if ( removeIndex <= 2 ) - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeRightToLeft, currentindex ); - } - else - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeLeftToRight, currentindex ); - } - break; - } - case 3: - { - if ( removeIndex <= 3 ) - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectCrossfade, currentindex ); - } - else - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeRightToLeft, currentindex ); - } - break; - } - case 4: - { - if ( removeIndex <= 4 ) - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectDipToBlack, currentindex ); - } - else - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectCrossfade, currentindex ); - } - break; - } - case 5: - { - if ( removeIndex <= 5 ) - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectDipToWhite, currentindex ); - } - else - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectDipToBlack, currentindex ); - } - break; - } - case 6: - { - if ( removeIndex <= 6 ) - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectNone, currentindex ); - } - else - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectDipToWhite, currentindex ); - } - break; - } - case 7: - { - if ( removeIndex <= 7 ) - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectWipeLeftToRight, currentindex ); - } - else - { - iView.Movie()->SetMiddleTransitionEffect( EVedMiddleTransitionEffectNone, currentindex ); - iView.Movie()->SetEndTransitionEffect( EVedEndTransitionEffectFadeToWhite ); - } - break; - } - default: - break; - } - - } - -void CVeiPopup::ShowStartTransitionPopupListL() - { - TInt removeIndex; - switch ( iView.Movie()->StartTransitionEffect()) - { - case EVedStartTransitionEffectFadeFromBlack: - removeIndex = 0; - break; - case EVedStartTransitionEffectFadeFromWhite: - removeIndex = 1; - break; - case EVedStartTransitionEffectNone: - removeIndex = 2; - break; - default: - removeIndex = - 1; - break; - } - - TInt selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, - R_VEI_TRANSTION_POPUP_TITLE, - R_VEI_START_TRANSITION_LIST_BOX_ARRAY, - removeIndex, - EFalse ); - - switch ( selectedIndex ) - { - case 0: - { - if ( removeIndex == 0 ) - { - iView.Movie()->SetStartTransitionEffect( EVedStartTransitionEffectFadeFromWhite ); - } - else - { - iView.Movie()->SetStartTransitionEffect( EVedStartTransitionEffectFadeFromBlack ); - } - break; - } - case 1: - { - if ( removeIndex <= 1 ) - { - iView.Movie()->SetStartTransitionEffect( EVedStartTransitionEffectNone ); - } - else - { - iView.Movie()->SetStartTransitionEffect( EVedStartTransitionEffectFadeFromWhite ); - } - break; - } - default: - break; - } - - } - -void CVeiPopup::ShowInsertAudioPopupList() - { - TInt selectedIndex; // Selected item's index in popup list. - TInt removeIndex; // Index to remove from list. - - removeIndex = - 1; // -1 = Nothing to remove from list array. - - selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, - R_VEI_POPUP_INSERT_AUDIO_TITLE, - R_VEI_INSERT_AUDIO_LIST_BOX_ARRAY, - removeIndex, - EFalse ); - - switch ( selectedIndex ) - { - /** - * Sound clip - */ - case 0: - iView.HandleCommandL( EVeiCmdEditVideoViewInsertAudio ); - break; - /** - * New sound clip - */ - case 1: - iView.InsertNewAudio(); - break; - default: - break; - } - - } - -/* -Show popup list when cursor is on empty video track. -Video, text, image etc.. - */ - -void CVeiPopup::ShowInsertStuffPopupList() - { - TInt selectedIndex; // Selected item's index in popup list. - TInt removeIndex; // Index to remove from list. - - removeIndex = - 1; // -1 = Nothing to remove from list array. - - selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, - R_VEI_POPUP_INSERT_STUFF_TITLE, - R_VEI_INSERT_STUFF_LIST_BOX_ARRAY, - removeIndex, - EFalse ); - - switch ( selectedIndex ) - { - /** - * Video clip - */ - case 0: - iView.HandleCommandL( EVeiCmdEditVideoViewInsertVideo ); - break; - /** - INSERT IMAGE - */ - case 1: - iView.HandleCommandL( EVeiCmdEditVideoViewInsertImage ); - break; - /** - INSERT Text - */ - case 2: - ShowInsertTextPopupList(); - break; - default: - break; - } - - } - -/* -Show popup list when cursor is on empty video track. -Video, text, image etc.. - */ - - -void CVeiPopup::ShowInsertTextPopupList() - { - TInt selectedIndex; // Selected item's index in popup list. - TInt removeIndex; // Index to remove from list. - - removeIndex = - 1; // -1 = Nothing to remove from list array. - - selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, - R_VEI_POPUP_INSERT_STUFF_TITLE, - R_VEI_INSERT_TEXT_LIST_BOX_ARRAY, - removeIndex, - EFalse ); - - switch ( selectedIndex ) - { - case 0: - iView.HandleCommandL( EVeiCmdEditVideoViewInsertTextTitle ); - break; - case 1: - iView.HandleCommandL( EVeiCmdEditVideoViewInsertTextTitleFading ); - break; - case 2: - iView.HandleCommandL( EVeiCmdEditVideoViewInsertTextSubTitle ); - break; - case 3: - iView.HandleCommandL( EVeiCmdEditVideoViewInsertTextSubTitleFading ); - break; - case 4: - iView.HandleCommandL( EVeiCmdEditVideoViewInsertTextCredits ); - break; - default: - break; - } - } - -void CVeiPopup::ShowEffectSelectionPopupListL() - { - TInt currentIndex = iView.Container()->CurrentIndex(); - TInt removeIndex; - - // Which effect to remove from listbox. - switch ( iView.Movie()->VideoClipColorEffect( currentIndex )) - { - case EVedColorEffectBlackAndWhite: - removeIndex = 0; // blackandwhite removed from list - break; - /*case EVedColorEffectToning: // some other color must be able to be chosen still - removeIndex = 1; - break; - */ - case EVedColorEffectNone: - removeIndex = 2; - break; - default: - removeIndex = - 1; // Remove nothing from array. - break; - } - - - /* - array indexes: - qtn_vei_list_query_select_effect_black_white; - qtn_vei_list_query_select_effect_colour; - qtn_vei_list_query_select_effect_no_effect; - - */ - - // Execute popup list with proper parameters. - TInt selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, - R_VEI_POPUP_SELECT_EFFECT_TITLE, - R_VEI_EFFECT_LIST_BOX_ARRAY, // order: bw, col, no effect - removeIndex, - EFalse ); - switch ( selectedIndex ) - { - case 0: - // blackandwhite - { - if ( removeIndex == 0 ) - // current effect blackandwhite -> colour chosen - { - TRgb color; - if ( !ShowColorSelectorL( color )) - { - break; - } - - iView.Movie()->VideoClipSetColorTone( currentIndex, color ); - iView.Movie()->VideoClipSetColorEffect( currentIndex, EVedColorEffectToning ); - } - else - { - iView.Movie()->VideoClipSetColorEffect( currentIndex, EVedColorEffectBlackAndWhite ); - } - break; - } - case 1: - // colour - { - if ( removeIndex == 0 ) - // // current effect blackandwhite -> no effect chosen - { - iView.Movie()->VideoClipSetColorEffect( currentIndex, EVedColorEffectNone ); - } - else - { - // current event none - TRgb color; - - if ( !ShowColorSelectorL( color )) - { - break; - } - - // TInt R_ct = color.Red(); - // TInt G_ct = color.Green(); - // TInt B_ct = color.Blue(); - - iView.Movie()->VideoClipSetColorTone( currentIndex, color ); - iView.Movie()->VideoClipSetColorEffect( currentIndex, EVedColorEffectToning ); - - // TRgb toning = iView.Movie()->VideoClipColorTone(currentIndex); - // R_ct = toning.Red(); - // G_ct = toning.Green(); - // B_ct = toning.Blue(); - } - break; - } - case 2: - // no effect - { - iView.Movie()->VideoClipSetColorEffect( currentIndex, EVedColorEffectNone ); - break; - } - default: - break; - } - - } - -void CVeiPopup::ShowEditTextPopupList() - { - TInt selectedIndex = - 1; // Selected item's index in popup list. - TInt listSelection = - 1; // -1 = Nothing to remove from list array. - TInt removeIndex = - 1; // -1 = Nothing to remove from list array. - - TBool oneclip = EFalse; - - if ( iView.Movie()->VideoClipCount() <= 1 ) - { - removeIndex = 0; - oneclip = ETrue; - } - - selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, R_VEI_POPUP_EDIT_TEXT_TITLE, R_VEI_EDIT_TEXT_LIST_BOX_ARRAY, removeIndex, EFalse ); - - listSelection = selectedIndex; - - if ( selectedIndex >= 0 ) - { - if ( oneclip ) - { - listSelection++; - } - } - - switch ( listSelection ) - { - case 0: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextMove ); - break; - case 1: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextRemove ); - break; - case 2: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextChangeDuration ); - break; - case 3: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextChangeText ); - break; - case 4: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextSetTextColor ); - break; - case 5: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextSetBackGround ); - break; - case 6: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextAddColorEffect ); - break; - case 7: - ShowEditTextStylePopUpList(); - break; - case 8: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextDuplicate ); - break; - default: - break; - } - - } - -void CVeiPopup::ShowEditTextStylePopUpList() - { - - TInt selectedIndex; // Selected item's index in popup list. - TInt removeIndex; // Index to remove from list. - - removeIndex = - 1; // -1 = Nothing to remove from list array. - - selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, R_VEI_POPUP_EDIT_TEXT_TITLE, R_VEI_INSERT_TEXT_LIST_BOX_ARRAY, removeIndex, EFalse ); - - switch ( selectedIndex ) - { - case 0: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextStyleTitle ); - break; - case 1: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextStyleTitleFading ); - break; - case 2: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextStyleSubTitle ); - break; - case 3: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextStyleSubTitleFading ); - break; - case 4: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextStyleCredit ); - break; - default: - break; - } - - } - -void CVeiPopup::ShowEditVideoPopupList() - { - - TInt originalIndex = - 1; - // Selected item's index in original list (read from resource file) - TInt dynamicIndex = - 1; - // Selected item's index in dynamic list (where some items in original list may be removed) - - // by default, all items are included in list (all are 1s) - for ( TInt i = 0; i < KAmountOfMenuItems; i++ ) - { - RemoveArrayIndex[i] = 1; - } - - // next some items are possibly removed from the list (by marking their index with '0's) - // the reference order MUST be the same what it is in the original list in .rss - - // menu item "Cut" removed - TTimeIntervalMicroSeconds duration = iView.Movie()->VideoClipInfo( iView.Container()->CurrentIndex())->Duration(); - if ( duration.Int64() < KMinCutVideoLength ) - { - RemoveArrayIndex[0] = 0; - } - // menu item "Move" removed - if ( iView.Movie()->VideoClipCount() <= 1 ) - { - RemoveArrayIndex[1] = 0; - } - - // menu items "Mute" and "Unmute" removed - if ( EFalse == iView.Movie()->VideoClipIsMuteable( iView.Container()->CurrentIndex())) - { - RemoveArrayIndex[4] = 0; - RemoveArrayIndex[5] = 0; - } - else - { - // menu item "Mute" removed - if ( iView.Movie()->VideoClipIsMuted( iView.Container()->CurrentIndex()) ) - { - RemoveArrayIndex[4] = 0; - } - // menu item "Unmute" removed - else - { - RemoveArrayIndex[5] = 0; - } - } - - if ( !( iView.Movie()->VideoClipInfo( iView.Container()->CurrentIndex()))->HasAudio()) - { - RemoveArrayIndex[6] = 0; //EVeiCmdEditVideoAdjustVolume); - } - - - dynamicIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, R_VEI_POPUP_EDIT_VIDEO_TITLE, R_VEI_EDIT_VIDEO_LIST_BOX_ARRAY, KAmountOfMenuItems, ETrue ); - - if ( dynamicIndex < 0 ) - { - return ; - } - - // next find out what was the selected item in the original list - // i.e. count 1's until dynamicIndex reached - TInt cnt = - 1; - for ( TInt i = 0; i < KAmountOfMenuItems; i++ ) - { - if ( 1 == RemoveArrayIndex[i] ) - { - cnt++; - if ( dynamicIndex == cnt ) - { - originalIndex = i; - break; - } - } - } - - switch ( originalIndex ) - { - case 0: - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoCutting ); - break; - case 1: - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoMove ); - break; - case 2: - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoColorEffect ); - break; - case 3: - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoSlowMotion ); - break; - case 4: - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoMute ); - break; - case 5: - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoUnmute ); - break; - case 6: - iView.HandleCommandL( EVeiCmdEditVideoAdjustVolume ); - break; - case 7: - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoRemove ); - break; - case 8: - iView.HandleCommandL( EVeiCmdEditVideoDuplicate ); - break; - default: - break; - } - } - -void CVeiPopup::ShowEditImagePopupList() - { - TInt selectedIndex = - 1; // Selected item's index in popup list. - TInt listSelection = - 1; // -1 = Nothing to remove from list array. - TInt removeIndex = - 1; // -1 = Nothing to remove from list array. - - TBool oneclip = EFalse; - - if ( iView.Movie()->VideoClipCount() <= 1 ) - { - removeIndex = 0; - oneclip = ETrue; - } - - - selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, R_VEI_POPUP_EDIT_IMAGE_TITLE, R_VEI_EDIT_IMAGE_LIST_BOX_ARRAY, removeIndex, EFalse ); - - listSelection = selectedIndex; - - if ( selectedIndex >= 0 ) - { - if ( oneclip ) - { - listSelection++; - } - } - - switch ( listSelection ) - { - case 0: - iView.HandleCommandL( EVeiCmdEditVideoViewEditImageMove ); - break; - case 1: - iView.HandleCommandL( EVeiCmdEditVideoViewEditImageRemove ); - break; - case 2: - iView.HandleCommandL( EVeiCmdEditVideoViewEditImageChangeDuration ); - break; - case 3: - iView.HandleCommandL( EVeiCmdEditVideoViewEditImageBackGround ); - break; - case 4: - iView.HandleCommandL( EVeiCmdEditVideoViewEditImageAddColorEffect ); - break; - case 5: - iView.HandleCommandL( EVeiCmdEditVideoViewEditImageDuplicate ); - break; - default: - break; - } - - } - -TInt CVeiPopup::ShowTitleScreenBackgroundSelectionPopupL( TBool& aImageSelected )const - { - TInt selectedItem( - 1 ); - CAknListQueryDialog* query = new( ELeave )CAknListQueryDialog( &selectedItem ); - query->PrepareLC( R_VEI_TITLESCREEN_BACKGROUND_LIST_QUERY ); - if ( !query->RunLD()) - { - return KErrCancel; - } - - if ( selectedItem == 0 ) - { - aImageSelected = ETrue; - } - else - { - aImageSelected = EFalse; - } - - return KErrNone; - - } - -void CVeiPopup::ShowTitleScreenStyleSelectionPopupL() - { - TInt selectedIndex; // Selected item's index in popup list. - TInt removeIndex; // Index to remove from list. - - removeIndex = - 1; // -1 = Nothing to remove from list array. - - selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, R_VEI_POPUP_SELECT_TEXT_STYLE_TITLE, R_VEI_INSERT_TEXT_LIST_BOX_ARRAY, removeIndex, EFalse ); - - switch ( selectedIndex ) - { - case 0: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextStyleTitle ); - break; - case 1: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextStyleTitleFading ); - break; - case 2: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextStyleSubTitle ); - break; - case 3: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextStyleSubTitleFading ); - break; - case 4: - iView.HandleCommandL( EVeiCmdEditVideoViewEditTextStyleCredit ); - break; - default: - break; - } - - } - -void CVeiPopup::ShowEditAudioPopupList() - { - TInt selectedIndex; // Selected item's index in popup list. - TInt removeIndex; // Index to remove from list. - - removeIndex = - 1; // -1 = Nothing to remove from list array. - - selectedIndex = ExecutePopupListL( R_AVKON_SOFTKEYS_SELECT_CANCEL, R_VEI_POPUP_EDIT_AUDIO_TITLE, R_VEI_EDIT_AUDIO_LIST_BOX_ARRAY, removeIndex, EFalse ); - - switch ( selectedIndex ) - { - case 0: - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoCutting ); - break; - case 1: - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoMove ); - break; - case 2: - iView.HandleCommandL( EVeiCmdEditVideoViewEditAudioSetDuration ); - break; - case 3: - iView.HandleCommandL( EVeiCmdEditVideoAdjustVolume ); - break; - case 4: - iView.HandleCommandL( EVeiCmdEditVideoViewEditVideoRemove ); - break; - case 5: - iView.HandleCommandL( EVeiCmdEditVideoDuplicate ); - break; - default: - break; - } - - } - -TBool CVeiPopup::ShowColorSelectorL( TRgb& aColor )const - { - TBool noneChosen = EFalse; - /* None color option: True/False */ - - - TBool noneExist = EFalse; - - CArrayFixFlat < TRgb > * colors = new( ELeave )CArrayFixFlat < TRgb > ( 16 ); - CleanupStack::PushL( colors ); - - colors->AppendL( TRgb( 0xffffff )); - colors->AppendL( TRgb( 0xcccccc )); - colors->AppendL( TRgb( 0x4d4d4d )); - colors->AppendL( TRgb( 0x000000 )); - colors->AppendL( TRgb( 0x00ffff )); - colors->AppendL( TRgb( 0x44d8ff )); - colors->AppendL( TRgb( 0x0268ff )); - colors->AppendL( TRgb( 0x001ef1 )); - colors->AppendL( TRgb( 0x00ffb9 )); - colors->AppendL( TRgb( 0x00c873 )); - colors->AppendL( TRgb( 0x026c3e )); - colors->AppendL( TRgb( 0x0017c8 )); - colors->AppendL( TRgb( 0xe7be7a )); - colors->AppendL( TRgb( 0xff9b00 )); - colors->AppendL( TRgb( 0xb36718 )); - colors->AppendL( TRgb( 0x803e00 )); - - - CAknColourSelectionGrid* d = CAknColourSelectionGrid::NewL( colors, noneExist, noneChosen, aColor ); - TBool selected = d->ExecuteLD(); - CleanupStack::PopAndDestroy( colors ); - - //return !noneChosen; - return selected; - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiSettingItemList.cpp --- a/videditor/ManualVideoEditor/src/VeiSettingItemList.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "FilenameSettingItem.h" -#include "manualvideoeditor.hrh" // For setting item ids -#include "VeiSettingItemList.h" - -#include -#include - -CVeiSettingItemList::CVeiSettingItemList( TVeiSettings& aSettings ): iSettings( aSettings ) -{} - -CVeiSettingItemList::~CVeiSettingItemList() -{} - -/** - * Called by framework when the view size is changed. Resizes the - * setting list accordingly. - */ -void CVeiSettingItemList::SizeChanged() - { - if ( ListBox()) - { - ListBox()->SetRect( Rect()); - } - } - -/** - * - * - */ -CAknSettingItem* CVeiSettingItemList::CreateSettingItemL( TInt aSettingId ) - { - CAknSettingItem* settingItem = NULL; - - switch ( aSettingId ) - { - /** - * Default video name - */ - case EVeiVideoNameSettingItem: - settingItem = new( ELeave )CFileNameSettingItem( aSettingId, iSettings.DefaultVideoName(), R_VEI_ILLEGAL_FILENAME, R_VEI_UNSUITABLE_FILENAME ); - break; - /** - * Default snapshot name - */ - case EVeiSnapshotNameSettingItem: - settingItem = new( ELeave )CFileNameSettingItem( aSettingId, iSettings.DefaultSnapshotName(), R_VEI_ILLEGAL_FILENAME, R_VEI_UNSUITABLE_FILENAME ); - break; - /** - * Save quality - */ - case EVeiSaveQualitySettingItem: - settingItem = new( ELeave )CAknEnumeratedTextPopupSettingItem( aSettingId, iSettings.SaveQuality()); - break; - /** - * Memory in use - */ - case EVeiMemoryInUseSettingItem: - settingItem = new( ELeave )CAknMemorySelectionSettingItem( aSettingId, iSettings.MemoryInUse()); - break; - /** - * Default - */ - default: - // Panic the aplication if all setting items defined in rss - // are not constructed - User::Panic( _L( "CVeiSettingItemList" ), KErrNotFound ); - break; - } - // Return constructed item and transfer the ownership to base class. - return settingItem; - } - -/** - * - * - */ -void CVeiSettingItemList::ChangeFocusedItemL() - { - EditItemL( ListBox()->CurrentItemIndex(), ETrue ); - } - -/** - * - * - */ -void CVeiSettingItemList::EditItemL( TInt aIndex, TBool aCalledFromMenu ) - { - CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); - ( *SettingItemArray())[aIndex]->StoreL(); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiSettingsContainer.cpp --- a/videditor/ManualVideoEditor/src/VeiSettingsContainer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDES -// System includes -#include -// User includes -#include "VeiSettingsContainer.h" -#include "VeiSettingItemList.h" -#include "VideoEditorCommon.h" // Help (application) UID -#include "VideoEditorHelp.hlp.hrh" // Topic context (literal) -#include "VideoEditorDebugUtils.h" - - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CVeiSettingsContainer::ConstructL(const TRect& aRect) -// EPOC two phased constructor -// --------------------------------------------------------- -// -void CVeiSettingsContainer::ConstructL( const TRect& aRect, TVeiSettings& aSettings ) - { - CreateWindowL(); - SetRect( aRect ); - - iSettingItemList = new( ELeave )CVeiSettingItemList( aSettings ); - iSettingItemList->SetMopParent( this ); - iSettingItemList->ConstructFromResourceL( R_VEI_SETTING_ITEM_LIST ); - - - ActivateL(); - } - -// Destructor -CVeiSettingsContainer::~CVeiSettingsContainer() - { - delete iSettingItemList; - } - -// --------------------------------------------------------- -// CVeiSettingsContainer::CountComponentControls() const -// return nbr of controls inside this container -// --------------------------------------------------------- -// -TInt CVeiSettingsContainer::CountComponentControls()const - { - return 1; - } - -// --------------------------------------------------------- -// CVeiSettingsContainer::ComponentControl(TInt aIndex) const -// --------------------------------------------------------- -// -CCoeControl* CVeiSettingsContainer::ComponentControl( TInt aIndex )const - { - switch ( aIndex ) - { - case 0: - return iSettingItemList; - default: - return NULL; - } - } - -// ---------------------------------------------------------------------------- -// CVeiSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const -// -// -// ---------------------------------------------------------------------------- -// -void CVeiSettingsContainer::GetHelpContext( TCoeHelpContext& aContext )const - { - // Set UID of the CS Help file (same as application UID). - aContext.iMajor = KUidVideoEditor; - - // Set the context. - aContext.iContext = KVED_HLP_SETTINGS_VIEW; - } - - -void CVeiSettingsContainer::ChangeFocusedItemL() - { - if ( iSettingItemList ) - { - iSettingItemList->ChangeFocusedItemL(); - } - } - - -// --------------------------------------------------------- -// CVeiSettingsContainer::OfferKeyEventL( -// const TKeyEvent& aKeyEvent,TEventCode aType ) -// --------------------------------------------------------- -// - -TKeyResponse CVeiSettingsContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) - { - if ( iSettingItemList ) - { - return iSettingItemList->OfferKeyEventL( aKeyEvent, aType ); - } - else - { - return EKeyWasNotConsumed; - } - } - -void CVeiSettingsContainer::HandleResourceChange( TInt aType ) - { - LOGFMT( KVideoEditorLogFile, "CVeiSettingsContainer::HandleResourceChange() In, aType:%d", aType ); - - if ( aType == KEikDynamicLayoutVariantSwitch && OwnsWindow()) - { - LOG( KVideoEditorLogFile, "CVeiSettingsContainer::HandleResourceChange() 1" ); - TRect rect; - - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect ); - LOGFMT4( KVideoEditorLogFile, "CVeiSettingsContainer::HandleResourceChange(): 2, (%d,%d),(%d,%d)", rect.iTl.iX, rect.iTl.iY, rect.iBr.iX, rect.iBr.iY ); - SetRect( rect ); - } - iSettingItemList->DrawNow(); - CCoeControl::HandleResourceChange( aType ); - - LOG( KVideoEditorLogFile, "CVeiSettingsContainer::HandleResourceChange() Out" ); - } - - - -void CVeiSettingsContainer::SizeChanged() - { - LOG( KVideoEditorLogFile, "CVeiSettingsContainer::SizeChanged(): In" ); - //TRect rect( Rect() ); - TRect rect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect ); - - LOGFMT4( KVideoEditorLogFile, "CVeiSettingsContainer::SizeChanged(): 1, (%d,%d),(%d,%d)", rect.iTl.iX, rect.iTl.iY, rect.iBr.iX, rect.iBr.iY ); - - LOG( KVideoEditorLogFile, "CVeiSettingsContainer::SizeChanged(): 2" ); - if ( iSettingItemList ) - { - LOG( KVideoEditorLogFile, "CVeiSettingsContainer::SizeChanged(): 3" ); - iSettingItemList->SetRect( rect ); - } - LOG( KVideoEditorLogFile, "CVeiSettingsContainer::SizeChanged(): Out" ); - } - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiSettingsView.cpp --- a/videditor/ManualVideoEditor/src/VeiSettingsView.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "Manualvideoeditor.hrh" -#include "VeiSettingsView.h" -#include "VeiSettingsContainer.h" -#include "VeiApp.h" -#include "VeiAppUi.h" - - - -// ================= MEMBER FUNCTIONS ======================= - -CVeiSettingsView* CVeiSettingsView::NewL() - { - CVeiSettingsView* self = CVeiSettingsView::NewLC(); - CleanupStack::Pop( self ); - - return self; - } - - -CVeiSettingsView* CVeiSettingsView::NewLC() - { - CVeiSettingsView* self = new( ELeave )CVeiSettingsView(); - CleanupStack::PushL( self ); - self->ConstructL(); - - return self; - } - - -// --------------------------------------------------------- -// CVeiSettingsView::ConstructL(const TRect& aRect) -// EPOC two-phased constructor -// --------------------------------------------------------- -// -void CVeiSettingsView::ConstructL() - { - BaseConstructL( R_VEI_SETTINGS_VIEW ); - } - - -CVeiSettingsView::CVeiSettingsView() - { - } - -// --------------------------------------------------------- -// CVeiSettingsView::~CVeiSettingsView() -// Destructor -// --------------------------------------------------------- -// -CVeiSettingsView::~CVeiSettingsView() - { - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - } - - delete iContainer; - } - -// --------------------------------------------------------- -// TUid CVeiSettingsView::Id() -// Returns settings view UID -// --------------------------------------------------------- -// -TUid CVeiSettingsView::Id()const - { - return TUid::Uid( EVeiSettingsView ); - } - -// --------------------------------------------------------- -// CVeiSettingsView::HandleCommandL(TInt aCommand) -// --------------------------------------------------------- -// -void CVeiSettingsView::HandleCommandL( TInt aCommand ) - { - switch ( aCommand ) - { - /** - * Back - */ - case EAknSoftkeyBack: - // Do not force - // the settings view into portrait, even though it contains text input. - //AppUi()->SetOrientationL( iOriginalOrientation ); - STATIC_CAST( CVeiAppUi* , AppUi())->WriteSettingsL( iSettings ); - // Activate Edit Video view - AppUi()->ActivateLocalViewL( TUid::Uid( EVeiEditVideoView )); - break; - /** - * Change - */ - case EVeiCmdSettingsViewChange: - iContainer->ChangeFocusedItemL(); // Start editing the focused item. - break; - /** - * Help - */ - case EVeiCmdSettingsViewHelp: - AppUi()->HandleCommandL( EVeiCmdSettingsViewHelp ); - break; - /** - * Exit - */ - case EEikCmdExit: - STATIC_CAST( CVeiAppUi* , AppUi())->WriteSettingsL( iSettings ); - AppUi()->HandleCommandL( EEikCmdExit ); - break; - default: - AppUi()->HandleCommandL( aCommand ); - break; - } - } - -// --------------------------------------------------------- -// CVeiSettingsView::HandleClientRectChange() -// --------------------------------------------------------- -// -void CVeiSettingsView::HandleClientRectChange() - { - if ( iContainer ) - { - iContainer->SetRect( ClientRect()); - } - - } - -// --------------------------------------------------------- -// CVeiSettingsView::DoActivateL(...) -// --------------------------------------------------------- -// -void CVeiSettingsView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, - TUid /*aCustomMessageId*/, - const TDesC8& /*aCustomMessage*/ ) - { - // do not force the settings view into portrait, - // even though it contains text input. - // iOriginalOrientation = AppUi()->Orientation(); - //AppUi()->SetOrientationL( CAknAppUiBase::EAppUiOrientationPortrait ); - - if ( !iContainer ) - { - STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( iSettings ); - // Read da settings. - - iContainer = new( ELeave )CVeiSettingsContainer; - iContainer->SetMopParent( this ); - iContainer->ConstructL( AppUi()->ClientRect(), iSettings ); - AppUi()->AddToStackL( *this, iContainer ); - } - - CEikStatusPane* statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane(); - - CAknTitlePane* titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle )); - TResourceReader reader1; - iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_SETTINGS_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader1 ); - CleanupStack::PopAndDestroy(); //reader1 - } - -// --------------------------------------------------------- -// CVeiSettingsView::DoDeactivate() -// --------------------------------------------------------- -// -void CVeiSettingsView::DoDeactivate() - { - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - } - - delete iContainer; - iContainer = NULL; - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiTrimForMmsContainer.cpp --- a/videditor/ManualVideoEditor/src/VeiTrimForMmsContainer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,958 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES -// System includes -#include // AknIconUtils -#include // iEikonEnv -#include // Video Editor resources -#include // StringLoader - -#include -#include - -#include -#include -#include - -#include -#include -#include - - -// User includes -#include "VeiTrimForMmsContainer.h" -#include "VeiVideoDisplay.h" -#include "VideoEditorCommon.h" -#include "VideoEditorHelp.hlp.hrh" // Topic contexts (literals) -#include "veiframetaker.h" -#include "VeiTrimForMmsView.h" -#include "VeiCutterBar.h" -#include "VeiVideoEditorSettings.h" -#include "VideoEditorUtils.h" -#include "VideoEditorDebugUtils.h" - -void CVeiTrimForMmsContainer::DialogDismissedL( TInt /*aButtonId*/ ) - { - iProgressInfo = NULL; - } - - -CVeiTrimForMmsContainer* CVeiTrimForMmsContainer::NewL( const TRect& aRect, - CVedMovie& aMovie, - CVeiTrimForMmsView& aView ) - { - CVeiTrimForMmsContainer* self = CVeiTrimForMmsContainer::NewLC( aRect, aMovie, aView ); - CleanupStack::Pop( self ); - - return self; - } - -CVeiTrimForMmsContainer* CVeiTrimForMmsContainer::NewLC( const TRect& aRect, - CVedMovie& aMovie, - CVeiTrimForMmsView& aView ) - { - CVeiTrimForMmsContainer* self = new( ELeave )CVeiTrimForMmsContainer( aMovie, aView ); - - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - - return self; - } - - -CVeiTrimForMmsContainer::CVeiTrimForMmsContainer( CVedMovie& aMovie, CVeiTrimForMmsView& aView ): - iLastKeyLeftOrRight( EFalse ), iMovie( aMovie ), iView( aView ) - -{} - - -void CVeiTrimForMmsContainer::ConstructL( const TRect& aRect ) - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::ConstructL: in" ); - - // Make this compound control window-owning. - CreateWindowL(); - - iMovie.RegisterMovieObserverL( this ); - - // Read the texts shown above the thumbnails from resources - iStartText = StringLoader::LoadL( R_VED_THUMBNAIL_START_TEXT, iEikonEnv ); - iEndText = StringLoader::LoadL( R_VED_THUMBNAIL_END_TEXT, iEikonEnv ); - - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - iVideoDisplayStart = CVeiVideoDisplay::NewL( iVideoDisplayStartRect, this, *this ); - - iVideoDisplayEnd = CVeiVideoDisplay::NewL( iVideoDisplayEndRect, this, * this ); - - iCutterBar = CVeiCutterBar::NewL( this ); - iCutterBar->SetPlayHeadVisible( EFalse ); - iVideoDisplay = CVeiVideoDisplay::NewL( aRect, this, * this ); - - iFrameTaker = CVeiFrameTaker::NewL( *this ); - - /* Timer to keep back light on when user is not giving key events */ - iScreenLight = CVeiDisplayLighter::NewL(); - CVeiVideoEditorSettings::GetMaxMmsSizeL( iMaxMmsSize ); - /* SharedData returns maxmmssize in kbytes. Change it to bytes(1000) and - add some margin to final value.*/ - iMaxMmsSize = STATIC_CAST( TInt, iMaxMmsSize* 0.98 ); - iBlack = EFalse; - - // Set this control extent. - SetRect( aRect ); - iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse ); - - ActivateL(); - - iKeyEnable = EFalse; - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::ConstructL: out" ); - } - - - -CVeiTrimForMmsContainer::~CVeiTrimForMmsContainer() - { - iMovie.UnregisterMovieObserver( this ); - - delete iEndText; - delete iStartText; - delete iScreenLight; - - delete iCutterBar; - - delete iVideoDisplayStart; - delete iVideoDisplayEnd; - if ( iVideoDisplay ) - { - delete iVideoDisplay; - iVideoDisplay = NULL; - } - - if ( iFrameTaker ) - { - delete iFrameTaker; - iFrameTaker = NULL; - } - - if ( iProgressNote ) - { - delete iProgressNote; - iProgressNote = NULL; - } - iProgressInfo = NULL; - - delete iBgContext; - } - -void CVeiTrimForMmsContainer::SetMaxMmsSize( TInt aMaxSizeInBytes ) - { - iMaxMmsSize = aMaxSizeInBytes; - } - -const TTimeIntervalMicroSeconds& CVeiTrimForMmsContainer::CutInTime()const - { - return iSeekPos; - } - - -const TTimeIntervalMicroSeconds& CVeiTrimForMmsContainer::CutOutTime()const - { - return iSeekEndPos; - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsContainer::ComponentControl(...) const -// -// Gets the specified component of a compound control. -// ---------------------------------------------------------------------------- -// -CCoeControl* CVeiTrimForMmsContainer::ComponentControl( TInt aIndex )const - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::ComponentControl()" ); - - switch ( aIndex ) - { - // - // iCutterDisplay - // - case ECutFrame: - { - return iCutterBar; - } - // - // iVideoDisplayStart - // - case EVideoDisplayStart: - { - return iVideoDisplayStart; - } - // - // iVideoDisplayEnd - // - case EVideoDisplayEnd: - { - return iVideoDisplayEnd; - } - // - // iVideoDisplay - // - case EVideoPreview: - { - return iVideoDisplay; - } - // - // Default - // - default: - { - return NULL; - } - } - - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsContainer::CountComponentControls() const -// -// Gets the number of controls contained in a compound control. -// ---------------------------------------------------------------------------- -// -TInt CVeiTrimForMmsContainer::CountComponentControls()const - { - return ENumberOfControls; - } - - -void CVeiTrimForMmsContainer::Draw( const TRect& aRect )const - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::Draw(): In" ); - - CWindowGc& gc = SystemGc(); - gc.Clear( aRect ); - - // Black backbround for the preview - if ( iBlack ) - { - iVideoDisplay->MakeVisible( EFalse ); - gc.SetPenStyle( CWindowGc::ENullPen ); - gc.SetBrushColor( KRgbBlack ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.DrawRect( aRect ); - gc.SetPenStyle( CWindowGc::ESolidPen ); - gc.DrawRoundRect( aRect, TSize( 4, 4 )); - return ; - } - else - { - // Draw skin background - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - AknsDrawUtils::Background( skin, cc, this, gc, aRect ); - - // Get text color from skin - TRgb textColor( KRgbBlack ); - AknsUtils::GetCachedColor( skin, textColor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); - gc.SetPenColor( textColor ); - - const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - TBuf < 95 > startVisualText; - TPoint startTextPoint; - TBuf < 95 > endVisualText; - TPoint endTextPoint; - - startTextPoint.iY = iStartTextBox.iTl.iY + font->HeightInPixels(); - endTextPoint.iY = iEndTextBox.iTl.iY + font->HeightInPixels(); - - gc.UseFont( font ); - - TBidiText::TDirectionality textDirectionality; - - textDirectionality = AknTextUtils::CurrentScriptDirectionality(); - - TInt maxWidthNonClippingStart = iStartTextBox.Width(); - - AknBidiTextUtils::ConvertToVisualAndClip( *iStartText, - startVisualText, - *font, - maxWidthNonClippingStart, - maxWidthNonClippingStart ); - /** check text alignment */ - if ( textDirectionality == TBidiText::ELeftToRight ) - { - startTextPoint.iX = iVideoDisplayStartRect.iTl.iX; - } - else - { - startTextPoint.iX = iVideoDisplayStartRect.iBr.iX - font->TextWidthInPixels( startVisualText ); - } - - gc.DrawText( startVisualText, startTextPoint ); - - - TInt maxWidthNonClippingEnd = iEndTextBox.Width(); - - AknBidiTextUtils::ConvertToVisualAndClip( *iEndText, - endVisualText, - *font, - maxWidthNonClippingEnd, - maxWidthNonClippingEnd ); - /** check text alignment */ - if ( textDirectionality == TBidiText::ELeftToRight ) - { - endTextPoint.iX = iVideoDisplayEndRect.iTl.iX; - } - else - { - endTextPoint.iX = iVideoDisplayEndRect.iBr.iX - font->TextWidthInPixels( endVisualText ); - } - - gc.DrawText( endVisualText, endTextPoint ); - - gc.DiscardFont(); - - // Draw Start/End displays - iVideoDisplayStart->SetRect( iVideoDisplayStartRect ); - iVideoDisplayEnd->SetRect( iVideoDisplayEndRect ); - - if ( iPreviewState == EPlaying ) - { - iVideoDisplay->MakeVisible( ETrue ); - } - else - { - iVideoDisplay->MakeVisible( EFalse ); - } - - } - - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::Draw(): Out" ); - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsContainer::GetHelpContext(...) const -// -// Gets the control's help context. Associates the control with a particular -// Help file and topic in a context sensitive application. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsContainer::GetHelpContext( TCoeHelpContext& aContext )const - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::GetHelpContext(): In" ); - - // Set UID of the CS Help file (same as application UID). - aContext.iMajor = KUidVideoEditor; - - // Set the context/topic. - aContext.iContext = KVED_HLP_TRIM_FOR_MMS_VIEW; - - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::GetHelpContext(): Out" ); - } - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsContainer::SizeChanged() -// -// The function is called whenever SetExtent(), SetSize(), SetRect(), -// SetCornerAndSize(), or SetExtentToWholeScreen() are called on the control. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsContainer::SizeChanged() - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::SizeChanged(): In" ); - - TRect rect = Rect(); - if ( iBgContext ) - { - iBgContext->SetRect( rect ); - } - - if ( VideoEditorUtils::IsLandscapeScreenOrientation()) - //Landscape - { - // Start Text rect - TInt startTextTlX = STATIC_CAST( TInt, rect.iBr.iX* 0.00962 ); - TInt startTextTlY = STATIC_CAST( TInt, rect.iBr.iY* 0.01389 ); - TInt startTextBrX = STATIC_CAST( TInt, rect.iBr.iX* 0.49512 ); - TInt startTextBrY = STATIC_CAST( TInt, rect.iBr.iY* 0.09375 ); - - iStartTextBox = TRect( startTextTlX, startTextTlY, startTextBrX, startTextBrY ); - // End Text rect - TInt endTextTlX = STATIC_CAST( TInt, rect.iBr.iX* 0.50481 ); - TInt endTextTlY = STATIC_CAST( TInt, rect.iBr.iY* 0.01389 ); - TInt endTextBrX = STATIC_CAST( TInt, rect.iBr.iX* 0.99039 ); - TInt endTextBrY = STATIC_CAST( TInt, rect.iBr.iY* 0.09375 ); - - iEndTextBox = TRect( endTextTlX, endTextTlY, endTextBrX, endTextBrY ); - - // Start Video rect - TInt startVideoTlX = STATIC_CAST( TInt, rect.iBr.iX* 0.00962 ); - TInt startVideoTlY = STATIC_CAST( TInt, rect.iBr.iY* 0.10764 ); - TInt startVideoBrX = STATIC_CAST( TInt, rect.iBr.iX* 0.49512 ); - TInt startVideoBrY = STATIC_CAST( TInt, rect.iBr.iY* 0.68056 ); - - iVideoDisplayStartRect = TRect( startVideoTlX, startVideoTlY, startVideoBrX, startVideoBrY ); - // End Video rect - TInt endVideoTlX = STATIC_CAST( TInt, rect.iBr.iX* 0.50481 ); - TInt endVideoTlY = STATIC_CAST( TInt, rect.iBr.iY* 0.10764 ); - TInt endVideoBrX = STATIC_CAST( TInt, rect.iBr.iX* 0.99039 ); - TInt endVideoBrY = STATIC_CAST( TInt, rect.iBr.iY* 0.68056 ); - - iVideoDisplayEndRect = TRect( endVideoTlX, endVideoTlY, endVideoBrX, endVideoBrY ); - - // Timeline rect - TInt timeLineTlX = STATIC_CAST( TInt, rect.iBr.iX* 0.0114 ); - TInt timeLineTlY = STATIC_CAST( TInt, rect.iBr.iY* 0.80208 ); - - TSize cutBarSize = TSize( STATIC_CAST( TInt, rect.iBr.iX* 0.9773 ), STATIC_CAST( TInt, rect.iBr.iY* 0.0973 )); - - iTimelineRect = TRect( TPoint( timeLineTlX, timeLineTlY ), cutBarSize ); - } - else - // Portrait - { - // Start Text rect - TInt startTextTlX = STATIC_CAST( TInt, rect.iBr.iX* 0.01136 ); - TInt startTextTlY = STATIC_CAST( TInt, rect.iBr.iY* 0.01389 ); - TInt startTextBrX = STATIC_CAST( TInt, rect.iBr.iX* 0.49432 ); - TInt startTextBrY = STATIC_CAST( TInt, rect.iBr.iY* 0.10417 ); - - iStartTextBox = TRect( startTextTlX, startTextTlY, startTextBrX, startTextBrY ); - - // End Text rect - TInt endTextTlX = STATIC_CAST( TInt, rect.iBr.iX* 0.50568 ); - TInt endTextTlY = STATIC_CAST( TInt, rect.iBr.iY* 0.01389 ); - TInt endTextBrX = STATIC_CAST( TInt, rect.iBr.iX* 0.98864 ); - TInt endTextBrY = STATIC_CAST( TInt, rect.iBr.iY* 0.10417 ); - - iEndTextBox = TRect( endTextTlX, endTextTlY, endTextBrX, endTextBrY ); - - // Start Video rect - TInt startVideoTlX = STATIC_CAST( TInt, rect.iBr.iX* 0.01136 ); - TInt startVideoTlY = STATIC_CAST( TInt, rect.iBr.iY* 0.11806 ); - TInt startVideoBrX = STATIC_CAST( TInt, rect.iBr.iX* 0.49432 ); - TInt startVideoBrY = STATIC_CAST( TInt, rect.iBr.iY* 0.60069 ); - - iVideoDisplayStartRect = TRect( startVideoTlX, startVideoTlY, startVideoBrX, startVideoBrY ); - - // End Video rect - TInt endVideoTlX = STATIC_CAST( TInt, rect.iBr.iX* 0.50568 ); - TInt endVideoTlY = STATIC_CAST( TInt, rect.iBr.iY* 0.11806 ); - TInt endVideoBrX = STATIC_CAST( TInt, rect.iBr.iX* 0.98864 ); - TInt endVideoBrY = STATIC_CAST( TInt, rect.iBr.iY* 0.60069 ); - - iVideoDisplayEndRect = TRect( endVideoTlX, endVideoTlY, endVideoBrX, endVideoBrY ); - - // Timeline rect - TInt timeLineTlX = STATIC_CAST( TInt, rect.iBr.iX* 0.0114 ); - TInt timeLineTlY = STATIC_CAST( TInt, rect.iBr.iY* 0.767361 ); - - - TSize cutBarSize = TSize( STATIC_CAST( TInt, rect.iBr.iX* 0.9773 ), STATIC_CAST( TInt, rect.iBr.iY* 0.0973 )); - - iTimelineRect = TRect( TPoint( timeLineTlX, timeLineTlY ), cutBarSize ); - } - - iCutterBar->SetRect( iTimelineRect ); - - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::SizeChanged(): Out" ); - } - -TKeyResponse CVeiTrimForMmsContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ) - { - if ( iKeyEnable ) - { - switch ( aType ) - { - // - // Key down event - // - case EEventKeyDown: - { - iKeyRepeatCount = 0; - if ( iPreviewState == EPlaying ) - { - // iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); - // Stop( ETrue ); - return EKeyWasConsumed; - } - else - { - //iMovie.VideoClipSetCutInTime( 0,TTimeIntervalMicroSeconds(0) ); - //iMovie.VideoClipSetCutOutTime( 0, iDuration ); - return EKeyWasConsumed; - } - } - // - // The key event - // - case EEventKey: - { - if ( iPreviewState == EPlaying ) - { - return EKeyWasConsumed; - } - switch ( aKeyEvent.iCode ) - { - // - // Navi-key right - // - case EKeyRightArrow: - { - - if ( 0 == iKeyRepeatCount ) - { - iMovie.VideoClipSetCutInTime( 0, TTimeIntervalMicroSeconds( 0 )); - iMovie.VideoClipSetCutOutTime( 0, iDuration ); - } - - if ( iSeekEndPos != iDuration ) - { - iSeekEvent = ETrue; - iLastKeyLeftOrRight = ETrue; - if ( iKeyRepeatCount < 18 ) - { - iKeyRepeatCount++; - } - - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - TInt64 newPos = iSeekPos.Int64() + adjustment; - - TTimeIntervalMicroSeconds endTime( 0 ); - iMovie.GetDurationEstimateL( iMaxMmsSize, newPos, endTime ); - - // what is the reasoning behid this? - // should args be checked before call to GetDurationEstimateL(), like in - // EKeyLeftArrow? - if ( endTime.Int64() >= iDuration.Int64() - adjustment ) - { - iKeyRepeatCount -= 3; - adjustment = TimeIncrement( iKeyRepeatCount ); - endTime = iDuration; - newPos += adjustment; - } - - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - iSeekEndPos = endTime; - iCutterBar->SetInPoint( iSeekPos ); - iCutterBar->SetOutPoint( endTime ); - } - - return EKeyWasConsumed; - } - // - // Navi-key left - // - case EKeyLeftArrow: - { - - if ( 0 == iKeyRepeatCount ) - { - iMovie.VideoClipSetCutInTime( 0, TTimeIntervalMicroSeconds( 0 )); - iMovie.VideoClipSetCutOutTime( 0, iDuration ); - } - - if ( iSeekPos.Int64() > 0 ) - { - iSeekEvent = ETrue; - iLastKeyLeftOrRight = ETrue; - // Process the command only when repeat count is zero. - iKeyRepeatCount++; - - - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - - TInt64 newPos = iSeekPos.Int64() - adjustment; - if ( newPos < 0 ) - { - newPos = 0; - } - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - - TTimeIntervalMicroSeconds endTime( 0 ); - iMovie.GetDurationEstimateL( iMaxMmsSize, newPos, endTime ); - - iSeekEndPos = endTime; - - iCutterBar->SetInPoint( iSeekPos ); - iCutterBar->SetOutPoint( endTime ); - } - return EKeyWasConsumed; - } - // - // Default - // - default: - { - return EKeyWasNotConsumed; - } - } - } - // - // Key up event - // - - case EEventKeyUp: - { - iKeyRepeatCount = 0; - if ( iPreviewState == EPlaying ) - { - iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); - - Stop( ETrue ); - return EKeyWasConsumed; - } - else - { - if ( iLastKeyLeftOrRight ) - { - iView.ProcessNeeded( ETrue ); - iMovie.VideoClipSetCutInTime( 0, iSeekPos ); - iMovie.VideoClipSetCutOutTime( 0, iSeekEndPos ); - iView.UpdateNaviPaneL( iMovie.GetSizeEstimateL() / 1024, iMovie.Duration()); - iLastKeyLeftOrRight = EFalse; - if ( iSeekEvent ) - { - StartFrameTakerL( iClipIndex ); - iSeekEvent = EFalse; - } - return EKeyWasConsumed; - } - } - break; - } - // - // Default - // - default: - return EKeyWasNotConsumed; - } - } //iKeyEnable - return EKeyWasNotConsumed; - } - - -TInt CVeiTrimForMmsContainer::TimeIncrement( TInt aKeyCount )const - { - if ( aKeyCount < 3 ) - { - return 100000; - } - else if ( aKeyCount < 6 ) - // 4 - { - return 300000; - } - else if ( aKeyCount < 9 ) - // 5 - { - return 500000; - } - else if ( aKeyCount < 12 ) - // 10 - { - return 1000000; - } - else if ( aKeyCount < 15 ) - // 13 - { - return 2000000; - } - else if ( aKeyCount < 18 ) - // 15 - { - return 3000000; - } - else - { - return 5000000; - } - } - - -void CVeiTrimForMmsContainer::NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo ) - { - switch ( aEvent ) - { - case MVeiVideoDisplayObserver::EOpenComplete: - { - iVideoDisplay->SetRect( iPreviewRect ); - if ( !VideoEditorUtils::IsLandscapeScreenOrientation()) - //Portrait - { - iVideoDisplay->SetRotationL( EVideoRotationClockwise90 ); - } - iPreviewState = ELoading; - - iVideoDisplay->SetPositionL( CutInTime()); - iVideoDisplay->PlayL( iMovie.VideoClipInfo( iClipIndex )->FileName(), CutInTime(), CutOutTime()); - - break; - } - - case MVeiVideoDisplayObserver::ELoadingComplete: - { - - iVideoDisplay->MakeVisible( ETrue ); - iPreviewState = EPlaying; - break; - } - - case MVeiVideoDisplayObserver::EStop: - { - iPreviewState = EIdle; - iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); - - iVideoDisplay->MakeVisible( EFalse ); - - DrawDeferred(); - break; - } - case MVeiVideoDisplayObserver::EPlayComplete: - { - iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); - Stop( ETrue ); - if ( KErrNoMemory == aInfo ) - { - iView.ShowGlobalErrorNoteL( KErrNoMemory ); - } - break; - } - default: - { - break; - } - } - } - - -/** - * Called to notify that a new video clip has been successfully - * added to the movie. Note that the indices and the start and end times - * of the video clips after the new clip have also changed as a result. - * Note that the transitions may also have changed. - * - * @param aMovie movie - * @param aIndex index of video clip in movie - */ -void CVeiTrimForMmsContainer::NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ) - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded: in" ); - - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - aMovie.GetDurationEstimateL( iMaxMmsSize, iSeekPos, iSeekEndPos ); - LOGFMT3( KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded: 1, iMaxMmsSize:%d, iSeekPos:%Ld, iSeekEndPos:%Ld", iMaxMmsSize, iSeekPos.Int64(), iSeekEndPos.Int64()); - - iCutterBar->SetInPoint( iSeekPos ); - iCutterBar->SetOutPoint( iSeekEndPos ); - iCutterBar->SetTotalDuration( aMovie.Duration()); - iDuration = aMovie.Duration(); - - iClipIndex = aIndex; - - aMovie.VideoClipSetCutInTime( 0, iSeekPos ); - aMovie.VideoClipSetCutOutTime( 0, iSeekEndPos ); - - TInt movieSizeLimit = static_cast < TInt > ( iMaxMmsSize* 0.9 ); - aMovie.SetMovieSizeLimit( movieSizeLimit ); - - LOGFMT( KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded(): 2, movie size set to:%d", movieSizeLimit ); - - StartFrameTakerL( iClipIndex ); - - iSeekEvent = EFalse; - - - iView.UpdateNaviPaneL( iMovie.GetSizeEstimateL() / 1024, iMovie.Duration()); - - iKeyEnable = ETrue; - - LOG( KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded: out" ); - } - - -void CVeiTrimForMmsContainer::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, TInt /*aError*/ ){} - -void CVeiTrimForMmsContainer::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyVideoClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyVideoClipColorEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyVideoClipAudioSettingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyVideoClipGeneratorSettingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyVideoClipDescriptiveNameChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyStartTransitionEffectChanged( CVedMovie& /*aMovie*/ ){} - - -void CVeiTrimForMmsContainer::NotifyMiddleTransitionEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyEndTransitionEffectChanged( CVedMovie& /*aMovie*/ ){} - -void CVeiTrimForMmsContainer::NotifyAudioClipAdded( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyAudioClipAddingFailed( CVedMovie& /*aMovie*/, TInt /*aError*/ ){} - -void CVeiTrimForMmsContainer::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyAudioClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyAudioClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyMovieQualityChanged( CVedMovie& /*aMovie*/ - ){} - - -void CVeiTrimForMmsContainer::NotifyMovieReseted( CVedMovie& /*aMovie*/ ){} - -void CVeiTrimForMmsContainer::NotifyMovieOutputParametersChanged( CVedMovie& /*aMovie*/ ){} - -void CVeiTrimForMmsContainer::NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/ ){} - -void CVeiTrimForMmsContainer::NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/ ){} - -void CVeiTrimForMmsContainer::PlayL( const TDesC& aFilename, const TRect& aRect ) - { - iCutterBar->MakeVisible( EFalse ); - iVideoDisplayStart->MakeVisible( EFalse ); - iVideoDisplayEnd->MakeVisible( EFalse ); - iVideoDisplay->MakeVisible( EFalse ); - - iVideoDisplay->ShowBlackScreen(); - - iPreviewRect = aRect; - iBlack = ETrue; - if ( !iScreenLight->IsActive()) - { - iScreenLight->Start(); - } - - - iPreviewState = EOpeningFile; - iVideoDisplay->OpenFileL( aFilename ); - } - -void CVeiTrimForMmsContainer::Stop( TBool aCloseStream ) - { - iCutterBar->MakeVisible( ETrue ); - iVideoDisplayStart->MakeVisible( ETrue ); - iVideoDisplayEnd->MakeVisible( ETrue ); - iBlack = EFalse; - iScreenLight->Stop(); - iVideoDisplay->Stop( aCloseStream ); - DrawNow(); - } - -void CVeiTrimForMmsContainer::PauseL() - { - iPreviewState = EPause; - iVideoDisplay->PauseL(); - iVideoDisplay->MakeVisible( EFalse ); - DrawNow(); - } - -TInt CVeiTrimForMmsContainer::PreviewState()const - { - return iPreviewState; - } - -void CVeiTrimForMmsContainer::NotifyFramesCompleted( CFbsBitmap* aFirstFrame, - CFbsBitmap* aLastFrame, - CFbsBitmap* /*aTimelineFrame*/, - TInt aError ) - { - if ( aError == KErrNone ) - { - iVideoDisplayStart->ShowPictureL( *aFirstFrame ); - iVideoDisplayEnd->ShowPictureL( *aLastFrame ); - } - - if ( iProgressNote ) - { - iProgressInfo->SetAndDraw( 100 ); - iProgressNote->ProcessFinishedL(); - } - } - -void CVeiTrimForMmsContainer::StartFrameTakerL( TInt aIndex ) - { - iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue ); - iProgressNote->SetCallback( this ); - iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE ); - - HBufC* stringholder; - stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv ); - CleanupStack::PushL( stringholder ); - iProgressNote->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iProgressInfo = iProgressNote->GetProgressInfoL(); - iProgressInfo->SetFinalValue( 100 ); - iProgressInfo->SetAndDraw( 50 ); - - // First frame is shown in main display so it is bigger.. Last frame is always - // on transition display and one frame for the video timeline. - TSize firstThumbResolution = iVideoDisplayStart->GetScreenSize(); - TSize lastThumbResolution = iVideoDisplayEnd->GetScreenSize(); - TSize timelineThumbResolution = TSize( 34, 28 ); - - TInt frameCount = iMovie.VideoClipInfo( aIndex )->VideoFrameCount(); - - TInt firstThumbNailIndex = iMovie.VideoClipInfo( aIndex )->GetVideoFrameIndexL( CutInTime()); - TInt lastThumbNailIndex = iMovie.VideoClipInfo( aIndex )->GetVideoFrameIndexL( CutOutTime()); - if ( lastThumbNailIndex >= frameCount ) - { - lastThumbNailIndex = frameCount - 1; - } - - - iFrameTaker->GetFramesL( *iMovie.VideoClipInfo( aIndex ), - firstThumbNailIndex, - &firstThumbResolution, - lastThumbNailIndex, - &lastThumbResolution, - firstThumbNailIndex, - &timelineThumbResolution, - EPriorityLow ); - } - -TTypeUid::Ptr CVeiTrimForMmsContainer::MopSupplyObject( TTypeUid aId ) - { - if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext ) - { - return MAknsControlContext::SupplyMopObject( aId, iBgContext ); - } - return CCoeControl::MopSupplyObject( aId ); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/ManualVideoEditor/src/VeiTrimForMmsView.cpp --- a/videditor/ManualVideoEditor/src/VeiTrimForMmsView.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,876 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDES -// System includes -#include -#include -#include // CAknNavigationControlContainer -#include // CAknNavigationDecorator -#include // CAknProgressDialog -#include // CAknKeySoundSystem -#include // BaflUtils -#include -#include // CEikProgressInfo -#include -#include // CnvUtfConverter -#include // CSendAppUi -#include -#include // StringLoader -#include -// User includes -#include "Manualvideoeditor.hrh" -#include "VeiAppUi.h" -#include "VeiSettings.h" -#include "VeiTrimForMmsView.h" -#include "VeiTrimForMmsContainer.h" -#include "VeiEditVideoLabelNavi.h" -#include "VideoEditorCommon.h" -#include "VeiTempMaker.h" -#include "VideoEditorCommon.h" -#include "VideoEditorDebugUtils.h" -#include "VeiErrorUi.h" - -// CONSTANTS -const TInt KVedVideoClipIndex( 0 ); -const TInt KProgressNoteMaxValue( 100 ); -const TInt KVedTrimForMmsDefaultCba( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - - -CVeiTrimForMmsView* CVeiTrimForMmsView::NewL( CSendUi& aSendAppUi ) - { - CVeiTrimForMmsView* self = CVeiTrimForMmsView::NewLC( aSendAppUi ); - CleanupStack::Pop( self ); - - return self; - } - - -CVeiTrimForMmsView* CVeiTrimForMmsView::NewLC( CSendUi& aSendAppUi ) - { - CVeiTrimForMmsView* self = new( ELeave )CVeiTrimForMmsView( aSendAppUi ); - CleanupStack::PushL( self ); - self->ConstructL(); - - return self; - } - -// ----------------------------------------------------------------------------- -// CVeiTrimForMmsView::ConstructL -// Symbian 2nd phase constructor that can leave. -// ----------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::ConstructL() - { - BaseConstructL( R_VEI_TRIM_FOR_MMS_VIEW ); - - iErrorUi = CVeiErrorUI::NewL( *iCoeEnv ); - - iTempMaker = CVeiTempMaker::NewL(); - } - -// ----------------------------------------------------------------------------- -// CVeiTrimForMmsView::CVeiTrimForMmsView( CSendUi& aSendAppUi ) -// C++ default constructor. -// ----------------------------------------------------------------------------- -// -CVeiTrimForMmsView::CVeiTrimForMmsView( CSendUi& aSendAppUi ): iSendAppUi( aSendAppUi ) -{ -} - - -CVeiTrimForMmsView::~CVeiTrimForMmsView() - { - if ( iContainer ) - { - AppUi()->RemoveFromStack( iContainer ); - delete iContainer; - } - if ( iNaviDecorator ) - { - delete iNaviDecorator; - } - - if ( iVedMovie ) - { - iVedMovie->UnregisterMovieObserver( this ); - delete iVedMovie; - } - - if ( iTempMaker ) - { - delete iTempMaker; - iTempMaker = NULL; - } - if ( iTempFile ) - { - TInt err = iEikonEnv->FsSession().Delete( *iTempFile ); - if ( err ) - { - // what to do when error occurs in destructor??? - } - - delete iTempFile; - } - - delete iErrorUi; - - iProgressInfo = NULL; - } - - -TUid CVeiTrimForMmsView::Id()const - { - return TUid::Uid( EVeiTrimForMmsView ); - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::HandleCommandL( TInt aCommand ) -// -// -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::HandleCommandL( TInt aCommand ) - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::HandleCommandL: In" ); - - TInt state; - state = iContainer->PreviewState(); - - switch ( aCommand ) - { - /** - * Options -> Send via multimedia - */ - case EVeiCmdSendViaMms: - { - CmdSendViaMultimediaL(); - break; - } - /** - * Options -> Preview - */ - case EVeiCmdPreview: - { - if ( state == EIdle || state == EStop ) - { - SetTrimStateL( EFullPreview ); - PlayPreviewL(); - } - break; - } - // - // Options -> Help - // - case EVeiCmdTrimForMmsViewHelp: - { - AppUi()->HandleCommandL( aCommand ); - break; - } - /** - * Options -> Back - */ - case EAknSoftkeyBack: - { - if ( state != EFullPreview ) - { - CmdSoftkeyBackL(); - } - else - { - SetTrimStateL( ESeek ); - } - break; - } - /** - * Adjust video length -> Ok - */ - case EAknSoftkeyOk: - { - if ( state == EPause ) - { - SetTrimStateL( ESeek ); - iContainer->Stop( ETrue ); - } - else - { - CmdSoftkeyOkL(); - } - break; - } - /** - * Adjust video length -> Cancel - */ - case EAknSoftkeyCancel: - { - if ( state == EPause ) - { - SetTrimStateL( ESeek ); - iContainer->Stop( ETrue ); - } - else - { - CmdSoftkeyCancelL(); - } - break; - } - default: - { - AppUi()->HandleCommandL( aCommand ); - break; - } - } - - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::HandleCommandL: Out" ); - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::CmdSendViaMultimediaL() -// Function for handling the Send Via Multimedia command. -// -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::CmdSendViaMultimediaL() - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: In" ); - - // Start processing the trimmed video - // Possible leave codes: - // - KErrNoMemory if memory allocation fails - // - KErrAccessDenied if the file access is denied - // - KErrDiskFull if the disk is full - // - KErrWrite if not all data could be written - // - KErrBadName if the filename is bad - // - KErrDirFull if the directory is full - // : If video clip is already processed and frame is in same position - // do not reprocess the movie. - - - UpdateNaviPaneSize(); - - TBool fileExists( ETrue ); - RFs& fs = iEikonEnv->FsSession(); - - if ( iTempFile ) - { - fileExists = BaflUtils::FileExists( fs, * iTempFile ); - } - - if ( !fileExists || ( !iTempFile ) || iProcessNeeded ) - { - - if ( iTempFile && fileExists ) - { - User::LeaveIfError( fs.Delete( *iTempFile )); - delete iTempFile; - iTempFile = NULL; - } - - iTempFile = HBufC::NewL( KMaxFileName ); - - // @: check the quality setting. should we set it here to MMS compatible? - - // Quality is taken from settings and set to engine. - ReadSettingsL( iMovieSaveSettings ); - - iTempMaker->GenerateTempFileName( *iTempFile, iMovieSaveSettings.MemoryInUse(), iVedMovie->Format()); - - TEntry fileinfo; - // Rename movie from xxxx.$$$ to defaultfilename from settingsview. - // looks better in attachment list.. - - // Get default movie name from settings view - TPtr temppeet = iTempFile->Des(); - TParse parse; - - parse.Set( iMovieSaveSettings.DefaultVideoName(), &temppeet, NULL ); - - TFileName orgPathAndName = parse.FullName(); - - // TVedVideoFormat movieQuality = iVedMovie->Format(); - - orgPathAndName.Replace( orgPathAndName.Length() - 4, 4, KExt3gp ); - - fs.Replace( *iTempFile, orgPathAndName ); - iTempFile->Des() = orgPathAndName; - fs.Entry( *iTempFile, fileinfo ); - - - iVedMovie->SetQuality( CVedMovie::EQualityMMSInteroperability ); - LOGFMT( KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: 1, iTempFile:%S", iTempFile ); - TRAPD( processError, iVedMovie->ProcessL( *iTempFile, * this )); - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: 2" ); - if ( processError == KErrNone ) - { - // Text for the progress note is loaded from TBUF resource - HBufC* noteText; - noteText = StringLoader::LoadLC( R_VED_PROCESSING_FOR_MMS, iEikonEnv ); - - // Construct and execute progress note. - iProgressNote = new( ELeave )CAknProgressDialog( REINTERPRET_CAST( CEikDialog** , &iProgressNote ), ETrue ); - iProgressNote->PrepareLC( R_VEI_PROGRESS_NOTE ); - iProgressNote->SetTextL( *noteText ); - - iProgressInfo = iProgressNote->GetProgressInfoL(); - iProgressInfo->SetFinalValue( KProgressNoteMaxValue ); - - iProgressNote->RunLD(); - - CleanupStack::PopAndDestroy( noteText ); // Pop and destroy the text - } - else - { - // : add error handling here - } - - } - else - { - - RFs shareFServer; - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: shareFServer connect." ); - - User::LeaveIfError( shareFServer.Connect()); - shareFServer.ShareProtected(); - - RFile openFileHandle; - - TInt err = openFileHandle.Open( shareFServer, * iTempFile, EFileRead | EFileShareReadersOnly ); - if ( KErrNone != err ) - { - LOGFMT( KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: Could not open file %S with EFileShareReadersOnly. Trying EFileShareAny", iTempFile ); - User::LeaveIfError( openFileHandle.Open( shareFServer, * iTempFile, EFileRead | EFileShareAny )); - } - - CMessageData* messageData = CMessageData::NewLC(); - - - messageData->AppendAttachmentHandleL( openFileHandle ); - - iSendAppUi.CreateAndSendMessageL( KSenduiMtmMmsUid, messageData, KNullUid, EFalse ); - - CleanupStack::PopAndDestroy( messageData ); - - shareFServer.Close(); - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: shareFServer closed." ); - } - - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: Out" ); - } - -void CVeiTrimForMmsView::CmdSoftkeyBackL() - { - // Compare previous view's application uid to video editor uid. - if ( iPreviousViewId.iAppUid == KUidVideoEditor ) - { - CEikStatusPane* statusPane = AppUi()->StatusPane(); - TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi ); // Navi pane UID - - CAknNavigationControlContainer* naviContainer = ( CAknNavigationControlContainer* )statusPane->ControlL( naviPaneUid ); - naviContainer->Pop( iNaviDecorator ); - - // Activate previous local view. - AppUi()->ActivateLocalViewL( iPreviousViewId.iViewUid ); - } - else - { - // Exit video editor - AppUi()->HandleCommandL( EEikCmdExit ); - } - } - - -void CVeiTrimForMmsView::CmdSoftkeyOkL() - { - // Set CBA labels back to view default - Cba()->SetCommandSetL( KVedTrimForMmsDefaultCba ); - Cba()->DrawDeferred(); - - PushKeySoundL( R_VED_LEFT_RIGHT_SILENT_SKEY_LIST ); - } - - -void CVeiTrimForMmsView::CmdSoftkeyCancelL() - { - // Set CBA labels back to view default - Cba()->SetCommandSetL( KVedTrimForMmsDefaultCba ); - Cba()->DrawDeferred(); - - PushKeySoundL( R_VED_LEFT_RIGHT_SILENT_SKEY_LIST ); - } - - -void CVeiTrimForMmsView::DoActivateL( const TVwsViewId& aPrevViewId, - TUid /*aCustomMessageId*/, - const TDesC8& aCustomMessage ) - { - if ( !iContainer ) - { - iPreviousViewId = aPrevViewId; // Save the previous view id - - // Disable left and right navi-key sounds - PushKeySoundL( R_VED_LEFT_RIGHT_SILENT_SKEY_LIST ); - - SetTitlePaneTextL(); - CreateNaviPaneL(); - - STATIC_CAST( CVeiEditVideoLabelNavi* , - iNaviDecorator->DecoratedControl())->SetState( CVeiEditVideoLabelNavi::EStateTrimForMmsView ); - - TFileName inputFileName; - CnvUtfConverter::ConvertToUnicodeFromUtf8( inputFileName, aCustomMessage ); - - if ( !iVedMovie ) - { - iVedMovie = CVedMovie::NewL( NULL ); - iVedMovie->RegisterMovieObserverL( this ); - iVedMovie->InsertVideoClipL( inputFileName, KVedVideoClipIndex ); - iVedMovie->SetQuality( CVedMovie::EQualityMMSInteroperability ); - } - - iContainer = CVeiTrimForMmsContainer::NewL( AppUi()->ClientRect(), * iVedMovie, * this ); - iContainer->SetMopParent( this ); - - AppUi()->AddToStackL( *this, iContainer ); - } - - } - - -void CVeiTrimForMmsView::DoDeactivate() - { - if ( iContainer ) - { - AppUi()->RemoveFromStack( iContainer ); - delete iContainer; - iContainer = NULL; - - if ( iVedMovie ) - { - iVedMovie->Reset(); - iVedMovie->UnregisterMovieObserver( this ); - delete iVedMovie; - iVedMovie = NULL; - } - } - } - - -void CVeiTrimForMmsView::PushKeySoundL( const TInt aResourceId )const - { - CAknKeySoundSystem* aknKeySoundSystem = AppUi()->KeySounds(); - aknKeySoundSystem->PushContextL( aResourceId ); - } - - -void CVeiTrimForMmsView::PopKeySound()const - { - AppUi()->KeySounds()->PopContext(); - } - - -void CVeiTrimForMmsView::SetTitlePaneTextL()const - { - TUid titleUid; - titleUid.iUid = EEikStatusPaneUidTitle; - - CEikStatusPane* statusPane = AppUi()->StatusPane(); - - CEikStatusPaneBase::TPaneCapabilities titlePaneCap = statusPane->PaneCapabilities( titleUid ); - - if ( titlePaneCap.IsPresent() && titlePaneCap.IsAppOwned()) - { - CAknTitlePane* titlePane = ( CAknTitlePane* )statusPane->ControlL( titleUid ); - - TResourceReader reader; - iCoeEnv->CreateResourceReaderLC( reader, R_VEI_TRIM_FOR_MMS_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader ); - - CleanupStack::PopAndDestroy(); //reader - } - - } - - -void CVeiTrimForMmsView::CreateNaviPaneL() - { - TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi ); // Navi pane UID - - CEikStatusPane* statusPane = AppUi()->StatusPane(); // Get status pane - - CEikStatusPaneBase::TPaneCapabilities naviPaneCap = statusPane->PaneCapabilities( naviPaneUid ); - - if ( naviPaneCap.IsPresent() && naviPaneCap.IsAppOwned()) - { - CAknNavigationControlContainer* naviContainer = ( CAknNavigationControlContainer* )statusPane->ControlL( naviPaneUid ); - - CVeiEditVideoLabelNavi* editvideolabelnavi = CVeiEditVideoLabelNavi::NewLC(); - editvideolabelnavi->SetState( CVeiEditVideoLabelNavi::EStateInitializing ); - - iNaviDecorator = CAknNavigationDecorator::NewL( naviContainer, editvideolabelnavi, CAknNavigationDecorator::ENotSpecified ); - CleanupStack::Pop( editvideolabelnavi ); - - iNaviDecorator->SetContainerWindowL( *naviContainer ); - iNaviDecorator->MakeScrollButtonVisible( EFalse ); - - naviContainer->PushL( *iNaviDecorator ); - - } - } - -void CVeiTrimForMmsView::UpdateNaviPaneSize() - { - if ( iContainer ) - { - iVedMovie->VideoClipSetCutInTime( KVedVideoClipIndex, iContainer->CutInTime()); - iVedMovie->VideoClipSetCutOutTime( KVedVideoClipIndex, iContainer->CutOutTime()); - } - } - -void CVeiTrimForMmsView::SetNaviPaneSizeLabelL( const TInt& aSizeInBytes ) - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iNaviDecorator->DecoratedControl())->SetSizeLabelL( aSizeInBytes ); - } - - -void CVeiTrimForMmsView::SetNaviPaneDurationLabelL( const TTimeIntervalMicroSeconds& aTime ) - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iNaviDecorator->DecoratedControl())->SetDurationLabelL( aTime.Int64()); - } - -void CVeiTrimForMmsView::UpdateNaviPaneL( const TInt& aSizeInBytes, const TTimeIntervalMicroSeconds& aTime ) - { - TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi* , iNaviDecorator->DecoratedControl())->GetMaxMmsSize(); - - // Navipanes MMS icon control. - if ( aSizeInBytes < maxMmsSize ) - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iNaviDecorator->DecoratedControl())->SetMmsAvailableL( ETrue ); - } - else - { - STATIC_CAST( CVeiEditVideoLabelNavi* , iNaviDecorator->DecoratedControl())->SetMmsAvailableL( EFalse ); - } - - STATIC_CAST( CVeiEditVideoLabelNavi* , iNaviDecorator->DecoratedControl())->SetSizeLabelL( aSizeInBytes ); - - STATIC_CAST( CVeiEditVideoLabelNavi* , iNaviDecorator->DecoratedControl())->SetDurationLabelL( aTime.Int64()); - } - -void CVeiTrimForMmsView::HandleResourceChange( TInt aType ) - { - LOGFMT( KVideoEditorLogFile, "CVeiTrimForMmsView::HandleResourceChange() In, aType:%d", aType ); - - if ( KAknsMessageSkinChange == aType && iNaviDecorator ) - { - // Handle skin change in the navi label controls - they do not receive - // it automatically since they are not in the control stack - CCoeControl* navi = iNaviDecorator->DecoratedControl(); - if ( navi ) - { - navi->HandleResourceChange( aType ); - } - } - - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::HandleResourceChange() Out" ); - } - -// ============= MVedMovieProcessingObserver FUNCTIONS START ================== - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::NotifyMovieProcessingStartedL( CVedMovie& aMovie ) -// -// Called to notify that a new movie processing operation has been started. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::NotifyMovieProcessingStartedL( CVedMovie& /*aMovie*/ ){} - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::NotifyMovieProcessingProgressed( CVedMovie& aMovie, -// TInt aPercentage ) -// -// Called to inform about the current progress of the movie processing -// operation. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::NotifyMovieProcessingProgressed( CVedMovie& /*aMovie*/, TInt aPercentage ) - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingProgressed(): In" ); - - // Increment the progress bar. - iProgressInfo->SetAndDraw( aPercentage ); - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::NotifyMovieProcessingCompleted( CVedMovie& aMovie, -// TInt aError ) -// -// Called to notify that the movie processing operation has been completed. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::NotifyMovieProcessingCompleted( CVedMovie& /*aMovie*/, TInt aError ) - { - LOGFMT( KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted(): In, aError:%d", aError ); - - if ( !aError ) - { - ProcessNeeded( EFalse ); - } - - __ASSERT_ALWAYS( iProgressNote, User::Panic( _L( "CVeiTrimForMmsView" ), 1 ) ); - - // Draw the progress bar to 100%. - iProgressInfo->SetAndDraw( 100 ); - - // Delete the note. - TRAP_IGNORE( iProgressNote->ProcessFinishedL()); - - RFs shareFServer; - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted: shareFServer connect." ); - - User::LeaveIfError( shareFServer.Connect()); - shareFServer.ShareProtected(); - - RFile openFileHandle; - - TInt err = openFileHandle.Open( shareFServer, * iTempFile, EFileRead | EFileShareReadersOnly ); - if ( KErrNone != err ) - { - LOGFMT( KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted: Could not open file %S with EFileShareReadersOnly. Trying EFileShareAny", iTempFile ); - User::LeaveIfError( openFileHandle.Open( shareFServer, * iTempFile, EFileRead | EFileShareAny )); - } - - CMessageData* messageData = CMessageData::NewLC(); - messageData->AppendAttachmentHandleL( openFileHandle ); - - iSendAppUi.CreateAndSendMessageL( KSenduiMtmMmsUid, messageData, KNullUid, EFalse ); - - CleanupStack::PopAndDestroy( messageData ); - - shareFServer.Close(); - - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted: shareFServer closed." ); - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted(): Out" ); - } - -// ============== MVedMovieProcessingObserver FUNCTIONS END =================== - - -/** - * Called to notify that a new video clip has been successfully - * added to the movie. Note that the indices and the start and end times - * of the video clips after the new clip have also changed as a result. - * Note that the transitions may also have changed. - * - * @param aMovie movie - * @param aIndex index of video clip in movie - */ -void CVeiTrimForMmsView::NotifyVideoClipAdded( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - ProcessNeeded( ETrue ); - } - - -/** - * Called to notify that adding a new video clip to the movie has failed. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - KErrNotSupported if the format of the file is recognized but - * adding it to the movie is not supported (e.g., it is of different resolution - * or format than the other clips) - * - * @param aMovie movie - * @param aError one of the system wide error codes - */ -void CVeiTrimForMmsView::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, TInt /*aError*/ ) - { - User::Panic( _L( "MmsView" ), 20 ); - } - - -void CVeiTrimForMmsView::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - - -void CVeiTrimForMmsView::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/ ){} - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::NotifyVideoClipTimingsChanged( CVedMovie& aMovie, -// TInt aIndex ) -// -// Called to notify that the timings (that is, the cut in or cut out time or -// the speed and consequently the end time, edited duration, and possibly audio -// settings) of a video clip have changed (but the index of the clip has -// not changed). Note that the start and end times of the video clips -// after the changed clip have also changed. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::NotifyVideoClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyVideoClipTimingsChanged()" ); - } - - -void CVeiTrimForMmsView::NotifyVideoClipColorEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - - -void CVeiTrimForMmsView::NotifyVideoClipAudioSettingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - - -void CVeiTrimForMmsView::NotifyVideoClipGeneratorSettingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - - -void CVeiTrimForMmsView::NotifyVideoClipDescriptiveNameChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - - -void CVeiTrimForMmsView::NotifyStartTransitionEffectChanged( CVedMovie& /*aMovie*/ ){} - - -void CVeiTrimForMmsView::NotifyMiddleTransitionEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - - -void CVeiTrimForMmsView::NotifyEndTransitionEffectChanged( CVedMovie& /*aMovie*/ ){} - - -void CVeiTrimForMmsView::NotifyAudioClipAdded( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - - -void CVeiTrimForMmsView::NotifyAudioClipAddingFailed( CVedMovie& /*aMovie*/, TInt /*aError*/ ){} - - -void CVeiTrimForMmsView::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - - -void CVeiTrimForMmsView::NotifyAudioClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/ ){} - - -void CVeiTrimForMmsView::NotifyAudioClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ){} - - -void CVeiTrimForMmsView::NotifyMovieQualityChanged( CVedMovie& /*aMovie*/ ){} - -void CVeiTrimForMmsView::NotifyMovieReseted( CVedMovie& /*aMovie*/ ){} - -void CVeiTrimForMmsView::NotifyMovieOutputParametersChanged( CVedMovie& /*aMovie*/ ){} - -void CVeiTrimForMmsView::NotifyAudioClipDynamicLevelMarkInserted( CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/ ){} - -void CVeiTrimForMmsView::NotifyAudioClipDynamicLevelMarkRemoved( CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/ ){} - -void CVeiTrimForMmsView::NotifyVideoClipDynamicLevelMarkInserted( CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/ ){} - -void CVeiTrimForMmsView::NotifyVideoClipDynamicLevelMarkRemoved( CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/ ){} - -void CVeiTrimForMmsView::PlayPreviewL() - { - TRect rect( AppUi()->ApplicationRect()); - iContainer->SetRect( rect ); - - iContainer->PlayL( iVedMovie->VideoClipInfo( 0 )->FileName(), rect ); - } - -void CVeiTrimForMmsView::HandleStatusPaneSizeChange() - { - if ( iContainer ) - { - iContainer->SetRect( AppUi()->ClientRect()); - } - - } - -void CVeiTrimForMmsView::SetTrimStateL( TTrimState aState ) - { - iTrimState = aState; - CEikStatusPane* statusPane; - CAknTitlePane* titlePane; - - TResourceReader reader1; - - switch ( iTrimState ) - { - case EFullPreview: - - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - Cba()->DrawDeferred(); - - break; - - case ESeek: - iContainer->SetRect( AppUi()->ClientRect()); - statusPane = (( CAknAppUi* )iEikonEnv->EikAppUi())->StatusPane(); - - titlePane = ( CAknTitlePane* )statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle )); - iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_TRIM_FOR_MMS_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader1 ); - CleanupStack::PopAndDestroy(); //reader1 - - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); - - break; - - default: - { - break; - } - - } - } - -void CVeiTrimForMmsView::DialogDismissedL( TInt aButtonId ) - { - if ( aButtonId != EAknSoftkeyDone ) - { - iVedMovie->CancelProcessing(); - } - iProgressInfo = NULL; - } - -void CVeiTrimForMmsView::ProcessNeeded( TBool aProcessNeed ) - { - iProcessNeeded = aProcessNeed; - } - -void CVeiTrimForMmsView::ShowGlobalErrorNoteL( const TInt aError )const - { - iErrorUi->ShowGlobalErrorNote( aError ); - } - -//============================================================================= -void CVeiTrimForMmsView::ReadSettingsL( TVeiSettings& aSettings )const - { - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::ReadSettingsL: in" ); - - STATIC_CAST( CVeiAppUi* , AppUi())->ReadSettingsL( aSettings ); - - LOG( KVideoEditorLogFile, "CVeiTrimForMmsView::ReadSettingsL: out" ); - } - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/data/VedSimpleCutVideo.rss --- a/videditor/SimpleCutVideo/data/VedSimpleCutVideo.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,694 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// RESOURCE IDENTIFIER -NAME VSCV // 4 letter ID - -// INCLUDES - -#include -#include "VedSimpleCutVideo.hrh" - -#include -#include -#include -#include -#include // Key codes -#include // avkon.loc is NOT included in this file if -#include -#include -#include -#include -#include - - -// RESOURCE DEFINITIONS - - -RESOURCE RSS_SIGNATURE { } - -RESOURCE TBUF { buf="svcut"; } - -RESOURCE EIK_APP_INFO - { - cba=R_AVKON_SOFTKEYS_OPTIONS_EXIT; - } - -RESOURCE LOCALISABLE_APP_INFO r_vsc_localisable_app_info - { - short_caption=" "; - caption_and_icon = - CAPTION_AND_ICON_INFO - { - caption=" "; - }; - } -//---------------------------------------------------- -// -// r_vei_hotkeys -// -//---------------------------------------------------- -// -RESOURCE HOTKEYS r_vei_hotkeys - { - control= - { - HOTKEY { command=EVeiCmdCutVideoViewExit; key='e'; } - }; - } - -//===================================================== -// -// ***** AVKON VIEWS ***** -// -// -//===================================================== - - -//---------------------------------------------------- -// -// r_vei_cut_video -// -//---------------------------------------------------- -// -RESOURCE AVKON_VIEW r_vei_cut_video_view - { - hotkeys=r_vei_hotkeys; - menubar=r_vei_menubar_cut_video_view; - cba=R_AVKON_SOFTKEYS_SELECTION_LIST; - } - - -//===================================================== -// -// ***** MENU BARS ***** -// -// -//===================================================== - - -//----------------------------------------------------- -// -// r_vei_menubar_cut_video_view -// ?description -// -//---------------------------------------------------- -// - -RESOURCE MENU_BAR r_vei_menubar_cut_video_view - { - titles= - { - MENU_TITLE { menu_pane=r_vei_cut_video_view_menu; } - }; - } - - -//----------------------------------------------------- -// -// r_vei_menubar_cut_video_view_context -// ?description -// -//---------------------------------------------------- -// - -RESOURCE MENU_BAR r_vei_menubar_cut_video_view_context - { - titles= - { - MENU_TITLE { menu_pane=r_vei_cut_video_view_context_menu; } - }; - } -// end - - -//===================================================== -// -// ***** MENU PANES ***** -// -// -//===================================================== - -//---------------------------------------------------- -// -// r_vei_cut_video_menu -// -//---------------------------------------------------- -// - -RESOURCE MENU_PANE r_vei_cut_video_view_menu - { - items= - { - MENU_ITEM { command=EVeiCmdCutVideoViewPlay; txt=qtn_vie_options_play; }, - MENU_ITEM { command=EVeiCmdCutVideoViewContinue; txt=qtn_vie_options_resume; }, - MENU_ITEM { command=EVeiCmdCutVideoViewPlayMarked; txt=qtn_vie_options_play_marked; }, - MENU_ITEM { command=EVeiCmdCutVideoViewStop; txt=qtn_vie_options_stop; }, - MENU_ITEM { command=EVeiCmdCutVideoViewMarkIn; txt=qtn_vie_options_start_mark; }, - MENU_ITEM { command=EVeiCmdCutVideoViewMarkOut; txt=qtn_vie_options_end_mark; }, - MENU_ITEM { command=EVeiCmdCutVideoViewClearMarks; txt=qtn_vie_options_remove_mark; cascade = r_vei_cut_video_view_menu_clear_marks; }, - MENU_ITEM { command=EVeiCmdCutVideoTakeSnapshot; txt=qtn_vie_options_snapshot; }, - MENU_ITEM { command=EVeiCmdCutVideoViewSave; txt=qtn_vie_options_save; }, - MENU_ITEM { command=EVeiCmdCutVideoViewHelp; txt=qtn_options_help; }, - MENU_ITEM { command=EVeiCmdCutVideoViewExit; txt=qtn_options_exit; } - }; - } -//---------------------------------------------------- -// -// r_vei_videos_view_menu_mark -// Videos view mark submenu. -// -//---------------------------------------------------- -// -RESOURCE MENU_PANE r_vei_cut_video_view_menu_clear_marks - { - items= - { - MENU_ITEM { command=EVeiCmdCutVideoViewClearMarksIn; txt=qtn_vie_options_remove_mark_start; }, - MENU_ITEM { command=EVeiCmdCutVideoViewClearMarksOut; txt=qtn_vie_options_remove_mark_end; }, - MENU_ITEM { command=EVeiCmdCutVideoViewClearMarksInOut; txt=qtn_vie_options_remove_mark_both; } - }; - } - -//---------------------------------------------------- -// -// r_vei_cut_video_msk_menu -// ?description -// -//---------------------------------------------------- -// - -RESOURCE MENU_PANE r_vei_cut_video_view_context_menu - { - items= - { - MENU_ITEM { command=EVeiCmdCutVideoViewContinue; txt=qtn_vie_options_resume; }, - MENU_ITEM { command=EVeiCmdCutVideoViewPlayMarked; txt=qtn_vie_options_play_marked; }, - MENU_ITEM { command=EVeiCmdCutVideoViewStop; txt=qtn_vie_options_stop; }, - MENU_ITEM { command=EVeiCmdCutVideoViewMarkIn; txt=qtn_vie_options_start_mark; }, - MENU_ITEM { command=EVeiCmdCutVideoViewMarkOut; txt=qtn_vie_options_end_mark; }, - MENU_ITEM { command=EVeiCmdCutVideoViewExit; txt=qtn_options_exit; } // not in UI spec - }; - } - - -//---------------------------------------------------- -// -// LIST QUERY (contents updated dynamically) -// -//---------------------------------------------------- -RESOURCE AVKON_LIST_QUERY r_vie_list_query -{ - items = - { - AVKON_LIST_QUERY_DLG_LINE - { - control = AVKON_LIST_QUERY_CONTROL - { - listtype = EAknCtSinglePopupMenuListBox; - heading = " "; - listbox = AVKON_LIST_QUERY_LIST - { - // array of items will be defined dynamically - }; - }; - } - }; -} - - - -//===================================================== -// -// ***** RESOURCE DIALOGS ***** -// -// -//===================================================== - -//---------------------------------------------------- -// -// r_vei_wait_note_with_cancel -// -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_wait_note_with_cancel - { - flags = EAknWaitNoteFlags; - buttons = R_AVKON_SOFTKEYS_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control= AVKON_NOTE - { - layout = EWaitLayout; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - animation = R_QGN_GRAF_WAIT_BAR_ANIM; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_vei_progress_note_with_cancel -// Progress note -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_progress_note_with_cancel - { - flags = EAknProgressNoteFlags; - buttons = R_AVKON_SOFTKEYS_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control = AVERELL_NOTE - { - layout = EProgressLayout; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_vei_progress_note -// Progress note -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_progress_note - { - flags = EAknProgressNoteFlags; - buttons = R_AVKON_SOFTKEYS_EMPTY; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control = AVERELL_NOTE - { - layout = EProgressLayout; - singular_label = qtn_vie_note_processing; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - }; - } - }; - } - - -//---------------------------------------------------- -// -// r_vie_confirmation_query -// Confirmation query -// -//---------------------------------------------------- -RESOURCE DIALOG r_vie_confirmation_query -{ - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_YES_NO; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_CONFIRMATION_QUERY - { - layout = EConfirmationQueryLayout; - label = " "; - }; - } - }; -} - -//===================================================== -// -// ***** SOFTKEYS ***** -// -// -//===================================================== - - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_options_back__play -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_options_back__play - { - buttons = - { - CBA_BUTTON - { - id=EAknSoftkeyOptions; - txt = text_softkey_option; - }, - CBA_BUTTON - { - id=EAknSoftkeyBack; - txt = text_softkey_back; - }, - CBA_BUTTON - { - id=EVeiCmdCutVideoViewPlay; - txt = qtn_msk_play; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_options_back__menu -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_options_back__menu - { - buttons = - { - CBA_BUTTON - { - id=EAknSoftkeyOptions; - txt = text_softkey_option; - }, - CBA_BUTTON - { - id=EAknSoftkeyBack; - txt = text_softkey_back; - }, - CBA_BUTTON - { - id=EAknSoftkeyContextOptions; - txt = text_softkey_option; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_options_cut__play -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_options_cut__play - { - buttons = - { - CBA_BUTTON - { - id=EAknSoftkeyOptions; - txt = text_softkey_option; - }, - CBA_BUTTON - { - id=EVeiCmdCutVideoViewCut; - txt = qtn_vie_softkey_cut_done; - }, - CBA_BUTTON - { - id=EVeiCmdCutVideoViewPlay; - txt = qtn_msk_play; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_options_cut__menu -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_options_cut__menu - { - buttons = - { - CBA_BUTTON - { - id=EAknSoftkeyOptions; - txt = text_softkey_option; - }, - CBA_BUTTON - { - id=EVeiCmdCutVideoViewCut; - txt = qtn_vie_softkey_cut_done; - }, - CBA_BUTTON - { - id=EAknSoftkeyContextOptions; - txt = text_softkey_option; - } - }; - } - - -// end - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_stop_out__menu -// CBA for options/out softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_stop_out__menu //6 - { - buttons = - { - CBA_BUTTON - { - id=EVeiCmdCutVideoViewStop; - txt = text_softkey_stop; - }, - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkOut; - txt = qtn_vie_softkey_end_mark; - }, - CBA_BUTTON - { - id=EAknSoftkeyContextOptions; - txt = text_softkey_option; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_none_out__menu -// CBA for options/out softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_none_out__menu - { - buttons = - { - CBA_BUTTON - { - id=EVeiCmdCutVideoViewNone; - }, - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkOut; - txt = qtn_vie_softkey_end_mark; - }, - CBA_BUTTON - { - id=EAknSoftkeyContextOptions; - txt = text_softkey_option; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_in_out__menu -// CBA for in out menu softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_in_out__menu //5 - { - buttons = - { - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkIn; - txt = qtn_vie_softkey_start_mark; - }, - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkOut; - txt = qtn_vie_softkey_end_mark; - }, - CBA_BUTTON - { - id=EAknSoftkeyContextOptions; - txt = text_softkey_option; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_in_stop__menu -// CBA for options/out softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_in_stop__menu //4 - { - buttons = - { - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkIn; - txt = qtn_vie_softkey_start_mark; - }, - CBA_BUTTON - { - id=EVeiCmdCutVideoViewStop; - txt = text_softkey_stop; - }, - CBA_BUTTON - { - id=EAknSoftkeyContextOptions; - txt = text_softkey_option; - } - }; - } - -//---------------------------------------------------- -// -// r_videoeditor_softkeys_in_none__menu -// CBA for options/out softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_in_none__menu - { - buttons = - { - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkIn; - txt = qtn_vie_softkey_start_mark; - }, - CBA_BUTTON - { - id=EVeiCmdCutVideoViewNone; - }, - CBA_BUTTON - { - id=EAknSoftkeyContextOptions; - txt = text_softkey_option; - } - }; - } - -//---------------------------------------------------- -// -// r_vei_softkeys_options_out__menu -// CBA for options/out softkeys -// -//---------------------------------------------------- -// -RESOURCE CBA r_vei_softkeys_options_out__menu - { - buttons = - { - CBA_BUTTON - { - id=EAknSoftkeyOptions; - txt = text_softkey_option; - }, - CBA_BUTTON - { - id = EVeiCmdCutVideoViewMarkOut; - txt = qtn_vie_softkey_end_mark; - }, - CBA_BUTTON - { - id=EAknSoftkeyContextOptions; - txt = text_softkey_option; - } - }; - } - - -// ============================== NOTE STRINGS ================================ - -// Time navi pane string (formats the shown time) -RESOURCE TBUF64 r_vei_navi_time { buf = "%0U/%1U";} - -// -// PROGRESS NOTE -// -RESOURCE TBUF r_vei_progress_note_saving { buf = qtn_gen_note_saving; } -RESOURCE TBUF r_vei_progress_note_cut { buf = qtn_vie_note_processing; } -RESOURCE TBUF r_vei_progress_note_cutting_video { buf = qtn_fldr_file_saving_wait; } -RESOURCE TBUF r_vei_progress_note_saving_image { buf = qtn_fldr_file_saving_wait; } -RESOURCE TBUF r_vei_progress_note_processing { buf = qtn_vie_note_processing; } - -RESOURCE TBUF r_vei_not_enough_space { buf = qtn_memlo_not_enough_memory; } -RESOURCE TBUF r_vei_memory_running_out { buf = qtn_memlo_memory_running_out; } -RESOURCE TBUF r_ved_mmc_not_inserted { buf = qtn_vie_note_mmc_not_accessible_mass_storage; } -RESOURCE TBUF r_vei_video_failed { buf = qtn_vie_note_err_edit; } - -RESOURCE TBUF r_vei_opening { buf = qtn_gen_note_opening; } - -// SETTINGS -RESOURCE TBUF128 r_vei_settings_view_settings_item2_value { buf = qtn_vie_default_name_snapshot; } - -// QUERY STRINGS -RESOURCE TBUF r_vie_query_heading_save { buf = qtn_vie_query_heading_save; } -RESOURCE TBUF r_vie_query_save_new { buf = qtn_vie_query_save_new; } -RESOURCE TBUF r_vie_query_save_replace { buf = qtn_vie_query_save_replace; } -RESOURCE TBUF r_vie_query_save_changes { buf = qtn_vie_query_conf_save_changes;} - - -//---------------------------------------------------- -// -// r_wait_dialog -// animated progress note -// -//---------------------------------------------------- -RESOURCE DIALOG r_wait_dialog -{ - flags = EAknWaitNoteFlags; - buttons = R_AVKON_SOFTKEYS_CANCEL; -} - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/data/VedSimpleCutVideo_caption.rss --- a/videditor/SimpleCutVideo/data/VedSimpleCutVideo_caption.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "VedSimpleCutVideo.loc" -#include - -RESOURCE CAPTION_DATA -{ - caption=qtn_app_caption_string; - shortcaption=qtn_app_short_caption_string; -} diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/data/VedSimpleCutVideo_reg.rss --- a/videditor/SimpleCutVideo/data/VedSimpleCutVideo_reg.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include -#include - -UID2 KUidAppRegistrationResourceFile -UID3 0x200009DF - -RESOURCE APP_REGISTRATION_INFO - { - app_file="VedSimpleCutVideo"; - localisable_resource_file = APP_RESOURCE_DIR"\\VedSimpleCutVideo"; - localisable_resource_id = R_VSC_LOCALISABLE_APP_INFO; - hidden = KAppIsHidden; - embeddability = KAppEmbeddable; - launch = KAppLaunchInForeground; - } diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/data/qgn_menu_ve_cxt.svg --- a/videditor/SimpleCutVideo/data/qgn_menu_ve_cxt.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/group/VedSimpleCutVideo.mmp --- a/videditor/SimpleCutVideo/group/VedSimpleCutVideo.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// To get the APP_LAYER_SYSTEMINCLUDE-definition -#include - -#include -#include "../../Group/buildconfig.hrh" - -#if defined( __DEBUG_ON__ ) -MACRO DEBUG_ON -#endif -#if defined( __DEBUG_ON_ALWAYS__ ) -MACRO DEBUG_ON_ALWAYS -#endif -#if defined(__DEBUG_ON__) || defined(__DEBUG_ON_ALWAYS__) -LIBRARY flogger.lib -#endif - -#if defined (__GET_PAUSE_THUMBNAIL__) -MACRO GET_PAUSE_THUMBNAIL -#endif - -TARGET VedSimpleCutVideo.exe -TARGETTYPE exe -UID 0x100039CE 0x200009DF -CAPABILITY CAP_APPLICATION -SECUREID 0x200009DF -VENDORID VID_DEFAULT - -EPOCSTACKSIZE 0x8000 -EPOCHEAPSIZE 0x100000 0x1600000 - -SOURCEPATH ../src -SOURCE VeiSimpleCutVideoApp.cpp -SOURCE VeiSimpleCutVideoAppUi.cpp -SOURCE VeiSimpleCutVideoDocument.cpp -SOURCE VeiSimpleCutVideoView.cpp -SOURCE VeiSimpleCutVideoContainer.cpp -SOURCE veinavipanecontrol.cpp - -START RESOURCE ../data/VedSimpleCutVideo.rss -HEADER -TARGETPATH APP_RESOURCE_DIR -LANGUAGE_IDS -END - -START RESOURCE ../data/VedSimpleCutVideo_reg.rss -DEPENDS vedsimplecutvideo.rsg -TARGETPATH /private/10003a3f/apps -END - - -USERINCLUDE . -USERINCLUDE ../inc -USERINCLUDE ../../VideoEditorCommon/inc -USERINCLUDE ../../VideoEditorUiComponents/inc - -// Default system include paths for application layer modules. -APP_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE . -SYSTEMINCLUDE /epoc32/include/ECom -SYSTEMINCLUDE /epoc32/include/mda/client -SYSTEMINCLUDE /epoc32/include/mmf/server -SYSTEMINCLUDE /epoc32/include/mmf/common - -LIBRARY aknicon.lib -LIBRARY AknLayout2.lib -LIBRARY aknlayout2adaptation.lib -LIBRARY aknlayout2scalable.lib -LIBRARY aknskins.lib -LIBRARY apparc.lib -LIBRARY avkon.lib -LIBRARY bafl.lib -LIBRARY cdlengine.lib -LIBRARY CommonDialogs.lib -LIBRARY commonengine.lib //StringLoader -LIBRARY cone.lib -LIBRARY efsrv.lib -LIBRARY egul.lib -LIBRARY eikcoctl.lib -LIBRARY eikcore.lib -LIBRARY eikctl.lib -LIBRARY estor.lib //FOR settings view rreadstream -LIBRARY euser.lib -LIBRARY fbscli.lib -LIBRARY featmgr.lib -LIBRARY gdi.lib -LIBRARY hlplch.lib -LIBRARY ImageConversion.lib //image conversion -LIBRARY MediaClientAudio.lib -LIBRARY MediaClientVideo.lib -LIBRARY PlatformEnv.lib //volume settings, pathinfos -LIBRARY sysutil.lib -LIBRARY VedEngine.lib -LIBRARY VideoEditorCommon.lib -LIBRARY VideoEditorUiComponents.lib -LIBRARY ws32.lib -LIBRARY apgrfx.lib - -#ifdef RD_TACTILE_FEEDBACK -LIBRARY touchfeedback.lib -#endif /* RD_TACTILE_FEEDBACK */ - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/group/bld.inf --- a/videditor/SimpleCutVideo/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Build information file for Simple Cut Video. -* -*/ - - -#include - -#include "../../Group/buildconfig.hrh" - -PRJ_PLATFORMS -DEFAULT - -// Help export -#include "../help/group/bld.inf" - -// Exported headers -PRJ_EXPORTS -../rom/SimpleCutVideo.iby CORE_APP_LAYER_IBY_EXPORT_PATH(SimpleCutVideo.iby) -../rom/SimpleCutVideo_resource.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(SimpleCutVideo_resource.iby) - -// ROM build files -PRJ_MMPFILES -VedSimpleCutVideo.mmp - -PRJ_EXTENSIONS - -START EXTENSION s60/mifconv -OPTION TARGETFILE VedSimpleCutVideo_aif.MIF -OPTION HEADERFILE VedSimpleCutVideo_aif.MBG -OPTION SOURCEDIR ../data -OPTION SOURCES -c8,8 qgn_menu_ve_cxt -END - -PRJ_TESTMMPFILES - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/help/data/xhtml.zip Binary file videditor/SimpleCutVideo/help/data/xhtml.zip has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/help/group/bld.inf --- a/videditor/SimpleCutVideo/help/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Export help related files. -* -*/ - -#include -PRJ_EXPORTS -:zip ../data/xhtml.zip /epoc32/data/z/resource/ overwrite -:zip ../data/xhtml.zip /epoc32/winscw/c/resource/ overwrite - -../inc/vided.hlp.hrh MW_LAYER_PLATFORM_EXPORT_PATH(csxhelp/vided.hlp.hrh) -../rom/simplecutvideohelps_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(simplecutvideohelps_variant.iby) diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/help/inc/vided.hlp.hrh --- a/videditor/SimpleCutVideo/help/inc/vided.hlp.hrh Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -// -// vided.hlp.hrh -// - -// -// File generated by CSXHelp Utilities on 2008-08-12 -// - -#ifndef __VIDED_HLP_HRH__ -#define __VIDED_HLP_HRH__ - -_LIT(KVIE_HLP_CUT, "VIE_HLP_CUT"); // - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/help/rom/simplecutvideohelps_variant.iby --- a/videditor/SimpleCutVideo/help/rom/simplecutvideohelps_variant.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - -#ifndef __SIMPLECUTVIDEOHELPS_VARIANT_IBY__ -#define __SIMPLECUTVIDEOHELPS_VARIANT_IBY__ - -#if defined(FF_S60_HELPS_IN_USE) - data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10208A29\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x10208A29\contents.zip) - data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10208A29\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10208A29\index.xml) - data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10208A29\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10208A29\keywords.xml) - data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x10208A29\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x10208A29\meta.xml) -#endif - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/VedSimpleCutVideo.hrh --- a/videditor/SimpleCutVideo/inc/VedSimpleCutVideo.hrh Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEDSIMPLECUTVIDEO_HRH -#define VEDSIMPLECUTVIDEO_HRH - -enum TVeijoCommandIds - { - EVeiCmdHelp = 1, -/* Cut video */ - EVeiCmdCutVideoViewPlay, - EVeiCmdCutVideoViewPlayMarked, - EVeiCmdCutVideoViewClearMarks, - EVeiCmdCutVideoViewClearMarksIn, - EVeiCmdCutVideoViewClearMarksOut, - EVeiCmdCutVideoViewClearMarksInOut, - EVeiCmdCutVideoViewHelp, - EVeiCmdCutVideoViewBack, - EVeiCmdCutVideoViewDone, - EVeiCmdCutVideoViewMarkIn, - EVeiCmdCutVideoViewMarkOut, - EVeiCmdCutVideoViewContinue, - EVeiCmdCutVideoViewStop, - EVeiCmdCutVideoVolumeDown, - EVeiCmdCutVideoVolumeUp, - EVeiCmdCutVideoTakeSnapshot, - EVeiCmdPlayPreview, - EVeiCmdSettingsViewBack, - EVeiCmdPlayViewPause, - EVeiCmdPlayViewStop, - EVeiCmdEditVideoViewPreview, - EVeiCmdEditVideoViewTrimForMms, - EVeiCmdEditVideoViewPreviewLarge, - EVeiCmdEditVideoViewPreviewSmall, - EVeiCmdEditVideoViewMovie, - EVeiCmdEditVideoViewInsert, - EVeiCmdEditVideoViewSettings, - EVeiCmdEditVideoViewInsertVideo, - EVeiCmdEditVideoViewInsertAudio, - EVeiCmdEditVideoViewInsertImage, - EVeiCmdEditVideoViewInsertText, //32 - EVeiCmdCutVideoViewCut, - EVeiCmdCutVideoViewSave, - EVeiCmdCutVideoViewNone, - EVeiCmdCutVideoViewExit - }; - - - // Video Editor view IDs. -enum TVeiViewIds - { - EVeiSimpleCutVideoView - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/VeiSimpleCutVideoApp.h --- a/videditor/SimpleCutVideo/inc/VeiSimpleCutVideoApp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef VEDSIMPLECUTVIDEOAPP_H -#define VEDSIMPLECUTVIDEOAPP_H - -// INCLUDES -// System includes -#include - -// CLASS DECLARATION - -/** - * CVeiApp application class. - * Provides factory to create concrete document object. - */ -class CVeiSimpleCutVideoApp : public CAknApplication - { - - public: // Functions from base classes - private: - - /** - * From CApaApplication, creates CVeiDocument document object. - * @return A pointer to the created document object. - */ - CApaDocument* CreateDocumentL(); - - /** - * From CApaApplication, returns application's UID (KUidveijo). - * @return The value of KUidveijo. - */ - TUid AppDllUid() const; - - CDictionaryStore* OpenIniFileLC(RFs& aFs) const; - - }; - -#endif - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/VeiSimpleCutVideoAppUi.h --- a/videditor/SimpleCutVideo/inc/VeiSimpleCutVideoAppUi.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,146 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef VEDSIMPLECUTVIDEOAPPUI_H -#define VEDSIMPLECUTVIDEOAPPUI_H - -// INCLUDES -// System includes -#include -#include -#include -#include -#include -#include -#include -#include "VeiSettings.h" -#include "VideoEditorDebugUtils.h" - -// FORWARD DECLARATIONS -class CVeiSimpleCutVideoView; -class CEikAppUi; - - -/** -* Application UI class. -* Provides support for the following features: -* - EIKON control architecture -* - view architecture -* - status pane -* -*/ -class CVeiSimpleCutVideoAppUi : public CAknViewAppUi - - { - public: // // Constructors and destructor - - /** - * Default constructor. - */ - void ConstructL(); - - /** - * Destructor. - */ - ~CVeiSimpleCutVideoAppUi(); - - public: // New functions - inline TInt GetVolumeLevel() { return iVolume; }; - - inline void SetVolumeLevel( TInt aVolume ) { iVolume=aVolume; }; - - void CutVideoL( TBool aDoOpen, const RFile& aFile ); - - CVeiSimpleCutVideoAppUi(); - - void Exit(); - - /** - * Reads application settings data from ini-file. - * - * @param aSettings Settings data where values are read. - */ - void ReadSettingsL( TVeiSettings& aSettings ) const; - - /** - * Writes application settings data to ini-file. - * - * @param aSettings Settings data where values are written. - */ - void WriteSettingsL( const TVeiSettings& aSettings ); - - inline TBool AppIsOnTheWayToDestruction() { return iOnTheWayToDestruction; }; - - private: - /** - * From CEikAppUi, takes care of command handling. - * @param aCommand command to be handled - */ - void HandleCommandL(TInt aCommand); - - /** - * From CEikAppUi, handles key events. - * @param aKeyEvent Event to handled. - * @param aType Type of the key event. - * @return Response code (EKeyWasConsumed, EKeyWasNotConsumed). - */ - virtual TKeyResponse HandleKeyEventL( - const TKeyEvent& aKeyEvent,TEventCode aType); - - /** - * From CAknAppUiBase. - * Calls CAknViewAppUi::HandleScreenDeviceChangedL(). - */ - virtual void HandleScreenDeviceChangedL(); - - /** - * From @c CEikAppUi. Handles a change to the application's resources which - * are shared across the environment. This function calls - * @param aType The type of resources that have changed. - */ - virtual void HandleResourceChangeL(TInt aType); - - /** - * From CAknAppUi, HandleForegroundEventL( TBool aForeground ) - * @param aForeground - */ - virtual void HandleForegroundEventL( TBool aForeground ); - - // From MMGXFileNotificationObserver - virtual void HandleFileNotificationEventL(); - - private: //Data - - CVeiSimpleCutVideoView* iSimpleCutVideoView; - - /** - * Common volume setting. - */ - TInt iVolume; - - TProcessPriority iOriginalProcessPriority; - TBool iProcessPriorityAltered; - - TBool iOnTheWayToDestruction; - }; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/VeiSimpleCutVideoContainer.h --- a/videditor/SimpleCutVideo/inc/VeiSimpleCutVideoContainer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,560 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEICUTVIDEOCONTAINER_H -#define VEICUTVIDEOCONTAINER_H - -#include -#include -#include -#include -#include -#include - -#include "VeiVideoDisplay.h" -#include "VeiImageConverter.h" -#include "VeiRemConTarget.h" -#include "mveinavipanecontrolobserver.h" - - -class CVeiSimpleCutVideoView; -class CVeiCutterBar; -class CAknsBasicBackgroundControlContext; -class CVeiErrorUI; -class CVeiVideoDisplay; -class CVeiTextDisplay; -#ifdef RD_TACTILE_FEEDBACK -class MTouchFeedback; -#endif /* RD_TACTILE_FEEDBACK */ - -//const TInt KMinVolumeLevel = 1; -const TInt KVeiCutBarHeight = 20; -const TInt KProgressbarFinalValue = 50; -_LIT(KEncoderType, "JPEG" ); // encoder type for image conversion - -/** - * CVeiSimpleCutVideoContainer container control class. - * - * Container for CVeiSimpleCutVideoView. - */ -class CVeiSimpleCutVideoContainer : public CCoeControl, - public MCoeControlObserver, - public MVedVideoClipFrameObserver, - public MVedVideoClipInfoObserver, - public MConverterController, - public MProgressDialogCallback, - public MVeiVideoDisplayObserver, - public MVeiMediakeyObserver, - public MVeiNaviPaneControlObserver - { - public: - /** - * Edit state. - */ - enum TCutVideoState - { - EStateInitializing = 1, - EStateOpening, - EStateStoppedInitial, - EStateStopped, - EStatePlaying, - EStatePlayingMenuOpen, - EStatePaused, - EStateGettingFrame, - EStateBuffering, - EStateTerminating - }; - - /** - * Start or end mark. - */ - enum TCutMark - { - ENoMark, - EStartMark, - EEndMark, - EPlayHead - }; - - public: - /** - * Creates a CVeiSimpleCutVideoContainer object, which will draw itself to aRect. - * - * @param aRect Frame rectangle for container. - * @param aView - * - * @return a pointer to the created instance of CStoryboardContainer - */ - static CVeiSimpleCutVideoContainer* NewL( const TRect& aRect, CVeiSimpleCutVideoView& aView, CVeiErrorUI& aErrorUI ); - - /** - * Creates a CVeiSimpleCutVideoContainer object, which will draw itself to aRect. - * Leaves the created object in the cleanup stack. - * - * @param aRect Frame rectangle for container. - * @param aMovie movie being edited - * - * @return a pointer to the created instance of CStoryboardContainer - */ - static CVeiSimpleCutVideoContainer* NewLC( const TRect& aRect, CVeiSimpleCutVideoView& aView, CVeiErrorUI& aErrorUI ); - - /** - * Default constructor. - * - * @param aRect Frame rectangle for container. - * @param aView pointer to the view. - */ - void ConstructL(const TRect& aRect, CVeiSimpleCutVideoView& aView, CVeiErrorUI& aErrorUI ); - - /** - * Destructor. - */ - virtual ~CVeiSimpleCutVideoContainer(); - - public: - /** - * Takes one thumbnail bitmap from given file. - * - * @param aFilename name of video clip file - */ - void GetThumbL( const TDesC& aFilename ); - - /** - * ###Missin' description### - * - * @param aState - */ - void SetStateL( CVeiSimpleCutVideoContainer::TCutVideoState aState, TBool aUpdateCBA = ETrue); - /** - * Starts playing. - * - * @param aStartTime - */ - void PlayL( const TDesC& aFilename ); - void PlayMarkedL( const TDesC& aFilename, - const TTimeIntervalMicroSeconds& aStartTime, - const TTimeIntervalMicroSeconds& aEndTime ); - /** - * Stops playing. - */ - void StopL(); - - /** - * Pauses playing. - */ - void PauseL( TBool aUpdateCBA = ETrue ); - - /** - * Closes the stream. - */ - void CloseStreamL(); - - /** - * Returns the playback position. - * - * @return playback position - */ - TTimeIntervalMicroSeconds PlaybackPositionL(); - - /** - * Marks the in point. - */ - void MarkedInL(); - - /** - * Marks the out point. - */ - void MarkedOutL(); - - /** - * Sets cut in time to cut video bar. - * - * @param aTime Cut ín time - */ - void SetInTime( const TTimeIntervalMicroSeconds& aTime ); - - /** - * Sets cut out time to cut video bar. - * - * @param aTime Cut out time - */ - void SetOutTime( const TTimeIntervalMicroSeconds& aTime ); - - /** - * Takes the snapshot from current frame - */ - void TakeSnapshotL(); - - void MuteL(); - public: - - /** - * Update function that is called by the static callback method. - */ - void DoUpdate(); - // from MVeiVideoDisplayObserver - virtual void NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo = 0 ); - - virtual void NotifyVideoClipFrameCompleted(CVedVideoClipInfo& aInfo, - TInt aError, - CFbsBitmap* aFrame); - /** - * Called to notify that video clip info is ready - * for reading. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - * @param aInfo video clip info - * @param aError KErrNone if info is ready - * for reading; one of the system wide - * error codes if reading file failed - */ - virtual void NotifyVideoClipInfoReady(CVedVideoClipInfo& aInfo, - TInt aError); - - /** - * From CCoeControl, OfferKeyEventL. - * - * @param aKeyEvent key event - * @param aType event code - */ - TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); - - /** - * From MProgressDialogCallback, DialogDismissedL. - * - * @param aButtonId button id - */ - virtual void DialogDismissedL( TInt aButtonId ); - - /** - * Opens a video clip file and initializes videoplayerutility. - * - * @param aFilename file to open - */ - void OpenFileL( const TDesC& aFilename/*, TBool aStartPlaying = EFalse */); - - /** - * Prepares the control for termination; stops video playback - * and sets the state to EStateTerminating. - * - */ - void PrepareForTerminationL(); - - // From MConverterController - void NotifyCompletion( TInt aErr ); - - void ResolveCaptionNameL( TApaAppCaption& aCaption ) const; - - void FocusChanged(TDrawNow aDrawNow); - - private: - /** - * Callback function for the timer. - * - * @param aThis self pointer - * - * @return dummy value - */ - static TInt DoAudioBarUpdate( TAny* aThis ); - - /** - * Time increment. - * - * @param aKeyCount number a key events - * @return time - */ - TInt TimeIncrement( TInt aKeyCount ) const; - - /** - * Constructor. - * - * @param aView instance of cut video view - * @param aErrorUI instance of CVeiErrorUI - */ - CVeiSimpleCutVideoContainer( const TRect& aRect, CVeiSimpleCutVideoView& aView, CVeiErrorUI& aErrorUI ); - - /** - * Gets intra frame bitmap from video clip. - * - * @param aTime intra frame time. - */ - void GetThumbAtL( const TTimeIntervalMicroSeconds& aTime ); - - /** - * From CoeControl, MopSupplyObject. - * - * @param aId - */ - virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); - - /** - * From CoeControl, SizeChanged. - */ - void SizeChanged(); - - /** - * From CoeControl, CountComponentControls. - * - * @return number of component controls in this control - */ - TInt CountComponentControls() const; - - /** - * From CCoeControl, ComponentControl. - * - * @param aIndex index of the control to return - */ - CCoeControl* ComponentControl(TInt aIndex) const; - - /** - * From CCoeControl,Draw. - * - * @param aRect region of the control to be redrawn - */ - void Draw(const TRect& aRect) const; - - /** - * From CCoeControl, gets the control's help context. Associates the - * control with a particular Help file and topic in a context sensitive - * application. - * - * @param aContext Control's help context. - */ - void GetHelpContext( TCoeHelpContext& aContext ) const; - - /** - * From CCoeControl, HandleControlEventL - */ - void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); - - /** - * HandlePointerEventL - * Handles pen inputs - * - * @param aPointerEvent pointer event - */ - void HandlePointerEventL(const TPointerEvent& aPointerEvent ); - - /** - * Handles progress bar touch events - * @param aPBRect Current progress bar rectangle - * @param aPressedPoint The x coordinate value that was pressed - * inside the progress bar - * @param aDragMarks ETrue if the user drags start or end marks. - * EFalse otherwise - */ - void HandleProgressBarTouchL( TRect aPBRect, TInt aPressedPoint, TBool aDragMarks, CVeiSimpleCutVideoContainer::TCutMark aCutMark = ENoMark ); - - /** - * Rounds the parameter value to nearest second value - * @param aMicroSecs Time value in microseconds - * @return Rounded value in seconds - */ - TInt RoundMicroSecsToSecs( TTimeIntervalMicroSeconds aMicroSecs ); - - /* - * Indicates ProgressNote. - * - */ - void ShowProgressNoteL(); - - /** - * Shows information note with given message. - * - * @param aMessage message to show. - */ - void ShowInformationNoteL( const TDesC& aMessage ) const; - - /** - * The entity of ProgressCallBackL() function - * @return 0 when work is done, otherwise return 1. - */ - TInt UpdateProgressNote(); - - /** - * Saves snapshot. - */ - void SaveSnapshotL(); - - /** - * Cancels saving of the snapshot. - */ - void CancelSnapshotSave(); - - void StopProgressDialog(); - - void ShowGlobalErrorNote(const TInt aErr); - - /** HandleVolumeUpL - * - * @see MVeiMediakeyObserver - */ - virtual void HandleVolumeUpL(); - - /** - * From MVeiNaviPaneControlObserver - */ - void SetVolumeLevelL( TInt aVolume ); - - /** HandleVolumeDownL - * - * @see MVeiMediakeyObserver - */ - virtual void HandleVolumeDownL(); - - /** Callback function */ - static TInt AsyncTakeSnapshot(TAny* aThis); - /** Callback function */ - static TInt AsyncSaveSnapshot(TAny* aThis); - - /** LaunchSavingDialogsL - * - * Displays Avkon file handling queries - * - * @param - * @return ETrue if a file name is successfully created - * EFalse otherwise - * - */ - TBool LaunchSavingDialogsL(); - - protected: - // implementation - void HandleVideoClickedL(); - - private: //data - /** cut video view */ - CVeiSimpleCutVideoView& iView; - - /** Error UI */ - CVeiErrorUI& iErrorUI; - - /** Video clip info*/ - CVedVideoClipInfo* iVideoClipInfo; - - /** Current state. */ - TCutVideoState iState; - - /** Previous state. */ - TCutVideoState iPreviousState; - - /** Previous state. */ - TCutVideoState iPrevState; - - /** cut video bar. */ - CVeiCutterBar* iCutVideoBar; - - /** Last position. */ - TTimeIntervalMicroSeconds iLastPosition; - - /** Video clip duration */ - TTimeIntervalMicroSeconds iDuration; - - /** - * Control context that provides a layout background with a - * background bitmap and its layout rectangle. - */ - CAknsBasicBackgroundControlContext* iBgContext; - - /** Key repeat count in seek function. */ - TInt iKeyRepeatCount; - - /** Seek thumbnail position in video clip. */ - TTimeIntervalMicroSeconds iSeekPos; - - /** Seek - flag. */ - TBool iSeeking; - - /** Frame ready - flag */ - TBool iFrameReady; - - /** Last keycode, used in OfferKeyEventL(); */ - TUint iLastKeyCode; - - /** The actuall calls to ICL are done from this image converter. */ - CVeiImageConverter* iConverter; - - //** Whether we need to take snapshot. */ - TBool iTakeSnapshot; - - /** Progress dialog */ - CAknProgressDialog* iProgressDialog; - - HBufC* iSaveToFileName; - TSize iFrameSize; - CPeriodic* iVideoBarTimer; - CVeiVideoDisplay* iVideoDisplay; - TRect iDisplayRect; - TRect iCutTimeDisplayRect; - CVeiTextDisplay* iCutTimeDisplay; - TBool iPlayOrPlayMarked; - - TRect iIconDisplayRect; - CFbsBitmap* iPauseBitmap; - CFbsBitmap* iPauseBitmapMask; - CFbsBitmap* iPlayBitmap; - CFbsBitmap* iPlayBitmapMask; - - /** Callback utility */ - CAsyncCallBack* iCallBackSaveSnapshot; - CAsyncCallBack* iCallBackTakeSnapshot; - - /** Remote connection API used to handle the volume keys. */ - CVeiRemConTarget* iRemConTarget; - - TBool iTakeSnapshotWaiting; - - /** ETrue if user is dragging the start or end mark with a pen, - EFalse otherwise */ - TBool iIsMarkDrag; - - /** ETrue if the pen is in start or end mark area when it goes down, - EFalse otherwise */ - TBool iIsMarkTapped; - - /** ETrue if the pen is in display area or in play/pause button area - when it goes down, EFalse otherwise */ - TBool iIsIconOrDisplayTapped; - - /** Indicates which mark the user has tapped */ - TCutMark iTappedMark; - - /// Point where button down event has occured. - TPoint iButtonDownPoint; - - /** File name that is used when saving the snapshot */ - TFileName iSnapshotFileName; - - // Feedback for screen touch: -#ifdef RD_TACTILE_FEEDBACK - MTouchFeedback* iTouchFeedBack; -#endif /* RD_TACTILE_FEEDBACK */ - -#include "veicutvideocontainer.inl" - - }; -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/VeiSimpleCutVideoContainer.inl --- a/videditor/SimpleCutVideo/inc/VeiSimpleCutVideoContainer.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEICUTVIDEOCONTAINER_INL__ -#define __VEICUTVIDEOCONTAINER_INL__ - -public: - /** - * Returns total length of the video clip. - * - * @return total length - */ - inline TTimeIntervalMicroSeconds TotalLength() { return iDuration; }; - - /** - * Returns the player state. - * - * @return player state - */ - inline TCutVideoState State() { return iState; }; - /** - * Returns current volume level. - * - * @return volume level - */ - inline TInt Volume() const { return iInternalVolume; }; - - /** - * Returns minimum volume level. - * - * @return min volume level - */ - inline TInt MinVolume() const { return KMinVolumeLevel; }; - - /** - * Returns maximum volume level. - * - * @return max volume level - */ - inline TInt MaxVolume() const { return KMaxVolumeLevel; }; - /** - * Change volume level. Changes current volume level to given level. - * - * @param aVolumeLevel new volume level - */ - inline void SetVolume( TInt aVolumeLevel ) { iInternalVolume = aVolumeLevel; }; - -#endif // __VEICUTVIDEOCONTAINER diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/VeiSimpleCutVideoDocument.h --- a/videditor/SimpleCutVideo/inc/VeiSimpleCutVideoDocument.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEDSIMPLECUTVIDEODOCUMENT_H -#define VEDSIMPLECUTVIDEODOCUMENT_H - -// INCLUDES -#include -#include - -// CONSTANTS - -// FORWARD DECLARATIONS -class CEikAppUi; - -// CLASS DECLARATION - -/** -* CVeiDocument application class. -*/ -class CVeiSimpleCutVideoDocument : public CAknDocument - { - public: // Constructors and destructor - /** - * Two-phased constructor. - */ - static CVeiSimpleCutVideoDocument* NewL(CEikApplication& aApp); - - //CFileStore* OpenFileL(TBool aDoOpen,const TDesC& aFilename,RFs& aFs); - //void OpenFileL(TBool aDoOpen , RFile& aFile); - void OpenFileL( CFileStore*& aFileStore, RFile& aFile ); - - /** - * Destructor. - */ - virtual ~CVeiSimpleCutVideoDocument(); - - private: - - /** - * Default constructor. - */ - CVeiSimpleCutVideoDocument(CEikApplication& aApp); - void ConstructL(); - - private: - - /** - * From CEikDocument, create CVeiAppUi "App UI" object. - */ - CEikAppUi* CreateAppUiL(); - - private: // Data - }; - -#endif - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/VeiSimpleCutVideoView.h --- a/videditor/SimpleCutVideo/inc/VeiSimpleCutVideoView.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,472 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEISIMPLECUTVIDEOVIEW_H -#define VEISIMPLECUTVIDEOVIEW_H - - -#include -#include -#include -#include -#include -#include -#include "extprogressdialog.h" -#include "VeiSimpleCutVideoContainer.h" - -//class CAknTitlePane; -class CPeriodic; -class CVeiErrorUI; -class CAknMemorySelectionDialog; -class CVeiTempMaker; -class CVeiNaviPaneControl; - - -/** -* CVeiCutVideoView view class. -* -*/ -class CVeiSimpleCutVideoView : public CAknView, public MVedMovieObserver, - public MVedMovieProcessingObserver, - public MProgressDialogCallback, - public MExtProgressDialogCallback - { - public: - - /** - * Default constructor. - */ - void ConstructL(); - - /** - * Destructor. - */ - virtual ~CVeiSimpleCutVideoView(); - - protected: - - /** - * From CAknView, HandleForegroundEventL( TBool aForeground ) - * - * @param aForeground - */ - virtual void HandleForegroundEventL( TBool aForeground ); - - private: - - /** - * From CAknView, DynInitMenuPaneL. - * - * @param aResourceId resource id - * @param aMenuPane menu pane - */ - void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane); - - /** - * From MVedMovieProcessingObserver - */ - virtual void NotifyMovieProcessingStartedL(CVedMovie& aMovie); - virtual void NotifyMovieProcessingProgressed(CVedMovie& aMovie, TInt aPercentage); - virtual void NotifyMovieProcessingCompleted(CVedMovie& aMovie, TInt aError); - - /** - * From MVedMovieObserver - */ - virtual void NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ); - virtual void NotifyVideoClipAddingFailed( CVedMovie& aMovie, TInt aError ); - virtual void NotifyVideoClipRemoved( CVedMovie& aMovie, TInt aIndex ); - virtual void NotifyVideoClipIndicesChanged( CVedMovie& aMovie, TInt aOldIndex, - TInt aNewIndex ); - virtual void NotifyVideoClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - virtual void NotifyVideoClipColorEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - virtual void NotifyVideoClipAudioSettingsChanged( CVedMovie& aMovie, - TInt aIndex ); - virtual void NotifyStartTransitionEffectChanged( CVedMovie& aMovie ); - virtual void NotifyMiddleTransitionEffectChanged( CVedMovie& aMovie, - TInt aIndex ); - virtual void NotifyEndTransitionEffectChanged( CVedMovie& aMovie ); - virtual void NotifyAudioClipAdded( CVedMovie& aMovie, TInt aIndex ); - virtual void NotifyAudioClipAddingFailed( CVedMovie& aMovie, TInt aError ); - virtual void NotifyAudioClipRemoved( CVedMovie& aMovie, TInt aIndex ); - virtual void NotifyAudioClipIndicesChanged( CVedMovie& aMovie, TInt aOldIndex, - TInt aNewIndex ); - virtual void NotifyAudioClipTimingsChanged( CVedMovie& aMovie, - TInt aIndex ); - virtual void NotifyMovieReseted( CVedMovie& aMovie ); - - virtual void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie, TInt aIndex); - virtual void NotifyMovieQualityChanged(CVedMovie& aMovie); - - virtual void NotifyMovieOutputParametersChanged(CVedMovie& aMovie); - virtual void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - virtual void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - virtual void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - virtual void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - /** - * From MProgressDialogCallback - */ - void DialogDismissedL(TInt aButtonId); - - - public: - /** - * - * - * @return VeiSimpleCutVideoView Uid - */ - TUid Id() const; - - /** - * Starts temporary clip processing. - */ - void GenerateEffectedClipL(); - - /** - * From CAknView, HandleCommandL(TInt aCommand); - * - * @param aCommand - */ - void HandleCommandL(TInt aCommand); - - /** - * Draws the time label navi. - */ - void DrawTimeNaviL(); - - /** - * Clears the in and/or out points. - * - * @param aClearIn whether to clear the in point - * @param aClearOut whether to clear the out point - */ - void ClearInOutL( TBool aClearIn, TBool aClearOut ); - - /** - * Sets the movie and index - * - * @param aVideoClip movie name - * @param aIndex index of the video clip in movie - */ - void SetVideoClipAndIndex(CVedMovie& aVideoClip, TInt aIndex); - - /** - * Returns the cut out time. - * - * @return cut out time - */ - TUint OutPointTime(); - - /** - * Returns the cut in time. - * - * @return cut in time - */ - TUint InPointTime(); - - /** - * Changes the CBA (command button array) according to the edit - * state. - * - * @param aState current state - */ - void UpdateCBAL( TInt aState ); - - /** - * Updates the time label navi. This method is called by the - * static callback function. - */ - void UpdateTimeL(); - - /** - * Starts the navi pane update, that is, the periodic timer. - */ - void StartNaviPaneUpdateL(); - - /** - * Stops the navi pane update. - */ - void StopNaviPaneUpdateL(); - - /** - * - */ - void ShowVolumeLabelL( TInt aVolume ); - - /** - * Mutes the volume. - */ - void VolumeMuteL(); - - /** Possible mark states */ - enum TMarkState - { - EMarkStateIn, - EMarkStateOut, - EMarkStateInOut - }; - - void HandleStatusPaneSizeChange(); - - TInt AddClipL( const TDesC& aFilename, TBool aStartNow ); - - /** - * No description. - * - * - * @return No description. - */ - TBool IsEnoughFreeSpaceToSaveL();// const; - TTimeIntervalMicroSeconds GetVideoClipCutInTime(); - TTimeIntervalMicroSeconds GetVideoClipCutOutTime(); - - /** - * Handles a change to the control's resources. - */ - void HandleResourceChange( TInt aType ); - - /** - * Get pointer to the movie instance. - * - * @return CVedMovie* - */ - const CVedMovie* Movie() const; - - inline TBool AppIsOnTheWayToDestruction() { return iOnTheWayToDestruction; }; - - void PrepareForTermination(); - - inline TVeiSettings Settings() { return iMovieSaveSettings; }; - - /** - * Moves the start or end mark when user drags them. - * - * @param aPosition position where the mark is moved to - * @param aMarkType EStartMark or EEndMark - * @return - - */ - void MoveStartOrEndMarkL(TTimeIntervalMicroSeconds aPosition, CVeiSimpleCutVideoContainer::TCutMark aMarkType); - - private: - /** - * Starts playing the clip. If the clip is paused, resumes - * playing. - */ - void PlayPreviewL(); - - /** - * Pauses the playback. - */ - void PausePreviewL(); - - /** - * Plays the marked section of the clip. - */ - void PlayMarkedL(); - - /** - * Marks the in point to the current point. - */ - void MarkInL(); - - /** - * Marks the out point to the current point. - */ - void MarkOutL(); - - /** - * Static callback function for the periodical timer that updates - * the time navi. - * - * @param aPtr self pointer - * - * @return dummy value - */ - static TInt UpdateTimeCallbackL( TAny* aPtr ); - - TBool SaveL(); - void StartTempFileProcessingL(); - - /** - * Shows error note with given message. - * - * @param aResourceId No description. - * @param aError No description. - */ - void ShowErrorNoteL( const TInt aResourceId, TInt aError = 0 ) const; - - - void StartProgressNoteL(); - void StartAnimatedProgressNoteL(); - - /** - * Checks the memory card availability, if MMC is selected as save - * store in application settings. An information note is shown in - * following situations: - * - MMC not inserted - * - MMC corrupted (unformatted) - * [- MMC is read-only (not implemented)] - * - * If note is popped up, this function waits until it's dismissed. - */ - void CheckMemoryCardAvailabilityL(); - - private: - - void CloseWaitDialog(); - - /** - * From AknView, DoActivateL. - * - * @param aPrevViewId previous view id - * @param aCustomMessageId custom message id - * @param aCustomMessage custom message - */ - void DoActivateL(const TVwsViewId& aPrevViewId,TUid aCustomMessageId, - const TDesC8& aCustomMessage); - - /** - * From AknView, DoDeactivate - */ - void DoDeactivate(); - - /** Callback function */ - static TInt AsyncExit(TAny* aThis); - - - /** - * Sets the current file name as title pane text - * - * @param - - * @param . - */ - void SetTitlePaneTextL (); - - /** QueryAndSaveL - * - * Displays Avkon file handling queries and calls - * SaveL() - * - * @param - - * @return TInt 1 if the image has been saved, otherwise 0 - */ - TInt QueryAndSaveL(); - - TBool IsCutMarkSet(); - - private: // Data - /* cut video container */ - CVeiSimpleCutVideoContainer* iContainer; - - /* index of the video clip in the movie */ - TUint iIndex; - - /* movie */ - CVedMovie* iMovie; - - /** Time updater. */ - CPeriodic* iTimeUpdater; - - /** Progress note. */ - CAknProgressDialog* iProgressNote; - - /** Popup menu state flag */ - TBool iPopupMenuOpened; - - /** Audio muted flag */ - TBool iAudioMuted; - - /** current mark state */ - TMarkState iMarkState; - - /** Error number */ - TInt iErrorNmb; - - /** Error UI */ - CVeiErrorUI* iErrorUI; - - CAknMemorySelectionDialog::TMemory iMemoryInUse; - - TVeiSettings iMovieSaveSettings; - - /** - * Temporary file name for storing preview clip. - */ - HBufC* iTempFile; - - /** - * No description. - */ - HBufC* iSaveToFileName; - - /** - * No description. - */ - CVeiTempMaker* iTempMaker; - - - CAknWaitDialog* iWaitDialog; - - /** - * Progress dialog. - */ - CExtProgressDialog* iAnimatedProgressDialog; - - TBool iSaving; - - TBool iClosing; - - TInt iProcessed; - - /** Callback utility */ - CAsyncCallBack* iCallBack; - - TBool iOnTheWayToDestruction; - TBool iSelectionKeyPopup; - - /** Indicates if the image will be overwritten or not */ - TBool iOverWriteFile; - - /** Indicates if the video has been paused */ - TBool iPaused; - - /** ETrue if the user selects "Save" from menu */ - TBool iSaveOnly; - - /// Own: NaviPaneControl - CVeiNaviPaneControl* iCVeiNaviPaneControl; - - }; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/VeiSimpleCutVideoView.inl --- a/videditor/SimpleCutVideo/inc/VeiSimpleCutVideoView.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEIEDITVIDEOCONTAINER_INL__ -#define __VEIEDITVIDEOCONTAINER_INL__ - -public: - - - inline HBufC* TempFilename() { return iProcessedTempFile; }; - -#endif //__VEIEDITVIDEOCONTAINER_INL__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/VideoEditorHelp.hlp.hrh --- a/videditor/SimpleCutVideo/inc/VideoEditorHelp.hlp.hrh Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* This file contains all the Video Editor contextual help -* identifiers for the CSHelp system (implemented in -* HlpLauncher). -* -*/ - - - -#ifndef __VIDEOEDITORHELP_HLP_HRH__ -#define __VIDEOEDITORHELP_HLP_HRH__ - -// CONSTANTS -_LIT(KVED_HLP_EDIT_VIDEO_VIEW,"VED_HLP_EDIT_VIDEO_VIEW"); //Video editing view -_LIT(KVED_HLP_SETTINGS_VIEW,"VED_HLP_SETTINGS_VIEW"); //Settings view -_LIT(KVED_HLP_PREVIEW_VIEW,"VED_HLP_PREVIEW_VIEW"); //Play view -_LIT(KVED_HLP_CUT_VIDEO_VIEW,"VIE_HLP_CUT"); //Cut video view -_LIT(KVED_HLP_CUT_AUDIO_VIEW,"VED_HLP_CUT_AUDIO_VIEW"); //Cut audio view -_LIT(KVED_HLP_TRIM_FOR_MMS_VIEW,"VED_HLP_TRIM_FOR_MMS_VIEW"); //Trim video clip for MMS view - -#endif // __VIDEOEDITORHELP_HLP_HRH__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/VideoEditorTest.h --- a/videditor/SimpleCutVideo/inc/VideoEditorTest.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video Editor Engine Test DLL. -* -*/ - - -/* Choose proper header file, depending on which test framework - the tests are built for */ - -#ifndef VEDTESTTOP_H -#define VEDTESTTOP_H - -#ifdef USING_CPPUNIT_FRAMEWORK - - /* CppUnit headers */ -#include -#include -#include -#include - -#else - - /* STIF TFW headers */ -//#include "TestFramework/test.h" -//#include "TestFramework/TestCase.h" -//#include "TestFramework/TestCaller.h" -//#include "TestFramework/TestSuite.h" - -#endif - - -////////////////// -// Utility function -////////////////// - -void AddDriveLetterToPath(const TDesC &aFileName,TDes &aFileNameWithPath ) ; - -#endif - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/mveinavipanecontrolobserver.h --- a/videditor/SimpleCutVideo/inc/mveinavipanecontrolobserver.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Observer API. -* -*/ - - -#ifndef MVEINAVIPANECONTROLOBSERVER_H -#define MVEINAVIPANECONTROLOBSERVER_H - -/** - * Observer api for CVeiNaviPaneControl - * - * @lib internal - * @since S60 v5.0 - */ -class MVeiNaviPaneControlObserver - { - -public: - /** - * SetVolumeLevelL - * - * Called when volume level is changed - * @since S60 v5.0 - * @param aVolume Volume level - */ - virtual void SetVolumeLevelL( TInt aVolume ) = 0; - }; - - -#endif // MVEINAVIPANECONTROLOBSERVER_H diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/veicutvideocontainer.inl --- a/videditor/SimpleCutVideo/inc/veicutvideocontainer.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEICUTVIDEOCONTAINER_INL__ -#define __VEICUTVIDEOCONTAINER_INL__ - -public: - /** - * Returns total length of the video clip. - * - * @return total length - */ - inline TTimeIntervalMicroSeconds TotalLength() { return iDuration; }; - - /** - * Returns the player state. - * - * @return player state - */ - inline TCutVideoState State() { return iState; }; - - -#endif // __VEICUTVIDEOCONTAINER diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/inc/veinavipanecontrol.h --- a/videditor/SimpleCutVideo/inc/veinavipanecontrol.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,175 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Navipane control for SVE. -* -*/ - -#ifndef C_CVEINAVIPANECONTROL_H -#define C_CVEINAVIPANECONTROL_H - -#include -#include // MCoeControlObserver -#include "mtimelabelnaviobserver.h" - -class CEikStatusPane; -class CAknNavigationDecorator; -class CAknNavigationControlContainer; -class CVeiTimeLabelNavi; -class CAknVolumeControl; -class CPeriodic; -class MVeiNaviPaneControlObserver; - -/** - * Navipane control. - * - * @code - * ?good_class_usage_example(s) - * @endcode - * - * @lib internal (VedSimpleCutVideo.exe) - * @since S60 v5.0 - */ -class CVeiNaviPaneControl : public CBase, MCoeControlObserver, - MTimeLabelNaviObserver - { - -public: - - /** - * Two-phased constructor. - * @param aStatusPane aPointer to app status pane - */ - static CVeiNaviPaneControl* NewL( CEikStatusPane* aStatusPane ); - - /** - * Destructor. - */ - ~CVeiNaviPaneControl(); - - /** - * DrawTimeNaviL - * - * @since S60 v5.0 - * @param aElapsed Elapsed time - * @param aTotal Total time - */ - void DrawTimeNaviL( TTime aElapsed, TTime aTotal ); - - /** - * SetObserver - * - * @since S60 v5.0 - * @param aObserver Navi pane control observer. - * See "mveinavipanecontrolobserver.h" - */ - void SetObserver( MVeiNaviPaneControlObserver* aObserver ) - { - ASSERT( aObserver ); - iObserver = aObserver; - }; - - /** - * SetPauseIconVisibilityL - * - * @since S60 v5.0 - * @param aVisible ETrue = visible - */ - void SetPauseIconVisibilityL( TBool aVisible ); - - /** - * SetVolumeIconVisibilityL - * - * @since S60 v5.0 - * @param aVisible ETrue = visible - */ - void SetVolumeIconVisibilityL( TBool aVisible ); - - /** - * ShowVolumeLabelL - * - * @since S60 v5.0 - * @param aVolume Volume level - */ - void ShowVolumeLabelL( TInt aVolume ); - - /** - * HandleResourceChange - * - * @since S60 v5.0 - * @param aType Type of the resource change. - */ - void HandleResourceChange( TInt aType ); - -// from base class MCoeControlObserver - void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); - -// from base class MTimeLabelNaviObserver - void HandleNaviEventL(); - -private: - - CVeiNaviPaneControl( CEikStatusPane* aStatusPane ); - void ConstructL(); - -// Implementation - - CAknNavigationDecorator* CreateTimeLabelNaviL(); - CVeiTimeLabelNavi* GetTimeLabelControl(); - CAknVolumeControl* GetVolumeControl(); - static TInt HideVolumeCallbackL(TAny* aPtr); - void HideVolume(); - -private: // data - - /** - * Ref to StatusPane. - * Not own. - */ - CEikStatusPane* iStatusPane; - - /** - * Ref to NaviPane. - * Not own. - */ - CAknNavigationControlContainer* iNaviPane; - - /** - * Time Navi item. - * Own. - */ - CAknNavigationDecorator* iTimeNavi; - - /** - * Volume navi decorator. - * Own. - */ - CAknNavigationDecorator* iVolumeNavi; - - /** - * Volume navi decorator. - * Own. - */ - CPeriodic* iVolumeHider; - - /** - * Ref to observer. - * Not own. - */ - MVeiNaviPaneControlObserver* iObserver; - }; - - -#endif // C_CVEINAVIPANECONTROL_H diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/rom/SimpleCutVideo.iby --- a/videditor/SimpleCutVideo/rom/SimpleCutVideo.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - -#ifdef RD_S60_SIMPLE_VIDEO_EDITOR - -#ifndef __SIMPLECUTVIDEO_IBY__ -#define __SIMPLECUTVIDEO_IBY__ - -#include - -// Application -S60_APP_EXE(VedSimpleCutVideo) -S60_APP_AIF_RSC(VedSimpleCutVideo) -S60_APP_AIF_ICONS(VedSimpleCutVideo) - -#endif // __SIMPLECUTVIDEO_IBY__ - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/rom/SimpleCutVideo_resource.iby --- a/videditor/SimpleCutVideo/rom/SimpleCutVideo_resource.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_SIMPLE_VIDEO_EDITOR - -#ifndef __SIMPLECUTVIDEOEDITORRESOURCES_IBY__ -#define __SIMPLECUTVIDEOEDITORRESOURCES_IBY__ - -#include - -S60_APP_RESOURCE(VedSimpleCutVideo) -S60_APP_CAPTION(VedSimpleCutVideo) - -#endif // __SIMPLECUTVIDEOEDITORRESOURCES_IBY__ - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/src/VeiSimpleCutVideoApp.cpp --- a/videditor/SimpleCutVideo/src/VeiSimpleCutVideoApp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -// INCLUDE FILES -#include -// User includes -#include "VeiSimpleCutVideoApp.h" -#include "VeiSimpleCutVideoDocument.h" -#include "VideoEditorCommon.h" // Application UID - -// ================= MEMBER FUNCTIONS ======================= - -// ================= OTHER EXPORTED FUNCTIONS ============== -// -// --------------------------------------------------------- -// NewApplication() -// Constructs CVeiApp -// Returns: created application object -// --------------------------------------------------------- -// -EXPORT_C CApaApplication* NewApplication() - { - return new CVeiSimpleCutVideoApp; - } - -// --------------------------------------------------------- -// E32Main() -// Starts the exe -// --------------------------------------------------------- -// -GLDEF_C TInt E32Main() - { - return EikStart::RunApplication(NewApplication); - } - -// --------------------------------------------------------- -// CVeiApp::AppDllUid() -// Returns application UID -// --------------------------------------------------------- -// -TUid CVeiSimpleCutVideoApp::AppDllUid() const - { - return KUidSimpleCutVideo; - } - - -// --------------------------------------------------------- -// CVeiApp::CreateDocumentL() -// Creates CVeiDocument object -// --------------------------------------------------------- -// -CApaDocument* CVeiSimpleCutVideoApp::CreateDocumentL() - { - return CVeiSimpleCutVideoDocument::NewL( *this ); - } - -// --------------------------------------------------------- -// CVeiApp::OpenIniFileLC( RFs& aFs ) -// Enables INI file creation -// Returns: -// --------------------------------------------------------- -// -CDictionaryStore* CVeiSimpleCutVideoApp::OpenIniFileLC( RFs& aFs ) const - { - //Opens the application’s ini file if it exists. - //If an ini file does not exist for this application, - //or if it is corrupt, this function creates a new ini file - //and opens that. ini files are located on KIniFileDrive (by default, c:), - //in the same directory as the application DLL. - - return CEikApplication::OpenIniFileLC( aFs ); - } -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/src/VeiSimpleCutVideoAppUi.cpp --- a/videditor/SimpleCutVideo/src/VeiSimpleCutVideoAppUi.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,333 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES -// System includes -#include -#include -#include -#include // HlpLauncher -#include -#include -#include -#include -#include - -// User includes -#include "VedSimpleCutVideo.hrh" -#include "veisimplecutvideoappui.h" -#include "veisimplecutvideoview.h" - -#include "VeiTempMaker.h" -#include "VideoEditorCommon.h" - -// ================= MEMBER FUNCTIONS ======================= -// -// ---------------------------------------------------------- -// CVeiSimpleCutVideoAppUi::ConstructL() -// ?implementation_description -// ---------------------------------------------------------- -// -void CVeiSimpleCutVideoAppUi::ConstructL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::ConstructL: In"); - - BaseConstructL( EAppOrientationAutomatic|EAknEnableSkin|EAknEnableMSK ); - - CVeiTempMaker* maker = CVeiTempMaker::NewL(); - maker->EmptyTempFolder(); - delete maker; - -/* -* Cut video view and Cut audio view are references to edit video view and -* ownerships must be transfered(AddViewL(...)) to CAknViewAppUi(this) -* AFTER references are taken to edit video view. Otherwise exit is not clean. -*/ - - -// Cut Video view - /*iSimpleMergeView = CVeiSimpleCutVideoView::NewLC( ClientRect() ); - AddViewL( iSimpleMergeView ); // transfer ownership to CAknViewAppUi - CleanupStack::Pop( iSimpleMergeView ); - */ - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::ConstructL: Out"); - } - -// ---------------------------------------------------- -// CVeiSimpleCutVideoAppUi::~CVeiSimpleCutVideoAppUi() -// Destructor -// Frees reserved resources -// ---------------------------------------------------- -// -CVeiSimpleCutVideoAppUi::~CVeiSimpleCutVideoAppUi() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::~CVeiSimpleCutVideoAppUi()"); - } - -void CVeiSimpleCutVideoAppUi::Exit() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::Exit(): In"); - - TRAP_IGNORE ( - CVeiTempMaker* maker = CVeiTempMaker::NewL(); - maker->EmptyTempFolder(); - delete maker; - ); - - CAknAppUiBase::Exit(); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::Exit(): Out"); - } - -//============================================================================= -CVeiSimpleCutVideoAppUi::CVeiSimpleCutVideoAppUi() - { - } - -//============================================================================= -void CVeiSimpleCutVideoAppUi::CutVideoL( TBool aDoOpen, const RFile& aFile ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::CutVideoL: In"); - - // Cut Video view - if ( !iSimpleCutVideoView ) - { - CVeiSimpleCutVideoView* simpleCutVideoView = - new (ELeave) CVeiSimpleCutVideoView; - CleanupStack::PushL( simpleCutVideoView ); - simpleCutVideoView->ConstructL(); - iSimpleCutVideoView = simpleCutVideoView; - TFileName filename; - User::LeaveIfError( aFile.FullName(filename) ); - simpleCutVideoView->AddClipL( filename, aDoOpen ); - - AddViewL(simpleCutVideoView); - CleanupStack::Pop( simpleCutVideoView ); - iVolume = -1; // Volume not set - - iCoeEnv->RootWin().EnableScreenChangeEvents(); - - SetDefaultViewL( *simpleCutVideoView ); - ActivateLocalViewL(simpleCutVideoView->Id()); - } - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::CutVideoL: Out"); - } - -// ---------------------------------------------------- -// CVeiSimpleCutVideoAppUi::HandleKeyEventL( -// const TKeyEvent& aKeyEvent,TEventCode /*aType*/) -// ?implementation_description -// ---------------------------------------------------- -// -TKeyResponse CVeiSimpleCutVideoAppUi::HandleKeyEventL( - const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/) - { - return EKeyWasNotConsumed; - } - - -// ---------------------------------------------------- -// CVeiSimpleCutVideoAppUi::HandleCommandL(TInt aCommand) -// ?implementation_description -// ---------------------------------------------------- -// -void CVeiSimpleCutVideoAppUi::HandleCommandL( TInt aCommand ) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleCommandL( %d ): In", aCommand); - - switch ( aCommand ) - { - // - // Context Sensitive Help launching for: - // -'Settings' view - // -'Trim for MMS' view - // -'Edit video' view - // -'Cut video' view - // -'Cut audio' view - // - case EAknCmdHelp: - case EVeiCmdCutVideoViewHelp: - { - // Get the current context - CArrayFix* context = AppHelpContextL(); - - // Launch the help application with current context topic - HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), - context ); - break; - } - case EAknSoftkeyBack: - case EEikCmdExit: - case EAknSoftkeyExit: - case EAknCmdExit: - { - iOnTheWayToDestruction = ETrue; - - CVeiTempMaker* maker = CVeiTempMaker::NewL(); - maker->EmptyTempFolder(); - delete maker; - - Exit(); - break; - } - default: - break; - } - LOG(KVideoEditorLogFile, "CVeiAppUi::HandleCommandL: Out"); - } - -//============================================================================= -void CVeiSimpleCutVideoAppUi::ReadSettingsL( TVeiSettings& aSettings ) const - { - LOG(KVideoEditorLogFile, "CVeiAppUi::ReadSettingsL: in"); - CDictionaryStore* store = Application()->OpenIniFileLC( iCoeEnv->FsSession() ); - - TBool storePresent = store->IsPresentL( KUidVideoEditor ); // UID has an associated stream? - - if( storePresent ) - { - RDictionaryReadStream readStream; - readStream.OpenLC( *store, KUidVideoEditor ); - - readStream >> aSettings; // Internalize data to TVeiSettings. - - CleanupStack::PopAndDestroy( &readStream ); - } - else { - // In the case of simple cut, the video name is generated automatically - // when saving is started. - aSettings.DefaultVideoName() = KNullDesC; - - /* Read the default snapshot filename from resource */ - const CFont* myFont = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - HBufC* snapshotName = iEikonEnv->AllocReadResourceLC( R_VEI_SETTINGS_VIEW_SETTINGS_ITEM2_VALUE ); - aSettings.DefaultSnapshotName() = AknTextUtils::ChooseScalableText(snapshotName->Des(), *myFont, 400 ); - CleanupStack::PopAndDestroy( snapshotName ); - - /* Memory card is used as a default target */ - aSettings.MemoryInUse() = CAknMemorySelectionDialog::EMemoryCard; - - /* Set save quality to "Auto" by default. */ - aSettings.SaveQuality() = TVeiSettings::EAuto; - - RDictionaryWriteStream writeStream; - writeStream.AssignLC( *store, KUidVideoEditor ); - - writeStream << aSettings; - - writeStream.CommitL(); - - store->CommitL(); - - CleanupStack::PopAndDestroy( &writeStream ); - } - CleanupStack::PopAndDestroy( store ); - LOG(KVideoEditorLogFile, "CVeiAppUi::ReadSettingsL: out"); - } - -//============================================================================= -void CVeiSimpleCutVideoAppUi::WriteSettingsL( const TVeiSettings& aSettings ) - { - LOG(KVideoEditorLogFile, "CVeiAppUi::WriteSettingsL: in"); - CDictionaryStore* store = Application()->OpenIniFileLC( iCoeEnv->FsSession() ); - - RDictionaryWriteStream writeStream; - writeStream.AssignLC( *store, KUidVideoEditor ); - writeStream << aSettings; - writeStream.CommitL(); - - store->CommitL(); - - CleanupStack::PopAndDestroy( &writeStream ); - CleanupStack::PopAndDestroy( store ); - LOG(KVideoEditorLogFile, "CVeiAppUi::WriteSettingsL: out"); - } - -//============================================================================= -void CVeiSimpleCutVideoAppUi::HandleScreenDeviceChangedL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleScreenDeviceChangedL: In"); - - CAknAppUi::HandleScreenDeviceChangedL(); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleScreenDeviceChangedL: Out"); - } - -//============================================================================= -void CVeiSimpleCutVideoAppUi::HandleResourceChangeL(TInt aType) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleResourceChangeL: In"); - CAknAppUi::HandleResourceChangeL(aType); - if ( iSimpleCutVideoView ) - { - iSimpleCutVideoView->HandleResourceChange(aType); - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleResourceChangeL: Out"); - } - -//============================================================================= -void CVeiSimpleCutVideoAppUi::HandleFileNotificationEventL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleFileNotificationEventL: In"); - /*if ( iSimpleCutVideoView ) - { - if( iSimpleCutVideoView->WaitMode() == CVeiEditVideoView::EProcessingMovieSaveThenQuit ) - { - HandleCommandL( EAknCmdExit ); - } - }*/ - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleFileNotificationEventL: Out"); - } - -//============================================================================= -void CVeiSimpleCutVideoAppUi::HandleForegroundEventL ( TBool aForeground ) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleForegroundEventL: In: %d", aForeground); - CAknViewAppUi::HandleForegroundEventL( aForeground ); - if ( !aForeground ) - { - // Set the priority to low. This is needed to handle the situations - // where the engine is performing heavy processing while the application - // is in background. - RProcess myProcess; - iOriginalProcessPriority = myProcess.Priority(); - LOGFMT3(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleForegroundEventL: changing priority of process %Ld from %d to %d", myProcess.Id().Id(), iOriginalProcessPriority, EPriorityLow); - myProcess.SetPriority( EPriorityLow ); - iProcessPriorityAltered = ETrue; - } - else if ( iProcessPriorityAltered ) - { - // Return to normal priority. - RProcess myProcess; - TProcessPriority priority = myProcess.Priority(); - if ( priority < iOriginalProcessPriority ) - { - myProcess.SetPriority( iOriginalProcessPriority ); - } - iProcessPriorityAltered = EFalse; - LOGFMT2(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleForegroundEventL: process %Ld back to normal priority %d", myProcess.Id().Id(), priority); - } - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoAppUi::HandleForegroundEventL: Out"); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/src/VeiSimpleCutVideoContainer.cpp --- a/videditor/SimpleCutVideo/src/VeiSimpleCutVideoContainer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1981 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES -// System includes -#include -#include -#include -#include -#include -#include -//#include -//#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef RD_TACTILE_FEEDBACK -#include -#endif /* RD_TACTILE_FEEDBACK */ - -// User includes -#include "VeiSimpleCutVideoAppUi.h" -#include "VeiCutterBar.h" -#include "VeiSimpleCutVideoContainer.h" -#include "VeiSimpleCutVideoView.h" -#include "veitextdisplay.h" -#include "VideoEditorCommon.h" -#include "VideoEditorUtils.h" -#include "VeiErrorUi.h" -#include "VedSimpleCutVideo.hrh" - -#define KMediaGalleryUID3 0x101F8599 - -// ================= MEMBER FUNCTIONS ======================= -void CleanupRarray( TAny* object ) - { - (( RImageTypeDescriptionArray*)object)->ResetAndDestroy(); - } - -CVeiSimpleCutVideoContainer* CVeiSimpleCutVideoContainer::NewL( const TRect& aRect, CVeiSimpleCutVideoView& aView, CVeiErrorUI& aErrorUI ) - { - CVeiSimpleCutVideoContainer* self = CVeiSimpleCutVideoContainer::NewLC( aRect, aView, aErrorUI ); - CleanupStack::Pop( self ); - return self; - } - -CVeiSimpleCutVideoContainer* CVeiSimpleCutVideoContainer::NewLC( const TRect& aRect, CVeiSimpleCutVideoView& aView, CVeiErrorUI& aErrorUI ) - { - CVeiSimpleCutVideoContainer* self = new (ELeave) CVeiSimpleCutVideoContainer( aRect, aView, aErrorUI ); - CleanupStack::PushL( self ); - self->ConstructL( aRect, aView, aErrorUI ); - return self; - } - -void CVeiSimpleCutVideoContainer::ConstructL( const TRect& aRect, CVeiSimpleCutVideoView& /*aView*/, CVeiErrorUI& /*aErrorUI*/ ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::ConstructL: in"); - CreateWindowL(); - - iState = EStateInitializing; - iFrameReady = EFalse; - iPlayOrPlayMarked = EFalse; - - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - iSeeking = EFalse; - iCutVideoBar = CVeiCutterBar::NewL( this ); - - iConverter = CVeiImageConverter::NewL( this ); - iTakeSnapshot = EFalse; - iVideoDisplay = CVeiVideoDisplay::NewL( iDisplayRect, this, *this ); - - TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) ); - - if( !AknLayoutUtils::PenEnabled() ) - { - iCutTimeDisplay = CVeiTextDisplay::NewL( iCutTimeDisplayRect, this ); - - // A new icon. Temporarely same bitmap is used for non touch pause as in touch devices - // A new icon has been requested and it should be changed here as soon as it's in the build - AknIconUtils::CreateIconL( iPauseBitmap, iPauseBitmapMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded_pause, - EMbmVideoeditoruicomponentsQgn_indi_vded_pause_mask ); - } - else - { - AknIconUtils::CreateIconL( iPlayBitmap, iPlayBitmapMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded2_play, - EMbmVideoeditoruicomponentsQgn_indi_vded2_play_mask ); - - AknIconUtils::CreateIconL( iPauseBitmap, iPauseBitmapMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded2_pause, - EMbmVideoeditoruicomponentsQgn_indi_vded2_pause_mask ); - } - - SetRect( aRect ); - - iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse ); - iVideoBarTimer = CPeriodic::NewL( CActive::EPriorityLow ); - -#ifdef RD_TACTILE_FEEDBACK - iTouchFeedBack = MTouchFeedback::Instance(); -#endif /* RD_TACTILE_FEEDBACK */ - - iRemConTarget = CVeiRemConTarget::NewL( *this ); - - EnableDragEvents(); - - ActivateL(); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::ConstructL: out"); - } - -CVeiSimpleCutVideoContainer::CVeiSimpleCutVideoContainer( - const TRect& /*aRect*/, CVeiSimpleCutVideoView& aView, - CVeiErrorUI& aErrorUI ) : iView( aView ), iErrorUI( aErrorUI ) - { - } - -CVeiSimpleCutVideoContainer::~CVeiSimpleCutVideoContainer() - { - if ( iCutVideoBar ) - { - delete iCutVideoBar; - } - if ( iBgContext ) - { - delete iBgContext; - } - if ( iVideoDisplay ) - { - delete iVideoDisplay; - } - if ( iCutTimeDisplay ) - { - delete iCutTimeDisplay; - } - if ( iVideoClipInfo ) - { - delete iVideoClipInfo; - iVideoClipInfo = NULL; - } - if ( iConverter ) - { - iConverter->Cancel(); - delete iConverter; - } - if ( iVideoBarTimer ) - { - iVideoBarTimer->Cancel(); - delete iVideoBarTimer; - } - - if ( iProgressDialog ) - { - delete iProgressDialog; - iProgressDialog = NULL; - } - if ( iSaveToFileName ) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - - delete iCallBackSaveSnapshot; - delete iCallBackTakeSnapshot; - - if ( iPlayBitmap ) - { - delete iPlayBitmap; - } - if ( iPlayBitmapMask ) - { - delete iPlayBitmapMask; - } - delete iPauseBitmap; - delete iPauseBitmapMask; - - delete iRemConTarget; - } - -void CVeiSimpleCutVideoContainer::DialogDismissedL( TInt aButtonId ) - { - if ( aButtonId == -1 ) - { // when pressing cancel button. - CancelSnapshotSave(); - } - iTakeSnapshot = EFalse; - } - -void CVeiSimpleCutVideoContainer::SizeChanged() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::SizeChanged(): In"); - TSize videoScreenSize; - TRect rect( Rect() ); - if ( iBgContext ) - { - iBgContext->SetRect( rect ); - } - LOGFMT2(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::SizeChanged(): Rect(): %d,%d", rect.iBr.iX, rect.iBr.iY); - - TInt variety = 0; - if (VideoEditorUtils::IsLandscapeScreenOrientation()) - { - variety = 1; - } - - if( !AknLayoutUtils::PenEnabled() ) - { - // Progress bar - TAknLayoutRect progressBarLayout; - progressBarLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_slider_pane()); - iCutVideoBar->SetComponentRect(CVeiCutterBar::EProgressBar, progressBarLayout.Rect()); - - TAknLayoutRect sliderLeftEndLayout; - TAknLayoutRect sliderRightEndLayout; - if ( AknLayoutUtils::LayoutMirrored () ) - { - // left end of the slider when that part is unselected - sliderLeftEndLayout.LayoutRect( progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4() ); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, sliderLeftEndLayout.Rect() ); - - // right end of the slider when that part is unselected - sliderRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon, sliderRightEndLayout.Rect() ); - } - else - { - // left end of the slider when that part is unselected - sliderLeftEndLayout.LayoutRect( progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3() ); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, sliderLeftEndLayout.Rect() ); - - // right end of the slider when that part is unselected - sliderRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon, sliderRightEndLayout.Rect() ); - } - - // middle part of the slider when that part is unselected - TAknLayoutRect sliderMiddleLayout; - sliderMiddleLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g5()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon, sliderMiddleLayout.Rect() ); - - // left end of the cut selection slider - TAknLayoutRect sliderSelectedLeftEndLayout; - sliderSelectedLeftEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g3()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderSelectedLeftEndIcon, sliderSelectedLeftEndLayout.Rect() ); - - // middle part of the cut selection slider - TAknLayoutRect sliderSelectedMiddleLayout; - sliderSelectedMiddleLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g5()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon, sliderSelectedMiddleLayout.Rect() ); - - // right end of the cut selection slider - TAknLayoutRect sliderSelectedRightEndLayout; - sliderSelectedRightEndLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g4()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderSelectedRightEndIcon, sliderSelectedRightEndLayout.Rect() ); - - // playhead - TAknLayoutRect playheadLayout; - playheadLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g1()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::EPlayheadIcon, playheadLayout.Rect() ); - - // left/right border of cut selection slider - TAknLayoutRect cutAreaBorderLayout; - cutAreaBorderLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded_slider_pane_g2()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ECutAreaBorderIcon, cutAreaBorderLayout.Rect() ); - - TAknLayoutText startTimeTextLayout; - TAknLayoutText endTimeTextLayout; - TAknLayoutRect startTimeIconLayout; - TAknLayoutRect endTimeIconLayout; - - // Video Display - TAknLayoutRect videoDisplayLayout; - videoDisplayLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_video_pane()); - iVideoDisplay->SetRect(videoDisplayLayout.Rect()); - - iDisplayRect = videoDisplayLayout.Rect(); - iIconDisplayRect = videoDisplayLayout.Rect(); - LOGFMT2(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::SizeChanged(): iDisplayRect: %d,%d", iDisplayRect.iBr.iX, iDisplayRect.iBr.iY); - - //CVeiCutterBar - TRect cutBarRect( sliderLeftEndLayout.Rect().iTl, sliderRightEndLayout.Rect().iBr ); - iCutVideoBar->SetRect( cutBarRect ); - - TInt iconWidth = STATIC_CAST( TInt, rect.iBr.iX * 0.07954545455 ); - AknIconUtils::SetSize( iPauseBitmap, TSize(iconWidth,iconWidth), EAspectRatioNotPreserved ); - } - else - { - // Progress bar - TAknLayoutRect progressBarLayout; - progressBarLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded2_slider_pane(variety)); - - TAknLayoutRect progressBGLayout; - progressBGLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded2_slider_bg_pane()); - iCutVideoBar->SetComponentRect(CVeiCutterBar::EProgressBar, progressBGLayout.Rect()); - - TAknLayoutRect sliderLeftEndLayout; - TAknLayoutRect sliderRightEndLayout; - if ( AknLayoutUtils::LayoutMirrored () ) - { - // left end of the slider when that part is unselected - sliderLeftEndLayout.LayoutRect( progressBGLayout.Rect(),AknLayoutScalable_Apps::vded2_slider_bg_pane_g2()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, sliderLeftEndLayout.Rect() ); - - // right end of the slider when that part is unselected - sliderRightEndLayout.LayoutRect(progressBGLayout.Rect(),AknLayoutScalable_Apps::vded2_slider_bg_pane_g1()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon, sliderRightEndLayout.Rect() ); - - } - else - { - // left end of the slider when that part is unselected - sliderLeftEndLayout.LayoutRect( progressBGLayout.Rect(),AknLayoutScalable_Apps::vded2_slider_bg_pane_g1()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderLeftEndIcon, sliderLeftEndLayout.Rect() ); - - // right end of the slider when that part is unselected - sliderRightEndLayout.LayoutRect(progressBGLayout.Rect(),AknLayoutScalable_Apps::vded2_slider_bg_pane_g2()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderRightEndIcon, sliderRightEndLayout.Rect() ); - } - - // middle part of the slider when that part is unselected - TAknLayoutRect sliderMiddleLayout; - sliderMiddleLayout.LayoutRect(progressBGLayout.Rect(),AknLayoutScalable_Apps::vded2_slider_bg_pane_g3()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderMiddleIcon, sliderMiddleLayout.Rect() ); - - // middle part of the cut selection slider - TAknLayoutRect sliderSelectedMiddleLayout; - sliderSelectedMiddleLayout.LayoutRect(progressBGLayout.Rect(),AknLayoutScalable_Apps::vded2_slider_bg_pane_g3()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::ESliderSelectedMiddleIcon, sliderSelectedMiddleLayout.Rect() ); - - // playhead - TAknLayoutRect playheadLayout; - playheadLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded2_slider_pane_g3()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::EPlayheadIcon, playheadLayout.Rect() ); - - // left/right border of cut selection slider - TAknLayoutRect cutAreaBorderLayout; - cutAreaBorderLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded2_slider_pane_g1()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::EStartMarkIcon, cutAreaBorderLayout.Rect() ); - cutAreaBorderLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::vded2_slider_pane_g2()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::EEndMarkIcon, cutAreaBorderLayout.Rect() ); - - // Video Display - TAknLayoutRect videoDisplayLayout; - videoDisplayLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::vded_video_pane()); - iVideoDisplay->SetRect(videoDisplayLayout.Rect()); - - iDisplayRect = videoDisplayLayout.Rect(); - iIconDisplayRect = videoDisplayLayout.Rect(); - LOGFMT2(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::SizeChanged(): iDisplayRect: %d,%d", iDisplayRect.iBr.iX, iDisplayRect.iBr.iY); - - // CVeiCutterBar - TRect cutBarRect( progressBarLayout.Rect().iTl, progressBarLayout.Rect().iBr ); - iCutVideoBar->SetRect( cutBarRect ); - - // pause icon - TAknLayoutRect iconLayout; - iconLayout.LayoutRect(Rect(),AknLayoutScalable_Apps::main_vded2_pane_g2(variety)); - iIconDisplayRect = iconLayout.Rect(); - AknIconUtils::SetSize( iPlayBitmap, iIconDisplayRect.Size(), EAspectRatioNotPreserved ); - AknIconUtils::SetSize( iPauseBitmap, iIconDisplayRect.Size(), EAspectRatioNotPreserved ); - - // cut bar touch areas - TAknLayoutRect touchAreaLayout; - touchAreaLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::aid_size_touch_vded2_playhead()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::EPlayheadTouch, touchAreaLayout.Rect() ); - touchAreaLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::aid_size_touch_vded2_start()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::EStartMarkTouch, touchAreaLayout.Rect() ); - touchAreaLayout.LayoutRect(progressBarLayout.Rect(),AknLayoutScalable_Apps::aid_size_touch_vded2_end()); - iCutVideoBar->SetComponentRect( CVeiCutterBar::EEndMarkTouch, touchAreaLayout.Rect() ); - } - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::SizeChanged(): Out"); - } - -TTypeUid::Ptr CVeiSimpleCutVideoContainer::MopSupplyObject( TTypeUid aId ) - { - if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext ) - { - return MAknsControlContext::SupplyMopObject( aId, iBgContext ); - } - return CCoeControl::MopSupplyObject( aId ); - } - -TInt CVeiSimpleCutVideoContainer::CountComponentControls() const - { - if( !AknLayoutUtils::PenEnabled() ) - { - return 3; - } - else - { - return 2; - } - } - -CCoeControl* CVeiSimpleCutVideoContainer::ComponentControl( TInt aIndex ) const - { - switch ( aIndex ) - { - case 0: - return iCutVideoBar; - case 1: - return iVideoDisplay; - case 2: - return iCutTimeDisplay; - default: - return NULL; - } - } - -void CVeiSimpleCutVideoContainer::Draw( const TRect& aRect ) const - { - CWindowGc& gc = SystemGc(); - // draw skin background - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - AknsDrawUtils::Background( skin, cc, this, gc, aRect ); - - if ( EStatePlaying != iState && EStatePlayingMenuOpen != iState - && AknLayoutUtils::PenEnabled() ) - { - gc.BitBltMasked( iIconDisplayRect.iTl, iPlayBitmap, - TRect(iIconDisplayRect.Size()), - iPlayBitmapMask, EFalse ); - } - else if ( ( EStatePlaying == iState || EStatePlayingMenuOpen == iState ) - && AknLayoutUtils::PenEnabled() ) - { - gc.BitBltMasked( iIconDisplayRect.iTl, iPauseBitmap, - TRect(iIconDisplayRect.Size()), - iPauseBitmapMask, EFalse ); - } - - if ( EStatePaused == iState && !AknLayoutUtils::PenEnabled() ) - { - TPoint pauseIconTl = TPoint( iIconDisplayRect.iTl.iX - STATIC_CAST( TInt, Rect().iBr.iX*0.105), - iIconDisplayRect.iTl.iY + STATIC_CAST( TInt, Rect().iBr.iY*0.178 )); - gc.BitBltMasked( pauseIconTl, iPauseBitmap, - TRect( TPoint(0,0), iPauseBitmap->SizeInPixels() ), - iPauseBitmapMask, EFalse ); - } - } - -// ---------------------------------------------------------------------------- -// CVeiSimpleCutVideoContainer::GetHelpContext(...) const -// -// Gets the control's help context. Associates the control with a particular -// Help file and topic in a context sensitive application. -// ---------------------------------------------------------------------------- -// -void CVeiSimpleCutVideoContainer::GetHelpContext( TCoeHelpContext& aContext ) const - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::GetHelpContext(): In"); - - // Set UID of the CS Help file (same as application UID). - aContext.iMajor = KUidVideoEditor; - - // Set the context/topic. - aContext.iContext = KVIE_HLP_CUT; - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::GetHelpContext(): Out"); - } - - -void CVeiSimpleCutVideoContainer::HandleControlEventL( - CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/) - { - } - -// ---------------------------------------------------------------------------- -// CVeiSimpleCutVideoContainer::HandlePointerEventL -// From CCoeControl -// ---------------------------------------------------------------------------- -// -void CVeiSimpleCutVideoContainer::HandlePointerEventL(const TPointerEvent& aPointerEvent ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::HandlePointerEventL(): In"); - if( AknLayoutUtils::PenEnabled() && iCutVideoBar ) - { - CCoeControl::HandlePointerEventL( aPointerEvent ); - - switch( aPointerEvent.iType ) - { - case TPointerEvent::EButton1Down: - { - iButtonDownPoint = aPointerEvent.iPosition; - iIsMarkDrag = EFalse; - iIsMarkTapped = EFalse; - iIsIconOrDisplayTapped = EFalse; - TRect startMarkRect = iCutVideoBar->StartMarkRect(); - TRect endMarkRect = iCutVideoBar->EndMarkRect(); - TRect playheadRect = iCutVideoBar->PlayHeadRect(); - // check if the pen goes down inside the start mark - if (startMarkRect.Contains(aPointerEvent.iPosition)) - { - iIsMarkTapped = ETrue; - iTappedMark = EStartMark; - iCutVideoBar->SetPressedComponent( CVeiCutterBar::EPressedStartMarkTouch ); - } - // check if the pen goes down inside the end mark - else if (endMarkRect.Contains(aPointerEvent.iPosition)) - { - iIsMarkTapped = ETrue; - iTappedMark = EEndMark; - iCutVideoBar->SetPressedComponent( CVeiCutterBar::EPressedEndMarkTouch ); - } - // check if the pen goes down inside the playhead - else if (playheadRect.Contains(aPointerEvent.iPosition)) - { - iIsMarkTapped = ETrue; - iTappedMark = EPlayHead; - iCutVideoBar->SetPressedComponent( CVeiCutterBar::EPressedPlayheadTouch ); - } - else if ( iDisplayRect.Contains( iButtonDownPoint ) || - iIconDisplayRect.Contains( iButtonDownPoint ) ) - { - iIsIconOrDisplayTapped = ETrue; - } - - if ( iIsMarkTapped ) - { - DrawDeferred(); - } - -#ifdef RD_TACTILE_FEEDBACK - if ( iTouchFeedBack && ( iIsMarkTapped || iIsIconOrDisplayTapped )) - { - iTouchFeedBack->InstantFeedback( ETouchFeedbackBasic ); - } -#endif /* RD_TACTILE_FEEDBACK */ - -// TRect progressBarRect(iCutVideoBar->ProgressBarRect()); - // check if the pen goes down inside the progress bar -// if( progressBarRect.Contains( aPointerEvent.iPosition ) ) -// { -// iIsMarkDrag = EFalse; -// } - break; - } - case TPointerEvent::EDrag: - { - if (iIsMarkTapped) - { - TRect touchRect(iCutVideoBar->ProgressBarRect()); - TRect smallRect(iCutVideoBar->EndMarkRect()); - TInt pressPoint = aPointerEvent.iPosition.iX; - TBool dragMarks = ETrue; - if (iTappedMark == EStartMark) - { - pressPoint += iCutVideoBar->StartMarkRect().Width()/2; - } - if (iTappedMark == EEndMark) - { - pressPoint -= iCutVideoBar->StartMarkRect().Width()/2; - } - if (iTappedMark == EPlayHead) - { - smallRect = iCutVideoBar->PlayHeadRect(); - dragMarks = EFalse; - } - touchRect.iTl.iY = smallRect.iTl.iY; - touchRect.iBr.iY = smallRect.iBr.iY; - HandleProgressBarTouchL( touchRect, - pressPoint, - dragMarks, - iTappedMark ); - iIsMarkDrag = ETrue; - } - break; - } - case TPointerEvent::EButton1Up: - { - // pen up event is handled if it wasn't dragged -// if (!iIsMarkDrag) - if (0) - { - TRect progressBarRect(iCutVideoBar->ProgressBarRect()); - // Check if pressed position is in progress bar's rect - if( progressBarRect.Contains( aPointerEvent.iPosition ) ) - { - HandleProgressBarTouchL( progressBarRect, - aPointerEvent.iPosition.iX, - EFalse); - } - } - - if ((iDisplayRect.Contains(aPointerEvent.iPosition) && - iDisplayRect.Contains(iButtonDownPoint)) || - (iIconDisplayRect.Contains(aPointerEvent.iPosition) && - iIconDisplayRect.Contains(iButtonDownPoint))) - { - HandleVideoClickedL(); - } - iCutVideoBar->SetPressedComponent( CVeiCutterBar::ENoPressedIcon ); - DrawDeferred(); - break; - } - default: - { - break; - } - } - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::HandlePointerEventL(): Out"); - } - - -// ---------------------------------------------------------------------------- -// CVeiSimpleCutVideoContainer::HandleProgressBarTouchL -// -// ---------------------------------------------------------------------------- -// -void CVeiSimpleCutVideoContainer::HandleProgressBarTouchL( TRect aPBRect, - TInt aPressedPoint, - TBool aDragMarks, - CVeiSimpleCutVideoContainer::TCutMark aCutMark ) - { - if ( (AknLayoutUtils::PenEnabled()) && ( iState!=EStateInitializing )) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::HandleProgressBarTouchL(): In"); - - if (iState == EStatePlaying) - { - PauseL(); - } - - // Progress Bar start and end points, and length - TInt pbEndPoint( aPBRect.iBr.iX ); - TInt pbStartPoint = ( aPBRect.iTl.iX ); - TInt totalPBLength( pbEndPoint - pbStartPoint ); - - // calculate the time position from the tapped progress bar coordinates - TTimeIntervalMicroSeconds newPosition( - ( ( aPressedPoint - pbStartPoint ) * - iVideoClipInfo->Duration().Int64() ) / - totalPBLength ); - if (newPosition >= iVideoClipInfo->Duration()) - { - newPosition = TTimeIntervalMicroSeconds( iVideoClipInfo->Duration().Int64() - 1 ); - } - if (newPosition <= 0) - { - newPosition = 0; - } - - TBool movePlayhead = ETrue; - - // move cut marks - if (aDragMarks) - { - movePlayhead = EFalse; - //one sec buffer: - const TUint markBuffer = ((KMinCutVideoLength * totalPBLength) / iVideoClipInfo->Duration().Int64()); - // check that the start mark doesn't go past the end mark - 1 sec buffer - // and not to the beginning - if ((aCutMark == EStartMark) && - (newPosition.Int64() >= 0) && - (aPressedPoint < (iCutVideoBar->EndMarkPoint() - markBuffer ) /*- 2*iCutVideoBar->EndMarkRect().Width()*/)) - { - iView.MoveStartOrEndMarkL(newPosition, EStartMark); - iCutVideoBar->SetInPoint( newPosition ); - movePlayhead = ETrue; - } - // check that the end mark doesn't go before the start mark - +1 sec buffer - // and not too close to the beginning - else if ((aCutMark == EEndMark) && - (newPosition.Int64() >= KMinCutVideoLength) && - (aPressedPoint > (iCutVideoBar->StartMarkPoint() + markBuffer)/* + 2*iCutVideoBar->StartMarkRect().Width()*/)) - { - iView.MoveStartOrEndMarkL(newPosition, EEndMark); - iCutVideoBar->SetOutPoint( newPosition ); - movePlayhead = ETrue; - } - } - - // move playhead -// else if (( newPosition != iLastPosition ) && !aDragMarks) - if (( newPosition != iLastPosition ) && movePlayhead) - { - iLastPosition = newPosition; - - iSeekPos = TTimeIntervalMicroSeconds( newPosition ); - - iCutVideoBar->SetCurrentPoint( (static_cast(iSeekPos.Int64() / 1000))); - iVideoDisplay->SetPositionL( iSeekPos ); - GetThumbAtL( iSeekPos ); - - iView.UpdateTimeL(); - } - - iView.UpdateCBAL(iState); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::HandleProgressBarTouchL(): Out"); - - }// PenEnabled - - } - - -void CVeiSimpleCutVideoContainer::PlayL( const TDesC& aFilename ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::PlayL: in"); - iVideoDisplay->SetPositionL( iSeekPos ); - - if (iVideoClipInfo && !iFrameReady) - { - iVideoClipInfo->CancelFrame(); - } - iVideoDisplay->PlayL( aFilename ); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::PlayL: out"); - } - -void CVeiSimpleCutVideoContainer::PlayMarkedL( const TDesC& aFilename, - const TTimeIntervalMicroSeconds& aStartTime, - const TTimeIntervalMicroSeconds& aEndTime ) - { - LOGFMT3(KVideoEditorLogFile, "CVeisimpleCutVideoContainer::PlayMarkedL, In, aStartTime:%Ld, aEndTime:%Ld, aFilename:%S", aStartTime.Int64(), aEndTime.Int64(), &aFilename); - iPlayOrPlayMarked = ETrue; - - if (iVideoClipInfo && !iFrameReady) - { - iVideoClipInfo->CancelFrame(); - } - iVideoDisplay->PlayL( aFilename, aStartTime, aEndTime ); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::PlayMarkedL, Out"); - } - -void CVeiSimpleCutVideoContainer::StopL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::StopL, in"); - iVideoDisplay->Stop( EFalse ); - - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - // When adding a new video clip after saving, PlaybackPositionL() - // returns a value > 0 eventhough the playhead is in the beginning - // so iLastPosition has to be set to the beginning. - iLastPosition = TTimeIntervalMicroSeconds( 0 ); - - SetStateL( EStateStopped ); - PlaybackPositionL(); - - if (iVideoBarTimer) - { - iVideoBarTimer->Cancel(); - } - - iCutVideoBar->SetFinishedStatus( ETrue ); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::StopL, in"); - } - - -void CVeiSimpleCutVideoContainer::TakeSnapshotL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::TakeSnapshotL in"); - - if( !iVideoClipInfo || !iFrameReady ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::TakeSnapshotL: 1"); - if (!iFrameReady) - { - iTakeSnapshotWaiting = ETrue; - } - return; - } - - iTakeSnapshotWaiting = EFalse; - iTakeSnapshot = ETrue; - const TTimeIntervalMicroSeconds& pos = PlaybackPositionL(); - - GetThumbAtL( pos ); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::TakeSnapshotL out"); - } - -void CVeiSimpleCutVideoContainer::PauseL( TBool aUpdateCBA ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::PauseL: In"); - - if (EStatePlaying == iState) - { - iLastPosition = iVideoDisplay->PositionL(); - iSeekPos = iLastPosition; - // to set next start point - iVideoDisplay->SetPositionL(iSeekPos); - } - - iVideoDisplay->PauseL(); - if (iVideoBarTimer) - { - iVideoBarTimer->Cancel(); - } - - #ifdef GET_PAUSE_THUMBNAIL - GetThumbAtL( iLastPosition ); - #endif - - if (EStateStoppedInitial == iState || EStateStopped == iState) - { - // just to trigger cba-update - SetStateL( iState, aUpdateCBA ); - } - else if (EStateInitializing != iState) - { - SetStateL( EStatePaused, aUpdateCBA ); - } - else - { - SetStateL( EStateStoppedInitial ); - } - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::PauseL: Out"); - } - -void CVeiSimpleCutVideoContainer::SaveSnapshotL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::SaveSnapshotL: In"); - - if (LaunchSavingDialogsL()) - { - //first we have to encode bitmap - // get encoder types - RImageTypeDescriptionArray imageTypes; - iConverter->GetEncoderImageTypesL( imageTypes ); - - CleanupStack::PushL( TCleanupItem( CleanupRarray, &imageTypes ) ); - - TInt selectedIdx = 0; - - for( TInt i=0; iDescription() == KEncoderType ) - { - selectedIdx = i; - } - } - - //for cancellation - if ( iSaveToFileName ) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - iSaveToFileName = HBufC::NewL( iSnapshotFileName.Length() ); - *iSaveToFileName = iSnapshotFileName; - - // request the actuall save/encode - // asynchronous, the result is reported via callback NotifyCompletion - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::SaveSnapshotL: 1, calling iConverter->StartToEncodeL"); - iConverter->StartToEncodeL( iSnapshotFileName, - imageTypes[selectedIdx]->ImageType(), imageTypes[selectedIdx]->SubType()); - - CleanupStack::PopAndDestroy( &imageTypes ); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::SaveSnapshotL: Out"); - - ShowProgressNoteL(); - } - } - - -TBool CVeiSimpleCutVideoContainer::LaunchSavingDialogsL() - { - TBool ret = EFalse; - RFs fs = CCoeEnv::Static()->FsSession(); - - iSnapshotFileName.Zero(); - iSnapshotFileName.Append( iView.Settings().DefaultSnapshotName() ); - iSnapshotFileName.Append( _L(".JPEG") ); - - // Multiple drive support -#ifdef RD_MULTIPLE_DRIVE - TDriveNumber driveNumber; - TFileName driveAndPath; - CAknMemorySelectionDialogMultiDrive* multiDriveDlg = - CAknMemorySelectionDialogMultiDrive::NewL(ECFDDialogTypeSave, EFalse ); - - CleanupStack::PushL(multiDriveDlg); - - // launch "Select memory" query - if (multiDriveDlg->ExecuteL( driveNumber, &driveAndPath, NULL )) - { - driveAndPath.Append( PathInfo::ImagesPath() ); - - iSnapshotFileName.Insert(0,driveAndPath); - - // Generate a default name for the new file - CApaApplication::GenerateFileName( fs, iSnapshotFileName ); - - // launch file name prompt dialog - if (CAknFileNamePromptDialog::RunDlgLD(iSnapshotFileName, driveAndPath, KNullDesC)) - { - driveAndPath.Append(iSnapshotFileName); - iSnapshotFileName = driveAndPath; - ret = ETrue; - } - else - { - iTakeSnapshot = EFalse; - iTakeSnapshotWaiting = EFalse; - } - } - else - { - iTakeSnapshot = EFalse; - iTakeSnapshotWaiting = EFalse; - } - CleanupStack::PopAndDestroy( multiDriveDlg ); -#else // no multiple drive support - CAknMemorySelectionDialog::TMemory selectedMemory(CAknMemorySelectionDialog::EPhoneMemory); - // launch "Select memory" query - if (CAknMemorySelectionDialog::RunDlgLD(selectedMemory)) - { - // create path for the image - TFileName driveAndPath; - if (selectedMemory == CAknMemorySelectionDialog::EPhoneMemory) - { - driveAndPath.Copy( PathInfo::PhoneMemoryRootPath() ); - driveAndPath.Append( PathInfo::ImagesPath() ); - } - else if (selectedMemory == CAknMemorySelectionDialog::EMemoryCard) - { - driveAndPath.Copy( PathInfo::MemoryCardRootPath() ); - driveAndPath.Append( PathInfo::ImagesPath() ); - } - - iSnapshotFileName.Insert(0,driveAndPath); - - // Generate a default name for the new file - CApaApplication::GenerateFileName( fs, iSnapshotFileName ); - - // launch file name prompt dialog - if (CAknFileNamePromptDialog::RunDlgLD(iSnapshotFileName, driveAndPath, KNullDesC)) - { - driveAndPath.Append(iSnapshotFileName); - iSnapshotFileName = driveAndPath; - ret = ETrue; - } - else - { - iTakeSnapshot = EFalse; - iTakeSnapshotWaiting = EFalse; - } - } - else - { - iTakeSnapshot = EFalse; - iTakeSnapshotWaiting = EFalse; - } -#endif - return ret; - } - -void CVeiSimpleCutVideoContainer::CancelSnapshotSave() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::CancelSnapshotSave: in"); - if ( iConverter ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::CancelSnapshotSave: 1"); - iConverter->Cancel(); - iConverter->CancelEncoding(); //also close the file - } - if ( iSaveToFileName ) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::CancelSnapshotSave: 2, iSaveToFileName:%S", iSaveToFileName); - - RFs& fs = iEikonEnv->FsSession(); - /*TInt result =*/ fs.Delete( *iSaveToFileName ); - delete iSaveToFileName; - iSaveToFileName = NULL; - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::CancelSnapshotSave: out"); - } - -void CVeiSimpleCutVideoContainer::CloseStreamL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::CloseStreamL, in"); - if( !iFrameReady && iVideoClipInfo ) - { - iVideoClipInfo->CancelFrame(); - } - PlaybackPositionL(); - iState = EStateStopped; - iView.UpdateCBAL(iState); - - iVideoDisplay->Stop( ETrue ); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::CloseStreamL, out"); - } - -void CVeiSimpleCutVideoContainer::SetInTime( const TTimeIntervalMicroSeconds& aTime ) - { - if ( iCutTimeDisplay ) - { - iCutTimeDisplay->SetCutIn( aTime ); - } - if ( iCutVideoBar ) - { - iCutVideoBar->SetInPoint( aTime ); - } - } - -void CVeiSimpleCutVideoContainer::SetOutTime( const TTimeIntervalMicroSeconds& aTime ) - { - if ( iCutTimeDisplay ) - { - iCutTimeDisplay->SetCutOut( aTime ); - } - if ( iCutVideoBar ) - { - iCutVideoBar->SetOutPoint( aTime ); - } - } - -TTimeIntervalMicroSeconds CVeiSimpleCutVideoContainer::PlaybackPositionL() - { - if ( ( iSeeking ) || ( EStateStopped == iState ) ) - { - return iSeekPos; - } - if ( iState != EStatePlaying ) - { - return iLastPosition; - } - - if ( iVideoClipInfo && (iVideoDisplay->PositionL() < iVideoClipInfo->Duration()) ) - { - iLastPosition = iVideoDisplay->PositionL(); - } - - if ( ( iLastPosition == TTimeIntervalMicroSeconds( 0 ) ) && - ( iSeekPos != TTimeIntervalMicroSeconds( 0 ) ) ) - { - return iSeekPos; - } - - return iLastPosition; - } - -TKeyResponse CVeiSimpleCutVideoContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) - { - if ( aType == EEventKeyDown ) - { - iKeyRepeatCount = 0; - if(aKeyEvent.iScanCode == EStdKeyDevice7) //for camera key - { - PauseL(ETrue); - } - TBool shiftKeyPressed = (aKeyEvent.iModifiers & EModifierShift ); - if( shiftKeyPressed ) - { - if( iView.IsEnoughFreeSpaceToSaveL() && (iTakeSnapshot == EFalse )) - { - /*if (EStatePlaying == iState) - { - PauseL(); - } - */ - TakeSnapshotL(); - } - return EKeyWasConsumed; - } - - return EKeyWasNotConsumed; - } - else if ( aType == EEventKeyUp ) - { - if ( iSeeking == EFalse ) - { - return EKeyWasNotConsumed; - } - iLastPosition = iSeekPos; - iVideoDisplay->SetPositionL( iSeekPos ); - - iSeeking = EFalse; - - if ( ( ( EStateStopped == iState ) || ( EStateStoppedInitial == iState ) - || ( EStatePaused == iState )) && - ( ( iLastKeyCode == EKeyLeftArrow ) || ( iLastKeyCode == EKeyRightArrow ) ) ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::OfferKeyEventL: 1, calling GetThumbAtL()"); - GetThumbAtL( iSeekPos ); - return EKeyWasConsumed; - } - else if ( EStatePlaying == iState ) - { - if ( iVideoBarTimer->IsActive() ) - { - iVideoBarTimer->Cancel(); - } - - if ( iVideoClipInfo && (iSeekPos >= iVideoClipInfo->Duration()) ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::OfferKeyEventL: 2, calling iVideoDisplay->Stop"); - iVideoDisplay->Stop( EFalse ); - } - else - { - iVideoDisplay->SetPositionL( iSeekPos ); - iVideoDisplay->ShowBlackScreen(); - if (iVideoClipInfo && !iFrameReady) - { - iVideoClipInfo->CancelFrame(); - } - iVideoDisplay->Play(); - } - return EKeyWasConsumed; - } - else - { - return EKeyWasConsumed; - } - } - else if ( aType == EEventKey ) - { - iLastKeyCode = aKeyEvent.iCode; - - switch (aKeyEvent.iCode) - { - case EKeyEnter: - { - if ( EStateStoppedInitial == iState ) - { - iView.HandleCommandL( EVeiCmdCutVideoViewPlay ); - } - else - { - if ( EStatePlaying == iState || EStatePlayingMenuOpen == iState ) - { - PauseL(); - } - iView.ProcessCommandL( EAknSoftkeyOptions ); - } - return EKeyWasConsumed; - } - case EKeyOK: - { - iView.HandleCommandL( EAknSoftkeyOk ); - return EKeyWasConsumed; - } - case EKeyDownArrow: - case EKeyUpArrow: - { - iVideoDisplay->OfferKeyEventL( aKeyEvent, aType ); - return EKeyWasConsumed; - } - case EKeyRightArrow: - { - iKeyRepeatCount++; - - if ( (iKeyRepeatCount > 2) && (iSeeking == EFalse) ) - { - if ( EStatePlaying == iState ) - { - iSeekPos = iVideoDisplay->PositionL(); - } - - iVideoDisplay->PauseL(); - iSeeking = ETrue; - iKeyRepeatCount = 0; - } - - if ( iSeeking && ( iState!=EStateInitializing ) && - ( iState!=EStatePlayingMenuOpen ) ) - { - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - - TInt64 newPos = iSeekPos.Int64() + adjustment; - if ( iVideoClipInfo && (newPos > iVideoClipInfo->Duration().Int64()) ) - { - newPos = iVideoClipInfo->Duration().Int64(); - } - - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - - iCutVideoBar->SetCurrentPoint( (static_cast(iSeekPos.Int64() / 1000))); - - iView.UpdateTimeL(); - return EKeyWasConsumed; - } - return EKeyWasNotConsumed; - } - - case EKeyLeftArrow: - { - iKeyRepeatCount++; - - if ( (iKeyRepeatCount > 2) && (iSeeking == EFalse) ) - { - - if ( EStatePlaying == iState ) - { - iSeekPos = iVideoDisplay->PositionL(); - } - - iVideoDisplay->PauseL(); - iSeeking = ETrue; - iKeyRepeatCount = 0; - } - - if ( iSeeking && ( iState!=EStateInitializing ) && - ( iState!=EStatePlayingMenuOpen ) ) - { - - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - - TInt64 newPos = iSeekPos.Int64() - adjustment; - if ( newPos < 0 ) - { - newPos = 0; - } - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - - iCutVideoBar->SetCurrentPoint( static_cast((iSeekPos.Int64() / 1000)) ); - - iView.UpdateTimeL(); - - return EKeyWasConsumed; - } - return EKeyWasNotConsumed; - } - case EKeyBackspace: //Clear - { - if (EStatePlaying != iState) - { - iView.ClearInOutL( ETrue, ETrue ); - } - - return EKeyWasConsumed; - } - default: - { - return EKeyWasNotConsumed; - } - } - } - else - { - return EKeyWasNotConsumed; - } - } - -TInt CVeiSimpleCutVideoContainer::TimeIncrement(TInt aKeyCount) const - { - if ( aKeyCount < 3 ) - { - return 100000; - } - else if ( aKeyCount < 4 ) - { - return 300000; - } - else if ( aKeyCount < 5 ) - { - return 500000; - } - else if ( aKeyCount < 10 ) - { - return 1000000; - } - else if ( aKeyCount < 13 ) - { - return 2000000; - } - else if ( aKeyCount < 15 ) - { - return 3000000; - } - else - { - return 5000000; - } - } - -TInt CVeiSimpleCutVideoContainer::UpdateProgressNote() - { - TTime intervalTime; - intervalTime.HomeTime(); - intervalTime += TTimeIntervalMicroSeconds( 50000 ); - TTime currentTime; - currentTime.HomeTime(); - while ( intervalTime > currentTime ) - { - currentTime.HomeTime(); - } - - iProgressDialog->GetProgressInfoL()->IncrementAndDraw( 1 ); - - if ( KProgressbarFinalValue <= iProgressDialog->GetProgressInfoL()->CurrentValue() ) - { - return 0; - } - return 1; - } - - -void CVeiSimpleCutVideoContainer::GetThumbL( const TDesC& aFilename ) - { - if ( iVideoClipInfo ) - { - delete iVideoClipInfo; - iVideoClipInfo = NULL; - } - - /*iVideoClipInfo = */CVedVideoClipInfo::NewL( aFilename, *this ); - } - - -void CVeiSimpleCutVideoContainer::GetThumbAtL( const TTimeIntervalMicroSeconds& aTime ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::GetThumbAtL: In"); - if( !iVideoClipInfo ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::GetThumbAtL: 1"); - return; - } - if ( !iFrameReady ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::GetThumbAtL: 1.5"); - iVideoClipInfo->CancelFrame(); - } - - TRect clipResolution = iVideoClipInfo->Resolution(); - TSize resolution( iVideoDisplay->Size() ); - - TInt frameIndex; - TInt totalFrameCount; - - frameIndex = iVideoClipInfo->GetVideoFrameIndexL( aTime ); - totalFrameCount = iVideoClipInfo->VideoFrameCount(); - - if ( frameIndex > totalFrameCount ) - { - frameIndex = totalFrameCount; - } - - //Generates a thumbnail bitmap of the given frame from video clip - if ( iTakeSnapshot ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::GetThumbAtL: 2"); - TDisplayMode displayMode = ENone; - TBool enhance = EFalse; - TSize resol( clipResolution.iBr.iX, clipResolution.iBr.iY ); - /* : - check out on every phone before releasing whether videodisplay should be stopped before starting - asynchronous GetFrameL() - see how EStateGettingFrame is handled in SetPreviewState - Stopping frees memory and it is needed in memory sensible devices - */ - iVideoClipInfo->GetFrameL( *this, frameIndex, &resol ); //, displayMode, enhance ); - SetStateL( EStateGettingFrame ); - iFrameReady = EFalse; -// ShowProgressNoteL(); - } - else - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::GetThumbAtL: 3"); - /* : - check out on every phone before releasing whether videodisplay should be stopped before starting - asynchronous GetFrameL() - see how EStateGettingFrame is handled in SetPreviewState - Stopping frees memory and it is needed in memory sensible devices - */ - TSize resol( clipResolution.iBr.iX, clipResolution.iBr.iY ); - iVideoClipInfo->GetFrameL( *this, frameIndex, &resol ); - SetStateL( EStateGettingFrame ); - iFrameReady = EFalse; - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::GetThumbAtL: out"); - } - -void CVeiSimpleCutVideoContainer::NotifyCompletion( TInt aErr ) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyCompletion: In, aErr:%d", aErr); - - if (EStateTerminating == iState) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyCompletion(): 1, app is closing..."); - return; - } - - if ( KErrNone == aErr ) - { - //Update notification to Media Gallery - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyCompletion: 2"); - - if (iProgressDialog) - { - TRAP_IGNORE(iProgressDialog->GetProgressInfoL()->SetAndDraw( KProgressbarFinalValue ); - iProgressDialog->ProcessFinishedL()); - } - } - else - { - if (iProgressDialog) - { - TRAP_IGNORE(iProgressDialog->GetProgressInfoL()->SetAndDraw( KProgressbarFinalValue ); - iProgressDialog->ProcessFinishedL()); - } - iErrorUI.ShowGlobalErrorNote( aErr ); - } - - // to eliminate previous (wrong) output file from being deleted in CancelSnapshotSave() - delete iSaveToFileName; - iSaveToFileName = NULL; - - // to fix progress bar shadow - DrawDeferred(); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyCompletion: Out"); - } - -void CVeiSimpleCutVideoContainer::NotifyVideoClipInfoReady( CVedVideoClipInfo& aInfo, - TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeisimpleCutVideoContainer::NotifyVideoClipInfoReady, In, aError:%d", aError); - if (KErrNone == aError) - { - if (iVideoClipInfo) - { - delete iVideoClipInfo; - iVideoClipInfo = NULL; - } - iVideoClipInfo = &aInfo; - - TRect clipResolution = iVideoClipInfo->Resolution(); - iDuration = iVideoClipInfo->Duration(); - iCutVideoBar->SetTotalDuration( iDuration ); - iView.DrawTimeNaviL(); - - TSize resolution( clipResolution.iBr.iX, clipResolution.iBr.iY ); - iFrameReady = EFalse; - iVideoClipInfo->GetFrameL( *this, 0, &resolution ); - } - SetStateL( EStateStoppedInitial ); - LOG(KVideoEditorLogFile, "CVeisimpleCutVideoContainer::NotifyVideoClipInfoReady, Out"); - } - - -void CVeiSimpleCutVideoContainer::NotifyVideoClipFrameCompleted(CVedVideoClipInfo& /*aInfo*/, - TInt aError, - CFbsBitmap* aFrame) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoClipFrameCompleted, In, aError:%d", aError); - iFrameReady = ETrue; - - if (EStateGettingFrame == iState) - { - SetStateL(iPreviousState); - } - - if (KErrNone == aError && aFrame) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoClipFrameCompleted 1"); - - if ( iTakeSnapshot ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoClipFrameCompleted 2"); - iConverter->SetBitmap( aFrame ); - if (! iCallBackSaveSnapshot) - { - TCallBack cb (CVeiSimpleCutVideoContainer::AsyncSaveSnapshot, this); - iCallBackSaveSnapshot = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard); - } - iCallBackSaveSnapshot->CallBack(); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoClipFrameCompleted 3"); - } - else - { - LOG(KVideoEditorLogFile, "CVeisimpleCutVideoContainer::NotifyVideoClipFrameCompleted 4"); - TRAP_IGNORE(iVideoDisplay->ShowPictureL( *aFrame )); - delete aFrame; - aFrame = NULL; - - if (iTakeSnapshotWaiting) - { - if (! iCallBackTakeSnapshot) - { - TCallBack cb (CVeiSimpleCutVideoContainer::AsyncTakeSnapshot, this); - iCallBackTakeSnapshot = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard); - } - iCallBackTakeSnapshot->CallBack(); - } - } - } - else - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoClipFrameCompleted 5"); - if (aFrame) - { - delete aFrame; - aFrame = NULL; - } - - if (iProgressDialog) - { - iProgressDialog->GetProgressInfoL()->SetAndDraw( KProgressbarFinalValue ); - TRAP_IGNORE(iProgressDialog->ProcessFinishedL()); - } - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoClipFrameCompleted, Out"); - } - -TInt CVeiSimpleCutVideoContainer::AsyncSaveSnapshot(TAny* aThis) - { - LOG( KVideoEditorLogFile, "CVeiSimpleCutVideoView::AsyncSaveSnapshot in"); - - // In the asynchronous version, trap the rest of the functions - // to make sure that the caller's TRequestStatus is always - // completed, also in case of failures. - CVeiSimpleCutVideoContainer* container = static_cast(aThis); - TInt err = KErrNone; - TRAP(err, container->SaveSnapshotL()); - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::AsyncSaveSnapshot 2, err:%d", err); - - if (KErrNone != err) - { - container->StopProgressDialog(); - container->ShowGlobalErrorNote(err); - } - LOG( KVideoEditorLogFile, "CVeiEditVideoView::AsyncSaveSnapshot 3, returning"); - return KErrNone; - } - -void CVeiSimpleCutVideoContainer::ShowGlobalErrorNote(const TInt aErr) - { - iErrorUI.ShowGlobalErrorNote( aErr ); - } - -void CVeiSimpleCutVideoContainer::StopProgressDialog() - { - if (iProgressDialog) - { - TRAP_IGNORE(iProgressDialog->GetProgressInfoL()->SetAndDraw( KProgressbarFinalValue ); - iProgressDialog->ProcessFinishedL()); - } - } - -void CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, In"); - - if (EStateTerminating == iState) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent(): 1, app is closing..."); - return; - } - - switch (aEvent) - { - case MVeiVideoDisplayObserver::ELoadingStarted: - { - SetStateL(EStateOpening); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::ELoadingStarted"); - break; - } - case MVeiVideoDisplayObserver::EOpenComplete: - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::EOpenComplete 1"); - iVideoDisplay->SetRotationL( EVideoRotationNone ); - TTimeIntervalMicroSeconds cutInTime = iView.GetVideoClipCutInTime(); - TTimeIntervalMicroSeconds cutOutTime = iView.GetVideoClipCutOutTime(); - - if ( iView.IsForeground() ) - { - if (iVideoClipInfo && !iFrameReady) - { - iVideoClipInfo->CancelFrame(); - } - if ( iPlayOrPlayMarked ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::EOpenComplete 2"); - iVideoDisplay->PlayMarkedL( cutInTime, cutOutTime ); - } - else - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::EOpenComplete 3"); - iVideoDisplay->Play(); - } - iPlayOrPlayMarked = EFalse; - } - else - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EOpenComplete 4"); - PauseL(); - } - break; - } - case MVeiVideoDisplayObserver::EBufferingStarted: - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EBufferingStarted"); - SetStateL( EStateBuffering ); - if ( iVideoBarTimer ) - { - iVideoBarTimer->Cancel(); - } - break; - } - case MVeiVideoDisplayObserver::ELoadingComplete: - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::ELoadingComplete 1"); - // if VED is put to background in the middle of the buffering - // iVideoDisplay->PauseL(); cannot be called during the buffering, so its called here - if (EStatePaused == iState) - { - iVideoDisplay->PauseL(); - } - else - { - SetStateL( EStatePlaying ); - if (iVideoClipInfo && !iFrameReady) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::ELoadingComplete 2"); - iVideoClipInfo->CancelFrame(); - } - if ( !iVideoBarTimer->IsActive() ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::ELoadingComplete 3"); - const TUint delay = 100000; - iVideoBarTimer->Start( delay, delay, TCallBack( CVeiSimpleCutVideoContainer::DoAudioBarUpdate, this ) ); - } - iVideoDisplay->ShowBlackScreen(); - DrawDeferred(); - } - break; - } - case MVeiVideoDisplayObserver::EPlayComplete: - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::EPlayComplete"); - iVideoDisplay->SetBlackScreen( EFalse ); - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - iLastPosition = TotalLength(); - iView.StopNaviPaneUpdateL(); - iCutVideoBar->SetFinishedStatus( ETrue ); - - if (iVideoBarTimer) - { - iVideoBarTimer->Cancel(); - } - - GetThumbAtL(0); - iVideoDisplay->Stop( ETrue ); - SetStateL( EStateStopped ); - - if (KErrNoMemory == aInfo || KErrSessionClosed == aInfo) - { - iErrorUI.ShowGlobalErrorNote( aInfo ); - StopL(); - CloseStreamL(); - } - - DrawDeferred(); - break; - } - case MVeiVideoDisplayObserver::EStop: - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EStop"); - - if (EStateGettingFrame == iState) - { - break; - } - - if ( iVideoBarTimer ) - { - iVideoBarTimer->Cancel(); - } - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - GetThumbAtL(0); - iLastPosition = TotalLength(); - iView.StopNaviPaneUpdateL(); - iCutVideoBar->SetFinishedStatus( ETrue ); - iVideoDisplay->Stop( ETrue ); - SetStateL( EStateStopped ); - DrawDeferred(); - break; - } - case MVeiVideoDisplayObserver::EVolumeLevelChanged: - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::EVolumeLevelChanged"); - TInt playerVolume = iVideoDisplay->Volume(); - iView.ShowVolumeLabelL( playerVolume ); - break; - } - case MVeiVideoDisplayObserver::EError: - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent() MVeiVideoDisplayObserver::EError"); -// iErrorUI.ShowGlobalErrorNoteL( KErrGeneral ); - SetStateL( EStateStoppedInitial ); - break; - } - default: - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, MVeiVideoDisplayObserver::default"); - break; - }; - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::NotifyVideoDisplayEvent, Out"); - } - - -void CVeiSimpleCutVideoContainer::SetStateL(CVeiSimpleCutVideoContainer::TCutVideoState aState, TBool aUpdateCBA) - { - LOGFMT2(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::SetStateL: in, iState:%d, aState:%d", iState, aState); - if (EStateGettingFrame == aState) - { - iPreviousState = iState; - } - - iState = aState; - if (EStatePaused == iState) - { - DrawNow(); - } - - // If the foreground is lost while an arrow key is down, we do not get - // the key up -event, and iSeeking remains true. Reseting it here just in case. - iSeeking = EFalse; - - if ( aUpdateCBA ) - { - iView.UpdateCBAL( iState ); - } - - //#ifdef STOP_PLAYER_DURING_GETFRAME - if (EStateGettingFrame == aState) - { - /* : - check out on every phone before releasing whether videodisplay should be stopped before starting - asynchronous GetFrameL() - see how EStateGettingFrame is handled in SetPreviewState - Stopping frees memory and it is needed in memory sensible devices - */ - //iVideoDisplay->Stop(ETrue); - } - //#endif - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::SetStateL:: out"); - } - - -void CVeiSimpleCutVideoContainer::MarkedInL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::MarkedInL, In"); - if ( EStateInitializing == iState ) - { - return; - } - const TTimeIntervalMicroSeconds& position = PlaybackPositionL(); - iSeekPos = position; - - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::MarkedInL, 2, setting cutINpoint:%Ld", position.Int64()); - iCutVideoBar->SetInPoint( position ); - TInt tempPos = static_cast((position.Int64()/1000)); - iCutVideoBar->SetCurrentPoint( tempPos ); - - if( !AknLayoutUtils::PenEnabled() ) - { - iCutTimeDisplay->SetCutIn( position ); - } - - PauseL(); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::MarkedInL, Out"); - } - -void CVeiSimpleCutVideoContainer::MarkedOutL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::MarkedOutL, In"); - if ( EStateInitializing == iState ) - { - return; - } - const TTimeIntervalMicroSeconds& position = PlaybackPositionL(); - iSeekPos = position; - - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::MarkedOutL, 2, setting cutOUTpoint:%Ld", position.Int64()); - iCutVideoBar->SetOutPoint( position ); - TInt tempPos = static_cast((position.Int64()/1000)); - iCutVideoBar->SetCurrentPoint( tempPos ); - - if( !AknLayoutUtils::PenEnabled() ) - { - iCutTimeDisplay->SetCutOut( position ); - } - - PauseL(); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::MarkedOutL, Out"); - } - -void CVeiSimpleCutVideoContainer::ShowInformationNoteL( const TDesC& aMessage ) const - { - CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); - note->ExecuteLD( aMessage ); - } - -void CVeiSimpleCutVideoContainer::ShowProgressNoteL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::ShowProgressNoteL, in"); - iProgressDialog = new ( ELeave ) CAknProgressDialog( REINTERPRET_CAST( CEikDialog**, - &iProgressDialog ), ETrue); - iProgressDialog->SetCallback( this ); - iProgressDialog->PrepareLC( R_VEI_PROGRESS_NOTE_WITH_CANCEL ); - - HBufC* stringholder; - TApaAppCaption caption; - TRAPD( err, ResolveCaptionNameL( caption ) ); - - // If something goes wrong, show basic "Saving" note - if ( err ) - { - stringholder = iEikonEnv->AllocReadResourceLC( R_VEI_PROGRESS_NOTE_SAVING ); - } - else - { - stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_SAVING_IMAGE, caption, iEikonEnv ); - } - - iProgressDialog->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iProgressDialog->GetProgressInfoL()->SetFinalValue( KProgressbarFinalValue ); - iProgressDialog->RunLD(); - - iProgressDialog->GetProgressInfoL()->SetAndDraw( 50 ); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::ShowProgressNoteL, Out"); - } - -//============================================================================= -void CVeiSimpleCutVideoContainer::ResolveCaptionNameL( TApaAppCaption& aCaption ) const - { - RApaLsSession appArcSession; - CleanupClosePushL( appArcSession ); - User::LeaveIfError( appArcSession.Connect() ); - - // Get Media Gallery caption - TApaAppInfo appInfo; - User::LeaveIfError( appArcSession.GetAppInfo( appInfo, TUid::Uid( KMediaGalleryUID3 ) ) ); - - aCaption = appInfo.iCaption; - - CleanupStack::PopAndDestroy( &appArcSession ); - } - -TInt CVeiSimpleCutVideoContainer::DoAudioBarUpdate( TAny* aThis ) - { - STATIC_CAST( CVeiSimpleCutVideoContainer*, aThis )->DoUpdate(); - return 42; - } - -void CVeiSimpleCutVideoContainer::DoUpdate() - { - TTimeIntervalMicroSeconds time; - time = iVideoDisplay->PositionL(); - if ( iSeeking ) - { - time = iSeekPos; - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::DoUpdate(): 1, time:%Ld", time.Int64()); - } - else - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::DoUpdate(): 2, time:%Ld", time.Int64()); - } - iCutVideoBar->SetCurrentPoint( static_cast((time.Int64() / 1000))); - iCutVideoBar->DrawDeferred(); - } -void CVeiSimpleCutVideoContainer::MuteL() - { - iVideoDisplay->SetMuteL( ETrue ); - } - -//============================================================================= -void CVeiSimpleCutVideoContainer::HandleVolumeUpL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::HandleVolumeUpL: in"); - - iVideoDisplay->AdjustVolumeL( 1 ); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::HandleVolumeUpL: out"); - } - - -void CVeiSimpleCutVideoContainer::SetVolumeLevelL( TInt aVolume ) - { - iVideoDisplay->AdjustVolumeL( aVolume - iVideoDisplay->Volume() ); - } - -//============================================================================= -void CVeiSimpleCutVideoContainer::HandleVolumeDownL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::HandleVolumeDownL: in"); - - iVideoDisplay->AdjustVolumeL( -1 ); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::HandleVolumeDownL: out"); - } - -//============================================================================= -void CVeiSimpleCutVideoContainer::PrepareForTerminationL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::PrepareForTerminationL: in"); - - SetStateL( EStateTerminating ); - - if( !iFrameReady && iVideoClipInfo ) - { - iVideoClipInfo->CancelFrame(); - } - iState = EStateTerminating; - iVideoDisplay->Stop( ETrue ); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::PrepareForTerminationL: out"); - } - -TInt CVeiSimpleCutVideoContainer::AsyncTakeSnapshot(TAny* aThis) - { - LOG( KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::AsyncTakeSnapshot"); - - // In the asynchronous version, trap the rest of the functions - // to make sure that the caller's TRequestStatus is always - // completed, also in case of failures. - CVeiSimpleCutVideoContainer* container = static_cast(aThis); - TInt err = KErrNone; - TRAP(err, container->TakeSnapshotL()); - LOGFMT( KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::AsyncTakeSnapshot 1, err:%d", err); - User::LeaveIfError(err); - return KErrNone; - } - -void CVeiSimpleCutVideoContainer::HandleVideoClickedL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoContainer::HandleVideoClickedL"); - - if ( EStatePlaying != iState && EStatePlayingMenuOpen != iState ) - { - iView.HandleCommandL( EVeiCmdCutVideoViewPlay ); - } - else if ( EStatePlaying == iState || EStatePlayingMenuOpen == iState ) - { - PauseL(); -// iView.HandleCommandL( EVeiCmdCutVideoViewStop ); - } - } - -void CVeiSimpleCutVideoContainer::FocusChanged( TDrawNow /*aDrawNow*/ ) - { - if (IsFocused()) - { - DrawDeferred(); - } - } -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/src/VeiSimpleCutVideoDocument.cpp --- a/videditor/SimpleCutVideo/src/VeiSimpleCutVideoDocument.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES -#include "VeiSimpleCutVideoDocument.h" -#include "VeiSimpleCutVideoAppUi.h" - -// ================= MEMBER FUNCTIONS ======================= - -// constructor -CVeiSimpleCutVideoDocument::CVeiSimpleCutVideoDocument(CEikApplication& aApp) -: CAknDocument(aApp) - { - } - -// destructor -CVeiSimpleCutVideoDocument::~CVeiSimpleCutVideoDocument() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoDocument::~CVeiSimpleCutVideoDocument(): In"); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoDocument::~CVeiSimpleCutVideoDocument(): Out"); - } - -// Default constructor can leave. -void CVeiSimpleCutVideoDocument::ConstructL() - { - } - -// Two-phased constructor. -CVeiSimpleCutVideoDocument* CVeiSimpleCutVideoDocument::NewL( - CEikApplication& aApp) // CVeiApp reference - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoDocument::NewL: In "); - - CVeiSimpleCutVideoDocument* self = new (ELeave) CVeiSimpleCutVideoDocument( aApp ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoDocument::NewL: Out"); - return self; - } - -void CVeiSimpleCutVideoDocument::OpenFileL(CFileStore*& /*aFileStore*/, RFile& aFile) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoDocument::OpenFileL: In"); - - CleanupClosePushL( aFile ); - - // File handle must be closed. Open File Service won't do it. - // Using cleanup stack, because iAppUi->OpenFileL() may leave. -#ifdef DEBUG_ON - TFileName file; - User::LeaveIfError( aFile.FullName(file) ); - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoDocument::OpenFileL: %S", &file); -#endif - - static_cast(CCoeEnv::Static()->AppUi())->CutVideoL(ETrue, aFile); - - CleanupStack::PopAndDestroy( &aFile ); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoDocument::OpenFileL: Out"); - } - -// ---------------------------------------------------- -// CVeiSimpleCutVideoDocument::CreateAppUiL() -// constructs CVeiSimpleCutVideoAppUi -// ---------------------------------------------------- -// -CEikAppUi* CVeiSimpleCutVideoDocument::CreateAppUiL() - { - return new (ELeave) CVeiSimpleCutVideoAppUi; - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/src/VeiSimpleCutVideoView.cpp --- a/videditor/SimpleCutVideo/src/VeiSimpleCutVideoView.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1869 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES -// System includes -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "VeiSimpleCutVideoAppUi.h" -#include "VeiSimpleCutVideoView.h" -#include "VeiSimpleCutVideoContainer.h" -#include "VedSimpleCutVideo.hrh" -#include "veitempmaker.h" -#include "VeiTimeLabelNavi.h" -#include "videoeditorcommon.h" -#include "VideoeditorUtils.h" -#include "VeiErrorUi.h" -#include "veinavipanecontrol.h" - -void CVeiSimpleCutVideoView::ConstructL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::ConstructL: in"); - - BaseConstructL( R_VEI_CUT_VIDEO_VIEW ); - - iCVeiNaviPaneControl = CVeiNaviPaneControl::NewL( StatusPane() ); - - iErrorUI = CVeiErrorUI::NewL( *iCoeEnv ); - - iTimeUpdater = CPeriodic::NewL( CActive::EPriorityLow ); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::ConstructL: creating iMovie"); - iMovie = CVedMovie::NewL( NULL ); - iMovie->RegisterMovieObserverL( this ); - - iTempMaker = CVeiTempMaker::NewL(); - - iOverWriteFile = EFalse; - iPaused = EFalse; - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::ConstructL: out"); - } - -// --------------------------------------------------------- -TInt CVeiSimpleCutVideoView::AddClipL( const TDesC& aFilename, TBool /*aStartNow*/ ) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::AddClipL: In: %S", &aFilename); - - iMovie->InsertVideoClipL( aFilename, 0 ); - - iWaitDialog = new ( ELeave ) CAknWaitDialog( - REINTERPRET_CAST( CEikDialog**, &iWaitDialog ), ETrue); - iWaitDialog->PrepareLC(R_VEI_WAIT_NOTE_WITH_CANCEL); - iWaitDialog->SetCallback(this); - - HBufC* stringholder = StringLoader::LoadLC( R_VEI_OPENING, iEikonEnv ); - iWaitDialog->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy(stringholder); - - iWaitDialog->RunLD(); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::AddClipL: Out"); - return KErrNone; - } - - -// --------------------------------------------------------- -// CVeiSimpleCutVideoView::~CVeiSimpleCutVideoView() -// ?implementation_description -// --------------------------------------------------------- -// -CVeiSimpleCutVideoView::~CVeiSimpleCutVideoView() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::~CVeiSimpleCutVideoView(): In"); - - if ( iProgressNote ) - { - delete iProgressNote; - iProgressNote = NULL; - } - if ( iAnimatedProgressDialog ) - { - delete iAnimatedProgressDialog; - iAnimatedProgressDialog = NULL; - } - - if (iWaitDialog) - { - CloseWaitDialog(); - iWaitDialog->MakeVisible( EFalse ); - delete iWaitDialog; - iWaitDialog = NULL; - } - - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - delete iContainer; - iContainer = 0; - } - - if ( iTimeUpdater ) - { - iTimeUpdater->Cancel(); - delete iTimeUpdater; - } - - if ( iErrorUI ) - { - delete iErrorUI; - } - - if ( iMovie ) - { - iMovie->Reset(); - iMovie->UnregisterMovieObserver( this ); - delete iMovie; - iMovie = NULL; - } - - if ( iTempMaker ) - { - delete iTempMaker; - iTempMaker = NULL; - } - - if ( iSaveToFileName ) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - - if ( iTempFile ) - { - TInt err = iEikonEnv->FsSession().Delete( *iTempFile ); - if ( err ) - { - // what to do when error occurs in destructor??? - } - delete iTempFile; - iTempFile = NULL; - } - - delete iCallBack; - delete iCVeiNaviPaneControl; - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::~CVeiSimpleCutVideoView(): Out"); - } - -TUid CVeiSimpleCutVideoView::Id() const - { - return TUid::Uid( EVeiSimpleCutVideoView ); - } - -void CVeiSimpleCutVideoView::DialogDismissedL( TInt aButtonId ) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: In, abuttonId:%d", aButtonId); - if (iSaving) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 2"); - iSaving = EFalse; - if ( aButtonId != EAknSoftkeyDone ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 3"); - iMovie->CancelProcessing(); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 4"); - } - else if (KErrNone == iErrorNmb) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 5"); - iErrorNmb = 0; - RFs& fs = iEikonEnv->FsSession(); - CFileMan* fileman = CFileMan::NewL( fs ); - CleanupStack::PushL( fileman ); - - TInt moveErr( KErrNone ); - - // the user selects to overwrite the existing file - if (iOverWriteFile) - { - // temp file located in the same drive as the target file - if ( iTempFile->Left(1) == iMovie->VideoClipInfo( iIndex )->FileName().Left(1) ) - { - moveErr = fileman->Rename( *iTempFile, iMovie->VideoClipInfo( iIndex )->FileName(), CFileMan::EOverWrite ); - } - else - { - moveErr = fileman->Move( *iTempFile, iMovie->VideoClipInfo( iIndex )->FileName(), CFileMan::EOverWrite ); - } - if (!moveErr) - { - //AddClipL( iMovie->VideoClipInfo( iIndex )->FileName(), NULL ); - ClearInOutL(ETrue, ETrue); - iContainer->StopL(); - TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL(); - iContainer->GetThumbL( iMovie->VideoClipInfo( iIndex )->FileName() ); - } - } - // the user selects to save with a new file name - else - { - // both files located in the same drive - if ( iTempFile->Left(1) == iSaveToFileName->Left(1) ) - { - moveErr = fileman->Rename( *iTempFile, *iSaveToFileName ); - } - else - { - moveErr = fileman->Move( *iTempFile, *iSaveToFileName ); - } - if (!moveErr) - { - ClearInOutL(ETrue, ETrue); - iContainer->StopL(); - iMovie->RemoveVideoClip(0); - AddClipL( *iSaveToFileName, NULL ); - } - } - CleanupStack::PopAndDestroy( fileman ); - - delete iTempFile; - iTempFile = NULL; - - if ( moveErr ) - { - iErrorUI->ShowGlobalErrorNote( moveErr ); - } - - //if ( BaflUtils::FileExists(fs, *iSaveToFileName) ) - // Checking for iSaveToFileName doesn't work when overwriting so moveErr has to be used. - else - { - // Video saved successfully! - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 6"); - - // The marks can be removed now that the video is saved - // ClearInOutL(ETrue, ETrue); - // iContainer->StopL(); - //TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL(); - - // Publish & Subscribe API used to make the saved file name available to AIW provider - LOG(KVideoEditorLogFile, "CVeiEditVideoView::UpdateMediaGalleryL(): Calling RProperty::Define(KUidVideoEditorProperties, VideoEditor::EPropertyFilename, RProperty::EText); "); - TInt err = RProperty::Define(KUidVideoEditorProperties, VideoEditor::EPropertyFilename, RProperty::EText); - if (err != KErrAlreadyExists) - { - User::LeaveIfError(err); - } - User::LeaveIfError(RProperty::Set(KUidVideoEditorProperties, VideoEditor::EPropertyFilename, iSaveToFileName->Des())); - - - // the user has selected "Cut" or "Exit" - if (!iSaveOnly) - { - //AppUi()->Exit(); - if (! iCallBack) - { - TCallBack cb (CVeiSimpleCutVideoView::AsyncExit, this); - iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard); - } - iCallBack->CallBack(); - } - - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 7"); - } - else - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 8"); - iErrorUI->ShowGlobalErrorNote( iErrorNmb ); - iErrorNmb = 0; - } - } - else if (KErrCancel != aButtonId && iErrorNmb) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: 9"); - if (KErrCorrupt == iErrorNmb || KErrTooShortVideoForCut == iErrorNmb) - { - HBufC* stringholder = StringLoader::LoadLC( R_VEI_VIDEO_FAILED, iEikonEnv ); - CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue ); - dlg->ExecuteLD( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - } - else - { - iErrorUI->ShowGlobalErrorNote( iErrorNmb ); - } - - if (! iCallBack) - { - TCallBack cb (CVeiSimpleCutVideoView::AsyncExit, this); - iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityStandard); - } - iCallBack->CallBack(); - iErrorNmb = 0; - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DialogDismissedL: Out"); - } - -TInt CVeiSimpleCutVideoView::AsyncExit(TAny* aThis) - { - LOG( KVideoEditorLogFile, "CVeiSimpleCutVideoView::AsyncExit"); - - // In the asynchronous version, trap the rest of the functions - // to make sure that the caller's TRequestStatus is always - // completed, also in case of failures. - CVeiSimpleCutVideoView* view = static_cast(aThis); - view->PrepareForTermination(); - view->AppUi()->Exit(); - return KErrNone; - } - -void CVeiSimpleCutVideoView::DynInitMenuPaneL( TInt aResourceId,CEikMenuPane* aMenuPane ) - { - TInt state = iContainer->State(); - - if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU_CLEAR_MARKS) - { - // delete in, out, in & out as necessary. - - if (iMovie->VideoClipCutInTime(iIndex) <= TTimeIntervalMicroSeconds(0)) - { - aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksIn, ETrue); - } - if (iMovie->VideoClipCutOutTime(iIndex) >= iMovie->VideoClipInfo(iIndex)->Duration()) - { - aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksOut, ETrue); - } - - if (!((iMovie->VideoClipCutOutTime(iIndex) < iMovie->VideoClipInfo(iIndex)->Duration()) - && (iMovie->VideoClipCutInTime(iIndex) > TTimeIntervalMicroSeconds(0)))) - { - aMenuPane->SetItemDimmed(EVeiCmdCutVideoViewClearMarksInOut, ETrue); - } - } - - if ( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU ) - { - if ( iPopupMenuOpened != EFalse ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdCutVideoTakeSnapshot, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewHelp, ETrue ); - } - if ( !IsCutMarkSet() ) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewSave, ETrue ); - } - } - if ( !(( aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU ) || - ( aResourceId == R_VEI_CUT_VIDEO_VIEW_CONTEXT_MENU ) ) ) - return; - - if ( iContainer->PlaybackPositionL() >= iContainer->TotalLength() ) - { - if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue ); - } - - } - if ( ( state == CVeiSimpleCutVideoContainer::EStatePaused ) || - ( state == CVeiSimpleCutVideoContainer::EStateInitializing ) ) - { - if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue ); - } - } - - if ( ( state != CVeiSimpleCutVideoContainer::EStateStopped ) && - ( state != CVeiSimpleCutVideoContainer::EStateStoppedInitial ) && - ( state != CVeiSimpleCutVideoContainer::EStatePaused ) ) - { - if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewPlay, ETrue ); - } - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkIn, ETrue ); - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewMarkOut, ETrue ); - } - else - { - TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL(); - CVedVideoClipInfo* info = iMovie->VideoClipInfo( iIndex ); - - TInt cutInFrameIndex = info->GetVideoFrameIndexL( iMovie->VideoClipCutInTime( iIndex )); - TInt cutOutFrameIndex = info->GetVideoFrameIndexL( iMovie->VideoClipCutOutTime( iIndex )); - TInt videoFrameCount = info->VideoFrameCount(); - - // if we are in the existing start/end mark position the start/end mark is removed from the menu - if (info->GetVideoFrameIndexL(pos) == cutInFrameIndex) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkIn ); - } - else if (info->GetVideoFrameIndexL(pos) == cutOutFrameIndex) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkOut ); - } - - if( cutInFrameIndex < (videoFrameCount-1 ) ) - { - cutInFrameIndex++; - } - - if( cutOutFrameIndex > 0 ) - { - cutOutFrameIndex--; - } - - TTimeIntervalMicroSeconds nextFramePosCutIn = info->VideoFrameStartTimeL( cutInFrameIndex ); - TTimeIntervalMicroSeconds previousFramePosCutOut = info->VideoFrameStartTimeL( cutOutFrameIndex ); - - if ( pos < nextFramePosCutIn ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkOut ); - } - else - { - if ( pos > previousFramePosCutOut ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkIn ); - } - } - // something crashes somewhere outside VED UI if end mark is put to near to begin - TInt ind = -1; - if (aMenuPane->MenuItemExists(EVeiCmdCutVideoViewMarkOut, ind) && pos.Int64() < KMinCutVideoLength) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewMarkOut ); - } - } - if ( ( iMovie->VideoClipCutInTime( iIndex ) == TTimeIntervalMicroSeconds( 0 ) && - iMovie->VideoClipCutOutTime( iIndex ) == iMovie->VideoClipInfo( iIndex )->Duration() ) ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewPlayMarked ); - } - if ( state != CVeiSimpleCutVideoContainer::EStatePlayingMenuOpen && - state != CVeiSimpleCutVideoContainer::EStatePaused ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewContinue ); - } - if ( ( state == CVeiSimpleCutVideoContainer::EStateStopped ) || - ( state == CVeiSimpleCutVideoContainer::EStateStoppedInitial ) || - ( state == CVeiSimpleCutVideoContainer::EStateOpening ) || - ( state == CVeiSimpleCutVideoContainer::EStateBuffering ) ) - { - aMenuPane->DeleteMenuItem( EVeiCmdCutVideoViewStop ); - } - - if ( ( iMovie->VideoClipCutOutTime( iIndex ) >= iMovie->VideoClipInfo( iIndex )->Duration() ) && - ( iMovie->VideoClipCutInTime( iIndex ) <= TTimeIntervalMicroSeconds( 0 ) ) ) - { - if (aResourceId == R_VEI_CUT_VIDEO_VIEW_MENU) - { - aMenuPane->SetItemDimmed( EVeiCmdCutVideoViewClearMarks, ETrue ); - } - } - } - -void CVeiSimpleCutVideoView::HandleCommandL(TInt aCommand) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::HandleCommandL( %d ): In", aCommand); - - switch ( aCommand ) - { - case EAknSoftkeyOk: - { - iPopupMenuOpened = ETrue; - if (iContainer->State() == CVeiSimpleCutVideoContainer::EStatePlaying) - { - PausePreviewL(); - iContainer->SetStateL(CVeiSimpleCutVideoContainer::EStatePlayingMenuOpen); - } - - MenuBar()->TryDisplayMenuBarL(); - if (iContainer->State() == CVeiSimpleCutVideoContainer::EStatePlayingMenuOpen) - { - iContainer->SetStateL(CVeiSimpleCutVideoContainer::EStatePaused); - } - iPopupMenuOpened = EFalse; - break; - } - case EVeiCmdCutVideoViewBack: - case EAknSoftkeyBack: - { - PrepareForTermination(); - AppUi()->Exit(); - break; - } - case EVeiCmdCutVideoViewExit: - { - iSaveOnly = EFalse; - StopNaviPaneUpdateL(); - - iContainer->StopL(); - iContainer->CloseStreamL(); - - if ( ( iMovie->VideoClipCutInTime( 0 ) > TTimeIntervalMicroSeconds( 0 ) ) || - ( iMovie->VideoClipCutOutTime( 0 ) < iMovie->VideoClipInfo(0)->Duration() ) ) - { - if (VideoEditorUtils::LaunchSaveChangesQueryL()) - { - QueryAndSaveL(); - } - else - { - PrepareForTermination(); - AppUi()->Exit(); - } - } - else - { - PrepareForTermination(); - AppUi()->Exit(); - } - } - break; - case EVeiCmdCutVideoViewCut: - { - iSaveOnly = EFalse; - StopNaviPaneUpdateL(); - - iContainer->StopL(); - iContainer->CloseStreamL(); - - if ( ( iMovie->VideoClipCutInTime( 0 ) > TTimeIntervalMicroSeconds( 0 ) ) || - ( iMovie->VideoClipCutOutTime( 0 ) < iMovie->VideoClipInfo(0)->Duration() ) ) - { - QueryAndSaveL(); - } - break; - } - case EVeiCmdCutVideoViewSave: - { - iSaveOnly = ETrue; - - StopNaviPaneUpdateL(); - iContainer->StopL(); - iContainer->CloseStreamL(); - - QueryAndSaveL(); - break; - } - case EVeiCmdCutVideoViewMarkIn: - { - iCVeiNaviPaneControl->SetPauseIconVisibilityL( ETrue ); - MarkInL(); - break; - } - case EVeiCmdCutVideoViewMarkOut: - { - iCVeiNaviPaneControl->SetPauseIconVisibilityL( ETrue ); - MarkOutL(); - break; - } - case EVeiCmdCutVideoViewClearMarksInOut: - { - ClearInOutL( ETrue, ETrue ); - break; - } - case EVeiCmdCutVideoViewClearMarksIn: - { - ClearInOutL( ETrue, EFalse ); - break; - } - case EVeiCmdCutVideoViewClearMarksOut: - { - ClearInOutL( EFalse, ETrue ); - break; - } - case EVeiCmdCutVideoViewPlayMarked: - { - iCVeiNaviPaneControl->SetPauseIconVisibilityL( EFalse ); - PlayMarkedL(); - break; - } - case EVeiCmdCutVideoViewPlay: - { - iCVeiNaviPaneControl->SetPauseIconVisibilityL( EFalse ); - PlayPreviewL(); - break; - } - case EVeiCmdCutVideoViewStop: - { - iCVeiNaviPaneControl->SetPauseIconVisibilityL( EFalse ); - StopNaviPaneUpdateL(); - iContainer->StopL(); - break; - } - case EVeiCmdCutVideoViewContinue: - { - iCVeiNaviPaneControl->SetPauseIconVisibilityL( EFalse ); - PlayPreviewL(); - break; - } - case EVeiCmdCutVideoTakeSnapshot: - { - if( IsEnoughFreeSpaceToSaveL() ) - { - iContainer->TakeSnapshotL(); - } - break; - } - - // - // Options->Help - // - case EVeiCmdCutVideoViewHelp: - { - // CS Help launching is handled in Video Editor's AppUi. - AppUi()->HandleCommandL( EVeiCmdCutVideoViewHelp ); - break; - } - default: - { - AppUi()->HandleCommandL( aCommand ); - break; - } - } - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::HandleCommandL: out"); - } - -void CVeiSimpleCutVideoView::NotifyMovieProcessingStartedL( CVedMovie& /*aMovie*/ ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyMovieProcessingStartedL: In"); - iProcessed = 0; - // @ : r_ved_cutting_note_animation - //StartAnimatedProgressNote(); - StartProgressNoteL(); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyMovieProcessingStartedL: Out"); - } - -void CVeiSimpleCutVideoView::NotifyMovieProcessingProgressed( CVedMovie& /*aMovie*/, TInt aPercentage ) - { - //Not allow screensaver, when processing image. - User::ResetInactivityTime(); - - iProcessed = aPercentage; - if (iAnimatedProgressDialog) - { - iAnimatedProgressDialog->GetProgressInfoL()->SetAndDraw( aPercentage ); - } - else if (iProgressNote) - { - iProgressNote->GetProgressInfoL()->SetAndDraw( aPercentage ); - } - } - -void CVeiSimpleCutVideoView::NotifyMovieProcessingCompleted( CVedMovie& /*aMovie*/, TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyMovieProcessingCompleted: In, aError:%d", aError); - iErrorNmb = aError; - if (iAnimatedProgressDialog) - { - iAnimatedProgressDialog->GetProgressInfoL()->SetAndDraw( 100 ); - delete iAnimatedProgressDialog; - iAnimatedProgressDialog = NULL; - DialogDismissedL(EAknSoftkeyDone); - //TRAP_IGNORE( iAnimatedProgressDialog->ProcessFinishedL() ); - } - else if (iProgressNote) - { - iProgressNote->GetProgressInfoL()->SetAndDraw(100); - iProgressNote->ProcessFinishedL(); - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyMovieProcessingCompleted: Out"); - } - -void CVeiSimpleCutVideoView::NotifyVideoClipAdded( CVedMovie& /*aMovie*/, TInt aIndex) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyVideoClipAdded: In"); - - iErrorNmb = 0; - - TTimeIntervalMicroSeconds duration = iMovie->Duration(); - LOGFMT(KVideoEditorLogFile, "CVeiCutVideCVeiSimpleCutVideoView::NotifyVideoClipAdded, 2, duration:%Ld", duration.Int64()); -// if (duration.Int64() < KMinCutVideoLength) -// { -// LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyVideoClipAdded: 3"); -// iErrorNmb = KErrTooShortVideoForCut; -// iClosing = ETrue; -// } -// else - { - iAudioMuted = !( iMovie->VideoClipEditedHasAudio( aIndex ) ); - - iCVeiNaviPaneControl->SetPauseIconVisibilityL( EFalse ); - - if ( iAudioMuted ) - { - iCVeiNaviPaneControl->SetVolumeIconVisibilityL( EFalse ); - VolumeMuteL(); - } - else - { - iCVeiNaviPaneControl->SetVolumeIconVisibilityL( ETrue ); - } - -// iContainer->SetInTime( iMovie->VideoClipCutInTime( aIndex ) ); -// iContainer->SetOutTime( iMovie->VideoClipCutOutTime( aIndex ) ); - iContainer->GetThumbL( iMovie->VideoClipInfo( iIndex )->FileName() ); - } - - if (iWaitDialog) - { - delete iWaitDialog; - iWaitDialog = NULL; - } -// CloseWaitDialog(); - iContainer->DrawDeferred(); - - // video clip has to be added before setting the title pane text - // : handle leave - SetTitlePaneTextL(); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyVideoClipAdded: Out"); - } - -void CVeiSimpleCutVideoView::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyVideoClipAddingFailed: In, aError:%d", aError); - iErrorNmb = aError; - iClosing = ETrue; - - CloseWaitDialog(); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::NotifyVideoClipAddingFailed: Out"); - } - -void CVeiSimpleCutVideoView::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, - TInt /*aNewIndex*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyVideoClipTimingsChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyVideoClipColorEffectChanged( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyVideoClipAudioSettingsChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyStartTransitionEffectChanged( CVedMovie& /*aMovie*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyMiddleTransitionEffectChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyEndTransitionEffectChanged( CVedMovie& /*aMovie*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyAudioClipAdded( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyAudioClipAddingFailed( CVedMovie& /*aMovie*/, TInt /*aError*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyAudioClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, - TInt /*aNewIndex*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyAudioClipTimingsChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyMovieReseted( CVedMovie& /*aMovie*/ ) - { - } - -void CVeiSimpleCutVideoView::NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/, - TInt /*aIndex*/) - { - } - -void CVeiSimpleCutVideoView::NotifyVideoClipDescriptiveNameChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/) - { - } - -void CVeiSimpleCutVideoView::NotifyMovieQualityChanged(CVedMovie& /*aMovie*/) - { - } - -void CVeiSimpleCutVideoView::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/) - { - } - -void CVeiSimpleCutVideoView::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiSimpleCutVideoView::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiSimpleCutVideoView::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiSimpleCutVideoView::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiSimpleCutVideoView::CloseWaitDialog() - { - if ( iWaitDialog ) - { - TRAP_IGNORE( iWaitDialog->ProcessFinishedL() ); - } - } - - -void CVeiSimpleCutVideoView::DoActivateL( - const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/, - const TDesC8& /*aCustomMessage*/) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DoActivateL, In"); - iPaused = EFalse; - if (!iContainer) - { - iContainer = CVeiSimpleCutVideoContainer::NewL( AppUi()->ClientRect(), *this, *iErrorUI ); - iContainer->SetMopParent( this ); - AppUi()->AddToStackL( *this, iContainer ); - iCVeiNaviPaneControl->SetObserver( iContainer ); - } - - UpdateCBAL( CVeiSimpleCutVideoContainer::EStateInitializing ); - - CheckMemoryCardAvailabilityL(); - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::DoActivateL, out"); - } - -// --------------------------------------------------------- -// CVeiSimpleCutVideoView::HandleCommandL(TInt aCommand) -// ?implementation_description -// --------------------------------------------------------- -// -void CVeiSimpleCutVideoView::DoDeactivate() - { - if ( iTimeUpdater ) - { - iTimeUpdater->Cancel(); - } - - if ( iContainer ) - { - AppUi()->RemoveFromViewStack( *this, iContainer ); - - delete iContainer; - iContainer = NULL; - } - } - -void CVeiSimpleCutVideoView::PlayPreviewL() - { - iPaused = EFalse; - StartNaviPaneUpdateL(); - iContainer->PlayL( iMovie->VideoClipInfo( iIndex )->FileName() ); - } - -void CVeiSimpleCutVideoView::PausePreviewL() - { - iCVeiNaviPaneControl->SetPauseIconVisibilityL( ETrue ); - StopNaviPaneUpdateL(); - - iContainer->PauseL(); - } - -void CVeiSimpleCutVideoView::UpdateCBAL(TInt aState) - { - MenuBar()->SetContextMenuTitleResourceId( R_VEI_MENUBAR_CUT_VIDEO_VIEW_CONTEXT ); - switch (aState) - { - case CVeiSimpleCutVideoContainer::EStateInitializing: - case CVeiSimpleCutVideoContainer::EStateOpening: - case CVeiSimpleCutVideoContainer::EStateBuffering: - { - if (! iClosing) - { - Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY); - } - break; - } - case CVeiSimpleCutVideoContainer::EStateStoppedInitial: - { - if (! iClosing) - { - // no marks set - if ( ( iMovie->VideoClipCutInTime( 0 ) == TTimeIntervalMicroSeconds( 0 ) ) && - ( iMovie->VideoClipCutOutTime( 0 ) == iMovie->VideoClipInfo(0)->Duration() ) ) - { - // playhead in the beginning - if ( iContainer->PlaybackPositionL() == 0 || AknLayoutUtils::PenEnabled() ) - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_BACK__PLAY); - } - // playhead not in the beginning - else - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_IN_OUT__MENU); - } - } - //start or end mark has been set - else - { - // start mark has been set, end mark has not been set - // and the the playhead is on the right hand side of the start mark - if (( iMovie->VideoClipCutInTime( 0 ) != TTimeIntervalMicroSeconds( 0 ) ) && - ( iMovie->VideoClipCutOutTime( 0 ) == iMovie->VideoClipInfo(0)->Duration() ) && - ( iContainer->PlaybackPositionL() > iMovie->VideoClipCutInTime( 0 )) - && !AknLayoutUtils::PenEnabled() ) - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_OPTIONS_OUT__MENU ); - } - else - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_CUT__MENU); - } - } - } - break; - } - case CVeiSimpleCutVideoContainer::EStatePaused: - case CVeiSimpleCutVideoContainer::EStateStopped: - { - - // no marks set - if ( ( iMovie->VideoClipCutInTime( 0 ) == TTimeIntervalMicroSeconds( 0 ) ) && - ( iMovie->VideoClipCutOutTime( 0 ) == iMovie->VideoClipInfo(0)->Duration() ) ) - { - // playhead in the beginning - if (iContainer->PlaybackPositionL() == 0 || AknLayoutUtils::PenEnabled() ) - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_BACK__PLAY); - } - else - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_IN_OUT__MENU); - } - } - // start or end mark has been set - else - { - // start mark has been set, end mark has not been set - // and the the playhead is on the right hand side of the start mark - if (( iMovie->VideoClipCutInTime( 0 ) != TTimeIntervalMicroSeconds( 0 ) ) && - ( iMovie->VideoClipCutOutTime( 0 ) == iMovie->VideoClipInfo(0)->Duration() ) && - ( iContainer->PlaybackPositionL() > iMovie->VideoClipCutInTime( 0 )) - && !AknLayoutUtils::PenEnabled() ) - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_OPTIONS_OUT__MENU ); - } - else - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_CUT__MENU); - } - } - break; - } - case CVeiSimpleCutVideoContainer::EStatePlaying: - { - // playhead outside cut area - if ( iContainer->PlaybackPositionL() < iMovie->VideoClipCutInTime( iIndex ) ) - { - if ( AknLayoutUtils::PenEnabled() ) - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_NONE__MENU ); - } - else - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_STOP__MENU ); - } - iMarkState = EMarkStateIn; - } - // playdhead inside cut area - else if ( iContainer->PlaybackPositionL() < iMovie->VideoClipCutOutTime( iIndex ) ) - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_IN_OUT__MENU ); - iMarkState = EMarkStateInOut; - } - // playhead outside cut area - else - { - if ( AknLayoutUtils::PenEnabled() ) - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_NONE_OUT__MENU ); - } - else - { - Cba()->SetCommandSetL( R_VEI_SOFTKEYS_STOP_OUT__MENU ); - } - iMarkState = EMarkStateOut; - } - - break; - } - case CVeiSimpleCutVideoContainer::EStateTerminating: - { - return; - } - default: - { - break; - } - } - Cba()->DrawDeferred(); - } - -void CVeiSimpleCutVideoView::PlayMarkedL() - { - LOGFMT3(KVideoEditorLogFile, "CVeiSimpleCutVideoView::PlayMarkedL: In: iIndex:%d, iMovie->VideoClipCutInTime():%Ld, iMovie->VideoClipCutOutTime():%Ld", iIndex, iMovie->VideoClipCutInTime( iIndex ).Int64(), iMovie->VideoClipCutOutTime( iIndex ).Int64()); - iPaused = EFalse; - StartNaviPaneUpdateL(); - iContainer->PlayMarkedL( iMovie->VideoClipInfo( iIndex )->FileName(), - iMovie->VideoClipCutInTime( iIndex ), iMovie->VideoClipCutOutTime( iIndex ) ); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::PlayMarkedL: Out"); - } - -void CVeiSimpleCutVideoView::ClearInOutL( TBool aClearIn, TBool aClearOut ) - { - if ( aClearIn ) - { - iMovie->VideoClipSetCutInTime( iIndex, TTimeIntervalMicroSeconds( 0 ) ); - iContainer->SetInTime( iMovie->VideoClipCutInTime( iIndex ) ); - } - if ( aClearOut ) - { - iMovie->VideoClipSetCutOutTime( iIndex, iMovie->VideoClipInfo( iIndex )->Duration() ); - iContainer->SetOutTime( iMovie->VideoClipInfo( iIndex )->Duration() ); - } - TTimeIntervalMicroSeconds cutin = iMovie->VideoClipCutInTime( 0 ); - TTimeIntervalMicroSeconds cutout = iMovie->VideoClipCutOutTime( 0 ); - - if ( ( cutin == TTimeIntervalMicroSeconds( 0 ) ) && - ( cutout == iMovie->VideoClipInfo(0)->Duration() ) ) - { - Cba()->SetCommandSetL(R_VEI_SOFTKEYS_OPTIONS_BACK__MENU); - Cba()->DrawDeferred(); - } - } - -void CVeiSimpleCutVideoView::MarkInL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkInL, In"); - TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL(); - - // the start mark can't be put right to the beginning - // because start mark is at position 0 when it is not set - if (pos == 0) - { - pos = 1; - } - -// TTimeIntervalMicroSeconds clipDuration = iMovie->VideoClipInfo( iIndex )->Duration(); -// CVedVideoClipInfo* info = iMovie->VideoClipInfo( iIndex ); -// TTimeIntervalMicroSeconds intraPos = info->VideoFrameStartTimeL( -// info->GetVideoFrameIndexL( pos ) ); - if (iMovie->VideoClipCutOutTime(iIndex) > pos) - { - StopNaviPaneUpdateL(); - LOGFMT2(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkInL, 2, iIndex:%d, pos:%Ld", iIndex, pos.Int64()); - iMovie->VideoClipSetCutInTime( iIndex, pos ); - iContainer->MarkedInL(); - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkInL, Out"); - } - -void CVeiSimpleCutVideoView::MarkOutL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkOutL, In"); - TTimeIntervalMicroSeconds pos = iContainer->PlaybackPositionL(); -// CVedVideoClipInfo* info = iMovie->VideoClipInfo( iIndex ); -// TTimeIntervalMicroSeconds intraPos = info->VideoFrameStartTimeL( -// info->GetVideoFrameIndexL( pos ) ); - - if (iMovie->VideoClipCutInTime(iIndex) < pos) - { - StopNaviPaneUpdateL(); - iMovie->VideoClipSetCutOutTime( iIndex, pos ); - LOGFMT2(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkOutL, 2, iIndex:%d, pos:%Ld", iIndex, pos.Int64() ); - iContainer->MarkedOutL(); - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MarkOutL, Out"); - } - - -void CVeiSimpleCutVideoView::MoveStartOrEndMarkL(TTimeIntervalMicroSeconds aPosition, CVeiSimpleCutVideoContainer::TCutMark aMarkType) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MoveStartOrEndMarkL, In"); - - StopNaviPaneUpdateL(); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MoveStartOrEndMarkL, 2"); - - if (aMarkType == CVeiSimpleCutVideoContainer::EStartMark) - { - iMovie->VideoClipSetCutInTime( iIndex, aPosition); - } - else if (aMarkType == CVeiSimpleCutVideoContainer::EEndMark) - { - iMovie->VideoClipSetCutOutTime( iIndex, aPosition); - } - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::MoveStartOrEndMarkL, Out"); - } - -TUint CVeiSimpleCutVideoView::InPointTime() - { - if ( !iMovie ) - { - return 0; - } - else - { - return static_cast((iMovie->VideoClipCutInTime(iIndex).Int64() / 1000)); - } - } - -TUint CVeiSimpleCutVideoView::OutPointTime() - { - if ( !iMovie ) - { - return 0; - } - else - { - return static_cast(iMovie->VideoClipCutOutTime(iIndex).Int64() / 1000); - } - } - -TInt CVeiSimpleCutVideoView::UpdateTimeCallbackL(TAny* aPtr) - { - CVeiSimpleCutVideoView* view = (CVeiSimpleCutVideoView*)aPtr; - - view->UpdateTimeL(); - - return 1; - } - - -void CVeiSimpleCutVideoView::UpdateTimeL() - { - DrawTimeNaviL(); - - if (iMarkState == EMarkStateIn) - { - if (iContainer->PlaybackPositionL() > iMovie->VideoClipCutInTime( iIndex )) - { - UpdateCBAL(iContainer->State()); - } - } - else if (iMarkState == EMarkStateOut) - { - if (iContainer->PlaybackPositionL() < iMovie->VideoClipCutOutTime( iIndex )) - { - UpdateCBAL(iContainer->State()); - } - } - else - { - if ((iContainer->PlaybackPositionL() < iMovie->VideoClipCutInTime( iIndex )) || - (iContainer->PlaybackPositionL() > iMovie->VideoClipCutOutTime( iIndex ))) - { - UpdateCBAL(iContainer->State()); - } - } - } - -void CVeiSimpleCutVideoView::DrawTimeNaviL() - { - TTime elapsed( iContainer->PlaybackPositionL().Int64() ); - TTime total( iContainer->TotalLength().Int64() ); - iCVeiNaviPaneControl->DrawTimeNaviL( elapsed, total ); - } - - -void CVeiSimpleCutVideoView::StartNaviPaneUpdateL() - { - DrawTimeNaviL(); - if (iTimeUpdater && !iTimeUpdater->IsActive()) - { - iTimeUpdater->Start(200000, 1000000/10, TCallBack(CVeiSimpleCutVideoView::UpdateTimeCallbackL, this)); - } - } - -void CVeiSimpleCutVideoView::StopNaviPaneUpdateL() - { - if (iContainer) - { - DrawTimeNaviL(); - } - if (iTimeUpdater) - { - iTimeUpdater->Cancel(); - } - } - - -void CVeiSimpleCutVideoView::VolumeMuteL() - { - iContainer->MuteL(); - } - - - -void CVeiSimpleCutVideoView::ShowVolumeLabelL( TInt aVolume ) - { - iCVeiNaviPaneControl->ShowVolumeLabelL( aVolume ); - } - -void CVeiSimpleCutVideoView::HandleForegroundEventL ( TBool aForeground ) - { - if ( !aForeground ) - { - // If the application is closing down, calling PauseL could result in - // a callback from the MMF player after the container is already deleted, - // causing KERN-EXEC 3 - if ( iOnTheWayToDestruction || - static_cast( AppUi() )->AppIsOnTheWayToDestruction() ) - { - iContainer->PrepareForTerminationL(); - return; - } - else - { - if( iContainer->State() == CVeiSimpleCutVideoContainer::EStatePlaying || - iContainer->State() == CVeiSimpleCutVideoContainer::EStatePlayingMenuOpen ) - { - iPaused = ETrue; - iContainer->PauseL( EFalse ); - } - } - } - else - { - UpdateCBAL( iContainer->State() ); - if( 0 ) -// if( iPaused ) - { - iPaused = EFalse; - PlayPreviewL(); - } - } - } - -// --------------------------------------------------------- -// CVeiSimpleCutVideoView::HandleStatusPaneSizeChange() -// --------------------------------------------------------- -// -void CVeiSimpleCutVideoView::HandleStatusPaneSizeChange() - { - if ( iContainer ) - { - iContainer->SetRect( AppUi()->ClientRect() ); - } - } - -TBool CVeiSimpleCutVideoView::IsEnoughFreeSpaceToSaveL()// const - { - RFs& fs = iEikonEnv->FsSession(); - TBool spaceBelowCriticalLevel( EFalse ); - - /* seek position of clip */ - TTimeIntervalMicroSeconds frame; - frame = iContainer->PlaybackPositionL(); - - /* frame index of position */ - TInt frameIndex; - frameIndex = iMovie->VideoClipInfo( iIndex )->GetVideoFrameIndexL( frame ); - - /* frame size */ - TInt sizeEstimate; - sizeEstimate = iMovie->VideoClipInfo( iIndex )->VideoFrameSizeL( frameIndex ); - - // In this case, we decide the target drive automatically when starting - // to save the video. Thus it is enough to know that there is free space - // on either drive at this stage. - spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( &fs, sizeEstimate, EDriveC ); - if( spaceBelowCriticalLevel ) - { - spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( &fs, sizeEstimate ); - } - - - if ( !spaceBelowCriticalLevel ) - { - return ETrue; - } - else - { - HBufC* stringholder; - stringholder = StringLoader::LoadLC( R_VEI_MEMORY_RUNNING_OUT, iEikonEnv ); - CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue ); - dlg->ExecuteLD( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - return EFalse; - } - } - -TTimeIntervalMicroSeconds CVeiSimpleCutVideoView::GetVideoClipCutInTime() - { - TTimeIntervalMicroSeconds cutInTime(0); - if ( iMovie ) - { - cutInTime = iMovie->VideoClipCutInTime( iIndex ); - } - return cutInTime; - } - -TTimeIntervalMicroSeconds CVeiSimpleCutVideoView::GetVideoClipCutOutTime() - { - TTimeIntervalMicroSeconds cutOutTime(0); - if ( iMovie ) - { - cutOutTime = iMovie->VideoClipCutOutTime( iIndex ); - } - return cutOutTime; - } - -void CVeiSimpleCutVideoView::HandleResourceChange(TInt aType) - { - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::HandleResourceChange() In, aType:%d", aType); - - if ( iContainer ) - { - if ( aType == KEikMessageFadeAllWindows && (iContainer->State() == CVeiSimpleCutVideoContainer::EStatePlaying) ) - { - this->PausePreviewL(); - iSelectionKeyPopup = ETrue; - } - else if ( iSelectionKeyPopup && aType == KEikMessageUnfadeWindows && (iContainer->State() == CVeiSimpleCutVideoContainer::EStatePaused) ) - { - this->PlayPreviewL(); - iSelectionKeyPopup = EFalse; - } - } - - if (KAknsMessageSkinChange == aType) - { - // Handle skin change in the navi label controls - they do not receive - // it automatically since they are not in the control stack - iCVeiNaviPaneControl->HandleResourceChange( aType ); - } - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::HandleResourceChange() Out"); - } - -//======================================================================================================= -const CVedMovie* CVeiSimpleCutVideoView::Movie() const - { - return iMovie; - } - -//======================================================================================================= -TBool CVeiSimpleCutVideoView::SaveL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::SaveL: in"); - - TFileName outputFile; - TBool ret = EFalse; - - TTimeIntervalMicroSeconds cutin; - TTimeIntervalMicroSeconds cutout; - cutin = iMovie->VideoClipCutInTime( 0 ); - cutout = iMovie->VideoClipCutOutTime( 0 ); - - if ( ( cutin != TTimeIntervalMicroSeconds( 0 ) ) || - ( cutout!= iMovie->VideoClipInfo(0)->Duration() ) ) - { - RFs& fs = iEikonEnv->FsSession(); - - // GenerateNewDocumentNameL also checks disk space - TInt err(KErrNone); - if(!iOverWriteFile) - { - err = VideoEditorUtils::GenerateNewDocumentNameL ( - fs, - iMovie->VideoClipInfo( iIndex )->FileName(), - outputFile, - iMovie->Format(), - iMovie->GetSizeEstimateL() ); - } - else - { - outputFile.Zero(); - outputFile.Copy(iMovie->VideoClipInfo( iIndex )->FileName()); - } - - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::SaveL: 1, err:%d", err); - - if ( KErrNone == err ) - { - if (iSaveToFileName) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - iSaveToFileName = HBufC::NewL( outputFile.Length() ); - *iSaveToFileName = outputFile; - - // Start saviong the video. - // To be finished in DialogDismissedL... - iSaving = ETrue; - StartTempFileProcessingL(); - - ret = ETrue; - } - else - { - iErrorUI->ShowGlobalErrorNote( err ); - ret = EFalse; - } - } - else - { - ret = EFalse; - } - - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::SaveL: out: %d", ret); - - return ret; - } - - -//============================================================================= -TInt CVeiSimpleCutVideoView::QueryAndSaveL() -{ - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::QueryAndSaveL: in"); - - TFileName outputFile; - TBool ret = EFalse; - - TTimeIntervalMicroSeconds cutin; - TTimeIntervalMicroSeconds cutout; - cutin = iMovie->VideoClipCutInTime( 0 ); - cutout = iMovie->VideoClipCutOutTime( 0 ); - - if ( ( cutin != TTimeIntervalMicroSeconds( 0 ) ) || - ( cutout!= iMovie->VideoClipInfo(0)->Duration() ) ) - { - RFs fs = CCoeEnv::Static()->FsSession(); - - - // launch query with choices "Replace original" and "Save with a new file name" - TInt userSelection = VideoEditorUtils::LaunchSaveVideoQueryL(); - - if(userSelection == 0) - // the user selects to save with a new file name - { - iOverWriteFile = EFalse; - - // Multiple drive support enabled -#ifdef RD_MULTIPLE_DRIVE - TDriveNumber driveNumber; - TFileName driveAndPath; - CAknMemorySelectionDialogMultiDrive* multiDriveDlg = CAknMemorySelectionDialogMultiDrive::NewL(ECFDDialogTypeSave, EFalse ); - CleanupStack::PushL( multiDriveDlg ); - - // launch "Select memory" query - if (multiDriveDlg->ExecuteL( driveNumber, &driveAndPath, NULL )) - { - outputFile.Zero(); - - // Generate a default name for the new file - TInt err = VideoEditorUtils::GenerateFileNameL ( - fs, - iMovie->VideoClipInfo( iIndex )->FileName(), - outputFile, - iMovie->Format(), - iMovie->GetSizeEstimateL(), - driveAndPath); - - driveAndPath.Append( PathInfo::VideosPath() ); - - if ( KErrNone == err ) - { - if (iSaveToFileName) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - - // launch file name prompt dialog - if (CAknFileNamePromptDialog::RunDlgLD(outputFile, driveAndPath, KNullDesC)) - { - driveAndPath.Append(outputFile); - outputFile.Copy(driveAndPath); - iSaveToFileName = HBufC::NewL( outputFile.Length() ); - *iSaveToFileName = outputFile; - - // Start saving the video. - // To be finished in DialogDismissedL... - iSaving = ETrue; - StartTempFileProcessingL(); - - ret = ETrue; - } - } - else // err != KErrNone - { - ret = EFalse; - } - } - CleanupStack::PopAndDestroy( multiDriveDlg ); -#else // no multiple drive support - // launch "Select memory" query - CAknMemorySelectionDialog::TMemory selectedMemory(CAknMemorySelectionDialog::EPhoneMemory); - if (CAknMemorySelectionDialog::RunDlgLD(selectedMemory)) - { - // create path for the image - TFileName driveAndPath; - VideoEditor::TMemory memorySelection = VideoEditor::EMemPhoneMemory; - if (selectedMemory == CAknMemorySelectionDialog::EPhoneMemory) - { - memorySelection = VideoEditor::EMemPhoneMemory; - driveAndPath.Copy( PathInfo::PhoneMemoryRootPath() ); - driveAndPath.Append( PathInfo::VideosPath() ); - } - else if (selectedMemory == CAknMemorySelectionDialog::EMemoryCard) - { - memorySelection = VideoEditor::EMemMemoryCard; - driveAndPath.Copy( PathInfo::MemoryCardRootPath() ); - driveAndPath.Append( PathInfo::VideosPath() ); - } - - // GenerateNewDocumentNameL also checks disk space - TInt err = VideoEditorUtils::GenerateNewDocumentNameL ( - fs, - iMovie->VideoClipInfo( iIndex )->FileName(), - outputFile, - iMovie->Format(), - iMovie->GetSizeEstimateL(), - memorySelection ); - - if ( KErrNone == err ) - { - if (iSaveToFileName) - { - delete iSaveToFileName; - iSaveToFileName = NULL; - } - - // launch file name prompt dialog - if (CAknFileNamePromptDialog::RunDlgLD(outputFile, driveAndPath, KNullDesC)) - { - driveAndPath.Append(outputFile); - outputFile.Copy(driveAndPath); - iSaveToFileName = HBufC::NewL( outputFile.Length() ); - *iSaveToFileName = outputFile; - - // Start saving the video. - // To be finished in DialogDismissedL... - iSaving = ETrue; - StartTempFileProcessingL(); - - ret = ETrue; - } - } - else // err != KErrNone - { - ret = EFalse; - } - } -#endif - } - // user selects to overwrite - else if (userSelection == 1) - - { - iOverWriteFile = ETrue; - ret = SaveL(); - return ret; - } - else // user cancelled - { - ret = EFalse; - } - } - else - { - ret = EFalse; - } - - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::QueryAndSaveL: out: %d", ret); - - return ret; -} - - - -//======================================================================================================= -TBool CVeiSimpleCutVideoView::IsCutMarkSet() - { - ASSERT( iMovie ); // We always have iMovie - TTimeIntervalMicroSeconds cutIn( iMovie->VideoClipCutInTime( iIndex ) ); - TTimeIntervalMicroSeconds cutOut( iMovie->VideoClipCutOutTime( iIndex ) ); - TTimeIntervalMicroSeconds duration( iMovie->VideoClipInfo(iIndex)->Duration() ); - // cutIn or cutOut mark is set - return (cutIn != TTimeIntervalMicroSeconds( 0 ) || cutOut != duration); - } - -//======================================================================================================= -void CVeiSimpleCutVideoView::StartTempFileProcessingL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::StartTempFileProcessingL: in"); - - RFs& fs = iEikonEnv->FsSession(); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::StartTempFileProcessingL() -- NEW TEMP"); - - if (iTempFile) - { - delete iTempFile; - iTempFile = NULL; - } - iTempFile = HBufC::NewL(KMaxFileName); - iTempMaker->GenerateTempFileName( *iTempFile, iMovieSaveSettings.MemoryInUse(), iMovie->Format() ); - LOGFMT(KVideoEditorLogFile, "CVeiSimpleCutVideoView::StartTempFileProcessingL: 1, iTempFile:%S", iTempFile); - - if ( !IsEnoughFreeSpaceToSaveL() ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::StartTempFileProcessingL: 2"); - return; - } - - iMovie->ProcessL( *iTempFile, *this ); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::StartTempFileProcessingL: out"); - } - -//======================================================================================================= -void CVeiSimpleCutVideoView::ShowErrorNoteL( const TInt aResourceId, TInt aError ) const - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::ShowErrorNoteL: in"); - - HBufC* stringholder; - if ( aError == 0 ) - { - stringholder = StringLoader::LoadLC( aResourceId, iEikonEnv ); - } - else - { - stringholder = StringLoader::LoadLC( aResourceId, aError, iEikonEnv ); - } - - CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue ); - dlg->ExecuteLD( *stringholder ); - - CleanupStack::PopAndDestroy( stringholder ); - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::ShowErrorNoteL: out"); - } - -//======================================================================================================= - -void CVeiSimpleCutVideoView::StartProgressNoteL() -{ - iProgressNote = - new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**, - &iProgressNote), ETrue); - iProgressNote->SetCallback(this); - iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE_WITH_CANCEL ); - - HBufC* stringholder; - TApaAppCaption caption; - TRAPD( err, iContainer->ResolveCaptionNameL( caption ) ); - - // If something goes wrong, show basic "Saving" note - if ( err ) - { - stringholder = iEikonEnv->AllocReadResourceLC( R_VEI_PROGRESS_NOTE_SAVING ); - } - else - { - stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_CUTTING_VIDEO, caption, iEikonEnv ); - } - - iProgressNote->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iProgressNote->GetProgressInfoL()->SetFinalValue(100); -} - -//======================================================================================================= -void CVeiSimpleCutVideoView::StartAnimatedProgressNoteL() -{ - if (iAnimatedProgressDialog) - { - delete iAnimatedProgressDialog; - iAnimatedProgressDialog = NULL; - } - - - iAnimatedProgressDialog = new (ELeave) CExtProgressDialog( &iAnimatedProgressDialog); - iAnimatedProgressDialog->PrepareLC(R_WAIT_DIALOG); - iAnimatedProgressDialog->SetCallback( this ); - - HBufC* stringholder = StringLoader::LoadLC( R_VEI_PROGRESS_NOTE_CUTTING_VIDEO, iEikonEnv ); - iAnimatedProgressDialog->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy(stringholder); - - iAnimatedProgressDialog->SetAnimationResourceIdL( VideoEditor::EAnimationCut ); - iAnimatedProgressDialog->GetProgressInfoL()->SetFinalValue( 100 ); - iAnimatedProgressDialog->StartAnimationL(); - iAnimatedProgressDialog->RunLD(); -} - -// ---------------------------------------------------------------------------- -// CVeiSimpleCutVideoView::CheckMemoryCardAvailability() -// -// Checks the memory card availability if MMC is selected as save store in -// application settings. An information note is shown in following -// situations: -// - MMC not inserted -// - MMC corrupted (unformatted) -// [- MMC is read-only (not implemented)] -// -// If note is popped up, this function waits until it's dismissed. -// ---------------------------------------------------------------------------- -// -void CVeiSimpleCutVideoView::CheckMemoryCardAvailabilityL() - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::CheckMemoryCardAvailability(): in"); - - // Read the video editor settings from ini file. - - STATIC_CAST(CVeiSimpleCutVideoAppUi*,AppUi())->ReadSettingsL( iMovieSaveSettings ); - - CAknMemorySelectionDialog::TMemory memoryInUse( iMovieSaveSettings.MemoryInUse() ); - - // Check the MMC accessibility only if MMC is used as saving store. - if( memoryInUse == CAknMemorySelectionDialog::EMemoryCard ) - { - RFs& fs = iEikonEnv->FsSession(); - TDriveInfo driveInfo; - - User::LeaveIfError( fs.Drive( driveInfo, KMmcDrive ) ); - - // Media is not present (MMC card not inserted). - if( EMediaNotPresent == driveInfo.iType ) - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::CheckMemoryCardAvailability(): no media"); - - iMovieSaveSettings.MemoryInUse() = CAknMemorySelectionDialog::EPhoneMemory; - // do not overwrite because doing so permanently sets memory to phone memory - //STATIC_CAST( CVeiSimpleCutVideoAppUi*, AppUi() )->WriteSettingsL( settings ); - } - // Media is present - else - { - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::CheckMemoryCardAvailability(): media present"); - - TVolumeInfo volumeInfo; - TInt volumeErr = fs.Volume( volumeInfo, KMmcDrive ); - LOGFMT(KVideoEditorLogFile, "CEditVideoView::CheckMemoryCardAvailability() Volume(): %d", volumeErr); - - // Show note if media is corrupted/unformatted. - if( KErrCorrupt == volumeErr ) - { - HBufC* noteText = StringLoader::LoadLC( R_VED_MMC_NOT_INSERTED, - iEikonEnv ); - CAknInformationNote* informationNote = - new(ELeave)CAknInformationNote( ETrue ); - informationNote->ExecuteLD( *noteText ); - - CleanupStack::PopAndDestroy( noteText ); - - iMovieSaveSettings.MemoryInUse() = CAknMemorySelectionDialog::EPhoneMemory; - // do not overwrite because doing so permanently sets memory to phone memory - //STATIC_CAST( CVeiSimpleCutVideoAppUi*, AppUi() )->WriteSettingsL( settings ); - } - } - } - - LOG(KVideoEditorLogFile, "CVeiSimpleCutVideoView::CheckMemoryCardAvailability(): out"); - } - -void CVeiSimpleCutVideoView::PrepareForTermination() - { - iOnTheWayToDestruction = ETrue; - } - -void CVeiSimpleCutVideoView::SetTitlePaneTextL () -{ - - TPtrC fileName = iMovie->VideoClipInfo( iIndex )->FileName(); - HBufC * title_text = HBufC::NewLC( fileName.Length() ); - TPtr title_text_ptr = title_text->Des(); - - title_text_ptr.Copy (fileName); - TParsePtr parser (title_text_ptr); - title_text_ptr = parser.Name(); - - // Set title pane text - CEikStatusPane *statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); - CAknTitlePane* titlePane = ( CAknTitlePane* ) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ); - titlePane->SetTextL(title_text_ptr); - - CleanupStack::PopAndDestroy( title_text ); -} - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleCutVideo/src/veinavipanecontrol.cpp --- a/videditor/SimpleCutVideo/src/veinavipanecontrol.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,302 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Navipane control for SVE. -* -*/ - - -#include -#include -#include -#include - -#include "veinavipanecontrol.h" -#include "VeiTimeLabelNavi.h" -#include "mveinavipanecontrolobserver.h" -#include - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// CVeiNaviPaneControl -// --------------------------------------------------------------------------- -// -CVeiNaviPaneControl::CVeiNaviPaneControl( CEikStatusPane* aStatusPane ) : - iStatusPane( aStatusPane ) - { - } - - -// --------------------------------------------------------------------------- -// ConstructL -// --------------------------------------------------------------------------- -// -void CVeiNaviPaneControl::ConstructL() - { - if( iStatusPane ) - { - iNaviPane = (CAknNavigationControlContainer*) iStatusPane->ControlL( - TUid::Uid(EEikStatusPaneUidNavi) ); - iTimeNavi = CreateTimeLabelNaviL(); - iVolumeNavi = iNaviPane->CreateVolumeIndicatorL( - R_AVKON_NAVI_PANE_VOLUME_INDICATOR ); - iVolumeNavi->SetObserver( this ); - iVolumeHider = CPeriodic::NewL( CActive::EPriorityStandard ); - } - } - -// --------------------------------------------------------------------------- -// NewL -// --------------------------------------------------------------------------- -// -CVeiNaviPaneControl* CVeiNaviPaneControl::NewL( CEikStatusPane* aStatusPane ) - { - CVeiNaviPaneControl* self = - new( ELeave ) CVeiNaviPaneControl( aStatusPane ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// ~CVeiNaviPaneControl -// --------------------------------------------------------------------------- -// -CVeiNaviPaneControl::~CVeiNaviPaneControl() - { - iObserver = NULL; - delete iTimeNavi; - delete iVolumeNavi; - delete iVolumeHider; - } - -// --------------------------------------------------------------------------- -// DrawTimeNaviL -// --------------------------------------------------------------------------- -// -void CVeiNaviPaneControl::DrawTimeNaviL( TTime aElapsed, TTime aTotal ) - { - // check if time is over 59min:59s, then use 00h:00m:00s - TBool useLong( aTotal.DateTime().Hour() ); - - HBufC* dateFormatString = CCoeEnv::Static()->AllocReadResourceLC( - useLong ? R_QTN_TIME_DURAT_LONG_WITH_ZERO : - R_QTN_TIME_DURAT_MIN_SEC_WITH_ZERO ); - - const TInt bufLength(16); - TBuf elapsedBuf; - aElapsed.FormatL(elapsedBuf, *dateFormatString); - TBuf totalBuf; - aTotal.FormatL(totalBuf, *dateFormatString); - CleanupStack::PopAndDestroy(dateFormatString); - - CDesCArrayFlat* strings = new (ELeave) CDesCArrayFlat(2); - CleanupStack::PushL(strings); - strings->AppendL(elapsedBuf); - strings->AppendL(totalBuf); - HBufC* stringholder = StringLoader::LoadL(R_VEI_NAVI_TIME, *strings); - CleanupStack::PopAndDestroy(strings); - - - CleanupStack::PushL(stringholder); - - GetTimeLabelControl()->SetLabelL(*stringholder); - - CleanupStack::PopAndDestroy(stringholder); - - - - if( iNaviPane->Top() != iVolumeNavi ) - { - iNaviPane->PushL( *iTimeNavi ); - } - - /* Prevent the screen light dimming. */ - if (aElapsed.DateTime().Second() == 0 || - aElapsed.DateTime().Second() == 15 || - aElapsed.DateTime().Second() == 30 || - aElapsed.DateTime().Second() == 45) - { - User::ResetInactivityTime(); - } - } - -// --------------------------------------------------------------------------- -// SetPauseIconVisibilityL -// --------------------------------------------------------------------------- -// -void CVeiNaviPaneControl::SetPauseIconVisibilityL( TBool aVisible ) - { - GetTimeLabelControl()->SetPauseIconVisibilityL( aVisible ); - if( iNaviPane->Top() != iVolumeNavi ) - { - iNaviPane->PushL( *iTimeNavi ); - } - } - -// --------------------------------------------------------------------------- -// SetVolumeIconVisibilityL -// --------------------------------------------------------------------------- -// -void CVeiNaviPaneControl::SetVolumeIconVisibilityL( TBool aVisible ) - { - GetTimeLabelControl()->SetVolumeIconVisibilityL( aVisible ); - if( iNaviPane->Top() != iVolumeNavi ) - { - iNaviPane->PushL( *iTimeNavi ); - } - } -// --------------------------------------------------------------------------- -// ShowVolumeLabelL -// --------------------------------------------------------------------------- -// -void CVeiNaviPaneControl::ShowVolumeLabelL( TInt aVolume ) - { - GetTimeLabelControl()->SetVolumeIconVisibilityL( ETrue ); - - // Remove volume slider from navi control after 2 sec - iVolumeHider->Cancel(); - const TInt twoSeconds(1900000); - iVolumeHider->Start(twoSeconds, twoSeconds, - TCallBack( CVeiNaviPaneControl::HideVolumeCallbackL, this) ); - - if (aVolume == 0) - { - // Hide volume icon when volume is set to 0 - GetTimeLabelControl()->SetVolumeIconVisibilityL( EFalse ); - } - if(GetVolumeControl()->Value()!= aVolume) - { - //this is in case we change volume with other control than the popup - GetVolumeControl()->SetValue(aVolume); - } - CAknVolumePopup* popup = static_cast ( GetVolumeControl()->Parent() ); - TRAP_IGNORE( popup->ShowVolumePopupL() ); - - } - -// --------------------------------------------------------------------------- -// HandleResourceChange -// --------------------------------------------------------------------------- -// -void CVeiNaviPaneControl::HandleResourceChange( TInt aType ) - { - if( iTimeNavi && iVolumeNavi ) - { - iTimeNavi->DecoratedControl()->HandleResourceChange( aType ); - iVolumeNavi->DecoratedControl()->HandleResourceChange( aType ); - } - } - - -// --------------------------------------------------------------------------- -// HandleResourceChange from MCoeControlObserver -// --------------------------------------------------------------------------- -// -void CVeiNaviPaneControl::HandleControlEventL( - CCoeControl* /* aControl */,TCoeEvent /* aEventType */ ) - { - CAknNavigationDecorator* cntr = iNaviPane->Top( ); - if ( iVolumeNavi && cntr == iVolumeNavi ) - { - if( iObserver ) - { - iObserver->SetVolumeLevelL( GetVolumeControl()->Value() ); - } - } - - } - -// --------------------------------------------------------------------------- -// HandleNaviEventL from MTimeLabelNaviObserver -// --------------------------------------------------------------------------- -// -void CVeiNaviPaneControl::HandleNaviEventL() - { - // Open Volume slider - // First push then set value - iNaviPane->PushL(*iVolumeNavi); - TInt currenValue( GetVolumeControl()->Value() ); - ShowVolumeLabelL( currenValue ); - - } - -// --------------------------------------------------------------------------- -// CreateTimeLabelNaviL -// --------------------------------------------------------------------------- -// -CAknNavigationDecorator* CVeiNaviPaneControl::CreateTimeLabelNaviL() - { - ASSERT( iNaviPane ); - - CVeiTimeLabelNavi* timelabelnavi = CVeiTimeLabelNavi::NewLC(); - timelabelnavi->SetNaviObserver( this ); - CAknNavigationDecorator* decoratedFolder = CAknNavigationDecorator::NewL( - iNaviPane, timelabelnavi, CAknNavigationDecorator::ENotSpecified); - CleanupStack::Pop(timelabelnavi); - - CleanupStack::PushL(decoratedFolder); - decoratedFolder->SetContainerWindowL(*iNaviPane); - CleanupStack::Pop(decoratedFolder); - decoratedFolder->MakeScrollButtonVisible(EFalse); - - return decoratedFolder; - } - -// --------------------------------------------------------------------------- -// GetTimeLabelControl -// --------------------------------------------------------------------------- -// -CVeiTimeLabelNavi* CVeiNaviPaneControl::GetTimeLabelControl() - { - ASSERT( iTimeNavi ); - return static_cast ( iTimeNavi->DecoratedControl() ); - } - -// --------------------------------------------------------------------------- -// GetVolumeControl -// --------------------------------------------------------------------------- -// -CAknVolumeControl* CVeiNaviPaneControl::GetVolumeControl() - { - ASSERT( iVolumeNavi ); - return static_cast ( iVolumeNavi->DecoratedControl() ); - } - -// --------------------------------------------------------------------------- -// HideVolumeCallbackL -// --------------------------------------------------------------------------- -// -TInt CVeiNaviPaneControl::HideVolumeCallbackL(TAny* aPtr) - { - CVeiNaviPaneControl* view = (CVeiNaviPaneControl*)aPtr; - view->HideVolume(); - return 0; - } - -// --------------------------------------------------------------------------- -// HideVolume -// --------------------------------------------------------------------------- -// -void CVeiNaviPaneControl::HideVolume() - { - ASSERT( iVolumeNavi ); - iNaviPane->Pop( iVolumeNavi ); - } - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/BWINS/SimpleVideoEditor.DEF --- a/videditor/SimpleVideoEditor/BWINS/SimpleVideoEditor.DEF Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -EXPORTS - ??1CSimpleVideoEditor@@UAE@XZ @ 1 NONAME ; CSimpleVideoEditor::~CSimpleVideoEditor(void) - ?AddText@CSimpleVideoEditor@@QAEXABVTDesC16@@@Z @ 2 NONAME ; void CSimpleVideoEditor::AddText(class TDesC16 const &) - ?Cancel@CSimpleVideoEditor@@QAEXXZ @ 3 NONAME ; void CSimpleVideoEditor::Cancel(void) - ?ChangeAudio@CSimpleVideoEditor@@QAEXABVTDesC16@@@Z @ 4 NONAME ; void CSimpleVideoEditor::ChangeAudio(class TDesC16 const &) - ?Merge@CSimpleVideoEditor@@QAEXABVTDesC16@@@Z @ 5 NONAME ; void CSimpleVideoEditor::Merge(class TDesC16 const &) - ?NewL@CSimpleVideoEditor@@SAPAV1@AAVMSimpleVideoEditorExitObserver@@@Z @ 6 NONAME ; class CSimpleVideoEditor * CSimpleVideoEditor::NewL(class MSimpleVideoEditorExitObserver &) - ??0CMultiLineQueryDialog@@AAE@AAVTDes16@@ABW4TTone@CAknQueryDialog@@@Z @ 7 NONAME ; CMultiLineQueryDialog::CMultiLineQueryDialog(class TDes16 &, enum CAknQueryDialog::TTone const &) - ??1CMultiLineQueryDialog@@UAE@XZ @ 8 NONAME ; CMultiLineQueryDialog::~CMultiLineQueryDialog(void) - ?NewL@CMultiLineQueryDialog@@SAPAV1@AAVTDes16@@ABW4TTone@CAknQueryDialog@@@Z @ 9 NONAME ; class CMultiLineQueryDialog * CMultiLineQueryDialog::NewL(class TDes16 &, enum CAknQueryDialog::TTone const &) - ?OfferKeyEventL@CMultiLineQueryDialog@@UAE?AW4TKeyResponse@@ABUTKeyEvent@@W4TEventCode@@@Z @ 10 NONAME ; enum TKeyResponse CMultiLineQueryDialog::OfferKeyEventL(struct TKeyEvent const &, enum TEventCode) - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/EABI/SimpleVideoEditor.DEF --- a/videditor/SimpleVideoEditor/EABI/SimpleVideoEditor.DEF Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -EXPORTS - _ZN18CSimpleVideoEditor11ChangeAudioERK7TDesC16 @ 1 NONAME - _ZN18CSimpleVideoEditor4NewLER30MSimpleVideoEditorExitObserver @ 2 NONAME - _ZN18CSimpleVideoEditor5MergeERK7TDesC16 @ 3 NONAME - _ZN18CSimpleVideoEditor6CancelEv @ 4 NONAME - _ZN18CSimpleVideoEditor7AddTextERK7TDesC16 @ 5 NONAME - _ZN18CSimpleVideoEditorD0Ev @ 6 NONAME - _ZN18CSimpleVideoEditorD1Ev @ 7 NONAME - _ZN18CSimpleVideoEditorD2Ev @ 8 NONAME - _ZN21CMultiLineQueryDialog14OfferKeyEventLERK9TKeyEvent10TEventCode @ 9 NONAME - _ZN21CMultiLineQueryDialog4NewLER6TDes16RKN15CAknQueryDialog5TToneE @ 10 NONAME - _ZN21CMultiLineQueryDialogC1ER6TDes16RKN15CAknQueryDialog5TToneE @ 11 NONAME - _ZN21CMultiLineQueryDialogC2ER6TDes16RKN15CAknQueryDialog5TToneE @ 12 NONAME - _ZN21CMultiLineQueryDialogD0Ev @ 13 NONAME - _ZN21CMultiLineQueryDialogD1Ev @ 14 NONAME - _ZN21CMultiLineQueryDialogD2Ev @ 15 NONAME - _ZTI21CMultiLineQueryDialog @ 16 NONAME ; ## - _ZTV21CMultiLineQueryDialog @ 17 NONAME ; ## - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/data/SimpleVideoEditor.rss --- a/videditor/SimpleVideoEditor/data/SimpleVideoEditor.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,398 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -NAME SVED - -// INCLUDES -#include -#include -#include -#include -#include -#include -#include -#include "videoeditorcommon.hrh" -#include -RESOURCE RSS_SIGNATURE { } - -//---------------------------------------------------- -// -// r_vesm_progress_note_with_cancel -// Progress note -// -//---------------------------------------------------- -RESOURCE DIALOG r_vesm_progress_note_with_cancel - { - flags = EAknProgressNoteFlags; - buttons = R_AVKON_SOFTKEYS_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control = AVERELL_NOTE - { - layout = EProgressLayout; -// singular_label = qtn_vei_progress_note_processing; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_vei_wait_note_with_cancel -// -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_wait_note_with_cancel - { - flags = EAknWaitNoteFlags; - buttons = R_AVKON_SOFTKEYS_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control= AVKON_NOTE - { - layout = EWaitLayout; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - animation = R_QGN_GRAF_WAIT_BAR_ANIM; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_vei_wait_note_without_cancel -// -// -//---------------------------------------------------- -RESOURCE DIALOG r_vei_wait_note_without_cancel - { - flags = EEikDialogFlagNoDrag|EEikDialogFlagNoTitleBar; - //buttons = R_AVKON_SOFTKEYS_CANCEL; - buttons = R_AVKON_SOFTKEYS_EMPTY; - //buttons = r_vei_wait_note_without_cancel_buttons; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control= AVKON_NOTE - { - layout = EWaitLayout; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - animation = R_QGN_GRAF_WAIT_BAR_ANIM; - }; - } - }; - } - -//---------------------------------------------------- -// -// r_vie_confirmation_query -// Confirmation query -// -//---------------------------------------------------- -RESOURCE DIALOG r_vie_confirmation_query -{ - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_YES_NO; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_CONFIRMATION_QUERY - { - layout = EConfirmationQueryLayout; - label = " "; - }; - } - }; -} - -RESOURCE CBA r_vei_wait_note_without_cancel_buttons - { - buttons = - { - CBA_BUTTON - { - id = 20; - txt = " "; - }, - CBA_BUTTON - { - id = 21; - txt = " "; - } - }; - } - - -//---------------------------------------------------- -// -// LIST QUERY (contents updated dynamically) -// -//---------------------------------------------------- -RESOURCE AVKON_LIST_QUERY r_vie_list_query -{ - items = - { - AVKON_LIST_QUERY_DLG_LINE - { - control = AVKON_LIST_QUERY_CONTROL - { - listtype = EAknCtSinglePopupMenuListBox; - heading = " "; - listbox = AVKON_LIST_QUERY_LIST - { - // array of items will be defined dynamically - }; - }; - } - }; -} - -RESOURCE TBUF256 r_vesm_edit_view_title_name { buf = qtn_vei_edit_video_main_text_t; } - -//---------------------------------------------------- -// -// r_vesm_editvideo_titlescreen_text_query -// data query for the title screen text -// -//---------------------------------------------------- -// -RESOURCE DIALOG r_vesm_editvideo_titlescreen_text_query - { - flags=EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_OK_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtQuery; - id = EGeneralQuery; - control = AVKON_DATA_QUERY - { - layout = EDataLayout; - label = qtn_vie_query_heading_enter_text; - control = - EDWIN - { - width = AKNTEXT_QUERY_WIDTH; - lines = AKNTEXT_QUERY_LINES; - maxlength = AKNTEXT_QUERY_WIDTH * AKNTEXT_QUERY_LINES; - }; - }; - } - }; - } - -//----------------------------------------------------------------------------- -// -// r_ved_insert_position_query -// List Query dialog -// -//----------------------------------------------------------------------------- -// -RESOURCE DIALOG r_ved_insert_position_query - { - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_SELECT_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtListQueryControl; - id = EListQueryControl; - control = AVKON_LIST_QUERY_CONTROL - { - listtype = EAknCtSinglePopupMenuListBox; - listbox = AVKON_LIST_QUERY_LIST - { - flags = EAknListBoxMenuList; - array_id = r_ved_insert_position_query_items; - }; - heading = "#heading"; - }; - } - }; - } - - -//----------------------------------------------------------------------------- -// -// r_ved_insert_position_query_items -// Items array for List Query -// -//----------------------------------------------------------------------------- -// -RESOURCE ARRAY r_ved_insert_position_query_items - { - items = - { - LBUF - { - txt = qtn_vie_query_add_text_to_beginning; - }, - LBUF - { - txt = qtn_vie_query_add_text_to_end; - } - }; - } - -//----------------------------------------------------------------------------- -// -// r_ved_video_or_image_query -// List Query dialog -// -//----------------------------------------------------------------------------- -// -RESOURCE DIALOG r_ved_video_or_image_query - { - flags = EGeneralQueryFlags; - buttons = R_AVKON_SOFTKEYS_SELECT_CANCEL; - items = - { - DLG_LINE - { - type = EAknCtListQueryControl; - id = EListQueryControl; - control = AVKON_LIST_QUERY_CONTROL - { - listtype = EAknCtSinglePopupMenuListBox; - listbox = AVKON_LIST_QUERY_LIST - { - flags = EAknListBoxMenuList; - array_id = r_ved_video_or_image_query_items; - }; - heading = "#heading"; - }; - } - }; - } - - -//----------------------------------------------------------------------------- -// -// r_ved_video_or_image_query_items -// Items array for List Query -// -//----------------------------------------------------------------------------- -// -RESOURCE ARRAY r_ved_video_or_image_query_items - { - items = - { - LBUF - { - txt = qtn_vie_query_merge_with_video; - }, - LBUF - { - txt = qtn_vie_query_merge_with_image; - } - }; - } - -// List query headings -RESOURCE TBUF r_vei_query_heading_add_text_to { buf = qtn_vie_query_heading_add_text_to; } -RESOURCE TBUF r_vei_query_heading_merge_with { buf = qtn_vie_query_heading_merge_with; } - -// Progress note texts -RESOURCE TBUF r_vei_note_merging { buf = qtn_fldr_file_saving_wait;} -RESOURCE TBUF r_vei_note_adding_audio { buf = qtn_vie_note_processing;} -RESOURCE TBUF r_vei_note_adding_text { buf = qtn_vie_note_processing;} -RESOURCE TBUF r_vei_note_cutting { buf = qtn_vie_note_cutting;} -RESOURCE TBUF r_vei_note_processing { buf = qtn_vie_note_processing; } - -// Other note texts -RESOURCE TBUF r_vei_memory_running_out { buf = qtn_memlo_memory_running_out; } -RESOURCE TBUF r_vei_not_enough_memory { buf = qtn_memlo_ram_out_of_mem; } - -RESOURCE TBUF256 r_vei_error_note { buf= qtn_err_eikon_general; } -RESOURCE TBUF r_vei_errornote_image_inserting_failed { buf = qtn_vie_note_err_unable_to_insert_image; } -RESOURCE TBUF r_vei_errornote_audio_inserting_failed { buf = qtn_vie_note_err_audio_format; } - -RESOURCE TBUF r_vie_query_insert_short_audio { buf = qtn_vie_query_insert_short_audio; } -RESOURCE TBUF r_vie_query_insert_long_audio { buf = qtn_vie_query_insert_long_audio; } - -//---------------------------------------------------- -// -// r_wait_dialog -// animated progress note -// -//---------------------------------------------------- -RESOURCE DIALOG r_wait_dialog -{ - flags = EAknWaitNoteFlags; - buttons = R_AVKON_SOFTKEYS_CANCEL; -} - -RESOURCE TBUF r_vei_in_use { buf = qtn_err_in_use;} - -RESOURCE TBUF r_vei_unable_to_edit { buf = qtn_vie_note_err_edit;} -RESOURCE TBUF r_vei_unable_to_insert_video { buf = qtn_vie_note_err_unable_to_insert_video;} -RESOURCE TBUF r_vei_unable_to_insert_sound { buf = qtn_vie_note_err_audio_format;} -RESOURCE TBUF r_vei_unable_to_insert_image { buf = qtn_vie_note_err_unable_to_insert_image;} - -RESOURCE TBUF r_vei_unable_to_insert_text { buf = qtn_vie_note_err_unable_to_add_text;} -RESOURCE TBUF r_vei_unable_to_merge_videos { buf = qtn_vie_note_err_unable_to_merge_video_video;} -RESOURCE TBUF r_vei_unable_to_merge_video_image { buf = qtn_vie_note_err_unable_to_merge_video_image;} -RESOURCE TBUF r_vei_unable_to_change_sound { buf = qtn_vie_note_err_unable_to_change_sound;} -RESOURCE TBUF r_vei_audio_format_not_supported { buf = qtn_vie_note_err_audio_format;} -RESOURCE TBUF r_vei_image_format_not_supported { buf = qtn_vie_note_err_image_format_not_supported;} - -RESOURCE TBUF r_vie_query_heading_save { buf = qtn_vie_query_heading_save; } -RESOURCE TBUF r_vie_query_save_new { buf = qtn_vie_query_save_new; } -RESOURCE TBUF r_vie_query_save_replace { buf = qtn_vie_query_save_replace; } - - -RESOURCE TBUF r_vie_query_heading_add_image_to { buf = qtn_vie_query_heading_add_image_to; } -RESOURCE TBUF r_vie_query_heading_add_video_to { buf = qtn_vie_query_heading_add_video_to; } - - -// The following strings should be added: -// qtn_vie_note_unable_convert - -// Dummy dialog to consume key presses during operations -RESOURCE DIALOG r_dummy_dialog - { - flags = EEikDialogFlagNoDrag | EEikDialogFlagCbaButtons; - buttons = R_AVKON_SOFTKEYS_EMPTY ; - } - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/group/SimpleVideoEditor.mmp --- a/videditor/SimpleVideoEditor/group/SimpleVideoEditor.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,101 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - -// To get the APP_LAYER_SYSTEMINCLUDE-definition -#include - -#include -#include "../../Group/buildconfig.hrh" - -#if defined( __DEBUG_ON__ ) -MACRO DEBUG_ON -#endif -#if defined( __DEBUG_ON_ALWAYS__ ) -MACRO DEBUG_ON_ALWAYS -#endif -#if defined(__DEBUG_ON__) || defined(__DEBUG_ON_ALWAYS__) -LIBRARY flogger.lib -#endif - - -TARGET SimpleVideoEditor.dll -TARGETTYPE DLL -CAPABILITY CAP_GENERAL_DLL -UID 0x1000008d 0xA0000302 - - -USERINCLUDE ../inc -USERINCLUDE ../../VideoEditorCommon/inc -USERINCLUDE ../../VideoEditorUiComponents/inc -#if defined(DEBUG_ON) -USERINCLUDE ../utils/inc -#endif - -// Default system include paths for application layer modules. -APP_LAYER_SYSTEMINCLUDE - -SOURCEPATH ../src -SOURCE SimpleVideoEditor.cpp -SOURCE SimpleVideoEditorImpl.cpp -SOURCE DummyControl.cpp -SOURCE CMultiLineQueryDialog.cpp - -SOURCEPATH ../data -START RESOURCE SimpleVideoEditor.rss -HEADER -TARGET SimpleVideoEditor.rsc -TARGETPATH RESOURCE_FILES_DIR -LANGUAGE_IDS -END - -LIBRARY apparc.lib -LIBRARY avkon.lib -LIBRARY bafl.lib -LIBRARY bitgdi.lib -LIBRARY BitmapTransforms.lib -LIBRARY CommonDialogs.lib -LIBRARY commonengine.lib -LIBRARY commonui.lib -LIBRARY cone.lib -LIBRARY efsrv.lib -LIBRARY eikcoctl.lib -LIBRARY eikcore.lib -LIBRARY eikctl.lib -LIBRARY eikdlg.lib -LIBRARY estor.lib -LIBRARY euser.lib -LIBRARY fbscli.lib -LIBRARY featmgr.lib -LIBRARY gdi.lib -LIBRARY ImageConversion.lib -LIBRARY MGFetch.lib -LIBRARY platformenv.lib -LIBRARY ServiceHandler.lib -LIBRARY sysutil.lib -LIBRARY VedEngine.lib -LIBRARY VideoEditorCommon.lib -LIBRARY ws32.lib -LIBRARY VideoEditorUiComponents.lib -LIBRARY apgrfx.lib - - - - -NOSTRICTDEF - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/group/bld.inf --- a/videditor/SimpleVideoEditor/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include - -#include "../../Group/buildconfig.hrh" - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -../rom/SimpleVideoEditor.iby CORE_APP_LAYER_IBY_EXPORT_PATH(SimpleVideoEditor.iby) -../rom/SimpleVideoEditorResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(SimpleVideoEditorResources.iby) - - -PRJ_MMPFILES -SimpleVideoEditor.mmp diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/inc/CMultiLineQueryDialog.h --- a/videditor/SimpleVideoEditor/inc/CMultiLineQueryDialog.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,69 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ -#ifndef CMULTILINEQUERYDIALOG_H_ -#define CMULTILINEQUERYDIALOG_H_ - -// INCLUDES -#include - -// CLASS DECLARATION - -/** - * Text query dialog that accepts multiple lines input. - * Wrapper for CAknTextQueryDialog - */ -class CMultiLineQueryDialog : public CAknTextQueryDialog - { - - public: // Constructors and destructor - - /** - * Two-phased constructor. - * @see CAknTextQueryDialog::NewL - */ - IMPORT_C static CMultiLineQueryDialog* NewL( TDes& aDataText, - const TTone& aTone = ENoTone ); - - /** - * Destructor. - */ - ~CMultiLineQueryDialog(); - - public: // Functions from base classes - - /** - * Handle key events. - * @see CAknTextQueryDialog - */ - IMPORT_C TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ); - - private: - - /** - * C++ default constructor. - * @see CAknTextQueryDialog::CAknTextQueryDialog - */ - CMultiLineQueryDialog( TDes& aDataText, const TTone& aTone = ENoTone ); - - private: // Data - - - }; - -#endif /*CMULTILINEQUERYDIALOG_H_*/ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/inc/DummyControl.h --- a/videditor/SimpleVideoEditor/inc/DummyControl.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* -* ============================================================================ -* Name : DummyControl.h -* Part of : Video Editor -* Description: -* Declares dummy control class -* ============================================================================ -*/ - -#ifndef _DUMMYCONTROL_H_ -#define _DUMMYCONTROL_H_ - -#include -#include - -NONSHARABLE_CLASS( CDummyControl ) : public CAknDialog - { -public: - - void ConstructL (); - virtual ~CDummyControl(); - TKeyResponse OfferKeyEventL (const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/); - TBool OkToExitL (TInt aButtonId); - - }; - -#endif _DUMMYCONTROL_H_ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/inc/SimpleVideoEditor.h --- a/videditor/SimpleVideoEditor/inc/SimpleVideoEditor.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Declares Base service API for all providers to implement in order to -* offer services to Application Interworking Framework. -* -*/ - - -#ifndef _SIMPLEVIDEOEDITOR_H_ -#define _SIMPLEVIDEOEDITOR_H_ - -// -#include -#include "SimpleVideoEditorExitObserver.h" - -// FORWARD DECLARATIONS -class CSimpleVideoEditorImpl; - -// CLASS DECLARATION -NONSHARABLE_CLASS(CSimpleVideoEditor) : public CBase - { - public: // Constructor and destructor - - IMPORT_C static CSimpleVideoEditor* NewL( MSimpleVideoEditorExitObserver& aExitObserver ); - IMPORT_C ~CSimpleVideoEditor(); - - public: // New functions - - /** - * Merges the source video clip with another video or image. - * - * @param aSourceFileName - The input video clip - * @return - - */ - IMPORT_C void Merge( const TDesC& aSourceFileName ); - - /** - * Adds sound track to the source video clip. - * Removes the original sound track. - * - * @param aSourceFileName - The input video clip - * @return - - */ - IMPORT_C void ChangeAudio( const TDesC& aSourceFileName ); - - /** - * Adds text to the source video clip. - * - * @param aSourceFileName - The input video clip - * @return - - */ - IMPORT_C void AddText( const TDesC& aSourceFileName ); - - /** - * Cancels ongoing processing. - * - * @param - - * @return - - */ - IMPORT_C void Cancel(); - - private: // Construct - - CSimpleVideoEditor(); - void ConstructL( MSimpleVideoEditorExitObserver& aExitObserver ); - - private: // Data - - CSimpleVideoEditorImpl* iImpl; - }; - -// -#endif - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/inc/SimpleVideoEditorExitObserver.h --- a/videditor/SimpleVideoEditor/inc/SimpleVideoEditorExitObserver.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _SIMPLEVIDEOEDITOREXITOBSERVER_H_ -#define _SIMPLEVIDEOEDITOREXITOBSERVER_H_ - -// -#include - -// CLASS DECLARATION -class MSimpleVideoEditorExitObserver - { - public: - /** - * @param aReason - Error code. - * @param aResultFileName - - * The name of the created file. - * In case of failure contains empty descriptor. - */ - virtual void HandleSimpleVideoEditorExit (TInt aReason, const TDesC& aResultFileName) = 0; - }; - -// -#endif - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/inc/SimpleVideoEditorImpl.h --- a/videditor/SimpleVideoEditor/inc/SimpleVideoEditorImpl.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,350 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _SIMPLEVIDEOEDITORIMPL_H_ -#define _SIMPLEVIDEOEDITORIMPL_H_ - -// - -// INCLUDES -#include -#include -#include -#include -#include -#include -#include -#include -#include "SimpleVideoEditorExitObserver.h" -#include "ExtProgressDialog.h" -#include "VeiImageClipGenerator.h" -#include "VeiTitleClipGenerator.h" - -#include "SimpleVideoEditor.h" -#include "veisettings.h" - -// FORWARD DECLATATIONS -class CVeiTempMaker; -class CExtProgressDialog; -class CDummyControl; -class CErrorUI; - - -// CLASS DECLARATION -NONSHARABLE_CLASS(CSimpleVideoEditorImpl) : public CActive, - public MVedMovieObserver, - public MVedMovieProcessingObserver, - public MVeiImageClipGeneratorObserver, - public MProgressDialogCallback, - public MExtProgressDialogCallback, - public MCoeForegroundObserver, - public MVedAudioClipInfoObserver - { - public: // Constructor and destructor - - static CSimpleVideoEditorImpl* NewL(MSimpleVideoEditorExitObserver& aExitObserver); - ~CSimpleVideoEditorImpl(); - - public: // New functions - - void StartMerge( const TDesC& aSourceFileName ); - void StartChangeAudio( const TDesC& aSourceFileName ); - void StartAddText( const TDesC& aSourceFileName ); - - void StartWaitDialogL(); - void StartProgressDialogL(); - void StartAnimatedProgressDialogL (); - void CancelMovieProcessing(); - - private: // from CActive - - void DoCancel(); - void RunL(); - TInt RunError(TInt aError); - - private: // from MProgressDialogCallback - - void DialogDismissedL( TInt aButtonId ); - - private: //from MVedMovieObserver - - void NotifyVideoClipAdded(CVedMovie& aMovie, TInt aIndex); - void NotifyVideoClipAddingFailed(CVedMovie& aMovie, TInt aError); - void NotifyVideoClipRemoved(CVedMovie& aMovie, TInt aIndex); - void NotifyVideoClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, TInt aNewIndex); - void NotifyVideoClipTimingsChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyVideoClipSettingsChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyVideoClipColorEffectChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyVideoClipAudioSettingsChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyStartTransitionEffectChanged(CVedMovie& aMovie); - void NotifyMiddleTransitionEffectChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyEndTransitionEffectChanged(CVedMovie& aMovie); - void NotifyAudioClipAdded(CVedMovie& aMovie, TInt aIndex); - void NotifyAudioClipAddingFailed(CVedMovie& aMovie, TInt aError); - void NotifyAudioClipRemoved(CVedMovie& aMovie, TInt aIndex); - void NotifyAudioClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, TInt aNewIndex); - void NotifyAudioClipTimingsChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyMovieQualityChanged(CVedMovie& aMovie); - void NotifyMovieReseted(CVedMovie& aMovie); - void NotifyMovieOutputParametersChanged(CVedMovie& aMovie); - void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex); - void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex); - void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex); - void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex); - - private: //from MVedMovieProcessingObserver - - void NotifyMovieProcessingStartedL(CVedMovie& aMovie); - void NotifyMovieProcessingProgressed(CVedMovie& aMovie, TInt aPercentage); - void NotifyMovieProcessingCompleted(CVedMovie& aMovie, TInt aError); - - public: // from MVedAudioClipInfoObserver - - void NotifyAudioClipInfoReady( CVedAudioClipInfo& aInfo, TInt aError ); - - public: //from MVeiImageClipGeneratorObserver - - void NotifyImageClipGeneratorInitializationComplete(CVeiImageClipGenerator& aGenerator, TInt aError); - - private: // From MCoeForegroundObserver - - virtual void HandleGainingForeground(); - virtual void HandleLosingForeground(); - - private: // Construct - - CSimpleVideoEditorImpl(MSimpleVideoEditorExitObserver& aExitObserver); - void ConstructL(); - - private: // New functions - - // Helper functions to keep RunL function smaller - void InitializeOperationL(); - void GetMergeInputFileL(); - void GetAudioFileL(); - void GetTextL(); - - TInt ShowListQueryL( TInt& aPosition, TInt aHeadingResourceId, TInt aQueryResourceId ) const; - - void StartMovieProcessingL(const TDesC& aSourceFile); - - void RestoreOrientation(); - - /** FilterError - * - * Sets error code based on current values of iState and iOperationMode - * i.e this is a context sensitive error mapping function - * - * @param - * @return new error code - */ - TInt FilterError() const; - - /** CompleteRequest - * - * Force RunL - * - * @param - - * @return - - */ - void CompleteRequest(); - - /** - * Shows error note with given message. - * - * @param aResourceId No description. - */ - void ShowErrorNote( const TInt aResourceId ) const; - - /** - * HandleError - * - * @param aErr Error code - */ - void HandleError(); - - /* QueryAudioInsertionL - * - * Launches a query dialog in case audio clip is shorter or longer - * than the video clip - * - * @param - - * @return 0 if user selects "No", - * 1 if video and audio clips are the same length or - * the user selects "Yes" - */ - TInt QueryAudioInsertionL( TTimeIntervalMicroSeconds aVideoDuration, - TTimeIntervalMicroSeconds aAudioDuration ); - - /** - * ProcessingOkL - * - * Called after succesfull processing - */ - void ProcessingOkL(); - - /** - * ProcessingFailed - * - * Called after unsuccesfull processing - */ - void ProcessingFailed(); - - /** QueryAndSaveL - * - * Displays Avkon file handling queries - * - * @param aSourceFileName name of the video clip that - * is selected to be merged - * @return TInt 1 if the video should be saved, - * 0 if the user has cancelled the saving - * - */ - TInt QueryAndSaveL(const TDesC& aSourceFileName); - - /* LaunchSaveVideoQueryL - * - * Launches a query dialog "Save video:" with items - * "Replace original" and "Save with a new name" - * - * @param - - * @return - list query id or -1 if the user selects No - */ - TInt LaunchSaveVideoQueryL (); - - /* LaunchSaveChangesQueryL - * - * Launches a query dialog "Save changes?" query. - * - * @param - - * @return 0 if user selects "No", otherwise 1 - */ - TInt LaunchListQueryDialogL (MDesCArray * aTextItems, - const TDesC & aPrompt); - - void ResolveCaptionNameL( TApaAppCaption& aCaption ) const; - - private: // Data - - enum TOperationMode - { - EOperationModeMin = 0, // invalid - EOperationModeMerge, - EOperationModeMergeWithVideo, - EOperationModeMergeWithImage, - EOperationModeChangeAudio, - EOperationModeAddText, - EOperationModeMax // invalid - } iOperationMode; - - enum TState - { - EStateMin = 0, // Invalid - EStateInitializing, - EStateInsertInputFirst, - EStateInsertInputSecond, - EStateInsertVideo, - EStateCreateImageGenerator, - EStateInsertImage, - EStateCheckAudioLength, - EStateInsertAudio, - EStateInsertTextToBegin, - EStateInsertTextToEnd, - EStateProcessing, - EStateProcessingOk, - EStateProcessingFailed, - EStateFinalizing, - EStateReady, - EOpMax // Invalid - } iState; - - CEikonEnv& iEnv; - - // Dummy control to eat key presses while dialogs are not active - CDummyControl* iDummyControl; - - // Interface to notify completion - MSimpleVideoEditorExitObserver& iExitObserver; - - RConeResourceLoader iResLoader; - - // - CVedMovie* iMovie; - - // Temporary file name for storing preview clip. - HBufC* iTempFile; - - // Owned by iMovie - CVeiImageClipGenerator* iImageClipGenerator; - - // Owned by iMovie - CVeiTitleClipGenerator* iTextGenerator; - - // Input and output file names - TFileName iSourceFileName; - TFileName iMergeFileName; - TFileName iAudioFileName; - HBufC* iAddText; - TFileName iOutputFileName; - - // Store the original orientation when forcing to portrait - CAknAppUiBase::TAppUiOrientation iOriginalOrientation; - - // For process priority manipulation - TProcessPriority iOriginalProcessPriority; - TBool iProcessPriorityAltered; - - // Progress dialog. - CAknProgressDialog* iProgressDialog; - - // Progress dialog. - CExtProgressDialog* iAnimatedProgressDialog; - - // Wait dialog. - CAknWaitDialog* iWaitDialog; - - TInt iPercentagesProcessed; - TInt iCancelPercentage; - TInt iError; - - // Position where the image or video will be merged - // 0 if to the beginning, 1 if to the end. - TInt iVideoOrImageIndex; - - /** Error UI */ - CErrorUI* iErrorUI; - - /** Pointer to an instance of CVedAudioClipInfo */ - CVedAudioClipInfo* iAudioClipInfo; - - /** Allowed audio mime types, used as playback in video */ - CDesCArrayFlat *iAcceptedAudioTypes; - - /** Used to figure out if the CVeiImageClipGenerator::NewL() has - * completed in a situation where the action is cancelled. */ - TBool iGeneratorComplete; - TBool iDialogDismissed; - }; - -// -#endif - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/rom/SimpleVideoEditor.iby --- a/videditor/SimpleVideoEditor/rom/SimpleVideoEditor.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_SIMPLE_VIDEO_EDITOR - -#ifndef __SIMPLEVIDEOEDITOR_IBY__ -#define __SIMPLEVIDEOEDITOR_IBY__ - -#include - -// SimpleVideoEditor dll -file=ABI_DIR\BUILD_DIR\SimpleVideoEditor.dll SHARED_LIB_DIR\SimpleVideoEditor.dll - -#endif // __SIMPLEVIDEOEDITOR_IBY__ -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/rom/SimpleVideoEditorResources.iby --- a/videditor/SimpleVideoEditor/rom/SimpleVideoEditorResources.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __SIMPLEVIDEOEDITORRESOURCES_IBY__ -#define __SIMPLEVIDEOEDITORRESOURCES_IBY__ - -#include - -data=DATAZ_\RESOURCE_FILES_DIR\SimpleVideoEditor.rsc RESOURCE_FILES_DIR\SimpleVideoEditor.rsc - -#endif // __SIMPLEVIDEOEDITORRESOURCES_IBY__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/src/CMultiLineQueryDialog.cpp --- a/videditor/SimpleVideoEditor/src/CMultiLineQueryDialog.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Class implementation. -* -*/ -/* -* ============================================================================ -* Name : CMultiLineQueryDialog.cpp -* Part of : Video Editor -* Interface : -* Description: -* Class implementation. -* Version : -* ============================================================================ -*/ - -// INCLUDES -#include "CMultiLineQueryDialog.h" -#include "VideoEditorCommon.h" - -// CONSTANTS - -_LIT( KNewLine, "\n" ); - -// MEMBER FUNCTIONS - -// ----------------------------------------------------------------------------- -// CMultiLineQueryDialog::CMultiLineQueryDialog -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -EXPORT_C CMultiLineQueryDialog::CMultiLineQueryDialog( TDes& aDataText, - const TTone& aTone /*= ENoTone*/ ) - : CAknTextQueryDialog( aDataText, aTone ) - { - } - -// ----------------------------------------------------------------------------- -// CMultiLineQueryDialog::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -EXPORT_C CMultiLineQueryDialog* CMultiLineQueryDialog::NewL( TDes& aDataText, - const TTone& aTone /*= ENoTone*/ ) - { - CMultiLineQueryDialog* self = new( ELeave ) CMultiLineQueryDialog( aDataText, aTone ); - return self; - } - - -// ----------------------------------------------------------------------------- -// Destructor -// ----------------------------------------------------------------------------- -// - -EXPORT_C CMultiLineQueryDialog::~CMultiLineQueryDialog() - { - } - -// ----------------------------------------------------------------------------- -// CMultiLineQueryDialog::OfferKeyEventL -// ----------------------------------------------------------------------------- -// -EXPORT_C TKeyResponse CMultiLineQueryDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - TKeyResponse response; - if ( aType == EEventKey && aKeyEvent.iCode == EKeyEnter ) - { - CAknQueryControl* control = static_cast( ControlOrNull( EGeneralQuery ) ); - CEikEdwin* edWin = static_cast( control->ControlByLayoutOrNull( EDataLayout ) ); - if (edWin) - { - edWin->GetText( iDataText ); - iDataText.Append( KNewLine ); - edWin->SetTextL( &iDataText ); - edWin->ClearSelectionL(); - } - response = EKeyWasConsumed; - } - else - { - response = CAknTextQueryDialog::OfferKeyEventL( aKeyEvent, aType ); - } - - return response; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/src/DummyControl.cpp --- a/videditor/SimpleVideoEditor/src/DummyControl.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* -* ============================================================================ -* Name : DummyControl.cpp -* Part of : Video Editor -* Interface : -* Description: -* Class implementation. -* ============================================================================ -*/ - -#include "DummyControl.h" -#include - -void CDummyControl::ConstructL () - { - MakeVisible(EFalse); - this->ExecuteLD(R_DUMMY_DIALOG); - } - -CDummyControl::~CDummyControl() - { - } - -TKeyResponse CDummyControl::OfferKeyEventL (const TKeyEvent& /*aKeyEvent*/, TEventCode /*aType*/) - { - return EKeyWasConsumed; - } - -TBool CDummyControl::OkToExitL (TInt /*aButtonId*/) - { - return EFalse; - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/src/SimpleVideoEditor.cpp --- a/videditor/SimpleVideoEditor/src/SimpleVideoEditor.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Class implementation. -* -*/ - - -// INCLUDES -#include "VideoEditorCommon.h" -#include "SimpleVideoEditor.h" -#include "SimpleVideoEditorImpl.h" -#include "VideoEditorDebugUtils.h" - - -// MEMBER FUNCTIONS - -//============================================================================= -EXPORT_C CSimpleVideoEditor* CSimpleVideoEditor::NewL( MSimpleVideoEditorExitObserver& aExitObserver ) - { - CSimpleVideoEditor* self = new (ELeave) CSimpleVideoEditor(); - CleanupStack::PushL (self); - self->ConstructL( aExitObserver ); - CleanupStack::Pop (self); - return self; - } - -//============================================================================= -EXPORT_C CSimpleVideoEditor::~CSimpleVideoEditor() - { - delete iImpl; - } - -//============================================================================= -EXPORT_C void CSimpleVideoEditor::Merge( const TDesC& aSourceFileName ) - { - iImpl->StartMerge(aSourceFileName); - } - -//============================================================================= -EXPORT_C void CSimpleVideoEditor::ChangeAudio( const TDesC& aSourceFileName ) - { - iImpl->StartChangeAudio(aSourceFileName); - } - -//============================================================================= -EXPORT_C void CSimpleVideoEditor::AddText( const TDesC& aSourceFileName ) - { - iImpl->StartAddText(aSourceFileName); - } - -//============================================================================= -EXPORT_C void CSimpleVideoEditor::Cancel() - { - iImpl->CancelMovieProcessing(); - } - -//============================================================================= -void CSimpleVideoEditor::ConstructL(MSimpleVideoEditorExitObserver& aExitObserver) - { - iImpl = CSimpleVideoEditorImpl::NewL(aExitObserver); - } - -//============================================================================= -CSimpleVideoEditor::CSimpleVideoEditor() - { - } - - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/SimpleVideoEditor/src/SimpleVideoEditorImpl.cpp --- a/videditor/SimpleVideoEditor/src/SimpleVideoEditorImpl.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1866 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDES -#include "SimpleVideoEditorImpl.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "VideoEditorUtils.h" -#include "VeiAddQueue.h" -#include "VideoEditorCommon.h" -#include "VideoEditorDebugUtils.h" -#include "VeiTempMaker.h" -#include "ExtProgressDialog.h" -#include "VeiMGFetchVerifier.h" -#include "VeiImageClipGenerator.h" -#include "DummyControl.h" -#include "CMultiLineQueryDialog.h" - -// CONSTANTS -_LIT(KResourceFile, "SimpleVideoEditor.rsc"); -const TProcessPriority KLowPriority = EPriorityLow; -const TInt KAudioLevelMin = -127; -const TUint KFadeInTimeMicroSeconds = 50000; - -#define KMediaGalleryUID3 0x101F8599 - -//======================================================================================================= -CSimpleVideoEditorImpl* CSimpleVideoEditorImpl::NewL(MSimpleVideoEditorExitObserver& aExitObserver) - { - CSimpleVideoEditorImpl* self = new (ELeave) CSimpleVideoEditorImpl(aExitObserver); - CleanupStack::PushL (self); - self->ConstructL(); - CleanupStack::Pop (self); - return self; - } - -//======================================================================================================= -CSimpleVideoEditorImpl::~CSimpleVideoEditorImpl() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::~CSimpleVideoEditorImpl, In"); - - // Remove foreground event observer - iEnv.RemoveForegroundObserver( *this ); - - Cancel(); - iResLoader.Close(); - - if ( iMovie ) - { - iMovie->Reset(); - iMovie->UnregisterMovieObserver( this ); - delete iMovie; - iMovie = NULL; - } - - if ( iTempFile ) - { - (void) iEnv.FsSession().Delete( *iTempFile ); - delete iTempFile; - iTempFile = NULL; - } - - if ( iProgressDialog ) - { - iProgressDialog->SetCallback( NULL ); - delete iProgressDialog; - iProgressDialog = NULL; - } - - if ( iWaitDialog ) - { - iWaitDialog->SetCallback(NULL); - delete iWaitDialog; - iWaitDialog = NULL; - } - if ( iAnimatedProgressDialog ) - { - delete iAnimatedProgressDialog; - } - - if (iImageClipGenerator) - { - delete iImageClipGenerator; - } - - if (iTextGenerator) - { - delete iTextGenerator; - } - - if (iAddText) - { - delete iAddText; - } - - if ( iErrorUI ) - { - delete iErrorUI; - } - - if ( iAudioClipInfo ) - { - delete iAudioClipInfo; - } - - if ( iAcceptedAudioTypes ) - { - delete iAcceptedAudioTypes; - iAcceptedAudioTypes = 0; - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::~CSimpleVideoEditorImpl, Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::RestoreOrientation() - { - CAknAppUiBase* appUi = static_cast( iEnv.EikAppUi() ); - CAknAppUiBase::TAppUiOrientation orientation = appUi->Orientation(); - - if (orientation != iOriginalOrientation) - { - TRAP_IGNORE( appUi->SetOrientationL(iOriginalOrientation) ); - - // Send screen device change event to validate screen - TWsEvent event; - - RWsSession& rws = iEnv.WsSession(); - event.SetType( EEventScreenDeviceChanged ); - event.SetTimeNow(); - event.SetHandle( rws.WsHandle() ); - - (void)rws.SendEventToAllWindowGroups( event ); - } - } - -//======================================================================================================= -CSimpleVideoEditorImpl::CSimpleVideoEditorImpl(MSimpleVideoEditorExitObserver& aExitObserver) -: CActive (EPriorityStandard), - iEnv( *CEikonEnv::Static() ), - iExitObserver (aExitObserver), - iResLoader( iEnv ), - iGeneratorComplete( ETrue ), - iDialogDismissed( EFalse ) - { - CActiveScheduler::Add(this); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::ConstructL() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ConstructL: In"); - - // Locate and open the resource file - TFileName fileName; - TParse p; - - Dll::FileName(fileName); - p.Set(KResourceFile, &KDC_RESOURCE_FILES_DIR, &fileName); - fileName = p.FullName(); - - LOGFMT(KVideoEditorLogFile, "\tLoading resource file: %S", &fileName); - iResLoader.OpenL( fileName ); // RConeResourceLoader selects the correct language file - - // Always use automatic save quality for the result movie - iMovie = CVedMovie::NewL( NULL ); - iMovie->RegisterMovieObserverL( this ); - iMovie->SetQuality( CVedMovie::EQualityAutomatic ); - - CVeiTempMaker* maker = CVeiTempMaker::NewLC(); - // this call can leave even though it does not end with 'L' - maker->EmptyTempFolder(); - CleanupStack::PopAndDestroy(maker); - //delete maker; - - iEnv.AddForegroundObserverL( *this ); - - - iErrorUI = CErrorUI::NewL( iEnv ); - - iAcceptedAudioTypes = new ( ELeave ) CDesCArrayFlat( 4 ); - - iAcceptedAudioTypes->Reset(); - - iAcceptedAudioTypes->AppendL( _L( "audio/mpeg" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/aac" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/amr" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/mp3" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/x-mp3" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/3gpp" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/3gpp2" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/m4a" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/mp4" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/mpeg4" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/wav" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/x-wav" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/x-realaudio" ) ); - iAcceptedAudioTypes->AppendL( _L( "audio/wma" ) ); - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ConstructL: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::StartMerge( const TDesC& aSourceFileName ) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartMerge: In"); - - iSourceFileName = aSourceFileName; - iOperationMode = EOperationModeMerge; - iState = EStateInitializing; - - CompleteRequest(); - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartMerge: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::StartChangeAudio( const TDesC& aSourceFileName ) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartChangeAudio: In"); - - iSourceFileName = aSourceFileName; - iOperationMode = EOperationModeChangeAudio; - iState = EStateInitializing; - - CompleteRequest(); - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartChangeAudio: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::StartAddText( const TDesC& aSourceFileName ) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartAddText: In"); - - iSourceFileName = aSourceFileName; - iOperationMode = EOperationModeAddText; - iState = EStateInitializing; - - CompleteRequest(); - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartAddText: Out"); - } - - -//============================================================================= -void CSimpleVideoEditorImpl::RunL() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::RunL: In"); - - // Resetting these indicators. This is not necessary right now, - // but might be in the future if the code is changed so it's reasonable to - // to do it anyway, just in case. - iGeneratorComplete = ETrue; - iDialogDismissed = EFalse; - - // if RunL() leaves, RunError() is called and iState is changed to EStateFinalizing - // (or to EStateReady if already in EStateFinalizing - - switch (iState) - { - case EStateInitializing: - { - InitializeOperationL(); - - iState = EStateInsertInputFirst; - CompleteRequest(); - break; - } - case EStateInsertInputFirst: - { - // Common to all operation modes: Insert the original video clip to the movie - // (Operation continues from the NotifyVideoClipAdded() callback method). - iMovie->InsertVideoClipL( iSourceFileName, 0 ); - StartWaitDialogL(); - - break; - } - case EStateInsertInputSecond: - { - // Get the input - text, image, video or sound clip - switch (iOperationMode) - { - case EOperationModeMerge: - { - GetMergeInputFileL(); - CompleteRequest(); - break; - } - - case EOperationModeChangeAudio: - { - GetAudioFileL(); - CompleteRequest(); - break; - } - - case EOperationModeAddText: - { - GetTextL(); - CompleteRequest(); - break; - } - - default: - User::Invariant(); - break; - } - break; - } - case EStateCheckAudioLength: - { - // NotifyAudioClipInfoReady is called instead of RunL - break; - } - case EStateInsertVideo: - { - iMovie->InsertVideoClipL(iMergeFileName, iVideoOrImageIndex); - StartWaitDialogL(); - break; - } - case EStateCreateImageGenerator: - { - TTimeIntervalMicroSeconds duration( 3000000 ); - TRgb background = KRgbBlack; - // Setting to false to indicate that the - // NewL() called below hasn't yet completed. - iGeneratorComplete = EFalse; - - // Create the image clip generator - iImageClipGenerator = CVeiImageClipGenerator::NewL( - iMergeFileName, - iMovie->Resolution(), - duration, - background, - KVideoClipGenetatorDisplayMode, - iEnv.FsSession(), - *this ); - StartWaitDialogL(); - break; - } - case EStateInsertImage: - { - TRAPD(err, iMovie->InsertVideoClipL( *iImageClipGenerator, ETrue, iVideoOrImageIndex )); // generator owned by movie - if (KErrNone == err) - { - // Generator is no longer our concern, ownership transferred to iMovie - iImageClipGenerator = 0; - StartWaitDialogL(); - } - else - { - iError = err; - iError = FilterError(); - iState = EStateFinalizing; - CompleteRequest(); - } - break; - } - - case EStateInsertAudio: - { - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::RunL: Inserting audio clip %S", &iAudioFileName); - - iMovie->AddAudioClipL( iAudioFileName, TTimeIntervalMicroSeconds( 0 )); - StartWaitDialogL(); - break; - } - - case EStateInsertTextToBegin: - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::RunL: 1"); - - - iTextGenerator = CVeiTitleClipGenerator::NewL( iMovie->Resolution(), - EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter); - - HBufC* descriptiveName = StringLoader::LoadLC(R_VESM_EDIT_VIEW_TITLE_NAME, &iEnv ); - iTextGenerator->SetDescriptiveNameL(*descriptiveName); - CleanupStack::PopAndDestroy(descriptiveName); - iTextGenerator->SetTextL(*iAddText); - - iTextGenerator->SetTransitionAndAlignmentsL(EVeiTitleClipTransitionNone, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter); - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::RunL: 2"); - TRAPD(err, iMovie->InsertVideoClipL( *iTextGenerator, ETrue, 0)); - - if (KErrNone == err) - { - // Generator is no longer our concern, ownership transferred to iMovie - iTextGenerator = 0; - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::RunL: 3"); - StartWaitDialogL(); - } - else - { - iError = err; - iError = FilterError(); - iState = EStateFinalizing; - CompleteRequest(); - } - break; - } - - case EStateInsertTextToEnd: - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::RunL: 4"); - - iTextGenerator = CVeiTitleClipGenerator::NewL( iMovie->Resolution(), - EVeiTitleClipTransitionScrollBottomToTop, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter); - - HBufC* descriptiveName = StringLoader::LoadLC(R_VESM_EDIT_VIEW_TITLE_NAME, &iEnv ); - iTextGenerator->SetDescriptiveNameL(*descriptiveName); - CleanupStack::PopAndDestroy(descriptiveName); - iTextGenerator->SetTextL(*iAddText); - - iTextGenerator->SetTransitionAndAlignmentsL(EVeiTitleClipTransitionScrollBottomToTop, - EVeiTitleClipHorizontalAlignmentCenter, - EVeiTitleClipVerticalAlignmentCenter); - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::RunL: 5"); - - TRAPD(err, iMovie->InsertVideoClipL( *iTextGenerator, ETrue, 1)); - - if (KErrNone == err) - { - // Generator is no longer our concern, ownership transferred to iMovie - iTextGenerator = 0; - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::RunL: 6"); - StartWaitDialogL(); - } - else - { - iError = err; - iError = FilterError(); - iState = EStateFinalizing; - CompleteRequest(); - } - break; - } - - case EStateProcessing: - { - StartMovieProcessingL(iSourceFileName); - break; - } - - case EStateProcessingOk: - { - ProcessingOkL(); - CompleteRequest(); - break; - } - - case EStateProcessingFailed: - { - ProcessingFailed(); - CompleteRequest(); - break; - } - - case EStateFinalizing: - { - // Show possible error dialog etc. - // in TRAP because endless call loop may otherwise be resulted in case of leave in HandleErrorL - // @ : should FilterError() be called only from here? - HandleError(); - iState = EStateReady; - CompleteRequest(); - break; - } - - case EStateReady: - { - // Notify completion to observer - iExitObserver.HandleSimpleVideoEditorExit( iError, iOutputFileName ); - break; - } - - default: - { - User::Invariant(); - break; - } - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::RunL: Out"); - } - -//============================================================================= -void CSimpleVideoEditorImpl::DoCancel() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::DoCancel: In"); - CancelMovieProcessing(); - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::DoCancel: Out"); - } -//============================================================================= - -void CSimpleVideoEditorImpl::CancelMovieProcessing() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::CancelMovieProcessing: In"); - - if (iMovie) - { - iMovie->CancelProcessing(); - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::CancelMovieProcessing: Out"); - } -//============================================================================= - -TInt CSimpleVideoEditorImpl::RunError( TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::RunError: %d", aError); - //@ : think how to solve this - - // Show possible error dialog etc. - iError = aError; - // @: if leave and error happens so that Notify callbacks are not called - iError = FilterError(); - - // if leave happens in HandleError, iState must be changed to prevent same leave happening eternally - if (EStateReady == iState) - { - iExitObserver.HandleSimpleVideoEditorExit( iError, iOutputFileName ); - } - else - { - iState = EStateReady; - HandleError(); - iExitObserver.HandleSimpleVideoEditorExit( iError, iOutputFileName ); - // If CompleteRequest() is called here, system crashes because ~CSimpleVideoEditorImpl() gets - // called from iExitObserver.HandleSimpleVideoEditorExitL(), stray signal resulted - //CompleteRequest(); - } - - return KErrNone; - } -//======================================================================================================= - -void CSimpleVideoEditorImpl::InitializeOperationL() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::InitializeOperationL: In"); - - iOutputFileName.Zero(); - - if( !AknLayoutUtils::PenEnabled() && EOperationModeAddText == iOperationMode ) - { - // Text input is always inserted in portrait mode. - // Store the original screen orientation. - CAknAppUiBase* appUi = static_cast( iEnv.EikAppUi() ); - iOriginalOrientation = appUi->Orientation(); - appUi->SetOrientationL(CAknAppUiBase::EAppUiOrientationPortrait); - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::InitializeOperationL: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::GetMergeInputFileL() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetMergeInputFileL: In"); - - iVideoOrImageIndex = 0; - - CDesCArrayFlat* selectedFiles = new ( ELeave ) CDesCArrayFlat( 1 ); - CleanupStack::PushL(selectedFiles); - - CDesCArrayFlat* mimetypesVideo = new ( ELeave ) CDesCArrayFlat( 1 ); - CleanupStack::PushL(mimetypesVideo); - mimetypesVideo->AppendL(_L("video/*")); - - CDesCArrayFlat* mimetypesImage = new ( ELeave ) CDesCArrayFlat( 1 ); - CleanupStack::PushL(mimetypesImage); - mimetypesImage->AppendL(_L("image/*")); - - TInt videoOrImage = -1; - TBool chosen = EFalse; - - // Select the input type: video clip or image - if ( ShowListQueryL(videoOrImage, R_VEI_QUERY_HEADING_MERGE_WITH, R_VED_VIDEO_OR_IMAGE_QUERY) ) - { - CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC(); - if (0 == videoOrImage) // video chosen - { - if ( MGFetch::RunL( *selectedFiles, EVideoFile, EFalse, KNullDesC(), KNullDesC(), mimetypesVideo, mgFetchVerifier)) - { - chosen = ETrue; - } - } - else if (1 == videoOrImage) // image chosen - { - if ( MGFetch::RunL( *selectedFiles, EImageFile, EFalse, KNullDesC(), KNullDesC(), mimetypesImage, mgFetchVerifier)) - { - chosen = ETrue; - } - } - CleanupStack::PopAndDestroy( mgFetchVerifier ); - - if (chosen) - { - iMergeFileName = selectedFiles->MdcaPoint(0); - TInt headingResourceId = R_VIE_QUERY_HEADING_ADD_VIDEO_TO; - if (0 == videoOrImage) // video chosen - { - iOperationMode = EOperationModeMergeWithVideo; - iState = EStateInsertVideo; - headingResourceId = R_VIE_QUERY_HEADING_ADD_VIDEO_TO; - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetMergeInputFileL: 4"); - } - else if (1 == videoOrImage) // image chosen - { - iOperationMode = EOperationModeMergeWithImage; - iState = EStateCreateImageGenerator; - headingResourceId = R_VIE_QUERY_HEADING_ADD_IMAGE_TO; - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetMergeInputFileL: 5"); - } - - TInt begOrEnd = -1; - if ( ShowListQueryL(begOrEnd, headingResourceId, R_VED_INSERT_POSITION_QUERY) ) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetMergeInputFileL: 6"); - - if (0 == begOrEnd) // video or image to the beginning - { - iVideoOrImageIndex = 0; - } - else // video or image to end - { - iVideoOrImageIndex = 1; - } - } - else - { - iState = EStateFinalizing; - } - } // if (chosen) - else - { - iState = EStateFinalizing; - } - } // if ( ShowListQueryL for image or video - else - { - iState = EStateFinalizing; - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetMergeInputFileL: 7"); - CleanupStack::PopAndDestroy(mimetypesImage); - CleanupStack::PopAndDestroy(mimetypesVideo); - CleanupStack::PopAndDestroy(selectedFiles); - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetMergeInputFileL: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::GetAudioFileL() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetAudioFileL: In"); - - TFileName outputFile; - - CDesCArrayFlat* selectedFiles = new ( ELeave ) CDesCArrayFlat( 1 ); - CleanupStack::PushL(selectedFiles); - CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC(); - - if ( MGFetch::RunL( *selectedFiles, EAudioFile, EFalse, KNullDesC, KNullDesC , iAcceptedAudioTypes, mgFetchVerifier ) ) - { - iAudioFileName = selectedFiles->MdcaPoint(0); - iAudioClipInfo = CVedAudioClipInfo::NewL( iAudioFileName, *this ); - iState = EStateCheckAudioLength; - } - else - { - iState = EStateFinalizing; - } - - CleanupStack::PopAndDestroy( mgFetchVerifier ); - CleanupStack::PopAndDestroy(selectedFiles); - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetAudioFileL: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::GetTextL() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetTextL: In"); - - // Ask for text. - iAddText = HBufC::NewL(AKNTEXT_QUERY_WIDTH * AKNTEXT_QUERY_LINES); // think what these limit values should be? - TPtr textPtr = iAddText->Des(); - CMultiLineQueryDialog* textQuery = CMultiLineQueryDialog::NewL(textPtr); - textQuery->SetMaxLength(AKNTEXT_QUERY_WIDTH * AKNTEXT_QUERY_LINES); - //textQuery->SetPredictiveTextInputPermitted(ETrue); - - if (textQuery->ExecuteLD(R_VESM_EDITVIDEO_TITLESCREEN_TEXT_QUERY)) - { - // Restore the original screen orientation immediately after the text input ends - RestoreOrientation(); - - TInt begOrEnd = -1; - - if ( ShowListQueryL(begOrEnd, R_VEI_QUERY_HEADING_ADD_TEXT_TO, R_VED_INSERT_POSITION_QUERY) ) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetTextL: 1"); - - if (0 == begOrEnd) // text to begin - { - iState = EStateInsertTextToBegin; - } - else // text to end in credits style (rolling down the screen) - { - iState = EStateInsertTextToEnd; - } - } - else - { - iState = EStateFinalizing; - } - } - else - { - // Restore the original screen orientation immediately after the text input ends - RestoreOrientation(); - iState = EStateFinalizing; - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::GetTextL: Out"); - } - -//======================================================================================================= -TInt CSimpleVideoEditorImpl::ShowListQueryL (TInt& aPosition, - TInt aHeadingResourceId, - TInt aQueryResourceId) const - { - CAknListQueryDialog* dlg = new( ELeave ) CAknListQueryDialog( &aPosition ); - dlg->PrepareLC( aQueryResourceId ); - - CAknPopupHeadingPane* heading = dlg->QueryHeading(); - HBufC* noteText = StringLoader::LoadLC( aHeadingResourceId, &iEnv ); - heading->SetTextL( noteText->Des() ); - CleanupStack::PopAndDestroy( noteText ); - - return dlg->RunLD(); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::StartMovieProcessingL(const TDesC& aSourceFile) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartMovieProcessingL: In"); - - RFs& fs = iEnv.FsSession(); - - if (QueryAndSaveL(aSourceFile)) - { - // Generate temp file. - // Take the drive from the target file name. - CAknMemorySelectionDialog::TMemory memory( CAknMemorySelectionDialog::EMemoryCard ); - if( 0 != iOutputFileName.Left(1).CompareF( PathInfo::MemoryCardRootPath().Left(1) ) ) - { - memory = CAknMemorySelectionDialog::EPhoneMemory; - } - - iTempFile = HBufC::NewL(KMaxFileName); - CVeiTempMaker* maker = CVeiTempMaker::NewL(); - maker->GenerateTempFileName( *iTempFile, memory, iMovie->Format() ); - delete maker; - - // Start rendering video to the temporary file. - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartMovieProcessingL: 1, calling iMovie->ProcessL(%S)", iTempFile); - iMovie->ProcessL(*iTempFile, *this); - } - else - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartMovieProcessingL: User cancelled saving"); - iState = EStateProcessingFailed; - CompleteRequest(); - } - - // Next: wait for MVedMovieProcessingObserver callback - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartMovieProcessingL: Out"); - } - -//============================================================================= -TInt CSimpleVideoEditorImpl::QueryAndSaveL(const TDesC& aSourceFileName) -{ - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::QueryAndSaveL: in"); - - TBool ret = EFalse; - - RFs fs = CCoeEnv::Static()->FsSession(); - - // launch query with choices "Replace original" and "Save with a new file name" - TInt userSelection = LaunchSaveVideoQueryL(); - - if(userSelection == 0) - // the user selects to save with a new file name - { - CAknMemorySelectionDialog::TMemory selectedMemory(CAknMemorySelectionDialog::EPhoneMemory); - - // Multiple drive support -#ifdef RD_MULTIPLE_DRIVE - - TDriveNumber driveNumber; - TFileName driveAndPath; - CAknMemorySelectionDialogMultiDrive* multiDriveDlg = CAknMemorySelectionDialogMultiDrive::NewL(ECFDDialogTypeSave, EFalse ); - CleanupStack::PushL(multiDriveDlg); - - // launch "Select memory" query - if (multiDriveDlg->ExecuteL( driveNumber, &driveAndPath, NULL )) - { - iOutputFileName.Zero(); - - // Generate a default name for the new file - TInt err = VideoEditorUtils::GenerateFileNameL ( - fs, - aSourceFileName, - iOutputFileName, - iMovie->Format(), - iMovie->GetSizeEstimateL(), - driveAndPath); - - driveAndPath.Append( PathInfo::VideosPath() ); - - if ( KErrNone == err ) - { - // launch file name prompt dialog - if (CAknFileNamePromptDialog::RunDlgLD(iOutputFileName, driveAndPath, KNullDesC)) - { - driveAndPath.Append(iOutputFileName); - iOutputFileName = driveAndPath; - ret = ETrue; - } - } - else // err != KErrNone - { - iErrorUI->ShowGlobalErrorNoteL( err ); - ret = EFalse; - } - } - CleanupStack::PopAndDestroy( multiDriveDlg ); - -#else // no multiple drive support - - // launch "Select memory" query - if (CAknMemorySelectionDialog::RunDlgLD(selectedMemory)) - { - // create path for the image - TFileName driveAndPath; - VideoEditor::TMemory memorySelection = VideoEditor::EMemPhoneMemory; - if (selectedMemory == CAknMemorySelectionDialog::EPhoneMemory) - { - memorySelection = VideoEditor::EMemPhoneMemory; - driveAndPath.Copy( PathInfo::PhoneMemoryRootPath() ); - driveAndPath.Append( PathInfo::VideosPath() ); - } - else if (selectedMemory == CAknMemorySelectionDialog::EMemoryCard) - { - memorySelection = VideoEditor::EMemMemoryCard; - driveAndPath.Copy( PathInfo::MemoryCardRootPath() ); - driveAndPath.Append( PathInfo::VideosPath() ); - } - - - // GenerateNewDocumentNameL also checks disk space - iOutputFileName.Zero(); - TInt err = VideoEditorUtils::GenerateNewDocumentNameL ( - fs, - aSourceFileName, - iOutputFileName, - iMovie->Format(), - iMovie->GetSizeEstimateL(), - memorySelection); - - if ( KErrNone == err ) - { - // launch file name prompt dialog - if (CAknFileNamePromptDialog::RunDlgLD(iOutputFileName, driveAndPath, KNullDesC)) - { - driveAndPath.Append(iOutputFileName); - iOutputFileName = driveAndPath; - ret = ETrue; - } - } - else // err != KErrNone - { - ret = EFalse; - } - } -#endif - } - // user selects to overwrite - else if (userSelection == 1) - - { - iOutputFileName = aSourceFileName; - return ETrue; - } - else // user cancelled - { - ret = EFalse; - } - - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::QueryAndSaveL: out: %d", ret); - - return ret; -} - - - -//============================================================================= -TInt CSimpleVideoEditorImpl::LaunchListQueryDialogL ( - MDesCArray * aTextItems, - const TDesC & aPrompt - ) -{ - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::LaunchListQueryDialogL: in"); - // Selected text item index - TInt index (-1); - - // Create a new list dialog - CAknListQueryDialog * dlg = new (ELeave) CAknListQueryDialog (&index); - - // Prepare list query dialog - dlg->PrepareLC (R_VIE_LIST_QUERY); - - // Set heading - dlg->QueryHeading()->SetTextL (aPrompt); - - // Set text item array - dlg->SetItemTextArray (aTextItems); - - // Set item ownership - dlg->SetOwnershipType (ELbmDoesNotOwnItemArray); - - // Execute - if (dlg->RunLD()) - { - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::LaunchListQueryDialogL: out: return %d", index); - return index; - } - else - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::LaunchListQueryDialogL: out: return -1"); - return -1; - } -} - -//============================================================================= -TInt CSimpleVideoEditorImpl::LaunchSaveVideoQueryL () -{ - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::LaunchSaveVideoQueryL: in"); - // Create dialog heading and options - HBufC * heading = CEikonEnv::Static()->AllocReadResourceLC (R_VIE_QUERY_HEADING_SAVE); - HBufC * option1 = CEikonEnv::Static()->AllocReadResourceLC (R_VIE_QUERY_SAVE_NEW); - HBufC * option2 = CEikonEnv::Static()->AllocReadResourceLC (R_VIE_QUERY_SAVE_REPLACE); - - // Query dialog texts - CDesCArray * options = new (ELeave) CDesCArraySeg (2); - CleanupStack::PushL (options); - options->AppendL( option1->Des() ); - options->AppendL( option2->Des() ); - - // Execute query dialog - TInt ret = LaunchListQueryDialogL (options, *heading); - - options->Reset(); - - CleanupStack::PopAndDestroy( options ); - CleanupStack::PopAndDestroy( option2 ); - CleanupStack::PopAndDestroy( option1 ); - CleanupStack::PopAndDestroy( heading ); - - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::LaunchListQueryDialogL: out: return %d", ret); - return ret; -} - - - -//======================================================================================================= -void CSimpleVideoEditorImpl::HandleLosingForeground() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::HandleLosingForeground(): In"); - - // Set the priority to low. This is needed to handle the situations - // where the engine is performing heavy processing while the application - // is in background. - RProcess myProcess; - iOriginalProcessPriority = myProcess.Priority(); - LOGFMT3(KVideoEditorLogFile, "CSimpleVideoEditorImpl::HandleLosingForeground: changing priority of process %Ld from %d to %d", myProcess.Id().Id(), iOriginalProcessPriority, KLowPriority); - myProcess.SetPriority( KLowPriority ); - iProcessPriorityAltered = ETrue; - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::HandleLosingForeground(): Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::HandleGainingForeground() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::HandleGainingForeground(): In"); - - // Return to normal priority. - RProcess myProcess; - TProcessPriority priority = myProcess.Priority(); - if ( priority < iOriginalProcessPriority ) - { - myProcess.SetPriority( iOriginalProcessPriority ); - } - iProcessPriorityAltered = EFalse; - - LOGFMT2(KVideoEditorLogFile, "CSimpleVideoEditorImpl::HandleGainingForeground: Out: process %Ld back to normal priority %d", myProcess.Id().Id(), priority); - } - -//======================================================================================================= -TInt CSimpleVideoEditorImpl::FilterError(/*const TInt& aErrEngine, const TInt& aErrUi*/) const - { - // here standard leave codes are converted to our own codes having correspondent localized error messages - if (KErrNone != iError && KErrCancel != iError) - { - if (EStateInsertInputFirst == iState ) - { - return KErrUnableToEditVideo; - } - else if (EStateInsertVideo == iState) - { - if (KErrNotSupported == iError) - { - return KErrVideoFormatNotSupported; - } - else return KErrUnableToInsertVideo; - } - else if (EStateInsertImage == iState || EStateCreateImageGenerator == iState) - { - if (KErrNotSupported == iError) - { - return KErrImageFormatNotSupported; - } - else return KErrUnableToInsertImage; - } - else if (EStateInsertAudio == iState || EStateCheckAudioLength == iState ) - { - if (KErrNotSupported == iError) - { - return KErrAudioFormatNotSupported; - } - else - { - return KErrUnableToInsertSound; - } - } - else if (EStateInsertTextToBegin == iState || EStateInsertTextToEnd == iState) - { - return KErrUnableToInsertText; - } - else if (EOperationModeMergeWithVideo == iOperationMode) - { - return KErrUnableToMergeVideos; - } - else if (EOperationModeMergeWithImage == iOperationMode) - { - return KErrUnableToMergeVideoAndImage; - } - else if (EOperationModeChangeAudio == iOperationMode) - { - return KErrUnableToChangeSound; - } - else if (EOperationModeAddText == iOperationMode) - { - if (iError == KErrNoMemory) return KErrNoMemory; - return KErrUnableToInsertText; - } - } - - return iError; - } - - -//============================================================================= -void CSimpleVideoEditorImpl::CompleteRequest() - { - if ( IsActive() ) - { - Cancel(); - } - TRequestStatus * p = &iStatus; - SetActive(); - User::RequestComplete (p, KErrNone); - } - -//============================================================================= -void CSimpleVideoEditorImpl::HandleError() - { - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::HandleErrorL: In, iError:%d", iError); - - if (KErrNone != iError && KErrCancel != iError) - { - - if (iTempFile) - { - TInt delErr = iEnv.FsSession().Delete( *iTempFile ); - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::HandleErrorL: 1, delErr:%d", delErr); - delete iTempFile; - iTempFile = NULL; - } - - switch (iError) - { - case KErrInUse: - { - ShowErrorNote(R_VEI_IN_USE); - break; - } - case KErrUnableToEditVideo: - { - ShowErrorNote(R_VEI_UNABLE_TO_EDIT); - break; - } - case KErrUnableToInsertVideo: - { - ShowErrorNote(R_VEI_UNABLE_TO_INSERT_VIDEO); - break; - } - case KErrUnableToInsertSound: - { - ShowErrorNote(R_VEI_UNABLE_TO_INSERT_SOUND); - break; - } - case KErrUnableToInsertImage: - { - ShowErrorNote(R_VEI_UNABLE_TO_INSERT_IMAGE); - break; - } - case KErrUnableToInsertText: - { - ShowErrorNote(R_VEI_UNABLE_TO_INSERT_TEXT); - break; - } - case KErrUnableToMergeVideos: - { - ShowErrorNote(R_VEI_UNABLE_TO_MERGE_VIDEOS); - break; - } - case KErrUnableToMergeVideoAndImage: - { - ShowErrorNote(R_VEI_UNABLE_TO_MERGE_VIDEO_IMAGE); - break; - } - case KErrUnableToChangeSound: - { - ShowErrorNote(R_VEI_UNABLE_TO_CHANGE_SOUND); - break; - } - case KErrVideoFormatNotSupported: - { - ShowErrorNote(R_VEI_UNABLE_TO_INSERT_VIDEO); - break; - } - case KErrAudioFormatNotSupported: - { - ShowErrorNote(R_VEI_AUDIO_FORMAT_NOT_SUPPORTED); - break; - } - case KErrImageFormatNotSupported: - { - ShowErrorNote(R_VEI_IMAGE_FORMAT_NOT_SUPPORTED); - break; - } - case KErrNoMemory: - { - ShowErrorNote(R_VEI_NOT_ENOUGH_MEMORY); - break; - } - default: - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::HandleErrorL: 4"); - ShowErrorNote(R_VEI_ERROR_NOTE); - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::HandleErrorL: 5"); - break; - } - } - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::HandleErrorL: Out"); - } - -//============================================================================= -void CSimpleVideoEditorImpl::ShowErrorNote( const TInt aResourceId ) const - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ShowErrorNoteL: In"); - - TRAP_IGNORE( - HBufC* stringholder = StringLoader::LoadLC( aResourceId, &iEnv ); - CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue ); - dlg->ExecuteLD( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - ); - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ShowErrorNoteL: out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::StartWaitDialogL() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartWaitDialogL: In"); - if (iWaitDialog) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartWaitDialogL: 2"); - delete iWaitDialog; - iWaitDialog = NULL; - } - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartWaitDialogL: 3"); - - iWaitDialog = new ( ELeave ) CAknWaitDialog( - reinterpret_cast(&iWaitDialog), ETrue ); // !!! - iWaitDialog->PrepareLC(R_VEI_WAIT_NOTE_WITH_CANCEL); - iWaitDialog->SetCallback( this ); - - HBufC* stringholder = StringLoader::LoadLC( R_VEI_NOTE_PROCESSING, &iEnv ); - iWaitDialog->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy(stringholder); - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartWaitDialogL: 4"); - iWaitDialog->RunLD(); - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartWaitDialogL: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::StartProgressDialogL() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartProgressDialogL: In"); - - if (iProgressDialog) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartProgressDialogL: 1"); - delete iProgressDialog; - iProgressDialog = NULL; - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartProgressDialogL: 2"); - - iProgressDialog = new (ELeave) CAknProgressDialog( - reinterpret_cast(&iProgressDialog), ETrue ); - iProgressDialog->PrepareLC(R_VESM_PROGRESS_NOTE_WITH_CANCEL); - iProgressDialog->SetCallback( this ); - - TInt resId = -1; - HBufC* stringholder = NULL; - switch (iOperationMode) - { - case EOperationModeMergeWithVideo: - case EOperationModeMergeWithImage: - TApaAppCaption caption; - TRAPD( err, ResolveCaptionNameL( caption ) ); - - // If something goes wrong, show basic "Saving" note - if ( err ) - { - stringholder = iEnv.AllocReadResourceLC( R_VEI_NOTE_PROCESSING ); - } - else - { - stringholder = StringLoader::LoadLC( R_VEI_NOTE_MERGING, caption, &iEnv ); - } - break; - case EOperationModeChangeAudio: - resId = R_VEI_NOTE_ADDING_AUDIO; - stringholder = StringLoader::LoadLC( resId, &iEnv ); - break; - case EOperationModeAddText: - resId = R_VEI_NOTE_ADDING_TEXT; - stringholder = StringLoader::LoadLC( resId, &iEnv ); - break; - default : - resId = R_VEI_NOTE_PROCESSING; - stringholder = StringLoader::LoadLC( resId, &iEnv ); - break; - } - - iProgressDialog->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy(stringholder); - - iProgressDialog->GetProgressInfoL()->SetFinalValue( 100 ); - iProgressDialog->RunLD(); - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::StartProgressDialogL: Out"); - } - -//============================================================================= -void CSimpleVideoEditorImpl::ResolveCaptionNameL( TApaAppCaption& aCaption ) const - { - RApaLsSession appArcSession; - CleanupClosePushL( appArcSession ); - User::LeaveIfError( appArcSession.Connect() ); - - // Get Media Gallery caption - TApaAppInfo appInfo; - User::LeaveIfError( appArcSession.GetAppInfo( appInfo, TUid::Uid( KMediaGalleryUID3 ) ) ); - - aCaption = appInfo.iCaption; - - CleanupStack::PopAndDestroy( &appArcSession ); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::StartAnimatedProgressDialogL () - { - delete iAnimatedProgressDialog; - iAnimatedProgressDialog = NULL; - iAnimatedProgressDialog = new (ELeave) CExtProgressDialog( &iAnimatedProgressDialog ); - - iAnimatedProgressDialog->PrepareLC(R_WAIT_DIALOG); - iAnimatedProgressDialog->SetCallback( this ); - - TInt labelResId = -1; - TInt animResId = -1; - switch (iOperationMode) - { - case EOperationModeMerge: - labelResId = R_VEI_NOTE_MERGING; - animResId = VideoEditor::EAnimationMerging; - break; - case EOperationModeChangeAudio: - labelResId = R_VEI_NOTE_ADDING_AUDIO; - animResId = VideoEditor::EAnimationChangeAudio; - break; - case EOperationModeAddText: - labelResId = R_VEI_NOTE_ADDING_TEXT; - animResId = VideoEditor::EAnimationAddText; - break; - default : - labelResId = R_VEI_NOTE_PROCESSING; - // @ : what is best default animation? - animResId = VideoEditor::EAnimationMerging; - break; - } - - HBufC* stringholder = StringLoader::LoadLC( labelResId, &iEnv ); - iAnimatedProgressDialog->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy(stringholder); - - iAnimatedProgressDialog->SetAnimationResourceIdL( animResId ); - - iAnimatedProgressDialog->GetProgressInfoL()->SetFinalValue( 100 ); - iAnimatedProgressDialog->StartAnimationL(); - iAnimatedProgressDialog->RunLD(); - } - - -//======================================================================================================= -void CSimpleVideoEditorImpl::NotifyMovieProcessingStartedL(CVedMovie& /*aMovie*/) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyMovieProcessingStartedL: In"); - - iPercentagesProcessed = 0; - - StartProgressDialogL(); - //StartAnimatedProgressDialogL(); - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyMovieProcessingStartedL: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::NotifyMovieProcessingProgressed(CVedMovie& /*aMovie*/, TInt aPercentage) - { - iPercentagesProcessed = aPercentage; - User::ResetInactivityTime(); - if (iAnimatedProgressDialog) - { - TRAP_IGNORE( iAnimatedProgressDialog->GetProgressInfoL()->SetAndDraw( aPercentage ) ); - } - - if (iProgressDialog) - { - TRAP_IGNORE( iProgressDialog->GetProgressInfoL()->SetAndDraw( aPercentage ) ); - } - - if ( iCancelPercentage <= aPercentage ) - { - iCancelPercentage = 101; - } - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::NotifyMovieProcessingCompleted(CVedMovie& /*aMovie*/, TInt aError) - { - LOGFMT2(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyMovieProcessingCompleted: In, aError:%d, iPercentagesProcessed:%d", aError, iPercentagesProcessed); - - iError = aError; - iError = FilterError(); - - if (KErrNone == aError) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyMovieProcessingCompleted: 1"); - iState = EStateProcessingOk; - } - else - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyMovieProcessingCompleted: 2"); - iState = EStateProcessingFailed; - } - - if (iAnimatedProgressDialog) - { - TRAP_IGNORE( iAnimatedProgressDialog->GetProgressInfoL()->SetAndDraw( 100 ) ); - delete iAnimatedProgressDialog; - iAnimatedProgressDialog = NULL; - } - if (iProgressDialog) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyMovieProcessingCompleted: 3"); - TRAP_IGNORE( iProgressDialog->GetProgressInfoL()->SetAndDraw( 100 ) ); - TRAP_IGNORE( iProgressDialog->ProcessFinishedL() ); - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyMovieProcessingCompleted: 4"); - } - - // CompleteRequest() moved to DialogDismissed() - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyMovieProcessingCompleted: Out"); - } - - - -//======================================================================================================= -void CSimpleVideoEditorImpl::NotifyAudioClipInfoReady( CVedAudioClipInfo& aInfo, TInt aError ) - { - - LOGFMT( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: in, aError:%d", aError ); - - if ( aError == KErrNone ) - { - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 1" ); - - TTimeIntervalMicroSeconds audioDuration = aInfo.Duration(); - TTimeIntervalMicroSeconds videoDuration = iMovie->Duration(); - TInt changeSound = 1; - - TRAP_IGNORE( changeSound = QueryAudioInsertionL( videoDuration, audioDuration )); - - if ( changeSound ) - { - iState = EStateInsertAudio; - } - else - { - iState = EStateFinalizing; - } - CompleteRequest(); - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: 2" ); - } - else - { - iError = aError; - iError = FilterError(); - iState = EStateFinalizing; - CompleteRequest(); - } - - LOG( KVideoEditorLogFile, "CVeiEditVideoView::NotifyAudioClipInfoReady: out" ); - } - - -//======================================================================================================= -TInt CSimpleVideoEditorImpl::QueryAudioInsertionL( TTimeIntervalMicroSeconds aVideoDuration, - TTimeIntervalMicroSeconds aAudioDuration ) - { - TInt changeSound = 1; - - // round the durations to seconds so that the comparing will be more realistic - TTimeIntervalSeconds videoDurationInSeconds = aVideoDuration.Int64()/1000000; - TTimeIntervalSeconds audioDurationInSeconds = aAudioDuration.Int64()/1000000; - - if ( audioDurationInSeconds < videoDurationInSeconds ) - { - HBufC* queryString = StringLoader::LoadLC( R_VIE_QUERY_INSERT_SHORT_AUDIO ); - CAknQueryDialog* dlg = new( ELeave )CAknQueryDialog( *queryString, CAknQueryDialog::ENoTone ); - changeSound = dlg->ExecuteLD( R_VIE_CONFIRMATION_QUERY ); - CleanupStack::PopAndDestroy( queryString ); - } - else if ( audioDurationInSeconds > videoDurationInSeconds ) - { - HBufC* queryString = StringLoader::LoadLC( R_VIE_QUERY_INSERT_LONG_AUDIO ); - CAknQueryDialog* dlg = new( ELeave )CAknQueryDialog( *queryString, CAknQueryDialog::ENoTone ); - changeSound = dlg->ExecuteLD( R_VIE_CONFIRMATION_QUERY ); - CleanupStack::PopAndDestroy( queryString ); - } - //else the audio clip is the same length as the video clip - - return changeSound; - } - - - -//======================================================================================================= - -void CSimpleVideoEditorImpl::ProcessingOkL() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ProcessingOkL: In"); - RFs& fs = iEnv.FsSession(); - CFileMan* fileman = CFileMan::NewL( fs ); - CleanupStack::PushL( fileman ); - - TInt moveErr( KErrNone ); - if ( iTempFile->Left(1) == iOutputFileName.Left(1) ) - { - moveErr = fileman->Rename( *iTempFile, iOutputFileName ); - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ProcessingOkL: 1 renamed temp file: err %d", moveErr); - } - else - { - moveErr = fileman->Move( *iTempFile, iOutputFileName ); - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ProcessingOkL: 2 moved tem file: err %d", moveErr); - } - CleanupStack::PopAndDestroy( fileman ); - - delete iTempFile; - iTempFile = NULL; - iError = moveErr; - - iState = EStateFinalizing; - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ProcessingOkL: Out"); - } -//======================================================================================================= - -void CSimpleVideoEditorImpl::ProcessingFailed() - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ProcessingFailed: In"); - TInt delErr = iEnv.FsSession().Delete( *iTempFile ); - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ProcessingFailed: 1, delErr:%d", delErr); - if ( delErr ) - { - // @: should something be done? - } - delete iTempFile; - iTempFile = NULL; - iState = EStateFinalizing; - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::ProcessingFailed: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::NotifyVideoClipAdded(CVedMovie& /*aMovie*/, TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyVideoClipAdded: In"); - - if ( EStateInsertInputFirst == iState ) - { - // Next insert the second item (i.e. video|image|audio|text) - iState = EStateInsertInputSecond; - } - else if ( EStateInsertVideo == iState || EStateInsertImage == iState - || EStateInsertTextToBegin == iState || EStateInsertTextToEnd == iState) - { - // Next start processing the movie - iState = EStateProcessing; - } - // if cancel is pressed in the middle of iMovie->InsertVideoClip(), state is put to iStateFinalizing to stop - // the process - else if ( EStateFinalizing == iState || EStateReady == iState ) - { - ; - } - else - { - User::Invariant(); - } - - if ( iWaitDialog ) - { - TRAP_IGNORE(iWaitDialog->ProcessFinishedL()); - } - //CompleteRequest(); - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyVideoClipAdded: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::NotifyVideoClipAddingFailed(CVedMovie& /*aMovie*/, TInt aError) - { - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyVideoClipAddingFailed: In, aError:%d", aError); - - iError = aError; - iError = FilterError(); - - // Next handle error and exit - iState = EStateFinalizing; - - if ( iWaitDialog ) - { - TRAP_IGNORE(iWaitDialog->ProcessFinishedL()); - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyVideoClipAddingFailed: Out"); - } - - - -//======================================================================================================= -void CSimpleVideoEditorImpl::NotifyAudioClipAdded(CVedMovie& /*aMovie*/, TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyAudioClipAdded: In"); - - ASSERT(iMovie && iMovie->VideoClipCount() == 1); - - if ( EStateInsertAudio == iState ) - { - TInt audioClipCount = iMovie->AudioClipCount(); - TTimeIntervalMicroSeconds currentAudioClipEndTime = iMovie->AudioClipEndTime( audioClipCount - 1 ); // in movie timebase - - TTimeIntervalMicroSeconds videoClipEndTime = iMovie->VideoClipEndTime(0); // in movie timebase - if( currentAudioClipEndTime > videoClipEndTime ) - { - // Adjust the length so that the audio duration does not exceed video duration. - CVedAudioClipInfo* audioClip = iMovie->AudioClipInfo( audioClipCount - 1 ); - TInt64 cutOutTime = audioClip->Duration().Int64() - ( currentAudioClipEndTime.Int64() - videoClipEndTime.Int64() ); - iMovie->AudioClipSetCutOutTime( audioClipCount - 1, TTimeIntervalMicroSeconds(cutOutTime) ); // in clip timebase - } - ASSERT( iMovie->Duration() == videoClipEndTime ); - - TTimeIntervalMicroSeconds audioClipEndTime = iMovie->AudioClipEndTime( audioClipCount - 1); - - ASSERT( audioClipEndTime.Int64() <= videoClipEndTime.Int64() ); - - TInt error = KErrNone; - - if ( audioClipEndTime == videoClipEndTime ) - { - if ( iMovie->VideoClipIsMuteable(0) ) - { - iMovie->VideoClipSetMuted(0, ETrue); - } - } - - // if the audio clip is shorter than the video clip, the original sound - // of the video clip has to be muted until the end of the new sound clip - else if ( audioClipEndTime < videoClipEndTime ) - { - - if ( iMovie->VideoClipEditedHasAudio(0) ) - { - - TVedDynamicLevelMark mark1( TTimeIntervalMicroSeconds(0), KAudioLevelMin ); - - TInt64 time = audioClipEndTime.Int64() - KFadeInTimeMicroSeconds; - - TVedDynamicLevelMark mark2( TTimeIntervalMicroSeconds(time) , KAudioLevelMin ); - - TVedDynamicLevelMark mark3( audioClipEndTime, 0 ); - - TRAP( error, iMovie->VideoClipInsertDynamicLevelMarkL( 0, mark1 ) ); - - if ( error == KErrNone ) - { - TRAP( error, iMovie->VideoClipInsertDynamicLevelMarkL( 0, mark2 ) ); - } - - if ( error == KErrNone ) - { - TRAP( error, iMovie->VideoClipInsertDynamicLevelMarkL( 0, mark3 ) ); - } - - if ( error != KErrNone ) - { - iError = error; - iError = FilterError(); - } - - } - } - - if ( error == KErrNone ) - { - iState = EStateProcessing; - } - else - { - iState = EStateProcessingFailed; - } - } - - if( iWaitDialog ) - { - TRAP_IGNORE(iWaitDialog->ProcessFinishedL()); - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyAudioClipAdded: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::NotifyAudioClipAddingFailed(CVedMovie& /*aMovie*/, TInt aError) - { - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyAudioClipAddingFailed: In, aError:%d", aError); - - iError = aError; - - iError = FilterError(); - - // Next handle error and exit - iState = EStateFinalizing; - if ( iWaitDialog ) - { - TRAP_IGNORE(iWaitDialog->ProcessFinishedL()); - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyAudioClipAddingFailed: Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::NotifyImageClipGeneratorInitializationComplete(CVeiImageClipGenerator& /*aGenerator*/, TInt aError) - { - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyImageClipGeneratorInitializationComplete, In, aError:%d", aError); - - iError = aError; - - // If the wait dialog has been dismissed, i.e the action has been cancelled, - // we expect that the DialogDismissedL() method has set the correct state and won't - // set the state ourselves. - iGeneratorComplete = ETrue; - if( !iDialogDismissed ) - { - if (KErrNone == aError) - { - iState = EStateInsertImage; - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyImageClipGeneratorInitializationComplete: 2"); - } - else - { - iError = FilterError(); - // Next handle error and exit - - /* - If iImageClipGenerator is deleted here (in NotifyImageClipGeneratorInitializationComplete), endless - loop is resulted, because calling iImageClipGenerator's destructor leads to calling NotifyImageClipGeneratorInitializationComplete - again until stack overdoses etc. - iImageClipGenerator does not have to be deleted here, it is deleted in destructor. - delete iImageClipGenerator; - iImageClipGenerator = 0; - */ - - iState = EStateFinalizing; - } - } - - CompleteRequest(); - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::NotifyImageClipGeneratorInitializationComplete, Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::DialogDismissedL( TInt aButtonId ) - { - LOGFMT(KVideoEditorLogFile, "CSimpleVideoEditorImpl::DialogDismissedL, In, aButtonId:%d", aButtonId); - - if ( aButtonId != EAknSoftkeyDone) - { - // If the action was cancelled, we set up the correspondig state - // and also set the iDialogDismissed property to indicate that. - iDialogDismissed = ETrue; - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::DialogDismissedL, 1"); - - if (EStateProcessing == iState && iMovie) - { - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::DialogDismissedL, 2, canceling processing..."); - iState = EStateProcessingFailed; - /* - It depends on scheduling of active objects whether NotifyMovieProcessingCompleted() - gets called. If iProgressDialog is NULLed by itself in the time DialogDismissed() gets called - it should be nonrelevant whether NotifyMovieProcessingCompleted() called or not because - in NotifyMovieProcessingCompleted() iProgressDialog->ProcessFinished() is called only if - it is not NULL leading to another call to DialogDismissed(). But even if DialogDismissed() - gets called multiple times it should not cause any harm. - */ - iMovie->CancelProcessing(); - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::DialogDismissedL, 4, ...canceling called"); - } - else - { - // if wait dialog is canceled during inserts - iError = KErrCancel; - iState = EStateFinalizing; - } - - // this problem is because in add text mode orientation is forced to portrait in - // such an early stage - // ask Heikki's opinion, why appUi->SetOrientationL(CAknAppUiBase::EAppUiOrientationPortrait); - // is called in InitializeOperationL()? - // Can it be moved to where it is neede, in GetText()? - if (EOperationModeAddText == iOperationMode) - { - RestoreOrientation(); - } - } - - // Only if the VeiImageClipGenerator::NewL() called from the RunL() has finished and called - // the NotifyImageClipGeneratorInitializationComplete() method we complete and activate again. - // If not, we rely that the NotifyImageClipGeneratorInitializationComplete() method - // calls CompleteRequest() when it's called. - if( iGeneratorComplete ) - { - CompleteRequest(); - } - - LOG(KVideoEditorLogFile, "CSimpleVideoEditorImpl::DialogDismissedL, Out"); - } - -//======================================================================================================= -void CSimpleVideoEditorImpl::NotifyVideoClipRemoved(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CSimpleVideoEditorImpl::NotifyVideoClipIndicesChanged(CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/){} -void CSimpleVideoEditorImpl::NotifyVideoClipTimingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CSimpleVideoEditorImpl::NotifyVideoClipSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CSimpleVideoEditorImpl::NotifyVideoClipColorEffectChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CSimpleVideoEditorImpl::NotifyVideoClipAudioSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CSimpleVideoEditorImpl::NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CSimpleVideoEditorImpl::NotifyVideoClipDescriptiveNameChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CSimpleVideoEditorImpl::NotifyStartTransitionEffectChanged(CVedMovie& /*aMovie*/){} -void CSimpleVideoEditorImpl::NotifyMiddleTransitionEffectChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CSimpleVideoEditorImpl::NotifyEndTransitionEffectChanged(CVedMovie& /*aMovie*/){} -void CSimpleVideoEditorImpl::NotifyAudioClipRemoved(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CSimpleVideoEditorImpl::NotifyAudioClipIndicesChanged(CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/){} -void CSimpleVideoEditorImpl::NotifyAudioClipTimingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CSimpleVideoEditorImpl::NotifyMovieQualityChanged(CVedMovie& /*aMovie*/){} -void CSimpleVideoEditorImpl::NotifyMovieReseted(CVedMovie& /*aMovie*/){} -void CSimpleVideoEditorImpl::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/){} -void CSimpleVideoEditorImpl::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){} -void CSimpleVideoEditorImpl::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){} -void CSimpleVideoEditorImpl::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){} -void CSimpleVideoEditorImpl::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){} -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/data/TrimForMms.rss --- a/videditor/TrimForMms/data/TrimForMms.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,251 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// ==================================================================== -// File: TrimForMms.rss -// Created: 04/18/06 -// Author: -// -// ==================================================================== */ - -NAME TRIM - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "TrimForMms.hrh" -#include "manualvideoeditor.loc" - -// --------------------------------------------------------- -// -// Define the resource file signature -// This resource should be empty. -// -// --------------------------------------------------------- -// -RESOURCE RSS_SIGNATURE { } - -// --------------------------------------------------------- -// -// Default Document Name -// -// --------------------------------------------------------- -// -RESOURCE TBUF r_default_document_name { buf=""; } - -// --------------------------------------------------------- -// -// Define default menu and CBA key. -// -// --------------------------------------------------------- -// -RESOURCE EIK_APP_INFO - { - menubar = r_TrimForMms_menubar; - cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT; - } - -RESOURCE LOCALISABLE_APP_INFO r_trim_for_mms_localisable_app_info - { - short_caption = qtn_app_short_caption_string; - caption_and_icon = - { - CAPTION_AND_ICON_INFO - { - caption=qtn_app_caption_string; - number_of_icons=0; - //icon_file=APP_BITMAP_DIR"\\TrimForMms_aif.mif"; - } - }; - } - -// --------------------------------------------------------- -// -// r_TrimForMms_menubar -// Menubar for TrimForMms example -// -// --------------------------------------------------------- -// -RESOURCE MENU_BAR r_TrimForMms_menubar - { - titles = - { - MENU_TITLE {menu_pane = r_TrimForMms_menu;} - }; - } - - -// --------------------------------------------------------- -// -// r_TrimForMms_menu -// Menu for "Options" -// -// --------------------------------------------------------- -// -RESOURCE MENU_PANE r_TrimForMms_menu - { - items = - { - MENU_ITEM {command = EAknSoftkeyExit; txt = "Exit";} - }; - } - -RESOURCE HOTKEYS r_vei_hotkeys - { - control= - { - HOTKEY { command=EAknCmdExit; key='e'; } - }; - } - -RESOURCE MENU_BAR r_vei_menubar_trim_for_mms_view - { - titles= - { - MENU_TITLE - { - menu_pane=r_vei_menu_pane_trim_for_mms_view; - txt=""; - } - }; - } - -RESOURCE MENU_PANE r_vei_menu_pane_trim_for_mms_view - { - items= - { - MENU_ITEM { command=EVeiCmdSendViaMms; txt=qtn_vei_menu_send_via_mms; }, - MENU_ITEM { command=EVeiCmdPreview; txt=qtn_vei_menu_preview; }, -// MENU_ITEM { command=EVeiCmdVideoLength; txt=qtn_vei_menu_video_length; }, - MENU_ITEM { command=EVeiCmdTrimForMmsViewHelp; txt=qtn_clipb_litxt_help; } - }; - } - -// --------------------------------------------------------- -// -// r_vei_trim_for_mms_view -// View -// -// --------------------------------------------------------- -// -RESOURCE AVKON_VIEW r_vei_trim_for_mms_view - { - hotkeys=r_vei_hotkeys; - menubar=r_vei_menubar_trim_for_mms_view; - cba=R_AVKON_SOFTKEYS_OPTIONS_BACK; - } - -RESOURCE TBUF r_ved_thumbnail_start_text - { - buf = qtn_ved_trim_start; - } - - -RESOURCE TBUF r_ved_thumbnail_end_text - { - buf = qtn_ved_trim_end; - } - -RESOURCE AVKON_SKEY_LIST r_ved_left_right_silent_skey_list - { - list = - { - AVKON_SKEY_INFO - { - key = EStdKeyRightArrow; - sid = EAvkonSIDNoSound; - type = ESKeyTypeLong; - }, - AVKON_SKEY_INFO - { - key = EStdKeyRightArrow; - sid = EAvkonSIDNoSound; - type = ESKeyTypeRepeat; - }, - AVKON_SKEY_INFO - { - key = EStdKeyLeftArrow; - sid = EAvkonSIDNoSound; - type =ESKeyTypeLong; - }, - AVKON_SKEY_INFO - { - key = EStdKeyLeftArrow; - sid = EAvkonSIDNoSound; - type =ESKeyTypeRepeat; - } - }; - } - -RESOURCE TBUF r_ved_processing_for_mms - { - buf = qtn_ved_processing_for_mms; - } - -RESOURCE TBUF128 r_vei_progress_note_processing - { - buf = qtn_ved_processing_movie; - } - -RESOURCE DIALOG r_vei_progress_note - { - flags = EAknProgressNoteFlags; - buttons = R_AVKON_SOFTKEYS_EMPTY; - items = - { - DLG_LINE - { - type = EAknCtNote; - id = EGeneralNote; - control = AVKON_NOTE - { - layout = EProgressLayout; - singular_label = qtn_vei_progress_note_processing; - imagefile = AVKON_ICON_FILE; - imageid = EMbmAvkonQgn_note_progress; - imagemask = EMbmAvkonQgn_note_progress_mask; - }; - } - }; - } - -RESOURCE TITLE_PANE r_vei_trim_for_mms_view_title_name - { - txt = qtn_vei_trim_mms_title; - } - -// SETTINGS -RESOURCE TBUF128 r_vei_settings_view_settings_item_value - { - buf = qtn_vei_settings_value1_movie; - } - -RESOURCE TBUF128 r_vei_settings_view_settings_item2_value - { - buf = qtn_vei_settings_value2_snapshot; - } - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/data/TrimForMms_reg.rss --- a/videditor/TrimForMms/data/TrimForMms_reg.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// ==================================================================== -// File: TrimForMms_reg.rss -// Created: 04/18/06 -// Author: -// -// ==================================================================== */ - -//TrimForMms application's registration resource file - -#include -#include -#include - -UID2 KUidAppRegistrationResourceFile -UID3 0x200009D - -RESOURCE APP_REGISTRATION_INFO - { - app_file="TrimForMms"; - localisable_resource_file=APP_RESOURCE_DIR"\\TrimForMms_loc"; - localisable_resource_id = R_TRIM_FOR_MMS_LOCALISABLE_APP_INFO; - hidden = KAppNotHidden; - embeddability = KAppEmbeddable; - launch = KAppLaunchInForeground; - } diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/group/TrimForMms.mmp --- a/videditor/TrimForMms/group/TrimForMms.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// To get the APP_LAYER_SYSTEMINCLUDE-definition -#include - -#include -#include "../../Group/buildconfig.hrh" - -#if defined( __DEBUG_ON__ ) -MACRO DEBUG_ON -#endif -#if defined( __DEBUG_ON_ALWAYS__ ) -MACRO DEBUG_ON_ALWAYS -#endif -#if defined(__DEBUG_ON__) || defined(__DEBUG_ON_ALWAYS__) -LIBRARY flogger.lib -#endif - - -TARGETPATH /sys/bin -TARGET TrimForMms.exe -TARGETTYPE exe - -UID 0x100039CE 0x200009D - -CAPABILITY CAP_APPLICATION -SECUREID 0x200009D - -SOURCEPATH ../src -SOURCE TrimForMms.cpp -SOURCE TrimForMmsApplication.cpp -SOURCE TrimForMmsAppUi.cpp -SOURCE TrimForMmsDocument.cpp -SOURCE VeiTrimForMmsContainer.cpp -SOURCE VeiTrimForMmsView.cpp - -SOURCEPATH ../group - -USERINCLUDE ../inc -USERINCLUDE ../../VideoEditorCommon/inc -USERINCLUDE ../../VideoEditorCommon/loc -USERINCLUDE ../../VideoEditorUiComponents/inc - -// Default system include paths for application layer modules. -APP_LAYER_SYSTEMINCLUDE - -LIBRARY euser.lib -LIBRARY apparc.lib -LIBRARY cone.lib -LIBRARY eikcore.lib -LIBRARY eikcoctl.lib -LIBRARY eikctl.lib -LIBRARY avkon.lib -LIBRARY sendui.lib -LIBRARY aknskins.lib -LIBRARY efsrv.lib -LIBRARY hlplch.lib -LIBRARY charconv.lib -LIBRARY mmsserversettings.lib -LIBRARY VedEngine.lib -LIBRARY VideoEditorCommon.lib -LIBRARY VideoEditorUiComponents.lib -LIBRARY bafl.lib -LIBRARY estor.lib -LIBRARY commonengine.lib -LIBRARY gdi.lib -LIBRARY ws32.lib - -START RESOURCE ../data/TrimForMms.RSS -HEADER -TARGETPATH /resource/apps -LANG sc -END - -START RESOURCE ../data/TrimForMms_reg.rss -DEPENDS trimformms.rsg -TARGETPATH /private/10003a3f/import/apps -END diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/group/bld.inf --- a/videditor/TrimForMms/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -PRJ_MMPFILES - -TrimForMms.mmp - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/inc/TrimForMms.hrh --- a/videditor/TrimForMms/inc/TrimForMms.hrh Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* ==================================================================== - * File: TrimForMms.hrh - * Created: 04/18/06 - * Author: - * - * ==================================================================== */ - -#ifndef __TrimForMms_HRH__ -#define __TrimForMms_HRH__ - -/** TrimForMms enumerate command codes */ -enum TTrimForMmsIds - { - EVeiCmdSendViaMms = 1, // start value must not be 0 - EVeiCmdPreview, - EVeiCmdTrimForMmsViewHelp - }; - -enum TTrimForMmsViewIds - { - EVeiTrimForMmsView - }; - -#endif // __TrimForMms_HRH__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/inc/TrimForMms.pan --- a/videditor/TrimForMms/inc/TrimForMms.pan Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ -/* ==================================================================== - * File: TrimForMms.pan - * Created: 04/18/06 - * Author: - * - * ==================================================================== */ - -#ifndef __TRIMFORMMS_PAN__ -#define __TRIMFORMMS_PAN__ - -/** TrimForMms application panic codes */ -enum TTrimForMmsPanics - { - ETrimForMmsBasicUi = 1 - // add further panics here - }; - -inline void Panic(TTrimForMmsPanics aReason) - { - _LIT(applicationName,"TrimForMms"); - User::Panic(applicationName, aReason); - } - -#endif // __TRIMFORMMS_PAN__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/inc/TrimForMmsApplication.h --- a/videditor/TrimForMms/inc/TrimForMmsApplication.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* ==================================================================== - * File: TrimForMmsApplication.h - * Created: 04/18/06 - * Author: - * - * ==================================================================== */ - -#ifndef __TRIMFORMMS_APPLICATION_H__ -#define __TRIMFORMMS_APPLICATION_H__ - -#include - - -/*! - @class CTrimForMmsApplication - - @discussion An instance of CTrimForMmsApplication is the application part of the AVKON - application framework for the TrimForMms example application - */ -class CTrimForMmsApplication : public CAknApplication - { -public: // from CAknApplication - -/*! - @function AppDllUid - - @discussion Returns the application DLL UID value - @result the UID of this Application/Dll - */ - TUid AppDllUid() const; - -protected: // from CAknApplication -/*! - @function CreateDocumentL - - @discussion Create a CApaDocument object and return a pointer to it - @result a pointer to the created document - */ - CApaDocument* CreateDocumentL(); - }; - -#endif // __TRIMFORMMS_APPLICATION_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/inc/TrimForMmsAppui.h --- a/videditor/TrimForMms/inc/TrimForMmsAppui.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* ==================================================================== - * File: TrimForMmsAppUi.h - * Created: 04/18/06 - * Author: - * - * ==================================================================== */ - -#ifndef __TRIMFORMMS_APPUI_H__ -#define __TRIMFORMMS_APPUI_H__ - -#include - -// Forward reference -class CVeiTrimForMmsView; -class CSendUi; -class TVeiSettings; - -/*! - @class CTrimForMmsAppUi - - @discussion An instance of class CTrimForMmsAppUi is the UserInterface part of the AVKON - application framework for the TrimForMms example application - */ -class CTrimForMmsAppUi : public CAknViewAppUi - { -public: -/*! - @function ConstructL - - @discussion Perform the second phase construction of a CTrimForMmsAppUi object - this needs to be public due to the way the framework constructs the AppUi - */ - void ConstructL(); - -/*! - @function CTrimForMmsAppUi - - @discussion Perform the first phase of two phase construction. - This needs to be public due to the way the framework constructs the AppUi - */ - CTrimForMmsAppUi(); - - -/*! - @function ~CTrimForMmsAppUi - - @discussion Destroy the object and release all memory objects - */ - ~CTrimForMmsAppUi(); - - -/*! - Reads application settings data from ini-file. - - @param aSettings Settings data where values are read. - */ - void ReadSettingsL( TVeiSettings& aSettings ); - - -public: // from CAknAppUi -/*! - @function HandleCommandL - - @discussion Handle user menu selections - @param aCommand the enumerated code for the option selected - */ - void HandleCommandL(TInt aCommand); - -/*! - Calls CAknAppUiBase::HandleScreenDeviceChangedL(). - */ -// virtual void HandleScreenDeviceChangedL(); - - /** - * From @c CEikAppUi. Handles a change to the application's resources which - * are shared across the environment. This function calls - * @param aType The type of resources that have changed. - */ - virtual void HandleResourceChangeL(TInt aType); - -private: -/*! @var iTrimForMmsView The application view */ - CVeiTrimForMmsView* iTrimForMmsView; - - CSendUi* iSendUi; - }; - - -#endif // __TRIMFORMMS_APPUI_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/inc/TrimForMmsAppview.h --- a/videditor/TrimForMms/inc/TrimForMmsAppview.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* ==================================================================== - * File: TrimForMmsAppView.h - * Created: 04/18/06 - * Author: - * - * ==================================================================== */ - -#ifndef __TRIMFORMMS_APPVIEW_H__ -#define __TRIMFORMMS_APPVIEW_H__ - - -#include - -// FORWARD DECLARATIONS -class CSendUi; - -/*! - @class CTrimForMmsAppView - - @discussion An instance of the Application View object for the TrimForMms - example application - */ -class CTrimForMmsAppView : public CCoeControl - { -public: - -/*! - @function NewL - - @discussion Create a CTrimForMmsAppView object, which will draw itself to aRect - @param aRect the rectangle this view will be drawn to - @result a pointer to the created instance of CTrimForMmsAppView - */ - static CTrimForMmsAppView* NewL(const TRect& aRect); - -/*! - @function NewLC - - @discussion Create a CTrimForMmsAppView object, which will draw itself to aRect - @param aRect the rectangle this view will be drawn to - @result a pointer to the created instance of CTrimForMmsAppView - */ - static CTrimForMmsAppView* NewLC(const TRect& aRect); - - -/*! - @function ~CTrimForMmsAppView - - @discussion Destroy the object and release all memory objects - */ - ~CTrimForMmsAppView(); - - -public: // from CCoeControl -/*! - @function Draw - - @discussion Draw this CTrimForMmsAppView to the screen - @param aRect the rectangle of this view that needs updating - */ - void Draw(const TRect& aRect) const; - - -private: - -/*! - @function ConstructL - - @discussion Perform the second phase construction of a CTrimForMmsAppView object - @param aRect the rectangle this view will be drawn to - */ - void ConstructL(const TRect& aRect); - -/*! - @function CTrimForMmsAppView - - @discussion Perform the first phase of two phase construction - */ - CTrimForMmsAppView(); - - - // Send UI - CSendUi* iSendUi; - - }; - - -#endif // __TRIMFORMMS_APPVIEW_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/inc/TrimForMmsDocument.h --- a/videditor/TrimForMms/inc/TrimForMmsDocument.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* ==================================================================== - * File: TrimForMmsDocument.h - * Created: 04/18/06 - * Author: - * - * ==================================================================== */ - -#ifndef __TRIMFORMMS_DOCUMENT_H__ -#define __TRIMFORMMS_DOCUMENT_H__ - - -#include - -// Forward references -class CTrimForMmsAppUi; -class CEikApplication; - - -/*! - @class CTrimForMmsDocument - - @discussion An instance of class CTrimForMmsDocument is the Document part of the AVKON - application framework for the TrimForMms example application - */ -class CTrimForMmsDocument : public CAknDocument - { -public: - -/*! - @function NewL - - @discussion Construct a CTrimForMmsDocument for the AVKON application aApp - using two phase construction, and return a pointer to the created object - @param aApp application creating this document - @result a pointer to the created instance of CTrimForMmsDocument - */ - static CTrimForMmsDocument* NewL(CEikApplication& aApp); - -/*! - @function NewLC - - @discussion Construct a CTrimForMmsDocument for the AVKON application aApp - using two phase construction, and return a pointer to the created object - @param aApp application creating this document - @result a pointer to the created instance of CTrimForMmsDocument - */ - static CTrimForMmsDocument* NewLC(CEikApplication& aApp); - -/*! - @function ~CTrimForMmsDocument - - @discussion Destroy the object and release all memory objects - */ - ~CTrimForMmsDocument(); - -public: // from CAknDocument -/*! - @function CreateAppUiL - - @discussion Create a CTrimForMmsAppUi object and return a pointer to it - @result a pointer to the created instance of the AppUi created - */ - CEikAppUi* CreateAppUiL(); - - - void OpenFileL(CFileStore*& /*aFileStore*/, RFile& aFile); - -private: - -/*! - @function ConstructL - - @discussion Perform the second phase construction of a CTrimForMmsDocument object - */ - void ConstructL(); - -/*! - @function CTrimForMmsDocument - - @discussion Perform the first phase of two phase construction - @param aApp application creating this document - */ - CTrimForMmsDocument(CEikApplication& aApp); - - }; - - -#endif // __TRIMFORMMS_DOCUMENT_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/inc/VeiTrimForMmsContainer.h --- a/videditor/TrimForMms/inc/VeiTrimForMmsContainer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,378 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef VEITRIMFORMMSCONTAINER_H -#define VEITRIMFORMMSCONTAINER_H - -// INCLUDES -// System includes -#include // TAknLayoutText -#include -#include -#include -#include -// User includes -#include "VeiVideoDisplay.h" -#include "VeiFrameTaker.h" -#include "VeiTrimForMmsView.h" -#include "VeiDisplayLighter.h" - -// FORWARD DECLARATIONS -class CVeiCutterBar; -class CVeiTrimForMmsView; -class CVeiTrimForMmsView; -class CAknsBasicBackgroundControlContext; -class CAknProgressDialog; -//class CEikProgressInfo; - -// CLASS DECLARATION - -/** - * - */ -class CVeiTrimForMmsContainer : public CCoeControl, - public MVedMovieObserver, - public MVeiVideoDisplayObserver, - public MVeiFrameTakerObserver, - public MProgressDialogCallback - { - public: - - static CVeiTrimForMmsContainer* NewL( const TRect& aRect, - CVedMovie& aMovie, - CVeiTrimForMmsView& aView ); - - static CVeiTrimForMmsContainer* NewLC( const TRect& aRect, - CVedMovie& aMovie, - CVeiTrimForMmsView& aView); - - ~CVeiTrimForMmsContainer(); - - public: // New functions - - const TTimeIntervalMicroSeconds& CutInTime() const; - - const TTimeIntervalMicroSeconds& CutOutTime() const; - - void SetMaxMmsSize( TInt aMaxSizeInBytes ); - - /** - * Start full screen preview. Calls CVeiVideoDisplay. - * - * @param aFilename filename. - * @param aRect full screen size. - */ - void PlayL( const TDesC& aFilename, const TRect& aRect ); - - /** - * Stop preview. Stops CVeiVideoDisplay - * - * @param aCloseStream - */ - void Stop( TBool aCloseStream ); - - /** - * - */ - void PauseL(); - - /** - * Return the video display state of CVeiTrimForMmsContainer. - * - * @param - */ - TInt PreviewState() const; - - void StartFrameTakerL( TInt aIndex ); - - private: // From CCoeControl - - virtual void DialogDismissedL( TInt aButtonId ); - - CCoeControl* ComponentControl(TInt aIndex) const; - - TInt CountComponentControls() const; - - /** - * Gets the control's help context. Associates the control with a - * particular Help file and topic in a context sensitive application. - * - * @param aContext The control's help context. - */ - void GetHelpContext( TCoeHelpContext& aContext ) const; - - void Draw( const TRect& aRect ) const; - - void SizeChanged(); - - TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aType); - - private: // From MVeiVideoDisplayObserver - - virtual void NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo = 0 ); - - virtual void NotifyFramesCompleted( CFbsBitmap* aFirstFrame, CFbsBitmap* aLastFrame, - CFbsBitmap* /*aTimelineFrame*/, TInt aError ); - - - /** - * Gets an object whose type is encapsulated by the specified TTypeUid - * object. - * - * @param aId Encapsulates the Uid that identifies the type of object - * required. - * - * @return - */ - virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); - - protected: // From MVedMovieObserver - - virtual void NotifyVideoClipAdded(CVedMovie& aMovie, TInt aIndex); - - virtual void NotifyVideoClipAddingFailed(CVedMovie& aMovie, TInt aError); - - virtual void NotifyVideoClipRemoved(CVedMovie& aMovie, TInt aIndex); - - virtual void NotifyVideoClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, - TInt aNewIndex); - - virtual void NotifyVideoClipTimingsChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyVideoClipColorEffectChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyVideoClipAudioSettingsChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyStartTransitionEffectChanged(CVedMovie& aMovie); - - virtual void NotifyMiddleTransitionEffectChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyEndTransitionEffectChanged(CVedMovie& aMovie); - - virtual void NotifyAudioClipAdded(CVedMovie& aMovie, TInt aIndex); - - virtual void NotifyAudioClipAddingFailed(CVedMovie& aMovie, TInt aError); - - virtual void NotifyAudioClipRemoved(CVedMovie& aMovie, TInt aIndex); - - virtual void NotifyAudioClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, - TInt aNewIndex); - - virtual void NotifyAudioClipTimingsChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyMovieQualityChanged(CVedMovie& aMovie); - - virtual void NotifyMovieReseted(CVedMovie& aMovie); - - virtual void NotifyMovieOutputParametersChanged(CVedMovie& aMovie); - - virtual void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - virtual void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - virtual void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - virtual void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - private: // New functions - TInt TimeIncrement(TInt aKeyCount) const; - - private: // Constructors - - CVeiTrimForMmsContainer( CVedMovie& aMovie, CVeiTrimForMmsView& aView); - - void ConstructL( const TRect& aRect ); - - private: // Enumeration - - enum TTrimForMmsControls - { - ECutFrame, - EVideoDisplayStart, - EVideoDisplayEnd, - EVideoPreview, - ENumberOfControls // This is always the last one! - }; - - public: - enum TPreviewState - { - EIdle = 0, - ELoading, - EPreview, - EPlaying, - EStop, - EStopAndExit, - EOpeningFile, - EPause - }; - - private: // Data - - /** - * Whether or not the last key pressed was left or right navi-key. - */ - TBool iLastKeyLeftOrRight; - - /** - * - */ - TInt iVideoDisplayStartIndex; - - /** - * - */ - TInt iVideoDisplayEndIndex; - - /** - * - */ - TRect iVideoDisplayEndRect; - - /** - * Text layout for main pane's end text. - */ - TAknLayoutText iLayoutTextEnd; - - /** - * Text layout for main pane's start text. - */ - TAknLayoutText iLayoutTextStart; - - /** - * Layout for start thumbnail. - */ - TAknLayoutRect iLayoutRectStart; - - /** - * Layout for end thumbnail. - */ - TAknLayoutRect iLayoutRectEnd; - - /** - * Layout for trim timeline icon. - */ - TAknLayoutRect iLayoutRectIcon; - - /** - * Layout for cut frame. - */ - TAknLayoutRect iLayoutRectCutFrame; - - /** - * Text shown above the end thumbnail. - */ - HBufC* iEndText; - - /** - * Text shown above the start thumbnail. - */ - HBufC* iStartText; - - /** - * - */ - CVeiCutterBar* iCutterBar; - /** - * - */ - CVedMovie& iMovie; - - /** - * - */ - CVeiVideoDisplay* iVideoDisplayStart; - - /** - * - */ - CVeiVideoDisplay* iVideoDisplayEnd; - - CVeiVideoDisplay* iVideoDisplay; - - TPreviewState iPreviewState; - - TRect iPreviewRect; - - CVeiFrameTaker* iFrameTaker; - - /* - * Updated by NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ) - */ - TInt iClipIndex; - - CVeiTrimForMmsView& iView; - - - TRect iStartTextBox; - TRect iEndTextBox; - TRect iVideoDisplayStartRect; - TRect iTimelineRect; - TRect iCutIconRect; - TRect iAdjustRect; - - TPoint iCutIconPoint; - TSize iCutIconSize; - - TTimeIntervalMicroSeconds iSeekPos; - TTimeIntervalMicroSeconds iSeekEndPos; - TTimeIntervalMicroSeconds iDuration; - TInt iKeyRepeatCount; - /** Background context. Skin stuff. */ - CAknsBasicBackgroundControlContext* iBgContext; - - CVeiDisplayLighter* iScreenLight; - TInt iMaxMmsSize; - TBool iBlack; - - - TBool iSeekEvent; - /** - * Progress dialog. - */ - CAknProgressDialog* iProgressNote; - - /** Progress info for the progress note. */ - CEikProgressInfo* iProgressInfo; - TBool iKeyEnable; - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/inc/VeiTrimForMmsView.h --- a/videditor/TrimForMms/inc/VeiTrimForMmsView.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,341 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef VEITRIMFORMMSVIEW_H -#define VEITRIMFORMMSVIEW_H - -// INCLUDES -// System includes -#include // CAknView -#include -#include // CVedmovie -// User includes -#include "VeiSettings.h" - -// FORWARD DECLARATIONS -class CAknNavigationDecorator; -class CAknProgressDialog; -class CVeiErrorUI; -class CSendUi; -class CVeiTrimForMmsContainer; -class CVedMovie; -class CMessageData; -class CEikProgressInfo; -class CVeiTempMaker; - - - -// CLASS DECLARATION - -/** - * - */ -class CVeiTrimForMmsView: public CAknView, - public MVedMovieObserver, - public MVedMovieProcessingObserver - - { - public: // Constructors and destructor - - static CVeiTrimForMmsView* NewL( CSendUi& aSendAppUi ); - - static CVeiTrimForMmsView* NewLC( CSendUi& aSendAppUi ); - - virtual ~CVeiTrimForMmsView(); - - enum TPreviewState - { - EIdle = 0, - ELoading, - EPreview, - EPlaying, - EStop, - EStopAndExit, - EOpeningFile, - EPause - }; - - public: - void UpdateNaviPaneL( const TInt& aSizeInBytes, - const TTimeIntervalMicroSeconds& aTime ); - - void UpdateNaviPaneSize(); - - enum TTrimState - { - ESeek = 0, - EFullPreview - }; - - void SetTrimStateL( TTrimState aState ); - - /** - * From MProgressDialogCallback, callback method gets - * called when a dialog is dismissed. - * - * @param aButtonId Button id. - */ - virtual void DialogDismissedL( TInt aButtonId ); - void ProcessNeeded( TBool aProcessNeed ); - - /** - * Shows global error note for given error. - * - * @param aError No description. - */ - void ShowGlobalErrorNoteL( TInt aError = 0 ) const; - - /** - * Handles a change to the control's resources. - */ - void HandleResourceChange( TInt aType ); - - private: // From CAknView - - TUid Id() const; - - void HandleCommandL(TInt aCommand); - - void DoActivateL( - const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - void DoDeactivate(); - - void HandleStatusPaneSizeChange(); - - void ReadSettingsL( TVeiSettings& aSettings ) const; - - protected: // From MVedMovieObserver - - virtual void NotifyVideoClipAdded(CVedMovie& aMovie, TInt aIndex); - - virtual void NotifyVideoClipAddingFailed(CVedMovie& aMovie, TInt aError); - - virtual void NotifyVideoClipRemoved(CVedMovie& aMovie, TInt aIndex); - - virtual void NotifyVideoClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, - TInt aNewIndex); - - virtual void NotifyVideoClipTimingsChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyVideoClipColorEffectChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyVideoClipAudioSettingsChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyStartTransitionEffectChanged(CVedMovie& aMovie); - - virtual void NotifyMiddleTransitionEffectChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyEndTransitionEffectChanged(CVedMovie& aMovie); - - virtual void NotifyAudioClipAdded(CVedMovie& aMovie, TInt aIndex); - - virtual void NotifyAudioClipAddingFailed(CVedMovie& aMovie, TInt aError); - - virtual void NotifyAudioClipRemoved(CVedMovie& aMovie, TInt aIndex); - - virtual void NotifyAudioClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, - TInt aNewIndex); - - virtual void NotifyAudioClipTimingsChanged(CVedMovie& aMovie, - TInt aIndex); - - virtual void NotifyMovieQualityChanged(CVedMovie& aMovie); - - virtual void NotifyMovieReseted(CVedMovie& aMovie); - - virtual void NotifyMovieOutputParametersChanged(CVedMovie& aMovie); - - virtual void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - virtual void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - virtual void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - virtual void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - protected: // From MVedMovieProcessingObserver - - /** - * Called to notify that a new movie processing operation has been started. - * - * @param aMovie movie - */ - void NotifyMovieProcessingStartedL( CVedMovie& aMovie ); - - /** - * Called to inform about the current progress of the movie processing operation. - * - * @param aMovie movie - * @param aPercentage percentage of the operation completed, must be - * in range 0..100 - */ - void NotifyMovieProcessingProgressed( CVedMovie& aMovie, TInt aPercentage ); - - /** - * Called to notify that the movie processing operation has been completed. - * - * @param aMovie movie - * @param aError error code why the operation was completed. - * KErrNone if the operation was completed - * successfully. - */ - void NotifyMovieProcessingCompleted( CVedMovie& aMovie, TInt aError ); - - private: // New functions - - void CmdSoftkeyCancelL(); - - /** - * - */ - void CmdSoftkeyOkL(); - - - /** - * Send via multimedia command handling. - */ - void CmdSendViaMultimediaL(); - - void CmdSoftkeyBackL(); - - void PushKeySoundL( const TInt aResourceId ) const; - - void PopKeySound() const; - - /** - * Sets the text for title pane. - */ - void SetTitlePaneTextL() const; - - void CreateNaviPaneL(); - - void SetNaviPaneDurationLabelL( const TTimeIntervalMicroSeconds& aTime ); - - void SetNaviPaneSizeLabelL( const TInt& aSizeInBytes ); - - /** - * Start full screen preview. - */ - void PlayPreviewL(); - - private: // Constructors - - CVeiTrimForMmsView( CSendUi& aSendAppUi ); - - void ConstructL(); - - private: // Data - - /** - * Cut in time in microseconds (clip timebase) for trimmed video. - */ - TTimeIntervalMicroSeconds iCutInTime; - - /** - * Cut out time in microseconds (clip timebase) for trimmed video. - */ - TTimeIntervalMicroSeconds iCutOutTime; - - /** - * Progress note for saving the trimmed video - */ - CAknProgressDialog* iProgressNote; - - /** - * Progress info for the progress dialog. - */ - CEikProgressInfo* iProgressInfo; - - /** - * Container - */ - CVeiTrimForMmsContainer* iContainer; - - /** - * Navigation pane decorator - */ - CAknNavigationDecorator* iNaviDecorator; - - /** - * - */ - CSendUi& iSendAppUi; - - /** - * - */ - CVedMovie* iVedMovie; - - /** - * Previous view which activated this view. - */ - TVwsViewId iPreviousViewId; - - /** - * Utility class to display error notes by applications. - */ - CVeiErrorUI* iErrorUi; - - /** - * No description. - */ - CVeiTempMaker* iTempMaker; - - /** - * Temporary file name for storing preview/send clip. - */ - HBufC* iTempFile; - - - TTrimState iTrimState; - - TVeiSettings iMovieSaveSettings; - - /* - * Indecates if process needed. - */ - TBool iProcessNeeded; - - - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/src/TrimForMms.cpp --- a/videditor/TrimForMms/src/TrimForMms.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* ==================================================================== - * File: TrimForMms.cpp - * Created: 04/18/06 - * Author: - * - * ==================================================================== */ - -#include "TrimForMmsApplication.h" -#include - -// Create an application, and return a pointer to it -CApaApplication* NewApplication() - { - return new CTrimForMmsApplication; - } - - -TInt E32Main() - { - return EikStart::RunApplication(NewApplication); - - } - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/src/TrimForMmsApplication.cpp --- a/videditor/TrimForMms/src/TrimForMmsApplication.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* ==================================================================== - * File: TrimForMmsApplication.cpp - * Created: 04/18/06 - * Author: - * - * ==================================================================== */ - -#include "TrimForMmsDocument.h" -#include "TrimForMmsApplication.h" -#include "VideoEditorCommon.h" // Application UID - -CApaDocument* CTrimForMmsApplication::CreateDocumentL() - { - // Create an TrimForMms document, and return a pointer to it - CApaDocument* document = CTrimForMmsDocument::NewL(*this); - return document; - } - -TUid CTrimForMmsApplication::AppDllUid() const - { - // Return the UID for the TrimForMms application - return KUidTrimForMms; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/src/TrimForMmsAppui.cpp --- a/videditor/TrimForMms/src/TrimForMmsAppui.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* ==================================================================== - * File: TrimForMmsAppUi.cpp - * Created: 04/18/06 - * Author: - * - * ==================================================================== */ - -#include -#include -#include - -#include "TrimForMms.pan" -#include "TrimForMmsAppUi.h" -#include "VeiSettings.h" -#include "VeiTrimForMmsView.h" -#include "TrimForMms.hrh" -#include "VideoEditorCommon.h" -#include "VideoEditorDebugUtils.h" - -#include - -// ConstructL is called by the application framework -void CTrimForMmsAppUi::ConstructL() - { - - BaseConstructL(EAppOrientationAutomatic|EAknEnableSkin); - - iSendUi = CSendUi::NewL(); - - iTrimForMmsView = CVeiTrimForMmsView::NewL(*iSendUi); - - AddViewL (iTrimForMmsView); // transfers ownership - - } - -CTrimForMmsAppUi::CTrimForMmsAppUi() - { - // no implementation required - } - -CTrimForMmsAppUi::~CTrimForMmsAppUi() - { - if (iTrimForMmsView) - { - delete iTrimForMmsView; - iTrimForMmsView = NULL; - } - - delete iSendUi; - } - -// handle any menu commands -void CTrimForMmsAppUi::HandleCommandL(TInt aCommand) - { - switch(aCommand) - { - case EEikCmdExit: - case EAknSoftkeyExit: - Exit(); - break; - - default: - Panic(ETrimForMmsBasicUi); - break; - } - } - -//============================================================================= -void CTrimForMmsAppUi::ReadSettingsL( TVeiSettings& aSettings ) - { - LOG(KVideoEditorLogFile, "CTrimForMmsAppUi::ReadSettingsL: in"); - CDictionaryStore* store = Application()->OpenIniFileLC( iCoeEnv->FsSession() ); - - TBool storePresent = store->IsPresentL( KUidVideoEditor ); // UID has an associated stream? - - if( storePresent ) - { - RDictionaryReadStream readStream; - readStream.OpenLC( *store, KUidVideoEditor ); - - readStream >> aSettings; // Internalize data to TVeiSettings. - - CleanupStack::PopAndDestroy( readStream ); - } - else - { - /* Read the default filenames from resources */ - HBufC* videoName = iEikonEnv->AllocReadResourceLC( R_VEI_SETTINGS_VIEW_SETTINGS_ITEM_VALUE ); - - const CFont* myFont = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - - aSettings.DefaultVideoName() = AknTextUtils::ChooseScalableText(videoName->Des(), *myFont, 400 ); - CleanupStack::PopAndDestroy( videoName ); - - HBufC* snapshotName = iEikonEnv->AllocReadResourceLC( R_VEI_SETTINGS_VIEW_SETTINGS_ITEM2_VALUE ); - aSettings.DefaultSnapshotName() = AknTextUtils::ChooseScalableText(snapshotName->Des(), *myFont, 400 ); - CleanupStack::PopAndDestroy( snapshotName ); - - /* Memory card is used as a default target */ - aSettings.MemoryInUse() = CAknMemorySelectionDialog::EMemoryCard; - - /* Set save quality to "Auto" by default. */ - aSettings.SaveQuality() = TVeiSettings::EAuto; - - RDictionaryWriteStream writeStream; - writeStream.AssignLC( *store, KUidVideoEditor ); - - writeStream << aSettings; - - writeStream.CommitL(); - - store->CommitL(); - - CleanupStack::PopAndDestroy( writeStream ); - } - CleanupStack::PopAndDestroy( store ); - LOG(KVideoEditorLogFile, "CTrimForMmsAppUi::ReadSettingsL: out"); - } - -//============================================================================= -/*void CTrimForMmsAppUi::HandleScreenDeviceChangedL() - { - LOG(KVideoEditorLogFile, "CVeiAppUi::HandleScreenDeviceChangedL: In"); - CAknAppUi::HandleScreenDeviceChangedL(); - if ( iTrimForMmsView ) - { - iTrimForMmsView->HandleScreenDeviceChangedL(); - } - LOG(KVideoEditorLogFile, "CVeiAppUi::HandleScreenDeviceChangedL: Out"); - }*/ - -//============================================================================= -void CTrimForMmsAppUi::HandleResourceChangeL(TInt aType) - { - LOG(KVideoEditorLogFile, "CTrimForMmsAppUi::HandleResourceChangeL: In"); - CAknAppUi::HandleResourceChangeL(aType); - if ( iTrimForMmsView ) - { - iTrimForMmsView->HandleResourceChange(aType); - } - LOG(KVideoEditorLogFile, "CTrimForMmsAppUi::HandleResourceChangeL: Out"); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/src/TrimForMmsDocument.cpp --- a/videditor/TrimForMms/src/TrimForMmsDocument.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* ==================================================================== - * File: TrimForMmsDocument.cpp - * Created: 04/18/06 - * Author: - * - * ==================================================================== */ - -#include "TrimForMmsAppUi.h" -#include "TrimForMmsDocument.h" -#include - - -// Standard Symbian OS construction sequence -CTrimForMmsDocument* CTrimForMmsDocument::NewL(CEikApplication& aApp) - { - CTrimForMmsDocument* self = NewLC(aApp); - CleanupStack::Pop(self); - return self; - } - -CTrimForMmsDocument* CTrimForMmsDocument::NewLC(CEikApplication& aApp) - { - CTrimForMmsDocument* self = new (ELeave) CTrimForMmsDocument(aApp); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -void CTrimForMmsDocument::ConstructL() - { - // no implementation required - } - -CTrimForMmsDocument::CTrimForMmsDocument(CEikApplication& aApp) : CAknDocument(aApp) - { - // no implementation required - } - -CTrimForMmsDocument::~CTrimForMmsDocument() - { - // no implementation required - } - -CEikAppUi* CTrimForMmsDocument::CreateAppUiL() - { - // Create the application user interface, and return a pointer to it, - // the framework takes ownership of this object - CEikAppUi* appUi = new (ELeave) CTrimForMmsAppUi; - return appUi; - } - -void CTrimForMmsDocument::OpenFileL(CFileStore*& /*aFileStore*/, RFile& aFile) - { - TFileName file; - User::LeaveIfError(aFile.FullName(file)); - - TBuf8 conv8Filename; - CnvUtfConverter::ConvertFromUnicodeToUtf8( conv8Filename,file ); - - STATIC_CAST( CTrimForMmsAppUi*, CCoeEnv::Static()->AppUi() ) - ->ActivateLocalViewL(TUid::Uid(0), TUid::Uid(0), conv8Filename); - - aFile.Close(); - - } diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/src/VeiTrimForMmsContainer.cpp --- a/videditor/TrimForMms/src/VeiTrimForMmsContainer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1018 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -// INCLUDE FILES -// System includes -#include // AknIconUtils -#include // iEikonEnv -#include // Video Editor resources -#include // StringLoader - -#include -#include - -#include -#include -#include - -#include -#include -#include - - -// User includes -#include "VeiTrimForMmsContainer.h" -#include "VeiVideoDisplay.h" -#include "VideoEditorCommon.h" -//#include "VideoEditorHelp.hlp.hrh" // Topic contexts (literals) -#include "veiframetaker.h" -#include "VeiTrimForMmsView.h" -#include "VeiCutterBar.h" -#include "VeiVideoEditorSettings.h" -#include "VideoEditorUtils.h" -#include "VideoEditorDebugUtils.h" - -void CVeiTrimForMmsContainer::DialogDismissedL( TInt /*aButtonId*/ ) - { - iProgressInfo = NULL; - } - - -CVeiTrimForMmsContainer* CVeiTrimForMmsContainer::NewL( const TRect& aRect, - CVedMovie& aMovie, CVeiTrimForMmsView& aView ) - { - CVeiTrimForMmsContainer* self = CVeiTrimForMmsContainer::NewLC( aRect, - aMovie, - aView ); - CleanupStack::Pop( self ); - - return self; - } - -CVeiTrimForMmsContainer* CVeiTrimForMmsContainer::NewLC( const TRect& aRect, - CVedMovie& aMovie, - CVeiTrimForMmsView& aView) - { - CVeiTrimForMmsContainer* self = - new(ELeave)CVeiTrimForMmsContainer( aMovie, aView ); - - CleanupStack::PushL( self ); - self->ConstructL( aRect ); - - return self; - } - - -CVeiTrimForMmsContainer::CVeiTrimForMmsContainer( CVedMovie& aMovie, CVeiTrimForMmsView& aView ): - iLastKeyLeftOrRight(EFalse), - iMovie(aMovie), - iView( aView ) - - { - } - - -void CVeiTrimForMmsContainer::ConstructL( const TRect& aRect ) - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::ConstructL: in"); - - // Make this compound control window-owning. - CreateWindowL(); - - iMovie.RegisterMovieObserverL( this ); - - // Read the texts shown above the thumbnails from resources - iStartText = StringLoader::LoadL( R_VED_THUMBNAIL_START_TEXT, iEikonEnv ); - iEndText = StringLoader::LoadL( R_VED_THUMBNAIL_END_TEXT, iEikonEnv ); - - iSeekPos = TTimeIntervalMicroSeconds( 0 ); - - iVideoDisplayStart = CVeiVideoDisplay::NewL( iVideoDisplayStartRect, this, *this ); - - iVideoDisplayEnd = CVeiVideoDisplay::NewL( iVideoDisplayEndRect, this, *this ); - - iCutterBar = CVeiCutterBar::NewL( this ); - iCutterBar->SetPlayHeadVisible( EFalse ); - iVideoDisplay = CVeiVideoDisplay::NewL( aRect, this, *this ); - - iFrameTaker = CVeiFrameTaker::NewL( *this ); - - /* Timer to keep back light on when user is not giving key events */ - iScreenLight = CVeiDisplayLighter::NewL(); - CVeiVideoEditorSettings::GetMaxMmsSizeL( iMaxMmsSize ); - /* SharedData returns maxmmssize in kbytes. Change it to bytes(1000) and - add some margin to final value.*/ - iMaxMmsSize = STATIC_CAST( TInt, iMaxMmsSize*0.98 ); - iBlack = EFalse; - - // Set this control extent. - SetRect( aRect ); - iBgContext = CAknsBasicBackgroundControlContext::NewL( KAknsIIDQsnBgAreaMain, Rect(), EFalse ); - - ActivateL(); - - iKeyEnable = EFalse; - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::ConstructL: out"); - } - - - -CVeiTrimForMmsContainer::~CVeiTrimForMmsContainer() - { - iMovie.UnregisterMovieObserver( this ); - - delete iEndText; - delete iStartText; - delete iScreenLight; - - delete iCutterBar; - - delete iVideoDisplayStart; - delete iVideoDisplayEnd; - if( iVideoDisplay ) - { - delete iVideoDisplay; - iVideoDisplay = NULL; - } - - if (iFrameTaker) - { - delete iFrameTaker; - iFrameTaker = NULL; - } - - if ( iProgressNote ) - { - delete iProgressNote; - iProgressNote = NULL; - } - iProgressInfo = NULL; - - delete iBgContext; - } - -void CVeiTrimForMmsContainer::SetMaxMmsSize( TInt aMaxSizeInBytes ) - { - iMaxMmsSize = aMaxSizeInBytes; - } - -const TTimeIntervalMicroSeconds& CVeiTrimForMmsContainer::CutInTime() const - { - return iSeekPos; - } - - -const TTimeIntervalMicroSeconds& CVeiTrimForMmsContainer::CutOutTime() const - { - return iSeekEndPos; - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsContainer::ComponentControl(...) const -// -// Gets the specified component of a compound control. -// ---------------------------------------------------------------------------- -// -CCoeControl* CVeiTrimForMmsContainer::ComponentControl( TInt aIndex ) const - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::ComponentControl()"); - - switch( aIndex ) - { - // - // iCutterDisplay - // - case ECutFrame: - { - return iCutterBar; - } - // - // iVideoDisplayStart - // - case EVideoDisplayStart: - { - return iVideoDisplayStart; - } - // - // iVideoDisplayEnd - // - case EVideoDisplayEnd: - { - return iVideoDisplayEnd; - } - // - // iVideoDisplay - // - case EVideoPreview: - { - return iVideoDisplay; - - } - - // - // Default - // - default: - { - return NULL; - } - } - - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsContainer::CountComponentControls() const -// -// Gets the number of controls contained in a compound control. -// ---------------------------------------------------------------------------- -// -TInt CVeiTrimForMmsContainer::CountComponentControls() const - { - return ENumberOfControls; - } - - -void CVeiTrimForMmsContainer::Draw( const TRect& aRect ) const - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::Draw(): In"); - - CWindowGc& gc = SystemGc(); - gc.Clear( aRect ); - - // Black backbround for the preview - if ( iBlack ) - { - iVideoDisplay->MakeVisible( EFalse ); - gc.SetPenStyle( CWindowGc::ENullPen ); - gc.SetBrushColor( KRgbBlack ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.DrawRect( aRect ); - gc.SetPenStyle( CWindowGc::ESolidPen ); - gc.DrawRoundRect(aRect, TSize(4,4)); - return; - } - else - { - // Draw skin background - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - AknsDrawUtils::Background( skin, cc, this, gc, aRect ); - - const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - TBuf<95> startVisualText; - TPoint startTextPoint; - TBuf<95> endVisualText; - TPoint endTextPoint; - - startTextPoint.iY = iStartTextBox.iTl.iY + font->HeightInPixels(); - endTextPoint.iY = iEndTextBox.iTl.iY + font->HeightInPixels(); - - gc.UseFont( font ); - - TBidiText::TDirectionality textDirectionality; - - textDirectionality = AknTextUtils::CurrentScriptDirectionality(); - - TInt maxWidthNonClippingStart = iStartTextBox.Width(); - - AknBidiTextUtils::ConvertToVisualAndClip( *iStartText, startVisualText, *font, maxWidthNonClippingStart, - maxWidthNonClippingStart ); - /** check text alignment */ - if ( textDirectionality == TBidiText::ELeftToRight ) - { - startTextPoint.iX = iVideoDisplayStartRect.iTl.iX; - } - else - { - startTextPoint.iX = iVideoDisplayStartRect.iBr.iX - font->TextWidthInPixels( startVisualText ); - } - - gc.DrawText( startVisualText, startTextPoint ); - - - TInt maxWidthNonClippingEnd = iEndTextBox.Width(); - - AknBidiTextUtils::ConvertToVisualAndClip( *iEndText, endVisualText, *font, maxWidthNonClippingEnd, - maxWidthNonClippingEnd ); - /** check text alignment */ - if ( textDirectionality == TBidiText::ELeftToRight ) - { - endTextPoint.iX = iVideoDisplayEndRect.iTl.iX; - } - else - { - endTextPoint.iX = iVideoDisplayEndRect.iBr.iX - font->TextWidthInPixels( endVisualText ); - } - - gc.DrawText( endVisualText, endTextPoint ); - - gc.DiscardFont(); - - // Draw Start/End displays - iVideoDisplayStart->SetRect( iVideoDisplayStartRect ); - iVideoDisplayEnd->SetRect( iVideoDisplayEndRect ); - - if( iPreviewState == EPlaying ) - { - iVideoDisplay->MakeVisible( ETrue ); - } - else - { - iVideoDisplay->MakeVisible( EFalse ); - } - - } - - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::Draw(): Out"); - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsContainer::GetHelpContext(...) const -// -// Gets the control's help context. Associates the control with a particular -// Help file and topic in a context sensitive application. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsContainer::GetHelpContext( TCoeHelpContext& /*aContext*/ ) const - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::GetHelpContext(): In"); - - // Set UID of the CS Help file (same as application UID). - //aContext.iMajor = KUidVideoEditor; - - // Set the context/topic. - //aContext.iContext = KVED_HLP_TRIM_FOR_MMS_VIEW; - - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::GetHelpContext(): Out"); - } - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsContainer::SizeChanged() -// -// The function is called whenever SetExtent(), SetSize(), SetRect(), -// SetCornerAndSize(), or SetExtentToWholeScreen() are called on the control. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsContainer::SizeChanged() - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::SizeChanged(): In"); - - TRect rect = Rect(); - if ( iBgContext ) - { - iBgContext->SetRect( rect ); - } - - if ( VideoEditorUtils::IsLandscapeScreenOrientation() ) //Landscape - { - // Start Text rect - TInt startTextTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.00962 ); - TInt startTextTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.01389 ); - TInt startTextBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.49512 ); - TInt startTextBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.09375 ); - - iStartTextBox = TRect(startTextTlX, startTextTlY, startTextBrX, - startTextBrY); - // End Text rect - TInt endTextTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.50481 ); - TInt endTextTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.01389 ); - TInt endTextBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.99039 ); - TInt endTextBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.09375 ); - - iEndTextBox = TRect(endTextTlX, endTextTlY, endTextBrX, - endTextBrY); - - // Start Video rect - TInt startVideoTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.00962 ); - TInt startVideoTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.10764 ); - TInt startVideoBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.49512 ); - TInt startVideoBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.68056 ); - - iVideoDisplayStartRect = TRect(startVideoTlX, startVideoTlY, startVideoBrX, - startVideoBrY); - // End Video rect - TInt endVideoTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.50481 ); - TInt endVideoTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.10764 ); - TInt endVideoBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.99039 ); - TInt endVideoBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.68056 ); - - iVideoDisplayEndRect = TRect(endVideoTlX, endVideoTlY, endVideoBrX, - endVideoBrY); - - // Timeline rect - TInt timeLineTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.0114 ); - TInt timeLineTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.80208 ); - - TSize cutBarSize = TSize(STATIC_CAST( TInt, rect.iBr.iX*0.9773 ), - STATIC_CAST( TInt, rect.iBr.iY*0.0973 ) ); - - iTimelineRect = TRect( TPoint(timeLineTlX, timeLineTlY), cutBarSize ); - } - else // Portrait - { - // Start Text rect - TInt startTextTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.01136 ); - TInt startTextTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.01389 ); - TInt startTextBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.49432 ); - TInt startTextBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.10417 ); - - iStartTextBox = TRect(startTextTlX, startTextTlY, startTextBrX, - startTextBrY); - - // End Text rect - TInt endTextTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.50568 ); - TInt endTextTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.01389 ); - TInt endTextBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.98864 ); - TInt endTextBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.10417 ); - - iEndTextBox = TRect(endTextTlX, endTextTlY, endTextBrX, - endTextBrY); - - // Start Video rect - TInt startVideoTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.01136 ); - TInt startVideoTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.11806 ); - TInt startVideoBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.49432 ); - TInt startVideoBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.60069 ); - - iVideoDisplayStartRect = TRect(startVideoTlX, startVideoTlY, startVideoBrX, - startVideoBrY); - - // End Video rect - TInt endVideoTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.50568 ); - TInt endVideoTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.11806 ); - TInt endVideoBrX = STATIC_CAST( TInt, rect.iBr.iX * 0.98864 ); - TInt endVideoBrY = STATIC_CAST( TInt, rect.iBr.iY * 0.60069 ); - - iVideoDisplayEndRect = TRect(endVideoTlX, endVideoTlY, endVideoBrX, - endVideoBrY); - - // Timeline rect - TInt timeLineTlX = STATIC_CAST( TInt, rect.iBr.iX * 0.0114 ); - TInt timeLineTlY = STATIC_CAST( TInt, rect.iBr.iY * 0.767361 ); - - - TSize cutBarSize = TSize(STATIC_CAST( TInt, rect.iBr.iX*0.9773 ), - STATIC_CAST( TInt, rect.iBr.iY*0.0973 ) ); - - iTimelineRect = TRect(TPoint(timeLineTlX, timeLineTlY), cutBarSize); - } - - iCutterBar->SetRect( iTimelineRect ); - - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::SizeChanged(): Out"); - } - - -TKeyResponse CVeiTrimForMmsContainer::OfferKeyEventL( - const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - if( iKeyEnable ) - { - switch( aType ) - { - // - // Key down event - // - case EEventKeyDown: - { - if( iPreviewState == EPlaying ) - { -// iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); -// Stop( ETrue ); - return EKeyWasConsumed; - } - else - { - iKeyRepeatCount = 0; - - iMovie.VideoClipSetCutInTime( 0,TTimeIntervalMicroSeconds(0) ); - iMovie.VideoClipSetCutOutTime( 0, iDuration ); - return EKeyWasConsumed; - } - } - // - // The key event - // - case EEventKey: - { - if( iPreviewState == EPlaying ) - { - return EKeyWasConsumed; - } - switch( aKeyEvent.iCode ) - { - // - // Navi-key right - // - case EKeyRightArrow: - { - if( iSeekEndPos != iDuration ) - { - iSeekEvent = ETrue; - iLastKeyLeftOrRight = ETrue; - if(iKeyRepeatCount < 18) - { - iKeyRepeatCount++; - } - - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - TInt64 newPos = iSeekPos.Int64() + adjustment; - - TTimeIntervalMicroSeconds endTime(0); - iMovie.GetDurationEstimateL( iMaxMmsSize, newPos, endTime ); - - if ( endTime.Int64() >= iDuration.Int64() - adjustment ) - { - iKeyRepeatCount-=3; - adjustment = TimeIncrement( iKeyRepeatCount ); - endTime = iDuration; - newPos+=adjustment; - } - - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - - iSeekEndPos = endTime; - iCutterBar->SetInPoint(iSeekPos); - iCutterBar->SetOutPoint(endTime); - } - - return EKeyWasConsumed; - } - // - // Navi-key left - // - case EKeyLeftArrow: - { - if( iSeekPos.Int64() > 0 ) - { - iSeekEvent = ETrue; - iLastKeyLeftOrRight = ETrue; - // Process the command only when repeat count is zero. - iKeyRepeatCount++; - - - TInt adjustment = TimeIncrement( iKeyRepeatCount ); - - TInt64 newPos = iSeekPos.Int64() - adjustment; - if ( newPos < 0 ) - { - newPos = 0; - } - iSeekPos = TTimeIntervalMicroSeconds( newPos ); - - TTimeIntervalMicroSeconds endTime(0); - iMovie.GetDurationEstimateL( iMaxMmsSize, newPos, endTime ); - - iSeekEndPos = endTime; - - iCutterBar->SetInPoint(iSeekPos); - iCutterBar->SetOutPoint(endTime); - } - return EKeyWasConsumed; - } - // - // Default - // - default: - { - return EKeyWasNotConsumed; - } - } - } - // - // Key up event - // - - case EEventKeyUp: - { - if( iPreviewState == EPlaying ) - { - iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); - - Stop( ETrue ); - return EKeyWasConsumed; - } - else - { - if ( iLastKeyLeftOrRight ) - { - iView.ProcessNeeded( ETrue ); - iMovie.VideoClipSetCutInTime( 0, iSeekPos ); - iMovie.VideoClipSetCutOutTime( 0, iSeekEndPos ); - iView.UpdateNaviPaneL( iMovie.GetSizeEstimateL()/1024,iMovie.Duration() ); - iLastKeyLeftOrRight = EFalse; - if( iSeekEvent ) - { - StartFrameTakerL( iClipIndex ); - iSeekEvent = EFalse; - } - return EKeyWasConsumed; - } - } - break; - } - // - // Default - // - default: - return EKeyWasNotConsumed; - } - } //iKeyEnable - return EKeyWasNotConsumed; - } - - - -TInt CVeiTrimForMmsContainer::TimeIncrement(TInt aKeyCount) const - { - if ( aKeyCount < 3 ) - { - return 100000; - } - else if ( aKeyCount < 6 ) // 4 - { - return 300000; - } - else if ( aKeyCount < 9 ) // 5 - { - return 500000; - } - else if ( aKeyCount < 12 ) // 10 - { - return 1000000; - } - else if ( aKeyCount < 15 ) // 13 - { - return 2000000; - } - else if ( aKeyCount < 18 ) // 15 - { - return 3000000; - } - else - { - return 5000000; - } - } - - -void CVeiTrimForMmsContainer::NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo ) - { - switch (aEvent) - { - case MVeiVideoDisplayObserver::EOpenComplete: - { - iVideoDisplay->SetRect( iPreviewRect ); - if ( !VideoEditorUtils::IsLandscapeScreenOrientation() ) //Portrait - { - iVideoDisplay->SetRotationL( EVideoRotationClockwise90 ); - } - iPreviewState = ELoading; - - iVideoDisplay->SetPositionL( CutInTime() ); - iVideoDisplay->PlayL( iMovie.VideoClipInfo( iClipIndex )->FileName(), CutInTime(), CutOutTime() ); - - break; - } - - case MVeiVideoDisplayObserver::ELoadingComplete: - { - - iVideoDisplay->MakeVisible( ETrue ); - iPreviewState = EPlaying; - break; - } - - case MVeiVideoDisplayObserver::EStop: - { - iPreviewState = EIdle; - iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); - - iVideoDisplay->MakeVisible(EFalse); - - DrawDeferred(); - break; - } - case MVeiVideoDisplayObserver::EPlayComplete: - { - iView.SetTrimStateL( CVeiTrimForMmsView::ESeek ); - Stop( ETrue ); - if (KErrNoMemory == aInfo) - { - iView.ShowGlobalErrorNoteL( KErrNoMemory ); - } - break; - } - default: - { - break; - } - } - } - - -/** - * Called to notify that a new video clip has been successfully - * added to the movie. Note that the indices and the start and end times - * of the video clips after the new clip have also changed as a result. - * Note that the transitions may also have changed. - * - * @param aMovie movie - * @param aIndex index of video clip in movie - */ -void CVeiTrimForMmsContainer::NotifyVideoClipAdded( CVedMovie& aMovie, TInt aIndex ) - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded: in"); - - iSeekPos = TTimeIntervalMicroSeconds(0); - - aMovie.GetDurationEstimateL( iMaxMmsSize, iSeekPos, iSeekEndPos ); - LOGFMT3(KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded: 1, iMaxMmsSize:%d, iSeekPos:%Ld, iSeekEndPos:%Ld", - iMaxMmsSize, iSeekPos.Int64(), iSeekEndPos.Int64()); - - iCutterBar->SetInPoint( iSeekPos ); - iCutterBar->SetOutPoint( iSeekEndPos ); - iCutterBar->SetTotalDuration( aMovie.Duration() ); - iDuration = aMovie.Duration(); - - iClipIndex = aIndex; - - aMovie.VideoClipSetCutInTime( 0, iSeekPos ); - aMovie.VideoClipSetCutOutTime( 0, iSeekEndPos ); - - TInt movieSizeLimit = static_cast(iMaxMmsSize*0.9); - aMovie.SetMovieSizeLimit( movieSizeLimit ); - - LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded(): 2, movie size set to:%d", movieSizeLimit); - - StartFrameTakerL( iClipIndex ); - - iSeekEvent = EFalse; - - - iView.UpdateNaviPaneL( iMovie.GetSizeEstimateL()/1024,iMovie.Duration() ); - - iKeyEnable = ETrue; - - LOG(KVideoEditorLogFile, "CVeiTrimForMmsContainer::NotifyVideoClipAdded: out"); - } - - -void CVeiTrimForMmsContainer::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, - TInt /*aError*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/, - TInt /*aOldIndex*/, - TInt /*aNewIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyVideoClipTimingsChanged( - CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyVideoClipColorEffectChanged( - CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyVideoClipAudioSettingsChanged( - CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyVideoClipGeneratorSettingsChanged( - CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyVideoClipDescriptiveNameChanged( - CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyStartTransitionEffectChanged( - CVedMovie& /*aMovie*/ ) - { - } - - -void CVeiTrimForMmsContainer::NotifyMiddleTransitionEffectChanged( - CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyEndTransitionEffectChanged( - CVedMovie& /*aMovie*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyAudioClipAdded( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyAudioClipAddingFailed( - CVedMovie& /*aMovie*/, - TInt /*aError*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyAudioClipIndicesChanged( - CVedMovie& /*aMovie*/, - TInt /*aOldIndex*/, - TInt /*aNewIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyAudioClipTimingsChanged( - CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyMovieQualityChanged( CVedMovie& /*aMovie*/ ) - { - } - - -void CVeiTrimForMmsContainer::NotifyMovieReseted( CVedMovie& /*aMovie*/ ) - { - } - -void CVeiTrimForMmsContainer::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/) - { - } - -void CVeiTrimForMmsContainer::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiTrimForMmsContainer::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiTrimForMmsContainer::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiTrimForMmsContainer::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiTrimForMmsContainer::PlayL( const TDesC& aFilename, const TRect& aRect ) - { - iCutterBar->MakeVisible( EFalse ); - iVideoDisplayStart->MakeVisible( EFalse ); - iVideoDisplayEnd->MakeVisible( EFalse ); - iVideoDisplay->MakeVisible( EFalse ); - - iVideoDisplay->ShowBlackScreen(); - - iPreviewRect = aRect; - iBlack = ETrue; - iScreenLight->Start(); - - iPreviewState = EOpeningFile; - iVideoDisplay->OpenFileL( aFilename ); - } - -void CVeiTrimForMmsContainer::Stop( TBool aCloseStream ) - { - iCutterBar->MakeVisible( ETrue ); - iVideoDisplayStart->MakeVisible( ETrue ); - iVideoDisplayEnd->MakeVisible( ETrue ); - iBlack = EFalse; - iScreenLight->Stop(); - iVideoDisplay->Stop( aCloseStream ); - DrawNow(); - } - -void CVeiTrimForMmsContainer::PauseL() - { - iPreviewState = EPause; - iVideoDisplay->PauseL(); - iVideoDisplay->MakeVisible(EFalse); - DrawNow(); - } - -TInt CVeiTrimForMmsContainer::PreviewState() const - { - return iPreviewState; - } - -void CVeiTrimForMmsContainer::NotifyFramesCompleted( CFbsBitmap* aFirstFrame, - CFbsBitmap* aLastFrame, CFbsBitmap* /*aTimelineFrame*/, TInt aError ) - { - if( aError==KErrNone ) - { - iVideoDisplayStart->ShowPictureL( *aFirstFrame ); - iVideoDisplayEnd->ShowPictureL( *aLastFrame ); - } - - if( iProgressNote ) - { - iProgressInfo->SetAndDraw(100); - iProgressNote->ProcessFinishedL(); - } - } - -void CVeiTrimForMmsContainer::StartFrameTakerL( TInt aIndex ) - { - iProgressNote = - new (ELeave) CAknProgressDialog(REINTERPRET_CAST(CEikDialog**, &iProgressNote), ETrue); - iProgressNote->SetCallback(this); - iProgressNote->ExecuteDlgLD( R_VEI_PROGRESS_NOTE ); - - HBufC* stringholder; - stringholder = StringLoader::LoadL( R_VEI_PROGRESS_NOTE_PROCESSING, iEikonEnv ); - CleanupStack::PushL( stringholder ); - iProgressNote->SetTextL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - - iProgressInfo = iProgressNote->GetProgressInfoL(); - iProgressInfo->SetFinalValue(100); - iProgressInfo->SetAndDraw(50); - -// First frame is shown in main display so it is bigger.. Last frame is always -// on transition display and one frame for the video timeline. - TSize firstThumbResolution = iVideoDisplayStart->GetScreenSize(); - TSize lastThumbResolution = iVideoDisplayEnd->GetScreenSize(); - TSize timelineThumbResolution = TSize( 34, 28 ); - - TInt frameCount = iMovie.VideoClipInfo(aIndex)->VideoFrameCount(); - - TInt firstThumbNailIndex = iMovie.VideoClipInfo(aIndex)->GetVideoFrameIndexL( CutInTime() ); - TInt lastThumbNailIndex = iMovie.VideoClipInfo(aIndex)->GetVideoFrameIndexL( CutOutTime() ); - if ( lastThumbNailIndex >= frameCount ) - { - lastThumbNailIndex = frameCount-1; - } - - - iFrameTaker->GetFramesL( *iMovie.VideoClipInfo(aIndex), - firstThumbNailIndex, &firstThumbResolution, - lastThumbNailIndex, &lastThumbResolution, - firstThumbNailIndex, &timelineThumbResolution, - EPriorityLow ); - } - -TTypeUid::Ptr CVeiTrimForMmsContainer::MopSupplyObject( TTypeUid aId ) - { - if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext ) - { - return MAknsControlContext::SupplyMopObject( aId, iBgContext ); - } - return CCoeControl::MopSupplyObject( aId ); - } -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/TrimForMms/src/VeiTrimForMmsView.cpp --- a/videditor/TrimForMms/src/VeiTrimForMmsView.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,964 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDES -// System includes -#include -#include -#include // CAknNavigationControlContainer -#include // CAknNavigationDecorator -#include // CAknProgressDialog -#include // CAknKeySoundSystem -#include // BaflUtils -#include -#include // CEikProgressInfo -#include -#include // CnvUtfConverter -#include // CSendAppUi -#include -#include // StringLoader -#include -// User includes -#include "TrimForMms.hrh" -#include "TrimForMmsAppUi.h" -#include "VeiSettings.h" -#include "VeiTrimForMmsView.h" -#include "VeiTrimForMmsContainer.h" -#include "VeiEditVideoLabelNavi.h" -#include "VideoEditorCommon.h" -#include "VeiTempMaker.h" -#include "VideoEditorCommon.h" -#include "VideoEditorDebugUtils.h" -#include "VeiErrorUi.h" - -// CONSTANTS -const TInt KVedVideoClipIndex(0); -const TInt KProgressNoteMaxValue(100); -const TInt KVedTrimForMmsDefaultCba( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - - -CVeiTrimForMmsView* CVeiTrimForMmsView::NewL( CSendUi& aSendAppUi ) - { - CVeiTrimForMmsView* self = CVeiTrimForMmsView::NewLC( aSendAppUi ); - CleanupStack::Pop( self ); - - return self; - } - - -CVeiTrimForMmsView* CVeiTrimForMmsView::NewLC( CSendUi& aSendAppUi ) - { - CVeiTrimForMmsView* self = new (ELeave) CVeiTrimForMmsView( aSendAppUi ); - CleanupStack::PushL( self ); - self->ConstructL(); - - return self; - } - -// ----------------------------------------------------------------------------- -// CVeiTrimForMmsView::ConstructL -// Symbian 2nd phase constructor that can leave. -// ----------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::ConstructL() - { - BaseConstructL( R_VEI_TRIM_FOR_MMS_VIEW ); - - iErrorUi = CVeiErrorUI::NewL( *iCoeEnv ); - - iTempMaker = CVeiTempMaker::NewL(); - } - -// ----------------------------------------------------------------------------- -// CVeiTrimForMmsView::CVeiTrimForMmsView( CSendUi& aSendAppUi ) -// C++ default constructor. -// ----------------------------------------------------------------------------- -// -CVeiTrimForMmsView::CVeiTrimForMmsView( CSendUi& aSendAppUi ): - iSendAppUi( aSendAppUi ) - { - } - - -CVeiTrimForMmsView::~CVeiTrimForMmsView() - { - if( iContainer ) - { - AppUi()->RemoveFromStack( iContainer ); - delete iContainer; - } - if( iNaviDecorator ) - { - delete iNaviDecorator; - } - - if( iVedMovie ) - { - iVedMovie->UnregisterMovieObserver( this ); - delete iVedMovie; - } - - if ( iTempMaker ) - { - delete iTempMaker; - iTempMaker = NULL; - } - if( iTempFile ) - { - TInt err = CCoeEnv::Static()->FsSession().Delete( *iTempFile ); - if ( err ) - { - // what to do when error occurs in destructor??? - } - - delete iTempFile; - } - - delete iErrorUi; - - iProgressInfo = NULL; - } - - -TUid CVeiTrimForMmsView::Id() const - { - return TUid::Uid( EVeiTrimForMmsView ); - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::HandleCommandL( TInt aCommand ) -// -// -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::HandleCommandL( TInt aCommand ) - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::HandleCommandL: In"); - - TInt state; - state = iContainer->PreviewState(); - - switch ( aCommand ) - { - /** - * Options -> Send via multimedia - */ - case EVeiCmdSendViaMms: - { - CmdSendViaMultimediaL(); - break; - } - /** - * Options -> Preview - */ - case EVeiCmdPreview: - { - if( state == EIdle || state == EStop ) - { - SetTrimStateL( EFullPreview ); - PlayPreviewL(); - } - break; - } - // - // Options -> Help - // - case EVeiCmdTrimForMmsViewHelp: - { - AppUi()->HandleCommandL( aCommand ); - break; - } - /** - * Options -> Back - */ - case EAknSoftkeyBack: - { - if( state != EFullPreview ) - { - CmdSoftkeyBackL(); - } - else - { - SetTrimStateL( ESeek ); - } - break; - } - /** - * Adjust video length -> Ok - */ - case EAknSoftkeyOk: - { - if( state == EPause ) - { - SetTrimStateL( ESeek ); - iContainer->Stop( ETrue ); - } - else - { - CmdSoftkeyOkL(); - } - break; - } - /** - * Adjust video length -> Cancel - */ - case EAknSoftkeyCancel: - { - if( state == EPause ) - { - SetTrimStateL( ESeek ); - iContainer->Stop( ETrue ); - } - else - { - CmdSoftkeyCancelL(); - } - break; - } - default: - { - AppUi()->HandleCommandL( aCommand ); - break; - } - } - - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::HandleCommandL: Out"); - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::CmdSendViaMultimediaL() -// Function for handling the Send Via Multimedia command. -// -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::CmdSendViaMultimediaL() - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: In"); - - // Start processing the trimmed video - // Possible leave codes: - // - KErrNoMemory if memory allocation fails - // - KErrAccessDenied if the file access is denied - // - KErrDiskFull if the disk is full - // - KErrWrite if not all data could be written - // - KErrBadName if the filename is bad - // - KErrDirFull if the directory is full - // : If video clip is already processed and frame is in same position - // do not reprocess the movie. - - - UpdateNaviPaneSize(); - - TBool fileExists( ETrue ); - RFs fs = CCoeEnv::Static()->FsSession(); - - if ( iTempFile ) - { - fileExists = BaflUtils::FileExists( fs, *iTempFile ); - } - - if ( !fileExists || ( !iTempFile ) || iProcessNeeded ) - { - - if ( iTempFile && fileExists ) - { - User::LeaveIfError( fs.Delete( *iTempFile ) ); - delete iTempFile; - iTempFile = NULL; - } - - iTempFile = HBufC::NewL(KMaxFileName); - -// @: check the quality setting. should we set it here to MMS compatible? - - // Quality is taken from settings and set to engine. - ReadSettingsL( iMovieSaveSettings ); - - iTempMaker->GenerateTempFileName( *iTempFile, iMovieSaveSettings.MemoryInUse(), iVedMovie->Format() ); - - TEntry fileinfo; - // Rename movie from xxxx.$$$ to defaultfilename from settingsview. - // looks better in attachment list.. - - // Get default movie name from settings view - TPtr temppeet = iTempFile->Des(); - TParse parse; - - parse.Set( iMovieSaveSettings.DefaultVideoName(), &temppeet, NULL ); - - TFileName orgPathAndName = parse.FullName(); - -// TVedVideoFormat movieQuality = iVedMovie->Format(); - - orgPathAndName.Replace( orgPathAndName.Length()-4, 4, KExt3gp ); - - fs.Replace( *iTempFile, orgPathAndName ); - iTempFile->Des() = orgPathAndName; - fs.Entry( *iTempFile, fileinfo ); - - - iVedMovie->SetQuality( CVedMovie::EQualityMMSInteroperability ); - LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: 1, iTempFile:%S", iTempFile); - TRAPD( processError, iVedMovie->ProcessL( *iTempFile, *this ) ); - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: 2"); - if( processError == KErrNone ) - { - // Text for the progress note is loaded from TBUF resource - HBufC* noteText; - noteText = StringLoader::LoadLC( R_VED_PROCESSING_FOR_MMS, iEikonEnv ); - - // Construct and execute progress note. - iProgressNote = new(ELeave) CAknProgressDialog( REINTERPRET_CAST(CEikDialog**, - &iProgressNote), ETrue); - iProgressNote->PrepareLC( R_VEI_PROGRESS_NOTE ); - iProgressNote->SetTextL( *noteText ); - - iProgressInfo = iProgressNote->GetProgressInfoL(); - iProgressInfo->SetFinalValue( KProgressNoteMaxValue ); - - iProgressNote->RunLD(); - - CleanupStack::PopAndDestroy( noteText ); // Pop and destroy the text - } - else - { - // : add error handling here - } - - } - else - { - - RFs shareFServer; - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: shareFServer connect."); - - User::LeaveIfError(shareFServer.Connect()); - shareFServer.ShareProtected(); - - RFile openFileHandle; - - TInt err = openFileHandle.Open(shareFServer,*iTempFile,EFileRead|EFileShareReadersOnly); - if (KErrNone != err) - { - LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: Could not open file %S with EFileShareReadersOnly. Trying EFileShareAny", iTempFile); - User::LeaveIfError( openFileHandle.Open (shareFServer, *iTempFile, EFileRead|EFileShareAny) ); - } - - CMessageData* messageData = CMessageData::NewLC(); - - - messageData->AppendAttachmentHandleL( openFileHandle ); - - iSendAppUi.CreateAndSendMessageL( KSenduiMtmMmsUid, messageData, KNullUid, EFalse ); - - CleanupStack::PopAndDestroy( messageData ); - - shareFServer.Close(); - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: shareFServer closed."); - } - - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::CmdSendViaMultimediaL: Out"); - } - -void CVeiTrimForMmsView::CmdSoftkeyBackL() - { - // Compare previous view's application uid to video editor uid. - if( iPreviousViewId.iAppUid == KUidVideoEditor ) - { - CEikStatusPane* statusPane = AppUi()->StatusPane(); - TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi ); // Navi pane UID - - CAknNavigationControlContainer *naviContainer = (CAknNavigationControlContainer*)statusPane->ControlL( naviPaneUid ); - naviContainer->Pop( iNaviDecorator ); - - // Activate previous local view. - AppUi()->ActivateLocalViewL( iPreviousViewId.iViewUid ); - } - else - { - // Exit video editor - AppUi()->HandleCommandL( EEikCmdExit); - } - } - - -void CVeiTrimForMmsView::CmdSoftkeyOkL() - { - // Set CBA labels back to view default - Cba()->SetCommandSetL( KVedTrimForMmsDefaultCba ); - Cba()->DrawDeferred(); - - PushKeySoundL( R_VED_LEFT_RIGHT_SILENT_SKEY_LIST ); - } - - -void CVeiTrimForMmsView::CmdSoftkeyCancelL() - { - // Set CBA labels back to view default - Cba()->SetCommandSetL( KVedTrimForMmsDefaultCba ); - Cba()->DrawDeferred(); - - PushKeySoundL( R_VED_LEFT_RIGHT_SILENT_SKEY_LIST ); - } - - -void CVeiTrimForMmsView::DoActivateL( const TVwsViewId& aPrevViewId, - TUid /*aCustomMessageId*/, - const TDesC8& aCustomMessage ) - { - if( !iContainer ) - { - iPreviousViewId = aPrevViewId; // Save the previous view id - - // Disable left and right navi-key sounds - PushKeySoundL( R_VED_LEFT_RIGHT_SILENT_SKEY_LIST ); - - SetTitlePaneTextL(); - CreateNaviPaneL(); - - STATIC_CAST( CVeiEditVideoLabelNavi*, iNaviDecorator->DecoratedControl() )->SetState( CVeiEditVideoLabelNavi::EStateTrimForMmsView ); - - TFileName inputFileName; - CnvUtfConverter::ConvertToUnicodeFromUtf8( inputFileName, aCustomMessage ); - - - // TEST - if (inputFileName.Length() == 0) - { - inputFileName.Copy( _L("c:\\Data\\Videos\\test.mp4") ); - } - // END TEST - - - if( !iVedMovie ) - { - iVedMovie = CVedMovie::NewL( NULL ); - iVedMovie->RegisterMovieObserverL( this ); - iVedMovie->InsertVideoClipL( inputFileName, KVedVideoClipIndex ); - iVedMovie->SetQuality( CVedMovie::EQualityMMSInteroperability ); - } - - iContainer = CVeiTrimForMmsContainer::NewL( AppUi()->ClientRect(), - *iVedMovie, *this ); - iContainer->SetMopParent( this ); - - AppUi()->AddToStackL( *this, iContainer ); - } - - } - - -void CVeiTrimForMmsView::DoDeactivate() - { - if( iContainer ) - { - AppUi()->RemoveFromStack( iContainer ); - delete iContainer; - iContainer = NULL; - - if( iVedMovie ) - { - iVedMovie->Reset(); - iVedMovie->UnregisterMovieObserver( this ); - delete iVedMovie; - iVedMovie = NULL; - } - } - } - - -void CVeiTrimForMmsView::PushKeySoundL( const TInt aResourceId ) const - { - CAknKeySoundSystem* aknKeySoundSystem = AppUi()->KeySounds(); - aknKeySoundSystem->PushContextL( aResourceId ); - } - - -void CVeiTrimForMmsView::PopKeySound() const - { - AppUi()->KeySounds()->PopContext(); - } - - -void CVeiTrimForMmsView::SetTitlePaneTextL() const - { - TUid titleUid; - titleUid.iUid = EEikStatusPaneUidTitle; - - CEikStatusPane* statusPane = AppUi()->StatusPane(); - - CEikStatusPaneBase::TPaneCapabilities titlePaneCap = - statusPane->PaneCapabilities( titleUid ); - - if( titlePaneCap.IsPresent() && titlePaneCap.IsAppOwned() ) - { - CAknTitlePane* titlePane = - (CAknTitlePane*)statusPane->ControlL( titleUid ); - - TResourceReader reader; - iCoeEnv->CreateResourceReaderLC( reader, - R_VEI_TRIM_FOR_MMS_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader ); - - CleanupStack::PopAndDestroy(); //reader - } - - } - - -void CVeiTrimForMmsView::CreateNaviPaneL() - { - TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi ); // Navi pane UID - - CEikStatusPane* statusPane = AppUi()->StatusPane(); // Get status pane - - CEikStatusPaneBase::TPaneCapabilities naviPaneCap = - statusPane->PaneCapabilities( naviPaneUid ); - - if( naviPaneCap.IsPresent() && naviPaneCap.IsAppOwned() ) - { - CAknNavigationControlContainer *naviContainer = (CAknNavigationControlContainer*)statusPane->ControlL( naviPaneUid ); - - CVeiEditVideoLabelNavi* editvideolabelnavi = CVeiEditVideoLabelNavi::NewLC(); - editvideolabelnavi->SetState( CVeiEditVideoLabelNavi::EStateInitializing ); - - iNaviDecorator = - CAknNavigationDecorator::NewL( naviContainer, editvideolabelnavi, - CAknNavigationDecorator::ENotSpecified ); - CleanupStack::Pop( editvideolabelnavi ); - - iNaviDecorator->SetContainerWindowL( *naviContainer ); - iNaviDecorator->MakeScrollButtonVisible( EFalse ); - - naviContainer->PushL( *iNaviDecorator ); - - } - } - -void CVeiTrimForMmsView::UpdateNaviPaneSize() - { - if( iContainer ) - { - iVedMovie->VideoClipSetCutInTime( KVedVideoClipIndex, iContainer->CutInTime() ); - iVedMovie->VideoClipSetCutOutTime( KVedVideoClipIndex, iContainer->CutOutTime() ); - } - } -void CVeiTrimForMmsView::SetNaviPaneSizeLabelL( const TInt& aSizeInBytes ) - { - STATIC_CAST(CVeiEditVideoLabelNavi*, - iNaviDecorator->DecoratedControl())->SetSizeLabelL( aSizeInBytes ); - } - - -void CVeiTrimForMmsView::SetNaviPaneDurationLabelL( - const TTimeIntervalMicroSeconds& aTime ) - { - STATIC_CAST(CVeiEditVideoLabelNavi*, - iNaviDecorator->DecoratedControl())->SetDurationLabelL( aTime.Int64() ); - } - -void CVeiTrimForMmsView::UpdateNaviPaneL( const TInt& aSizeInBytes, - const TTimeIntervalMicroSeconds& aTime ) - { - TInt maxMmsSize = STATIC_CAST( CVeiEditVideoLabelNavi*, iNaviDecorator->DecoratedControl() )->GetMaxMmsSize(); - - // Navipanes MMS icon control. - if( aSizeInBytes < maxMmsSize ) - { - STATIC_CAST( CVeiEditVideoLabelNavi*, iNaviDecorator->DecoratedControl() )->SetMmsAvailableL( ETrue ); - } - else - { - STATIC_CAST( CVeiEditVideoLabelNavi*, iNaviDecorator->DecoratedControl() )->SetMmsAvailableL( EFalse ); - } - - STATIC_CAST(CVeiEditVideoLabelNavi*, - iNaviDecorator->DecoratedControl())->SetSizeLabelL( aSizeInBytes ); - - STATIC_CAST(CVeiEditVideoLabelNavi*, - iNaviDecorator->DecoratedControl())->SetDurationLabelL( aTime.Int64() ); - } - -void CVeiTrimForMmsView::HandleResourceChange(TInt aType) - { - LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsView::HandleResourceChange() In, aType:%d", aType); - - if (KAknsMessageSkinChange == aType && iNaviDecorator) - { - // Handle skin change in the navi label controls - they do not receive - // it automatically since they are not in the control stack - CCoeControl* navi = iNaviDecorator->DecoratedControl(); - if (navi) - { - navi->HandleResourceChange( aType ); - } - } - - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::HandleResourceChange() Out"); - } - -// ============= MVedMovieProcessingObserver FUNCTIONS START ================== - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::NotifyMovieProcessingStartedL( CVedMovie& aMovie ) -// -// Called to notify that a new movie processing operation has been started. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::NotifyMovieProcessingStartedL( CVedMovie& /*aMovie*/ ) - { - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::NotifyMovieProcessingProgressed( CVedMovie& aMovie, -// TInt aPercentage ) -// -// Called to inform about the current progress of the movie processing -// operation. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::NotifyMovieProcessingProgressed( CVedMovie&/*aMovie*/, - TInt aPercentage ) - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingProgressed(): In"); - - // Increment the progress bar. - iProgressInfo->SetAndDraw( aPercentage ); - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::NotifyMovieProcessingCompleted( CVedMovie& aMovie, -// TInt aError ) -// -// Called to notify that the movie processing operation has been completed. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::NotifyMovieProcessingCompleted( CVedMovie& /*aMovie*/, - TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted(): In, aError:%d", aError); - - if( !aError ) - { - ProcessNeeded( EFalse ); - } - - __ASSERT_ALWAYS( iProgressNote, User::Panic(_L("CVeiTrimForMmsView"),1) ); - - // Draw the progress bar to 100%. - iProgressInfo->SetAndDraw( 100 ); - - // Delete the note. - TRAP_IGNORE( iProgressNote->ProcessFinishedL() ); - - RFs shareFServer; - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted: shareFServer connect."); - - User::LeaveIfError(shareFServer.Connect()); - shareFServer.ShareProtected(); - - RFile openFileHandle; - - TInt err = openFileHandle.Open(shareFServer,*iTempFile,EFileRead|EFileShareReadersOnly); - if (KErrNone != err) - { - LOGFMT(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted: Could not open file %S with EFileShareReadersOnly. Trying EFileShareAny", iTempFile); - User::LeaveIfError( openFileHandle.Open (shareFServer, *iTempFile, EFileRead|EFileShareAny) ); - } - - CMessageData* messageData = CMessageData::NewLC(); - messageData->AppendAttachmentHandleL( openFileHandle ); - - iSendAppUi.CreateAndSendMessageL( KSenduiMtmMmsUid, messageData, KNullUid, EFalse ); - - CleanupStack::PopAndDestroy( messageData ); - - shareFServer.Close(); - - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted: shareFServer closed."); - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyMovieProcessingCompleted(): Out"); - } - -// ============== MVedMovieProcessingObserver FUNCTIONS END =================== - - -/** - * Called to notify that a new video clip has been successfully - * added to the movie. Note that the indices and the start and end times - * of the video clips after the new clip have also changed as a result. - * Note that the transitions may also have changed. - * - * @param aMovie movie - * @param aIndex index of video clip in movie - */ -void CVeiTrimForMmsView::NotifyVideoClipAdded( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - ProcessNeeded( ETrue ); - } - - -/** - * Called to notify that adding a new video clip to the movie has failed. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - KErrNotSupported if the format of the file is recognized but - * adding it to the movie is not supported (e.g., it is of different resolution - * or format than the other clips) - * - * @param aMovie movie - * @param aError one of the system wide error codes - */ -void CVeiTrimForMmsView::NotifyVideoClipAddingFailed( CVedMovie& /*aMovie*/, - TInt /*aError*/ ) - { - User::Panic( _L("MmsView"), 20 ); - } - - -void CVeiTrimForMmsView::NotifyVideoClipRemoved( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyVideoClipIndicesChanged( CVedMovie& /*aMovie*/, - TInt /*aOldIndex*/, - TInt /*aNewIndex*/ ) - { - } - - -// ---------------------------------------------------------------------------- -// CVeiTrimForMmsView::NotifyVideoClipTimingsChanged( CVedMovie& aMovie, -// TInt aIndex ) -// -// Called to notify that the timings (that is, the cut in or cut out time or -// the speed and consequently the end time, edited duration, and possibly audio -// settings) of a video clip have changed (but the index of the clip has -// not changed). Note that the start and end times of the video clips -// after the changed clip have also changed. -// ---------------------------------------------------------------------------- -// -void CVeiTrimForMmsView::NotifyVideoClipTimingsChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::NotifyVideoClipTimingsChanged()"); - } - - -void CVeiTrimForMmsView::NotifyVideoClipColorEffectChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyVideoClipAudioSettingsChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyVideoClipGeneratorSettingsChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyVideoClipDescriptiveNameChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyStartTransitionEffectChanged( CVedMovie& /*aMovie*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyMiddleTransitionEffectChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyEndTransitionEffectChanged( CVedMovie& /*aMovie*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyAudioClipAdded( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyAudioClipAddingFailed( CVedMovie& /*aMovie*/, TInt /*aError*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyAudioClipRemoved( CVedMovie& /*aMovie*/, TInt /*aIndex*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyAudioClipIndicesChanged( CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, - TInt /*aNewIndex*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyAudioClipTimingsChanged( CVedMovie& /*aMovie*/, - TInt /*aIndex*/ ) - { - } - - -void CVeiTrimForMmsView::NotifyMovieQualityChanged( CVedMovie& /*aMovie*/ ) - { - } - -void CVeiTrimForMmsView::NotifyMovieReseted(CVedMovie& /*aMovie*/ ) - { - } - -void CVeiTrimForMmsView::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/) - { - } - -void CVeiTrimForMmsView::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiTrimForMmsView::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiTrimForMmsView::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiTrimForMmsView::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - } - -void CVeiTrimForMmsView::PlayPreviewL() - { - TRect rect( AppUi()->ApplicationRect() ); - iContainer->SetRect( rect ); - - iContainer->PlayL( iVedMovie->VideoClipInfo( 0 )->FileName(), rect ); - } - -void CVeiTrimForMmsView::HandleStatusPaneSizeChange() - { - if ( iContainer ) - { - iContainer->SetRect( AppUi()->ClientRect() ); - } - - } -void CVeiTrimForMmsView::SetTrimStateL( TTrimState aState ) - { - iTrimState = aState; - CEikStatusPane *statusPane; - CAknTitlePane* titlePane; - - TResourceReader reader1; - - switch ( iTrimState ) - { - case EFullPreview: - - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_EMPTY ); - Cba()->DrawDeferred(); - - break; - - case ESeek: - iContainer->SetRect( AppUi()->ClientRect() ); - statusPane = ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->StatusPane(); - - titlePane = (CAknTitlePane*) statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ); - iCoeEnv->CreateResourceReaderLC( reader1, R_VEI_TRIM_FOR_MMS_VIEW_TITLE_NAME ); - titlePane->SetFromResourceL( reader1 ); - CleanupStack::PopAndDestroy(); //reader1 - - Cba()->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK ); - Cba()->DrawDeferred(); - - break; - - default: - { - break; - } - - } - } - -void CVeiTrimForMmsView::DialogDismissedL( TInt aButtonId ) - { - if ( aButtonId != EAknSoftkeyDone ) - { - iVedMovie->CancelProcessing(); - } - iProgressInfo = NULL; - } - -void CVeiTrimForMmsView::ProcessNeeded( TBool aProcessNeed ) - { - iProcessNeeded = aProcessNeed; - } - -void CVeiTrimForMmsView::ShowGlobalErrorNoteL( const TInt aError ) const - { - iErrorUi->ShowGlobalErrorNote( aError ); - } - -//============================================================================= -void CVeiTrimForMmsView::ReadSettingsL( TVeiSettings& aSettings ) const - { - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::ReadSettingsL: in"); - - STATIC_CAST( CTrimForMmsAppUi*, AppUi() )->ReadSettingsL( aSettings ); - - LOG(KVideoEditorLogFile, "CVeiTrimForMmsView::ReadSettingsL: out"); - } - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/BWINS/VideoEditorCommon.DEF --- a/videditor/VideoEditorCommon/BWINS/VideoEditorCommon.DEF Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -EXPORTS - ??1CLogFile@@UAE@XZ @ 1 NONAME ; CLogFile::~CLogFile(void) - ??1CVeiAddQueue@@UAE@XZ @ 2 NONAME ; CVeiAddQueue::~CVeiAddQueue(void) - ??1CVeiImageClipGenerator@@UAE@XZ @ 3 NONAME ; CVeiImageClipGenerator::~CVeiImageClipGenerator(void) - ??1CVeiImageConverter@@UAE@XZ @ 4 NONAME ; CVeiImageConverter::~CVeiImageConverter(void) - ??1CVeiMGFetchVerifier@@UAE@XZ @ 5 NONAME ; CVeiMGFetchVerifier::~CVeiMGFetchVerifier(void) - ??1CVeiTempMaker@@UAE@XZ @ 6 NONAME ; CVeiTempMaker::~CVeiTempMaker(void) - ??1CVeiTitleClipGenerator@@UAE@XZ @ 7 NONAME ; CVeiTitleClipGenerator::~CVeiTitleClipGenerator(void) - ?AddMediaFileToMGAlbumL@VideoEditorUtils@@SAXABVTDesC16@@H@Z @ 8 NONAME ; void VideoEditorUtils::AddMediaFileToMGAlbumL(class TDesC16 const &, int) - ?BackgroundColor@CVeiImageClipGenerator@@QBEABVTRgb@@XZ @ 9 NONAME ; class TRgb const & CVeiImageClipGenerator::BackgroundColor(void) const - ?BackgroundColor@CVeiTitleClipGenerator@@QBE?AVTRgb@@XZ @ 10 NONAME ; class TRgb CVeiTitleClipGenerator::BackgroundColor(void) const - ?BackgroundImage@CVeiTitleClipGenerator@@QBEPAVCFbsBitmap@@XZ @ 11 NONAME ; class CFbsBitmap * CVeiTitleClipGenerator::BackgroundImage(void) const - ?CancelEncoding@CVeiImageConverter@@QAEXXZ @ 12 NONAME ; void CVeiImageConverter::CancelEncoding(void) - ?CancelFrame@CVeiImageClipGenerator@@UAEXXZ @ 13 NONAME ; void CVeiImageClipGenerator::CancelFrame(void) - ?CancelFrame@CVeiTitleClipGenerator@@UAEXXZ @ 14 NONAME ; void CVeiTitleClipGenerator::CancelFrame(void) - ?Count@CVeiAddQueue@@QBEHXZ @ 15 NONAME ; int CVeiAddQueue::Count(void) const - ?DefaultSnapshotName@TVeiSettings@@QAEAAVTDes16@@XZ @ 16 NONAME ; class TDes16 & TVeiSettings::DefaultSnapshotName(void) - ?DefaultSnapshotName@TVeiSettings@@QBE?AVTPtrC16@@XZ @ 17 NONAME ; class TPtrC16 TVeiSettings::DefaultSnapshotName(void) const - ?DefaultVideoName@TVeiSettings@@QAEAAVTDes16@@XZ @ 18 NONAME ; class TDes16 & TVeiSettings::DefaultVideoName(void) - ?DefaultVideoName@TVeiSettings@@QBE?AVTPtrC16@@XZ @ 19 NONAME ; class TPtrC16 TVeiSettings::DefaultVideoName(void) const - ?DescriptiveName@CVeiImageClipGenerator@@UBE?AVTPtrC16@@XZ @ 20 NONAME ; class TPtrC16 CVeiImageClipGenerator::DescriptiveName(void) const - ?DescriptiveName@CVeiTitleClipGenerator@@UBE?AVTPtrC16@@XZ @ 21 NONAME ; class TPtrC16 CVeiTitleClipGenerator::DescriptiveName(void) const - ?Duration@CVeiImageClipGenerator@@UBE?AVTTimeIntervalMicroSeconds@@XZ @ 22 NONAME ; class TTimeIntervalMicroSeconds CVeiImageClipGenerator::Duration(void) const - ?Duration@CVeiTitleClipGenerator@@UBE?AVTTimeIntervalMicroSeconds@@XZ @ 23 NONAME ; class TTimeIntervalMicroSeconds CVeiTitleClipGenerator::Duration(void) const - ?EmptyTempFolder@CVeiTempMaker@@QBEXXZ @ 24 NONAME ; void CVeiTempMaker::EmptyTempFolder(void) const - ?ExternalizeL@TVeiSettings@@QBEXAAVRWriteStream@@@Z @ 25 NONAME ; void TVeiSettings::ExternalizeL(class RWriteStream &) const - ?FinishGetFrameL@CVeiTitleClipGenerator@@AAEPAVCFbsBitmap@@H@Z @ 26 NONAME ; class CFbsBitmap * CVeiTitleClipGenerator::FinishGetFrameL(int) - ?GenerateFileNameL@VideoEditorUtils@@SAHAAVRFs@@ABVTDesC16@@AAVTDes16@@W4TVedVideoFormat@@HV?$TBuf@$0BAA@@@@Z @ 27 NONAME ; int VideoEditorUtils::GenerateFileNameL(class RFs &, class TDesC16 const &, class TDes16 &, enum TVedVideoFormat, int, class TBuf<256>) - ?GenerateNewDocumentNameL@VideoEditorUtils@@SAHAAVRFs@@ABVTDesC16@@AAVTDes16@@W4TVedVideoFormat@@HW4TMemory@VideoEditor@@@Z @ 28 NONAME ; int VideoEditorUtils::GenerateNewDocumentNameL(class RFs &, class TDesC16 const &, class TDes16 &, enum TVedVideoFormat, int, enum VideoEditor::TMemory) - ?GenerateTempFileName@CVeiTempMaker@@QBEXAAVHBufC16@@W4TMemory@CAknMemorySelectionDialog@@W4TVedVideoFormat@@H@Z @ 29 NONAME ; void CVeiTempMaker::GenerateTempFileName(class HBufC16 &, enum CAknMemorySelectionDialog::TMemory, enum TVedVideoFormat, int) const - ?GetBitmap@CVeiImageConverter@@QAEPAVCFbsBitmap@@XZ @ 30 NONAME ; class CFbsBitmap * CVeiImageConverter::GetBitmap(void) - ?GetEncoderImageTypesL@CVeiImageConverter@@SAXAAV?$RPointerArray@VCImageTypeDescription@@@@@Z @ 31 NONAME ; void CVeiImageConverter::GetEncoderImageTypesL(class RPointerArray &) - ?GetFirstFrameL@CVeiTitleClipGenerator@@AAEPAVCFbsBitmap@@XZ @ 32 NONAME ; class CFbsBitmap * CVeiTitleClipGenerator::GetFirstFrameL(void) - ?GetFrameL@CVeiImageClipGenerator@@UAEXAAVMVedVideoClipGeneratorFrameObserver@@HPAVTSize@@W4TDisplayMode@@HH@Z @ 33 NONAME ; void CVeiImageClipGenerator::GetFrameL(class MVedVideoClipGeneratorFrameObserver &, int, class TSize *, enum TDisplayMode, int, int) - ?GetFrameL@CVeiTitleClipGenerator@@UAEXAAVMVedVideoClipGeneratorFrameObserver@@HPAVTSize@@W4TDisplayMode@@HH@Z @ 34 NONAME ; void CVeiTitleClipGenerator::GetFrameL(class MVedVideoClipGeneratorFrameObserver &, int, class TSize *, enum TDisplayMode, int, int) - ?GetFramesL@CVeiFrameTaker@@QAEXAAVCVedVideoClipInfo@@HPAVTSize@@H1H1H@Z @ 35 NONAME ; void CVeiFrameTaker::GetFramesL(class CVedVideoClipInfo &, int, class TSize *, int, class TSize *, int, class TSize *, int) - ?GetMGAlbumsListForMediaFileL@VideoEditorUtils@@SAXAAV?$RArray@H@@ABVTDesC16@@@Z @ 36 NONAME ; void VideoEditorUtils::GetMGAlbumsListForMediaFileL(class RArray &, class TDesC16 const &) - ?GetMaxMmsSizeL@CVeiVideoEditorSettings@@SAXAAH@Z @ 37 NONAME ; void CVeiVideoEditorSettings::GetMaxMmsSizeL(int &) - ?GetMediaPlayerVolumeLevelL@CVeiVideoEditorSettings@@SAXAAH@Z @ 38 NONAME ; void CVeiVideoEditorSettings::GetMediaPlayerVolumeLevelL(int &) - ?GetNext@CVeiAddQueue@@QAEXXZ @ 39 NONAME ; void CVeiAddQueue::GetNext(void) - ?GetVideoFrameIndex@CVeiImageClipGenerator@@UBEHVTTimeIntervalMicroSeconds@@@Z @ 40 NONAME ; int CVeiImageClipGenerator::GetVideoFrameIndex(class TTimeIntervalMicroSeconds) const - ?GetVideoFrameIndex@CVeiTitleClipGenerator@@UBEHVTTimeIntervalMicroSeconds@@@Z @ 41 NONAME ; int CVeiTitleClipGenerator::GetVideoFrameIndex(class TTimeIntervalMicroSeconds) const - ?HorizontalAlignment@CVeiTitleClipGenerator@@QBE?AW4TVeiTitleClipHorizontalAlignment@@XZ @ 42 NONAME ; enum TVeiTitleClipHorizontalAlignment CVeiTitleClipGenerator::HorizontalAlignment(void) const - ?IconFileNameAndPath@VideoEditorUtils@@SA?AV?$TBuf@$0BAA@@@H@Z @ 43 NONAME ; class TBuf<256> VideoEditorUtils::IconFileNameAndPath(int) - ?ImageFilename@CVeiImageClipGenerator@@QBE?AVTPtrC16@@XZ @ 44 NONAME ; class TPtrC16 CVeiImageClipGenerator::ImageFilename(void) const - ?InsertMediaL@CVeiAddQueue@@QAEXABVTDesC16@@@Z @ 45 NONAME ; void CVeiAddQueue::InsertMediaL(class TDesC16 const &) - ?InternalizeL@TVeiSettings@@QAEXAAVRReadStream@@@Z @ 46 NONAME ; void TVeiSettings::InternalizeL(class RReadStream &) - ?IsDrmProtectedL@VideoEditorUtils@@SAHABVTDesC16@@@Z @ 47 NONAME ; int VideoEditorUtils::IsDrmProtectedL(class TDesC16 const &) - ?IsEnoughFreeSpaceToSaveL@VideoEditorUtils@@SAHAAVRFs@@ABVTDesC16@@H@Z @ 48 NONAME ; int VideoEditorUtils::IsEnoughFreeSpaceToSaveL(class RFs &, class TDesC16 const &, int) - ?IsLandscapeScreenOrientation@VideoEditorUtils@@SAHXZ @ 49 NONAME ; int VideoEditorUtils::IsLandscapeScreenOrientation(void) - ?LaunchListQueryDialogL@VideoEditorUtils@@SAHPAVMDesC16Array@@ABVTDesC16@@@Z @ 50 NONAME ; int VideoEditorUtils::LaunchListQueryDialogL(class MDesC16Array *, class TDesC16 const &) - ?LaunchQueryDialogL@VideoEditorUtils@@SAHABVTDesC16@@@Z @ 51 NONAME ; int VideoEditorUtils::LaunchQueryDialogL(class TDesC16 const &) - ?LaunchSaveChangesQueryL@VideoEditorUtils@@SAHXZ @ 52 NONAME ; int VideoEditorUtils::LaunchSaveChangesQueryL(void) - ?LaunchSaveVideoQueryL@VideoEditorUtils@@SAHXZ @ 53 NONAME ; int VideoEditorUtils::LaunchSaveVideoQueryL(void) - ?Log@CLogFile@@QAEXABVTDesC16@@@Z @ 54 NONAME ; void CLogFile::Log(class TDesC16 const &) - ?Log@CLogFile@@QAEXABVTDesC8@@@Z @ 55 NONAME ; void CLogFile::Log(class TDesC8 const &) - ?Log@CLogFile@@QAEXE@Z @ 56 NONAME ; void CLogFile::Log(unsigned char) - ?Log@CLogFile@@QAEXI@Z @ 57 NONAME ; void CLogFile::Log(unsigned int) - ?LogBytes@CLogFile@@QAEXABVTDesC8@@@Z @ 58 NONAME ; void CLogFile::LogBytes(class TDesC8 const &) - ?LogNewline@CLogFile@@QAEXXZ @ 59 NONAME ; void CLogFile::LogNewline(void) - ?LogTime@CLogFile@@QAEXXZ @ 60 NONAME ; void CLogFile::LogTime(void) - ?MemoryInUse@TVeiSettings@@QAEAAW4TMemory@CAknMemorySelectionDialog@@XZ @ 61 NONAME ; enum CAknMemorySelectionDialog::TMemory & TVeiSettings::MemoryInUse(void) - ?MemoryInUse@TVeiSettings@@QBEABW4TMemory@CAknMemorySelectionDialog@@XZ @ 62 NONAME ; enum CAknMemorySelectionDialog::TMemory const & TVeiSettings::MemoryInUse(void) const - ?NewL@CLogFile@@SAPAV1@ABVTDesC16@@H@Z @ 63 NONAME ; class CLogFile * CLogFile::NewL(class TDesC16 const &, int) - ?NewL@CVeiAddQueue@@SAPAV1@AAVMVedAudioClipInfoObserver@@AAVCVedMovie@@AAVMVeiQueueObserver@@@Z @ 64 NONAME ; class CVeiAddQueue * CVeiAddQueue::NewL(class MVedAudioClipInfoObserver &, class CVedMovie &, class MVeiQueueObserver &) - ?NewL@CVeiDisplayLighter@@SAPAV1@XZ @ 65 NONAME ; class CVeiDisplayLighter * CVeiDisplayLighter::NewL(void) - ?NewL@CVeiFrameTaker@@SAPAV1@AAVMVeiFrameTakerObserver@@@Z @ 66 NONAME ; class CVeiFrameTaker * CVeiFrameTaker::NewL(class MVeiFrameTakerObserver &) - ?NewL@CVeiImageClipGenerator@@SAPAV1@ABVTDesC16@@ABVTSize@@ABVTTimeIntervalMicroSeconds@@ABVTRgb@@W4TDisplayMode@@AAVRFs@@AAVMVeiImageClipGeneratorObserver@@@Z @ 67 NONAME ; class CVeiImageClipGenerator * CVeiImageClipGenerator::NewL(class TDesC16 const &, class TSize const &, class TTimeIntervalMicroSeconds const &, class TRgb const &, enum TDisplayMode, class RFs &, class MVeiImageClipGeneratorObserver &) - ?NewL@CVeiImageConverter@@SAPAV1@PAVMConverterController@@@Z @ 68 NONAME ; class CVeiImageConverter * CVeiImageConverter::NewL(class MConverterController *) - ?NewL@CVeiRemConTarget@@SAPAV1@AAVMVeiMediakeyObserver@@@Z @ 69 NONAME ; class CVeiRemConTarget * CVeiRemConTarget::NewL(class MVeiMediakeyObserver &) - ?NewL@CVeiTempMaker@@SAPAV1@XZ @ 70 NONAME ; class CVeiTempMaker * CVeiTempMaker::NewL(void) - ?NewL@CVeiTitleClipGenerator@@SAPAV1@ABVTSize@@W4TVeiTitleClipTransition@@W4TVeiTitleClipHorizontalAlignment@@W4TVeiTitleClipVerticalAlignment@@@Z @ 71 NONAME ; class CVeiTitleClipGenerator * CVeiTitleClipGenerator::NewL(class TSize const &, enum TVeiTitleClipTransition, enum TVeiTitleClipHorizontalAlignment, enum TVeiTitleClipVerticalAlignment) - ?NewLC@CLogFile@@SAPAV1@ABVTDesC16@@H@Z @ 72 NONAME ; class CLogFile * CLogFile::NewLC(class TDesC16 const &, int) - ?NewLC@CVeiAddQueue@@SAPAV1@AAVMVedAudioClipInfoObserver@@AAVCVedMovie@@AAVMVeiQueueObserver@@@Z @ 73 NONAME ; class CVeiAddQueue * CVeiAddQueue::NewLC(class MVedAudioClipInfoObserver &, class CVedMovie &, class MVeiQueueObserver &) - ?NewLC@CVeiImageClipGenerator@@SAPAV1@ABVTDesC16@@ABVTSize@@ABVTTimeIntervalMicroSeconds@@ABVTRgb@@W4TDisplayMode@@AAVRFs@@AAVMVeiImageClipGeneratorObserver@@@Z @ 74 NONAME ; class CVeiImageClipGenerator * CVeiImageClipGenerator::NewLC(class TDesC16 const &, class TSize const &, class TTimeIntervalMicroSeconds const &, class TRgb const &, enum TDisplayMode, class RFs &, class MVeiImageClipGeneratorObserver &) - ?NewLC@CVeiMGFetchVerifier@@SAPAV1@XZ @ 75 NONAME ; class CVeiMGFetchVerifier * CVeiMGFetchVerifier::NewLC(void) - ?NewLC@CVeiTempMaker@@SAPAV1@XZ @ 76 NONAME ; class CVeiTempMaker * CVeiTempMaker::NewLC(void) - ?NewLC@CVeiTitleClipGenerator@@SAPAV1@ABVTSize@@W4TVeiTitleClipTransition@@W4TVeiTitleClipHorizontalAlignment@@W4TVeiTitleClipVerticalAlignment@@@Z @ 77 NONAME ; class CVeiTitleClipGenerator * CVeiTitleClipGenerator::NewLC(class TSize const &, enum TVeiTitleClipTransition, enum TVeiTitleClipHorizontalAlignment, enum TVeiTitleClipVerticalAlignment) - ?NotifyNewMediaDocumentL@VideoEditorUtils@@SAXAAVRFs@@ABVTDesC16@@@Z @ 78 NONAME ; void VideoEditorUtils::NotifyNewMediaDocumentL(class RFs &, class TDesC16 const &) - ?Reset@CVeiDisplayLighter@@QAEXXZ @ 79 NONAME ; void CVeiDisplayLighter::Reset(void) - ?SaveQuality@TVeiSettings@@QAEAAHXZ @ 80 NONAME ; int & TVeiSettings::SaveQuality(void) - ?SaveQuality@TVeiSettings@@QBEHXZ @ 81 NONAME ; int TVeiSettings::SaveQuality(void) const - ?ScaleL@CVeiImageConverter@@QAEXPAVCFbsBitmap@@0ABVTSize@@@Z @ 82 NONAME ; void CVeiImageConverter::ScaleL(class CFbsBitmap *, class CFbsBitmap *, class TSize const &) - ?SetAutoFlush@CLogFile@@QAEXH@Z @ 83 NONAME ; void CLogFile::SetAutoFlush(int) - ?SetAutoNewline@CLogFile@@QAEXH@Z @ 84 NONAME ; void CLogFile::SetAutoNewline(int) - ?SetAutoTimeStamp@CLogFile@@QAEXH@Z @ 85 NONAME ; void CLogFile::SetAutoTimeStamp(int) - ?SetBackgroundColor@CVeiImageClipGenerator@@QAEXABVTRgb@@@Z @ 86 NONAME ; void CVeiImageClipGenerator::SetBackgroundColor(class TRgb const &) - ?SetBackgroundColorL@CVeiTitleClipGenerator@@QAEXABVTRgb@@@Z @ 87 NONAME ; void CVeiTitleClipGenerator::SetBackgroundColorL(class TRgb const &) - ?SetBackgroundImageL@CVeiTitleClipGenerator@@QAEXABVTDesC16@@AAVMVeiTitleClipGeneratorObserver@@@Z @ 88 NONAME ; void CVeiTitleClipGenerator::SetBackgroundImageL(class TDesC16 const &, class MVeiTitleClipGeneratorObserver &) - ?SetBackgroundImageL@CVeiTitleClipGenerator@@QAEXPBVCFbsBitmap@@@Z @ 89 NONAME ; void CVeiTitleClipGenerator::SetBackgroundImageL(class CFbsBitmap const *) - ?SetBitmap@CVeiImageConverter@@QAEXPAVCFbsBitmap@@@Z @ 90 NONAME ; void CVeiImageConverter::SetBitmap(class CFbsBitmap *) - ?SetDescriptiveNameL@CVeiTitleClipGenerator@@QAEXABVTDesC16@@@Z @ 91 NONAME ; void CVeiTitleClipGenerator::SetDescriptiveNameL(class TDesC16 const &) - ?SetDuration@CVeiImageClipGenerator@@QAEXABVTTimeIntervalMicroSeconds@@@Z @ 92 NONAME ; void CVeiImageClipGenerator::SetDuration(class TTimeIntervalMicroSeconds const &) - ?SetDuration@CVeiTitleClipGenerator@@QAEXABVTTimeIntervalMicroSeconds@@@Z @ 93 NONAME ; void CVeiTitleClipGenerator::SetDuration(class TTimeIntervalMicroSeconds const &) - ?SetMediaPlayerVolumeLevelL@CVeiVideoEditorSettings@@SAXH@Z @ 94 NONAME ; void CVeiVideoEditorSettings::SetMediaPlayerVolumeLevelL(int) - ?SetTextColorL@CVeiTitleClipGenerator@@QAEXABVTRgb@@@Z @ 95 NONAME ; void CVeiTitleClipGenerator::SetTextColorL(class TRgb const &) - ?SetTextL@CVeiTitleClipGenerator@@QAEXABVTDesC16@@@Z @ 96 NONAME ; void CVeiTitleClipGenerator::SetTextL(class TDesC16 const &) - ?SetTransitionAndAlignmentsL@CVeiTitleClipGenerator@@QAEXW4TVeiTitleClipTransition@@W4TVeiTitleClipHorizontalAlignment@@W4TVeiTitleClipVerticalAlignment@@@Z @ 97 NONAME ; void CVeiTitleClipGenerator::SetTransitionAndAlignmentsL(enum TVeiTitleClipTransition, enum TVeiTitleClipHorizontalAlignment, enum TVeiTitleClipVerticalAlignment) - ?ShowAudioClipDialogL@CVeiAddQueue@@QAEHXZ @ 98 NONAME ; int CVeiAddQueue::ShowAudioClipDialogL(void) - ?ShowVideoClipDialogL@CVeiAddQueue@@QAEHW4TCursorLocation@VideoEditor@@H@Z @ 99 NONAME ; int CVeiAddQueue::ShowVideoClipDialogL(enum VideoEditor::TCursorLocation, int) - ?Start@CVeiDisplayLighter@@QAEXXZ @ 100 NONAME ; void CVeiDisplayLighter::Start(void) - ?StartProcessingL@CVeiAddQueue@@QAEXXZ @ 101 NONAME ; void CVeiAddQueue::StartProcessingL(void) - ?StartToEncodeL@CVeiImageConverter@@QAEXABVTDesC16@@ABVTUid@@1@Z @ 102 NONAME ; void CVeiImageConverter::StartToEncodeL(class TDesC16 const &, class TUid const &, class TUid const &) - ?StaticLog@CLogFile@@SAXABVTDesC16@@0@Z @ 103 NONAME ; void CLogFile::StaticLog(class TDesC16 const &, class TDesC16 const &) - ?StaticLog@CLogFile@@SAXABVTDesC16@@ABVTDesC8@@@Z @ 104 NONAME ; void CLogFile::StaticLog(class TDesC16 const &, class TDesC8 const &) - ?StaticLogL@CLogFile@@SAXABVTDesC16@@0@Z @ 105 NONAME ; void CLogFile::StaticLogL(class TDesC16 const &, class TDesC16 const &) - ?StaticLogL@CLogFile@@SAXABVTDesC16@@ABVTDesC8@@@Z @ 106 NONAME ; void CLogFile::StaticLogL(class TDesC16 const &, class TDesC8 const &) - ?Stop@CVeiDisplayLighter@@QAEXXZ @ 107 NONAME ; void CVeiDisplayLighter::Stop(void) - ?Text@CVeiTitleClipGenerator@@QBE?AVTPtrC16@@XZ @ 108 NONAME ; class TPtrC16 CVeiTitleClipGenerator::Text(void) const - ?TextColor@CVeiTitleClipGenerator@@QBE?AVTRgb@@XZ @ 109 NONAME ; class TRgb CVeiTitleClipGenerator::TextColor(void) const - ?Transition@CVeiTitleClipGenerator@@QBE?AW4TVeiTitleClipTransition@@XZ @ 110 NONAME ; enum TVeiTitleClipTransition CVeiTitleClipGenerator::Transition(void) const - ?Uid@CVeiImageClipGenerator@@UBE?AVTUid@@XZ @ 111 NONAME ; class TUid CVeiImageClipGenerator::Uid(void) const - ?Uid@CVeiTitleClipGenerator@@UBE?AVTUid@@XZ @ 112 NONAME ; class TUid CVeiTitleClipGenerator::Uid(void) const - ?VerifySelectionL@CVeiMGFetchVerifier@@UAEHPBVMDesC16Array@@@Z @ 113 NONAME ; int CVeiMGFetchVerifier::VerifySelectionL(class MDesC16Array const *) - ?VerticalAlignment@CVeiTitleClipGenerator@@QBE?AW4TVeiTitleClipVerticalAlignment@@XZ @ 114 NONAME ; enum TVeiTitleClipVerticalAlignment CVeiTitleClipGenerator::VerticalAlignment(void) const - ?VideoFirstFrameComplexityFactor@CVeiImageClipGenerator@@UBEHXZ @ 115 NONAME ; int CVeiImageClipGenerator::VideoFirstFrameComplexityFactor(void) const - ?VideoFirstFrameComplexityFactor@CVeiTitleClipGenerator@@UBEHXZ @ 116 NONAME ; int CVeiTitleClipGenerator::VideoFirstFrameComplexityFactor(void) const - ?VideoFrameCount@CVeiImageClipGenerator@@UBEHXZ @ 117 NONAME ; int CVeiImageClipGenerator::VideoFrameCount(void) const - ?VideoFrameCount@CVeiTitleClipGenerator@@UBEHXZ @ 118 NONAME ; int CVeiTitleClipGenerator::VideoFrameCount(void) const - ?VideoFrameDifferenceFactor@CVeiImageClipGenerator@@UBEHH@Z @ 119 NONAME ; int CVeiImageClipGenerator::VideoFrameDifferenceFactor(int) const - ?VideoFrameDifferenceFactor@CVeiTitleClipGenerator@@UBEHH@Z @ 120 NONAME ; int CVeiTitleClipGenerator::VideoFrameDifferenceFactor(int) const - ?VideoFrameDuration@CVeiImageClipGenerator@@UBE?AVTTimeIntervalMicroSeconds@@H@Z @ 121 NONAME ; class TTimeIntervalMicroSeconds CVeiImageClipGenerator::VideoFrameDuration(int) const - ?VideoFrameDuration@CVeiTitleClipGenerator@@UBE?AVTTimeIntervalMicroSeconds@@H@Z @ 122 NONAME ; class TTimeIntervalMicroSeconds CVeiTitleClipGenerator::VideoFrameDuration(int) const - ?VideoFrameEndTime@CVeiImageClipGenerator@@UBE?AVTTimeIntervalMicroSeconds@@H@Z @ 123 NONAME ; class TTimeIntervalMicroSeconds CVeiImageClipGenerator::VideoFrameEndTime(int) const - ?VideoFrameEndTime@CVeiTitleClipGenerator@@UBE?AVTTimeIntervalMicroSeconds@@H@Z @ 124 NONAME ; class TTimeIntervalMicroSeconds CVeiTitleClipGenerator::VideoFrameEndTime(int) const - ?VideoFrameIsIntra@CVeiImageClipGenerator@@UBEHH@Z @ 125 NONAME ; int CVeiImageClipGenerator::VideoFrameIsIntra(int) const - ?VideoFrameStartTime@CVeiImageClipGenerator@@UBE?AVTTimeIntervalMicroSeconds@@H@Z @ 126 NONAME ; class TTimeIntervalMicroSeconds CVeiImageClipGenerator::VideoFrameStartTime(int) const - ?VideoFrameStartTime@CVeiTitleClipGenerator@@UBE?AVTTimeIntervalMicroSeconds@@H@Z @ 127 NONAME ; class TTimeIntervalMicroSeconds CVeiTitleClipGenerator::VideoFrameStartTime(int) const - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/EABI/VideoEditorCommon.DEF --- a/videditor/VideoEditorCommon/EABI/VideoEditorCommon.DEF Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ -EXPORTS - _ZN12CVeiAddQueue12InsertMediaLERK7TDesC16 @ 1 NONAME - _ZN12CVeiAddQueue16StartProcessingLEv @ 2 NONAME - _ZN12CVeiAddQueue20ShowAudioClipDialogLEv @ 3 NONAME - _ZN12CVeiAddQueue20ShowVideoClipDialogLEN11VideoEditor15TCursorLocationEi @ 4 NONAME - _ZN12CVeiAddQueue4NewLER25MVedAudioClipInfoObserverR9CVedMovieR17MVeiQueueObserver @ 5 NONAME - _ZN12CVeiAddQueue5NewLCER25MVedAudioClipInfoObserverR9CVedMovieR17MVeiQueueObserver @ 6 NONAME - _ZN12CVeiAddQueue7GetNextEv @ 7 NONAME - _ZN12CVeiAddQueueD0Ev @ 8 NONAME - _ZN12CVeiAddQueueD1Ev @ 9 NONAME - _ZN12CVeiAddQueueD2Ev @ 10 NONAME - _ZN12TVeiSettings11MemoryInUseEv @ 11 NONAME - _ZN12TVeiSettings11SaveQualityEv @ 12 NONAME - _ZN12TVeiSettings12InternalizeLER11RReadStream @ 13 NONAME - _ZN12TVeiSettings16DefaultVideoNameEv @ 14 NONAME - _ZN12TVeiSettings19DefaultSnapshotNameEv @ 15 NONAME - _ZN13CVeiTempMaker4NewLEv @ 16 NONAME - _ZN13CVeiTempMaker5NewLCEv @ 17 NONAME - _ZN13CVeiTempMakerD0Ev @ 18 NONAME - _ZN13CVeiTempMakerD1Ev @ 19 NONAME - _ZN13CVeiTempMakerD2Ev @ 20 NONAME - _ZN14CVeiFrameTaker10GetFramesLER17CVedVideoClipInfoiP5TSizeiS3_iS3_i @ 21 NONAME - _ZN14CVeiFrameTaker4NewLER22MVeiFrameTakerObserver @ 22 NONAME - _ZN16CVeiRemConTarget4NewLER20MVeiMediakeyObserver @ 23 NONAME - _ZN16VideoEditorUtils15IsDrmProtectedLERK7TDesC16 @ 24 NONAME - _ZN16VideoEditorUtils17GenerateFileNameLER3RFsRK7TDesC16R6TDes1615TVedVideoFormati4TBufILi256EE @ 25 NONAME - _ZN16VideoEditorUtils18LaunchQueryDialogLERK7TDesC16 @ 26 NONAME - _ZN16VideoEditorUtils19IconFileNameAndPathEi @ 27 NONAME - _ZN16VideoEditorUtils21LaunchSaveVideoQueryLEv @ 28 NONAME - _ZN16VideoEditorUtils22AddMediaFileToMGAlbumLERK7TDesC16i @ 29 NONAME - _ZN16VideoEditorUtils22LaunchListQueryDialogLEP12MDesC16ArrayRK7TDesC16 @ 30 NONAME - _ZN16VideoEditorUtils23LaunchSaveChangesQueryLEv @ 31 NONAME - _ZN16VideoEditorUtils23NotifyNewMediaDocumentLER3RFsRK7TDesC16 @ 32 NONAME - _ZN16VideoEditorUtils24GenerateNewDocumentNameLER3RFsRK7TDesC16R6TDes1615TVedVideoFormatiN11VideoEditor7TMemoryE @ 33 NONAME - _ZN16VideoEditorUtils24IsEnoughFreeSpaceToSaveLER3RFsRK7TDesC16i @ 34 NONAME - _ZN16VideoEditorUtils28GetMGAlbumsListForMediaFileLER6RArrayIiERK7TDesC16 @ 35 NONAME - _ZN16VideoEditorUtils28IsLandscapeScreenOrientationEv @ 36 NONAME - _ZN18CVeiDisplayLighter4NewLEv @ 37 NONAME - _ZN18CVeiDisplayLighter4StopEv @ 38 NONAME - _ZN18CVeiDisplayLighter5ResetEv @ 39 NONAME - _ZN18CVeiDisplayLighter5StartEv @ 40 NONAME - _ZN18CVeiImageConverter14CancelEncodingEv @ 41 NONAME - _ZN18CVeiImageConverter14StartToEncodeLERK7TDesC16RK4TUidS5_ @ 42 NONAME - _ZN18CVeiImageConverter21GetEncoderImageTypesLER13RPointerArrayI21CImageTypeDescriptionE @ 43 NONAME - _ZN18CVeiImageConverter4NewLEP20MConverterController @ 44 NONAME - _ZN18CVeiImageConverter6ScaleLEP10CFbsBitmapS1_RK5TSize @ 45 NONAME - _ZN18CVeiImageConverter9GetBitmapEv @ 46 NONAME - _ZN18CVeiImageConverter9SetBitmapEP10CFbsBitmap @ 47 NONAME - _ZN18CVeiImageConverterD0Ev @ 48 NONAME - _ZN18CVeiImageConverterD1Ev @ 49 NONAME - _ZN18CVeiImageConverterD2Ev @ 50 NONAME - _ZN19CVeiMGFetchVerifier16VerifySelectionLEPK12MDesC16Array @ 51 NONAME - _ZN19CVeiMGFetchVerifier5NewLCEv @ 52 NONAME - _ZN19CVeiMGFetchVerifierD0Ev @ 53 NONAME - _ZN19CVeiMGFetchVerifierD1Ev @ 54 NONAME - _ZN19CVeiMGFetchVerifierD2Ev @ 55 NONAME - _ZN22CVeiImageClipGenerator11CancelFrameEv @ 56 NONAME - _ZN22CVeiImageClipGenerator11SetDurationERK25TTimeIntervalMicroSeconds @ 57 NONAME - _ZN22CVeiImageClipGenerator18SetBackgroundColorERK4TRgb @ 58 NONAME - _ZN22CVeiImageClipGenerator4NewLERK7TDesC16RK5TSizeRK25TTimeIntervalMicroSecondsRK4TRgb12TDisplayModeR3RFsR30MVeiImageClipGeneratorObserver @ 59 NONAME - _ZN22CVeiImageClipGenerator5NewLCERK7TDesC16RK5TSizeRK25TTimeIntervalMicroSecondsRK4TRgb12TDisplayModeR3RFsR30MVeiImageClipGeneratorObserver @ 60 NONAME - _ZN22CVeiImageClipGenerator9GetFrameLER35MVedVideoClipGeneratorFrameObserveriP5TSize12TDisplayModeii @ 61 NONAME - _ZN22CVeiImageClipGeneratorD0Ev @ 62 NONAME - _ZN22CVeiImageClipGeneratorD1Ev @ 63 NONAME - _ZN22CVeiImageClipGeneratorD2Ev @ 64 NONAME - _ZN22CVeiTitleClipGenerator11CancelFrameEv @ 65 NONAME - _ZN22CVeiTitleClipGenerator11SetDurationERK25TTimeIntervalMicroSeconds @ 66 NONAME - _ZN22CVeiTitleClipGenerator13SetTextColorLERK4TRgb @ 67 NONAME - _ZN22CVeiTitleClipGenerator14GetFirstFrameLEv @ 68 NONAME - _ZN22CVeiTitleClipGenerator15FinishGetFrameLEi @ 69 NONAME - _ZN22CVeiTitleClipGenerator19SetBackgroundColorLERK4TRgb @ 70 NONAME - _ZN22CVeiTitleClipGenerator19SetBackgroundImageLEPK10CFbsBitmap @ 71 NONAME - _ZN22CVeiTitleClipGenerator19SetBackgroundImageLERK7TDesC16R30MVeiTitleClipGeneratorObserver @ 72 NONAME - _ZN22CVeiTitleClipGenerator19SetDescriptiveNameLERK7TDesC16 @ 73 NONAME - _ZN22CVeiTitleClipGenerator27SetTransitionAndAlignmentsLE23TVeiTitleClipTransition32TVeiTitleClipHorizontalAlignment30TVeiTitleClipVerticalAlignment @ 74 NONAME - _ZN22CVeiTitleClipGenerator4NewLERK5TSize23TVeiTitleClipTransition32TVeiTitleClipHorizontalAlignment30TVeiTitleClipVerticalAlignment @ 75 NONAME - _ZN22CVeiTitleClipGenerator5NewLCERK5TSize23TVeiTitleClipTransition32TVeiTitleClipHorizontalAlignment30TVeiTitleClipVerticalAlignment @ 76 NONAME - _ZN22CVeiTitleClipGenerator8SetTextLERK7TDesC16 @ 77 NONAME - _ZN22CVeiTitleClipGenerator9GetFrameLER35MVedVideoClipGeneratorFrameObserveriP5TSize12TDisplayModeii @ 78 NONAME - _ZN22CVeiTitleClipGeneratorD0Ev @ 79 NONAME - _ZN22CVeiTitleClipGeneratorD1Ev @ 80 NONAME - _ZN22CVeiTitleClipGeneratorD2Ev @ 81 NONAME - _ZN23CVeiVideoEditorSettings14GetMaxMmsSizeLERi @ 82 NONAME - _ZN23CVeiVideoEditorSettings26GetMediaPlayerVolumeLevelLERi @ 83 NONAME - _ZN23CVeiVideoEditorSettings26SetMediaPlayerVolumeLevelLEi @ 84 NONAME - _ZN8CLogFile10LogNewlineEv @ 85 NONAME - _ZN8CLogFile10StaticLogLERK7TDesC16RK6TDesC8 @ 86 NONAME - _ZN8CLogFile10StaticLogLERK7TDesC16S2_ @ 87 NONAME - _ZN8CLogFile12SetAutoFlushEi @ 88 NONAME - _ZN8CLogFile14SetAutoNewlineEi @ 89 NONAME - _ZN8CLogFile16SetAutoTimeStampEi @ 90 NONAME - _ZN8CLogFile3LogERK6TDesC8 @ 91 NONAME - _ZN8CLogFile3LogERK7TDesC16 @ 92 NONAME - _ZN8CLogFile3LogEh @ 93 NONAME - _ZN8CLogFile3LogEj @ 94 NONAME - _ZN8CLogFile4NewLERK7TDesC16i @ 95 NONAME - _ZN8CLogFile5NewLCERK7TDesC16i @ 96 NONAME - _ZN8CLogFile7LogTimeEv @ 97 NONAME - _ZN8CLogFile8LogBytesERK6TDesC8 @ 98 NONAME - _ZN8CLogFile9StaticLogERK7TDesC16RK6TDesC8 @ 99 NONAME - _ZN8CLogFile9StaticLogERK7TDesC16S2_ @ 100 NONAME - _ZN8CLogFileD0Ev @ 101 NONAME - _ZN8CLogFileD1Ev @ 102 NONAME - _ZN8CLogFileD2Ev @ 103 NONAME - _ZNK12CVeiAddQueue5CountEv @ 104 NONAME - _ZNK12TVeiSettings11MemoryInUseEv @ 105 NONAME - _ZNK12TVeiSettings11SaveQualityEv @ 106 NONAME - _ZNK12TVeiSettings12ExternalizeLER12RWriteStream @ 107 NONAME - _ZNK12TVeiSettings16DefaultVideoNameEv @ 108 NONAME - _ZNK12TVeiSettings19DefaultSnapshotNameEv @ 109 NONAME - _ZNK13CVeiTempMaker15EmptyTempFolderEv @ 110 NONAME - _ZNK13CVeiTempMaker20GenerateTempFileNameER7HBufC16N25CAknMemorySelectionDialog7TMemoryE15TVedVideoFormati @ 111 NONAME - _ZNK22CVeiImageClipGenerator13ImageFilenameEv @ 112 NONAME - _ZNK22CVeiImageClipGenerator15BackgroundColorEv @ 113 NONAME - _ZNK22CVeiImageClipGenerator15DescriptiveNameEv @ 114 NONAME - _ZNK22CVeiImageClipGenerator15VideoFrameCountEv @ 115 NONAME - _ZNK22CVeiImageClipGenerator17VideoFrameEndTimeEi @ 116 NONAME - _ZNK22CVeiImageClipGenerator17VideoFrameIsIntraEi @ 117 NONAME - _ZNK22CVeiImageClipGenerator18GetVideoFrameIndexE25TTimeIntervalMicroSeconds @ 118 NONAME - _ZNK22CVeiImageClipGenerator18VideoFrameDurationEi @ 119 NONAME - _ZNK22CVeiImageClipGenerator19VideoFrameStartTimeEi @ 120 NONAME - _ZNK22CVeiImageClipGenerator26VideoFrameDifferenceFactorEi @ 121 NONAME - _ZNK22CVeiImageClipGenerator31VideoFirstFrameComplexityFactorEv @ 122 NONAME - _ZNK22CVeiImageClipGenerator3UidEv @ 123 NONAME - _ZNK22CVeiImageClipGenerator8DurationEv @ 124 NONAME - _ZNK22CVeiTitleClipGenerator10TransitionEv @ 125 NONAME - _ZNK22CVeiTitleClipGenerator15BackgroundColorEv @ 126 NONAME - _ZNK22CVeiTitleClipGenerator15BackgroundImageEv @ 127 NONAME - _ZNK22CVeiTitleClipGenerator15DescriptiveNameEv @ 128 NONAME - _ZNK22CVeiTitleClipGenerator15VideoFrameCountEv @ 129 NONAME - _ZNK22CVeiTitleClipGenerator17VerticalAlignmentEv @ 130 NONAME - _ZNK22CVeiTitleClipGenerator17VideoFrameEndTimeEi @ 131 NONAME - _ZNK22CVeiTitleClipGenerator18GetVideoFrameIndexE25TTimeIntervalMicroSeconds @ 132 NONAME - _ZNK22CVeiTitleClipGenerator18VideoFrameDurationEi @ 133 NONAME - _ZNK22CVeiTitleClipGenerator19HorizontalAlignmentEv @ 134 NONAME - _ZNK22CVeiTitleClipGenerator19VideoFrameStartTimeEi @ 135 NONAME - _ZNK22CVeiTitleClipGenerator26VideoFrameDifferenceFactorEi @ 136 NONAME - _ZNK22CVeiTitleClipGenerator31VideoFirstFrameComplexityFactorEv @ 137 NONAME - _ZNK22CVeiTitleClipGenerator3UidEv @ 138 NONAME - _ZNK22CVeiTitleClipGenerator4TextEv @ 139 NONAME - _ZNK22CVeiTitleClipGenerator8DurationEv @ 140 NONAME - _ZNK22CVeiTitleClipGenerator9TextColorEv @ 141 NONAME - _ZTI12CVeiAddQueue @ 142 NONAME ; ## - _ZTI22CVeiImageClipGenerator @ 143 NONAME ; ## - _ZTI22CVeiTitleClipGenerator @ 144 NONAME ; ## - _ZTI27CVeiImageClipFrameOperation @ 145 NONAME ; ## - _ZTI28CVeiImageClipDecodeOperation @ 146 NONAME ; ## - _ZTI33CVeiTitleClipImageDecodeOperation @ 147 NONAME ; ## - _ZTV12CVeiAddQueue @ 148 NONAME ; ## - _ZTV22CVeiImageClipGenerator @ 149 NONAME ; ## - _ZTV22CVeiTitleClipGenerator @ 150 NONAME ; ## - _ZTV27CVeiImageClipFrameOperation @ 151 NONAME ; ## - _ZTV28CVeiImageClipDecodeOperation @ 152 NONAME ; ## - _ZTV33CVeiTitleClipImageDecodeOperation @ 153 NONAME ; ## - _ZThn4_N19CVeiMGFetchVerifier16VerifySelectionLEPK12MDesC16Array @ 154 NONAME ; ## - _ZThn4_N19CVeiMGFetchVerifierD0Ev @ 155 NONAME ; ## - _ZThn4_N19CVeiMGFetchVerifierD1Ev @ 156 NONAME ; ## - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/data/VideoEditorCommon.rss --- a/videditor/VideoEditorCommon/data/VideoEditorCommon.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -NAME VECM - -// INCLUDES -#include -#include -#include -#include -#include -#include - -//#include "manualvideoeditor.loc" -#include "videoeditorcommon.hrh" - -RESOURCE RSS_SIGNATURE { } - -RESOURCE TBUF r_vei_note_drm_not_allowed { buf = qtn_drm_not_allowed; } - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/group/VideoEditorCommon.mmp --- a/videditor/VideoEditorCommon/group/VideoEditorCommon.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// To get the APP_LAYER_SYSTEMINCLUDE-definition -#include - -#include -#include "../../Group/buildconfig.hrh" - -#if defined( __DEBUG_ON__ ) -MACRO DEBUG_ON -#endif -#if defined( __DEBUG_ON_ALWAYS__ ) -MACRO DEBUG_ON_ALWAYS -#endif -#if defined(__DEBUG_ON__) || defined(__DEBUG_ON_ALWAYS__) -LIBRARY flogger.lib -#endif - - -TARGET VideoEditorCommon.dll -TARGETTYPE DLL -CAPABILITY CAP_GENERAL_DLL -UID 0x1000008d 0xA0000303 - - -USERINCLUDE ../inc -USERINCLUDE ../data - -// Default system include paths for application layer modules. -APP_LAYER_SYSTEMINCLUDE - -SOURCEPATH ../src -SOURCE VideoEditorUtils.cpp -SOURCE VeiTitleClipGenerator.cpp -SOURCE VeiImageClipGenerator.cpp -SOURCE VeiAddQueue.cpp -SOURCE VeiSettings.cpp -SOURCE VeiVideoEditorSettings.cpp -SOURCE VeiImageConverter.cpp -SOURCE VeiTempMaker.cpp -SOURCE VeiFrameTaker.cpp -SOURCE VeiDisplayLighter.cpp -SOURCE VeiMGFetchVerifier.cpp -SOURCE VeiRemConTarget.cpp -SOURCE logfile.cpp - -SOURCEPATH ../data -START RESOURCE VideoEditorCommon.rss -HEADER -TARGET VideoEditorCommon.rsc -TARGETPATH RESOURCE_FILES_DIR -LANGUAGE_IDS -END - -LIBRARY apparc.lib -LIBRARY avkon.lib -LIBRARY bafl.lib -LIBRARY bitgdi.lib -LIBRARY BitmapTransforms.lib -LIBRARY centralrepository.lib -LIBRARY charconv.lib // for CLogFile -LIBRARY commonengine.lib -LIBRARY cone.lib -LIBRARY DRMCommon.lib -LIBRARY efsrv.lib -LIBRARY eikcore.lib -LIBRARY eikctl.lib -LIBRARY estor.lib -LIBRARY euser.lib -LIBRARY fbscli.lib -LIBRARY FontUtils.lib -LIBRARY gdi.lib -LIBRARY hal.lib // for CLogFile -LIBRARY ImageConversion.lib -LIBRARY MGFetch.lib -LIBRARY platformenv.lib -LIBRARY remconcoreapi.lib -LIBRARY remconinterfacebase.lib -LIBRARY ServiceHandler.lib -LIBRARY sysutil.lib -LIBRARY VedEngine.lib -LIBRARY ws32.lib -LIBRARY MPEngine.lib - -NOSTRICTDEF - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/group/bld.inf --- a/videditor/VideoEditorCommon/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include - -#include "../../Group/buildconfig.hrh" - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -// ROM description files -../rom/VideoEditorCommon.iby CORE_APP_LAYER_IBY_EXPORT_PATH(VideoEditorCommon.iby) -../rom/VideoEditorCommon_resource.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(VideoEditorCommon_resource.iby) - -PRJ_MMPFILES -../Group/VideoEditorCommon.mmp - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/ManualVideoEditor.loc --- a/videditor/VideoEditorCommon/inc/ManualVideoEditor.loc Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1214 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -//d: Caption of the application -//l: list_single_large_graphic_pane_1 -#define qtn_app_caption_string "Video Editor" - -//d: Short format of the caption -//l: cell_app_pane_1 -#define qtn_app_short_caption_string "Vid. editor" - -//d: Text in the navi pane. -//d: Shows elapsed time and total length of the video. -//l: navi_pane_4 -#define qtn_time_prog_total_min_sec "%0U/%1U" - -//d: Text in the Edit view navi pane when -//d: text title or image selected on the video timeline -//d: and Edit text-Change duration in options menu pressed. -//l: navi_pane_3 -#define qtn_vei_navi_change_text_duration "Change duration" - -//d: Command in the Small Preview popup menu -//d: Plays the selected video clip -//l: list_single_popup_menu_pane_1 -#define qtn_vei_cmd_play "Play" - -//d: Command in the Preview popup menu and Cut Video view menu. -//d: Takes snapshot from current frame -//l: list_single_popup_menu_pane_1 -#define qtn_vei_cmd_take_snapshot "Take snapshot" - -//d: Shows confirmation note of saving the movie. -//l: popup_note_window_1 -#define qtn_vei_confirmation_note_quit_save "Save changes made to video clip?" - -//d: Command in the Cut Video view menu -//d: Opens the Remove submenu. -//l: list_single_popup_menu_pane_1 -#define qtn_vei_cut_video_cmd_clear_marks "Remove" - -//d: Command in the Remove submenu -//d: Removes the In mark -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_cut_video_cmd_clear_marks_in "Start mark" - -//d: Command in the Remove submenu -//d: Removes both marks (In & Out) -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_cut_video_cmd_clear_marks_in_out "All marks" - -//d: Command in the Remove submenu -//d: Removes the Out mark -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_cut_video_cmd_clear_marks_out "End mark" - -//d: Command in the Cut Video view menu -//d: Continues playing the clip -//l: list_single_popup_menu_pane_1 -#define qtn_vei_cut_video_cmd_continue "Play and mark" - -//d: Text for the right softkey in Cut Video View -//d: Sets the mark in position. -//l: control_pane_1 -#define qtn_vei_mark_in "Start mk." - -//d:Command in the Cut Video view menu -//d:and option in popup menu when selection key is pressed. -//l:list_single_popup_menu_pane_1 -#define qtn_vei_cut_video_cmd_mark_in "Start mark" - -//d: Text for the left softkey in Cut Video View -//d: Sets the mark out position. -//l: control_pane_1 -#define qtn_vei_mark_out "End mark" - -//d:Command in the Cut Video view menu -//d:and option in popup menu when selection key is pressed. -//l:list_single_popup_menu_pane_1 -#define qtn_vei_cut_video_cmd_mark_out "End mark" - -//d: Command in the Cut Video view menu -//d: Plays the clip -//l: list_single_popup_menu_pane_1 -#define qtn_vei_cut_video_cmd_play "Play and mark" - -//d: Command in the Cut Video view menu -//d: Plays the clip -//l: list_single_popup_menu_pane_1 -#define qtn_vei_cut_video_cmd_play_marked "Play marked section" - -//d: Command in the Cut Video view menu -//d: Stops playing the clip -//l: list_single_popup_menu_pane_1 -#define qtn_vei_cut_video_cmd_stop "Stop" - -//d: The title of the Cut Video view. -//l: title_pane_1 -#define qtn_vei_cut_video_title_cut_video "Cut video" - - -//d: File name prompt dialog is used to file naming -//d: in various situations. -//l: popup_list_heading_pane_1 -#define qtn_vei_data_query_set_file_name "File name:" - -//d: The title of the Large Preview and Small Preview views -//l: title_pane_1 -#define qtn_vei_edit_preview_title_preview "Preview" - -//d: The title of the Transition edit view. -//l: title_pane_1 -#define qtn_vei_edit_transition_title_transition "Edit transition" - -//d: Command in the Edit Video/EditAudio sub menu. -//d: Copy-paste selected video/audio. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_duplicate "Duplicate" - -//d: Command in the Edit menu when the Edit Audio option -//d: is selected. -//d: Opens the audio editing sub menu. -//l: list_single_popup_menu_pane_1 -#define qtn_vei_edit_video_cmd_edit_audio "Edit sound clip" - -//d: Command in the Edit menu. -//d: Opens the Edit Transition sub menu. -//l: list_single_popup_menu_pane_1 -#define qtn_vei_edit_video_cmd_edit_tran "Edit Transition" - -//d: Command in the Edit menu when the Edit Transition option -//d: is selected. -//d: Adds the fade to black middle transition. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_tran_dip_to_black "Dip to black" - -//d: Command in the Edit menu when the Edit Transition option -//d: is selected. -//d: Adds the fade to white middle transition. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_tran_dip_to_white "Dip to white" - -//d: Command in the transition menu when the Edit Transition option -//d: is selected. -//d: Adds the fade from black start transition. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_tran_fade_from_black "Fade from black" - -//d: Command in the Edit menu when the Edit Transition option -//d: is selected. -//d: Adds the fade from white start transition. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_tran_fade_from_white "Fade from white" - -//d: Command in the Edit menu when the Edit Transition option -//d: is selected. -//d: Adds the fade to black end transition. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_tran_fade_to_black "Fade to black" - -//d: Command in the Edit menu when the Edit Transition option -//d: is selected. -//d: Adds the fade to white end transition. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_tran_fade_to_white "Fade to white" - -//d: Command in the Edit Transition sub. -//d: Removes the current transition. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_tran_no_tran "No transition" - -//d: Command in the Edit menu. -//d: Opens sub menu for editing the video -//l: list_single_popup_menu_pane_1 -#define qtn_vei_edit_video_cmd_edit_video "Edit video clip" - -//d: Command in the Edit submenu when the Edit Video option -//d: is selected. -//d: Adds color effect to the video. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_video_color_effect "Add colour effect" - -//d: Command in the Edit submenu when the Edit Video/Audio option -//d: is selected. -//d: Starts the cutting of the video/audio -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_video_cutting "Cut" - -//d: Command in the Edit submenu when the Edit Video option -//d: is selected. -//d: Moves the clip. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_video_move "Move" - -//d: Command in the popup menu when in the navikey is -//d: is pressed in the Edit mode. -//d: Mutes the audio -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_video_mute "Mute sound" - -//d: Command in the Edit submenu when the Edit Video Option -//d: is selected. -//d: Removes the clip. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_video_remove "Remove" - -//d: Command in the Edit submenu when the Edit Video Option -//d: is selected. -//d: Adds slow motion effect -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_video_slow_motion "Use slow motion" - -//d: Command in the popup menu when in the navikey -//d: is pressed in the Edit mode. -//d: Unmutes the audio -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_video_unmute "Unmute sound" - -//d: Command in the Edit menu. -//d: Opens the Insert submenu -//l: list_single_popup_menu_pane_1 -#define qtn_vei_edit_video_cmd_insert "Insert" - -//d: Command in the Edit menu when the Insert option -//d: is selected. -//d: Inserts an audio track. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_insert_audio "Sound clip" - -//d: Command in the Edit menu when the Insert option -//d: is selected. -//d: Records a new audio track. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_insert_new_audio "New sound clip" - -//d: Command in the Edit menu when the Insert option -//d: is selected. -//d: Inserts a clip. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_insert_video "Video clip" - -//d: Command in the Edit view Movie submenu. -//d: Opens the Preview submenu. -//l: list_single_popup_menu_pane_1 -#define qtn_vei_edit_video_cmd_preview "Preview" - -//d: Command in the Edit view Movie submenu. -//d: Saving the video. -//l: list_single_popup_menu_pane_1 -#define qtn_vei_edit_video_cmd_save_to "Save" - -//d: Text in the main pane, which is shown when the fade to black -//d: middle transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_dip_to_black "Dip to black" - -//d: Text in the main pane, which is shown when the fade to white -//d: middle transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_dip_to_white "Dip to white" - -//d: Text in the main pane, which is shown when the fade from black -//d: start transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_fade_from_black "Fade from black" - -//d: Text in the main pane, which is shown when the fade from white -//d: start transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_fade_from_white "Fade from white" - -//d: Text which is shown when the fade from black -//d: end transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_fade_to_black "Fade to black" - -//d: Text in the main pane, which is shown when the fade from white -//d: end transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_fade_to_white "Fade to white" - -//d: Text in the main pane, which is shown when "no transition" set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_no "No transition" - -// -// Main pane - Text clip descriptive name -// - -//d: Text in the main pane when video clip selected on -//d: the timeline. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_text_t "Title" - -//d: Text in the main pane when video clip selected on -//d: the timeline. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_text_tf "Title (fading)" - -//d: Text in the main pane when video clip selected on -//d: the timeline. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_text_subt "Subtitle" - -//d: Text in the main pane when video clip selected on -//d: the timeline. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_text_subtf "Subtitle (fading)" - -//d: Text in the main pane when video clip selected on -//d: the timeline. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_text_credit "Credits" - - -//d: The title of the Edit View -//l: title_pane_1 -#define qtn_vei_edit_video_title_edit_video "Edit video" - -//d: Query heading text -//l: popup_list_heading_pane_1 -#define qtn_vei_list_query_select_effect "Select effect:" - -//d: Option in effect dialog. Black & white effect. -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_effect_black_white "Black and white" - -//d: Option in effect dialog. Removes effect if any -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_effect_no_effect "No effect" - -//d: Query heading text -//l: popup_list_heading_pane_1 -#define qtn_vei_list_query_select_tran_title "Select transition:" - -//d: Option in list query when selection key is pressed -//d: and video/audio clip is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_video_cut "Cut" - -//d: Option in list query when selection key is pressed -//d: and video clip is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_video_color_effect "Add colour effect" - -//d: Option in list query when selection key is pressed -//d: and video clip or audio clip is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_video_move "Move" - -//d: Option in list query when selection key is pressed -//d: and video clip is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_video_mute "Mute sound" - -//d: Option in list query when selection key is pressed -//d: and video clip or audio clip is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_video_remove "Remove" - -//d: Option in list query when selection key is pressed -//d: and video clip is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_video_slow_motion "Use slow motion" - -//d: Option in list query when selection key is pressed -//d: and video clip is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_video_unmute "Unmute sound" - -//d: Text in the navi pane when moving audio clip -//l: navi_pane_2 -#define qtn_vei_navilabel_move_audio "Moving sound clip" - -//d: Text in the navi pane when moving video clip -//l: navi_pane_2 -#define qtn_vei_navilabel_move_video "Moving video clip" - -//d: Shows progress note of applying color effect -//l: popup_note_wait_window_1 -#define qtn_vei_progress_note_applying_color_effect "Applying color effect" - -//d: Shows progress note of cutting video clip. -//l: popup_note_wait_window_1 -#define qtn_vei_progress_note_cutting_video "Cutting video clip" - -//d: Shows progress note of preparing to cut. -//l: popup_note_wait_window_1 -#define qtn_vei_progress_note_preparing_to_cut "Processing clip" - -//d: Shows progress note when sending video -//l: popup_note_wait_window_1 -#define qtn_vei_progress_note_preparing_to_send "Processing movie for Send" - -//d: Softkey record in the Edit Video view. -//d: Starts recording the audio -//l: control_pane_1 -#define qtn_vei_record "Record" - -//d: Error note when recording audio failed -//l: popup_note_window_1 -#define qtn_vei_recording_failed "Unable to record" - -//d: List title in the Settings view -//l: list_setting_pane_1 -#define qtn_vei_settings_label1_default_movie_name "Default video name" - -//d: List title in the Settings view -//l: list_setting_pane_1 -#define qtn_vei_settings_label2_default_snapshot_name "Default snapshot name" - -//d: List title in the Settings view -//l: list_setting_pane_1 -#define qtn_vei_settings_label3_memory_in_use "Memory in use" - -//d: The title of the Settings view -//l: title_pane_1 -#define qtn_vei_settings_title_settings "Settings" - -//d: Default name for the movie -//l: list_setting_pane_2 -#define qtn_vei_settings_value1_movie "Video" - -//d: Default name for the snapshot -//l: list_setting_pane_2 -#define qtn_vei_settings_value2_snapshot "Snapshot" - -//d: Error note when inserting video failed -//d: video format is not supported -//l: popup_note_window_1 -#define qtn_vei_video_failed "Unable to insert video clip" - - -//d: Title pane text in Cut Audio View. -//l: title_pane_1 -#define qtn_vei_cut_audio_title "Cut sound" - -//d: Option in popup menu when selection key is pressed -//d: and some of the transitions is already selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_no_tran "No transition" - -//d: Option in popup menu when selection key is pressed -//d: and between transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_dip_to_black "Dip to black" - -//d: Option in popup menu when selection key is pressed -//d: and between transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_dip_to_white "Dip to white" - -//d: Option in popup menu when selection key is pressed -//d: and start transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_fade_from_black "Fade from black" - -//d: Option in popup menu when selection key is pressed -//d: and start transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_fade_from_white "Fade from white" - -//d: Option in popup menu when selection key is pressed -//d: and end transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_fade_to_black "Fade to black" - -//d: Option in popup menu when selection key is pressed -//d: and end transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_fade_to_white "Fade to white" - -//d: Option in popup menu when selection key is pressed -//d: and video/audio clip is selected. -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_video_duplicate "Duplicate" - -//d: Title of the popup menu when selection key is pressed -//l: popup_list_heading_pane_1 -#define qtn_vei_list_query_insert_sound_type "Insert:" - -//d: Option in popup menu when selection key is pressed -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_insert_sound_type_sound "Sound clip" - -//d: Option in popup menu when selection key is pressed -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_insert_sound_type_new_audio "Record sound clip" - -//d: Command in the Edit Audio sub menu. -//d: Moves the audio track. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_audio_move "Move" - -//d: Command in the Edit Audio sub menu. -//d: Removes audio track. -//l: list_single_popup_submenu_pane_1 -#define qtn_vei_edit_video_cmd_edit_audio_remove "Remove" - -//d:Information note to show when memory card is not accessible, -//d:but it's selected as current storage. -//l:popup_note_window_1 -#define qtn_ved_mmc_not_inserted "Memory card not accessible. Phone memory will be used instead." - -//d:Wait note. -//l:popup_note_wait_window_1 -#define qtn_ved_inserting_video "Inserting video clip" - -//d:Wait note. -//l:popup_note_wait_window_1 -#define qtn_ved_inserting_mult_media "Inserting media %0N/%1N" - -//d:Wait note / progress note. -//l:popup_note_wait_window_1 -#define qtn_ved_inserting_audio "Inserting sound clip" - -//d:Wait note. -//l:popup_note_wait_window_1 -#define qtn_ved_inserting_image "Inserting image" - -//d:Wait note. -//l:popup_note_wait_window_1 -#define qtn_ved_saving_snapshot "Saving snapshot to Gallery" - -//d:Progress note. -//l:popup_note_wait_window_1 -#define qtn_ved_processing_for_mms "Processing movie for MMS" - -//d:Progress note. -//l:popup_note_wait_window_1 -#define qtn_ved_processing_movie "Processing movie" - -//d:Error note. -//l:popup_note_window_1 -#define qtn_ved_audio_format_not_supported "Sound format not supported" - -//d:Error note. -//l:popup_note_window_1 -#define qtn_ved_image_insert_failed "Unable to insert image" - -//d:Error note. -//l:popup_note_window_1 -#define qtn_ved_audio_insert_failed "Unable to insert sound clip" - -//d:Warning note. -//l:popup_note_window_1 -#define qtn_ved_inserting_failed_continue "Inserting %U failed. Continue?" - -//d:Main pane (Trim for MMS) -//l:main_pane_1_empty -#define qtn_ved_trim_start "Start:" - -//d:Main pane (Trim for MMS) -//l:main_pane_1_empty -#define qtn_ved_trim_end "End:" - -//d: Text on navi pane when select video. -//l: navi_pane_3 -#define qtn_vei_navi_pane_mms "MMS" - -//d: Text on navi pane when select video. -//l: navi_pane_3 -#define qtn_vei_size_mb " %U MB" - -//d: Command in the Edit view Insert-submenu -//d: when video clip selected on the timeline. -//d: Adds image to the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_insert_image "Image" - -//d: Command in the Edit view Insert-submenu -//d: when video clip selected on the timeline. -//d: Opens text popup menu. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_insert_text "Text" - -// -//Options Edit text submenu -// - -//d: Command in the Edit view menu -//d: when text title selected on the timline. -//d: Opens the "Edit text" submenu. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_editt "Edit text" - -//d: Command in the Edit view Edit text-submenu -//d: when text title selected on the timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_move "Move" - -//d: Command in the Edit view Edit text-submenu -//d: when text title selected on the timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_remove "Remove" - -//d: Command in the Edit view Edit text-submenu -//d: when text title selected on the timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_duplicate "Duplicate" - -//d: Command in the Edit view Edit audio / Edit text-submenu -//d: when text title selected on the timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_dur "Change duration" - -//d: Command in the Edit view Edit text-submenu -//d: when text title selected on the timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_text "Change text" - -//d: Command in the Edit view Edit text-submenu -//d: when text title selected on the timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_color "Set text color" - -//d: Command in the Edit view Edit text-submenu -//d: when text title selected on the timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_bg "Set backgroud" - -//d: Command in the Edit view Edit text-submenu -//d: when text title selected on the timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_style "Style" - -//d: Command in the Edit view Edit text-submenu -//d: when text title selected on the timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_color_effect "Add color effect" - - -//Edit text-Style popup menu and Insert-Text popup menu - - -//d: Command in the Edit view Insert-Text and Edit text-Style popup menu -//d: when video clip selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text_t "Title" - -//d: Command in the Edit view Insert-Text and Edit text-Style popup menu -//d: when video clip selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text_tf "Title (fading)" - -//d: Command in the Edit view Insert-Text and Edit text-Style popup menu -//d: when video clip selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text_subt "Subtitle" - -//d: Command in the Edit view Insert-Text and Edit text-Style popup menu -//d: when video clip selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text_subtf "Subtitle (fading)" - -//d: Command in the Edit view Insert-Text and Edit text-Style popup menu -//d: when video clip selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text_credit "Credits" - - -//Options Edit image submenu - - -//d: Command in the Edit view menu -//d: when image selected on the video timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_editi "Edit image" - -//d: Command in the Edit view Edit image submenu -//d: when image selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editi_move "Move" - -//d: Command in the Edit view Edit image submenu -//d: when image selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editi_remove "Remove" - -//d: Command in the Edit view Edit image submenu -//d: when image selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editi_duplicate "Duplicate" - -//d: Command in the Edit view Edit image submenu -//d: when image selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editi_dur "Change duration" - -//d: Command in the Edit view Edit image submenu -//d: when image selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editi_bg "Set background" - -//d: Command in the Edit view Edit image submenu -//d: when image selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editi_color_effect "Add color effect" - -//Edit text and Edit image popup menus - -//d: Option in popup menu when Edit text -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_editt_text "Change text" - -//d: Option in popup menu when Edit text -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_editt_color "Set text color" - -//d: Option in popup menu when Edit text / Edit image -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_editt_bg "Set background" - -//d: Option in popup menu when Edit text -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_editt_style "Style" - -//d: Pop-up menu title when Edit text - Set background -//d: in option menu in Edit view selected. -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_smenu_editt_select_heading_background "Select background:" - -//d: Option in popup menu when Edit text - Set background -//d: in option menu in Edit view selected. -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_editt_select_bg_image "Image" - -//d: Option in popup menu when Edit text - Set background -//d: in option menu in Edit view selected. -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_editt_select_bg_color "Color" - -//d: Command in the Edit view Edit transition submenu -//d: when transition selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_cf "Crossfade" - -//d: Command in the Edit view Edit transition submenu -//d: when transition selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_wipet "Wipe from top" - -//d: Command in the Edit view Edit transition submenu -//d: when transition selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_wipeb "Wipe from bottom" - -//d: Command in the Edit view Edit transition submenu -//d: when transition selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_wipel "Wipe from left" - -//d: Command in the Edit view Edit transition submenu -//d: when transition selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_editt_wiper "Wipe from right" - -//d: Command in the Edit view Movie submenu -//d: when video clip selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_movie_mms "Trim for Mms" - -//d: Command in the Edit view Movie - Preview submenu -//d: when video clip selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_movie_lpreview "Large" - -//d: Command in the Edit view Movie - Preview submenu -//d: when transition selected on the video timeline. -//l: list_single_popup_submenu_pane_1 -#define qtn_ved_smenu_movie_spreview "Small" - -//d: Command in the Edit view menu -//d: Opens the Settings view. -//l: list_single_popup_menu_pane_1 -#define qtn_options_settings "Settings" - -//d: Command in the Edit view menu -//d: Opens the Movie submenu. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_movie "Movie" - -//d: Title of the popup menu when selection key is pressed -//d: when video timeline empty. -//l: popup_list_heading_pane_1 -#define qtn_ved_menu_title_insert_video "Insert:" - -//d: Title of the popup menu when selection key is pressed -//d: and focus is on text clip. -//l: popup_list_heading_pane_1 -#define qtn_ved_menu_title_edit_text "Edit text:" - -//d: Title of the popup menu when selection key is pressed -//d: and focus is on image clip. -//l: popup_list_heading_pane_1 -#define qtn_ved_menu_title_edit_image "Edit image:" - -//d: Title of the popup menu when selection key is pressed -//d: and focus is on video clip. -//l: popup_list_heading_pane_1 -#define qtn_ved_menu_title_edit_video "Edit video:" - -//d: Title of the popup menu when selection key is pressed -//d: and focus is on audio clip. -//l: popup_list_heading_pane_1 -#define qtn_ved_menu_title_edit_audio "Edit sound:" - -//d: Option in popup menu when selection key is pressed -//d: when video timeline empty. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_video "Video clip" - -//d: Option in popup menu when selection key is pressed -//d: when video timeline empty. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_image "Image" - -//d: Title of the popup menu when selection key is pressed -//d: when text title selected on the timeline. -//l: popup_list_heading_pane_1 -#define qtn_ved_smenu_heading_editt "Select style:" - -//d: Option in popup menu when selection key is pressed -//d: when video timeline empty. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text "Text" - -//d: Option in popup menu when selection key is pressed -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text_t "Title" - -//d: Option in popup menu when selection key is pressed -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text_tf "Title (fading)" - -//d: Option in popup menu when selection key is pressed -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text_subt "Subtitle" - -//d: Option in popup menu when selection key is pressed -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text_subtf "Subtitle (fading)" - -//d: Option in popup menu when selection key is pressed -//d: when text title selected on the timeline. -//l: list_single_popup_menu_pane_1 -#define qtn_ved_menu_insert_text_credit "Credits" - -// Main pane - -//d: Text in in the Edit view main pane -//d: in landscape orientation, -//d: when video clip inserted -//l: main_pane_1_empty -#define qtn_ved_edit_video_duration "Dur.:" - -//d: Text in the Cut view main pane. -//l: main_pane_1_empty -#define qtn_ved_cut_video_in "In:" - -//d: Text in the Cut view main pane. -//l: main_pane_1_empty -#define qtn_ved_cut_video_out "Out:" - -//d: Text in the Edit view main pane -//d: when empty video timeline. -//l: main_pane_1_empty -#define qtn_ved_edit_video_no_video "No video" - -//d: Text in the Edit view main pane -//d: when empty audio timeline. -//l: main_pane_1_empty -#define qtn_ved_edit_video_no_audio "No sound" - -//d: Text on the main pane, which is shown -//d: when the crossfade transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_crossfade "Crossfade" - -//d: Text on the main pane, which is shown -//d: when the Wipe left to right transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_wipe_left "Wipe left to right" - -//d: Text on the main pane, which is shown -//d: when the Wipe right to left transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_wipe_right "Wipe right to left" - -//d: Text on the main pane, which is shown -//d: when the Wipe top to bottom transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_wipe_top "Wipe top to bottom" - -//d: Text on the main pane, which is shown -//d: when the Wipe bottom to top transition set. -//l: main_pane_1_empty -#define qtn_vei_edit_video_main_tran_wipe_bottom "Wipe bottom to top" - -//d: Option in popup menu when selection key is pressed -//d: and transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_crossfade "Crossfade" - -//d: Option in popup menu when selection key is pressed -//d: and transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_wipe_left "Wipe left to right" - -//d: Option in popup menu when selection key is pressed -//d: and transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_wipe_right "Wipe right to left" - -//d: Option in popup menu when selection key is pressed -//d: and transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_wipe_top "Wipe top to bottom" - -//d: Option in popup menu when selection key is pressed -//d: and transition is selected -//l: list_single_popup_menu_pane_1 -#define qtn_vei_list_query_select_tran_wipe_bottom "Wipe bottom to top" - -//d: Enter text prompt dialog when -//d: Insert-Text selected. -//l: popup_list_heading_pane_1 -#define qtn_vei_textinserting_for_title_screen "Enter text" - -//d: List title in the Settings view -//l: list_setting_pane_1 -#define qtn_vei_setting_item_save_quality "Save quality" - -//d: Save quality option in enumerated text list; -//d: output resolution is resolved automatically. -//l: list_setting_pane_2 -#define qtn_vei_save_quality_auto "Auto" - -//d: Save quality option in enumerated text list; -//d: output resolution is MMS compatible. -//l: list_setting_pane_2 -#define qtn_vei_save_quality_mms "MMS compatible" - -//d: Save quality option in enumerated text list; -//d: output resolution is best possible (CIF). -//l: list_setting_pane_2 -#define qtn_vei_save_quality_best "Best" - -//d: Command in the "Trim for MMS" view options menu -//d: Sends the trimmed video via multimedia -//l: list_single_popup_menu_pane_1 -#define qtn_vei_menu_send_via_mms "Send via MMS" - -//d: Command in the "Trim for MMS" view options menu -//d: Previews the trimmed video in full screen -//l: list_single_popup_menu_pane_1 -#define qtn_vei_menu_preview "Preview" - -//d: Command in the "Trim for MMS" view options menu -//d: Adjusts the size of the fork in video timeline -//l: list_single_popup_menu_pane_1 -#define qtn_vei_menu_video_length "Adjust video length" - -//d: The title of the "Trim for MMS" view -//l: title_pane_1 -#define qtn_vei_trim_mms_title "Trim for MMS" - -//d: Idlestate softkey text -//l: control_pane_1 -#define qtn_vei_idle_mode "Video Editor" - -//d: Text on the main pane, -//d: -//l: -#define qtn_vei_edit_video_main_new_audio "New sound clip" - -//d: Information note when movie saved -//l:popup_note_window_1 -#define qtn_vei_edit_video_note_saved "Video Saved" - -//d: Text in the Edit view navi pane when -//d: audio selected -//d: and Edit sound clip-Set duration in options menu pressed. -//l: navi_pane_3 -#define qtn_vei_navi_change_audio_duration "Clip duration" - -//d: Confirmation note. The user has launched the Video editor in the portrait mode and -//d: is inserting text to the editing window. Before saving the text s/he turns the phone -//d: to landscape mode, which interrupts the input -the keypad only works in the landscape -//d: mode. The user is asked whether s/he wants to continue editing the text. To do that s/he -//d: should turn the phone back to portrait mode. Twisting the phone back to portrait mode -//d: allows the user to continue inserting text. Accepting the query discards the note and -//d: the user stays in the landscape mode. \n -//l: popup_note_window_t5 -#define qtn_vei_confirm_note_cancel_textinsert "To continue entering text, phone must be in portrait mode. Delete text?" - -//d: Options list item, command. This allows the user to change the duration of the text -//d: that is seen on the display. This is one of the options in the list the heading text -//d: of which is (qtn_ved_menu_title_edit_text/manualvideoeditor). -//l: list_single_pane_t1_cp2 -#define qtn_ved_menu_editt_dur "Set duration" - -//d: Confirmation note. Seen after the user has taken a snapshot and it has been saved. -//l: popup_note_window -#define qtn_vei_note_snapshot_saved "Snapshot saved" - -//d: Confirmation note. This is seen in case the snapshot has been taken with Edit key and -//d: it will be saved to Images folder. -//l: popup_note_window -#define qtn_vei_note_snapshot_taken_to_images "Snapshot saved to Images" - - -//d:Command in the AIW provider's Edit submenu -//Starts the simple "2Click" Merge video applcation -//l:list_single_popup_submenu_pane_t1 -#define qtn_vei_menu_merge "Merge" - -//d:Command in the AIW provider's Edit submenu -//Starts the simple "2Click" Add audio application -//l:list_single_popup_submenu_pane_t1 -//#define qtn_vei_menu_add_audio "Add sound" - -//d:Command in the AIW provider's Edit submenu -//Starts the simple "2Click" Add text application -//l:list_single_popup_submenu_pane_t1 -#define qtn_vei_menu_add_text "Add text" - -//d:Command in the AIW provider's Edit submenu -//Starts the simple "2Click" Cut video application -//l:list_single_popup_submenu_pane_t1 -#define qtn_vei_menu_cut "Cut" - -//d:Command in the AIW provider's Edit submenu -//d:Starts the full video editor application -//l:list_single_popup_submenu_pane_t1 -#define qtn_vei_menu_advanced "Video editor" - -//d:Query heading text -//d:for the location to insert an image in a movie (begining/end?) -//l:heading_pane_t1 -#define qtn_vei_menu_insert_image "Add image to:" - -//d:Query heading text -//d:for the location to insert text in a movie (begining/end?) -//l:heading_pane_t1 -#define qtn_vei_menu_insert_text "Add text to:" - -//d:Select to insert text, image etc. -//d:into the begining of the movie -//l:list_single_pane_t1_cp2 -#define qtn_vei_menu_insert_point_begin "Beginning" - -//d:Select to insert text, image etc. into the -//d:end of the movie -//l:list_single_pane_t1_cp2 -#define qtn_vei_menu_insert_point_end "End" - -//d:Progress note for merging videos -//l:popup_note_wait_window -#define qtn_vei_note_merging "Merging" - -//d:Progress note for porocessing "add sound" -//l:popup_note_wait_window -//#define qtn_vei_note_adding_audio "Adding sound" - -//d:Progress note for porocessing "add text" -//l:popup_note_wait_window -#define qtn_vei_note_adding_text "Adding text" - -//d:Progress note for processing "Cut video", i.e. -//d:the 2Click cut video -//l:popup_note_wait_window -#define qtn_vei_note_cutting "Cutting" - -//d:Command to launch "Adjust audio volume" -functionality -//l:list_single_pane_t1_cp2 -#define qtn_vei_edit_video_cmd_edit_adj_vol "Adjust volume" - -//d:Command to launch audio mixing -//l:list_single_pane_t1_cp2 -#define qtn_vei_edit_video_cmd_audio_mix "Sound mixing" - -//d:List query heading text. -//d:This list query is used to select whether image files -//d:or video clips are listed. It is used at least with the -//d:"Merge" functionality (qtn_vei_menu_merge), where -//d:the user can merge a video clip with another video clip, -//d:or alternatively with an image file. -//l:heading_pane_t1 -#define qtn_vei_menu_select "Select:" - -//d:Select to list the image files from the Media gallery. -//d:(list query item) -//l:list_single_pane_t1_cp2 -#define qtn_vei_menu_select_image "Image" - -//d:Select to list the video clips from the Media gallery. -//d:(list query item) -//l:list_single_pane_t1_cp2 -#define qtn_vei_menu_select_video "Video clip" - -//d:New text -//d:Used but not localized -//d:One option in selecting video resolution in settings (check list item) -//l: list_set_graphic_pane_t1 -#define qtn_vei_save_quality_medium "Medium" - -//d:New text -//d:Command in the AIW provider's Edit submenu -//Starts the simple "2Click" Change sound application -//l:list_single_popup_submenu_pane_t1 -#define qtn_vei_menu_change_sound "Change sound" - -//d:New text -//d:Progress note for porocessing "Change sound" -//l:popup_note_wait_window -#define qtn_vei_note_changing_sound "Changing sound" - -//d:New text -//d:User note, used in simple function "Add text" -//d:when processing video A and text together fails -//d: process has three phases where some of can fail: -//d: a) generating video B from text -//d: or : -//d: b) inserting video B to movie -//d: or : -//d: c) processing videos A and B together -//l:popup_note_window -#define qtn_vei_unable_to_insert_text "Unable to add text" - -//d:New text -//d:Error message showed in simple function "Merge videos" -//d:when processing two videos together fails -//l:popup_note_window -#define qtn_vei_unable_to_merge_videos "Unable to merge video clips" - -//d:New text -//d:Error message showed in simple function "Merge video and image" -//d:when processing video and image together fails -//l:popup_note_window -#define qtn_vei_unable_to_merge_video_image "Unable to merge video clip and image" - -//d:New text -//d:Error message showed in simple function "Change sound" -//d:when processing video and audio together fails -//l:popup_note_window -#define qtn_vei_unable_to_change_sound "Unable to change sound" - -//d:New text -//d:Error message showed in simple functions "Merge", "Add text" and "Change sound" -//d:when video clip is not supported by ved engine -//l:popup_note_window -#define qtn_vei_video_format_not_supported "Video clip format not supported" // in merge there can be two videos - -//d:New text -//d:Error message showed in simple function "Change sound" -//d:when audio clip is not supported by ved engine -//l:popup_note_window -#define qtn_vei_audio_format_not_supported "Sound clip format not supported" - -//d:New text -//d:Error message showed in simple function "Merge" -//d:when image is not supported by ved engine -//l:popup_note_window -#define qtn_vei_image_format_not_supported "Image format not supported" - -//d:New text -//d:List query heading text. -//d:This list query is used to select one video file -//d:from the list of videos. It is used at least with the -//d:"Merge" functionality (qtn_vei_menu_merge), where -//d:the user can merge a video clip with another video clip. -//l:heading_pane_t1 -#define qtn_vei_menu_merge_with_video "Merge with:" - -//d:New text -//d:List query heading text. -//d:This list query is used to select one image file -//d:from the list of images. It is used at least with the -//d:"Merge" functionality (qtn_vei_menu_merge), where -//d:the user can merge a video clip with an image file. -//l:heading_pane_t1 -#define qtn_vei_menu_merge_with_image "Merge with:" - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiAddQueue.h --- a/videditor/VideoEditorCommon/inc/VeiAddQueue.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEIADDQUEUE_H -#define VEIADDQUEUE_H - -#include -#include -#include "veiimageclipgenerator.h" -#include "VideoEditorCommon.h" - -class CVedVideoClipGenerator; - - -class MVeiQueueObserver - { -public: - enum TProcessing - { - EProcessingAudio = 0x50, - EProcessingVideo, - EProcessingImage, - ENotProcessing - }; - -public: - - virtual void NotifyQueueProcessingStarted( MVeiQueueObserver::TProcessing aMode = MVeiQueueObserver::ENotProcessing ) = 0; - - virtual void NotifyQueueEmpty( TInt aInserted, TInt aFailed ) = 0; - - virtual void NotifyQueueProcessingProgressed( TInt aProcessedCount, TInt aPercentage ) = 0; - - virtual TBool NotifyQueueClipFailed( const TDesC& aFilename, TInt aError ) = 0; - }; - - -class CVeiAddQueue : public CActive, - public MVedMovieObserver, - public MVeiImageClipGeneratorObserver - { - public: - IMPORT_C static CVeiAddQueue* NewL( MVedAudioClipInfoObserver& aView, CVedMovie& aMovie, MVeiQueueObserver& aObserver ); - - IMPORT_C static CVeiAddQueue* NewLC( MVedAudioClipInfoObserver& aView, CVedMovie& aMovie, MVeiQueueObserver& aObserver ); - - IMPORT_C virtual ~CVeiAddQueue(); - - public: - - IMPORT_C TBool ShowAudioClipDialogL(); - - IMPORT_C TBool ShowVideoClipDialogL( VideoEditor::TCursorLocation aLocation, TInt aCurrentIndex ); - - IMPORT_C void InsertMediaL( const TDesC& aFilename ); - - IMPORT_C void StartProcessingL(); - - IMPORT_C void GetNext(); - - IMPORT_C TInt Count() const; - - enum TErrorCases - { - EInsertingSingleClip = -90, - EInsertingFromGallery - }; - private: - - TInt AddNextL( TInt aPosition = -1 ); - - void DoCancel(); - - void RunL(); - - CVeiAddQueue( MVedAudioClipInfoObserver& aView, CVedMovie& aMovie, MVeiQueueObserver& aObserver ); - - void ConstructL(); - - - - private: -// From MVeiImageClipGeneratorObserver - virtual void NotifyImageClipGeneratorInitializationComplete( - CVeiImageClipGenerator& aGenerator, TInt aError); - -// From MVedMovieObserver - virtual void NotifyVideoClipAdded(CVedMovie& aMovie, TInt aIndex); - virtual void NotifyVideoClipAddingFailed(CVedMovie& aMovie, TInt aError); - virtual void NotifyVideoClipRemoved(CVedMovie& aMovie, TInt aIndex); - virtual void NotifyVideoClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, - TInt aNewIndex); - virtual void NotifyVideoClipTimingsChanged(CVedMovie& aMovie, - TInt aIndex); - virtual void NotifyVideoClipColorEffectChanged(CVedMovie& aMovie, - TInt aIndex); - virtual void NotifyVideoClipAudioSettingsChanged(CVedMovie& aMovie, - TInt aIndex); - virtual void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& aMovie, - TInt aIndex); - virtual void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie, - TInt aIndex); - virtual void NotifyStartTransitionEffectChanged(CVedMovie& aMovie); - virtual void NotifyMiddleTransitionEffectChanged(CVedMovie& aMovie, - TInt aIndex); - virtual void NotifyEndTransitionEffectChanged(CVedMovie& aMovie); - virtual void NotifyAudioClipAdded(CVedMovie& aMovie, TInt aIndex); - virtual void NotifyAudioClipAddingFailed(CVedMovie& aMovie, TInt aError); - virtual void NotifyAudioClipRemoved(CVedMovie& aMovie, TInt aIndex); - virtual void NotifyAudioClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, - TInt aNewIndex); - virtual void NotifyAudioClipTimingsChanged(CVedMovie& aMovie, - TInt aIndex); - virtual void NotifyMovieQualityChanged(CVedMovie& aMovie); - virtual void NotifyMovieReseted(CVedMovie& aMovie); - - virtual void NotifyMovieOutputParametersChanged(CVedMovie& aMovie); - virtual void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - virtual void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - virtual void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - virtual void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex); - - private: - /** - * No description. - */ - RPointerArray iAddQueue; - - /** - * No description. - */ - MVeiQueueObserver* iObserver; - - /** - * No description. - */ - CVedMovie& iMovie; - - MVedAudioClipInfoObserver& iView; - /** - * Inserting failed to movie - */ - TInt iFailedCount; - - /** - * Files added to movie. - */ - TInt iInsertedCount; - - /** - * Total number of files in queue when processing is started. - */ - TInt iTotalCount; - - /** - * No description. - */ - CVedVideoClipGenerator* iGenerator; - - /** - * No description. - */ - CVedAudioClipInfo* iAudioClipInfo; - CActiveSchedulerWait *iWaitScheduler; - TInt iError; - TBool iInsertVideoDialogOn; - }; -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiDisplayLighter.h --- a/videditor/VideoEditorCommon/inc/VeiDisplayLighter.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Declares VeiCutAudioBar control for the video editor application. -* -*/ - - - -#ifndef VEIDISPLAYLIGHTER_H -#define VEIDISPLAYLIGHTER_H - -#include -/** - * CVeiDisplayLighter control class. - */ -NONSHARABLE_CLASS( CVeiDisplayLighter ) : public CActive - { - public: - IMPORT_C static CVeiDisplayLighter* NewL(); - IMPORT_C void Start(); - IMPORT_C void Reset(); - IMPORT_C void Stop(); - virtual ~CVeiDisplayLighter(); - protected: - void DoCancel(); - void RunL(); - - CVeiDisplayLighter(); - void ConstructL(); - - private: - RTimer iTimer; - TInt iTimeout; - - }; -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiFrameTaker.h --- a/videditor/VideoEditorCommon/inc/VeiFrameTaker.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __FRAMETAKER_H -#define __FRAMETAKER_H - -#include - -class MVeiFrameTakerObserver - { - -public: - - virtual void NotifyFramesCompleted( CFbsBitmap* aFirstFrame, CFbsBitmap* aLastFrame, - CFbsBitmap* aTimelineFrame, TInt aError ) = 0; - }; - - -NONSHARABLE_CLASS( CVeiFrameTaker ): public CActive, - public MVedVideoClipFrameObserver - -{ -public: - IMPORT_C static CVeiFrameTaker* NewL( MVeiFrameTakerObserver& aObserver ); - ~CVeiFrameTaker(); - -public: - IMPORT_C void GetFramesL(CVedVideoClipInfo& aInfo, - TInt const aFirstFrame, TSize* const aFirstResolution, - TInt const aLastFrame, TSize* const aLastResolution, - TInt const aTimelineFrame, TSize* const aTimelineResolution, - TInt aPriority); - -private: - CVeiFrameTaker( MVeiFrameTakerObserver& aObserver ); - void ConstructL(); - - void DoCancel(); - void RunL(); - - virtual void NotifyVideoClipFrameCompleted(CVedVideoClipInfo& aInfo, - TInt aError, - CFbsBitmap* aFrame); -private: - CActiveSchedulerWait *iWaitScheduler; - CFbsBitmap* iFirstFrame; - CFbsBitmap* iLastFrame; - CFbsBitmap* iTimelineFrame; - - TInt iFrameCount; - TInt iError; - - MVeiFrameTakerObserver& iObserver; -}; -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiImageClipGenerator.h --- a/videditor/VideoEditorCommon/inc/VeiImageClipGenerator.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,446 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __VEIIMAGECLIPGENERATOR_H__ -#define __VEIIMAGECLIPGENERATOR_H__ - -#include - -#include - -/* - * UID of this generator. The Uids are only used to identify generators - * in UI, the Engine does not use Uids for any purpose. - */ -#define KUidImageClipGenerator TUid::Uid(0x00000001) - - -// Forward declarations -class CVeiImageClipFrameOperation; -class CVeiImageClipDecodeOperation; -class CFbsBitmap; -class CImageDecoder; -class CVeiImageClipGenerator; -class CBitmapScaler; - - -/** - * Image clip generator observer. - */ -class MVeiImageClipGeneratorObserver - { -public: - /** - * Callback method to notify that the image clip generator initialization - * is complete. - * - * @param aGenerator generator that caused the event - * @param aError error code - */ - virtual void NotifyImageClipGeneratorInitializationComplete( - CVeiImageClipGenerator& aGenerator, TInt aError) = 0; - }; - - -/** - * Image clip generator. - */ -class CVeiImageClipGenerator : public CVedVideoClipGenerator - { -public: - - /* Constructors / destructors. */ - - /** - * Factory method. Creates a new image clip generator. - * - * @param aFilename filename for the image - * @param aMaxResolution maximum resolution that will be used - * @param aDuration duration of the image frame - * @param aBackgroundColor background color - * @param aMaxDisplayMode display mode in which the bitmap is stored - * @param aFs RFs session to use for loading the image - * @param aObserver observer that will be notified when the - * initialization is complete - * - * @return constructed image clip generator - */ - IMPORT_C static CVeiImageClipGenerator* NewL(const TDesC& aFilename, - const TSize& aMaxResolution, - const TTimeIntervalMicroSeconds& aDuration, - const TRgb& aBackgroundColor, - TDisplayMode aMaxDisplayMode, - RFs& aFs, - MVeiImageClipGeneratorObserver& aObserver); - - /** - * Factory method. Creates a new image clip generator and leaves it - * in the cleanup stack. - * - * @param aFilename filename for the image - * @param aMaxResolution maximum resolution that will be used - * @param aDuration duration of the image frame - * @param aBackgroundColor background color - * @param aMaxDisplayMode display mode in which the bitmap is stored - * @param aFs RFs session to use for loading the image - * @param aObserver observer that will be notified when the - * initialization is complete - * - * @return constructed image clip generator - */ - IMPORT_C static CVeiImageClipGenerator* NewLC(const TDesC& aFilename, - const TSize& aMaxResolution, - const TTimeIntervalMicroSeconds& aDuration, - const TRgb& aBackgroundColor, - TDisplayMode aMaxDisplayMode, - RFs& aFs, - MVeiImageClipGeneratorObserver& aObserver); - - /** - * Destructor. - */ - IMPORT_C virtual ~CVeiImageClipGenerator(); - - - /* Property methods. */ - - IMPORT_C virtual TPtrC DescriptiveName() const; - - IMPORT_C virtual TUid Uid() const; - - IMPORT_C virtual TTimeIntervalMicroSeconds Duration() const; - - - /* Video frame property methods. */ - - IMPORT_C virtual TInt VideoFrameCount() const ; - - IMPORT_C virtual TTimeIntervalMicroSeconds VideoFrameStartTime(TInt aIndex) const; - - IMPORT_C virtual TTimeIntervalMicroSeconds VideoFrameEndTime(TInt aIndex) const; - - IMPORT_C virtual TTimeIntervalMicroSeconds VideoFrameDuration(TInt aIndex) const; - - IMPORT_C virtual TBool VideoFrameIsIntra(TInt aIndex) const; - - IMPORT_C virtual TInt VideoFirstFrameComplexityFactor() const; - - IMPORT_C virtual TInt VideoFrameDifferenceFactor(TInt aIndex) const; - - IMPORT_C virtual TInt GetVideoFrameIndex(TTimeIntervalMicroSeconds aTime) const; - - - /* Frame methods. */ - - IMPORT_C virtual void GetFrameL(MVedVideoClipGeneratorFrameObserver& aObserver, - TInt aIndex, - TSize* const aResolution, - TDisplayMode aDisplayMode, - TBool aEnhance, - TInt aPriority); - - IMPORT_C virtual void CancelFrame(); - - - /* New methods. */ - - /** - * Sets the duration. - * - * @param aDuration duration - */ - IMPORT_C void SetDuration(const TTimeIntervalMicroSeconds& aDuration); - - /** - * Sets the background color. - * - * @param aBackgroundColor - */ - IMPORT_C void SetBackgroundColor(const TRgb& aBackgroundColor); - - /** - * Gets the background color. - * - * @return background color - */ - IMPORT_C const TRgb& BackgroundColor() const; - - /** - * Returns the image file name. - * - * @return filename - */ - IMPORT_C TPtrC ImageFilename() const; - -private: // constructors - - /** - * First-phase constructor. - * - * @param aDuration duration - * @param aBackgroundColor background color - * @param aMaxResolution maximum resolution - */ - CVeiImageClipGenerator(const TTimeIntervalMicroSeconds& aDuration, - const TRgb& aBackgroundColor, - const TSize& aMaxResolution); - - /** - * Second-phase constructor. - * - * @param aFilename filename of the image - * @param aObserver observer - * @param aMaxDisplyMode display mode - * @param aFs RFs session - */ - void ConstructL(const TDesC& aFilename, - MVeiImageClipGeneratorObserver& aObserver, - TDisplayMode aMaxDisplayMode, RFs& aFs); - - -private: - /** - * Updates the first frame complexity factor. - */ - void UpdateFirstFrameComplexityFactorL(); - -private: - // Member variables - - /** Flag for readiness indication. */ - TBool iReady; - - /** First frame complexity factor. */ - TInt iFirstFrameComplexityFactor; - - /** Resolution. */ - TSize iMaxResolution; - - /** Duration. */ - TTimeIntervalMicroSeconds iDuration; - - /** Background color. */ - TRgb iBackgroundColor; - - /** Image decode operation. */ - CVeiImageClipDecodeOperation* iDecodeOperation; - - /** Frame generating operation. */ - CVeiImageClipFrameOperation* iFrameOperation; - - /** Descriptive name. */ - HBufC* iDescriptiveName; - - /** Image filename */ - HBufC* iFilename; - - /** Bitmap. */ - CFbsBitmap* iBitmap; - - /** Mask. */ - CFbsBitmap* iMask; - - /** Is the generator initializing? */ - TBool iInitializing; - - /** Frame count. */ - TInt iFrameCount; - - friend class CVeiImageClipDecodeOperation; - }; - - -/** - * Image decode operation. Helper class for decoding the image and - * performing first-stage resizing. - */ -class CVeiImageClipDecodeOperation : public CActive - { - public: - /** - * Factory constructor. - * - * @param aGenerator generator that owns this operation - * @param aFilename filename for the image - * @param aObserver observer that will be notified when the - * operation completes - * @param aFs RFs session to use for loading the image - * @param aPriority priority of the active object - * - * @return constructed image clip decode operation - */ - static CVeiImageClipDecodeOperation* NewL(CVeiImageClipGenerator& aGenerator, - const TDesC& aFilename, - MVeiImageClipGeneratorObserver& aObserver, - RFs& aFs, - TInt aPriority = CActive::EPriorityStandard); - /** - * Destructor. - */ - virtual ~CVeiImageClipDecodeOperation(); - - virtual void RunL(); - virtual void DoCancel(); - virtual TInt RunError(TInt aError); - - /** - * Starts the operation. - * - * @param aMaxResolution maximum resolution that will be used - * @param aDisplayMode display mode - */ - void StartOperationL(const TSize& aMaxResolution, TDisplayMode aDisplayMode); - - private: // methods - - /** - * First-phase constructor. - * - * @param aGenerator generator that owns this operation - * @param aObserver observer that will be notified when the - * operation completes - * @param aPriority priority of the active object - */ - CVeiImageClipDecodeOperation(CVeiImageClipGenerator& aGenerator, - MVeiImageClipGeneratorObserver& aObserver, - TInt aPriority); - - /** - * Second-phase constructor. - * - * @param aFilename filename for the image - * @param aFs RFs session to use for loading the image - */ - - void ConstructL(const TDesC& aFilename, RFs& aFs); - - private: // members - - /** Generator that owns this operation*/ - CVeiImageClipGenerator& iGenerator; - - /** Observer to be notified when the operation completes. */ - MVeiImageClipGeneratorObserver& iObserver; - - /** Decoder. */ - CImageDecoder* iDecoder; - - /** Bitmap. */ - CFbsBitmap* iBitmap; - - /** Mask. */ - CFbsBitmap* iMask; - }; - - -/** - * Image frame operation. - */ -class CVeiImageClipFrameOperation : public CActive - { - public: - /** - * Factory constructor. - * - * @param aGenerator generator that owns this operation - * - * @return constructed image clip frame operation - */ - static CVeiImageClipFrameOperation* NewL(CVeiImageClipGenerator& aGenerator); - - /** - * Destructor. - */ - virtual ~CVeiImageClipFrameOperation(); - - /** - * Starts the operation. - * - * @param aObserver observer to notify when the frame is complete - * @param aIndex index of the frame to generate - * @param aEnhance ETrue to produce better results - * but slower, EFalse to be as fast - * as possible. - * @param aSourceBitmap source bitmap - * @param aDestBitmap destination bitmap - * @param aSourceMask source mask - * @param aPriority priority for the active object - * - */ - void StartOperationL(MVedVideoClipGeneratorFrameObserver* aObserver, - TInt aIndex, TBool aEnhance, CFbsBitmap* aSourceBitmap, - CFbsBitmap* aDestBitmap, CFbsBitmap* aSourceMask, TInt aPriority); - - virtual void RunL(); - virtual void DoCancel(); - virtual TInt RunError(TInt aError); - - private: // methods - /** - * First-phase constructor. - * - * @param aGenerator generator that owns this operation - */ - CVeiImageClipFrameOperation(CVeiImageClipGenerator& aGenerator); - - /** - * Second-phase constructor. - */ - void ConstructL(); - - private: // members - /** Generator. */ - CVeiImageClipGenerator& iGenerator; - - /** Index of the frame being generated. */ - TInt iIndex; - - /** Whether to be fast or do quality work. */ - TBool iEnhance; - - /** Source bitmap. */ - CFbsBitmap* iSourceBitmap; - - /** Destination bitmap. */ - CFbsBitmap* iDestBitmap; - - /** Scaled bitmap. */ - CFbsBitmap* iScaledBitmap; - - /** Scaled mask. */ - CFbsBitmap* iScaledMask; - - /** Source mask. */ - CFbsBitmap* iSourceMask; - - /** Scaler. */ - CBitmapScaler* iScaler; - - /** Flag for no scaling. */ - TBool iNoScaling; - - /** Observer. */ - MVedVideoClipGeneratorFrameObserver* iObserver; - }; - - - -#endif // __VEIIMAGECLIPGENERATOR_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiImageConverter.h --- a/videditor/VideoEditorCommon/inc/VeiImageConverter.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,141 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES -#ifndef IMAGECONVERTER_H -#define IMAGECONVERTER_H - -#include -#include -#include -#include - -class CFbsBitmap; -class CBitmapRotator; -class CBitmapScaler; - -/** - * Observer for notifying that image conversion is ready. - * - */ -class MConverterController - { - public: - /** - * Called to notify that image conversion is completed - * - */ - virtual void NotifyCompletion( TInt aErr ) = 0; - - }; -/** -* Utility class for image conversion. -*/ -NONSHARABLE_CLASS( CVeiImageConverter ) : public CActive - { - // states for this object - enum TState - { - EIdle = 0, - EEncoding, - EScaling - }; - - public: // contructors/destructors - - /** - * NewL - * Create a CVeiImageConverter object and return a pointer to it. - * - * @param aController Pointer to a MConverterController interface. - * The engine uses NotifyCompletion callback from this interface - * to notify the controller about completions of coding or - * encoding requests. - * - * @return a pointer to the created engine - */ - IMPORT_C static CVeiImageConverter* NewL( MConverterController* aController ); - - IMPORT_C ~CVeiImageConverter(); - - public: // interface methods - - IMPORT_C CFbsBitmap* GetBitmap(); - IMPORT_C void SetBitmap(CFbsBitmap* aBitmap); - - /** StartToEncodeL - * Starts to encode an image to a file. When completed calls - * NotifyCompletion, from iController. - * - * @param aFileName Full path and filename to the image to be encoded. - * - * @returns Nothing - */ - IMPORT_C void StartToEncodeL( const TDesC& aFileName, - const TUid& aImageType, const TUid& aImageSubType ); - - /** - * GetEncoderImageTypesL - * Gets descriptions of supported (encoding) image types. - * - * @param aImageTypeArray Reference to an array to be filled. - * - * @return Nothing - */ - IMPORT_C static void GetEncoderImageTypesL( - RImageTypeDescriptionArray& aImageTypeArray ); - - IMPORT_C void CancelEncoding(); - - IMPORT_C void ScaleL(CFbsBitmap* aSrcBitmap,CFbsBitmap* aDestBitmap, const TSize& aSize); - - - protected: // implementation of CActive - void DoCancel(); - void RunL(); - TInt RunError(TInt aError); - - private: // internal methods - CVeiImageConverter( MConverterController* aController ); - void ConstructL(); - - public: // data - - /** Decoded image. */ - CFbsBitmap* iBitmap; - - private: // internal data - - /** ui controller. */ - MConverterController* iController; - - /** for opening/saving images from/to files. */ - RFs iFs; - - /** decoder from ICL API. */ - //CImageDecoder* iImageDecoder; // - - /** encoder from ICL API. */ - CImageEncoder* iImageEncoder; - CBitmapScaler* iBitmapScaler; - - TState iState; - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiMGFetchVerifier.h --- a/videditor/VideoEditorCommon/inc/VeiMGFetchVerifier.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef VEIMGFETCHVERIFIER_H -#define VEIMGFETCHVERIFIER_H - -#include -#include - -/** - * CVeiMGFetchVerifier class. - */ -NONSHARABLE_CLASS( CVeiMGFetchVerifier ) : public CBase, public MMGFetchVerifier - { - public: - IMPORT_C static CVeiMGFetchVerifier* NewLC(); - IMPORT_C virtual ~CVeiMGFetchVerifier(); - IMPORT_C virtual TBool VerifySelectionL( const MDesCArray* aSelectedFiles ); - - private: - CVeiMGFetchVerifier(); - void ConstructL(); - - private: - RConeResourceLoader iResLoader; - }; -#endif - -//End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiRemConTarget.h --- a/videditor/VideoEditorCommon/inc/VeiRemConTarget.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEIREMCONTARGET_H -#define VEIREMCONTARGET_H - -// INCLUDES -#include - -// FORWARD DECLARATIONS -class CRemConCoreApiTarget; -class CRemConInterfaceSelector; - -// CLASS DECLARATION - -class MVeiMediakeyObserver - { - public: - - virtual void HandleVolumeUpL() = 0; - virtual void HandleVolumeDownL() = 0; - }; - -/** -* mgx listener for RemCon commands. -*/ -NONSHARABLE_CLASS( CVeiRemConTarget ) : public CBase, public MRemConCoreApiTargetObserver - { - public: // Methods - - // Constructors and destructor - - /** - * Static constructor. - */ - IMPORT_C static CVeiRemConTarget* NewL(MVeiMediakeyObserver& aObserver); - - /** - * Destructor. - */ - virtual ~CVeiRemConTarget(); - - // Methods from base classes - - /** - * From MRemConCoreApiTargetObserver MrccatoCommand. - * A command has been received. - * @param aOperationId The operation ID of the command. - * @param aButtonAct The button action associated with the command. - */ - void MrccatoCommand(TRemConCoreApiOperationId aOperationId, TRemConCoreApiButtonAction aButtonAct); - - /** - * From MRemConCoreApiTargetObserver MrccatoPlay. - * A 'play' command has been received. - * @param aSpeed The playback speed. - * @param aButtonAct The button action associated with the command. - */ - void MrccatoPlay(TRemConCoreApiPlaybackSpeed aSpeed, TRemConCoreApiButtonAction aButtonAct); - - /** - * From MRemConCoreApiTargetObserver MrccatoTuneFunction. - * A 'tune function' command has been received. - * @param aTwoPart If EFalse, only aMajorChannel is to be used. Otherwise, - * both aMajorChannel and aMinorChannel are to be used. - * @param aMajorChannel The major channel number. - * @param aMinorChannel The minor channel number. - * @param aButtonAct The button action associated with the command. - */ - void MrccatoTuneFunction(TBool aTwoPart, TUint aMajorChannel, TUint aMinorChannel, TRemConCoreApiButtonAction aButtonAct); - - /** - * From MRemConCoreApiTargetObserver MrccatoSelectDiskFunction. - * A 'select disk function' has been received. - * @param aDisk The disk. - * @param aButtonAct The button action associated with the command. - */ - void MrccatoSelectDiskFunction(TUint aDisk, TRemConCoreApiButtonAction aButtonAct); - - /** - * From MRemConCoreApiTargetObserver MrccatoSelectAvInputFunction. - * A 'select AV input function' has been received. - * @param aAvInputSignalNumber The AV input. - * @param aButtonAct The button action associated with the command. - */ - void MrccatoSelectAvInputFunction(TUint8 aAvInputSignalNumber, TRemConCoreApiButtonAction aButtonAct); - - /** - * From MRemConCoreApiTargetObserver MrccatoSelectAudioInputFunction. - * A 'select audio input function' has been received. - * @param aAudioInputSignalNumber The audio input. - * @param aButtonAct The button action associated with the command. - */ - void MrccatoSelectAudioInputFunction(TUint8 aAudioInputSignalNumber, TRemConCoreApiButtonAction aButtonAct); - - protected: // Methods - - private: //Methods - - /** - * C++ default constructor. - */ - CVeiRemConTarget(MVeiMediakeyObserver& aObserver); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - - private: // Data - - MVeiMediakeyObserver& iObserver; - // RemCon interface selector. - CRemConInterfaceSelector* iInterfaceSelector; - // RemCon Core API target class. - CRemConCoreApiTarget* iCoreTarget; - }; - -#endif //VEIREMCONTARGET_H - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiSettings.h --- a/videditor/VideoEditorCommon/inc/VeiSettings.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,126 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEISETTINGS_H__ -#define __VEISETTINGS_H__ - -#include -#include - -// Max size of serialized settings object: -// DefaultSnapshotName 256 bytes -// DefaultVideoName 256 bytes -// MemoryInUse 8 bit -// SaveQuality 8 bit -const TInt KveiSettingsMaxSerializedSizeInBytes = 520; - -NONSHARABLE_CLASS( TVeiSettings ) - { - public: // Enumerations - - enum TSaveQuality - { - EAuto = 0, - EMmsCompatible, - EMedium, - EBest - }; - - public: - /** - * Getter/setter for default snapshot name, non-const - */ - IMPORT_C TDes& DefaultSnapshotName(); - - /** - * Getter for default snapshot name, const - */ - IMPORT_C TPtrC DefaultSnapshotName() const; - - /** - * Getter/setter for default video name, non-const - */ - IMPORT_C TDes& DefaultVideoName(); - - /** - * Getter for default video name, const - */ - IMPORT_C TPtrC DefaultVideoName() const; - - /** - * Getter/setter for used memory, non-const - */ - IMPORT_C CAknMemorySelectionDialog::TMemory& MemoryInUse(); - - /** - * Getter for used memory, const - */ - IMPORT_C const CAknMemorySelectionDialog::TMemory& MemoryInUse() const; - - /** - * Getter for save quality, const - */ - IMPORT_C TInt& SaveQuality(); - - /** - * Getter for save quality, const - */ - IMPORT_C TInt SaveQuality() const; - - IMPORT_C void ExternalizeL(RWriteStream& aStream) const; - - IMPORT_C void InternalizeL(RReadStream& aStream); - -#ifdef SETTINGS_TO_CENREP - public: - /** - * Load values from Central Repository - */ - void LoadL(); - - /** - * Save values to Central Repository - */ - void SaveL() const; -#endif - - private: // Member data. - /** - * Default snapshot name. - */ - TBuf<128> iDefaultSnapshotName; - - /** - * Default video name. - */ - TBuf<128> iDefaultVideoName; - - /** - * Memory in use. - */ - CAknMemorySelectionDialog::TMemory iMemoryInUse; - - /** - * Save quality. - */ - TSaveQuality iSaveQuality; - -}; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiTempMaker.h --- a/videditor/VideoEditorCommon/inc/VeiTempMaker.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEITEMPMAKER_H -#define __VEITEMPMAKER_H - -#include -#include -#include -#include -/** -* CVeiTempMaker. Class for temporary file actions(filename, clean up). -* -*/ -NONSHARABLE_CLASS( CVeiTempMaker ) : public CBase - { - public: - /** - * Static factory constructor. - * - * @return created instance - */ - IMPORT_C static CVeiTempMaker* NewL(); - - /** - * Static factory constructor. Leaves the created instance in the - * cleanup stack. - * - * @return created instance - */ - IMPORT_C static CVeiTempMaker* NewLC(); - - /** - * Destructor. - */ - IMPORT_C ~CVeiTempMaker(); - - IMPORT_C void EmptyTempFolder() const; - - IMPORT_C void GenerateTempFileName( - HBufC& aTempPathAndName, - CAknMemorySelectionDialog::TMemory aMemory, - TVedVideoFormat aVideoFormat, - TBool aExtAMR = EFalse ) const; - - private: - /** - * Default constructor. - */ - void ConstructL(); - - /** - * Default constructor. - */ - CVeiTempMaker(); - - TBool GetTempPath( const CAknMemorySelectionDialog::TMemory& aMemory, TDes& aTempPath ) const; - -// void ListFilesL(const TDesC& aFindFromDir, const TDesC& aWriteResultTo) const; - - void DoEmptyTempFolderL() const; - }; -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiTitleClipGenerator.h --- a/videditor/VideoEditorCommon/inc/VeiTitleClipGenerator.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,586 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __VEITITLECLIPGENERATOR_H__ -#define __VEITITLECLIPGENERATOR_H__ - -#include - -#include - -/* - * UID of this generator. The Uids are only used to identify generators - * in UI, the Engine does not use Uids for any purpose. - */ -#define KUidTitleClipGenerator TUid::Uid(0x00000002) - - -// Forward declarations - -class CVeiTitleClipGenerator; -//class CVeiTitleClipMainTitleFrameOperation; -//class CVeiTitleClipScrollerFrameOperation; -class CVeiTitleClipImageDecodeOperation; -class CFbsBitmap; -class CBitmapScaler; -class CImageDecoder; -class CFont; - -// Enumerations - -/** - * Title clip style. - */ -enum TVeiTitleClipVerticalAlignment - { - EVeiTitleClipVerticalAlignmentTop, - EVeiTitleClipVerticalAlignmentBottom, - EVeiTitleClipVerticalAlignmentCenter - }; - -/** - * Title clip justification. - */ -enum TVeiTitleClipHorizontalAlignment - { - EVeiTitleClipHorizontalAlignmentLeft, - EVeiTitleClipHorizontalAlignmentRight, - EVeiTitleClipHorizontalAlignmentCenter - }; - -/** - * Title clip transition. - */ -enum TVeiTitleClipTransition - { - EVeiTitleClipTransitionNone = 0, - EVeiTitleClipTransitionScrollLeftToRight, - EVeiTitleClipTransitionScrollRightToLeft, - EVeiTitleClipTransitionScrollTopToBottom, - EVeiTitleClipTransitionScrollBottomToTop, - EVeiTitleClipTransitionFade - }; - - - -/** - * Observer for title clip generator. - */ -class MVeiTitleClipGeneratorObserver - { -public: - /** - * Notifies that the title clip generator has finished loading and - * preparing the background image. - * - * @param aGenerator generator that caused the event - * @param aError error code - */ - virtual void NotifyTitleClipBackgroundImageLoadComplete(CVeiTitleClipGenerator& aGenerator, TInt aError) = 0; - }; - -/** - * Title clip generator. - */ -class CVeiTitleClipGenerator : public CVedVideoClipGenerator - { -public: - - /* Constructors / destructors. */ - - IMPORT_C static CVeiTitleClipGenerator* NewL(const TSize& aMaxResolution, - TVeiTitleClipTransition aTransition, - TVeiTitleClipHorizontalAlignment aHorizontalAlignment, - TVeiTitleClipVerticalAlignment aVerticalAlignment); - - IMPORT_C static CVeiTitleClipGenerator* NewLC(const TSize& aMaxResolution, - TVeiTitleClipTransition aTransition, - TVeiTitleClipHorizontalAlignment aHorizontalAlignment, - TVeiTitleClipVerticalAlignment aVerticalAlignment); - - IMPORT_C virtual ~CVeiTitleClipGenerator(); - - /* Property methods. */ - - IMPORT_C virtual TPtrC DescriptiveName() const; - - IMPORT_C virtual TUid Uid() const; - - IMPORT_C virtual TTimeIntervalMicroSeconds Duration() const; - - - /* Video frame property methods. */ - - IMPORT_C virtual TInt VideoFrameCount() const; - - IMPORT_C virtual TTimeIntervalMicroSeconds VideoFrameStartTime(TInt aIndex) const; - - IMPORT_C virtual TTimeIntervalMicroSeconds VideoFrameEndTime(TInt aIndex) const; - - IMPORT_C virtual TTimeIntervalMicroSeconds VideoFrameDuration(TInt aIndex) const; - - IMPORT_C virtual TInt GetVideoFrameIndex(TTimeIntervalMicroSeconds aTime) const; - - IMPORT_C virtual TInt VideoFirstFrameComplexityFactor() const; - - IMPORT_C virtual TInt VideoFrameDifferenceFactor(TInt aIndex) const; - - - /* Frame methods. */ - - IMPORT_C virtual void GetFrameL(MVedVideoClipGeneratorFrameObserver& aObserver, - TInt aIndex, - TSize* const aResolution, - TDisplayMode aDisplayMode, - TBool aEnhance, - TInt aPriority); - - IMPORT_C virtual void CancelFrame(); - - - - /* New methods. */ - - /** - * Sets the text for the generator. - * - * @param aText text for the generator - */ - IMPORT_C void SetTextL(const TDesC& aText); - - /** - * Returns the text for this generator. - * - * @return text for the generator - */ - IMPORT_C TPtrC Text() const; - - /** - * Returns the transition of this title screen clip. - * - * @return transition - */ - IMPORT_C TVeiTitleClipTransition Transition() const; - - /** - * Returns the horizontal alignment. - * - * @return horizontal alignment - */ - IMPORT_C TVeiTitleClipHorizontalAlignment HorizontalAlignment() const; - - /** - * Returns the vertical alignment. - * - * @return vertical alignment - */ - IMPORT_C TVeiTitleClipVerticalAlignment VerticalAlignment() const; - - /** - * Sets the transiton and alignments. They are all tied together - * to allow them to be set at once to avoid generating several - * thumbnails when setting many options at the same time. - * - * @param aTransition transition for the generator. - * @param aHorizontalAlignment horizontal alignment - * @param aVerticalAlignment vertical alignment - */ - IMPORT_C void SetTransitionAndAlignmentsL(TVeiTitleClipTransition aTransition, - TVeiTitleClipHorizontalAlignment aHorizontalAlignment, - TVeiTitleClipVerticalAlignment aVerticalAlignment); - - /** - * Returns the background color. - * - * @return background color. - */ - IMPORT_C TRgb BackgroundColor() const; - - /** - * Sets the background color. This is used only if no background image - * is set. - * - * @param aBacgroundColor background color - */ - IMPORT_C void SetBackgroundColorL(const TRgb& aBackgroundColor); - - /** - * Returns the text color. - * - * @return text color. - */ - IMPORT_C TRgb TextColor() const; - - /** - * Sets the text color. - * - * @param aBacgroundColor text color - */ - IMPORT_C void SetTextColorL(const TRgb& aTextColor); - - /** - * Sets the background image. Transfers the ownership of the bitmap - * to the generator. - * - * @param aBackgroundImage background image - */ - IMPORT_C void SetBackgroundImageL(const CFbsBitmap* aBackgroundImage); - - /** - * Sets the background image from the specified file. - * - * @param aFilename filename for the image to load - * @param aObserver observer to notify when loading is complete - */ - IMPORT_C void SetBackgroundImageL(const TDesC& aFilename, MVeiTitleClipGeneratorObserver& aObserver); - - /** - * Returns the background image. - * - * @return background image - */ - IMPORT_C CFbsBitmap* BackgroundImage() const; - - /** - * Sets the duration. - * - * @param aDuration duration - */ - IMPORT_C void SetDuration(const TTimeIntervalMicroSeconds& aDuration); - - /** - * Sets the descriptive name. - * - * @param aDescriptiveName descriptive name - */ - IMPORT_C void SetDescriptiveNameL(const TDesC& aDescriptiveName); - -private: - // from MVedVideoClipGeneratorFrameObserver - void NotifyVideoClipGeneratorFrameCompleted(CVedVideoClipGenerator& aGenerator, TInt aError, CFbsBitmap* aBitmap); - -private: // constructors - - /** - * First-phase constructor. - * - * @param aMaxResolution maximum resolution - * @param aTransition transition - * @param aHorizontalAlignment horizontal alignment - * @param aVerticalAlignment vertical alignment - */ - CVeiTitleClipGenerator(const TSize& aMaxResolution, - TVeiTitleClipTransition aTransition, - TVeiTitleClipHorizontalAlignment aHorizontalAlignment, - TVeiTitleClipVerticalAlignment aVerticalAlignment); - - /** - * Second-phase constructor. - */ - void ConstructL(); - -private: // new methods - - /** - * Wrap the input text into lines. - */ - void WrapTextToArrayL(const TDesC& aText); - - /** - * Updates the first frame complexity factor value. - */ - void UpdateFirstFrameComplexityFactorL(); - - /** - * Calculates the fading transition start and end indices. - * - * @param aInEndFrame for returning the end frame of in-transition - * @param aOutStartFrame for returning the start frame of out-transition - * @param aNumberOfFrames for returning number of frames - */ - void CalculateTransitionFrameIndices(TInt& aInEndFrame, TInt& aOutStartFrame) const; - - /** - * Gets the text font suitable for the current frame resolution. - */ - void GetTextFont(TInt aFontDivisor = 0); - - /** - * Draws wrapped texts on the specified bitmap. - * - * @param aBitmap bitmap to draw on - * @param aTextPoint text starting point - * @param aTextColor text color - * @param aBgColor background color - * @param aShadowColor shadow color - */ - void DrawWrappedTextL(CFbsBitmap& aBitmap, const TPoint& aTextPoint, const TRgb& aTextColor, - const TRgb& aBgColor, const TRgb& aShadowColor, TBool aDrawBackground); - - /** - * Finishes the GetFrameL() call. - */ - CFbsBitmap* FinishGetFrameL(TInt aError = KErrNone); - - /** - * Synchronous method for getting the first frame for complexity - * calculation. - * - * @return first frame - */ - CFbsBitmap* GetFirstFrameL(); - - /** - * Draws the main title frame on a specified bitmap. - * - * @param aBitmap bitmap to draw on - * @param aIndex index of the frame to draw - */ - void DrawMainTitleFrameL(CFbsBitmap& aBitmap, TInt aIndex); - - /** - * Draws the scroll title frame on a specified bitmap. - * - * @param aBitmap bitmap to draw on - * @param aIndex index of the frame to draw - */ - void DrawScrollTitleFrameL(CFbsBitmap& aBitmap, TInt aIndex); - - /** - * Get the maximum frame rate, which is either the movie's - * frame rate, of the hard-coded maximum value. - * - * @return max frames per second - */ - TInt MaximumFramerate() const; - -private: - // Member variables - - /** First frame complexity factor. */ - TInt iFirstFrameComplexityFactor; - - /** Text. */ - HBufC* iText; - - /** Font for the text */ - const CFont* iTextFont; - - /** Resolution used to calculate font size. */ - TSize iGetFontResolution; - - /** Desciptive name. */ - HBufC* iDescriptiveName; - - /** Wrapped text pointer array. */ - CArrayFix* iWrappedArray; - - /** Height of the wrapped text box. */ - TInt iWrappedTextBoxHeight; - - /** Resolution. */ - TSize iMaxResolution; - - /** Duration. */ - TTimeIntervalMicroSeconds iDuration; - - /** Transition. */ - TVeiTitleClipTransition iTransition; - - /** Horizontal alignment. */ - TVeiTitleClipHorizontalAlignment iHorizontalAlignment; - - /** Vertical alignment. */ - TVeiTitleClipVerticalAlignment iVerticalAlignment; - - /** Background image decode operation. */ - CVeiTitleClipImageDecodeOperation* iDecodeOperation; - - /** Background color. */ - TRgb iBackgroundColor; - - /** Text color. */ - TRgb iTextColor; - - /** Flag for notifying setting change. */ - TBool iSettingsChanged; - - /** Background image. */ - CFbsBitmap* iBackgroundImage; - - /** Scaled background image. */ - CFbsBitmap* iScaledBackgroundImage; - - /** Flag indicating that we should use the scaled bitmap. */ - TBool iUseScaledImage; - - - /* - * Following member variables are temporary storage for the two-phase - * GetFrameL. - */ - - /** Observer. */ - MVedVideoClipGeneratorFrameObserver* iGetFrameObserver; - /** Index. */ - TInt iGetFrameIndex; - /** Resolution. */ - TSize iGetFrameResolution; - /** DisplayMode. */ - TDisplayMode iGetFrameDisplayMode; - /** Enhance flag. */ - TBool iGetFrameEnhance; - /** Priority. */ - TInt iGetFramePriority; - - /* Operation classes need to be our friends. */ - friend class CVeiTitleClipImageDecodeOperation; - }; - -/** - * Image decode operation. Helper class for decoding the image and - * performing first-stage resizing. - */ -class CVeiTitleClipImageDecodeOperation : public CActive - { - public: - /** - * Factory constructor method. Constructs a decode operation. - * - * @param aGenerator generator that owns this operation - * @param aObserver observer that will be notified when the - * operation is complete - * @param aFilename filename of the image to be decoded - * @param aPriority priority of the active object - * - * @return constructed instance of decode operation - */ - static CVeiTitleClipImageDecodeOperation* NewL(CVeiTitleClipGenerator& aGenerator, - MVeiTitleClipGeneratorObserver& aObserver, - const TDesC& aFilename, - TInt aPriority = CActive::EPriorityStandard); - - - /** - * Factory constructor method. Constructs a decode operation. - * - * @param aGenerator generator that owns this operation - * @param aSourceBitmap source bitmap - * @param aPriority priority of the active object - * - * @return constructed instance of decode operation - */ - static CVeiTitleClipImageDecodeOperation* NewL(CVeiTitleClipGenerator& aGenerator, - CFbsBitmap* aSourceBitmap, - TInt aPriority = CActive::EPriorityStandard); - - /** - * Destructor. - */ - virtual ~CVeiTitleClipImageDecodeOperation(); - - virtual void RunL(); - virtual void DoCancel(); - virtual TInt RunError(TInt aError); - - /** - * Starts the loading operation. - * - * @param aMaxResolution maximum resolution that will be used - */ - void StartLoadOperationL(const TSize& aMaxResolution); - - /** - * Starts the scaling operation. - * - * @param aResolution resolution for the image - */ - void StartScalingOperationL(const TSize& aResolution); - - private: // methods - /** - * EPOC first-phase constructor. - * - * @param aGenerator generator that owns this decode operation - * @param aObserver observer to notify when the operation is - * complete - * @param aPriority priority for the active object - */ - CVeiTitleClipImageDecodeOperation(CVeiTitleClipGenerator& aGenerator, - MVeiTitleClipGeneratorObserver& aObserver, - TInt aPriority = CActive::EPriorityStandard); - - /** - * EPOC first-phase constructor. - * - * @param aGenerator generator that owns this decode operation - * @param aSourceBitmap source bitmap - * @param aPriority priority for the active object - */ - CVeiTitleClipImageDecodeOperation(CVeiTitleClipGenerator& aGenerator, - CFbsBitmap* aSourceBitmap, - TInt aPriority = CActive::EPriorityStandard); - /** - * EPOC second-phase constructor. - * - * @param aFilename filename to decode. - */ - void ConstructL(const TDesC& aFilename); - - private: // members - - /** - * Enumeration for the decode phase. - */ - enum TDecodePhase - { - EPhaseNotStarted = 0, - EPhaseLoading, - EPhaseScaling, - EPhaseComplete - }; - - /** Decode phase. */ - TDecodePhase iDecodePhase; - - /** Generator that owns this decoder operation. */ - CVeiTitleClipGenerator& iGenerator; - - /** Observer.*/ - MVeiTitleClipGeneratorObserver* iObserver; - - /** Decoder. */ - CImageDecoder* iDecoder; - - /** Bitmap. */ - CFbsBitmap* iBitmap; - - /** Scaler. */ - CBitmapScaler* iScaler; - - /** Flag indicating whether to notify observer. */ - TBool iNotifyObserver; - }; - - - - -#endif // __VEITITLECLIPGENERATOR_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VeiVideoEditorSettings.h --- a/videditor/VideoEditorCommon/inc/VeiVideoEditorSettings.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Common settings. -* -*/ - - -#ifndef __VEIVIDEOEDITORSETTINS_H -#define __VEIVIDEOEDITORSETTINS_H - -// INCLUDES -// System includes -#include - -// CLASS DECLARATION - -/** -* Common settings handler -* -* @lib VideoEditorCommon.lib -* @since ?Series60_version -*/ -NONSHARABLE_CLASS( CVeiVideoEditorSettings ) - { - public: // New functions - - /** - * GetMediaPlayerVolumeLevelL. - * @since S60 - * @param aVolumeLevel returns volume level from MediaPlayer settings - */ - IMPORT_C static void GetMediaPlayerVolumeLevelL( TInt& aVolumeLevel ); - - /** - * SetMediaPlayerVolumeLevelL. - * @since ?Series60_version - * @param aVolumeLevel save volume level. See - * for min / max values - */ - IMPORT_C static void SetMediaPlayerVolumeLevelL( TInt aVolumeLevel ); - - /** - * GetMaxMmsSizeL. - * @since ?Series60_version - * @param aMaxMmsSize returns maximum MMS size - */ - IMPORT_C static void GetMaxMmsSizeL( TInt& aMaxMmsSize ); - }; - -#endif // __VEIVIDEOEDITORSETTINS_H - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VideoEditorCommon.h --- a/videditor/VideoEditorCommon/inc/VideoEditorCommon.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef VIDEOEDITORCOMMON_H -#define VIDEOEDITORCOMMON_H - -// INCLUDES -// System includes -#include // TDriveNumber -#include // TDisplayMode -#include "VideoEditorCommon.hrh" - -// TYPE DEFINITIONS -namespace VideoEditor - { - /** - * Enumeration for possible cursor locations. - */ - enum TCursorLocation - { - ECursorOnClip = 0, - ECursorOnTransition, - ECursorOnAudio, - ECursorOnEmptyVideoTrack, - ECursorOnEmptyAudioTrack - }; - - /** - * Enumeration for used memory locations. - */ - enum TMemory - { - EMemAutomatic = 0, - EMemPhoneMemory, - EMemMemoryCard - }; - - /** - * Publish & Subscribe property keys. - */ - enum TPropertyKeys - { - EPropertyFilename // Document file name - }; - - - /** - * Animations for simple functions - */ - enum TSimpleFunctionAnimations - { - EAnimationMerging, - EAnimationChangeAudio, - EAnimationAddText, - EAnimationCut - }; - } - - -// CONSTANTS -const TUid KUidVideoEditor = { 0x10208A29 }; // app. UID of the manual video editor -const TUid KUidSimpleCutVideo = {0x200009DF}; // app. UID of the simple cut video -const TUid KUidVideoProvider = { 0x101FFA8E }; // interface UID of the AIW provider -const TUid KUidTrimForMms = {0x200009D}; // app. UID of the trim for mms -const TUid KUidVideoEditorProperties = {0x03341234};// Property UID for Publish & Subscribe API. NOTE: currently unregistered UID - -const TInt KMmcDrive( EDriveE ); // Memory card drive number - -const TInt KAudioSampleInterval = 200; // Audio sample rate in audio visualization (in milliseconds) -const TReal KVolumeMaxGain = 127; // scale is -127 - 127 - -const TInt KMaxVideoFrameResolutionX = 640; // use VGA as maximum resolution -const TInt KMaxVideoFrameResolutionY = 480; -const TDisplayMode KVideoClipGenetatorDisplayMode = EColor64K; -const TInt KMinCutVideoLength = 1000000; // in microseconds - -// If the number of files given to AIW provider (i.e. files selected in Gallery) -// exceeds this number, the AIW provider does not provide menu items. -// Otherwise the menu slows down dramatically when a very large number -// of files is selected. -const TInt KAiwMaxNumberOfFilesSimultaneouslyHandled = KMaxTInt; - -// erros codes used in simple functions "Merge", "Add text", "Change sound" -const TInt KErrUnableToInsertVideo = -50000; -const TInt KErrUnableToInsertSound = KErrUnableToInsertVideo - 1; -const TInt KErrUnableToInsertImage = KErrUnableToInsertVideo - 2; -const TInt KErrUnableToInsertText = KErrUnableToInsertVideo - 3; -const TInt KErrUnableToMergeVideos = KErrUnableToInsertVideo - 4; -const TInt KErrUnableToMergeVideoAndImage = KErrUnableToInsertVideo - 5; -const TInt KErrUnableToChangeSound = KErrUnableToInsertVideo - 6; -const TInt KErrVideoFormatNotSupported = KErrUnableToInsertVideo - 7; -const TInt KErrAudioFormatNotSupported = KErrUnableToInsertVideo - 8; -const TInt KErrImageFormatNotSupported = KErrUnableToInsertVideo - 9; -const TInt KErrUnableToEditVideo = KErrUnableToInsertVideo - 10; - -// error code(s) used in simple function cut -const TInt KErrTooShortVideoForCut = -60000; - -// file name extensions -_LIT (KExtMp4, ".mp4"); -_LIT (KExt3gp, ".3gp"); -_LIT (KExtAmr, ".amr"); - -#endif // VIDEOEDITORCOMMON_H - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VideoEditorCommon.hrh --- a/videditor/VideoEditorCommon/inc/VideoEditorCommon.hrh Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef VIDEOEDITORCOMMON_HRH -#define VIDEOEDITORCOMMON_HRH - - -#define AKNEXQUERY_LISTBOX_HEIGHT 3 -#define AKNEXQUERY_LISTBOX_WIDTH 3 -#define AKNTEXT_QUERY_WIDTH 50 -#define AKNTEXT_QUERY_LINES 5 - -#endif // VIDEOEDITORCOMMON_HRH - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VideoEditorDebugUtils.h --- a/videditor/VideoEditorCommon/inc/VideoEditorDebugUtils.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,426 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// Simple RFileLogger based set of log writer macros. -// -// Instructions: -// -// 1. Put the following line into you MMP file -// LIBRARY flogger.lib -// -// 2. Define DEBUG_ON to enable logs in UDEB builds. -// Alternatively, define DEBUG_ON_ALWAYS to enable logs -// always (NOTE: do not use in productions code) -// - in mmp file: macro DEBUG_ON -// - in cpp file: #define DEBUG_ON -// -// 3a. Call LOG_RESET to create the log file, overwriting possibly -// existing old log file. -// -// 3b. Alternatively, you can skip the step 3a, in which case the -// the output is appended to the possibly existing old file. -// -// 4. Use the macros to write to the log file. For example -// LOG("Started processing") -// -// 5. To enable the logs, manually create the logging -// directory "C:\Logs\VideoEditor" on the device. -// - -#ifndef __DEBUGUTILS_H__ -#define __DEBUGUTILS_H__ - -// Two alternative implementations: -// - using RFileLogger (system component) -// - using ClogFile (implemented in this project) -//#define _FLOGGER_IMPLEMENTATION_ -#define _CLOGFILE_IMPLEMENTATION_ - -#ifdef _FLOGGER_IMPLEMENTATION_ -#include -#else -#include "logfile.h" -#include -#include -#endif -#include - -// Default log files -_LIT(KVideoEditorLogFile,"VideoEditor.log"); -_LIT(KVideoProviderLogFile,"VideoProvider.log"); - -// Log directory -_LIT(KLogDir, "VideoEditor"); - -// Maximum length for a log line. -const TInt KMaxLogLineLength = 256; - -// Overflow handler. Too log lines are truncated. -class TLogFileDes16OverflowHandler : public TDes16Overflow - { - virtual void Overflow(TDes16& /*aDes*/) - { - // do nothing - } - }; - -_LIT(KLogsFolder, "C:\\Logs\\"); -_LIT(KBackslash, "\\"); - - -// The log is enabled in debug builds only, unless -// DEBUG_ON_ALWAYS is defined to always enable it. -#ifdef _DEBUG - #ifdef DEBUG_ON - #define _ENABLED_ - #endif -#else - #ifdef DEBUG_ON_ALWAYS - #define _ENABLED_ - #endif -#endif - -#ifdef _ENABLED_ - -#define DEBUGLOG_ARG(x) x - -#ifdef _FLOGGER_IMPLEMENTATION_ - -// Initialize the log file, overwrite existing -// Logs file are always created in C:\Logs. The first argument to CreateLog() -// is a directory name relative to this C:\Logs directory. -#define LOG_RESET(aLogFile) \ - {\ - RFileLogger logger;\ - logger.Connect();\ - logger.CreateLog(KLogDir,aLogFile,EFileLoggingModeOverwrite);\ - logger.Write(KLogDir,aLogFile,EFileLoggingModeAppend,_L("*** Log file created ***"));\ - logger.CloseLog();\ - logger.Close();\ - } - -// Log a simple text, e.g. -// LOG(_L("logfile.txt"),"Something happens here") -#define LOG(aLogFile,aText) \ - {\ - RFileLogger::Write(KLogDir,aLogFile,EFileLoggingModeAppend,_L(aText));\ - RDebug::Print(_L(aText));\ - } - -// Log a Descriptor -#define LOGDES(aLogFile,aDes) \ - {\ - RFileLogger::Write(KLogDir,aLogFile,EFileLoggingModeAppend,aDes);\ - RDebug::Print(aDes);\ - } - -// Log a number with string format, e.g. -// LOGFMT(KLogFile,"Result=%d",err) -// LOGFMT(KLogFile, "FileName: %S", &aFileName ); -#define LOGFMT(aLogFile,aText,aParam) \ - {\ - RFileLogger::WriteFormat(KLogDir,aLogFile,EFileLoggingModeAppend,_L(aText),aParam);\ - RDebug::Print(_L(aText), aParam);\ - } - -// With 2 parameters -#define LOGFMT2(aLogFile,aText,aParam1,aParam2) \ - {\ - RFileLogger::WriteFormat(KLogDir,aLogFile,EFileLoggingModeAppend,_L(aText),aParam1,aParam2);\ - RDebug::Print(_L(aText), aParam1,aParam2);\ - } - -// With 3 parameters -#define LOGFMT3(aLogFile,aText,aParam1,aParam2,aParam3) \ - {\ - RFileLogger::WriteFormat(KLogDir,aLogFile,EFileLoggingModeAppend,_L(aText),aParam1,aParam2,aParam3);\ - RDebug::Print(_L(aText), aParam1,aParam2,aParam3);\ - } - -// With 4 parameters -#define LOGFMT4(aLogFile,aText,aParam1,aParam2,aParam3,aParam4) \ - {\ - RFileLogger::WriteFormat(KLogDir,aLogFile,EFileLoggingModeAppend,_L(aText),aParam1,aParam2,aParam3,aParam4);\ - RDebug::Print(_L(aText), aParam1,aParam2,aParam3,aParam4);\ - } - -// With 6 parameters -#define LOGFMT6(aLogFile,aText,aParam1,aParam2,aParam3,aParam4,aParam5,aParam6) \ - {\ - RFileLogger::WriteFormat(KLogDir,aLogFile,EFileLoggingModeAppend,_L(aText),aParam1,aParam2,aParam3,aParam4,aParam5,aParam6);\ - RDebug::Print(_L(aText), aParam1,aParam2,aParam3,aParam4,aParam5,aParam6);\ - } - -// With 12 parameters -#define LOGFMT12(aLogFile,aText,aParam1,aParam2,aParam3,aParam4,aParam5,aParam6,aParam7,aParam8,aParam9,aParam10,aParam11,aParam12) \ - {\ - RFileLogger::WriteFormat(KLogDir,aLogFile,EFileLoggingModeAppend,_L(aText),aParam1,aParam2,aParam3,aParam4);\ - RDebug::Print(_L(aText), aParam1,aParam2,aParam3,aParam4,,aParam5,aParam6,aParam7,aParam8,aParam9,aParam10,aParam11,aParam12);\ - } - -// Log hex dump -#define LOGHEXDUMP(aLogFile,aHeader,aMargin,aPtr,aLen) \ - RFileLogger::HexDump(KLogDir,aLogFile, EFileLoggingModeAppend, _S(aHeader), _S(aMargin), aPtr, aLen); - -// Log the memory allocated on the current thread's default heap -#define LOG_HEAP_USAGE(aLogFile) \ - {\ - TInt allocSize;\ - User::Heap().AllocSize(allocSize);\ - _LIT(KText,"* Memory allocated on the thread's default heap: %d *");\ - RFileLogger::WriteFormat(KLogDir,aLogFile,EFileLoggingModeAppend,KText,allocSize);\ - RDebug::Print(KText,allocSize);\ - } - -#endif // _FLOGGER_IMPLEMENTATION_ - -#ifdef _CLOGFILE_IMPLEMENTATION_ - -#define LOG_RESET(aLogFile) \ - {\ - TFileName path(KLogsFolder);\ - path.Append(KLogDir);\ - path.Append(KBackslash);\ - TFileName fileNameAndPath(path);\ - fileNameAndPath.Append(aLogFile);\ - RFs fs;\ - fs.Connect();\ - if(BaflUtils::FolderExists(fs,path))\ - {\ - RFile file;\ - file.Replace(fs, fileNameAndPath, EFileShareAny|EFileWrite);\ - file.Close();\ - CLogFile::StaticLog(fileNameAndPath,_L("*** Log file created ***\n"));\ - }\ - fs.Close();\ - } - -#define LOG(aLogFile,aText) \ - {\ - TFileName path(KLogsFolder);\ - path.Append(KLogDir);\ - path.Append(KBackslash);\ - TFileName fileNameAndPath(path);\ - fileNameAndPath.Append(aLogFile);\ - RFs fs;\ - fs.Connect();\ - if(BaflUtils::FolderExists(fs,path))\ - {\ - CLogFile::StaticLog(fileNameAndPath,_L(aText));\ - }\ - fs.Close();\ - RDebug::Print(_L(aText));\ - } - -#define LOGDES(aLogFile,aDes) \ - {\ - TFileName path(KLogsFolder);\ - path.Append(KLogDir);\ - path.Append(KBackslash);\ - TFileName fileNameAndPath(path);\ - fileNameAndPath.Append(aLogFile);\ - RFs fs;\ - fs.Connect();\ - if(BaflUtils::FolderExists(fs,path))\ - {\ - CLogFile::StaticLog(fileNameAndPath,aDes);\ - }\ - fs.Close();\ - RDebug::Print(aDes);\ - } - -#define LOGFMT(aLogFile,aText,aParam) \ - {\ - TFileName path(KLogsFolder);\ - path.Append(KLogDir);\ - path.Append(KBackslash);\ - TFileName fileNameAndPath(path);\ - fileNameAndPath.Append(aLogFile);\ - RFs fs;\ - fs.Connect();\ - if(BaflUtils::FolderExists(fs,path))\ - {\ - _LIT(KText,aText);\ - TLogFileDes16OverflowHandler ofh;\ - TBuf buf;\ - buf.AppendFormat(KText,&ofh,aParam);\ - CLogFile::StaticLog(fileNameAndPath,buf);\ - }\ - fs.Close();\ - RDebug::Print(_L(aText), aParam);\ - } - -// With 2 parameters -#define LOGFMT2(aLogFile,aText,aParam1,aParam2) \ - {\ - TFileName path(KLogsFolder);\ - path.Append(KLogDir);\ - path.Append(KBackslash);\ - TFileName fileNameAndPath(path);\ - fileNameAndPath.Append(aLogFile);\ - RFs fs;\ - fs.Connect();\ - if(BaflUtils::FolderExists(fs,path))\ - {\ - _LIT(KText,aText);\ - TLogFileDes16OverflowHandler ofh;\ - TBuf buf;\ - buf.AppendFormat(KText,&ofh,aParam1,aParam2);\ - CLogFile::StaticLog(fileNameAndPath,buf);\ - }\ - fs.Close();\ - RDebug::Print(_L(aText), aParam1,aParam2);\ - } - -// With 3 parameters -#define LOGFMT3(aLogFile,aText,aParam1,aParam2,aParam3) \ - {\ - TFileName path(KLogsFolder);\ - path.Append(KLogDir);\ - path.Append(KBackslash);\ - TFileName fileNameAndPath(path);\ - fileNameAndPath.Append(aLogFile);\ - RFs fs;\ - fs.Connect();\ - if(BaflUtils::FolderExists(fs,path))\ - {\ - _LIT(KText,aText);\ - TLogFileDes16OverflowHandler ofh;\ - TBuf buf;\ - buf.AppendFormat(KText,&ofh,aParam1,aParam2,aParam3);\ - CLogFile::StaticLog(fileNameAndPath,buf);\ - }\ - fs.Close();\ - RDebug::Print(_L(aText), aParam1,aParam2,aParam3);\ - } - -// With 4 parameters -#define LOGFMT4(aLogFile,aText,aParam1,aParam2,aParam3,aParam4) \ - {\ - TFileName path(KLogsFolder);\ - path.Append(KLogDir);\ - path.Append(KBackslash);\ - TFileName fileNameAndPath(path);\ - fileNameAndPath.Append(aLogFile);\ - RFs fs;\ - fs.Connect();\ - if(BaflUtils::FolderExists(fs,path))\ - {\ - _LIT(KText,aText);\ - TLogFileDes16OverflowHandler ofh;\ - TBuf buf;\ - buf.AppendFormat(KText,&ofh,aParam1,aParam2,aParam3,aParam4);\ - CLogFile::StaticLog(fileNameAndPath,buf);\ - }\ - fs.Close();\ - RDebug::Print(_L(aText), aParam1,aParam2,aParam3,aParam4);\ - } - -// With 6 parameters -#define LOGFMT6(aLogFile,aText,aParam1,aParam2,aParam3,aParam4,aParam5,aParam6) \ - {\ - TFileName path(KLogsFolder);\ - path.Append(KLogDir);\ - path.Append(KBackslash);\ - TFileName fileNameAndPath(path);\ - fileNameAndPath.Append(aLogFile);\ - RFs fs;\ - fs.Connect();\ - if(BaflUtils::FolderExists(fs,path))\ - {\ - _LIT(KText,aText);\ - TLogFileDes16OverflowHandler ofh;\ - TBuf buf;\ - buf.AppendFormat(KText,&ofh,aParam1,aParam2,aParam3,aParam4,aParam5,aParam6);\ - CLogFile::StaticLog(fileNameAndPath,buf);\ - }\ - fs.Close();\ - RDebug::Print(_L(aText), aParam1,aParam2,aParam3,aParam4,aParam5,aParam6);\ - } - -// With 12 parameters -#define LOGFMT12(aLogFile,aText,aParam1,aParam2,aParam3,aParam4,aParam5,aParam6,aParam7,aParam8,aParam9,aParam10,aParam11,aParam12) \ - {\ - TFileName path(KLogsFolder);\ - path.Append(KLogDir);\ - path.Append(KBackslash);\ - TFileName fileNameAndPath(path);\ - fileNameAndPath.Append(aLogFile);\ - RFs fs;\ - fs.Connect();\ - if(BaflUtils::FolderExists(fs,path))\ - {\ - _LIT(KText,aText);\ - TLogFileDes16OverflowHandler ofh;\ - TBuf buf;\ - buf.AppendFormat(KText,&ofh,aParam1,aParam2,aParam3,aParam4,aParam5,aParam6,aParam7,aParam8,aParam9,aParam10,aParam11,aParam12);\ - CLogFile::StaticLog(fileNameAndPath,buf);\ - }\ - fs.Close();\ - RDebug::Print(_L(aText), aParam1,aParam2,aParam3,aParam4,aParam5,aParam6,aParam7,aParam8,aParam9,aParam10,aParam11,aParam12);\ - } - -// Not implemented -#define LOGHEXDUMP(aLogFile,aHeader,aMargin,aPtr,aLen) - -// Log the memory allocated on the current thread's default heap -#define LOG_HEAP_USAGE(aLogFile) \ - {\ - TFileName path(KLogsFolder);\ - path.Append(KLogDir);\ - path.Append(KBackslash);\ - TFileName fileNameAndPath(path);\ - fileNameAndPath.Append(aLogFile);\ - RFs fs;\ - fs.Connect();\ - TInt allocSize;\ - User::Heap().AllocSize(allocSize);\ - _LIT(KText,"* Memory allocated on the thread's default heap: %d *");\ - if(BaflUtils::FolderExists(fs,path))\ - {\ - TLogFileDes16OverflowHandler ofh;\ - TBuf buf;\ - buf.AppendFormat(KText,&ofh,allocSize);\ - CLogFile::StaticLog(fileNameAndPath,buf);\ - }\ - fs.Close();\ - RDebug::Print(KText, allocSize);\ - } - -#endif // _CLOGFILE_IMPLEMENTATION_ - -#else // _ENABLED_ - -#define DEBUGLOG_ARG(x) - -#define LOG_RESET(aLogFile) -#define LOG(aLogFile,aText) -#define LOGDES(aLogFile,aDes) -#define LOGFMT(aLogFile,aText,aParam) -#define LOGFMT2(aLogFile,aText,aParam1,aParam2) -#define LOGFMT3(aLogFile,aText,aParam1,aParam2,aParam3) -#define LOGFMT4(aLogFile,aText,aParam1,aParam2,aParam3,aParam4) -#define LOGFMT6(aLogFile,aText,aParam1,aParam2,aParam3,aParam4,aParam5,aParam6) -#define LOGFMT12(aLogFile,aText,aParam1,aParam2,aParam3,aParam4,aParam5,aParam6,aParam7,aParam8,aParam9,aParam10,aParam11,aParam12) -#define LOGHEXDUMP(aLogFile,aHeader,aMargin,aPtr,aLen) -#define LOG_HEAP_USAGE(aLogFile) - -#endif // _ENABLED_ - -#endif // __DEBUGUTILS_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VideoEditorInternalCRKeys.h --- a/videditor/VideoEditorCommon/inc/VideoEditorInternalCRKeys.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VIDEOEDITORINTERNALCRKEYS_H -#define VIDEOEDITORINTERNALCRKEYS_H - -const TUid KCRUidVideoEditor = {0xE3341234}; // test uid - -/** -* KVedSaveQuality -* Defines the quality of saved video clip. -* Possible values are 0 ( TVeiSettings::EAuto ) -* 1 ( TVeiSettings::EMmsCompatible ) -* 2 ( TVeiSettings::EMedium ) -* 2 ( TVeiSettings::EBest ) -* Default value is 0. -*/ -const TUint32 KVedSaveQuality = 0x0000001; - -/** -* KVedMemoryInUse -* Defines where to same the video clip. -* Possible values are 0 ( CAknMemorySelectionDialog::EPhoneMemory ) -* 1 ( CAknMemorySelectionDialog::EMemoryCard ) -* Default value is 1. -*/ -const TUint32 KVedMemoryInUse = 0x0000002; - -/** Default file name for saved video -* -* Text type -* -* Default value: "" -**/ -const TUint32 KVedDefaultVideoName = 0x00000003; - -/** Default file name for snapshot image -* -* Text type -* -* Default value: "" -**/ -const TUint32 KVedDefaultSnapshotName = 0x00000004; - - -#endif // VIDEOEDITORINTERNALCRKEYS_H - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/VideoEditorUtils.h --- a/videditor/VideoEditorCommon/inc/VideoEditorUtils.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,285 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VIDEOEDITORUTILS_H -#define VIDEOEDITORUTILS_H - -// INCLUDES -#include -#include -#include -#include "VideoEditorCommon.h" - -// FORWARD DECLARATIONS -class RFs; -class TVeiSettings; - -// CONSTANTS -const TInt KManualVideoEditorIconFileId = 0; -const TInt KVideoEditorUiComponentsIconFileId = 1; -const TInt KVeiNonScalableIconFileId = 2; - -/** CLASS: VideoEditorUtils -* -* Static utility class. -* -*/ -NONSHARABLE_CLASS( VideoEditorUtils ) -{ -public: - - /** @name Methods:*/ - //@{ - - /** GenerateNewDocumentNameL - * - * Generates a new name for the loaded document at the startup. - * - * The generated file is located on the MMC dy default. If the - * MMC is full or not present, the file will be in phone memory. - * Uses internally VideoFitsToDriveL to check the space. - * - * Media gallery album id list now obsolete after Media Gallery removal. - * If an invalid album list is passed the behaviour is undefined. - * - * @param aFsSession - - * @param aSourceFileName - - * @param aTargetFileName - - * @param aOutputFormat - video format of the target file - * @param aTargetSizeEstimate - the expected target file size. - * This value is used to check whether there is enough space on the disks. - * @param aMemoryInUse - where the target file is created. - * @return - KErrNone if successfully generated file name - * KSIEENotEnoughDiskSpace if no disk space to save the file - * (size of aSourceFileName used to check the space) - * KSIEEOpenFile if the source filename is invalid - */ - IMPORT_C static TInt GenerateNewDocumentNameL ( - RFs& aFsSession, - const TDesC& aSourceFileName, - TDes& aTargetFileName, - TVedVideoFormat aOutputFormat, - TInt aTargetSizeEstimate, - VideoEditor::TMemory aMemoryInUse = VideoEditor::EMemAutomatic - ); - - /** GenerateFileNameL - * - * Generates a new file name. - * - * Generates a file name into a given drive. Increments a running number - * at the end of the file name until a file with the same name doesn't exist. - * Uses internally VideoFitsToDriveL to check the space. - * - * - * @param aFsSession - - * @param aSourceFileName - name of the source file - * @param aTargetFileName - name of the new file - * @param aOutputFormat - video format of the target file - * @param aTargetSizeEstimate - the expected target file size. - * This value is used to check whether there is enough space on the disks. - * @param aDrive - drive where the target file is created. - * @return - KErrNone if successfully generated file name - * KSIEENotEnoughDiskSpace if no disk space to save the file - * (size of aSourceFileName used to check the space) - * KSIEEOpenFile if the source filename is invalid - */ - IMPORT_C static TInt GenerateFileNameL ( - RFs& aFsSession, - const TDesC& aSourceFileName, - TDes& aTargetFileName, - TVedVideoFormat aOutputFormat, - TInt aTargetSizeEstimate, - TFileName aDrive ); - - - /** NotifyNewMediaDocumentL - * - * Notifies the system that a new media file has been saved, - * making it visible in the Media Gallery. - * - * @param aFileName - - * @return - - */ - IMPORT_C static void NotifyNewMediaDocumentL ( - RFs& aFsSession, - const TDesC& aFileName - ); - - /** GetMGAlbumsListForMediaFileL - * - * Finds out which Media Gallery Albums the file belongs to. - * (if compiled without album support, this function - * returns an empty array). Album support is now removed. - * - * @param aFileName - The media file - * @param aAlbumList - - * On return, contains the ID:s of the Media Gallery - * albums the file belongs to. - * If the list is not empty, it is retained and - * new IDs are appended into the list. - * @return - - */ - IMPORT_C static void GetMGAlbumsListForMediaFileL ( - RArray& aAlbumIdList, - const TDesC& aFilename - ); - - /** AddMediaFileToMGAlbumL - * - * Add the given media file to the given album. - * (if compiled without album support, this function - * does nothing) - * - * @param aFileName - - * @param aAlbumId - - * @return - - */ - IMPORT_C static void AddMediaFileToMGAlbumL ( - const TDesC& aFileName, - TInt aAlbumId - ); - - /** IsEnoughFreeSpaceToSaveL - * - * Checks whether there is enough disk space to save - * the given file. - * - * @param aFsSession - - * @param aFileName - The path to save (only drive part needed) - * @param aSizeEstimate - The space required for the file to save - * @return - TBool - */ - IMPORT_C static TBool IsEnoughFreeSpaceToSaveL( - RFs& aFsSession, - const TDesC& aFileName, - TInt aSizeEstimate ); - - /** IsDrmProtectedL - * - * Checks whether the given file is DRM protected. - * - * @param aFileName - The path of the file to check - * @return - TBool - */ - IMPORT_C static TBool IsDrmProtectedL( const TDesC& aFileName ); - - /** IconFileNameAndPath - * - * Returns file name and path for one of the icon files used in this module. - * Currently there is the primary icon file (MIF file), and the secondary - * icon file (a MBM file), which contains the non-scalable (bitmap) graphics. - * - * @param TInt aInconFileIndex - Which file. Supported values: - * KManualVideoEditorIconFileId - * KVideoEditorUiComponentsIconFileId - * KVeiNonScalableIconFileId - * @return TFileName - - */ - IMPORT_C static TFileName IconFileNameAndPath( TInt aInconFileIndex ); - - /** IsLandscapeScreenOrientation - * - * Check if the screen is in landscape mode. In other words, see - * if the X dimension of the screen is greater than the Y dimendion. - * - * @param - - * @return - TBool - */ - IMPORT_C static TBool IsLandscapeScreenOrientation(); - - - /** LaunchQueryDialogL - * - * Launches a confirmation query dialog. - * - * @param aPrompt - dialog prompt descriptor - * @return - - */ - IMPORT_C static TInt LaunchQueryDialogL (const TDesC & aPrompt); - - /** LaunchListQueryDialogL - * - * Launches a confirmation query dialog. - * - * @param aPrompt - dialog prompt descriptor - * @return 0 if user selects "No", otherwise 1 - */ - IMPORT_C static TInt LaunchListQueryDialogL (MDesCArray * aTextItems, - const TDesC & aPrompt); - - /* LaunchSaveVideoQueryL - * - * Launches a query dialog "Save video:" with items - * "Replace original" and "Save with a new name" - * - * @param - - * @return - list query id or -1 if the user selects No - */ - IMPORT_C static TInt LaunchSaveVideoQueryL (); - - - /* LaunchSaveChangesQueryL - * - * Launches a query dialog "Save changes?" query. - * - * @param - - * @return 0 if user selects "No", otherwise 1 - */ - IMPORT_C static TInt LaunchSaveChangesQueryL (); - - //@} - -private: - - /** @name Methods:*/ - //@{ - - /** FindSuffix - * - * Finds the offset of the edited file name suffix of form "-NNN", where - * NNN is the edit sequence number. - * - * @param aName - File name without extension - * @return - - */ - static TInt FindSuffix ( - const TDesC & aName - ); - - /** FileAlreadyExistsL - * - * Check if a file with the specified name already exista on the system. - * - * @param - aFs - * @param - aFileName - * @return - TBool - */ - static TBool FileAlreadyExistsL ( - RFs& aFsSession, - const TDesC& aFileName - ); - - //@} -}; - -#endif - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/logfile.h --- a/videditor/VideoEditorCommon/inc/logfile.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,347 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __LOGFILE_H__ -#define __LOGFILE_H__ - -#include -#include -#include - -// Link with the following libraries: EFSRV.LIB HAL.LIB CHARCONV.LIB - -#define LOG_INIT(name) CLogFile *log = CLogFile::NewL(_L(name), ETrue); - -#define LOG_INIT2(name) CLogFile *log = CLogFile::NewL(_L(name), EFalse); - -#define LOGL(event) \ - log->Log(_L(event));\ - log->LogNewline(); - -#define LOGNLN(event) \ - log->Log(_L(event));\ - -#define LOGS(event) \ - log->Log(event);\ - log->LogNewline(); - -#define LOGN(num) \ - TBuf<64> log_num;\ - log_num.AppendNum(num); \ - log->Log(log_num);\ - log->LogNewline(); - -#define LOGF(numf) \ - TBuf<16> log_float;\ - log_float.AppendNum(numf, TRealFormat());\ - log->Log(log_float);\ - log->LogNewline(); - -#define LOGN2(text, num) \ - TBuf<64> log_num;\ - log_num.AppendNum(num);\ - log->Log(_L(text));\ - log->Log(log_num);\ - log->LogNewline(); - -#define LOGF2(text, numf) \ - TBuf<16> log_float;\ - log_float.AppendNum(numf, TRealFormat());\ - log->Log(_L(text));\ - log->Log(log_float);\ - log->LogNewline(); - -#define LOG_END \ - delete log;\ - log = 0; - - - -/*! - @class CLogFile - - @discussion Class to generate a text file containing logging information - */ -NONSHARABLE_CLASS( CLogFile ) : public CBase - { -public: -/*! - @function NewL - - @discussion Create a CLogFile object - @param aFileName the name of the file to create - @param aInitialiseLog if true, and the log file already exists, previous - contents will be deleted. If false, append to any existing contents - @result a pointer to the created instance of CLogFile - */ - IMPORT_C static CLogFile* NewL(const TDesC& aFileName, TBool aInitialiseLog); - -/*! - @function NewLC - - @discussion Create a CLogFile object - @param aFileName the name of the file to create - @param aInitialiseLog if true, and the log file already exists, previous - contents will be deleted. If false, append to any existing contents - @result a pointer to the created instance of CLogFile - */ - IMPORT_C static CLogFile* NewLC(const TDesC& aFileName, TBool aInitialiseLog); - -/*! - @function ~CLogFile - - @discussion Destroy the object and release all memory objects - */ - IMPORT_C ~CLogFile(); - -/*! - @function Log - - @discussion Append the byte to the log file (if not a printable char, it will be logged as ascii-hex) - @param aByte the byte to log - */ - IMPORT_C void Log(TUint8 aByte); - -/*! - @function Log - - @discussion Append the integer to the log file (logged as ascii-hex) - @param aNumber the integer to log - */ - IMPORT_C void Log(TUint aNumber); - -/*! - @function Log - - @discussion Append text to the log file - @param aText the text to log - */ - IMPORT_C void Log(const TDesC8& aText); - -/*! - @function Log - - @discussion Append text to the log file - @param aText the text to log - */ - IMPORT_C void Log(const TDesC& aText); - -/*! - @function LogTime - - @discussion Append a timestamp to the log file. - Timestamps are in seconds with three decimal places (but resolution is limited to system timer tick period) - */ - IMPORT_C void LogTime(); - -/*! - @function LogBytes - - @discussion Append the bytes to the log file (non-printable bytes will be logged as ascii-hex) - @param aBuffer the bytes to log - */ - IMPORT_C void LogBytes(const TDesC8& aBuffer); - -/*! - @function LogNewline - - @discussion Start a newline in the log file - */ - IMPORT_C void LogNewline(); - -/*! - @function SetAutoFlush - - @discussion Turn AutoFlush on or off. AutoFlush will automatically flush the log file after each write - @param aOn if true turns AutoFlush on - */ - IMPORT_C void SetAutoFlush(TBool aOn); - -/*! - @function SetAutoTimeStamp - - @discussion Turn AutoTimeStamp on or off. AutoTimeStamp will add a timestamp to the start of each new line in the log - @param aOn if true turn AutoTimeStamp on - */ - IMPORT_C void SetAutoTimeStamp(TBool aOn); - -/*! - @function SetAutoNewline - - @discussion Turn AutoNewline on or off. AutoNewline starts a new line after each log operation - @param aOn if true turn AutoNewline on - */ - IMPORT_C void SetAutoNewline(TBool aOn); - -/*! - @function StaticLogL - - @discussion Static option to append text to the log file (leaving version) - @param aFileName the file to append to - @param aText the text to append - */ - IMPORT_C static void StaticLogL(const TDesC& aFileName, const TDesC8& aText); - -/*! - @function StaticLogL - - @discussion Static option to append text to the log file (leaving version) - @param aFileName the file to append to - @param aText the text to append - */ - IMPORT_C static void StaticLogL(const TDesC& aFileName, const TDesC& aText); - -/*! - @function StaticLog - - @discussion Static option to append text to the log file (non-leaving version) - @param aFileName the file to append to - @param aText the text to append - */ - IMPORT_C static void StaticLog(const TDesC& aFileName, const TDesC8& aText); - -/*! - @function StaticLog - - @discussion Static option to append text to the log file (non-leaving version) - @param aFileName the file to append to - @param aText the text to append - */ - IMPORT_C static void StaticLog(const TDesC& aFileName, const TDesC& aText); - -/*! - @function FileName - - @discussion Get the file name and path of the file we are writing to - @param aFileName - */ - void GetFileName( TDes& aFileName ) const; - -private: -/*! - @function CLogFile - - @discussion Perform the first phase of two phase construction - */ - CLogFile(); -/*! - @function ConstructL - - @discussion Perform the second phase construction of a CLogFile object - @param aFileName the file to open - @param aInitialiseLog if true, and the log file already exists, previous - contents will be deleted. If false, append to any existing contents - */ - void ConstructL(const TDesC& aFileName, TBool aInitialiseLog); -/*! - @function LogTimeInternal - - @discussion Internal function to log time - */ - void LogTimeInternal(); -/*! - @function LogTextInternal - - @discussion Internal function to log text - @param aText the text to log - */ - void LogTextInternal(const TDesC8& aText); -/*! - @function LogByteInternal - - @discussion internal function to log a byte - @param aByte the byte to log - */ - void LogByteInternal(TUint8 aByte); -/*! - @function LogIntInternal - - @discussion Internal function to log an integer - @param aNumber the integer to log - */ - void LogIntInternal(TUint aNumber); -/*! - @function StartWrite - - @discussion Perform any initial operation before the main log operation - */ - void StartWrite(); - -/*! - @function EndWrite - - @discussion Perform any tidying up operations after the main log operation - */ - void EndWrite(); - -/*! - @function Write - - @discussion Do the actual writing, and associated error checking - @param aText the text to write - */ - void Write(const TDesC8& aText); - -/*! - @function DoLogTextL - - @discussion Leaving functions from void Log(const TDesC& aText) - */ - void DoLogTextL(const TDesC& aText); - -private: -/*! - @var iLogFile handle to the log file - */ - RFile iLogFile; - -/*! - @var iSession file server session - */ - RFs iSession; - -/*! - @var iLogMillisecsPerTick number of millisecs per system timer tick - */ - TInt iLogMillisecsPerTick; - -/*! - @var iAutoFlush flag - AutoFlush on - */ - TBool iAutoFlush; - -/*! - @var iAutoTimestamp flag - AutoTimeStamp on - */ - TBool iAutoTimestamp; - -/*! - @var iAutoNewline flag - AutoNewline on - */ - TBool iAutoNewline; - -/*! - @var iCheckNestDepth internal to check StartWrite and EndWrite have been called correctly - */ - TInt iCheckNestDepth; - - }; - -#endif // __LOGFILE_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/inc/logfile.pan --- a/videditor/VideoEditorCommon/inc/logfile.pan Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ -#ifndef __LOGFILE_PAN__ -#define __LOGFILE_PAN__ - -_LIT(KLogFilePanic, "LogFile"); - -enum TLogFilePanics - { - ELogFileWriteFailed = 1, - ELogFileUtilityNotInstantiated - }; - -#endif // __TESTFRAME_PAN__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/rom/VideoEditorCommon.iby --- a/videditor/VideoEditorCommon/rom/VideoEditorCommon.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_SIMPLE_VIDEO_EDITOR - -#ifndef __VIDEOEDITORCOMMON_IBY__ -#define __VIDEOEDITORCOMMON_IBY__ - -#include - -// VideoEditorCommon dll -file=ABI_DIR\BUILD_DIR\VideoEditorCommon.dll SHARED_LIB_DIR\VideoEditorCommon.dll - -#endif // __VIDEOEDITORCOMMON_IBY__ - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/rom/VideoEditorCommon_resource.iby --- a/videditor/VideoEditorCommon/rom/VideoEditorCommon_resource.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_SIMPLE_VIDEO_EDITOR - -#ifndef __VIDEOEDITORCOMMONRESOURCES_IBY__ -#define __VIDEOEDITORCOMMONRESOURCES_IBY__ - -#include - -data=DATAZ_\RESOURCE_FILES_DIR\VideoEditorCommon.rsc RESOURCE_FILES_DIR\VideoEditorCommon.rsc - -#endif // __VIDEOEDITORCOMMONRESOURCES_IBY__ - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiAddQueue.cpp --- a/videditor/VideoEditorCommon/src/VeiAddQueue.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,524 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -// INCLUDE FILES - -// System includes -#include -#include -#include - -// User includes -#include "Veiaddqueue.h" -#include "Veiimageclipgenerator.h" -#include "VeiMGFetchVerifier.h" -#include "VideoEditorUtils.h" -#include "VideoEditorDebugUtils.h" - - -EXPORT_C CVeiAddQueue* CVeiAddQueue::NewL( MVedAudioClipInfoObserver& aView, CVedMovie& aMovie, MVeiQueueObserver& aObserver ) - { - CVeiAddQueue* self = CVeiAddQueue::NewLC( aView, aMovie, aObserver ); - CleanupStack::Pop( self ); - - return self; - } - - -EXPORT_C CVeiAddQueue* CVeiAddQueue::NewLC( MVedAudioClipInfoObserver& aView, CVedMovie& aMovie, MVeiQueueObserver& aObserver ) - { - CVeiAddQueue* self = new (ELeave) CVeiAddQueue( aView, aMovie, aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - - return self; - } - -CVeiAddQueue::CVeiAddQueue( MVedAudioClipInfoObserver& aView, CVedMovie& aMovie, MVeiQueueObserver& aObserver ) : - CActive(CActive::EPriorityStandard), iObserver( &aObserver ), iMovie( aMovie ), iView( aView ) - { - } - -void CVeiAddQueue::ConstructL() - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::ConstructL"); - - CActiveScheduler::Add(this); - iInsertVideoDialogOn = EFalse; - iWaitScheduler = new (ELeave) CActiveSchedulerWait; - iMovie.RegisterMovieObserverL( this ); - } - -EXPORT_C CVeiAddQueue::~CVeiAddQueue() - { - iAddQueue.ResetAndDestroy(); - delete iWaitScheduler; - - if ( iAudioClipInfo ) - { - delete iAudioClipInfo; - iAudioClipInfo = NULL; - } - - iMovie.UnregisterMovieObserver( this ); - - iObserver = NULL; - iGenerator = NULL; - } - - -EXPORT_C TBool CVeiAddQueue::ShowAudioClipDialogL() - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::ShowAudioClipDialogL() in"); - // Audio insert dialog for single file - CDesCArrayFlat* selectedFiles = new ( ELeave ) CDesCArrayFlat( 1 ); - CleanupStack::PushL(selectedFiles); - - CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC(); - - if ( MGFetch::RunL( *selectedFiles, EAudioFile, EFalse, mgFetchVerifier ) == EFalse ) - { - // User cancelled the dialog. - CleanupStack::PopAndDestroy( mgFetchVerifier ); - CleanupStack::PopAndDestroy( selectedFiles ); - return EFalse; - } - - CleanupStack::PopAndDestroy( mgFetchVerifier ); - - if ( iAudioClipInfo ) - { - delete iAudioClipInfo; - iAudioClipInfo = NULL; - } - iObserver->NotifyQueueProcessingStarted( MVeiQueueObserver::EProcessingAudio ); - // AudioClipInfoReady notifier is in EditVideoView - iAudioClipInfo = CVedAudioClipInfo::NewL( ( *selectedFiles )[0], iView ); - - CleanupStack::PopAndDestroy( selectedFiles ); - LOG(KVideoEditorLogFile, "CVeiAddQueue::ShowAudioClipDialogL() out"); - return ETrue; - } - - - -EXPORT_C TBool CVeiAddQueue::ShowVideoClipDialogL( VideoEditor::TCursorLocation aLocation, TInt aCurrentIndex ) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::ShowVideoClipDialogL In"); - // Video insert dialog for single file - CDesCArrayFlat* selectedFiles = new ( ELeave ) CDesCArrayFlat( 1 ); - CleanupStack::PushL(selectedFiles); - - CVeiMGFetchVerifier* mgFetchVerifier = CVeiMGFetchVerifier::NewLC(); - - if ( MGFetch::RunL( *selectedFiles, EVideoFile, EFalse, mgFetchVerifier ) == EFalse ) - { - CleanupStack::PopAndDestroy( mgFetchVerifier ); - CleanupStack::PopAndDestroy( selectedFiles ); - return EFalse; - } - - CleanupStack::PopAndDestroy( mgFetchVerifier ); - - TInt insertIndex; - iInsertVideoDialogOn = ETrue; - - // Video clip is added next to selected video clip. If cursor is not on videotrack, clip is - // inserted last. - if ( iMovie.VideoClipCount() == 0 ) - { - insertIndex = 0; - } - else if ( aLocation == VideoEditor::ECursorOnAudio || aLocation == VideoEditor::ECursorOnTransition ) - { - insertIndex = iMovie.VideoClipCount(); - } - else - { - insertIndex = aCurrentIndex + 1; - } - - HBufC* filename = HBufC::NewLC( (*selectedFiles )[0].Length() ); - *filename = (*selectedFiles )[0]; - iAddQueue.Append( filename ); - - iFailedCount = 0; - iInsertedCount = 0; - - iTotalCount = iAddQueue.Count(); - - iObserver->NotifyQueueProcessingStarted( MVeiQueueObserver::EProcessingVideo ); - AddNextL( insertIndex ); - - CleanupStack::Pop(filename); - CleanupStack::PopAndDestroy( selectedFiles ); - LOG(KVideoEditorLogFile, "CVeiAddQueue::ShowVideoClipDialogL Out"); - return ETrue; - } - - -EXPORT_C void CVeiAddQueue::InsertMediaL( const TDesC& aFilename ) - { - // aFilename is added to queue. Queue processing is started with StartProcessingL() function. - RFs& fs = CCoeEnv::Static()->FsSession(); - - if ( BaflUtils::FileExists( fs, aFilename ) ) - { - HBufC* filename = HBufC::NewLC( aFilename.Length() ); - *filename = aFilename; - iAddQueue.Append( filename ); - - iTotalCount = iAddQueue.Count(); - - CleanupStack::Pop( filename ); - } - } - -EXPORT_C TInt CVeiAddQueue::Count() const - { - return iTotalCount; - } - -EXPORT_C void CVeiAddQueue::StartProcessingL() - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::StartProcessingL"); - - iFailedCount = 0; - iInsertedCount = 0; - - iTotalCount = iAddQueue.Count(); - - if ( iTotalCount > 0 ) - { - iObserver->NotifyQueueProcessingStarted(); - - AddNextL(); - } - } - -TInt CVeiAddQueue::AddNextL( TInt aPosition ) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: In"); - -// Image params - TTimeIntervalMicroSeconds imageDuration( 5000000 ); - - RFs& fs = CCoeEnv::Static()->FsSession(); - TInt insertErr( KErrNone ); - TInt insertPosition; - - for( TInt i=0;i 0 ) - { - TInt percentage; - percentage = STATIC_CAST( TInt, ( TReal(iInsertedCount+iFailedCount) / TReal(iTotalCount) )*100 + 0.5 ); - iObserver->NotifyQueueProcessingProgressed( iInsertedCount+iFailedCount+1, percentage ); - - TDesC* filename = iAddQueue[0]; - - TBool fileExists = BaflUtils::FileExists( fs, *filename ); - - TParse file; - file.Set( *iAddQueue[0], NULL, NULL ); - - // Do not allow inserting DRM protected content. - if( VideoEditorUtils::IsDrmProtectedL(*filename) ) - { - LOGFMT(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: DRM protected file is rejected: %S", &filename); - insertErr = KErrAccessDenied; - } - - if ( file.ExtPresent() && fileExists && KErrNone == insertErr ) - { - if ( (file.Ext().CompareF( KExt3gp )== 0) || - (file.Ext().CompareF( KExtMp4 )== 0 )) - { - if ( aPosition == -1 ) - { - insertPosition = iMovie.VideoClipCount(); - } - else - { - insertPosition = aPosition; - } - LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 2"); - iMovie.InsertVideoClipL( *filename, insertPosition ); - LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 3"); - } - else - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 4"); - TRAP( insertErr, - iGenerator = CVeiImageClipGenerator::NewL( - file.FullName(), - TSize(KMaxVideoFrameResolutionX,KMaxVideoFrameResolutionY), - imageDuration, - KRgbBlack, - KVideoClipGenetatorDisplayMode, - fs, - *this) - ); - LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 5"); - } - - } - if ( fileExists && insertErr == KErrNone ) - { - iWaitScheduler->Start(); - } - else - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 7"); - if ( iInsertVideoDialogOn ) - { - insertErr = EInsertingSingleClip; - } - else - { - insertErr = EInsertingFromGallery; - } - TFileName fileName = file.Name(); - TBool cntn = iObserver->NotifyQueueClipFailed( fileName, insertErr ); - if ( !cntn ) - { - iAddQueue.Reset(); - break; - } - iFailedCount++; - } - - delete iAddQueue[0]; - iAddQueue.Remove( 0 ); - } // if - } // for - LOGFMT2(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: 8, iInsertedCount:%d, iFailedCount:%d", iInsertedCount, iFailedCount); - iObserver->NotifyQueueEmpty( iInsertedCount, iFailedCount ); - LOG(KVideoEditorLogFile, "CVeiAddQueue::AddNextL: Out"); - return insertErr; - } - -EXPORT_C void CVeiAddQueue::GetNext() - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::GetNext: In"); - if (iWaitScheduler->IsStarted() ) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::GetNext: 1"); - iWaitScheduler->AsyncStop(); - } - LOG(KVideoEditorLogFile, "CVeiAddQueue::GetNext: Out"); - } - -void CVeiAddQueue::DoCancel() - { - } - -void CVeiAddQueue::RunL() - { - } - - -void CVeiAddQueue::NotifyImageClipGeneratorInitializationComplete( - CVeiImageClipGenerator& /*aGenerator*/, TInt DEBUGLOG_ARG(aError) ) - { - LOGFMT(KVideoEditorLogFile, "CVeiAddQueue::NotifyImageClipGeneratorInitializationComplete: in, aError:%d", aError); - TRAP_IGNORE( iMovie.InsertVideoClipL(*iGenerator, ETrue, 0) ); - - // Generator is no longer our concern - iGenerator = NULL; - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyImageClipGeneratorInitializationComplete: out"); - } - - -void CVeiAddQueue::NotifyVideoClipAdded(CVedMovie& /*aMovie*/, TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAdded: In"); - iInsertedCount++; - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAdded: Out"); - } - -void CVeiAddQueue::NotifyVideoClipAddingFailed(CVedMovie& /*aMovie*/, TInt DEBUGLOG_ARG(aError) ) - { - LOGFMT(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAddingFailed: In, aError:%d", aError); - TInt error; - - if ( iInsertVideoDialogOn ) - { - error = EInsertingSingleClip; - } - else - { - error = EInsertingFromGallery; - } - - - TParse file; - file.Set( *iAddQueue[0], NULL, NULL ); - - TFileName fileName = file.Name(); - TBool ifContinue = iObserver->NotifyQueueClipFailed( fileName, error ); - if ( ifContinue && (error == EInsertingFromGallery) ) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAddingFailed: 1"); - iObserver->NotifyQueueProcessingStarted(); - GetNext(); - } - else - { - // @: release iWaitScheduler - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAddingFailed: 2"); - iWaitScheduler->AsyncStop(); - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAddingFailed: 3"); - } - iFailedCount++; - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAddingFailed: Out"); - } - -void CVeiAddQueue::NotifyVideoClipRemoved(CVedMovie& /*aMovie*/, TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipRemoved: In and out"); - } - -void CVeiAddQueue::NotifyVideoClipIndicesChanged(CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, - TInt /*aNewIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipIndicesChanged: In and out"); - } - -void CVeiAddQueue::NotifyVideoClipTimingsChanged(CVedMovie& /*aMovie*/, - TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipTimingsChanged: In and out"); - } - -void CVeiAddQueue::NotifyVideoClipColorEffectChanged(CVedMovie& /*aMovie*/, - TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipColorEffectChanged: In and out"); - } - -void CVeiAddQueue::NotifyVideoClipAudioSettingsChanged(CVedMovie& /*aMovie*/, - TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipAudioSettingsChanged: In and out"); - } - -void CVeiAddQueue::NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/, - TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipGeneratorSettingsChanged: In and out"); - } - -void CVeiAddQueue::NotifyVideoClipDescriptiveNameChanged(CVedMovie& /*aMovie*/, - TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipDescriptiveNameChanged: In and out"); - } - -void CVeiAddQueue::NotifyStartTransitionEffectChanged(CVedMovie& /*aMovie*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyStartTransitionEffectChanged: In and out"); - } - -void CVeiAddQueue::NotifyMiddleTransitionEffectChanged(CVedMovie& /*aMovie*/, - TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyMiddleTransitionEffectChanged: In and out"); - } - -void CVeiAddQueue::NotifyEndTransitionEffectChanged(CVedMovie& /*aMovie*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyEndTransitionEffectChanged: In and out"); - } - -void CVeiAddQueue::NotifyAudioClipAdded(CVedMovie& /*aMovie*/, TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipAdded: In and out"); - } - -void CVeiAddQueue::NotifyAudioClipAddingFailed(CVedMovie& /*aMovie*/, TInt DEBUGLOG_ARG(aError) ) - { - LOGFMT(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipAddingFailed: In and out, aError:%d", aError); - } - -void CVeiAddQueue::NotifyAudioClipRemoved(CVedMovie& /*aMovie*/, TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipRemoved: In and out"); - } - -void CVeiAddQueue::NotifyAudioClipIndicesChanged(CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, - TInt /*aNewIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipIndicesChanged: In and out"); - } - -void CVeiAddQueue::NotifyAudioClipTimingsChanged(CVedMovie& /*aMovie*/, - TInt /*aIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipTimingsChanged: In and out"); - } - -void CVeiAddQueue::NotifyMovieQualityChanged(CVedMovie& /*aMovie*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyMovieQualityChanged: In and out"); - } - -void CVeiAddQueue::NotifyMovieReseted(CVedMovie& /*aMovie*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyMovieReseted: In and out"); - } - -void CVeiAddQueue::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyMovieOutputParametersChanged: In and out"); - } - -void CVeiAddQueue::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipDynamicLevelMarkInserted: In and out"); - } - -void CVeiAddQueue::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyAudioClipDynamicLevelMarkRemoved: In and out"); - } - -void CVeiAddQueue::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipDynamicLevelMarkInserted: In and out"); - } - -void CVeiAddQueue::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, - TInt /*aClipIndex*/, - TInt /*aMarkIndex*/) - { - LOG(KVideoEditorLogFile, "CVeiAddQueue::NotifyVideoClipDynamicLevelMarkRemoved: In and out"); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiDisplayLighter.cpp --- a/videditor/VideoEditorCommon/src/VeiDisplayLighter.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// User includes -#include "VeiDisplayLighter.h" - -EXPORT_C CVeiDisplayLighter* CVeiDisplayLighter::NewL() - { - CVeiDisplayLighter* self = new (ELeave) CVeiDisplayLighter(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -CVeiDisplayLighter::CVeiDisplayLighter(): CActive( CActive::EPriorityLow ) - { - CActiveScheduler::Add( this ); - } - -CVeiDisplayLighter::~CVeiDisplayLighter() - { - Cancel(); - iTimer.Close(); - } - -void CVeiDisplayLighter::ConstructL() - { - iTimeout = 10; - iTimer.CreateLocal(); - } - -EXPORT_C void CVeiDisplayLighter::Reset() - { - Cancel(); - Start(); - } - -EXPORT_C void CVeiDisplayLighter::Stop() - { - Cancel(); - } - - -void CVeiDisplayLighter::DoCancel() - { - iTimer.Cancel(); - } - -EXPORT_C void CVeiDisplayLighter::Start() - { - if ( !IsActive() ) - { - iTimer.Inactivity( iStatus, iTimeout ); - SetActive(); - } - } - -void CVeiDisplayLighter::RunL() - { - if ( iStatus == KErrNone ) - { - TInt inactivity = User::InactivityTime().Int(); - if ( inactivity >= iTimeout ) - { - User::ResetInactivityTime(); - iTimer.Inactivity( iStatus, iTimeout ); - SetActive(); - } - } - } -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiFrameTaker.cpp --- a/videditor/VideoEditorCommon/src/VeiFrameTaker.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,152 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// System includes -#include -#include -#include -// User includes - -#include "VideoEditorDebugUtils.h" -#include "veiframetaker.h" - -CVeiFrameTaker::CVeiFrameTaker( MVeiFrameTakerObserver& aObserver ) : CActive(CActive::EPriorityLow), iObserver( aObserver ) - { - } - - -CVeiFrameTaker::~CVeiFrameTaker() - { - delete iWaitScheduler; - delete iFirstFrame; - delete iLastFrame; - delete iTimelineFrame; - } - - - -EXPORT_C CVeiFrameTaker* CVeiFrameTaker::NewL( MVeiFrameTakerObserver& aObserver ) - { - CVeiFrameTaker* self = new (ELeave) CVeiFrameTaker( aObserver ); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C void CVeiFrameTaker::GetFramesL( CVedVideoClipInfo& aInfo, - TInt const aFirstFrame, TSize* const aFirstResolution, - TInt const aLastFrame, TSize* const aLastResolution, - TInt const aTimelineFrame, TSize* const aTimelineResolution, - TInt aPriority) - { - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: In"); - iError = KErrNone; - iFrameCount = 0; - - delete iFirstFrame; - iFirstFrame = NULL; - delete iLastFrame; - iLastFrame = NULL; - delete iTimelineFrame; - iTimelineFrame = NULL; - - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 1"); - aInfo.GetFrameL( *this, aFirstFrame, aFirstResolution, EColor64K, EFalse, aPriority ); - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 2"); - - if ( iFrameCount == 0 ) // GetFrameL is still active, so start waiting - { - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 3"); - iWaitScheduler->Start(); - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 4"); - } - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 5"); - if ( iError == KErrNone ) - { - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 6"); - aInfo.GetFrameL( *this, aLastFrame, aLastResolution, EColor64K, EFalse, aPriority ); - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 7"); - if ( iFrameCount == 1 ) - { - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 8"); - iWaitScheduler->Start(); - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 9"); - } - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 10"); - } - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 11"); - if ( iError == KErrNone ) - { - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 12"); - aInfo.GetFrameL( *this, aTimelineFrame, aTimelineResolution, EColor64K, EFalse, aPriority ); - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 13"); - if ( iFrameCount == 2 ) - { - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 14"); - iWaitScheduler->Start(); - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 15"); - } - } - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: 16"); - iObserver.NotifyFramesCompleted( iFirstFrame, iLastFrame, iTimelineFrame, iError ); - LOG(KVideoEditorLogFile, "CVeiFrameTaker::GetFramesL: Out"); - } - -void CVeiFrameTaker::ConstructL() - { - iWaitScheduler = new (ELeave) CActiveSchedulerWait; - CActiveScheduler::Add(this); - } - -void CVeiFrameTaker::DoCancel() - { - } - -void CVeiFrameTaker::RunL() - { - iWaitScheduler->AsyncStop(); - } - -void CVeiFrameTaker::NotifyVideoClipFrameCompleted(CVedVideoClipInfo& /*aInfo*/, TInt aError, CFbsBitmap* aFrame) - { - iError = aError; - - if ( iFrameCount == 0 ) - { - iFirstFrame = aFrame; - } - else if ( iFrameCount == 1 ) - { - iLastFrame = aFrame; - } - else if ( iFrameCount == 2 ) - { - iTimelineFrame = aFrame; - } - - iFrameCount++; -// Text frame generator is quite fast, so waitscheduler is not -// started everytime. - if (iWaitScheduler->IsStarted() ) - iWaitScheduler->AsyncStop(); - } -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiImageClipGenerator.cpp --- a/videditor/VideoEditorCommon/src/VeiImageClipGenerator.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,999 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "VeiImageClipGenerator.h" - -#include -#include -#include -#include -#include -#include -#include - -#define KMiddleFrameDuration TTimeIntervalMicroSeconds(1000000) - -const TInt KNumberOfTransitionFrames = 10; - -EXPORT_C CVeiImageClipGenerator* CVeiImageClipGenerator::NewL(const TDesC& aFilename, - const TSize& aMaxResolution, - const TTimeIntervalMicroSeconds& aDuration, - const TRgb& aBackgroundColor, - TDisplayMode aMaxDisplayMode, - RFs& aFs, - MVeiImageClipGeneratorObserver& aObserver) - { - CVeiImageClipGenerator* self = - CVeiImageClipGenerator::NewLC(aFilename, aMaxResolution, aDuration, aBackgroundColor, aMaxDisplayMode, aFs, aObserver); - CleanupStack::Pop(self); - return self; - } - - -EXPORT_C CVeiImageClipGenerator* CVeiImageClipGenerator::NewLC(const TDesC& aFilename, - const TSize& aMaxResolution, - const TTimeIntervalMicroSeconds& aDuration, - const TRgb& aBackgroundColor, - TDisplayMode aMaxDisplayMode, - RFs& aFs, - MVeiImageClipGeneratorObserver& aObserver) - { - CVeiImageClipGenerator* self = new (ELeave) CVeiImageClipGenerator(aDuration, aBackgroundColor, aMaxResolution); - CleanupStack::PushL(self); - self->ConstructL(aFilename, aObserver, aMaxDisplayMode, aFs); - return self; - } - - -CVeiImageClipGenerator::CVeiImageClipGenerator(const TTimeIntervalMicroSeconds& aDuration, - const TRgb& aBackgroundColor, - const TSize& aMaxResolution) - : iReady(EFalse), iMaxResolution(aMaxResolution), iBackgroundColor(aBackgroundColor), iInitializing(ETrue) - { - __ASSERT_ALWAYS(iMaxResolution.iHeight >= 0, TVedPanic::Panic(TVedPanic::EImageClipGeneratorIllegalMaxResolution)); - __ASSERT_ALWAYS(iMaxResolution.iWidth >= 0, TVedPanic::Panic(TVedPanic::EImageClipGeneratorIllegalMaxResolution)); - - SetDuration(aDuration); - - iInitializing = EFalse; - } - - -void CVeiImageClipGenerator::ConstructL(const TDesC& aFilename, - MVeiImageClipGeneratorObserver& aObserver, - TDisplayMode aMaxDisplayMode, RFs& aFs) - { - iDecodeOperation = CVeiImageClipDecodeOperation::NewL(*this, aFilename, aObserver, aFs); - iFrameOperation = CVeiImageClipFrameOperation::NewL(*this); - - iFilename = aFilename.AllocL(); - - TParse parse; - parse.Set(aFilename, 0, 0); - iDescriptiveName = parse.Name().AllocL(); - - iDecodeOperation->StartOperationL(iMaxResolution, aMaxDisplayMode); - } - - -EXPORT_C CVeiImageClipGenerator::~CVeiImageClipGenerator() - { - delete iDecodeOperation; - delete iFrameOperation; - delete iDescriptiveName; - delete iBitmap; - delete iMask; - delete iFilename; - } - - -EXPORT_C TPtrC CVeiImageClipGenerator::DescriptiveName() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - - return *iDescriptiveName; - } - - -EXPORT_C TUid CVeiImageClipGenerator::Uid() const - { - return KUidImageClipGenerator; - } - -EXPORT_C TTimeIntervalMicroSeconds CVeiImageClipGenerator::Duration() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - - return iDuration; - } - - -EXPORT_C TInt CVeiImageClipGenerator::VideoFrameCount() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - - TInt frameCount = 0; - - TInt maxFramerate = 10; - if (IsInserted()) - { - maxFramerate = Movie()->MaximumFramerate(); - } - - TTimeIntervalMicroSeconds frameDuration(TInt64(1000000 / maxFramerate)); - if (iDuration.Int64() < (TInt64(KNumberOfTransitionFrames * 2 + 1) * frameDuration.Int64())) - { - frameCount = (static_cast(iDuration.Int64() / frameDuration.Int64())); - if ((iDuration.Int64() % frameDuration.Int64()) != 0) - { - frameCount++; - } - } - else - { - frameCount = KNumberOfTransitionFrames * 2; - TTimeIntervalMicroSeconds middleTime(iDuration.Int64() - (TInt64(KNumberOfTransitionFrames * 2) * frameDuration.Int64())); - frameCount += (static_cast(middleTime.Int64() / KMiddleFrameDuration.Int64())); - if ((middleTime.Int64() % KMiddleFrameDuration.Int64()) != 0) - { - frameCount++; - } - } - return frameCount; - } - - -EXPORT_C TTimeIntervalMicroSeconds CVeiImageClipGenerator::VideoFrameStartTime(TInt aIndex) const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - __ASSERT_ALWAYS(aIndex >= 0 && aIndex < VideoFrameCount(), TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - - TInt maxFramerate = 10; - if (IsInserted()) - { - maxFramerate = Movie()->MaximumFramerate(); - } - - TTimeIntervalMicroSeconds frameDuration(TInt64(1000000 / maxFramerate)); - TTimeIntervalMicroSeconds finalThreshold(iDuration.Int64() - TInt64(KNumberOfTransitionFrames) * frameDuration.Int64()); - TTimeIntervalMicroSeconds startThreshold(TInt64(KNumberOfTransitionFrames) * frameDuration.Int64()); - TTimeIntervalMicroSeconds startTime(-1); - TInt frameCount = VideoFrameCount(); - - - if (frameCount < (KNumberOfTransitionFrames * 2 + 1)) - { - // Special case: less than KNumberOfTransitionFrames frames in the movie - startTime = TTimeIntervalMicroSeconds(TInt64(aIndex) * frameDuration.Int64()); - } - else if (aIndex < KNumberOfTransitionFrames) - { - // Start frames - startTime = TTimeIntervalMicroSeconds(TInt64(aIndex) * frameDuration.Int64()); - } - else if (aIndex >= (frameCount - KNumberOfTransitionFrames)) - { - // End frames - startTime = TTimeIntervalMicroSeconds( - static_cast((aIndex - frameCount) + KNumberOfTransitionFrames) - * frameDuration.Int64() + finalThreshold.Int64() ); - } - else - { - // Middle frames - startTime = TTimeIntervalMicroSeconds(startThreshold.Int64() - + TInt64(aIndex- KNumberOfTransitionFrames) * KMiddleFrameDuration.Int64()); - } - - return startTime; - } - - -EXPORT_C TTimeIntervalMicroSeconds CVeiImageClipGenerator::VideoFrameEndTime(TInt aIndex) const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - __ASSERT_ALWAYS(aIndex >= 0 && aIndex < VideoFrameCount(), TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - - if (aIndex == VideoFrameCount() - 1) - { - return iDuration; - } - - TInt maxFramerate = 10; - if (IsInserted()) - { - maxFramerate = Movie()->MaximumFramerate(); - } - - TTimeIntervalMicroSeconds frameDuration(TInt64(1000000 / maxFramerate)); - TTimeIntervalMicroSeconds finalThreshold(iDuration.Int64() - TInt64(KNumberOfTransitionFrames) * frameDuration.Int64()); - TTimeIntervalMicroSeconds startThreshold(TInt64(KNumberOfTransitionFrames) * frameDuration.Int64()); - TTimeIntervalMicroSeconds endTime(-1); - - - TInt frameCount = VideoFrameCount(); - - if (frameCount < (KNumberOfTransitionFrames * 2 + 1)) - { - // Special case: less than KNumberOfTransitionFrames frames in the movie - endTime = TTimeIntervalMicroSeconds(TInt64(aIndex + 1) * frameDuration.Int64()); - } - else if (aIndex < KNumberOfTransitionFrames) - { - // start frames - endTime = TTimeIntervalMicroSeconds(TInt64(aIndex + 1) * frameDuration.Int64()); - } - else if (aIndex > (frameCount - KNumberOfTransitionFrames)) - { - // end frames - endTime = TTimeIntervalMicroSeconds(TInt64((aIndex - frameCount) - + KNumberOfTransitionFrames) * frameDuration.Int64() - + finalThreshold.Int64()); - } - else - { - // middle frames - endTime = TTimeIntervalMicroSeconds(startThreshold.Int64() - + TInt64(aIndex - (KNumberOfTransitionFrames - 1)) - * KMiddleFrameDuration.Int64()); - - if (endTime.Int64() >= finalThreshold.Int64()) - { - // last of the middle frames may be shorter than normal - endTime = finalThreshold; - } - } - return endTime; - } - - -EXPORT_C TTimeIntervalMicroSeconds CVeiImageClipGenerator::VideoFrameDuration(TInt aIndex) const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - __ASSERT_ALWAYS(aIndex >= 0 && aIndex < VideoFrameCount(), TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - - - // check maximum framerate - TInt maxFramerate = 10; - if (IsInserted()) - { - maxFramerate = Movie()->MaximumFramerate(); - } - - // calculate some timing values. - TTimeIntervalMicroSeconds frameDuration(TInt64(1000000 / maxFramerate)); - TTimeIntervalMicroSeconds finalThreshold(iDuration.Int64() - TInt64(KNumberOfTransitionFrames) * frameDuration.Int64()); - TTimeIntervalMicroSeconds startThreshold(TInt64(KNumberOfTransitionFrames) * frameDuration.Int64()); - - - TInt frameCount = VideoFrameCount(); - TInt finalThresholdIndex = GetVideoFrameIndex(finalThreshold); - - if ((frameCount < (KNumberOfTransitionFrames * 2 + 1)) && (aIndex == (frameCount - 1))) - { - // Special case: short clip with only frames that have max framerate - // - all of the frames are of equal duration (frameDuration) except - // the last one. - frameDuration = TTimeIntervalMicroSeconds(iDuration.Int64() - (TInt64(frameCount - 1) * frameDuration.Int64())); - } - else if (aIndex >= KNumberOfTransitionFrames && aIndex < finalThresholdIndex) - { - if (aIndex == (finalThresholdIndex - 1)) - { - // Last one of the middle frames - frameDuration = TTimeIntervalMicroSeconds(finalThreshold.Int64() - VideoFrameStartTime(aIndex).Int64()); - } - else - { - // Ordinary middle frame - frameDuration = KMiddleFrameDuration; - } - } - return frameDuration; - } - -EXPORT_C TBool CVeiImageClipGenerator::VideoFrameIsIntra(TInt aIndex) const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - if (aIndex == 0) - { - return ETrue; - } - return EFalse; - } - -EXPORT_C TInt CVeiImageClipGenerator::VideoFirstFrameComplexityFactor() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - return iFirstFrameComplexityFactor; - } - -EXPORT_C TInt CVeiImageClipGenerator::VideoFrameDifferenceFactor(TInt aIndex) const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - __ASSERT_ALWAYS(aIndex >= 0 && aIndex < VideoFrameCount(), TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - - if (aIndex == 0) - { - return 1000; - } - else - { - return 0; - } - } - - -EXPORT_C TInt CVeiImageClipGenerator::GetVideoFrameIndex(TTimeIntervalMicroSeconds aTime) const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - __ASSERT_ALWAYS(aTime.Int64() >= 0, TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalVideoFrameTime)); - __ASSERT_ALWAYS(aTime.Int64() <= iDuration.Int64(), TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalVideoFrameTime)); - - TInt index = -1; - - TInt maxFramerate = 10; - if (IsInserted()) - { - maxFramerate = Movie()->MaximumFramerate(); - } - - TTimeIntervalMicroSeconds frameDuration(TInt64(1000000 / maxFramerate)); - TTimeIntervalMicroSeconds finalThreshold( - iDuration.Int64() - TInt64(KNumberOfTransitionFrames) * frameDuration.Int64()); - TTimeIntervalMicroSeconds startThreshold( - TInt64(KNumberOfTransitionFrames) * frameDuration.Int64()); - - if (iDuration <= (TInt64(KNumberOfTransitionFrames * 2) * frameDuration.Int64())) - { - index = static_cast(aTime.Int64() / frameDuration.Int64()); - } - else if (aTime < startThreshold) - { - index = static_cast(aTime.Int64() / frameDuration.Int64()); - } - else if (aTime >= finalThreshold) - { - TTimeIntervalMicroSeconds middleDuration(finalThreshold.Int64() - startThreshold.Int64()); - TInt numberOfMiddleFrames = - static_cast(middleDuration.Int64() / KMiddleFrameDuration.Int64()); - if (middleDuration.Int64() % KMiddleFrameDuration.Int64() != 0) - { - numberOfMiddleFrames++; - } - - index = KNumberOfTransitionFrames + numberOfMiddleFrames - + static_cast((aTime.Int64() - finalThreshold.Int64()) / frameDuration.Int64()); - } - else - { - index = KNumberOfTransitionFrames - + static_cast((aTime.Int64() - startThreshold.Int64()) / KMiddleFrameDuration.Int64()); - } - - return index; - } - - -EXPORT_C void CVeiImageClipGenerator::GetFrameL(MVedVideoClipGeneratorFrameObserver& aObserver, - TInt aIndex, TSize* const aResolution, - TDisplayMode aDisplayMode, TBool aEnhance, - TInt aPriority) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - __ASSERT_ALWAYS((aIndex >= 0 && aIndex < VideoFrameCount()) || - aIndex == KFrameIndexBestThumb, - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - __ASSERT_ALWAYS((aResolution->iHeight <= iMaxResolution.iHeight && - aResolution->iWidth <= iMaxResolution.iWidth), - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalFrameResolution)); - __ASSERT_ALWAYS((aResolution->iHeight >= 0 && aResolution->iWidth >= 0), - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalFrameResolution)); - - - TDisplayMode displayMode = aDisplayMode; - - // check validity of thumbnail and associated operation - if(aEnhance) // for saving to file - { - if(displayMode == ENone) // if no preference - { - displayMode = EColor16M; // 24-bit color image for enhancement - } - else if(displayMode != EColor16M) // invalid combination - { - User::Leave(KErrNotSupported); - } - } - else // for screen display - { - if(displayMode == ENone) // if no preference - { - displayMode = EColor64K; // 16-bit image - } - } - - CFbsBitmap* destBitmap = new (ELeave) CFbsBitmap; - CleanupStack::PushL(destBitmap); - User::LeaveIfError(destBitmap->Create(*aResolution, displayMode)); - CleanupStack::Pop(destBitmap); - - iFrameOperation->StartOperationL(&aObserver, aIndex, aEnhance, iBitmap, - destBitmap, iMask, aPriority); - } - - -EXPORT_C void CVeiImageClipGenerator::CancelFrame() - { - iFrameOperation->Cancel(); - } - - -EXPORT_C void CVeiImageClipGenerator::SetDuration(const TTimeIntervalMicroSeconds& aDuration) - { - __ASSERT_ALWAYS(iReady || iInitializing, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - __ASSERT_ALWAYS(aDuration.Int64() > 0, - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalDuration)); - - iDuration = aDuration; - - if (!iInitializing) - { - ReportDurationChanged(); - } - } - - -EXPORT_C void CVeiImageClipGenerator::SetBackgroundColor(const TRgb& aBackgroundColor) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - - iBackgroundColor = aBackgroundColor; - ReportSettingsChanged(); - } - -EXPORT_C const TRgb& CVeiImageClipGenerator::BackgroundColor() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - - return iBackgroundColor; - } - -EXPORT_C TPtrC CVeiImageClipGenerator::ImageFilename() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EImageClipGeneratorNotReady)); - return *iFilename; - } - -void CVeiImageClipGenerator::UpdateFirstFrameComplexityFactorL() - { - iFirstFrameComplexityFactor = CalculateFrameComplexityFactor(iBitmap); - } - -////////////////////////////////////////////////////////////////////////// -// Decode operation -////////////////////////////////////////////////////////////////////////// - - -CVeiImageClipDecodeOperation* CVeiImageClipDecodeOperation::NewL(CVeiImageClipGenerator& aGenerator, - const TDesC& aFilename, - MVeiImageClipGeneratorObserver& aObserver, - RFs& aFs, - TInt aPriority) - { - CVeiImageClipDecodeOperation* self = - new (ELeave) CVeiImageClipDecodeOperation(aGenerator, aObserver, aPriority); - CleanupStack::PushL(self); - self->ConstructL(aFilename, aFs); - CleanupStack::Pop(self); - return self; - } - - -CVeiImageClipDecodeOperation::CVeiImageClipDecodeOperation(CVeiImageClipGenerator& aGenerator, - MVeiImageClipGeneratorObserver& aObserver, - TInt aPriority) - : CActive(aPriority), iGenerator(aGenerator), iObserver(aObserver) - { - CActiveScheduler::Add(this); - } - - -void CVeiImageClipDecodeOperation::ConstructL(const TDesC& aFilename, RFs& aFs) - { - iDecoder = CImageDecoder::FileNewL(aFs, aFilename); - } - - -CVeiImageClipDecodeOperation::~CVeiImageClipDecodeOperation() - { - Cancel(); - - delete iDecoder; - iDecoder = 0; - delete iBitmap; - iBitmap = 0; - delete iMask; - iMask = 0; - } - - -void CVeiImageClipDecodeOperation::DoCancel() - { - if (iDecoder) - { - iDecoder->Cancel(); - } - - delete iDecoder; - iDecoder = 0; - - delete iBitmap; - iBitmap = 0; - - delete iMask; - iMask = 0; - - iObserver.NotifyImageClipGeneratorInitializationComplete(iGenerator, KErrCancel); - } - - -void CVeiImageClipDecodeOperation::RunL() - { - /* Transfer ownership of iBitmap to generator. */ - iGenerator.iBitmap = iBitmap; - iBitmap = 0; - iGenerator.iMask = iMask; - iMask = 0; - iGenerator.iReady = ETrue; - iGenerator.UpdateFirstFrameComplexityFactorL(); - - /* Notify observer. */ - iObserver.NotifyImageClipGeneratorInitializationComplete(iGenerator, KErrNone); - delete iDecoder; - iDecoder = 0; - } - -TInt CVeiImageClipDecodeOperation::RunError(TInt aError) - { - if (iDecoder) - { - iDecoder->Cancel(); - } - delete iDecoder; - iDecoder = 0; - delete iBitmap; - iBitmap = 0; - delete iMask; - iMask = 0; - - iObserver.NotifyImageClipGeneratorInitializationComplete(iGenerator, aError); - return KErrNone; - } - - - -void CVeiImageClipDecodeOperation::StartOperationL(const TSize& aMaxResolution, TDisplayMode aDisplayMode) - { - __ASSERT_ALWAYS(!IsActive(), TVedPanic::Panic(TVedPanic::EInternal)); - - const TFrameInfo& info = iDecoder->FrameInfo(); - TSize targetResolution(0, 0); - const TSize sourceResolution(info.iOverallSizeInPixels); - - /* Calculate resolution. */ - - if ((sourceResolution.iWidth <= aMaxResolution.iWidth) - && (sourceResolution.iHeight <= aMaxResolution.iHeight)) - { - targetResolution.iWidth = sourceResolution.iWidth; - targetResolution.iHeight = sourceResolution.iHeight; - } - else if (info.iFlags & TFrameInfo::EFullyScaleable) - { - if ((sourceResolution.iWidth * aMaxResolution.iHeight) > - (sourceResolution.iHeight * aMaxResolution.iWidth)) - { - targetResolution.iWidth = aMaxResolution.iWidth; - targetResolution.iHeight = - (targetResolution.iWidth * sourceResolution.iHeight) / sourceResolution.iWidth; - } - else - { - targetResolution.iHeight = aMaxResolution.iHeight; - targetResolution.iWidth = - (targetResolution.iHeight * sourceResolution.iWidth) / sourceResolution.iHeight; - } - } - else - { - targetResolution.iWidth = (sourceResolution.iWidth / 8) + 1; - targetResolution.iHeight = (sourceResolution.iHeight / 8) + 1; - - if ((targetResolution.iWidth < aMaxResolution.iWidth) - && (targetResolution.iHeight < aMaxResolution.iHeight)) - { - targetResolution.iWidth = (sourceResolution.iWidth / 4) + 1; - targetResolution.iHeight = (sourceResolution.iHeight / 4) + 1; - } - - if ((targetResolution.iWidth < aMaxResolution.iWidth) - && (targetResolution.iHeight < aMaxResolution.iHeight)) - { - targetResolution.iWidth = (sourceResolution.iWidth / 2) + 1; - targetResolution.iHeight = (sourceResolution.iHeight / 2) + 1; - } - - if ((targetResolution.iWidth < aMaxResolution.iWidth) - && (targetResolution.iHeight < aMaxResolution.iHeight)) - { - targetResolution.iWidth = (sourceResolution.iWidth); - targetResolution.iHeight = (sourceResolution.iHeight); - } - } - - - iBitmap = new (ELeave) CFbsBitmap; - TInt err = iBitmap->Create(targetResolution, aDisplayMode); - - if (err != KErrNone) - { - delete iBitmap; - iBitmap = 0; - iObserver.NotifyImageClipGeneratorInitializationComplete(iGenerator, err); - return; - } - - if (info.iFlags & TFrameInfo::ETransparencyPossible) - { - iMask = new (ELeave) CFbsBitmap; - if (info.iFlags & TFrameInfo::EAlphaChannel) - { - err = iMask->Create(targetResolution, EGray256); - } - else - { - err = iMask->Create(targetResolution, EGray2); - } - } - - if (err != KErrNone) - { - delete iBitmap; - iBitmap = 0; - delete iMask; - iMask = 0; - iObserver.NotifyImageClipGeneratorInitializationComplete(iGenerator, err); - return; - } - - if (iMask != 0) - { - iDecoder->Convert(&iStatus, *iBitmap, *iMask); - } - else - { - iDecoder->Convert(&iStatus, *iBitmap); - } - - SetActive(); - } - - -////////////////////////////////////////////////////////////////////////// -// Frame operation -////////////////////////////////////////////////////////////////////////// - -CVeiImageClipFrameOperation* CVeiImageClipFrameOperation::NewL(CVeiImageClipGenerator& aGenerator) - { - CVeiImageClipFrameOperation* self = - new (ELeave) CVeiImageClipFrameOperation(aGenerator); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -CVeiImageClipFrameOperation::CVeiImageClipFrameOperation(CVeiImageClipGenerator& aGenerator) - : CActive(EPriorityStandard), iGenerator(aGenerator) - { - CActiveScheduler::Add(this); - } - - -void CVeiImageClipFrameOperation::ConstructL() - { - } - - -CVeiImageClipFrameOperation::~CVeiImageClipFrameOperation() - { - Cancel(); - delete iScaler; - iScaler = 0; - delete iDestBitmap; - iDestBitmap = 0; - delete iScaledBitmap; - iScaledBitmap = 0; - delete iScaledMask; - iScaledMask = 0; - - iSourceBitmap = 0; - iSourceMask = 0; - iObserver = 0; - } - - -void CVeiImageClipFrameOperation::StartOperationL(MVedVideoClipGeneratorFrameObserver* aObserver, - TInt aIndex, TBool aEnhance, - CFbsBitmap* aSourceBitmap, CFbsBitmap* aDestBitmap, - CFbsBitmap* aSourceMask, TInt aPriority) - { - __ASSERT_ALWAYS(!IsActive(), TVedPanic::Panic(TVedPanic::EImageClipGeneratorFrameOperationAlreadyRunning)); - - iObserver = aObserver; - iSourceBitmap = aSourceBitmap; - iDestBitmap = aDestBitmap; - iSourceMask = aSourceMask; - iIndex = aIndex; - iEnhance = aEnhance; - - SetPriority(aPriority); - - - TSize sourceRes = iSourceBitmap->SizeInPixels(); - TSize destRes = iDestBitmap->SizeInPixels(); - TSize movieRes = iGenerator.Movie()->Resolution(); - - TSize imageResInMovie(0,0); - if ((sourceRes.iWidth >= movieRes.iWidth) || (sourceRes.iHeight >= movieRes.iHeight)) - { - // Downscaling - if ((sourceRes.iWidth * movieRes.iHeight) > - (sourceRes.iHeight * movieRes.iWidth)) - { - imageResInMovie.iWidth = movieRes.iWidth; - imageResInMovie.iHeight = - (movieRes.iWidth * sourceRes.iHeight) / sourceRes.iWidth; - } - else - { - imageResInMovie.iHeight = movieRes.iHeight; - imageResInMovie.iWidth = - (movieRes.iHeight * sourceRes.iWidth) / sourceRes.iHeight; - } - } - else - { - // Upscaling - limit to a factor of two - if ((sourceRes.iWidth * movieRes.iHeight) > - (sourceRes.iHeight * movieRes.iWidth)) - { - imageResInMovie.iWidth = Min(movieRes.iWidth, (sourceRes.iWidth * 2)); - imageResInMovie.iHeight = (imageResInMovie.iWidth * sourceRes.iHeight) / sourceRes.iWidth; - } - else - { - imageResInMovie.iHeight = Min((sourceRes.iHeight * 2), movieRes.iHeight); - imageResInMovie.iWidth = (imageResInMovie.iHeight * sourceRes.iWidth) / sourceRes.iHeight; - } - } - - TSize movieResInDestBitmap(-1,-1); - if ((movieRes.iWidth * destRes.iHeight) > - (movieRes.iHeight * destRes.iWidth)) - { - movieResInDestBitmap.iWidth = destRes.iWidth; - movieResInDestBitmap.iHeight = - (movieResInDestBitmap.iWidth * movieRes.iHeight) / movieRes.iWidth; - } - else - { - movieResInDestBitmap.iHeight = destRes.iHeight; - movieResInDestBitmap.iWidth = - (movieResInDestBitmap.iHeight * movieRes.iWidth) / movieRes.iHeight; - } - - - TSize targetRes(imageResInMovie); - targetRes.iWidth = imageResInMovie.iWidth * movieResInDestBitmap.iWidth / movieRes.iWidth; - targetRes.iHeight = imageResInMovie.iHeight * movieResInDestBitmap.iHeight / movieRes.iHeight; - - TSize cachedRes(-1, -1); - if (iScaledBitmap) - { - cachedRes = iScaledBitmap->SizeInPixels(); - } - - /* Check if we already have scaled this bitmap.*/ - if ((cachedRes.iWidth == targetRes.iWidth) || - (cachedRes.iHeight == targetRes.iHeight)) - { - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - return; - } - else if (iScaledBitmap) - { - delete iScaledBitmap; - iScaledBitmap = 0; - delete iScaledMask; - iScaledMask = 0; - } - - delete iScaler; - iScaler = NULL; - iScaler = CBitmapScaler::NewL(); - - iScaledBitmap = new (ELeave) CFbsBitmap; - User::LeaveIfError(iScaledBitmap->Create(targetRes, iDestBitmap->DisplayMode())); - iScaler->Scale(&iStatus, *iSourceBitmap, *iScaledBitmap, ETrue); - SetActive(); - } - - - -void CVeiImageClipFrameOperation::RunL() - { - if (!iNoScaling && iSourceMask && !iScaledMask) - { - /* Scale the mask. */ - iScaledMask = new (ELeave) CFbsBitmap; - User::LeaveIfError(iScaledMask->Create(iScaledBitmap->SizeInPixels(), iSourceMask->DisplayMode())); - iScaler->Scale(&iStatus, *iSourceMask, *iScaledMask, ETrue); - SetActive(); - return; - } - - /* Select source. */ - CFbsBitmap* bitmap = 0; - CFbsBitmap* mask = 0; - - if (iScaledBitmap) - { - bitmap = iScaledBitmap; - } - else - { - bitmap = iSourceBitmap; - } - - if (iScaledMask) - { - mask = iScaledMask; - } - else - { - mask = iSourceMask; - } - - - /* Initialize context. */ - CFbsDevice* device = CFbsBitmapDevice::NewL(iDestBitmap); - CleanupStack::PushL(device); - CFbsBitGc* gc = NULL; - User::LeaveIfError(device->CreateContext(gc)); - - /* Calculate source point. */ - TSize destRes = iDestBitmap->SizeInPixels(); - TSize sourceRes = bitmap->SizeInPixels(); - TPoint sourcePoint((destRes.iWidth - sourceRes.iWidth) / 2, - (destRes.iHeight - sourceRes.iHeight) / 2); - - /* Draw background (this is relevant for scaled images and transparency). */ - gc->SetBrushColor(iGenerator.BackgroundColor()); - gc->SetBrushStyle(CGraphicsContext::ESolidBrush); - gc->DrawRect(TRect(TPoint(0, 0), destRes)); - - if (mask) - { - TRect sourceRect(bitmap->SizeInPixels()); - gc->BitBltMasked(sourcePoint, bitmap, sourceRect, mask, EFalse); - } - else - { - gc->BitBlt(sourcePoint, bitmap); - } - - delete gc; - CleanupStack::PopAndDestroy(device); - - /* This transfers the bitmap ownership to the observer. */ - iObserver->NotifyVideoClipGeneratorFrameCompleted(iGenerator, KErrNone, iDestBitmap); - - delete iScaler; - iScaler = 0; - - iSourceBitmap = 0; - iSourceMask = 0; - iDestBitmap = 0; - iObserver = 0; - iIndex = -1; - iNoScaling = EFalse; - } - -TInt CVeiImageClipFrameOperation::RunError(TInt aError) - { - iObserver->NotifyVideoClipGeneratorFrameCompleted(iGenerator, aError, NULL); - - if (iScaler) - { - iScaler->Cancel(); - } - - delete iScaler; - iScaler = 0; - delete iScaledBitmap; - iScaledBitmap = 0; - delete iScaledMask; - iScaledMask = 0; - delete iDestBitmap; - iDestBitmap = 0; - iSourceBitmap = 0; - iSourceMask = 0; - iObserver = 0; - iIndex = -1; - - return KErrNone; - } - - -void CVeiImageClipFrameOperation::DoCancel() - { - iObserver->NotifyVideoClipGeneratorFrameCompleted(iGenerator, KErrCancel, 0); - - if (iScaler) - { - iScaler->Cancel(); - } - - delete iScaler; - iScaler = 0; - delete iScaledBitmap; - iScaledBitmap = 0; - delete iScaledMask; - iScaledMask = 0; - - delete iDestBitmap; - iDestBitmap = 0; - iSourceBitmap = 0; - iSourceMask = 0; - iObserver = 0; - iIndex = -1; - } -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiImageConverter.cpp --- a/videditor/VideoEditorCommon/src/VeiImageConverter.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,261 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES -#include "VeiImageConverter.h" - -#include -#include -#include -#include "VideoEditorCommon.h" -#include "VideoEditorDebugUtils.h" - - - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CVeiImageConverter::CVeiImageConverter::NewL( -// MConverterController* aController ) -// --------------------------------------------------------- -// -EXPORT_C CVeiImageConverter* CVeiImageConverter::NewL( - MConverterController* aController ) - { - CVeiImageConverter* self = - new(ELeave) CVeiImageConverter( aController ); - CleanupStack::PushL( self ); - - self->ConstructL(); - - CleanupStack::Pop( self ); - return self; - } -// --------------------------------------------------------- -// CVeiImageConverter::CVeiImageConverter( -// MConverterController* aController ) -// --------------------------------------------------------- -// -CVeiImageConverter::CVeiImageConverter( - MConverterController* aController ) : - CActive( EPriorityStandard ), iController( aController ) - { - } - -// --------------------------------------------------------- -// CVeiImageConverter::ConstructL() -// EPOC two phased constructor -// --------------------------------------------------------- -// -void CVeiImageConverter::ConstructL() - { - User::LeaveIfError( iFs.Connect() ); - // create the destination bitmap - - iBitmapScaler = CBitmapScaler::NewL(); - - CActiveScheduler::Add( this ); - } - -// Destructor -EXPORT_C CVeiImageConverter::~CVeiImageConverter() - { - LOG(KVideoEditorLogFile, "CVeiImageConverter::~CVeiImageConverter(): in"); - if ( IsActive() ) - { - Cancel(); - } - - delete iImageEncoder; - delete iBitmapScaler; - // CImageDecoder must be deleted before the - iFs.Close(); // related RFs is closed, - delete iBitmap; // otherwise a related thread might panic - - iController = NULL; - - LOG(KVideoEditorLogFile, "CVeiImageConverter::~CVeiImageConverter(): out"); - } - - - -// --------------------------------------------------------- -// CVeiImageConverter::StartToEncodeL( -// TFileName& aFileName, TUid aImageType, TUid aImageSubType ) -// --------------------------------------------------------- -// -EXPORT_C void CVeiImageConverter::StartToEncodeL( - const TDesC& aFileName, const TUid& aImageType, const TUid& aImageSubType ) - { - LOG(KVideoEditorLogFile, "CVeiImageConverter::StartToEncodeL(): In"); - if ( iImageEncoder ) - { - delete iImageEncoder; - iImageEncoder = NULL; - } - - // create the encoder - LOG(KVideoEditorLogFile, "CVeiImageConverter::StartToEncodeL(): 2, own thread started"); - iImageEncoder = CImageEncoder::FileNewL( iFs, aFileName, - CImageEncoder::EOptionAlwaysThread, aImageType, aImageSubType ); - - iState = EEncoding; - iImageEncoder->Convert( &iStatus, *iBitmap ); - - SetActive(); - LOG(KVideoEditorLogFile, "CVeiImageConverter::StartToEncodeL(): Out"); - } -// --------------------------------------------------------- -// CVeiImageConverter::DoCancel() -// --------------------------------------------------------- -// -void CVeiImageConverter::DoCancel() - { - LOG(KVideoEditorLogFile, "CVeiImageConverter::DoCancel(): in"); - if ( iState == EEncoding && iImageEncoder ) - { - iImageEncoder->Cancel(); - } - else if ( iState == EScaling ) - { - iBitmapScaler->Cancel(); - } - LOG(KVideoEditorLogFile, "CVeiImageConverter::DoCancel(): out"); - } -// --------------------------------------------------------- -// CVeiImageConverter::RunL() -// --------------------------------------------------------- -// -void CVeiImageConverter::RunL() - { - LOG(KVideoEditorLogFile, "CVeiImageConverter::RunL: In"); - switch( iState ) - { - case EEncoding: - { - iState = EIdle; - iController->NotifyCompletion( iStatus.Int() ); - break; - } - - default: // some error - { - LOG(KVideoEditorLogFile, "CVeiImageConverter::RunL: Scale completed"); - iState = EIdle; - iController->NotifyCompletion( iStatus.Int() ); - } - } - } - -// --------------------------------------------------------- -// CVeiImageConverter::RunError(TInt aError) -// --------------------------------------------------------- -// -TInt CVeiImageConverter::RunError(TInt aError) - { - LOGFMT(KVideoEditorLogFile, "CVeiImageConverter::RunError(): in, aError:%d", aError); - TInt err; - err = aError; - return err; - } - -// --------------------------------------------------------- -// CVeiImageConverter::GetEncoderImageTypesL( -// RImageTypeDescriptionArray& aImageTypeArray ) -// --------------------------------------------------------- -// -EXPORT_C void CVeiImageConverter::GetEncoderImageTypesL( - RImageTypeDescriptionArray& aImageTypeArray ) - { - CImageEncoder::GetImageTypesL( aImageTypeArray ); - } - -// --------------------------------------------------------- -// CVeiImageConverter::SetBitmap() -// --------------------------------------------------------- -// -EXPORT_C void CVeiImageConverter::SetBitmap( CFbsBitmap* aBitmap ) - { - LOG(KVideoEditorLogFile, "CVeiImageConverter::SetBitmap(): in"); - if (iBitmap) - { - delete iBitmap; - iBitmap = NULL; - } - iBitmap = aBitmap; - LOG(KVideoEditorLogFile, "CVeiImageConverter::SetBitmap(): out"); - } - -// --------------------------------------------------------- -// CVeiImageConverter::GetBitmap() -// --------------------------------------------------------- -// -EXPORT_C CFbsBitmap* CVeiImageConverter::GetBitmap() - { - return iBitmap; - } - -// --------------------------------------------------------- -// CVeiImageConverter::Scale() -// --------------------------------------------------------- -// -EXPORT_C void CVeiImageConverter::ScaleL(CFbsBitmap* aSrcBitmap,CFbsBitmap* aDestBitmap, const TSize& aSize) - { - LOG(KVideoEditorLogFile, "CVeiImageConverter::Scale: in"); - if ( IsActive() ) - { - Cancel(); - } - - if ( iBitmap ) - { - delete iBitmap; - iBitmap = NULL; - } -/* Create new bitmap where scaled bitmap is stored - When scaling is ready, NotifyCompletion() callback and - bitmap address can be asked with GetBitmap function */ - - iBitmap = aDestBitmap; - iBitmap = new (ELeave) CFbsBitmap; - iBitmap->Create( aSize, aSrcBitmap->DisplayMode() ); - - iState = EScaling; - iBitmapScaler->Scale( &iStatus, *aSrcBitmap, *iBitmap, EFalse ); - - SetActive(); - - LOG(KVideoEditorLogFile, "CVeiImageConverter::Scale: out"); - } - -// --------------------------------------------------------- -// CVeiImageConverter::CancelEncoding() -// --------------------------------------------------------- -// -EXPORT_C void CVeiImageConverter::CancelEncoding() - { - if ( iImageEncoder ) - { - delete iImageEncoder; - iImageEncoder = NULL; - } - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiMGFetchVerifier.cpp --- a/videditor/VideoEditorCommon/src/VeiMGFetchVerifier.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include -#include -#include -#include - -#include -#include "VeiMGFetchVerifier.h" -#include "VideoEditorCommon.h" -#include "VideoEditorDebugUtils.h" - -// CONSTANTS -_LIT(KResourceFile, "VideoEditorCommon.rsc"); - - -EXPORT_C CVeiMGFetchVerifier* CVeiMGFetchVerifier::NewLC() - { - CVeiMGFetchVerifier* self = new ( ELeave ) CVeiMGFetchVerifier; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -CVeiMGFetchVerifier::CVeiMGFetchVerifier() : iResLoader( *CCoeEnv::Static() ) - { - } - -EXPORT_C CVeiMGFetchVerifier::~CVeiMGFetchVerifier() - { - iResLoader.Close(); - } - -EXPORT_C TBool CVeiMGFetchVerifier::VerifySelectionL( const MDesCArray* aSelectedFiles ) - { - LOG(KVideoEditorLogFile, "CVeiMGFetchVerifier::VerifySelectionL: in"); - - TBool selectionAccepted( ETrue ); - - DRMCommon* drmCommon = DRMCommon::NewL(); - CleanupStack::PushL (drmCommon); - - User::LeaveIfError( drmCommon->Connect() ); - - TUint itemCount = aSelectedFiles->MdcaCount(); - for (TUint i=0;iMdcaPoint(i); - - drmCommon->IsProtectedFile( fileName, fileProtectionStatus ); - - if ( fileProtectionStatus != EFalse ) - { - LOGFMT(KVideoEditorLogFile, "CVeiMGFetchVerifier::VerifySelectionL: File (%S) is protected. Show error note.", &fileName); - HBufC* stringholder; - CCoeEnv* coeEnv = CCoeEnv::Static(); - - stringholder = StringLoader::LoadLC( R_VEI_NOTE_DRM_NOT_ALLOWED, coeEnv ); - - CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); - note->ExecuteLD( *stringholder ); - - CleanupStack::PopAndDestroy( stringholder ); - selectionAccepted = EFalse; - break; - } - LOGFMT(KVideoEditorLogFile, "CVeiMGFetchVerifier::VerifySelectionL: File (%S) is not protected.", &fileName); - } - drmCommon->Disconnect(); - CleanupStack::PopAndDestroy (drmCommon); - - LOGFMT(KVideoEditorLogFile, "CVeiMGFetchVerifier::VerifySelectionL: out: %d", selectionAccepted); - return selectionAccepted; - } - - -void CVeiMGFetchVerifier::ConstructL() - { - // Locate and open the resource file - TFileName fileName; - TParse p; - - Dll::FileName(fileName); - p.Set(KResourceFile, &KDC_RESOURCE_FILES_DIR, &fileName); - fileName = p.FullName(); - - LOGFMT(KVideoEditorLogFile, "\tLoading resource file: %S", &fileName); - iResLoader.OpenL( fileName ); // RConeResourceLoader selects the correct language file - - } - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiRemConTarget.cpp --- a/videditor/VideoEditorCommon/src/VeiRemConTarget.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES -#include -#include -#include - -#include "VeiRemConTarget.h" -#include "VideoEditorDebugUtils.h" - -// ================= MEMBER FUNCTIONS ======================= - -// C++ default constructor can NOT contain any code, that -// might leave. -// -CVeiRemConTarget::CVeiRemConTarget(MVeiMediakeyObserver& aObserver) : iObserver(aObserver) - { - } - -// Default constructor can leave. -void CVeiRemConTarget::ConstructL() - { - // Create interface selector. - iInterfaceSelector = CRemConInterfaceSelector::NewL(); - // Create a new CRemConCoreApiTarget, owned by the interface selector. - iCoreTarget = CRemConCoreApiTarget::NewL(*iInterfaceSelector, *this); - // Start being a target. - iInterfaceSelector->OpenTargetL(); - } - -// Two-phased constructor. -EXPORT_C CVeiRemConTarget* CVeiRemConTarget::NewL(MVeiMediakeyObserver& aObserver) - { - LOG(KVideoEditorLogFile, "CVeiRemConTarget::NewL"); - - CVeiRemConTarget* self = new (ELeave) CVeiRemConTarget(aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// Destructor -CVeiRemConTarget::~CVeiRemConTarget() - { - delete iInterfaceSelector; - // iCoreTarget was owned by iInterfaceSelector. - iCoreTarget = NULL; - } - -// --------------------------------------------------------- -// CVeiRemConTarget::MrccatoCommand -// --------------------------------------------------------- -// -void CVeiRemConTarget::MrccatoCommand(TRemConCoreApiOperationId aOperationId, TRemConCoreApiButtonAction DEBUGLOG_ARG(aButtonAct)) - { - LOGFMT(KVideoEditorLogFile, "CVeiRemConTarget::MrccatoCommand: buttonact:%d >>", aButtonAct ); - switch (aOperationId) - { - case ERemConCoreApiVolumeUp: - iObserver.HandleVolumeUpL(); - break; - case ERemConCoreApiVolumeDown: - iObserver.HandleVolumeDownL(); - break; - - default: - break; - } - LOG(KVideoEditorLogFile, "CVeiRemConTarget::MrccatoCommand << " ); - } - -// --------------------------------------------------------- -// CDmhRemConTarget::MrccatoPlay -// --------------------------------------------------------- -// -void CVeiRemConTarget::MrccatoPlay(TRemConCoreApiPlaybackSpeed /*aSpeed*/, TRemConCoreApiButtonAction /*aButtonAct*/) - { - LOG(KVideoEditorLogFile, "CVeiRemConTarget::MrccatoPlay <<"); - } - -// --------------------------------------------------------- -// CDmhRemConTarget::MrccatoTuneFunction -// --------------------------------------------------------- -// -void CVeiRemConTarget::MrccatoTuneFunction(TBool /*aTwoPart*/, TUint /*aMajorChannel*/, TUint /*aMinorChannel*/, TRemConCoreApiButtonAction /*aButtonAct*/) - { - - } - -// --------------------------------------------------------- -// CDmhRemConTarget::MrccatoSelectDiskFunction -// --------------------------------------------------------- -// -void CVeiRemConTarget::MrccatoSelectDiskFunction(TUint /*aDisk*/, TRemConCoreApiButtonAction /*aButtonAct*/) - { - - } - -// --------------------------------------------------------- -// CVeiRemConTarget::MrccatoSelectAvInputFunction -// --------------------------------------------------------- -// -void CVeiRemConTarget::MrccatoSelectAvInputFunction(TUint8 /*aAvInputSignalNumber*/, TRemConCoreApiButtonAction /*aButtonAct*/) - { - - } - -// --------------------------------------------------------- -// CVeiRemConTarget::MrccatoSelectAudioInputFunction -// --------------------------------------------------------- -// -void CVeiRemConTarget::MrccatoSelectAudioInputFunction(TUint8 /*aAudioInputSignalNumber*/, TRemConCoreApiButtonAction /*aButtonAct*/) - { - - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiSettings.cpp --- a/videditor/VideoEditorCommon/src/VeiSettings.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,131 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// User includes -#include "VeiSettings.h" - -#ifdef SETTINGS_TO_CENREP -#include -#include "VideoEditorInternalCRKeys.h" -#endif - -EXPORT_C TDes& TVeiSettings::DefaultSnapshotName() - { - return iDefaultSnapshotName; - } - -EXPORT_C TPtrC TVeiSettings::DefaultSnapshotName() const - { - return iDefaultSnapshotName; - } - -EXPORT_C TDes& TVeiSettings::DefaultVideoName() - { - return iDefaultVideoName; - } - -EXPORT_C TPtrC TVeiSettings::DefaultVideoName() const - { - return iDefaultVideoName; - } - -EXPORT_C CAknMemorySelectionDialog::TMemory& TVeiSettings::MemoryInUse() - { - return iMemoryInUse; - } - -EXPORT_C const CAknMemorySelectionDialog::TMemory& TVeiSettings::MemoryInUse() const - { - return iMemoryInUse; - } - -EXPORT_C TInt& TVeiSettings::SaveQuality() - { - return (TInt&)iSaveQuality; - } - -EXPORT_C TInt TVeiSettings::SaveQuality() const - { - return (TInt)iSaveQuality; - } - -EXPORT_C void TVeiSettings::ExternalizeL(RWriteStream& aStream) const - { - aStream << iDefaultVideoName; - - aStream.WriteUint8L( static_cast(iSaveQuality) ); - - aStream << iDefaultSnapshotName; - - aStream.WriteUint8L( static_cast(iMemoryInUse) ); - } - -EXPORT_C void TVeiSettings::InternalizeL(RReadStream& aStream) - { - aStream >> iDefaultVideoName; - - iSaveQuality = static_cast(aStream.ReadUint8L()); - - aStream >> iDefaultSnapshotName; - - iMemoryInUse = static_cast (aStream.ReadUint8L()); - } - -#ifdef SETTINGS_TO_CENREP - -void TVeiSettings::LoadL() - { - CRepository* repository = NULL; - User::LeaveIfError( repository = CRepository::NewLC(KCRUidVideoEditor) ); - - TInt saveQuality = 0; - repository->Get(KVedSaveQuality, saveQuality); - SetSaveQuality( (TSaveQuality)saveQuality ); - - TInt memoryInUse = 0; - repository->Get(KVedMemoryInUse, memoryInUse); - SetMemoryInUse( (CAknMemorySelectionDialog::TMemory)memoryInUse ); - - repository->Get(KVedDefaultVideoName, iDefaultVideoName); - - repository->Get(KVedDefaultSnapshotName, iDefaultSnapshotName); - - CleanupStack::PopAndDestroy(repository); - } - -void TVeiSettings::SaveL() const - { - CRepository* repository = CRepository::NewLC(KCRUidVideoEditor); - - repository->Set(KVedSaveQuality, (TInt)iSaveQuality); - - repository->Set(KVedMemoryInUse, (TInt)iMemoryInUse); - - repository->Set(KVedDefaultVideoName, iDefaultVideoName); - - repository->Set(KVedDefaultSnapshotName, iDefaultSnapshotName); - - CleanupStack::PopAndDestroy(repository); - } - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiTempMaker.cpp --- a/videditor/VideoEditorCommon/src/VeiTempMaker.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,226 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// System includes -#include -#include -#include -#include -#include -#include - -// User includes -#include "VeiTempMaker.h" -#include "VideoEditorCommon.h" -#include "VeiSettings.h" -#include "VideoEditorDebugUtils.h" - - -EXPORT_C CVeiTempMaker* CVeiTempMaker::NewL() - { - CVeiTempMaker* self = NewLC(); - CleanupStack::Pop(self); - return self; - } - - -EXPORT_C CVeiTempMaker* CVeiTempMaker::NewLC() - { - CVeiTempMaker* self = new (ELeave) CVeiTempMaker(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -void CVeiTempMaker::ConstructL() - { - } - -CVeiTempMaker::CVeiTempMaker() - { - } - - -EXPORT_C CVeiTempMaker::~CVeiTempMaker() - { - } - -EXPORT_C void CVeiTempMaker::EmptyTempFolder() const - { - LOG(KVideoEditorLogFile, "CVeiTempMaker::EmptyTempFolder(): In"); - - TRAP_IGNORE( DoEmptyTempFolderL() ); - - LOG(KVideoEditorLogFile, "CVeiTempMaker::EmptyTempFolder(): Out"); - } - -void CVeiTempMaker::DoEmptyTempFolderL() const - { - LOG(KVideoEditorLogFile, "CVeiTempMaker::DoEmptyTempFolderL(): In"); - - RFs& fs = CCoeEnv::Static()->FsSession(); - - CFileMan* fileManager = CFileMan::NewL( fs ); - CleanupStack::PushL( fileManager ); - - TFileName tempDir; - // First try to delete from Phone Memory - TBool dirExists = GetTempPath( CAknMemorySelectionDialog::EPhoneMemory, tempDir ); - if ( dirExists ) - { - LOGFMT(KVideoEditorLogFile, "\tFolder \"%S\" exists...Deleting...", &tempDir); - fileManager->RmDir( tempDir ); - } - // ..then from MMC - dirExists = GetTempPath( CAknMemorySelectionDialog::EMemoryCard, tempDir ); - if ( dirExists ) - { - LOGFMT(KVideoEditorLogFile, "\tFolder \"%S\" exists...Deleting...", &tempDir); - fileManager->RmDir( tempDir ); - } - - CleanupStack::PopAndDestroy( fileManager ); - - LOG(KVideoEditorLogFile, "CVeiTempMaker::DoEmptyTempFolderL(): Out"); - } - -EXPORT_C void CVeiTempMaker::GenerateTempFileName( - HBufC& aTempPathAndName, - CAknMemorySelectionDialog::TMemory aMemory, - TVedVideoFormat aVideoFormat, - TBool aExtAMR ) const - { - LOG(KVideoEditorLogFile, "CVeiTempMaker::GenerateTempFileName(): In"); - - RFs& fs = CCoeEnv::Static()->FsSession(); - - -// Parse tempPath. MMC or memoryroot - TFileName tempPath; - RFile temp; -// Temp files are processed to \\data\\videos\\[application uid]\\[random name] - TBool tempFolderExists = GetTempPath( aMemory, tempPath ); - if ( !tempFolderExists ) - { - fs.MkDirAll( tempPath ); - fs.SetAtt( tempPath, KEntryAttHidden, KEntryAttDir ); - } - - TUint32 randomName; - - randomName = Math::Random(); - tempPath.AppendNum( randomName, EHex ); - - if ( aExtAMR ) - { - tempPath.Append( KExtAmr ); - } - else if ( aVideoFormat == EVedVideoFormatMP4 ) - { - tempPath.Append( KExtMp4 ); - } - else - { - tempPath.Append( KExt3gp ); - } - - temp.Create( fs, tempPath, EFileWrite ); - temp.Close(); - - aTempPathAndName = tempPath; - - LOGFMT(KVideoEditorLogFile, "CVeiTempMaker::GenerateTempFileName(): Out: %S", &tempPath); - } - -TBool CVeiTempMaker::GetTempPath( const CAknMemorySelectionDialog::TMemory& aMemory, TDes& aTempPath ) const - { - LOG(KVideoEditorLogFile, "CVeiTempMaker::GetTempPath: In"); - - if ( aMemory == CAknMemorySelectionDialog::EPhoneMemory ) - { - aTempPath = PathInfo::PhoneMemoryRootPath(); - } - else - { - aTempPath = PathInfo::MemoryCardRootPath(); - } - - aTempPath.Append( PathInfo::VideosPath() ); - aTempPath.AppendNum( KUidVideoEditor.iUid, EHex ); - aTempPath.Append(_L("\\")); - - LOGFMT(KVideoEditorLogFile, "CVeiTempMaker::GetTempPath: Out: %S", &aTempPath); - - return BaflUtils::FolderExists( CCoeEnv::Static()->FsSession(), aTempPath ); - } - -/*void CVeiTempMaker::ListFilesL(const TDesC& aFindFromDir, const TDesC& aWriteResultTo) const -{ - LOGFMT(KVideoEditorLogFile, "CVeiTempMaker::ListFiles(): In, aFindFromDir:%S", &aFindFromDir); - CDir* dir = NULL; - //RFile file; - RFs fileSession; - - TInt err = fileSession.Connect(); - -// err = file.Replace(fileSession, aWriteResultTo, EFileWrite); - - - CleanupClosePushL(fileSession); - //CleanupClosePushL(file); - - //_LIT8(KNewLine, "\r\n"); - //TBuf8<255> buf8; - TBuf buf; - TFileName fileName; - fileName.Append(aFindFromDir); - - fileSession.GetDir(fileName, KEntryAttNormal, ESortNone, dir); - LOG(KVideoEditorLogFile, "CVeiTempMaker::ListFiles(): 2"); - if (dir) - { - CleanupStack::PushL(dir); - - - for(TInt index=0; index < dir->Count(); index++) - { - LOG(KVideoEditorLogFile, "CVeiTempMaker::ListFiles(): 3 in loop"); - - //buf8.Copy((*dir)[index].iName); - //buf.Copy((*dir)[index].iName); - - LOG(KVideoEditorLogFile, "CVeiTempMaker::ListFiles(): 4 in loop"); - - LOGFMT(KVideoEditorLogFile, "%S", &((*dir)[index].iName)); - //file.Write(buf8); - - //file.Write(KNewLine); - - } - CleanupStack::PopAndDestroy( dir ); - } - LOG(KVideoEditorLogFile, "CVeiTempMaker::ListFiles(): 5"); - //CleanupStack::PopAndDestroy( file ); - CleanupStack::PopAndDestroy( fileSession ); - LOG(KVideoEditorLogFile, "CVeiTempMaker::ListFiles(): Out"); -}*/ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiTitleClipGenerator.cpp --- a/videditor/VideoEditorCommon/src/VeiTitleClipGenerator.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1515 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "VeiTitleClipGenerator.h" -#include "VideoEditorCommon.h" -#include "VideoEditorDebugUtils.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "VideoEditorDebugUtils.h" - -const TInt KDefaultNumberOfLines = 15; -const TInt KLineSpacing = 4; -const TInt KMargin = 10; -const TInt KVeiTitleClipDefaultDuration = 5000000; -const TInt KVeiTitleClipFadeLimit = 2000000; -// Restrict the maximum frame rate to 15fps regardless of the movie properties -const TInt KMaxFrameRate = 15; - - -EXPORT_C CVeiTitleClipGenerator* CVeiTitleClipGenerator::NewL(const TSize& aMaxResolution, - TVeiTitleClipTransition aTransition, TVeiTitleClipHorizontalAlignment aHorizontalAlignment, - TVeiTitleClipVerticalAlignment aVerticalAlignment) - { - LOGFMT2(KVideoEditorLogFile, "CVeiTitleClipGenerator::NewL: aMaxResolution: (%d,%d)", aMaxResolution.iWidth,aMaxResolution.iHeight); - - __ASSERT_ALWAYS(aMaxResolution.iHeight >= 0, TVedPanic::Panic(TVedPanic::ETitleClipGeneratorIllegalMaxResolution)); - __ASSERT_ALWAYS(aMaxResolution.iWidth >= 0, TVedPanic::Panic(TVedPanic::ETitleClipGeneratorIllegalMaxResolution)); - - CVeiTitleClipGenerator* self = CVeiTitleClipGenerator::NewLC(aMaxResolution, aTransition, aHorizontalAlignment, aVerticalAlignment); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C CVeiTitleClipGenerator* CVeiTitleClipGenerator::NewLC(const TSize& aMaxResolution, - TVeiTitleClipTransition aTransition, TVeiTitleClipHorizontalAlignment aHorizontalAlignment, - TVeiTitleClipVerticalAlignment aVerticalAlignment) - { - LOGFMT2(KVideoEditorLogFile, "CVeiTitleClipGenerator::NewLC: In: aMaxResolution: (%d,%d)", aMaxResolution.iWidth,aMaxResolution.iHeight); - - __ASSERT_ALWAYS(aMaxResolution.iHeight >= 0, TVedPanic::Panic(TVedPanic::ETitleClipGeneratorIllegalMaxResolution)); - __ASSERT_ALWAYS(aMaxResolution.iWidth >= 0, TVedPanic::Panic(TVedPanic::ETitleClipGeneratorIllegalMaxResolution)); - - CVeiTitleClipGenerator* self = new (ELeave) CVeiTitleClipGenerator(aMaxResolution, aTransition, aHorizontalAlignment, aVerticalAlignment); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -void CVeiTitleClipGenerator::ConstructL() - { - iDescriptiveName = HBufC::NewL(0); - iWrappedArray = new (ELeave) CArrayFixFlat(KDefaultNumberOfLines); - iText = HBufC::NewL(0); - GetTextFont(); - } - -EXPORT_C CVeiTitleClipGenerator::~CVeiTitleClipGenerator() - { - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::~CVeiTitleClipGenerator(): In"); - delete iDecodeOperation; - delete iText; - if (iWrappedArray) - { - iWrappedArray->Reset(); - } - delete iWrappedArray; - delete iBackgroundImage; - delete iScaledBackgroundImage; - delete iDescriptiveName; - - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::~CVeiTitleClipGenerator(): Out"); - } - -CVeiTitleClipGenerator::CVeiTitleClipGenerator(const TSize& aMaxResolution, - TVeiTitleClipTransition aTransition, - TVeiTitleClipHorizontalAlignment aHorizontalAlignment, - TVeiTitleClipVerticalAlignment aVerticalAlignment) - : iFirstFrameComplexityFactor(0), - iGetFontResolution(aMaxResolution), - iMaxResolution(aMaxResolution), - iTransition(aTransition), - iHorizontalAlignment(aHorizontalAlignment), - iVerticalAlignment(aVerticalAlignment) - { - // Set some default values - iDuration = TTimeIntervalMicroSeconds(KVeiTitleClipDefaultDuration); - iBackgroundColor = KRgbBlack; - iTextColor = KRgbWhite; - } - -EXPORT_C TPtrC CVeiTitleClipGenerator::DescriptiveName() const - { - return *iDescriptiveName; - } - -EXPORT_C TUid CVeiTitleClipGenerator::Uid() const - { - return KUidTitleClipGenerator; - } - -EXPORT_C TTimeIntervalMicroSeconds CVeiTitleClipGenerator::Duration() const - { - return iDuration; - } - -EXPORT_C TInt CVeiTitleClipGenerator::VideoFrameCount() const - { - TReal countReal((TReal)( (static_cast(iDuration.Int64())) / 1000000.0 ) * (TReal)(MaximumFramerate()) + 0.5); - return (TInt) countReal; - } - -EXPORT_C TTimeIntervalMicroSeconds CVeiTitleClipGenerator::VideoFrameStartTime(TInt aIndex) const - { - __ASSERT_ALWAYS(aIndex >= 0 && aIndex < VideoFrameCount(), - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - - TTimeIntervalMicroSeconds frameTime(1000000 / MaximumFramerate()); - return TTimeIntervalMicroSeconds(TInt64(aIndex) * frameTime.Int64()); - } - -EXPORT_C TTimeIntervalMicroSeconds CVeiTitleClipGenerator::VideoFrameEndTime(TInt aIndex) const - { - __ASSERT_ALWAYS(aIndex >= 0 && aIndex < VideoFrameCount(), - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - - TTimeIntervalMicroSeconds frameTime(1000000 / MaximumFramerate()); - return TTimeIntervalMicroSeconds( (static_cast(aIndex) + 1) * frameTime.Int64() ); - } - -EXPORT_C TTimeIntervalMicroSeconds CVeiTitleClipGenerator::VideoFrameDuration(TInt aIndex) const - { - __ASSERT_ALWAYS(aIndex >= 0 && aIndex < VideoFrameCount(), - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - - return TTimeIntervalMicroSeconds(VideoFrameEndTime(aIndex).Int64() - VideoFrameStartTime(aIndex).Int64()); - } - -EXPORT_C TInt CVeiTitleClipGenerator::VideoFirstFrameComplexityFactor() const - { - return iFirstFrameComplexityFactor; - } - -EXPORT_C TInt CVeiTitleClipGenerator::VideoFrameDifferenceFactor(TInt aIndex) const - { - __ASSERT_ALWAYS(aIndex > 0 && aIndex < VideoFrameCount(), - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - - TInt differenceFactor = 0; - TInt pixels = iMaxResolution.iHeight * iMaxResolution.iWidth; - TInt scale = 1000; - TInt fontHeight = iTextFont->HeightInPixels(); - - switch(iTransition) - { - case EVeiTitleClipTransitionNone: - { - differenceFactor = 0; // if there is no transition, it's just a static text - } - break; - case EVeiTitleClipTransitionFade: - { - TInt inEndFrame; - TInt outStartFrame; - CalculateTransitionFrameIndices(inEndFrame, outStartFrame); - if ((aIndex < inEndFrame) || (aIndex > outStartFrame)) - { - for (TInt i = 0; i < iWrappedArray->Count(); i++) - { - TInt lineWidth = iTextFont->TextWidthInPixels(iWrappedArray->At(i)); - differenceFactor += fontHeight * lineWidth; - } - differenceFactor *= scale; - differenceFactor /= pixels; - } - else - { - differenceFactor = 0; - } - } - break; - case EVeiTitleClipTransitionScrollBottomToTop: - case EVeiTitleClipTransitionScrollTopToBottom: - { - TInt yTravelPerFrame = (iMaxResolution.iHeight + iWrappedTextBoxHeight) / VideoFrameCount() + 1; - - TInt maxLineWidth = 0; - for (TInt i = 0; i < iWrappedArray->Count(); i++) - { - TInt lineWidth = iTextFont->TextWidthInPixels(iWrappedArray->At(i)); - if (lineWidth > maxLineWidth) - { - maxLineWidth = lineWidth; - } - } - differenceFactor = scale * maxLineWidth * yTravelPerFrame / pixels; - break; - } - case EVeiTitleClipTransitionScrollLeftToRight: - case EVeiTitleClipTransitionScrollRightToLeft: - { - TInt xTravelPerFrame = (iMaxResolution.iWidth + iTextFont->TextWidthInPixels(*iText)) / VideoFrameCount() + 1; - differenceFactor = scale * xTravelPerFrame * fontHeight / pixels; - break; - } - default: - TVedPanic::Panic(TVedPanic::EInternal); - } - - return differenceFactor; - } - -EXPORT_C TInt CVeiTitleClipGenerator::GetVideoFrameIndex(TTimeIntervalMicroSeconds aTime) const - { - __ASSERT_ALWAYS(aTime.Int64() >= 0 && aTime.Int64() <= iDuration.Int64(), - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - - TTimeIntervalMicroSeconds frameTime(1000000 / MaximumFramerate()); - return (static_cast(aTime.Int64() / frameTime.Int64())); - } - -EXPORT_C void CVeiTitleClipGenerator::GetFrameL(MVedVideoClipGeneratorFrameObserver& aObserver, - TInt aIndex, TSize* const aResolution, - TDisplayMode aDisplayMode, TBool aEnhance, - TInt aPriority) - { -#ifdef VERBOSE - LOGFMT3(KVideoEditorLogFile, "CVeiTitleClipGenerator::GetFrameL(): In: aIndex:%d, aResolution:(%d,%d)",\ - aIndex, aResolution->iWidth, aResolution->iHeight); -#endif - - __ASSERT_ALWAYS(aIndex == KFrameIndexBestThumb || aIndex >= 0 - && aIndex < VideoFrameCount(), - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorIllegalVideoFrameIndex)); - - TDisplayMode displayMode = aDisplayMode; - - // check validity of thumbnail and associated operation - if(aEnhance) // for saving to file - { - if(displayMode == ENone) // if no preference - { - displayMode = EColor16M; // 24-bit color image for enhancement - } - else if(displayMode != EColor16M) // invalid combination - { - User::Leave(KErrNotSupported); - } - } - else // for screen display - { - if(displayMode == ENone) // if no preference - { - displayMode = EColor64K; // 16-bit image - } - } - - - iUseScaledImage = EFalse; - iGetFrameObserver = &aObserver; - iGetFrameIndex = aIndex; - iGetFrameResolution = TSize(aResolution->iWidth, aResolution->iHeight); - iGetFrameDisplayMode = displayMode; - iGetFrameEnhance = aEnhance; - iGetFramePriority = aPriority; - - if (!iBackgroundImage) - { - // No background image, just finish. - FinishGetFrameL(); - } - else if ((aResolution->iHeight == iBackgroundImage->SizeInPixels().iHeight) || - (aResolution->iWidth == iBackgroundImage->SizeInPixels().iWidth)) - { - // The background image does not need scaling - deleting scaled image - // causes FinishGetFrameL() to use the original. - iUseScaledImage = EFalse; - FinishGetFrameL(); - } - else if (iScaledBackgroundImage && - ((aResolution->iHeight == iScaledBackgroundImage->SizeInPixels().iHeight) || - (aResolution->iWidth == iScaledBackgroundImage->SizeInPixels().iWidth))) - { - // Scaled image is in correct resolution - iUseScaledImage = ETrue; - FinishGetFrameL(); - } - else - { - // We need to scale the image. - iUseScaledImage = ETrue; - if (iScaledBackgroundImage) - { - delete iScaledBackgroundImage; - iScaledBackgroundImage = 0; - } - - if (iDecodeOperation) - { - delete iDecodeOperation; - iDecodeOperation = 0; - } - - CFbsBitmap* bitmap = new (ELeave) CFbsBitmap; - CleanupStack::PushL(bitmap); - User::LeaveIfError(bitmap->Create(iBackgroundImage->SizeInPixels(), iBackgroundImage->DisplayMode())); - CFbsDevice* device = CFbsBitmapDevice::NewL(bitmap); - CFbsBitGc* gc = NULL; - device->CreateContext(gc); - gc->BitBlt(TPoint(0,0), iBackgroundImage); - delete gc; - delete device; - iDecodeOperation = CVeiTitleClipImageDecodeOperation::NewL(*this, bitmap); - CleanupStack::Pop(bitmap); - iDecodeOperation->StartScalingOperationL(iGetFrameResolution); - } - -#ifdef VERBOSE - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::GetFrameL(): Out"); -#endif - } - - -EXPORT_C CFbsBitmap* CVeiTitleClipGenerator::FinishGetFrameL(TInt aError) - { -#ifdef VERBOSE - LOGFMT(KVideoEditorLogFile, "CVeiTitleClipGenerator::FinishGetFrameL(): In: aError:%d", aError); -#endif - - ASSERT(iGetFrameResolution.iWidth > 0 && iGetFrameResolution.iHeight > 0); - - if (aError != KErrNone) - { - iGetFrameObserver->NotifyVideoClipGeneratorFrameCompleted(*this, aError, NULL); - return NULL; - } - - CFbsBitmap* bitmap = new (ELeave) CFbsBitmap; - CleanupStack::PushL(bitmap); - TInt err = bitmap->Create(iGetFrameResolution, iGetFrameDisplayMode); - if (err != KErrNone) - { - delete bitmap; - bitmap = NULL; - iGetFrameObserver->NotifyVideoClipGeneratorFrameCompleted(*this, err, NULL); - } - else - { - CFbsDevice* device = CFbsBitmapDevice::NewL(bitmap); - CFbsBitGc* gc = NULL; - device->CreateContext(gc); - - /* Draw the background. */ - if (iUseScaledImage) - { - TSize bgImageSize(iScaledBackgroundImage->SizeInPixels()); - TPoint bgPoint((iGetFrameResolution.iWidth - bgImageSize.iWidth) / 2, - (iGetFrameResolution.iHeight - bgImageSize.iHeight) / 2); - gc->BitBlt(bgPoint, iScaledBackgroundImage); - } - else if (iBackgroundImage) - { - TSize bgImageSize(iBackgroundImage->SizeInPixels()); - TPoint bgPoint((iGetFrameResolution.iWidth - bgImageSize.iWidth) / 2, - (iGetFrameResolution.iHeight - bgImageSize.iHeight) / 2); - gc->BitBlt(bgPoint, iBackgroundImage); - } - else - { - gc->SetBrushColor(iBackgroundColor); - gc->SetBrushStyle(CGraphicsContext::ESolidBrush); - gc->DrawRect(bitmap->SizeInPixels()); - } - - delete gc; - delete device; - - switch(iTransition) - { - case EVeiTitleClipTransitionNone: - case EVeiTitleClipTransitionFade: - { - DrawMainTitleFrameL(*bitmap, iGetFrameIndex); - break; - } - case EVeiTitleClipTransitionScrollBottomToTop: - case EVeiTitleClipTransitionScrollTopToBottom: - case EVeiTitleClipTransitionScrollLeftToRight: - case EVeiTitleClipTransitionScrollRightToLeft: - { - DrawScrollTitleFrameL(*bitmap, iGetFrameIndex); - break; - } - default: - TVedPanic::Panic(TVedPanic::EInternal); - } - - /* Notify the observer. */ - if (iGetFrameObserver) - { - iGetFrameObserver->NotifyVideoClipGeneratorFrameCompleted(*this, KErrNone, bitmap); - } - - iGetFrameObserver = 0; - iGetFrameIndex = -5; - - CleanupStack::Pop(bitmap); - } - -#ifdef VERBOSE - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::FinishGetFrameL(): Out"); -#endif - - return bitmap; - } - -EXPORT_C void CVeiTitleClipGenerator::CancelFrame() - { - if (iDecodeOperation) - { - iDecodeOperation->Cancel(); - } - } - -EXPORT_C TVeiTitleClipTransition CVeiTitleClipGenerator::Transition() const - { - return iTransition; - } - -EXPORT_C TVeiTitleClipHorizontalAlignment CVeiTitleClipGenerator::HorizontalAlignment() const - { - return iHorizontalAlignment; - } - -EXPORT_C TVeiTitleClipVerticalAlignment CVeiTitleClipGenerator::VerticalAlignment() const - { - return iVerticalAlignment; - } - -EXPORT_C void CVeiTitleClipGenerator::SetTransitionAndAlignmentsL( - TVeiTitleClipTransition aTransition, - TVeiTitleClipHorizontalAlignment aHorizontalAlignment, - TVeiTitleClipVerticalAlignment aVerticalAlignment) - { - TBool updateNeeded = EFalse; - if (iTransition != aTransition) - { - iTransition = aTransition; - updateNeeded = ETrue; - } - - if (iHorizontalAlignment != aHorizontalAlignment) - { - iHorizontalAlignment = aHorizontalAlignment; - updateNeeded = ETrue; - } - - if (iVerticalAlignment != aVerticalAlignment) - { - iVerticalAlignment = aVerticalAlignment; - updateNeeded = ETrue; - } - - if (updateNeeded) - { - UpdateFirstFrameComplexityFactorL(); - ReportSettingsChanged(); - } - } - -EXPORT_C void CVeiTitleClipGenerator::SetTextL(const TDesC& aText) - { - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::SetTextL(): In"); - - /* Don't do anything if the texts are equal. */ - if (iText && !iText->Compare(aText)) - { - return; - } - - /* Delete old text. */ - if (iText) - { - delete iText; - iText = 0; - } - - /* Wrap the string to lines. */ - WrapTextToArrayL(aText); - ReportSettingsChanged(); - - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::SetTextL(): Out"); - } - -EXPORT_C void CVeiTitleClipGenerator::SetDescriptiveNameL(const TDesC& aDescriptiveName) - { - if (iDescriptiveName && !iDescriptiveName->Compare(aDescriptiveName)) - { - return; - } - - if (iDescriptiveName) - { - delete iDescriptiveName; - iDescriptiveName = 0; - } - iDescriptiveName = HBufC::NewL(aDescriptiveName.Length()); - *iDescriptiveName = aDescriptiveName; - ReportDescriptiveNameChanged(); - } - -EXPORT_C TPtrC CVeiTitleClipGenerator::Text() const - { - return *iText; - } - - -EXPORT_C void CVeiTitleClipGenerator::SetBackgroundColorL(const TRgb& aBackgroundColor) - { - if (iBackgroundImage) - { - delete iBackgroundImage; - iBackgroundImage = 0; - delete iScaledBackgroundImage; - iScaledBackgroundImage = 0; - } - else if (aBackgroundColor == iBackgroundColor) - { - return; - } - - iBackgroundColor = aBackgroundColor; - UpdateFirstFrameComplexityFactorL(); - ReportSettingsChanged(); - } - -EXPORT_C TRgb CVeiTitleClipGenerator::BackgroundColor() const - { - return iBackgroundColor; - } - -EXPORT_C void CVeiTitleClipGenerator::SetTextColorL(const TRgb& aTextColor) - { - if (iTextColor != aTextColor) - { - iTextColor = aTextColor; - ReportSettingsChanged(); - UpdateFirstFrameComplexityFactorL(); - } - } - -EXPORT_C TRgb CVeiTitleClipGenerator::TextColor() const - { - return iTextColor; - } - -EXPORT_C void CVeiTitleClipGenerator::SetBackgroundImageL(const CFbsBitmap* aBackgroundImage) - { - if (iBackgroundImage) - { - delete iBackgroundImage; - iBackgroundImage = 0; - delete iScaledBackgroundImage; - iScaledBackgroundImage = 0; - } - - iBackgroundImage = new (ELeave) CFbsBitmap; - iBackgroundImage->Duplicate(aBackgroundImage->Handle()); - UpdateFirstFrameComplexityFactorL(); - ReportSettingsChanged(); - } - -EXPORT_C void CVeiTitleClipGenerator::SetBackgroundImageL(const TDesC& aFilename, MVeiTitleClipGeneratorObserver& aObserver) - { - delete iDecodeOperation; - iDecodeOperation = 0; - delete iBackgroundImage; - iBackgroundImage = 0; - delete iScaledBackgroundImage; - iScaledBackgroundImage = 0; - - iDecodeOperation = CVeiTitleClipImageDecodeOperation::NewL(*this, aObserver, aFilename); - iDecodeOperation->StartLoadOperationL(iMaxResolution); - } - -EXPORT_C CFbsBitmap* CVeiTitleClipGenerator::BackgroundImage() const - { - return iBackgroundImage; - } - -EXPORT_C void CVeiTitleClipGenerator::SetDuration(const TTimeIntervalMicroSeconds& aDuration) - { - if (iDuration != aDuration) - { - iDuration = aDuration; - ReportDurationChanged(); - } - } - -void CVeiTitleClipGenerator::WrapTextToArrayL(const TDesC& aText) - { - LOGFMT2(KVideoEditorLogFile, "CVeiTitleClipGenerator::WrapTextToArrayL(): In: iMaxResolution: (%d,%d)", iMaxResolution.iWidth, iMaxResolution.iHeight); - - TInt fontdivisor = 11; - - do - { - - if (iText) - { - delete iText; - iText = 0; - } - - if (iWrappedArray) - { - iWrappedArray->Reset(); - } - - TInt width = iMaxResolution.iWidth - KMargin * 2; - GetTextFont(fontdivisor); - iText = AknBidiTextUtils::ConvertToVisualAndWrapToArrayL(aText, width, *iTextFont, *iWrappedArray); - - /* Recalculate text dependant values. */ - TInt lineHeight = iTextFont->HeightInPixels() + KLineSpacing; - iWrappedTextBoxHeight = iWrappedArray->Count() * lineHeight; - LOGFMT2(KVideoEditorLogFile, "CVeiTitleClipGenerator::WrapTextToArrayL(): In: iWrappedArray->Count %d, iWrappedTextBoxHeight %d", iWrappedArray->Count(), iWrappedTextBoxHeight); - - fontdivisor++; - } - while(iWrappedTextBoxHeight > iMaxResolution.iHeight); - - UpdateFirstFrameComplexityFactorL(); - - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::WrapTextToArrayL(): Out"); - } - -void CVeiTitleClipGenerator::UpdateFirstFrameComplexityFactorL() - { - CFbsBitmap* bitmap = GetFirstFrameL(); - CleanupStack::PushL(bitmap); - iFirstFrameComplexityFactor = CalculateFrameComplexityFactor(bitmap); - CleanupStack::PopAndDestroy(bitmap); - } - -void CVeiTitleClipGenerator::CalculateTransitionFrameIndices(TInt& aInEndFrame, TInt& aOutStartFrame) const - { - /* Calculate some values for timing the transitions */ - TInt64 divider = 3; - TInt64 durationInt = iDuration.Int64(); - TTimeIntervalMicroSeconds inEndTime(durationInt / divider); - TTimeIntervalMicroSeconds outStartTime(durationInt - durationInt / divider); - - /* Limit the fade in/out times to a reasonable value. */ - if (inEndTime.Int64() > TInt64(KVeiTitleClipFadeLimit)) - { - inEndTime = TTimeIntervalMicroSeconds(KVeiTitleClipFadeLimit); - outStartTime = TTimeIntervalMicroSeconds(durationInt - KVeiTitleClipFadeLimit); - } - - if (IsInserted()) - { - aInEndFrame = GetVideoFrameIndex(inEndTime); - aOutStartFrame = GetVideoFrameIndex(outStartTime); - } - else - { - aInEndFrame = 5; - aOutStartFrame = 10; - } - } - - -void CVeiTitleClipGenerator::GetTextFont(TInt aFontDivisor) - { -#ifdef VERBOSE - LOGFMT4(KVideoEditorLogFile, "CVeiTitleClipGenerator::GetTextFont(): iGetFrameResolution: (%d,%d), iMaxResolution: (%d,%d)",\ - iGetFrameResolution.iWidth, iGetFrameResolution.iHeight, iMaxResolution.iWidth, iMaxResolution.iHeight); -#endif - - if (!iTextFont || iGetFontResolution != iGetFrameResolution) - { - LOGFMT6(KVideoEditorLogFile, "CVeiTitleClipGenerator::GetTextFont(): Getting new font. iGetFontResolution: (%d,%d), iGetFrameResolution: (%d,%d), iMaxResolution: (%d,%d)",\ - iGetFontResolution.iWidth, iGetFontResolution.iHeight, iGetFrameResolution.iWidth, iGetFrameResolution.iHeight, iMaxResolution.iWidth, iMaxResolution.iHeight); - - TInt movieHeight = iGetFrameResolution.iHeight; - iGetFontResolution = iGetFrameResolution; - if (movieHeight <= 0) - { - movieHeight = iMaxResolution.iHeight; - iGetFontResolution = iMaxResolution; - } - - // If the generator is inserted, we can use the actual movie height - // otherwise, we'll just assume max resolution. - if (IsInserted()) - { - CVedMovie* movie = Movie(); - movieHeight = movie->Resolution().iHeight; - } - TInt fontHeightInPixels; - if(aFontDivisor) - { - fontHeightInPixels = movieHeight / (aFontDivisor -3); - if (movieHeight >= 200) - { - fontHeightInPixels = movieHeight / aFontDivisor; - } - } - else - { - fontHeightInPixels = movieHeight / 8; - if (movieHeight >= 200) - { - fontHeightInPixels = movieHeight / 11; - } - } - - TAknFontSpecification spec( EAknFontCategoryPrimary ); - spec.SetTextPaneHeight( fontHeightInPixels ); - spec.SetWeight( EStrokeWeightBold ); - spec.SetPosture( EPostureUpright ); - - CWsScreenDevice* dev = CCoeEnv::Static()->ScreenDevice(); - CAknLayoutFont* layoutFont = NULL; - TRAPD(err, layoutFont = AknFontAccess::CreateLayoutFontFromSpecificationL( *dev, spec ) ); - if (err) - { - LOGFMT(KVideoEditorLogFile, "CVeiTitleClipGenerator::GetTextFont(): Creating font from font spec failed (%d)", err); - - // In case of failure (should not happen...) make sure that some font is still available - ASSERT(EFalse); - TInt fontId = 0; - if (movieHeight >= 200) - { - fontId =EAknLogicalFontPrimaryFont; - } - else - { - fontId = EAknLogicalFontSecondaryFont; - } - iTextFont = AknLayoutUtils::FontFromId( fontId ); - } - else - { - iTextFont = (const CFont*)layoutFont; - } - } - -#ifdef VERBOSE - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::GetTextFont(): Out"); -#endif - } - -void CVeiTitleClipGenerator::DrawWrappedTextL(CFbsBitmap& aBitmap, - const TPoint& aTextPoint, const TRgb& aTextColor, const TRgb& aBgColor, const TRgb& aShadowColor, - TBool aDrawBackground) - { -#ifdef VERBOSE - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::DrawWrappedTextL(): In"); -#endif - - // Make sure the text is wrapped using the movie's frame resolution. - // If the generator is not inserted, just use the maximum resolution. - // - unfortunately this does not seem to work, if the text is re-wrapped - // here, the program seems to get stuck. -/* if (IsInserted()) - { - CVedMovie* movie = Movie(); - TSize res = movie->Resolution(); - if (iMaxResolution != res) - { - HBufC* oldText = iText->Des().AllocLC(); - delete iText; - iText = NULL; - iMaxResolution = res; - WrapTextToArrayL(oldText->Des()); - CleanupStack::PopAndDestroy(oldText); - } - } -*/ - CFbsDevice* device = CFbsBitmapDevice::NewL(&aBitmap); - CleanupStack::PushL(device); - CFbsBitGc* gc = NULL; - device->CreateContext(gc); - CleanupStack::PushL(gc); - gc->SetBrushStyle(CGraphicsContext::ESolidBrush); - - if (aDrawBackground) - { - gc->SetPenColor(aBgColor); - gc->SetBrushColor(aBgColor); - gc->DrawRect(TRect(aBitmap.SizeInPixels())); - } - - gc->SetPenSize(TSize(1,1)); - - GetTextFont(); - gc->UseFont(iTextFont); - - TPoint textPoint(aTextPoint); - TRect rect(aBitmap.SizeInPixels()); - - /* Draw text and shadow. */ - - textPoint = aTextPoint; - - for (TInt i = 0; i < iWrappedArray->Count(); i++) - { - TInt textWidth = iTextFont->TextWidthInPixels(iWrappedArray->At(i)); - TInt baseX = 0; - switch(iHorizontalAlignment) - { - case EVeiTitleClipHorizontalAlignmentCenter: - baseX = (rect.Width() - textWidth) / 2; - break; - case EVeiTitleClipHorizontalAlignmentLeft: - baseX = KMargin; - break; - case EVeiTitleClipHorizontalAlignmentRight: - baseX = (rect.iBr.iX - textWidth) - KMargin; - break; - default: - TVedPanic::Panic(TVedPanic::EInternal); - } - textPoint.iX = baseX + 1; - textPoint.iY += iTextFont->AscentInPixels() + KLineSpacing / 2 + 2; - gc->SetBrushColor(aShadowColor); - gc->SetPenColor(aShadowColor); - gc->DrawText(iWrappedArray->At(i), textPoint); - textPoint.iX -= 1; - textPoint.iY -= 2; - gc->SetBrushColor(aTextColor); - gc->SetPenColor(aTextColor); - gc->DrawText(iWrappedArray->At(i), textPoint); - textPoint.iY += iTextFont->DescentInPixels() + KLineSpacing / 2; - } - - gc->DiscardFont(); - CleanupStack::PopAndDestroy(gc); - CleanupStack::PopAndDestroy(device); - -#ifdef VERBOSE - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::DrawWrappedTextL(): Out"); -#endif - } - -EXPORT_C CFbsBitmap* CVeiTitleClipGenerator::GetFirstFrameL() - { - LOG(KVideoEditorLogFile, "CVeiTitleClipGenerator::GetFirstFrameL()"); - - iUseScaledImage = EFalse; - iGetFrameObserver = 0; - iGetFrameIndex = 0; - - if (iBackgroundImage) - { - iGetFrameResolution = iBackgroundImage->SizeInPixels(); - - LOGFMT2(KVideoEditorLogFile, "CVeiTitleClipGenerator::GetFirstFrameL(): Using BG image resolution: (%d,%d)", \ - iGetFrameResolution.iWidth, iGetFrameResolution.iHeight); - } - else - { - iGetFrameResolution = iMaxResolution; - - LOGFMT2(KVideoEditorLogFile, "CVeiTitleClipGenerator::GetFirstFrameL(): Using iMaxResolution: (%d,%d)", \ - iGetFrameResolution.iWidth, iGetFrameResolution.iHeight); - } - - iGetFrameDisplayMode = KVideoClipGenetatorDisplayMode; - iGetFrameEnhance = EFalse; - return FinishGetFrameL(); - } - -void CVeiTitleClipGenerator::DrawMainTitleFrameL(CFbsBitmap& aBitmap, TInt aIndex) - { - ASSERT(iGetFrameResolution.iWidth > 0 && iGetFrameResolution.iHeight > 0); - - TInt inEndFrame; - TInt outStartFrame; - - CalculateTransitionFrameIndices(inEndFrame, outStartFrame); - - TInt index = aIndex; - - /* Best thumbnail frame would be the one just after the transition. */ - if (aIndex == KFrameIndexBestThumb) - { - if (iTransition == EVeiTitleClipTransitionFade) - { - /* Select a bit different looking frame for fading effects. */ - index = inEndFrame / 2; - } - else - { - index = inEndFrame; - } - } - - TRect rect(aBitmap.SizeInPixels()); - - /* Calculate text points */ - TInt yAdjust; - if (iVerticalAlignment == EVeiTitleClipVerticalAlignmentBottom) - { - yAdjust = (rect.Height() - iWrappedTextBoxHeight) - KMargin; - } - else if (iVerticalAlignment == EVeiTitleClipVerticalAlignmentCenter) - { - yAdjust = (rect.Height() - iWrappedTextBoxHeight) / 2; - } - else - { - yAdjust = KMargin; - } - - TPoint textPoint(rect.iTl.iX, rect.iTl.iY + yAdjust); - - /* Initializations for drawing the text. */ - CFbsBitmap* textBitmap = new (ELeave) CFbsBitmap; - CleanupStack::PushL(textBitmap); - User::LeaveIfError(textBitmap->Create(aBitmap.SizeInPixels(), aBitmap.DisplayMode())); - - /* Determine shadow color. */ - - TRgb shadowColor; - if (iTextColor.Gray2() > 0) - { - shadowColor = KRgbBlack; - } - else - { - shadowColor = KRgbWhite; - } - - /* Draw the text. */ - DrawWrappedTextL(*textBitmap, textPoint, iTextColor, iBackgroundColor, shadowColor, ETrue); - - /* Create mask. */ - CFbsBitmap* maskBitmap = new (ELeave) CFbsBitmap; - CleanupStack::PushL(maskBitmap); - User::LeaveIfError(maskBitmap->Create(aBitmap.SizeInPixels(), EGray256)); - - /* Calculate fading if necessary. */ - TInt colorIndex = 255; // default: obilque text - if (iTransition == EVeiTitleClipTransitionFade) - { - if (index < inEndFrame) - { - // fade in - colorIndex = index * 255 / inEndFrame; - } - else if (index > outStartFrame) - { - // fade out - TInt endFrame = VideoFrameCount() - 1; - colorIndex = (index - endFrame) * 255 / (outStartFrame - endFrame); - } - } - - textPoint = TPoint(rect.iTl.iX, rect.iTl.iY + yAdjust); - DrawWrappedTextL(*maskBitmap, textPoint, TRgb::Gray256(colorIndex), TRgb::Gray256(0), TRgb::Gray256(colorIndex), ETrue); - - /* Combine aBitmap & mask. */ - CFbsDevice* device = CFbsBitmapDevice::NewL(&aBitmap); - CleanupStack::PushL(device); - CFbsBitGc* gc = NULL; - device->CreateContext(gc); - CleanupStack::PushL(gc); - - gc->BitBltMasked(TPoint(0,0), textBitmap, rect, maskBitmap, EFalse); - - CleanupStack::PopAndDestroy(gc); - CleanupStack::PopAndDestroy(device); - CleanupStack::PopAndDestroy(maskBitmap); - CleanupStack::PopAndDestroy(textBitmap); - } - - -void CVeiTitleClipGenerator::DrawScrollTitleFrameL(CFbsBitmap& aBitmap, TInt aIndex) - { - TInt index = aIndex; - - TInt numberOfFrames = VideoFrameCount(); - - /* Select thumbnail so that it's a bit different from the centered ones. */ - if (aIndex == KFrameIndexBestThumb) - { - index = numberOfFrames - numberOfFrames / 3; - } - - TRect rect(aBitmap.SizeInPixels()); - TPoint textPoint; - - /* Calculate amounts for vertical scrollers. */ - TInt yTravelPerFrame = (rect.Height() + iWrappedTextBoxHeight) / numberOfFrames + 1; - TInt yStartPoint = (rect.iTl.iY - iWrappedTextBoxHeight) - 10; - - TRgb shadowColor; - if (iTextColor.Gray2() > 0) - { - shadowColor = KRgbBlack; - } - else - { - shadowColor = KRgbWhite; - } - - if (iTransition == EVeiTitleClipTransitionScrollBottomToTop) - { - textPoint.iY = yStartPoint + yTravelPerFrame * (numberOfFrames - index); - DrawWrappedTextL(aBitmap, textPoint, iTextColor, iBackgroundColor, shadowColor, EFalse); - } - else - { - CFbsDevice* device = CFbsBitmapDevice::NewL(&aBitmap); - CFbsBitGc* gc = NULL; - device->CreateContext(gc); - - GetTextFont(); - gc->UseFont(iTextFont); - - gc->SetBrushStyle(CGraphicsContext::ESolidBrush); - gc->SetPenSize(TSize(1,1)); - - /* Calculate scroll amounts for horizontal scrollers. */ - TInt xTravelPerFrame = (rect.Width() + iTextFont->TextWidthInPixels(*iText)) / numberOfFrames + 1; - TInt xStartPoint = ( rect.iTl.iX - iTextFont->TextWidthInPixels(*iText) ) - 10; - - if (iTransition == EVeiTitleClipTransitionScrollTopToBottom) - { - textPoint.iY = yStartPoint + yTravelPerFrame * index; - - /* Draw texts. */ - for (TInt i = iWrappedArray->Count(); i > 0; i--) - { - TInt textWidth = iTextFont->TextWidthInPixels(iWrappedArray->At(i - 1)); - TInt baseX = 0; - switch(HorizontalAlignment()) - { - case EVeiTitleClipHorizontalAlignmentCenter: - baseX = (rect.Width() - textWidth) / 2; - break; - case EVeiTitleClipHorizontalAlignmentLeft: - baseX = 0; - break; - case EVeiTitleClipHorizontalAlignmentRight: - baseX = rect.iBr.iX - textWidth; - break; - default: - TVedPanic::Panic(TVedPanic::EInternal); - } - textPoint.iX = baseX + 1; - textPoint.iY += iTextFont->AscentInPixels() + KLineSpacing / 2 + 2; - gc->SetBrushColor(shadowColor); - gc->SetPenColor(shadowColor); - gc->DrawText(iWrappedArray->At(i), textPoint); - textPoint.iX -= 1; - textPoint.iY -= 2; - gc->SetBrushColor(TextColor()); - gc->SetPenColor(TextColor()); - gc->DrawText(iWrappedArray->At(i), textPoint); - textPoint.iY += iTextFont->DescentInPixels() + KLineSpacing / 2; - } - } - else if (iTransition == EVeiTitleClipTransitionScrollRightToLeft) - { - textPoint.iY = rect.Height() / 2 + 2; - textPoint.iX = xStartPoint + xTravelPerFrame * (numberOfFrames - index) + 1; - gc->SetBrushColor(shadowColor); - gc->SetPenColor(shadowColor); - gc->DrawText(*iText, textPoint); - textPoint.iX -= 1; - textPoint.iY -= 2; - gc->SetBrushColor(TextColor()); - gc->SetPenColor(TextColor()); - gc->DrawText(*iText, textPoint); - } - else if (iTransition == EVeiTitleClipTransitionScrollLeftToRight) - { - textPoint.iX = xStartPoint + xTravelPerFrame * index + 1; - textPoint.iY = rect.Height() / 2 + 2; - gc->SetBrushColor(shadowColor); - gc->SetPenColor(shadowColor); - gc->DrawText(*iText, textPoint); - textPoint.iX -= 1; - textPoint.iY -= 2; - gc->SetBrushColor(TextColor()); - gc->SetPenColor(TextColor()); - gc->DrawText(*iText, textPoint); - } - - gc->DiscardFont(); - delete gc; - delete device; - } - } - -TInt CVeiTitleClipGenerator::MaximumFramerate() const - { - TInt maxFrameRate; - if (IsInserted()) - { - maxFrameRate = Movie()->MaximumFramerate(); - if (maxFrameRate > KMaxFrameRate) - { - maxFrameRate = KMaxFrameRate; - } - } - else - { - maxFrameRate = KMaxFrameRate; - } - -#ifdef VERBOSE - LOGFMT(KVideoEditorLogFile, "CVeiTitleClipGenerator::MaximumFramerate(): %d", maxFrameRate); -#endif - - return maxFrameRate; - } - -////////////////////////////////////////////////////////////////////////// -// Decode operation -////////////////////////////////////////////////////////////////////////// - - -CVeiTitleClipImageDecodeOperation* CVeiTitleClipImageDecodeOperation::NewL( - CVeiTitleClipGenerator& aGenerator, - MVeiTitleClipGeneratorObserver& aObserver, - const TDesC& aFilename, - TInt aPriority) - { - CVeiTitleClipImageDecodeOperation* self = - new (ELeave) CVeiTitleClipImageDecodeOperation(aGenerator, - aObserver, - aPriority); - CleanupStack::PushL(self); - self->ConstructL(aFilename); - CleanupStack::Pop(self); - return self; - } - -CVeiTitleClipImageDecodeOperation::CVeiTitleClipImageDecodeOperation(CVeiTitleClipGenerator& aGenerator, - MVeiTitleClipGeneratorObserver& aObserver, - TInt aPriority) - : CActive(aPriority), iGenerator(aGenerator), iObserver(&aObserver) - { - CActiveScheduler::Add(this); - } - - -CVeiTitleClipImageDecodeOperation* CVeiTitleClipImageDecodeOperation::NewL( - CVeiTitleClipGenerator& aGenerator, - CFbsBitmap* aSourceBitmap, - TInt aPriority) - { - CVeiTitleClipImageDecodeOperation* self = - new (ELeave) CVeiTitleClipImageDecodeOperation(aGenerator, - aSourceBitmap, - aPriority); - return self; - } - - -CVeiTitleClipImageDecodeOperation::CVeiTitleClipImageDecodeOperation( - CVeiTitleClipGenerator& aGenerator, - CFbsBitmap* aSourceBitmap, - TInt aPriority) - : CActive(aPriority), iGenerator(aGenerator), iObserver(0), iBitmap(aSourceBitmap), iNotifyObserver(EFalse) - { - CActiveScheduler::Add(this); - } - - -void CVeiTitleClipImageDecodeOperation::ConstructL(const TDesC& aFilename) - { - LOGFMT(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::constructL(): In: aFilename: %S", &aFilename); - - RFs& fs = CCoeEnv::Static()->FsSession(); - iDecoder = CImageDecoder::FileNewL(fs, aFilename); - iNotifyObserver = ETrue; - - LOG(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::ConstructL(): Out"); - } - -CVeiTitleClipImageDecodeOperation::~CVeiTitleClipImageDecodeOperation() - { - Cancel(); - - delete iDecoder; - iDecoder = 0; - delete iScaler; - iScaler = 0; - delete iBitmap; - iBitmap = 0; - iObserver = 0; - } - -void CVeiTitleClipImageDecodeOperation::DoCancel() - { - LOG(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::DoCancel(): In"); - - if (iDecoder) - { - iDecoder->Cancel(); - } - - delete iScaler; - iScaler = 0; - delete iDecoder; - iDecoder = 0; - delete iBitmap; - iBitmap = 0; - - if (iNotifyObserver) - { - iObserver->NotifyTitleClipBackgroundImageLoadComplete(iGenerator, KErrCancel); - } - else - { - TRAP_IGNORE( iGenerator.FinishGetFrameL() ); - } - - LOG(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::DoCancel(): Out"); - } - -void CVeiTitleClipImageDecodeOperation::RunL() - { - switch(iDecodePhase) - { - case EPhaseLoading: - { - StartScalingOperationL(iGenerator.iMaxResolution); - break; - } - case EPhaseScaling: - { - delete iDecoder; - iDecoder = 0; - delete iScaler; - iScaler = 0; - iDecodePhase = EPhaseComplete; - if (iNotifyObserver) - { - /* Notify observer. */ - iObserver->NotifyTitleClipBackgroundImageLoadComplete(iGenerator, KErrNone); - - /* Transfer ownership of iBitmap to generator. */ - iGenerator.iBackgroundImage = iBitmap; - iBitmap = 0; - iGenerator.UpdateFirstFrameComplexityFactorL(); - iGenerator.ReportSettingsChanged(); - } - else - { - iGenerator.iScaledBackgroundImage = iBitmap; - iBitmap = 0; - iGenerator.FinishGetFrameL(); - } - break; - } - default: - TVedPanic::Panic(TVedPanic::EInternal); - } - } - -TInt CVeiTitleClipImageDecodeOperation::RunError(TInt aError) - { - LOGFMT(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::RunError(): In: %d", aError); - if (iDecoder) - { - iDecoder->Cancel(); - } - - delete iScaler; - iScaler = 0; - delete iDecoder; - iDecoder = 0; - delete iBitmap; - iBitmap = 0; - - TInt err = KErrNone; - if (iNotifyObserver) - { - iObserver->NotifyTitleClipBackgroundImageLoadComplete(iGenerator, aError); - } - else - { - TRAP(err, iGenerator.FinishGetFrameL(aError) ); - } - - LOGFMT(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::RunError(): Out: %d", err); - return err; - } - -void CVeiTitleClipImageDecodeOperation::StartLoadOperationL(const TSize& aMaxResolution) - { - LOGFMT2(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::StartLoadOperationL(): In: aMaxResolution: (%d,%d)", aMaxResolution.iWidth, aMaxResolution.iHeight); - - __ASSERT_ALWAYS(!IsActive(), TVedPanic::Panic(TVedPanic::EInternal)); - - iDecodePhase = EPhaseLoading; - - const TFrameInfo& info = iDecoder->FrameInfo(); - TSize targetResolution(0, 0); - const TSize sourceResolution(info.iOverallSizeInPixels); - - /* Calculate resolution. */ - - if ((sourceResolution.iWidth <= aMaxResolution.iWidth) - && (sourceResolution.iHeight <= aMaxResolution.iHeight)) - { - targetResolution.iWidth = sourceResolution.iWidth; - targetResolution.iHeight = sourceResolution.iHeight; - } - else if (info.iFlags & TFrameInfo::EFullyScaleable) - { - if ((sourceResolution.iWidth * aMaxResolution.iWidth) > - (sourceResolution.iHeight * aMaxResolution.iHeight)) - { - targetResolution.iWidth = aMaxResolution.iWidth; - targetResolution.iHeight = - (targetResolution.iWidth * sourceResolution.iHeight) / sourceResolution.iWidth; - } - else - { - targetResolution.iHeight = aMaxResolution.iHeight; - targetResolution.iWidth = - (targetResolution.iHeight * sourceResolution.iWidth) / sourceResolution.iHeight; - } - } - else - { - targetResolution.iWidth = (sourceResolution.iWidth / 8) + 1; - targetResolution.iHeight = (sourceResolution.iHeight / 8) + 1; - - if ((targetResolution.iWidth < aMaxResolution.iWidth) - && (targetResolution.iHeight < aMaxResolution.iHeight)) - { - targetResolution.iWidth = (sourceResolution.iWidth / 4) + 1; - targetResolution.iHeight = (sourceResolution.iHeight / 4) + 1; - } - - if ((targetResolution.iWidth < aMaxResolution.iWidth) - && (targetResolution.iHeight < aMaxResolution.iHeight)) - { - targetResolution.iWidth = (sourceResolution.iWidth / 2) + 1; - targetResolution.iHeight = (sourceResolution.iHeight / 2) + 1; - } - - if ((targetResolution.iWidth < aMaxResolution.iWidth) - && (targetResolution.iHeight < aMaxResolution.iHeight)) - { - targetResolution.iWidth = (sourceResolution.iWidth); - targetResolution.iHeight = (sourceResolution.iHeight); - } - } - - iBitmap = new (ELeave) CFbsBitmap; - TInt err = iBitmap->Create(targetResolution, EColor64K); - - if (err != KErrNone) - { - delete iBitmap; - iBitmap = 0; - iObserver->NotifyTitleClipBackgroundImageLoadComplete(iGenerator, err); - return; - } - - iDecoder->Convert(&iStatus, *iBitmap); - SetActive(); - - LOG(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::StartLoadingOperationL(): Out"); - } - - -void CVeiTitleClipImageDecodeOperation::StartScalingOperationL(const TSize& aResolution) - { - LOGFMT2(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::StartScalingOperationL(): In: aResolution: (%d,%d)", aResolution.iWidth, aResolution.iHeight); - - __ASSERT_ALWAYS(!IsActive(), TVedPanic::Panic(TVedPanic::EInternal)); - - iDecodePhase = EPhaseScaling; - - TSize sourceRes = iBitmap->SizeInPixels(); - TSize destRes(aResolution); - TSize movieRes = iGenerator.Movie()->Resolution(); - - if (destRes.iHeight > movieRes.iHeight || destRes.iWidth > movieRes.iWidth) - { - movieRes = destRes; - } - - TSize imageResInMovie(0,0); - if ((sourceRes.iWidth > movieRes.iWidth) || (sourceRes.iHeight > movieRes.iHeight)) - { - LOG(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::StartScalingOperationL downscaling"); - // Downscaling - if ((sourceRes.iWidth * movieRes.iHeight) < - (sourceRes.iHeight * movieRes.iWidth)) - { - imageResInMovie.iWidth = movieRes.iWidth; - imageResInMovie.iHeight = - (movieRes.iWidth * sourceRes.iHeight) / sourceRes.iWidth; - } - else - { - imageResInMovie.iHeight = movieRes.iHeight; - imageResInMovie.iWidth = - (movieRes.iHeight * sourceRes.iWidth) / sourceRes.iHeight; - } - } - else if (iNotifyObserver) - { - imageResInMovie = sourceRes; - } - else - { - LOG(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::StartScalingOperationL upscaling"); - // Upscaling - limit to a factor of two - if ((sourceRes.iWidth * movieRes.iHeight) < - (sourceRes.iHeight * movieRes.iWidth)) - { - imageResInMovie.iWidth = Min(movieRes.iWidth, (sourceRes.iWidth * 2)); - imageResInMovie.iHeight = Min((sourceRes.iHeight * 2), - ((movieRes.iWidth * sourceRes.iHeight) / sourceRes.iWidth)); - } - else - { - imageResInMovie.iHeight = Min((sourceRes.iHeight * 2), movieRes.iHeight); - imageResInMovie.iWidth = Min((sourceRes.iWidth * 2), - ((movieRes.iHeight * sourceRes.iWidth) / sourceRes.iHeight)); - } - } - - TSize movieResInDestBitmap(-1,-1); - if ((movieRes.iWidth * destRes.iHeight) < - (movieRes.iHeight * destRes.iWidth)) - { - movieResInDestBitmap.iWidth = destRes.iWidth; - movieResInDestBitmap.iHeight = - (movieResInDestBitmap.iWidth * movieRes.iHeight) / movieRes.iWidth; - } - else - { - movieResInDestBitmap.iHeight = destRes.iHeight; - movieResInDestBitmap.iWidth = - (movieResInDestBitmap.iHeight * movieRes.iWidth) / movieRes.iHeight; - } - - - TSize targetRes(imageResInMovie); - targetRes.iWidth = imageResInMovie.iWidth * movieResInDestBitmap.iWidth / movieRes.iWidth; - targetRes.iHeight = imageResInMovie.iHeight * movieResInDestBitmap.iHeight / movieRes.iHeight; - - LOGFMT12(KVideoEditorLogFile,\ - "CVeiTitleClipOperation::StartOperation() sourceRes=(%d,%d) movieRes=(%d,%d) destRes=(%d,%d) targetRes=(%d,%d) imageResInMovie=(%d,%d) movieResInDestBitmap=(%d,%d)", \ - sourceRes.iWidth, sourceRes.iHeight, \ - movieRes.iWidth, movieRes.iHeight, \ - destRes.iWidth, destRes.iHeight, \ - targetRes.iWidth, targetRes.iHeight, \ - imageResInMovie.iWidth, imageResInMovie.iHeight, \ - movieResInDestBitmap.iWidth, movieResInDestBitmap.iHeight); - - - if (iGenerator.iScaledBackgroundImage) - { - TSize scaledRes = iGenerator.iScaledBackgroundImage->SizeInPixels(); - if ((scaledRes.iWidth == targetRes.iWidth) || (scaledRes.iHeight == targetRes.iHeight)) - { - LOG(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::StartScalingOperationL Using scaled"); - iGenerator.FinishGetFrameL(); - return; - } - } - - delete iScaler; - iScaler = NULL; - iScaler = CBitmapScaler::NewL(); - iScaler->Scale(&iStatus, *iBitmap, targetRes, EFalse); - SetActive(); - - LOG(KVideoEditorLogFile, "CVeiTitleClipImageDecodeOperation::StartScalingOperationL(): Out"); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VeiVideoEditorSettings.cpp --- a/videditor/VideoEditorCommon/src/VeiVideoEditorSettings.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Common settings. -* -*/ - - - -// INCLUDES -// System includes -#include -#include -#include -#include - -// User includes -#include "VeiVideoEditorSettings.h" -#include "VideoEditorCommon.h" -#include "VideoEditorDebugUtils.h" - - -// CONSTANTS - -EXPORT_C void CVeiVideoEditorSettings::GetMediaPlayerVolumeLevelL( TInt& aVolumeLevel ) - { - LOG(KVideoEditorLogFile, "CVeiVideoEditorSettings::GetMediaPlayerVolumeLevelL(): In"); - CMPMediaPlayerSettings* mpSettings = CMPMediaPlayerSettings::NewL(); - CleanupStack::PushL( mpSettings ); - - aVolumeLevel = mpSettings->VolumeLevelL(); - - CleanupStack::PopAndDestroy( mpSettings ); - LOG(KVideoEditorLogFile, "CVeiVideoEditorSettings::GetMediaPlayerVolumeLevelL(): Out"); - } - -EXPORT_C void CVeiVideoEditorSettings::SetMediaPlayerVolumeLevelL( TInt aVolumeLevel ) - { - LOG(KVideoEditorLogFile, "CVeiVideoEditorSettings::SetMediaPlayerVolumeLevelL(): In"); - - CMPMediaPlayerSettings* mpSettings = CMPMediaPlayerSettings::NewL(); - CleanupStack::PushL( mpSettings ); - - mpSettings->SetVolumeLevelL( aVolumeLevel ); - - CleanupStack::PopAndDestroy( mpSettings ); - LOG(KVideoEditorLogFile, "CVeiVideoEditorSettings::SetMediaPlayerVolumeLevelL(): Out"); - } - -EXPORT_C void CVeiVideoEditorSettings::GetMaxMmsSizeL( TInt& aMaxMmsSize ) - { - LOG(KVideoEditorLogFile, "CVeiVideoEditorSettings::GetMaxMmsSizeL(): In"); - - CRepository* repository = CRepository::NewL(KCRUidMmsEngine); - repository->Get(KMmsEngineMaximumSendSize, aMaxMmsSize); - LOGFMT(KVideoEditorLogFile, "CVeiVideoEditorSettings::GetMaxMmsSizeL() 1, KMmsEngineMaximumSendSize:%d", aMaxMmsSize); - delete repository; - - LOG(KVideoEditorLogFile, "CVeiVideoEditorSettings::GetMaxMmsSizeL(): Out"); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/VideoEditorUtils.cpp --- a/videditor/VideoEditorCommon/src/VideoEditorUtils.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,531 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDES -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "VideoEditorUtils.h" -#include "VideoEditorCommon.h" -#include "VeiSettings.h" -#include "VideoEditorDebugUtils.h" - - -// CONSTANTS -_LIT (KEditedSuffix, "-"); -_LIT(KManualVideoEditorMifFile, "ManualVideoEditor.mif"); -_LIT(KVideoEditorUiComponentsMifFile, "VideoEditorUiComponents.mif"); -_LIT(KVideoEditorMbmFile, "VideoEditorBitmaps.mbm"); - -//============================================================================= -EXPORT_C void VideoEditorUtils::NotifyNewMediaDocumentL ( - RFs& /*aFsSession*/, - const TDesC& aFileName ) -{ - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::NotifyNewMediaDocumentL: In (%S)", &aFileName); - LOG(KVideoEditorLogFile, "VideoEditorUtils::NotifyNewMediaDocumentL: Out"); -} - -//============================================================================= -EXPORT_C TInt VideoEditorUtils::GenerateNewDocumentNameL ( - RFs& aFsSession, - const TDesC& aSourceFileName, - TDes& aTargetFileName, - TVedVideoFormat aOutputFormat, - TInt aTargetSizeEstimate, - VideoEditor::TMemory aMemoryInUse ) -{ - LOG(KVideoEditorLogFile, "VideoEditorUtils::GenerateNewDocumentNameL, in:"); - LOGFMT4(KVideoEditorLogFile, "VideoEditorUtils::GenerateNewDocumentNameL 1\tSource file: %S, output format: %d, required space: %d, memory in use: %d", &aSourceFileName, aOutputFormat, aTargetSizeEstimate, aMemoryInUse); - - TInt err = KErrNone; - - // Set file name to parser - TParsePtrC fileParse (aSourceFileName); - - // Test filename is already too long - if (fileParse.NameAndExt().Length() > KMaxFileName - 5) - { - err = KErrArgument; - } - - // Otherwise proceed to generate the filename - else - { - // If the memory is specified as EMemAutomatic, the target is primarily - // on the memory card, and if that is full, on the phone memory. - // If EMemPhoneMemory or EMemMemoryCard is specified, only that one is used. - VideoEditor::TMemory selectedMemoryInUse; - aMemoryInUse == VideoEditor::EMemAutomatic ? - selectedMemoryInUse = VideoEditor::EMemMemoryCard : - selectedMemoryInUse = aMemoryInUse; - - // Find file suffix that is not yet used - TInt val = 1; - TFileName temp; - - // First try the above selected primary location. - TFileName driveAndPath; - if (selectedMemoryInUse == VideoEditor::EMemPhoneMemory) - { - driveAndPath.Copy( PathInfo::PhoneMemoryRootPath() ); - } - else - { - driveAndPath.Copy( PathInfo::MemoryCardRootPath() ); - } - driveAndPath.Append( PathInfo::VideosPath() ); - TRAPD(errBafl, BaflUtils::EnsurePathExistsL (aFsSession, driveAndPath)); - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::GenerateNewDocumentNameL 2, errBafl:%d", errBafl ); - TBool primaryLocationFull = ( KErrNone != errBafl - || !IsEnoughFreeSpaceToSaveL ( aFsSession, driveAndPath, aTargetSizeEstimate ) ); - - - // If the memory is full, and the memory is selected as automatic, - // try alternative location. - if (primaryLocationFull && aMemoryInUse == VideoEditor::EMemAutomatic) - { - if (selectedMemoryInUse == VideoEditor::EMemMemoryCard) - { - driveAndPath.Copy (PathInfo::PhoneMemoryRootPath() ); - } - else - { - driveAndPath.Copy (PathInfo::MemoryCardRootPath() ); - } - driveAndPath.Append ( PathInfo::VideosPath() ); - TBool secondaryLocationFull = ( !BaflUtils::FolderExists (aFsSession, driveAndPath) - || !IsEnoughFreeSpaceToSaveL ( aFsSession, driveAndPath, aTargetSizeEstimate ) ); - if (secondaryLocationFull) - { - err = KErrDiskFull; - } - } - - // Now sufficient disk space has been verified. - // Proceed to generate the unique file name. - if (KErrNone == err) - { - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::GenerateNewDocumentNameL 3, File will be saved to path: %S", &driveAndPath ); - - // Copy drive and path to temporary file name - temp.Copy( driveAndPath ); - - // Add file name without suffix - TPtrC name = fileParse.Name(); - TInt offset = FindSuffix ( name ); - if (offset == KErrNotFound) - { - temp.Append ( fileParse.Name() ); - } - else - { - temp.Append ( name.Left (offset) ); - } - - temp.Append ( KEditedSuffix ); - temp.AppendNumFixedWidth (val, EDecimal, 3); - temp.Append ( aOutputFormat == EVedVideoFormat3GPP ? KExt3gp : KExtMp4 ); - - // Increase edit number until we find a file name that is not used - while ( FileAlreadyExistsL(aFsSession, temp) ) - { - ++val; - temp.Zero(); - temp.Copy ( driveAndPath ); - if (offset == KErrNotFound) - { - temp.Append ( fileParse.Name() ); - } - else - { - temp.Append ( name.Left (offset) ); - } - - temp.Append ( KEditedSuffix ); - if (val < 1000) - { - temp.AppendNumFixedWidth ( val, EDecimal, 3); - } - else - { - temp.AppendNumFixedWidth ( val, EDecimal, 4); - } - - temp.Append ( aOutputFormat == EVedVideoFormat3GPP ? KExt3gp : KExtMp4 ); - } - - // Set document name - aTargetFileName.Copy ( temp ); - } - } - - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::GenerateNewDocumentNameL: out (%d)", err); - return err; -} - - -//============================================================================= -EXPORT_C TInt VideoEditorUtils::GenerateFileNameL ( - RFs& aFsSession, - const TDesC& aSourceFileName, - TDes& aTargetFileName, - TVedVideoFormat aOutputFormat, - TInt aTargetSizeEstimate, - TFileName aDrive ) -{ - LOG(KVideoEditorLogFile, "VideoEditorUtils::GenerateNewDocumentNameL, in:"); - LOGFMT4(KVideoEditorLogFile, "VideoEditorUtils::GenerateNewDocumentNameL 1\tSource file: %S, output format: %d, required space: %d, memory in use: %d", &aSourceFileName, &aOutputFormat, &aTargetSizeEstimate, &aDrive); - - TInt err = KErrNone; - - // Set file name to parser - TParsePtrC fileParse (aSourceFileName); - - // Test if filename is already too long - if (fileParse.NameAndExt().Length() > KMaxFileName - 5) - { - err = KErrArgument; - } - - // Otherwise proceed to generate the filename - else - { - // Find file suffix that is not yet used - TInt val = 1; - TFileName temp; - - TFileName driveAndPath = aDrive; - driveAndPath.Append( PathInfo::VideosPath() ); - - // create the folder if it doesn't exist - TRAPD(errBafl, BaflUtils::EnsurePathExistsL (aFsSession, driveAndPath)); - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::GenerateNewDocumentNameL 2, errBafl:%d", errBafl ); - - TBool selectedLocationFull = ( KErrNone != errBafl - - || !IsEnoughFreeSpaceToSaveL ( aFsSession, driveAndPath, aTargetSizeEstimate ) ); - - if (selectedLocationFull) - { - err = KErrDiskFull; - } - - // Now sufficient disk space has been verified. - // Proceed to generate the unique file name. - if (KErrNone == err) - { - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::GenerateNewDocumentNameL 3, File will be saved to path: %S", &driveAndPath ); - - // Copy drive and path to temporary file name - temp.Copy( driveAndPath ); - - // Add file name without suffix - TPtrC name = fileParse.Name(); - - TInt offset = FindSuffix ( name ); - - if (offset == KErrNotFound) - { - temp.Append ( fileParse.Name() ); - } - else - { - temp.Append ( name.Left (offset) ); - } - - temp.Append ( KEditedSuffix ); - temp.AppendNumFixedWidth (val, EDecimal, 3); - temp.Append ( aOutputFormat == EVedVideoFormat3GPP ? KExt3gp : KExtMp4 ); - - // Increase edit number until we find a file name that is not used - while ( FileAlreadyExistsL(aFsSession, temp) ) - { - ++val; - temp.Zero(); - temp.Copy ( driveAndPath ); - if (offset == KErrNotFound) - { - temp.Append ( fileParse.Name() ); - } - else - { - temp.Append ( name.Left (offset) ); - } - - temp.Append ( KEditedSuffix ); - if (val < 1000) - { - temp.AppendNumFixedWidth ( val, EDecimal, 3); - } - else - { - temp.AppendNumFixedWidth ( val, EDecimal, 4); - } - - temp.Append ( aOutputFormat == EVedVideoFormat3GPP ? KExt3gp : KExtMp4 ); - } - - // Set document name - aTargetFileName.Copy ( temp ); - } - } - - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::GenerateNewDocumentNameL: out (%d)", err); - return err; -} - - -//============================================================================= -EXPORT_C TBool VideoEditorUtils::IsEnoughFreeSpaceToSaveL( - RFs& aFsSession, - const TDesC& aFileName, - TInt aSizeEstimate ) - { - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::IsEnoughFreeSpaceToSaveL: in: %S", &aFileName); - - TBool spaceBelowCriticalLevel( EFalse ); - - TParsePtrC fileParse (aFileName); - - TInt mmc = fileParse.Drive().Left(1).CompareF( PathInfo::MemoryCardRootPath().Left(1) ); - if( mmc == 0 ) - { - spaceBelowCriticalLevel = SysUtil::MMCSpaceBelowCriticalLevelL( - &aFsSession, aSizeEstimate ); - } - else - { - spaceBelowCriticalLevel = SysUtil::DiskSpaceBelowCriticalLevelL( - &aFsSession, aSizeEstimate, EDriveC ); - } - - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::IsEnoughFreeSpaceToSaveL: out: %d", !spaceBelowCriticalLevel); - return !spaceBelowCriticalLevel; - } - -//============================================================================= -EXPORT_C TBool VideoEditorUtils::IsDrmProtectedL( const TDesC& aFileName ) - { - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::IsDrmProtectedL: in: %S", &aFileName); - - TBool isProtected = EFalse; - DRMCommon* drm = DRMCommon::NewL(); - CleanupStack::PushL (drm); - drm->IsProtectedFile( aFileName, isProtected ); - CleanupStack::PopAndDestroy (drm); - - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::IsDrmProtectedL: out: %d", isProtected); - return isProtected; - } - -//============================================================================= -EXPORT_C TFileName VideoEditorUtils::IconFileNameAndPath( TInt aInconFileIndex ) - { - LOG(KVideoEditorLogFile, "VideoEditorUtils::IconFileNameAndPath: in:"); - - TFileName fileName; - Dll::FileName(fileName); - TParse p; - - switch (aInconFileIndex) - { - case KManualVideoEditorIconFileId: - p.Set(KManualVideoEditorMifFile, &KDC_APP_BITMAP_DIR, &fileName); - break; - case KVideoEditorUiComponentsIconFileId: - p.Set(KVideoEditorUiComponentsMifFile, &KDC_APP_BITMAP_DIR, &fileName); - break; - case KVeiNonScalableIconFileId: - p.Set(KVideoEditorMbmFile, &KDC_APP_BITMAP_DIR, &fileName); - break; - default: - User::Invariant(); - } - - TPtrC fullName = p.FullName(); - LOGFMT2(KVideoEditorLogFile, "VideoEditorUtils::IconFileNameAndPath: Id: %d, name: %S", aInconFileIndex, &fullName); - - return fullName; - } - -//============================================================================= -TInt VideoEditorUtils::FindSuffix ( - const TDesC & aName - ) -{ - TInt offset = KErrNotFound; - TInt l = aName.Length(); - - while (l) - { - l--; - - if ( l <= (aName.Length() - 3) && aName[l] == TChar('-') ) - { - offset = l; - break; - } - else if ( aName[l] < 0x30 || aName[l] > 0x39 ) - { - break; - } - - } - - return offset; -} - -//============================================================================= -TBool VideoEditorUtils::FileAlreadyExistsL ( RFs& aFsSession, const TDesC& aFileName ) -{ - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::FileAlreadyExistsL: %S", &aFileName); - - TBool fileExists = BaflUtils::FileExists( aFsSession, aFileName ); - - LOGFMT(KVideoEditorLogFile, "VideoEditorUtils::FileAlreadyExistsL: Out: %d", fileExists); - return fileExists; -} - -//============================================================================= -EXPORT_C void VideoEditorUtils::GetMGAlbumsListForMediaFileL ( - RArray& /*aAlbumIdList*/, - const TDesC& /*aFileName*/ ) -{ - LOG(KVideoEditorLogFile, "VideoEditorUtils::GetMGAlbumsListForMediaFileL: In" ); - LOG(KVideoEditorLogFile, "VideoEditorUtils::GetMGAlbumsListForMediaFileL: Out" ); -} - - -//============================================================================= -EXPORT_C void VideoEditorUtils::AddMediaFileToMGAlbumL( - const TDesC& /*aFilename*/, - TInt /*aAlbumId*/ ) - { - LOG(KVideoEditorLogFile, "VideoEditorUtils::AddMediaFileToMGAlbumL: In"); - LOG(KVideoEditorLogFile, "VideoEditorUtils::AddMediaFileToMGAlbumL: Out"); - } - -//============================================================================= -EXPORT_C TBool VideoEditorUtils::IsLandscapeScreenOrientation() - { - TRect rect; - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, rect); - return rect.Width() > rect.Height(); - } - - -//============================================================================= -EXPORT_C TInt VideoEditorUtils::LaunchQueryDialogL (const TDesC & aPrompt) -{ - CAknQueryDialog * dlg = - new (ELeave) CAknQueryDialog ( const_cast(aPrompt) ); - - return dlg->ExecuteLD (R_VIE_CONFIRMATION_QUERY); -} - - -//============================================================================= -EXPORT_C TInt VideoEditorUtils::LaunchListQueryDialogL ( - MDesCArray * aTextItems, - const TDesC & aPrompt - ) -{ - // Selected text item index - TInt index (-1); - - // Create a new list dialog - CAknListQueryDialog * dlg = new (ELeave) CAknListQueryDialog (&index); - - // Prepare list query dialog - dlg->PrepareLC (R_VIE_LIST_QUERY); - - // Set heading - dlg->QueryHeading()->SetTextL (aPrompt); - - // Set text item array - dlg->SetItemTextArray (aTextItems); - - // Set item ownership - dlg->SetOwnershipType (ELbmDoesNotOwnItemArray); - - // Execute - if (dlg->RunLD()) - { - return index; - } - else - { - return -1; - } -} - -//============================================================================= -EXPORT_C TInt VideoEditorUtils::LaunchSaveVideoQueryL () -{ - // Create dialog heading and options - HBufC * heading = CEikonEnv::Static()->AllocReadResourceLC ( R_VIE_QUERY_HEADING_SAVE ); - HBufC * option1 = CEikonEnv::Static()->AllocReadResourceLC ( R_VIE_QUERY_SAVE_NEW ); - HBufC * option2 = CEikonEnv::Static()->AllocReadResourceLC ( R_VIE_QUERY_SAVE_REPLACE ); - - // Query dialog texts - CDesCArray * options = new (ELeave) CDesCArraySeg ( 2 ); - CleanupStack::PushL (options); - options->AppendL( option1->Des() ); - options->AppendL( option2->Des() ); - - // Execute query dialog - TInt ret = LaunchListQueryDialogL ( options, *heading ); - - options->Reset(); - - CleanupStack::PopAndDestroy( options ); - CleanupStack::PopAndDestroy( option2 ); - CleanupStack::PopAndDestroy( option1 ); - CleanupStack::PopAndDestroy( heading ); - - return ret; -} - - -//============================================================================= -EXPORT_C TInt VideoEditorUtils::LaunchSaveChangesQueryL () -{ - // Create dialog prompt - HBufC * prompt = CEikonEnv::Static()->AllocReadResourceLC ( R_VIE_QUERY_SAVE_CHANGES ); - - // Execute query dialog - TInt ret = LaunchQueryDialogL ( *prompt ); - - CleanupStack::PopAndDestroy( prompt ); - - return ret; -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorCommon/src/logfile.cpp --- a/videditor/VideoEditorCommon/src/logfile.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,413 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include -#include -#include -#include "logfile.h" -#include "logfile.pan" - -_LIT8(KCrLf8, "\r\n"); -_LIT(KCrLf, "\r\n"); - -static const TInt KAsciiStart = 0x20; -static const TInt KAsciiEnd = 0x7f; -static const TInt KHexCharLeft = '<'; -static const TInt KHexCharRight = '>'; - -//static const TInt KNumberOfDecimalPlaces = 3; - -EXPORT_C CLogFile* CLogFile::NewL(const TDesC& aFileName, TBool aInitialiseLog) - { - CLogFile* self = NewLC(aFileName, aInitialiseLog); - CleanupStack::Pop(self); - return(self); - } - - -EXPORT_C CLogFile* CLogFile::NewLC(const TDesC& aFileName, TBool aInitialiseLog) - { - CLogFile* self = new (ELeave) CLogFile(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aInitialiseLog); - return(self); - } - - -CLogFile::CLogFile() - { - // No implementation required - } - - -EXPORT_C CLogFile::~CLogFile() - { - iLogFile.Flush(); - iLogFile.Close(); - iSession.Close(); - } - - -void CLogFile::ConstructL(const TDesC& aFileName, TBool aInitialiseLog) - { - -#ifdef ORIGINAL_TIMESTAMP - TInt period; - User::LeaveIfError(HAL::Get(HALData::ESystemTickPeriod, period)); - - iLogMillisecsPerTick = period / 1000; - - if (iLogMillisecsPerTick == 0) - { - iLogMillisecsPerTick = 1; - } -#endif - - User::LeaveIfError(iSession.Connect()); - - if (aInitialiseLog) - { - User::LeaveIfError(iLogFile.Replace(iSession, aFileName, EFileShareAny | EFileWrite)); - } - else - { - TInt err = iLogFile.Open(iSession, aFileName, EFileShareAny | EFileWrite); - - switch (err) - { - case KErrNone: // Opened ok, so seek to end of file - { - TInt position = 0; - User::LeaveIfError(iLogFile.Seek(ESeekEnd, position)); - } - break; - - case KErrNotFound: // File doesn't exist, so create it - User::LeaveIfError(iLogFile.Create(iSession, aFileName, EFileShareAny | EFileWrite)); - break; - - default: // Unexepected error - User::Leave(err); - break; - } - } - } - - -EXPORT_C void CLogFile::LogTime() - { - StartWrite(); - LogTimeInternal(); - EndWrite(); - } - - -EXPORT_C void CLogFile::Log(const TDesC8& aText) - { - StartWrite(); - LogTextInternal(aText); - EndWrite(); - } - - -EXPORT_C void CLogFile::Log(const TDesC& aText) - { - StartWrite(); - - TRAP_IGNORE( DoLogTextL(aText) ); - - EndWrite(); - } - -void CLogFile::DoLogTextL(const TDesC& aText) - { - // Create character converter - CCnvCharacterSetConverter* characterConverter = CCnvCharacterSetConverter::NewLC(); - CCnvCharacterSetConverter::TAvailability converterAvailability; - converterAvailability = characterConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierAscii, iSession); - - for (TInt i = 0; i < aText.Length(); i++) - { - if (aText.Mid(i).Find(KCrLf) == 0) - { - LogNewline(); - i++; - } - else if (converterAvailability == CCnvCharacterSetConverter::EAvailable) - { - // Convert character from unicode - TBuf<1> unicodeBuffer; - TBuf8<10> asciiBuffer; - - unicodeBuffer.Append(aText[i]); - TInt status = characterConverter->ConvertFromUnicode(asciiBuffer, unicodeBuffer); - - if (status >= 0) - { - LogTextInternal(asciiBuffer); - } - } - else // character converter not available - { - TBuf8<1> asciiBuffer; - asciiBuffer.Append(static_cast(aText[i])); - LogTextInternal(asciiBuffer); - } - } - - CleanupStack::PopAndDestroy(characterConverter); - } - -EXPORT_C void CLogFile::Log(TUint8 aByte) - { - StartWrite(); - LogByteInternal(aByte); - EndWrite(); - } - - -EXPORT_C void CLogFile::Log(TUint aNumber) - { - StartWrite(); - LogIntInternal(aNumber); - EndWrite(); - } - - -EXPORT_C void CLogFile::LogBytes(const TDesC8& aBuffer) - { - StartWrite(); - - for (TInt i = 0; i < aBuffer.Length(); i++) - { - LogByteInternal(aBuffer[i]); - } - - EndWrite(); - } - - -void CLogFile::LogTimeInternal() - { - TBuf8<50> text; - -#ifdef ORIGINAL_TIMESTAMP - - TInt timeInMillisecs = User::TickCount() * iLogMillisecsPerTick; - TInt secs = timeInMillisecs / 1000; - TInt millisecs = timeInMillisecs % 1000; - text.Num(secs); - text.Append('.'); - Write(text); - text.Num(millisecs); - - while (text.Length() < KNumberOfDecimalPlaces) - { - text.Insert(0, _L8("0")); - } - - text.Append('-'); - Write(text); - -#else - - TTime time; - time.HomeTime(); - TBuf<31> dateString; - _LIT(KDateString4,"%-B%:0%J%:1%T%:2%S%.%*C4%:3%+B "); - TRAPD(err, time.FormatL(dateString,KDateString4) ); - if (KErrNone == err) - { - text.Append(dateString); - } - else - { - text.Append( _L("### date string format error: ") ); - text.AppendNum(err); - } - Write(text); - -#endif // ORIGINAL_TIMESTAMP - } - - -void CLogFile::LogTextInternal(const TDesC8& aText) - { - TPtrC8 tail(aText.Ptr(), aText.Length()); - - TInt newLinePosition = tail.Find(KCrLf8); - while (newLinePosition != KErrNotFound) - { - if (newLinePosition > 0) - { - Write(tail.Left(newLinePosition)); - tail.Set(aText.Ptr() + newLinePosition, tail.Length() - newLinePosition); - } - LogNewline(); - tail.Set(aText.Ptr() + KCrLf8.iTypeLength, tail.Length() - KCrLf8.iTypeLength); - - newLinePosition = tail.Find(KCrLf8); - } - - // No more newlines left so print remainder - Write(tail); - - } - - -void CLogFile::LogByteInternal(TUint8 aByte) - { - if ((aByte >= KAsciiStart) && (aByte < KAsciiEnd)) - { - // Display as ASCII char - TBuf8<1> str; - str.Append(aByte); - Write(str); - } - else - { - // Display as hex number - TBuf8<4> str; - str.Append(KHexCharLeft); - str.AppendNum((TUint)aByte, EHex); - str.Append(KHexCharRight); - Write(str); - } - } - - -void CLogFile::LogIntInternal(TUint aNumber) - { - // Display as ASCII char - TBuf8<20> str; - str.Append(KHexCharLeft); - str.AppendNum(aNumber, EHex); - str.Append(KHexCharRight); - Write(str); - } - - -EXPORT_C void CLogFile::LogNewline() - { - Write(KCrLf8); - - if (iAutoTimestamp) - { - LogTimeInternal(); - } - } - - -void CLogFile::StartWrite() - { - ASSERT(iCheckNestDepth == 0); - iCheckNestDepth++; - - if (iAutoNewline) - { - LogNewline(); - } - } - - -void CLogFile::EndWrite() - { - if (iAutoFlush) - { - iLogFile.Flush(); - } - - iCheckNestDepth--; - ASSERT(iCheckNestDepth == 0); - } - -void CLogFile::Write(const TDesC8& aText) - { - - if (iLogFile.Write(aText) != KErrNone) - { - // As the framework may be trapping User::Panic we need to - // produce the panic at a lower level. - RThread().Panic(KLogFilePanic, ELogFileWriteFailed); - } - } - -EXPORT_C void CLogFile::SetAutoFlush(TBool aOn) - { - iAutoFlush = aOn; - } - - -EXPORT_C void CLogFile::SetAutoTimeStamp(TBool aOn) - { - iAutoTimestamp = aOn; - } - - -EXPORT_C void CLogFile::SetAutoNewline(TBool aOn) - { - iAutoNewline = aOn; - } - - -EXPORT_C void CLogFile::StaticLog(const TDesC& aFileName, const TDesC8& aText) - { - // This needs to be inside a TRAP statement. Calling StaticLogL - // from certain places, for example AppUi destructors, - // would result in E32USER-CBase 66 panic. - TRAP_IGNORE( CLogFile::StaticLogL(aFileName,aText) ); - } - - -EXPORT_C void CLogFile::StaticLog(const TDesC& aFileName, const TDesC& aText) - { - // This needs to be inside a TRAP statement. Calling StaticLogL - // from certain places, for example AppUi destructors, - // would result in E32USER-CBase 66 panic. - TRAP_IGNORE( CLogFile::StaticLogL(aFileName,aText) ); - } - - -EXPORT_C void CLogFile::StaticLogL(const TDesC& aFileName, const TDesC8& aText) - { - CLogFile* logFile = NewLC(aFileName, EFalse); - logFile->SetAutoNewline(ETrue); - logFile->SetAutoTimeStamp(ETrue); - logFile->Log(aText); - CleanupStack::PopAndDestroy(logFile); - } - - -EXPORT_C void CLogFile::StaticLogL(const TDesC& aFileName, const TDesC& aText) - { - CLogFile* logFile = NewLC(aFileName, EFalse); - logFile->SetAutoNewline(ETrue); - logFile->SetAutoTimeStamp(ETrue); - logFile->Log(aText); - CleanupStack::PopAndDestroy(logFile); - } - -void CLogFile::GetFileName(TDes& aFileName) const - { - iLogFile.FullName(aFileName); - } - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/BWINS/VideoEditorUiComponents.DEF --- a/videditor/VideoEditorUiComponents/BWINS/VideoEditorUiComponents.DEF Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ -EXPORTS - ??0CExtProgressDialog@@QAE@PAPAV0@@Z @ 1 NONAME ; CExtProgressDialog::CExtProgressDialog(class CExtProgressDialog * *) - ??1CExtProgressDialog@@UAE@XZ @ 2 NONAME ; CExtProgressDialog::~CExtProgressDialog(void) - ??1CVeiCutterBar@@UAE@XZ @ 3 NONAME ; CVeiCutterBar::~CVeiCutterBar(void) - ??1CVeiTextDisplay@@UAE@XZ @ 4 NONAME ; CVeiTextDisplay::~CVeiTextDisplay(void) - ??1CVeiTimeLabelNavi@@UAE@XZ @ 5 NONAME ; CVeiTimeLabelNavi::~CVeiTimeLabelNavi(void) - ??1CVeiVideoDisplay@@UAE@XZ @ 6 NONAME ; CVeiVideoDisplay::~CVeiVideoDisplay(void) - ?AdjustVolumeL@CVeiVideoDisplay@@QAEXH@Z @ 7 NONAME ; void CVeiVideoDisplay::AdjustVolumeL(int) - ?Dim@CVeiCutterBar@@UAEXH@Z @ 8 NONAME ; void CVeiCutterBar::Dim(int) - ?EndMarkPoint@CVeiCutterBar@@QAEIXZ @ 9 NONAME ; unsigned int CVeiCutterBar::EndMarkPoint(void) - ?EndMarkRect@CVeiCutterBar@@QAE?AVTRect@@XZ @ 10 NONAME ; class TRect CVeiCutterBar::EndMarkRect(void) - ?GetBorderWidth@CVeiVideoDisplay@@QBEHXZ @ 11 NONAME ; int CVeiVideoDisplay::GetBorderWidth(void) const - ?GetProgressInfoL@CExtProgressDialog@@QAEPAVCEikProgressInfo@@XZ @ 12 NONAME ; class CEikProgressInfo * CExtProgressDialog::GetProgressInfoL(void) - ?GetScreenSize@CVeiVideoDisplay@@QBE?AVTSize@@XZ @ 13 NONAME ; class TSize CVeiVideoDisplay::GetScreenSize(void) const - ?NewL@CVeiCutterBar@@SAPAV1@PBVCCoeControl@@H@Z @ 14 NONAME ; class CVeiCutterBar * CVeiCutterBar::NewL(class CCoeControl const *, int) - ?NewL@CVeiErrorUI@@SAPAV1@AAVCCoeEnv@@@Z @ 15 NONAME ; class CVeiErrorUI * CVeiErrorUI::NewL(class CCoeEnv &) - ?NewL@CVeiTextDisplay@@SAPAV1@ABVTRect@@PBVCCoeControl@@@Z @ 16 NONAME ; class CVeiTextDisplay * CVeiTextDisplay::NewL(class TRect const &, class CCoeControl const *) - ?NewL@CVeiTimeLabelNavi@@SAPAV1@XZ @ 17 NONAME ; class CVeiTimeLabelNavi * CVeiTimeLabelNavi::NewL(void) - ?NewL@CVeiVideoDisplay@@SAPAV1@ABVTRect@@PBVCCoeControl@@AAVMVeiVideoDisplayObserver@@@Z @ 18 NONAME ; class CVeiVideoDisplay * CVeiVideoDisplay::NewL(class TRect const &, class CCoeControl const *, class MVeiVideoDisplayObserver &) - ?NewLC@CVeiCutterBar@@SAPAV1@PBVCCoeControl@@H@Z @ 19 NONAME ; class CVeiCutterBar * CVeiCutterBar::NewLC(class CCoeControl const *, int) - ?NewLC@CVeiTextDisplay@@SAPAV1@ABVTRect@@PBVCCoeControl@@@Z @ 20 NONAME ; class CVeiTextDisplay * CVeiTextDisplay::NewLC(class TRect const &, class CCoeControl const *) - ?NewLC@CVeiTimeLabelNavi@@SAPAV1@XZ @ 21 NONAME ; class CVeiTimeLabelNavi * CVeiTimeLabelNavi::NewLC(void) - ?NewLC@CVeiVideoDisplay@@SAPAV1@ABVTRect@@PBVCCoeControl@@AAVMVeiVideoDisplayObserver@@@Z @ 22 NONAME ; class CVeiVideoDisplay * CVeiVideoDisplay::NewLC(class TRect const &, class CCoeControl const *, class MVeiVideoDisplayObserver &) - ?OpenFileL@CVeiVideoDisplay@@QAEXABVTDesC16@@@Z @ 23 NONAME ; void CVeiVideoDisplay::OpenFileL(class TDesC16 const &) - ?PauseL@CVeiVideoDisplay@@QAEXXZ @ 24 NONAME ; void CVeiVideoDisplay::PauseL(void) - ?Play@CVeiVideoDisplay@@QAEXXZ @ 25 NONAME ; void CVeiVideoDisplay::Play(void) - ?PlayHeadRect@CVeiCutterBar@@QAE?AVTRect@@XZ @ 26 NONAME ; class TRect CVeiCutterBar::PlayHeadRect(void) - ?PlayL@CVeiVideoDisplay@@QAEXABVTDesC16@@ABVTTimeIntervalMicroSeconds@@1@Z @ 27 NONAME ; void CVeiVideoDisplay::PlayL(class TDesC16 const &, class TTimeIntervalMicroSeconds const &, class TTimeIntervalMicroSeconds const &) - ?PlayMarkedL@CVeiVideoDisplay@@QAEXABVTTimeIntervalMicroSeconds@@0@Z @ 28 NONAME ; void CVeiVideoDisplay::PlayMarkedL(class TTimeIntervalMicroSeconds const &, class TTimeIntervalMicroSeconds const &) - ?PositionL@CVeiVideoDisplay@@QBE?AVTTimeIntervalMicroSeconds@@XZ @ 29 NONAME ; class TTimeIntervalMicroSeconds CVeiVideoDisplay::PositionL(void) const - ?PrepareLC@CExtProgressDialog@@UAEXH@Z @ 30 NONAME ; void CExtProgressDialog::PrepareLC(int) - ?ProgressBarRect@CVeiCutterBar@@QAE?AVTRect@@XZ @ 31 NONAME ; class TRect CVeiCutterBar::ProgressBarRect(void) - ?RotationL@CVeiVideoDisplay@@QBE?AW4TVideoRotation@@XZ @ 32 NONAME ; enum TVideoRotation CVeiVideoDisplay::RotationL(void) const - ?SetAnimationResourceIdL@CExtProgressDialog@@QAEXABH@Z @ 33 NONAME ; void CExtProgressDialog::SetAnimationResourceIdL(int const &) - ?SetArrowSize@CVeiTextDisplay@@QAEXABVTSize@@@Z @ 34 NONAME ; void CVeiTextDisplay::SetArrowSize(class TSize const &) - ?SetBlackScreen@CVeiVideoDisplay@@QAEXH@Z @ 35 NONAME ; void CVeiVideoDisplay::SetBlackScreen(int) - ?SetCallback@CExtProgressDialog@@QAEXPAVMExtProgressDialogCallback@@@Z @ 36 NONAME ; void CExtProgressDialog::SetCallback(class MExtProgressDialogCallback *) - ?SetComponentRect@CVeiCutterBar@@QAEXW4TCutterBarComponent@1@VTRect@@@Z @ 37 NONAME ; void CVeiCutterBar::SetComponentRect(enum CVeiCutterBar::TCutterBarComponent, class TRect) - ?SetComponentRect@CVeiTextDisplay@@QAEXW4TTextDisplayComponent@1@VTRect@@@Z @ 38 NONAME ; void CVeiTextDisplay::SetComponentRect(enum CVeiTextDisplay::TTextDisplayComponent, class TRect) - ?SetCurrentPoint@CVeiCutterBar@@UAEXH@Z @ 39 NONAME ; void CVeiCutterBar::SetCurrentPoint(int) - ?SetCutIn@CVeiTextDisplay@@QAEXABVTTimeIntervalMicroSeconds@@@Z @ 40 NONAME ; void CVeiTextDisplay::SetCutIn(class TTimeIntervalMicroSeconds const &) - ?SetCutOut@CVeiTextDisplay@@QAEXABVTTimeIntervalMicroSeconds@@@Z @ 41 NONAME ; void CVeiTextDisplay::SetCutOut(class TTimeIntervalMicroSeconds const &) - ?SetDuration@CVeiTextDisplay@@QAEXABVTTimeIntervalMicroSeconds@@@Z @ 42 NONAME ; void CVeiTextDisplay::SetDuration(class TTimeIntervalMicroSeconds const &) - ?SetFinishedStatus@CVeiCutterBar@@UAEXH@Z @ 43 NONAME ; void CVeiCutterBar::SetFinishedStatus(int) - ?SetFrameIntervalL@CVeiVideoDisplay@@QAEXH@Z @ 44 NONAME ; void CVeiVideoDisplay::SetFrameIntervalL(int) - ?SetInPoint@CVeiCutterBar@@UAEXABVTTimeIntervalMicroSeconds@@@Z @ 45 NONAME ; void CVeiCutterBar::SetInPoint(class TTimeIntervalMicroSeconds const &) - ?SetLabelL@CVeiTimeLabelNavi@@QAEXABVTDesC16@@@Z @ 46 NONAME ; void CVeiTimeLabelNavi::SetLabelL(class TDesC16 const &) - ?SetLandscapeScreenOrientation@CVeiTextDisplay@@QAEXH@Z @ 47 NONAME ; void CVeiTextDisplay::SetLandscapeScreenOrientation(int) - ?SetLayout@CVeiTextDisplay@@QAEXW4TVeiLayout@1@@Z @ 48 NONAME ; void CVeiTextDisplay::SetLayout(enum CVeiTextDisplay::TVeiLayout) - ?SetLeftArrowVisibility@CVeiTextDisplay@@QAEXH@Z @ 49 NONAME ; void CVeiTextDisplay::SetLeftArrowVisibility(int) - ?SetLeftArrowVisibilityL@CVeiTimeLabelNavi@@QAEXH@Z @ 50 NONAME ; void CVeiTimeLabelNavi::SetLeftArrowVisibilityL(int) - ?SetLocation@CVeiTextDisplay@@QAEXABVTDesC16@@@Z @ 51 NONAME ; void CVeiTextDisplay::SetLocation(class TDesC16 const &) - ?SetLowerArrowVisibility@CVeiTextDisplay@@QAEXH@Z @ 52 NONAME ; void CVeiTextDisplay::SetLowerArrowVisibility(int) - ?SetMuteL@CVeiVideoDisplay@@QAEXH@Z @ 53 NONAME ; void CVeiVideoDisplay::SetMuteL(int) - ?SetName@CVeiTextDisplay@@QAEXABVTDesC16@@@Z @ 54 NONAME ; void CVeiTextDisplay::SetName(class TDesC16 const &) - ?SetOutPoint@CVeiCutterBar@@UAEXABVTTimeIntervalMicroSeconds@@@Z @ 55 NONAME ; void CVeiCutterBar::SetOutPoint(class TTimeIntervalMicroSeconds const &) - ?SetPauseIconVisibilityL@CVeiTimeLabelNavi@@QAEXH@Z @ 56 NONAME ; void CVeiTimeLabelNavi::SetPauseIconVisibilityL(int) - ?SetPictureL@CVeiVideoDisplay@@QAEXABVCFbsBitmap@@@Z @ 57 NONAME ; void CVeiVideoDisplay::SetPictureL(class CFbsBitmap const &) - ?SetPlayHeadVisible@CVeiCutterBar@@UAEXH@Z @ 58 NONAME ; void CVeiCutterBar::SetPlayHeadVisible(int) - ?SetPositionL@CVeiVideoDisplay@@QAEXABVTTimeIntervalMicroSeconds@@@Z @ 59 NONAME ; void CVeiVideoDisplay::SetPositionL(class TTimeIntervalMicroSeconds const &) - ?SetPressedComponent@CVeiCutterBar@@QAEXW4TCutterBarPressedIcon@1@@Z @ 60 NONAME ; void CVeiCutterBar::SetPressedComponent(enum CVeiCutterBar::TCutterBarPressedIcon) - ?SetRightArrowVisibility@CVeiTextDisplay@@QAEXH@Z @ 61 NONAME ; void CVeiTextDisplay::SetRightArrowVisibility(int) - ?SetRightArrowVisibilityL@CVeiTimeLabelNavi@@QAEXH@Z @ 62 NONAME ; void CVeiTimeLabelNavi::SetRightArrowVisibilityL(int) - ?SetRotationL@CVeiVideoDisplay@@QAEXW4TVideoRotation@@@Z @ 63 NONAME ; void CVeiVideoDisplay::SetRotationL(enum TVideoRotation) - ?SetSlowMotionOn@CVeiTextDisplay@@QAEXH@Z @ 64 NONAME ; void CVeiTextDisplay::SetSlowMotionOn(int) - ?SetSlowMotionPreset@CVeiTextDisplay@@QAEXH@Z @ 65 NONAME ; void CVeiTextDisplay::SetSlowMotionPreset(int) - ?SetTextL@CExtProgressDialog@@QAEXABVTDesC16@@@Z @ 66 NONAME ; void CExtProgressDialog::SetTextL(class TDesC16 const &) - ?SetTime@CVeiTextDisplay@@QAEXABVTTime@@@Z @ 67 NONAME ; void CVeiTextDisplay::SetTime(class TTime const &) - ?SetTotalDuration@CVeiCutterBar@@UAEXABVTTimeIntervalMicroSeconds@@@Z @ 68 NONAME ; void CVeiCutterBar::SetTotalDuration(class TTimeIntervalMicroSeconds const &) - ?SetUpperArrowVisibility@CVeiTextDisplay@@QAEXH@Z @ 69 NONAME ; void CVeiTextDisplay::SetUpperArrowVisibility(int) - ?SetVolumeIconVisibilityL@CVeiTimeLabelNavi@@QAEXH@Z @ 70 NONAME ; void CVeiTimeLabelNavi::SetVolumeIconVisibilityL(int) - ?ShowAnimationL@CVeiVideoDisplay@@QAEXHH@Z @ 71 NONAME ; void CVeiVideoDisplay::ShowAnimationL(int, int) - ?ShowBlackScreen@CVeiVideoDisplay@@QAEXXZ @ 72 NONAME ; void CVeiVideoDisplay::ShowBlackScreen(void) - ?ShowBlankScreen@CVeiVideoDisplay@@QAEXXZ @ 73 NONAME ; void CVeiVideoDisplay::ShowBlankScreen(void) - ?ShowErrorNote@CVeiErrorUI@@SAHAAVCCoeEnv@@HH@Z @ 74 NONAME ; int CVeiErrorUI::ShowErrorNote(class CCoeEnv &, int, int) - ?ShowGlobalErrorNote@CVeiErrorUI@@QBEHH@Z @ 75 NONAME ; int CVeiErrorUI::ShowGlobalErrorNote(int) const - ?ShowPictureL@CVeiVideoDisplay@@QAEXABVCFbsBitmap@@0@Z @ 76 NONAME ; void CVeiVideoDisplay::ShowPictureL(class CFbsBitmap const &, class CFbsBitmap const &) - ?ShowPictureL@CVeiVideoDisplay@@QAEXABVCFbsBitmap@@@Z @ 77 NONAME ; void CVeiVideoDisplay::ShowPictureL(class CFbsBitmap const &) - ?SlowMotionOn@CVeiTextDisplay@@QBEHXZ @ 78 NONAME ; int CVeiTextDisplay::SlowMotionOn(void) const - ?SlowMotionPreset@CVeiTextDisplay@@QBEHXZ @ 79 NONAME ; int CVeiTextDisplay::SlowMotionPreset(void) const - ?StartAnimationL@CExtProgressDialog@@QAEXXZ @ 80 NONAME ; void CExtProgressDialog::StartAnimationL(void) - ?StartMarkPoint@CVeiCutterBar@@QAEIXZ @ 81 NONAME ; unsigned int CVeiCutterBar::StartMarkPoint(void) - ?StartMarkRect@CVeiCutterBar@@QAE?AVTRect@@XZ @ 82 NONAME ; class TRect CVeiCutterBar::StartMarkRect(void) - ?Stop@CVeiVideoDisplay@@QAEXH@Z @ 83 NONAME ; void CVeiVideoDisplay::Stop(int) - ?StopAnimation@CVeiVideoDisplay@@QAEXXZ @ 84 NONAME ; void CVeiVideoDisplay::StopAnimation(void) - ?TotalLengthL@CVeiVideoDisplay@@QAE?AVTTimeIntervalMicroSeconds@@XZ @ 85 NONAME ; class TTimeIntervalMicroSeconds CVeiVideoDisplay::TotalLengthL(void) - ?Volume@CVeiVideoDisplay@@QBEHXZ @ 86 NONAME ; int CVeiVideoDisplay::Volume(void) const - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/EABI/VideoEditorUiComponents.DEF --- a/videditor/VideoEditorUiComponents/EABI/VideoEditorUiComponents.DEF Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -EXPORTS - _ZN11CVeiErrorUI13ShowErrorNoteER7CCoeEnvii @ 1 NONAME - _ZN11CVeiErrorUI4NewLER7CCoeEnv @ 2 NONAME - _ZN13CVeiCutterBar10SetInPointERK25TTimeIntervalMicroSeconds @ 3 NONAME - _ZN13CVeiCutterBar11EndMarkRectEv @ 4 NONAME - _ZN13CVeiCutterBar11SetOutPointERK25TTimeIntervalMicroSeconds @ 5 NONAME - _ZN13CVeiCutterBar12EndMarkPointEv @ 6 NONAME - _ZN13CVeiCutterBar12PlayHeadRectEv @ 7 NONAME - _ZN13CVeiCutterBar13StartMarkRectEv @ 8 NONAME - _ZN13CVeiCutterBar14StartMarkPointEv @ 9 NONAME - _ZN13CVeiCutterBar15ProgressBarRectEv @ 10 NONAME - _ZN13CVeiCutterBar15SetCurrentPointEi @ 11 NONAME - _ZN13CVeiCutterBar16SetComponentRectENS_19TCutterBarComponentE5TRect @ 12 NONAME - _ZN13CVeiCutterBar16SetTotalDurationERK25TTimeIntervalMicroSeconds @ 13 NONAME - _ZN13CVeiCutterBar17SetFinishedStatusEi @ 14 NONAME - _ZN13CVeiCutterBar18SetPlayHeadVisibleEi @ 15 NONAME - _ZN13CVeiCutterBar19SetPressedComponentENS_21TCutterBarPressedIconE @ 16 NONAME - _ZN13CVeiCutterBar3DimEi @ 17 NONAME - _ZN13CVeiCutterBar4NewLEPK11CCoeControli @ 18 NONAME - _ZN13CVeiCutterBar5NewLCEPK11CCoeControli @ 19 NONAME - _ZN13CVeiCutterBarD0Ev @ 20 NONAME - _ZN13CVeiCutterBarD1Ev @ 21 NONAME - _ZN13CVeiCutterBarD2Ev @ 22 NONAME - _ZN15CVeiTextDisplay11SetDurationERK25TTimeIntervalMicroSeconds @ 23 NONAME - _ZN15CVeiTextDisplay11SetLocationERK7TDesC16 @ 24 NONAME - _ZN15CVeiTextDisplay12SetArrowSizeERK5TSize @ 25 NONAME - _ZN15CVeiTextDisplay15SetSlowMotionOnEi @ 26 NONAME - _ZN15CVeiTextDisplay16SetComponentRectENS_21TTextDisplayComponentE5TRect @ 27 NONAME - _ZN15CVeiTextDisplay19SetSlowMotionPresetEi @ 28 NONAME - _ZN15CVeiTextDisplay22SetLeftArrowVisibilityEi @ 29 NONAME - _ZN15CVeiTextDisplay23SetLowerArrowVisibilityEi @ 30 NONAME - _ZN15CVeiTextDisplay23SetRightArrowVisibilityEi @ 31 NONAME - _ZN15CVeiTextDisplay23SetUpperArrowVisibilityEi @ 32 NONAME - _ZN15CVeiTextDisplay29SetLandscapeScreenOrientationEi @ 33 NONAME - _ZN15CVeiTextDisplay4NewLERK5TRectPK11CCoeControl @ 34 NONAME - _ZN15CVeiTextDisplay5NewLCERK5TRectPK11CCoeControl @ 35 NONAME - _ZN15CVeiTextDisplay7SetNameERK7TDesC16 @ 36 NONAME - _ZN15CVeiTextDisplay7SetTimeERK5TTime @ 37 NONAME - _ZN15CVeiTextDisplay8SetCutInERK25TTimeIntervalMicroSeconds @ 38 NONAME - _ZN15CVeiTextDisplay9SetCutOutERK25TTimeIntervalMicroSeconds @ 39 NONAME - _ZN15CVeiTextDisplay9SetLayoutENS_10TVeiLayoutE @ 40 NONAME - _ZN15CVeiTextDisplayD0Ev @ 41 NONAME - _ZN15CVeiTextDisplayD1Ev @ 42 NONAME - _ZN15CVeiTextDisplayD2Ev @ 43 NONAME - _ZN16CVeiVideoDisplay11PlayMarkedLERK25TTimeIntervalMicroSecondsS2_ @ 44 NONAME - _ZN16CVeiVideoDisplay11SetPictureLERK10CFbsBitmap @ 45 NONAME - _ZN16CVeiVideoDisplay12SetPositionLERK25TTimeIntervalMicroSeconds @ 46 NONAME - _ZN16CVeiVideoDisplay12SetRotationLE14TVideoRotation @ 47 NONAME - _ZN16CVeiVideoDisplay12ShowPictureLERK10CFbsBitmap @ 48 NONAME - _ZN16CVeiVideoDisplay12ShowPictureLERK10CFbsBitmapS2_ @ 49 NONAME - _ZN16CVeiVideoDisplay12TotalLengthLEv @ 50 NONAME - _ZN16CVeiVideoDisplay13AdjustVolumeLEi @ 51 NONAME - _ZN16CVeiVideoDisplay13StopAnimationEv @ 52 NONAME - _ZN16CVeiVideoDisplay14SetBlackScreenEi @ 53 NONAME - _ZN16CVeiVideoDisplay14ShowAnimationLEii @ 54 NONAME - _ZN16CVeiVideoDisplay15ShowBlackScreenEv @ 55 NONAME - _ZN16CVeiVideoDisplay15ShowBlankScreenEv @ 56 NONAME - _ZN16CVeiVideoDisplay17SetFrameIntervalLEi @ 57 NONAME - _ZN16CVeiVideoDisplay4NewLERK5TRectPK11CCoeControlR24MVeiVideoDisplayObserver @ 58 NONAME - _ZN16CVeiVideoDisplay4PlayEv @ 59 NONAME - _ZN16CVeiVideoDisplay4StopEi @ 60 NONAME - _ZN16CVeiVideoDisplay5NewLCERK5TRectPK11CCoeControlR24MVeiVideoDisplayObserver @ 61 NONAME - _ZN16CVeiVideoDisplay5PlayLERK7TDesC16RK25TTimeIntervalMicroSecondsS5_ @ 62 NONAME - _ZN16CVeiVideoDisplay6PauseLEv @ 63 NONAME - _ZN16CVeiVideoDisplay8SetMuteLEi @ 64 NONAME - _ZN16CVeiVideoDisplay9OpenFileLERK7TDesC16 @ 65 NONAME - _ZN16CVeiVideoDisplayD0Ev @ 66 NONAME - _ZN16CVeiVideoDisplayD1Ev @ 67 NONAME - _ZN16CVeiVideoDisplayD2Ev @ 68 NONAME - _ZN17CVeiTimeLabelNavi23SetLeftArrowVisibilityLEi @ 69 NONAME - _ZN17CVeiTimeLabelNavi23SetPauseIconVisibilityLEi @ 70 NONAME - _ZN17CVeiTimeLabelNavi24SetRightArrowVisibilityLEi @ 71 NONAME - _ZN17CVeiTimeLabelNavi24SetVolumeIconVisibilityLEi @ 72 NONAME - _ZN17CVeiTimeLabelNavi4NewLEv @ 73 NONAME - _ZN17CVeiTimeLabelNavi5NewLCEv @ 74 NONAME - _ZN17CVeiTimeLabelNavi9SetLabelLERK7TDesC16 @ 75 NONAME - _ZN17CVeiTimeLabelNaviD0Ev @ 76 NONAME - _ZN17CVeiTimeLabelNaviD1Ev @ 77 NONAME - _ZN17CVeiTimeLabelNaviD2Ev @ 78 NONAME - _ZN18CExtProgressDialog11SetCallbackEP26MExtProgressDialogCallback @ 79 NONAME - _ZN18CExtProgressDialog15StartAnimationLEv @ 80 NONAME - _ZN18CExtProgressDialog16GetProgressInfoLEv @ 81 NONAME - _ZN18CExtProgressDialog23SetAnimationResourceIdLERKi @ 82 NONAME - _ZN18CExtProgressDialog8SetTextLERK7TDesC16 @ 83 NONAME - _ZN18CExtProgressDialog9PrepareLCEi @ 84 NONAME - _ZN18CExtProgressDialogC1EPPS_ @ 85 NONAME - _ZN18CExtProgressDialogC2EPPS_ @ 86 NONAME - _ZN18CExtProgressDialogD0Ev @ 87 NONAME - _ZN18CExtProgressDialogD1Ev @ 88 NONAME - _ZN18CExtProgressDialogD2Ev @ 89 NONAME - _ZNK11CVeiErrorUI19ShowGlobalErrorNoteEi @ 90 NONAME - _ZNK15CVeiTextDisplay12SlowMotionOnEv @ 91 NONAME - _ZNK15CVeiTextDisplay16SlowMotionPresetEv @ 92 NONAME - _ZNK16CVeiVideoDisplay13GetScreenSizeEv @ 93 NONAME - _ZNK16CVeiVideoDisplay14GetBorderWidthEv @ 94 NONAME - _ZNK16CVeiVideoDisplay6VolumeEv @ 95 NONAME - _ZNK16CVeiVideoDisplay9PositionLEv @ 96 NONAME - _ZNK16CVeiVideoDisplay9RotationLEv @ 97 NONAME - _ZTI13CVeiCutterBar @ 98 NONAME ; ## - _ZTI15CVeiTextDisplay @ 99 NONAME ; ## - _ZTI16CVeiVideoDisplay @ 100 NONAME ; ## - _ZTI17CVeiTimeLabelNavi @ 101 NONAME ; ## - _ZTI18CExtProgressDialog @ 102 NONAME ; ## - _ZTV13CVeiCutterBar @ 103 NONAME ; ## - _ZTV15CVeiTextDisplay @ 104 NONAME ; ## - _ZTV16CVeiVideoDisplay @ 105 NONAME ; ## - _ZTV17CVeiTimeLabelNavi @ 106 NONAME ; ## - _ZTV18CExtProgressDialog @ 107 NONAME ; ## - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/VideoEditorUiComponents.rss --- a/videditor/VideoEditorUiComponents/data/VideoEditorUiComponents.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,662 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -NAME VEUI - -// INCLUDES -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "videoeditorcommon.hrh" - -#if defined(__WINS__) -#define vei_scalable_bitmap_file "\\epoc32\\release\\"$(PLATFORM)"\\"$(CFG)"\\Z\\"APP_BITMAP_DIR"\\VideoEditorUiComponents.mif" -// Removed because bitmaps are used by manual video editor only -//#define vei_bitmap_file "\\epoc32\\release\\"$(PLATFORM)"\\"$(CFG)"\\Z\\"APP_BITMAP_DIR"\\VideoEditorBitmaps.mbm" -#else -#define vei_scalable_bitmap_file ""APP_BITMAP_DIR"\\VideoEditorUiComponents.mif" -// Removed because bitmaps are used by manual video editor only -//#define vei_bitmap_file ""APP_BITMAP_DIR"\\VideoEditorBitmaps.mbm" -#endif - - -RESOURCE RSS_SIGNATURE { } - -// TEXT RESOURCES - -RESOURCE TBUF64 r_vei_cut_video_in { buf = qtn_vie_start_mark; } -RESOURCE TBUF64 r_vei_cut_video_out { buf = qtn_vie_end_mark; } -RESOURCE TBUF64 r_vei_edit_video_duration { buf = qtn_ved_edit_video_duration; } -RESOURCE TBUF r_vei_default_error_note { buf= qtn_err_eikon_general; } - -RESOURCE TBUF64 r_vei_navi_pane_mms { buf = qtn_vei_navi_pane_mms; } -RESOURCE TBUF32 r_vei_size_kb { buf = qtn_size_kb; } -RESOURCE TBUF32 r_vei_size_mb { buf = " %U MB"; } // change this to a logical string when Manual Video Editor is localised -RESOURCE TBUF32 r_vei_size_gb { buf = qtn_size_gb; } - - - - -// ============================== ANIMATIONS ================================== - -RESOURCE BMPANIM_DATA r_vei_slow_motion_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_scalable_bitmap_file; - frames = r_vei_slow_motion_animation_array; - } - - -RESOURCE ARRAY r_vei_slow_motion_animation_array - { - items = - { - // Old own icons that are not compiled anymore. New graphics need to be - // requested from graphics team if needed in the future. - /* - BMPANIM_FRAME - { - bmpid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion1; - maskid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion1_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion2; - maskid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion2_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion3; - maskid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion3_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion4; - maskid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion2_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion5; - maskid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion5_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion6; - maskid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion6_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion7; - maskid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion7_mask; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion8; - maskid = EMbmVideoeditoruicomponentsQgn_graf_ve_trans_slowmotion8_mask; - } - */ - }; - } - -RESOURCE BMPANIM_DATA r_ved_adding_text_note_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_ved_adding_text_note_animation_array; - } - - -RESOURCE ARRAY r_ved_adding_text_note_animation_array - { - items = - { - // Old own icons that are not compiled anymore. New graphics need to be - // requested from graphics team if needed in the future. - /* - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00000; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00000; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00001; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00001; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00002; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00002; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00003; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00003; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00004; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00004; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00005; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00005; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00006; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00006; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00007; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00007; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00008; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00008; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00009; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00009; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00010; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00010; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00011; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00011; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00012; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00012; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00013; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00013; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00014; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00014; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00015; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00015; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00016; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00016; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00017; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00017; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00018; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00018; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00019; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00019; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00020; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00020; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00021; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00021; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00022; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00022; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsAdding_text_00023; - maskid = EMbmVideoeditorbitmapsAdding_text_mask_soft_00023; - } - */ - }; - } - - -RESOURCE BMPANIM_DATA r_ved_cutting_note_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_ved_cutting_note_animation_array; - } - -RESOURCE ARRAY r_ved_cutting_note_animation_array - { - items = - { - // Old own icons that are not compiled anymore. New graphics need to be - // requested from graphics team if needed in the future. - /* - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsCutting_00000; - maskid = EMbmVideoeditorbitmapsCutting_mask_soft_00000; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsCutting_00001; - maskid = EMbmVideoeditorbitmapsCutting_mask_soft_00001; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsCutting_00002; - maskid = EMbmVideoeditorbitmapsCutting_mask_soft_00002; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsCutting_00003; - maskid = EMbmVideoeditorbitmapsCutting_mask_soft_00003; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsCutting_00004; - maskid = EMbmVideoeditorbitmapsCutting_mask_soft_00004; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsCutting_00005; - maskid = EMbmVideoeditorbitmapsCutting_mask_soft_00005; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsCutting_00006; - maskid = EMbmVideoeditorbitmapsCutting_mask_soft_00006; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsCutting_00007; - maskid = EMbmVideoeditorbitmapsCutting_mask_soft_00007; - } - */ - }; - } - -RESOURCE BMPANIM_DATA r_ved_merging_note_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_ved_merging_note_animation_array; - } - - -RESOURCE ARRAY r_ved_merging_note_animation_array - { - items = - { - // Old own icons that are not compiled anymore. New graphics need to be - // requested from graphics team if needed in the future. - /* - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00000; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00000_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00001; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00001_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00002; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00002_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00003; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00003_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00004; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00004_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00005; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00005_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00006; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00006_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00007; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00007_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00008; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00008_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00009; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00009_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00010; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00010_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00011; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00011_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00012; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00012_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00013; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00013_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00014; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00014_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00015; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00015_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00016; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00016_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00017; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00017_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00018; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00018_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00019; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00019_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00020; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00020_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00021; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00021_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00022; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00022_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00023; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00023_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00024; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00024_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00025; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00025_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00026; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00026_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00027; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00027_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00028; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00028_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00029; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00029_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00030; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00030_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00031; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00031_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00032; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00032_1; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_00033; - maskid = EMbmVideoeditorbitmapsMerging_mask_soft_00033_1; - } - */ - }; - - } - - -RESOURCE BMPANIM_DATA r_ved_merging_audio_note_animation - { - frameinterval = 100; - playmode = EAknBitmapAnimationPlayModeCycle; - flash = 0; - bmpfile = vei_bitmap_file; - frames = r_ved_merging_audio_note_animation_array; - } - - -RESOURCE ARRAY r_ved_merging_audio_note_animation_array - { - items = - { - // Old own icons that are not compiled anymore. New graphics need to be - // requested from graphics team if needed in the future. - /* - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00000; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00000; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00001; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00001; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00002; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00002; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00003; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00003; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00004; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00004; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00005; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00005; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00006; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00006; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00007; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00007; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00008; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00008; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00009; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00009; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00010; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00010; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00011; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00011; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00012; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00012; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00013; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00013; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00014; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00014; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00015; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00015; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00016; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00016; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00017; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00017; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00018; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00018; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00019; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00019; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00020; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00020; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00021; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00021; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00022; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00022; - }, - BMPANIM_FRAME - { - bmpid = EMbmVideoeditorbitmapsMerging_audio_00023; - maskid = EMbmVideoeditorbitmapsMerging_audio_mask_soft_00023; - } - */ - }; - - } - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00000.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00000.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00001.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00001.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00002.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00002.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00003.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00003.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00004.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00004.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00005.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00005.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00006.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00006.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00007.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00007.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00008.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00008.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00009.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00009.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00010.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00010.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00011.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00011.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00012.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00012.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00013.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00013.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00014.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00014.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00015.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00015.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00016.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00016.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00017.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00017.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00018.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00018.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00019.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00019.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00020.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00020.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00021.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00021.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00022.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00022.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_00023.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_00023.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00000.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00000.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00001.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00001.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00002.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00002.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00003.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00003.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00004.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00004.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00005.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00005.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00006.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00006.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00007.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00007.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00008.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00008.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00009.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00009.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00010.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00010.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00011.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00011.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00012.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00012.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00013.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00013.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00014.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00014.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00015.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00015.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00016.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00016.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00017.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00017.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00018.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00018.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00019.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00019.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00020.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00020.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00021.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00021.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00022.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00022.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00023.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/adding_text_mask_soft_00023.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_00000.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_00000.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_00001.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_00001.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_00002.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_00002.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_00003.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_00003.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_00004.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_00004.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_00005.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_00005.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_00006.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_00006.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_00007.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_00007.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00000.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00000.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00001.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00001.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00002.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00002.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00003.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00003.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00004.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00004.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00005.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00005.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00006.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00006.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00007.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/cutting_mask_soft_00007.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00000.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00000.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00001.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00001.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00002.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00002.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00003.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00003.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00004.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00004.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00005.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00005.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00006.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00006.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00007.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00007.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00008.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00008.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00009.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00009.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00010.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00010.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00011.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00011.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00012.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00012.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00013.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00013.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00014.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00014.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00015.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00015.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00016.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00016.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00017.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00017.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00018.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00018.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00019.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00019.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00020.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00020.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00021.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00021.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00022.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00022.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00023.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00023.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00024.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00024.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00025.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00025.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00026.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00026.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00027.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00027.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00028.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00028.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00029.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00029.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00030.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00030.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00031.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00031.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00032.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00032.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_00033.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_00033.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00000.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00000.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00001.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00001.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00002.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00002.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00003.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00003.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00004.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00004.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00005.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00005.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00006.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00006.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00007.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00007.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00008.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00008.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00009.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00009.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00010.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00010.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00011.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00011.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00012.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00012.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00013.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00013.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00014.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00014.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00015.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00015.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00016.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00016.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00017.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00017.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00018.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00018.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00019.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00019.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00020.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00020.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00021.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00021.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00022.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00022.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00023.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_00023.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00000.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00000.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00001.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00001.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00002.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00002.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00003.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00003.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00004.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00004.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00005.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00005.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00006.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00006.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00007.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00007.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00008.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00008.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00009.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00009.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00010.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00010.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00011.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00011.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00012.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00012.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00013.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00013.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00014.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00014.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00015.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00015.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00016.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00016.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00017.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00017.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00018.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00018.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00019.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00019.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00020.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00020.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00021.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00021.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00022.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00022.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00023.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_audio_mask_soft_00023.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00000_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00000_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00001_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00001_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00002_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00002_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00003_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00003_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00004_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00004_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00005_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00005_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00006_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00006_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00007_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00007_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00008_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00008_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00009_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00009_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00010_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00010_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00011_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00011_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00012_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00012_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00013_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00013_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00014_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00014_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00015_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00015_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00016_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00016_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00017_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00017_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00018_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00018_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00019_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00019_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00020_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00020_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00021_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00021_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00022_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00022_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00023_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00023_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00024_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00024_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00025_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00025_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00026_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00026_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00027_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00027_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00028_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00028_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00029_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00029_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00030_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00030_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00031_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00031_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00032_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00032_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00033_1.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/merging_mask_soft_00033_1.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/bitmap/mix_audio_background.bmp Binary file videditor/VideoEditorUiComponents/data/bitmap/mix_audio_background.bmp has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_hslider.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_hslider.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_hslider_v1.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_hslider_v1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,188 +0,0 @@ - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_hslider_v2.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_hslider_v2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,387 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2005-12-20T11:58:47Z - 2005-12-20T11:59:00Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA -AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AivlLyn5YuPLGlTz6VaSz -SWsLySPDGzMzRgkkkEkk5utDoceXHxSu7eN7b7bz6bPwQqqvf3nzerfkv5Q8tWvmuPUbTTre3vLa -qxTQxIjASwyqwqoHUDKu0NJDEBw9b/Q5fYHamXVmXiV6a5eYl+p595LP/OpaP/zBwf8AJtcz+zD+ -6+LzvtR/jX+b+kvWPyg/47cnzX/k1NmP2ufp+P6HY+yHPJ74/dN5N5MP/OpaP/zBwf8AJtcs7OP7 -v4uv9p/8a/zf0l6x+T5/3NyfNf8Ak1NlHap+n4/odh7I88nvj903nv5W6Faar5T0/wCsalBp/o2d -rx9cgc+Ue/GrL9nj+OQ02YwxiomW/T4Mu19Djz6qXHkjiqI+rrvLzHJ6n+XelW+meZzbwX0V+jIk -hmhIKglJxxNC2/w1yrW5TOIJHDz/AEOZ2BpYYMk4xnHIPQbj/wAlNuZeJeTj/wA6po//ADBwf8m1 -zI0J9Dovab/Gv839Jetfk4f9zcvzX/k1NlXaB5fH9DsPZLnk98fum8k8n/8AKKaP/wAwcH/JtcOk -PocD2l/xr/N/SXrX5N/8duX5r/yamyvWnl8f0Ow9k+eT3x+6bz38rvLF3rnlXT/q9xBB9Xs7Xl67 -Mtece3Git/LvkMOUQjvae1uzJ6rVS4DEcMR9RrmZeR7nqf5c6FcaL5na1nmind0jlDwMWUApcLQk -hd/hyGoyCQBH45OZ2DoZ6bJOEjEk8B9Jv+f5DueJeUD/AM6rpH/MHB/ybXJ4D6XR+0n+M/5v6S9a -/Jk/7m5fmn/JqbIag8nYeynOfvj903kflE/86tpH/MHB/wAm1wYjs4HtJ/jP+b+kvW/yX/47cvzT -/k1Nkcxdh7Kc5++P3Tefflb5S1LzD5WsfqUkMf1WztfU9ZnWvqR7U4q/8hyAlQZ9p9lZNXqZcBiO -GI531Mu4Hueqflz5dvtA80tZ3jxSSyJHMDCWZeLJcL+0qGtUwSlbl9idnz0uScJkEnhO3+f5DueH -eVP+UX0j/mDg/wCTYwAui9ov8Z+H6S9b/JT/AI7c3+sn/JqfAS7D2W5z98fum8j8qn/nV9I/5g4P -+TYyEi4HtF/jPw/SXrf5J/8AHbm/1k/5NT4guf7Lc5++P3Tec/lv5X1jXfLGn/o2NZPq1na+rydU -pzj+H7R/yTkZRssO1tBm1GpPhi+EC9wOZPe9W/K7QdS0TzM9pqCCOZ1jlVVYMOJjuFG491OGIpze -wdHk085xyCj6T0/p9zxPynPNF5Z0n05GStlb14kitIx4ZVlmQdnUe0H+M/D9JeufkpLLLrszSOzs -CgqxJNPSn8cOKRN25/sxzn74/dN4/wCWP+UZ0j/mCg/5NjKNSfV8HA9oP8Z+H63rv5H/APHcn/1k -/wCTU+S0x5uf7Mc5++P3Tebfl55Y1vXfLWn/AKMgE/1eytfWq6JTnH8P2ytfsnBnxGctu5r7W0Ob -PqT4ceKgL3A533kPWPyp0HVNF8zSWupQiGd1jlVQyv8AAY7hQaoWHVTktPjMSQfL9Lm9g6XJgnOO -QcJ9J6H+f3W8a8nX19a+WdK+q3EsHOyt+fpOyVpGKV4kVpXBnJEtu51fbuWcNSeEkbdPeXrf5MXV -1c6/NJczPPIDGoeRi5AEU5pVifHJae97c72bySnKZkSfp5+6bx7yv/yjOkf8wUH/ACbGOYbut9oP -8Z+H6S9d/JD/AI7k3+sn/JqfJYBzc/2Y5z98fum808geXtY1fyxpv6OtWufQs7b1eJUcecfw/aI6 -8Tk5xstHbGjy59SfDjxUBfzL1j8ptH1LSfMclvqEBt5nEcioxBJUx3AB+EnupxhGnN9n9NkwznHI -OE+k/wC7eR+R9V1Ow8saX9Ru5rX1bO39T0XZOXGMUrxIrSpyw263t3UZMepPBKUbA5Ejqe56z+UG -oX995hlmvbiS5lX00WSVy7BRHOaVYnapOAOf7N5p5JTM5GR9PMk9J97xzyp/yi+kf8wcH/JsZOnV -e0X+M/D9Jeufkp/x25v9ZP8Ak1PgIdh7Lc5++P3TeY+QtF1XUvK+mfULWS59KztvU9MV48oxSvzo -csiNnG7c0uXLqTwRMqiOQvqXrH5S6ZqGneYZIb63e3lbg6pIKEqY5xX7wcE3O9m8E8UpiYMT6ef+ -e8p8g6xqmm+VtM+oXUlt6tnbep6bceXGMUr8qnLMcbDgdu6rLi1J4JGNxHI11L1j8ptSv9Q8wyTX -073EqhEV5DUhRHOafeTkcopzvZvUTyymZyMj6ef+e8c8oj/nVdI/5g4P+Ta5dhHpdT7Sf4z/AJv6 -S9a/Jj/jty/NP+TU2Qzjk7D2U5z98fum8v8AImmaje+VdK+pWs1z6dnb+p6MbSceUYpXiDStMtwk -CO5cXt/TZMupPBGUqiOQJ6nuesflJY3tlr8kV5byW0rcGCTIyMVMc4rRgNtshqCDVfjk53szhnjl -MTiYn08xXSbzH8t/MOsaP5V039G3HoevZ23q/Aj14R/D9tWpTkemW4MUZQ3cftntDNptUfClw8UR -ewPIy7we96r+WGs6lq/mR7nUJvXmRUjV+KJRRHOwFECjqxyvU4xEADz/AEOb7PazLqJzlkPFIcI6 -Db19zxnyf/yimj/8wcH/ACbXMrRj0Ol9pf8AGv8AN/SXrX5N/wDHbl+a/wDJqbKtcOXx/Q7D2T55 -PfH7pvLfItjeXXlTSfq0Ek/Czt+fpoz0rGKV4g+GX6OQGPc9XD9osM56r0xMvSOQvqXq/wCUlrc2 -2vSJcRPC54MFkUqaenMK0NMq15BArz/Q5/stilCUxIGJ9PPbpN5r+WvmHV9H8p6b+jp/R9eztvV+ -BHrwj+H7Yb+Y5bpMEMmP1C6P6nH7b7Rz6bVHwpcPFEXsDyMu8F6p+Wes6jq3mRrm/l9aZFSNW4qv -wiOdgKKAOrHKtdhjjAERXP8AQ5vs5rMuonOWQ8UhwDkBt6+6njfkwf8AOpaP/wAwcH/Jtczezh+7 -+Lpfaf8Axr/N/SXrH5Pj/c3J81/5NTZR2oPp+P6HYeyPPJ74/dN5R5LH/OpaP/zBwf8AJtcyuzB+ -6+Lrvaf/ABr/ADf0l6x+UH/Hbk+a/wDJqbMftcfT8f0Ox9keeT3x+6bzXyNomrS+TdEljtZGjksr -dkYCoIMS75b2dqMcMdSkAbavaHs/Pm1HFCEpR4envL1P8q9PvbTWz9ZhaLmRw5ClaRS1/XlHamaE -+HhN8/0Ob7MaPLhM/EiY2Y1fum//2Q== - - - - - - - image/svg+xml - - image/svg+xml - - - - - - - - - - - 2005-12-20T11:58:47Z - 2005-12-22T07:35:50Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AivlLyn5YuPLGlTz6VaSz -SWsLySPDGzMzRgkkkEkk5utDoceXHxSu7eN7b7bz6bPwQqqvf3nzerfkv5Q8tWvmuPUbTTre3vLa -qxTQxIjASwyqwqoHUDKu0NJDEBw9b/Q5fYHamXVmXiV6a5eYl+p595LP/OpaP/zBwf8AJtcz+zD+ -6+LzvtR/jX+b+kvWPyg/47cnzX/k1NmP2ufp+P6HY+yHPJ74/dN5N5MP/OpaP/zBwf8AJtcs7OP7 -v4uv9p/8a/zf0l6x+T5/3NyfNf8Ak1NlHap+n4/odh7I88nvj903nv5W6Faar5T0/wCsalBp/o2d -rx9cgc+Ue/GrL9nj+OQ02YwxiomW/T4Mu19Djz6qXHkjiqI+rrvLzHJ6n+XelW+meZzbwX0V+jIk -hmhIKglJxxNC2/w1yrW5TOIJHDz/AEOZ2BpYYMk4xnHIPQbj/wAlNuZeJeTj/wA6po//ADBwf8m1 -zI0J9Dovab/Gv839Jetfk4f9zcvzX/k1NlXaB5fH9DsPZLnk98fum8k8n/8AKKaP/wAwcH/JtcOk -PocD2l/xr/N/SXrX5N/8duX5r/yamyvWnl8f0Ow9k+eT3x+6bz38rvLF3rnlXT/q9xBB9Xs7Xl67 -Mtece3Git/LvkMOUQjvae1uzJ6rVS4DEcMR9RrmZeR7nqf5c6FcaL5na1nmind0jlDwMWUApcLQk -hd/hyGoyCQBH45OZ2DoZ6bJOEjEk8B9Jv+f5DueJeUD/AM6rpH/MHB/ybXJ4D6XR+0n+M/5v6S9a -/Jk/7m5fmn/JqbIag8nYeynOfvj903kflE/86tpH/MHB/wAm1wYjs4HtJ/jP+b+kvW/yX/47cvzT -/k1Nkcxdh7Kc5++P3Tefflb5S1LzD5WsfqUkMf1WztfU9ZnWvqR7U4q/8hyAlQZ9p9lZNXqZcBiO -GI531Mu4Hueqflz5dvtA80tZ3jxSSyJHMDCWZeLJcL+0qGtUwSlbl9idnz0uScJkEnhO3+f5DueH -eVP+UX0j/mDg/wCTYwAui9ov8Z+H6S9b/JT/AI7c3+sn/JqfAS7D2W5z98fum8j8qn/nV9I/5g4P -+TYyEi4HtF/jPw/SXrf5J/8AHbm/1k/5NT4guf7Lc5++P3Tec/lv5X1jXfLGn/o2NZPq1na+rydU -pzj+H7R/yTkZRssO1tBm1GpPhi+EC9wOZPe9W/K7QdS0TzM9pqCCOZ1jlVVYMOJjuFG491OGIpze -wdHk085xyCj6T0/p9zxPynPNF5Z0n05GStlb14kitIx4ZVlmQdnUe0H+M/D9JeufkpLLLrszSOzs -CgqxJNPSn8cOKRN25/sxzn74/dN4/wCWP+UZ0j/mCg/5NjKNSfV8HA9oP8Z+H63rv5H/APHcn/1k -/wCTU+S0x5uf7Mc5++P3Tebfl55Y1vXfLWn/AKMgE/1eytfWq6JTnH8P2ytfsnBnxGctu5r7W0Ob -PqT4ceKgL3A533kPWPyp0HVNF8zSWupQiGd1jlVQyv8AAY7hQaoWHVTktPjMSQfL9Lm9g6XJgnOO -QcJ9J6H+f3W8a8nX19a+WdK+q3EsHOyt+fpOyVpGKV4kVpXBnJEtu51fbuWcNSeEkbdPeXrf5MXV -1c6/NJczPPIDGoeRi5AEU5pVifHJae97c72bySnKZkSfp5+6bx7yv/yjOkf8wUH/ACbGOYbut9oP -8Z+H6S9d/JD/AI7k3+sn/JqfJYBzc/2Y5z98fum808geXtY1fyxpv6OtWufQs7b1eJUcecfw/aI6 -8Tk5xstHbGjy59SfDjxUBfzL1j8ptH1LSfMclvqEBt5nEcioxBJUx3AB+EnupxhGnN9n9NkwznHI -OE+k/wC7eR+R9V1Ow8saX9Ru5rX1bO39T0XZOXGMUrxIrSpyw263t3UZMepPBKUbA5Ejqe56z+UG -oX995hlmvbiS5lX00WSVy7BRHOaVYnapOAOf7N5p5JTM5GR9PMk9J97xzyp/yi+kf8wcH/JsZOnV -e0X+M/D9Jeufkp/x25v9ZP8Ak1PgIdh7Lc5++P3TeY+QtF1XUvK+mfULWS59KztvU9MV48oxSvzo -csiNnG7c0uXLqTwRMqiOQvqXrH5S6ZqGneYZIb63e3lbg6pIKEqY5xX7wcE3O9m8E8UpiYMT6ef+ -e8p8g6xqmm+VtM+oXUlt6tnbep6bceXGMUr8qnLMcbDgdu6rLi1J4JGNxHI11L1j8ptSv9Q8wyTX -073EqhEV5DUhRHOafeTkcopzvZvUTyymZyMj6ef+e8c8oj/nVdI/5g4P+Ta5dhHpdT7Sf4z/AJv6 -S9a/Jj/jty/NP+TU2Qzjk7D2U5z98fum8v8AImmaje+VdK+pWs1z6dnb+p6MbSceUYpXiDStMtwk -CO5cXt/TZMupPBGUqiOQJ6nuesflJY3tlr8kV5byW0rcGCTIyMVMc4rRgNtshqCDVfjk53szhnjl -MTiYn08xXSbzH8t/MOsaP5V039G3HoevZ23q/Aj14R/D9tWpTkemW4MUZQ3cftntDNptUfClw8UR -ewPIy7we96r+WGs6lq/mR7nUJvXmRUjV+KJRRHOwFECjqxyvU4xEADz/AEOb7PazLqJzlkPFIcI6 -Db19zxnyf/yimj/8wcH/ACbXMrRj0Ol9pf8AGv8AN/SXrX5N/wDHbl+a/wDJqbKtcOXx/Q7D2T55 -PfH7pvLfItjeXXlTSfq0Ek/Czt+fpoz0rGKV4g+GX6OQGPc9XD9osM56r0xMvSOQvqXq/wCUlrc2 -2vSJcRPC54MFkUqaenMK0NMq15BArz/Q5/stilCUxIGJ9PPbpN5r+WvmHV9H8p6b+jp/R9eztvV+ -BHrwj+H7Yb+Y5bpMEMmP1C6P6nH7b7Rz6bVHwpcPFEXsDyMu8F6p+Wes6jq3mRrm/l9aZFSNW4qv -wiOdgKKAOrHKtdhjjAERXP8AQ5vs5rMuonOWQ8UhwDkBt6+6njfkwf8AOpaP/wAwcH/Jtczezh+7 -+Lpfaf8Axr/N/SXrH5Pj/c3J81/5NTZR2oPp+P6HYeyPPJ74/dN5R5LH/OpaP/zBwf8AJtcyuzB+ -6+Lrvaf/ABr/ADf0l6x+UH/Hbk+a/wDJqbMftcfT8f0Ox9keeT3x+6bzXyNomrS+TdEljtZGjksr -dkYCoIMS75b2dqMcMdSkAbavaHs/Pm1HFCEpR4envL1P8q9PvbTWz9ZhaLmRw5ClaRS1/XlHamaE -+HhN8/0Ob7MaPLhM/EiY2Y1fum//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_hslider_v3.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_hslider_v3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,360 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2005-12-20T11:59:27Z - 2005-12-20T11:59:39Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA -AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AgmgaF5fPl/SpJNJs5ZZb -OGSSSSBGZmZASSSN8uhAENU5kF63+RHlry8nmwajBpttbXlp8MMsESRkCaGYOCVHcLgyQATCRLzP -y+tfLejf8wNv/wAQGWYuTDJzev8A5FCmtXHzj/5NT5HMnE8k8uLXy1o3/MDb/wDEBksXJjk5vXfy -NFNbuPnH/wAmp8jmZYmBfll5Ztdb8saf6+pw6d9XsbTj61Pj5xmvGrJ9nj+OCEqCyjZeq/lrocGj -eaZLaG+i1BXSKQzQ04glLheOzNv8NfpwZJWGUBTxHysK+V9G/wCYKD/k2MsxcmvJzet/koKa3N80 -/wCTU2RzMsTyjymtfKujf8wUH/JsZLFyY5eb1r8lxTW5vmn/ACamyOZliYF+Vvla413ypp/o3ENv -9XsrXl6xIrzj2pQHpxwQnQWcbL1P8u9Am0TzO1rNNHOzpHKHiJKgFJ1puBv8ODJKwmEaeLeTVr5S -0b/mCg/5NjLMXJhl5vWPyeFNbk+a/wDJqbI5mWLq8r8lLXyjo/8AzBwf8m1yWLkxy83q/wCUQprU -nzX/AJNy5HMnEwL8qPLF/rnlDTvqkkSfV7O15+qWFece1OKt/LjCYiEzgSXqPkLQrvRfMv1W6eN5 -HRJQYixFCk6/tBd/hyOSVhOONF435DWvk7R/+YOD/k2uWYuTXl5vVvypFNab5j/k3LkczLC8t8gL -Xybo/wDzCQf8mlyWLkxy83qv5WimtN8x/wAm5cjmZYerz78p9Bv9W8l6Z9UCn0bS258m4/aiFP8A -iOMJgDdZwJOz1DyLpF3pfmIQXQUSOokHE8hxKSj+GDJIEbMscSHk35bSzR+StI9KRkraQV4kitIl -8Mni5NeU7vUvy4klfXOUjs7dKsSTT05PHI5mWEvLfy3WvkjR/wDmFg/5NLksXJjl5vUvy3FNa/z/ -AN9yZHMyw9Xnv5R6Pfaj5H0v6qgf0rW351YLTlEtOvyxhIAboyRJOz0/yXpt1p/mBIblQkjLzABB -2KSDt8sGSQPJliiRzeV/lXPcReRtJ9GV4+VrBy4MVrSJetMniAprykgvUPIks0uuK0sjSMNgzEsa -cJNt8jmHJnhPN5V+WTU8jaP/AMwsP/JpMni5MM3N6j+XprrS/wCf+65Mhm6MsHV5p+U+m3995I0r -6pCZfTtbfnQgU5RLTqR4YccgBuuSJJ2eoeRrG7s9fWK6jMUhHMKSD8JSQV2J8MjlIPJliiRzeUfl -fqN7Z+SdJ+rTvDztLfnwJFaRLSv35LHEEMchIOz1H8v726u9eElzK0zgBQzmppwlNPxwZRScRJ5v -Ivy9ankvR/8AmEg/5NLksXJjl5vVPyxNdaPzH/JuTI5mWF5l+WWmajfeTdK+pwNP6dpb+px7cohT -9WHHIAboyRJOz1L8urG9svMHo3cTQyMA4VuvEpKK/hkcpBZYhTyn8tdX1HT/ACdpX1O4aD1bO39T -j34xin68ljiCN2OSRB2ep/ltqN7f+YDNdzNNIoVAzdQojmNPxyOUAMsRt475HanlDR/+YOD/AJNr -k8XJhl5vVvykNdbf5r/yblyOZlheW+QLDULzyjpP1O1mufTs7f1PRjaTjyjFK8QaVphxkAIyAkvV -fyrs7y0194ruCS3kPFgkqMjFTHMK0YDbbI5TbLEHl35ceYtX0fynpn6OuPQ9eytvV+BHrwj+H7at -/McOOII3RORB2eqfljrWo6t5je4v5vWmRUjVuKpRQk5AogUdWODJEDkyxknm8W8pNTyro3/MFB/y -bGTxcmGXm9Z/Jg11ub5p/wAmpsjmZYnlPkyyvrrytpH1W3luOFlb8/SRnpWMUrxBpWmHGdkZBu9Z -/J21u7bXpo7mGSCQ8GCSKUJBjnFaMBttkcpTiDzD8vPNOsaF5Y039GyrF9YsbX1eSK9eEfw/aB/m -OGEQRus5EF6t+Vev6lrfmaW61CQSTIscSsqqnwhLhgKKB3Y5HJEBOORLw/y41PLOjf8AMDb/APEB -k8XJhk5vXfyMaut3Hzj/AOTU+DMyxPHtBanlvRv+YG3/AOIDDi5Iyc3rv5Dmut3Pzj/5NT4MycTz -Pyz5Y1+68raJPb2MkkL2FuVcAUIKD3xxyACziSXq35LaNqmm63L9etnt/VZPT5034xTVp8qjI5JA -ssYIf//Z - - - - - - - image/svg+xml - - image/svg+xml - - - - - - - - - - - 2005-12-20T11:59:27Z - 2005-12-22T07:36:04Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AgmgaF5fPl/SpJNJs5ZZb -OGSSSSBGZmZASSSN8uhAENU5kF63+RHlry8nmwajBpttbXlp8MMsESRkCaGYOCVHcLgyQATCRLzP -y+tfLejf8wNv/wAQGWYuTDJzev8A5FCmtXHzj/5NT5HMnE8k8uLXy1o3/MDb/wDEBksXJjk5vXfy -NFNbuPnH/wAmp8jmZYmBfll5Ztdb8saf6+pw6d9XsbTj61Pj5xmvGrJ9nj+OCEqCyjZeq/lrocGj -eaZLaG+i1BXSKQzQ04glLheOzNv8NfpwZJWGUBTxHysK+V9G/wCYKD/k2MsxcmvJzet/koKa3N80 -/wCTU2RzMsTyjymtfKujf8wUH/JsZLFyY5eb1r8lxTW5vmn/ACamyOZliYF+Vvla413ypp/o3ENv -9XsrXl6xIrzj2pQHpxwQnQWcbL1P8u9Am0TzO1rNNHOzpHKHiJKgFJ1puBv8ODJKwmEaeLeTVr5S -0b/mCg/5NjLMXJhl5vWPyeFNbk+a/wDJqbI5mWLq8r8lLXyjo/8AzBwf8m1yWLkxy83q/wCUQprU -nzX/AJNy5HMnEwL8qPLF/rnlDTvqkkSfV7O15+qWFece1OKt/LjCYiEzgSXqPkLQrvRfMv1W6eN5 -HRJQYixFCk6/tBd/hyOSVhOONF435DWvk7R/+YOD/k2uWYuTXl5vVvypFNab5j/k3LkczLC8t8gL -Xybo/wDzCQf8mlyWLkxy83qv5WimtN8x/wAm5cjmZYerz78p9Bv9W8l6Z9UCn0bS258m4/aiFP8A -iOMJgDdZwJOz1DyLpF3pfmIQXQUSOokHE8hxKSj+GDJIEbMscSHk35bSzR+StI9KRkraQV4kitIl -8Mni5NeU7vUvy4klfXOUjs7dKsSTT05PHI5mWEvLfy3WvkjR/wDmFg/5NLksXJjl5vUvy3FNa/z/ -AN9yZHMyw9Xnv5R6Pfaj5H0v6qgf0rW351YLTlEtOvyxhIAboyRJOz0/yXpt1p/mBIblQkjLzABB -2KSDt8sGSQPJliiRzeV/lXPcReRtJ9GV4+VrBy4MVrSJetMniAprykgvUPIks0uuK0sjSMNgzEsa -cJNt8jmHJnhPN5V+WTU8jaP/AMwsP/JpMni5MM3N6j+XprrS/wCf+65Mhm6MsHV5p+U+m3995I0r -6pCZfTtbfnQgU5RLTqR4YccgBuuSJJ2eoeRrG7s9fWK6jMUhHMKSD8JSQV2J8MjlIPJliiRzeUfl -fqN7Z+SdJ+rTvDztLfnwJFaRLSv35LHEEMchIOz1H8v726u9eElzK0zgBQzmppwlNPxwZRScRJ5v -Ivy9ankvR/8AmEg/5NLksXJjl5vVPyxNdaPzH/JuTI5mWF5l+WWmajfeTdK+pwNP6dpb+px7cohT -9WHHIAboyRJOz1L8urG9svMHo3cTQyMA4VuvEpKK/hkcpBZYhTyn8tdX1HT/ACdpX1O4aD1bO39T -j34xin68ljiCN2OSRB2ep/ltqN7f+YDNdzNNIoVAzdQojmNPxyOUAMsRt475HanlDR/+YOD/AJNr -k8XJhl5vVvykNdbf5r/yblyOZlheW+QLDULzyjpP1O1mufTs7f1PRjaTjyjFK8QaVphxkAIyAkvV -fyrs7y0194ruCS3kPFgkqMjFTHMK0YDbbI5TbLEHl35ceYtX0fynpn6OuPQ9eytvV+BHrwj+H7at -/McOOII3RORB2eqfljrWo6t5je4v5vWmRUjVuKpRQk5AogUdWODJEDkyxknm8W8pNTyro3/MFB/y -bGTxcmGXm9Z/Jg11ub5p/wAmpsjmZYnlPkyyvrrytpH1W3luOFlb8/SRnpWMUrxBpWmHGdkZBu9Z -/J21u7bXpo7mGSCQ8GCSKUJBjnFaMBttkcpTiDzD8vPNOsaF5Y039GyrF9YsbX1eSK9eEfw/aB/m -OGEQRus5EF6t+Vev6lrfmaW61CQSTIscSsqqnwhLhgKKB3Y5HJEBOORLw/y41PLOjf8AMDb/APEB -k8XJhk5vXfyMaut3Hzj/AOTU+DMyxPHtBanlvRv+YG3/AOIDDi5Iyc3rv5Dmut3Pzj/5NT4MycTz -Pyz5Y1+68raJPb2MkkL2FuVcAUIKD3xxyACziSXq35LaNqmm63L9etnt/VZPT5034xTVp8qjI5JA -ssYIf//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_hslider_v4.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_hslider_v4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,252 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - 2005-12-20T12:00:19Z - 2005-12-20T12:00:25Z - Illustrator - - - - JPEG - 4 - 256 - /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA -AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAEAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AhOZTjOxV2KsV/Rv5gf8A -V2t/+Ra/9UshUu9nce5lWTYOxViX/IRv+Xb/AITK/Uz9LLcsYOxViP6Z8+/9WiL7/wDr5ldy7mdR -72XZYwdirEf8V+Zv+pfl/wCH/wCaMr4j3M+Ed7LssYOxViX+P/8AtVXP+f0ZXx+TPg82W5YwdirE -/wDlZOhf74uv+Aj/AOqmV+IGfhllmWMHYqx7/Hvlr/lof/kW/wDTIeIGXAU1/Q2j/wDLDb/8ik/p -kqCLKMwoSj/Fnlz/AJb4/wAf6ZHiCeEqn+GvL/8A1b4P+AGHhC8RTPChAfp7Qv8Aq42v/I6P/mrB -xBPCUD/gfyv/AMsX/JWb/mvBwBPGU9yTF2KuxV//2Q== - - - - - - - image/svg+xml - - image/svg+xml - - - - - - - - - - - 2005-12-20T12:00:19Z - 2005-12-22T07:36:17Z - Illustrator - - - - JPEG - 4 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAEAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AhOZTjOxV2KsV/Rv5gf8A -V2t/+Ra/9UshUu9nce5lWTYOxViX/IRv+Xb/AITK/Uz9LLcsYOxViP6Z8+/9WiL7/wDr5ldy7mdR -72XZYwdirEf8V+Zv+pfl/wCH/wCaMr4j3M+Ed7LssYOxViX+P/8AtVXP+f0ZXx+TPg82W5YwdirE -/wDlZOhf74uv+Aj/AOqmV+IGfhllmWMHYqx7/Hvlr/lof/kW/wDTIeIGXAU1/Q2j/wDLDb/8ik/p -kqCLKMwoSj/Fnlz/AJb4/wAf6ZHiCeEqn+GvL/8A1b4P+AGHhC8RTPChAfp7Qv8Aq42v/I6P/mrB -xBPCUD/gfyv/AMsX/JWb/mvBwBPGU9yTF2KuxV//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_htab.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_htab.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ - - - - -]> - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vslider.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vslider.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,179 +0,0 @@ - - - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - 2005-12-20T11:58:06Z - 2005-12-20T11:58:14Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA -AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A5vpun6JDomkk6RYzPNZQ -SyyywI7s7LuS3fNRrNZPHOg+h+zns3ptZpvEycXFxVtXcPJ69/zj3omhSea21GPTLW1vLKiwS28S -xkCaGYOCR7Llmg1U8pPF0r9Lge1HYuDQiHhX6hLn5GHkO8vKrJK6Hoh/7V1v/wARzX9pn978HrPY -w/4F/nn7ovZP+cd1prV784v+TVxl3ZB3l8P986j27O2L3T+/G8j0uPloGiH/ALV9v/xDMTtY/vfh -+t2XsfL/AAL/ADj90XsP/OPq8dau/nF/yanzI7FO8vh/vnU+3JsYvdP78bB/y48p2mv+XNPNxqsO -mfVrCz4+vT95zRq8aun2eP4463TDLmNyEaA5/Fp7G7VnpNHHhxyy8UpfT0oR8jzt6t+V3l630LzV -NaQX8WopJHDKZ4acQStyvDZn3+GvXvl3ZuAYpyAkJfTy/wA5wfaPXy1WKE5QljrjFS/5J78g8R8u -R8vLOin/AJcLf/iAzU9tH9/8P0l3/spL/BP879AeufkanHWrj3Mf/JubMrsA7z/zf98632yNjH7p -/fB5X5Vj5eVtFP8Ay4wf8mxmB26f3/8Am/pLm+y8v8F/zv0B63+Sycdan9yn/JubMz2dO8/83/fO -u9rzYx+6X3wYN+VnlW413ylpphuIoPq9la8vVJFecfagPTjj2joJajUGpCPDEc/My/U09ldqR0ul -jcZS4pHl5CP63qX5e6BNonmZrWWaOZpI0lDxEkUKzrTcDf4cyeyNIdPOcSQfpO3+e4fbuvGqxwmA -Y1xjf/km8c8jpy8n6Mf+XOD/AJNrmj9oT/hH+b+ku59nT/g3+d+gPVvymTjrT/7H/k3Lmb7MHef+ -b/vnA9qTYh7pffB5j5ATl5M0Y/8ALnB/ybXNd7SH/Cf839Jcr2fP+D/536A9V/K5OOtN9H/JuTM7 -2VO+T/N+6bg+0psQ90vviwT8ofL13q/knTDbvGno2lty9QsK8ohSlA38uHtTsrLq9SeAxHDGPO+p -l3A9zT2f2lDTYBxAniJ5eQj5h6d5M0e40rzEsE7IzugkBjJIoUlHcL4Zldh6CelyThMgkiB2/wA/ -yHc43a2thqIRlEGhxDf/ADHk/wCWScvI2jn/AJdYP+TS5z3tQf8ACv8AN/SXZ9in9x8f0B6j+Xqc -dZH+f+63zYeyB3yf5v3TcPt82If53+9ebflXHy8h6Of+XWH/AJNJmr9qj/hX+aPvLd2PL9z8f1PT -/IqcdZT3r/xB82Pscd8nvh903F7cN8Px/wB6wH8mNMuL3yBpRhp+7toOXI06wr/TI9t9lZtXqz4V -emMbs1zMv1MNDq4YcQ4upP6HpflmwmstehjlpyZSwoa7cHH8MzfZvs/LpcmSGSuI8B232/eD9DR2 -lqY5YxMeW/8AvXmn5NmQfl7pBRitbeGtCR/ulM5/2rzThq/SSPQOR85OT2cAcW/f+p6Z5X5nWoSz -FjRtya/sNmy9jMspyymRJPo5+6bR2rVRrz/Q85/JdK/l1pB/5d4f+TMeab2xP+GD+oPvk2dnn938 -XpXl1OOs2/yf/iBzZ+wx3y++H3TaO0zfD8f0MA/Iy2eb8t9JKitIIa/8iI8r9ouydRrNafBjxcMI -3uBzM65+5hps8YQ373pGkQPFrVqGFCRIf+EOZ/sp2dm0mTJDKKkeA8wdv3g6e5q1mUTAI8/0PPPy -J5f8q00ihI/cw9P+MEeaD2v1WXFrfRKUbgORI/il3M9NRhuHo+mV/TNoSamknX/UzZ+w+oyZZZTO -RkfRzN9Mne16utq8/wBDzb8jHp+WukD/AIoi/wCTEeab20H+Gj+oPvkwwzqL0bSWrrNr8pP+IHNr -7BDfL74fdkYZ5XTzb8jY5ZPy30kRrypBDX6YI8h7S9l6jVaw+DHi4YRvl1Mq5+5oEqej6Okia1bL -IOJo5p7cDmx9kdBm0s8sMseGR4D8P3nd7lMreX/kpcSxfl1pARytbeGtDT/dKZrPajWZsGs/dTlC -4C6NXvJxcuSi9K8vzPLrVuXYsQHFTv8AsNmy9j9TlzTySySM5egWTf8AqjLDPit5X+Tz8fy90cf8 -u8P/ACZTNP7XD/DP8wffJwdZkqfwemeVH5azD/sv+INmz9iRvl98Pum2aGd38P0vMfydtrq48gaS -LeMycLaDlTtWFafqyv2i0GbUas+HEyqIuvfJxNdjnPL6RdD9b0zypBcQa7FHOhjehYA+BRxX8M2H -sro8uCeSOSJjL0Hf/ko29mwlEyEhR2/3zyb8qNWurHyLpK28pi52sBanekS0zF7f1ebDqj4cjG4i -68jJ0/bPaE8GeomriPvL07yNqM99rqyTyGV1HEMfDhIaZnezOoy5p5JZCZH0Df8Az3J7A1stRKZk -eIjh/wB88Z8hf8oZov8AzBwf8m1zX+0f+M/5v6S8v7X/AONj+oPvk9U/Kz/jtP8AR/ybkzP9luc/ -fH7puw9iv8r/AJn+/eY/lxY3135M0j6rbyz8LO35+kjPSsYpXiDStMxu3tPkyan0RlKojkCepcX2 -o0uXNq/3cJTqAvhBPWXc9T/LW0urXXTHcwvBIQGCSKUJHCUVowHhmd7N4Z45TE4mJ9PMV/Pdh7Ia -fJilkjkjKJ9HMEfz+95n+Vut6npnkzS/qM3o+rZ2/qfCjV4xCn2g38xzH7Z1+bT6k+HLh4oi9geR -l3hxfaDtTUaXVnwZcPFCN7A8jKuYPe9R/L/VL7UvMPr3svqyqqorcVX4QkppRQB1JzM7A1eTPOcs -h4j6R0H8/uc/2X1+bUzyTynikOAcgNv3ndXe8g/L/wD5QzR/+YSD/k0uaj2k/wAZ/wA39JdD7W/4 -3/mj75PVfyu/47R+Y/5Ny5ney3PJ/m/dN2XsXzye+H3TeXflva3Vx5M0n0IXl42kHLgpalYlpWmY -vtBhnPU+mJl6RyF9S4PtPgyZNX6ImVRHIX1k9U/LS3ng13hNG0TGhCupU09OXehzN9mcUoGYkDE+ -nnt/Pdj7H4p45ZBMGJ9HMV0m80/KvWtT0zybpv1Gb0fVtbf1PhRq8YhT7Qb+Y5X2z2hm0+pPhmuK -IvYHkZd7j9vdqZ9LrJeDLh4oi9geRlXMHvepeQNUvtR8wie9l9WVQEVuKr8IjmNKKFHUnMvsDWZN -ROcshs+kf7vuc/2Y1+bU5Mk8p4pDgHIDb953V3vH/wAvP+UN0n/mFg/5NJmn9pf8ZH9X9Jef9q/8 -cP8AV/SXqv5X/wDHb+kf8mpczvZXnk/zf987X2L55PfD7sjyn8uv+UN0r/mGg/5MpmD7S/4yP6v6 -S6n2q/xw+79Jerflh/x2/pH/ACalzO9leeT/ADf987X2L55PfD7sjzL8u9N1EeS9Hf6tKUltIHjZ -UZgVMS0NQDg7d7Pz5s4ljiZDh/SXE9pNBqMuqMoY5yjXMRJ6l6j+WtvcQ62vrRPFyPw81K1pFL0q -BmX7PaLLgM/Ejw3w1/snZ+yeky4TPxIShZjVgjpPvf/Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-12-20T11:58:06Z - 2005-12-22T07:35:37Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A5vpun6JDomkk6RYzPNZQ SyyywI7s7LuS3fNRrNZPHOg+h+zns3ptZpvEycXFxVtXcPJ69/zj3omhSea21GPTLW1vLKiwS28S xkCaGYOCR7Llmg1U8pPF0r9Lge1HYuDQiHhX6hLn5GHkO8vKrJK6Hoh/7V1v/wARzX9pn978HrPY w/4F/nn7ovZP+cd1prV784v+TVxl3ZB3l8P986j27O2L3T+/G8j0uPloGiH/ALV9v/xDMTtY/vfh +t2XsfL/AAL/ADj90XsP/OPq8dau/nF/yanzI7FO8vh/vnU+3JsYvdP78bB/y48p2mv+XNPNxqsO mfVrCz4+vT95zRq8aun2eP4463TDLmNyEaA5/Fp7G7VnpNHHhxyy8UpfT0oR8jzt6t+V3l630LzV NaQX8WopJHDKZ4acQStyvDZn3+GvXvl3ZuAYpyAkJfTy/wA5wfaPXy1WKE5QljrjFS/5J78g8R8u R8vLOin/AJcLf/iAzU9tH9/8P0l3/spL/BP879AeufkanHWrj3Mf/JubMrsA7z/zf98632yNjH7p /fB5X5Vj5eVtFP8Ay4wf8mxmB26f3/8Am/pLm+y8v8F/zv0B63+Sycdan9yn/JubMz2dO8/83/fO u9rzYx+6X3wYN+VnlW413ylpphuIoPq9la8vVJFecfagPTjj2joJajUGpCPDEc/My/U09ldqR0ul jcZS4pHl5CP63qX5e6BNonmZrWWaOZpI0lDxEkUKzrTcDf4cyeyNIdPOcSQfpO3+e4fbuvGqxwmA Y1xjf/km8c8jpy8n6Mf+XOD/AJNrmj9oT/hH+b+ku59nT/g3+d+gPVvymTjrT/7H/k3Lmb7MHef+ b/vnA9qTYh7pffB5j5ATl5M0Y/8ALnB/ybXNd7SH/Cf839Jcr2fP+D/536A9V/K5OOtN9H/JuTM7 2VO+T/N+6bg+0psQ90vviwT8ofL13q/knTDbvGno2lty9QsK8ohSlA38uHtTsrLq9SeAxHDGPO+p l3A9zT2f2lDTYBxAniJ5eQj5h6d5M0e40rzEsE7IzugkBjJIoUlHcL4Zldh6CelyThMgkiB2/wA/ yHc43a2thqIRlEGhxDf/ADHk/wCWScvI2jn/AJdYP+TS5z3tQf8ACv8AN/SXZ9in9x8f0B6j+Xqc dZH+f+63zYeyB3yf5v3TcPt82If53+9ebflXHy8h6Of+XWH/AJNJmr9qj/hX+aPvLd2PL9z8f1PT /IqcdZT3r/xB82Pscd8nvh903F7cN8Px/wB6wH8mNMuL3yBpRhp+7toOXI06wr/TI9t9lZtXqz4V emMbs1zMv1MNDq4YcQ4upP6HpflmwmstehjlpyZSwoa7cHH8MzfZvs/LpcmSGSuI8B232/eD9DR2 lqY5YxMeW/8AvXmn5NmQfl7pBRitbeGtCR/ulM5/2rzThq/SSPQOR85OT2cAcW/f+p6Z5X5nWoSz FjRtya/sNmy9jMspyymRJPo5+6bR2rVRrz/Q85/JdK/l1pB/5d4f+TMeab2xP+GD+oPvk2dnn938 XpXl1OOs2/yf/iBzZ+wx3y++H3TaO0zfD8f0MA/Iy2eb8t9JKitIIa/8iI8r9ouydRrNafBjxcMI 3uBzM65+5hps8YQ373pGkQPFrVqGFCRIf+EOZ/sp2dm0mTJDKKkeA8wdv3g6e5q1mUTAI8/0PPPy J5f8q00ihI/cw9P+MEeaD2v1WXFrfRKUbgORI/il3M9NRhuHo+mV/TNoSamknX/UzZ+w+oyZZZTO RkfRzN9Mne16utq8/wBDzb8jHp+WukD/AIoi/wCTEeab20H+Gj+oPvkwwzqL0bSWrrNr8pP+IHNr 7BDfL74fdkYZ5XTzb8jY5ZPy30kRrypBDX6YI8h7S9l6jVaw+DHi4YRvl1Mq5+5oEqej6Okia1bL IOJo5p7cDmx9kdBm0s8sMseGR4D8P3nd7lMreX/kpcSxfl1pARytbeGtDT/dKZrPajWZsGs/dTlC 4C6NXvJxcuSi9K8vzPLrVuXYsQHFTv8AsNmy9j9TlzTySySM5egWTf8AqjLDPit5X+Tz8fy90cf8 u8P/ACZTNP7XD/DP8wffJwdZkqfwemeVH5azD/sv+INmz9iRvl98Pum2aGd38P0vMfydtrq48gaS LeMycLaDlTtWFafqyv2i0GbUas+HEyqIuvfJxNdjnPL6RdD9b0zypBcQa7FHOhjehYA+BRxX8M2H sro8uCeSOSJjL0Hf/ko29mwlEyEhR2/3zyb8qNWurHyLpK28pi52sBanekS0zF7f1ebDqj4cjG4i 68jJ0/bPaE8GeomriPvL07yNqM99rqyTyGV1HEMfDhIaZnezOoy5p5JZCZH0Df8Az3J7A1stRKZk eIjh/wB88Z8hf8oZov8AzBwf8m1zX+0f+M/5v6S8v7X/AONj+oPvk9U/Kz/jtP8AR/ybkzP9luc/ fH7puw9iv8r/AJn+/eY/lxY3135M0j6rbyz8LO35+kjPSsYpXiDStMxu3tPkyan0RlKojkCepcX2 o0uXNq/3cJTqAvhBPWXc9T/LW0urXXTHcwvBIQGCSKUJHCUVowHhmd7N4Z45TE4mJ9PMV/Pdh7Ia fJilkjkjKJ9HMEfz+95n+Vut6npnkzS/qM3o+rZ2/qfCjV4xCn2g38xzH7Z1+bT6k+HLh4oi9geR l3hxfaDtTUaXVnwZcPFCN7A8jKuYPe9R/L/VL7UvMPr3svqyqqorcVX4QkppRQB1JzM7A1eTPOcs h4j6R0H8/uc/2X1+bUzyTynikOAcgNv3ndXe8g/L/wD5QzR/+YSD/k0uaj2k/wAZ/wA39JdD7W/4 3/mj75PVfyu/47R+Y/5Ny5ney3PJ/m/dN2XsXzye+H3TeXflva3Vx5M0n0IXl42kHLgpalYlpWmY vtBhnPU+mJl6RyF9S4PtPgyZNX6ImVRHIX1k9U/LS3ng13hNG0TGhCupU09OXehzN9mcUoGYkDE+ nnt/Pdj7H4p45ZBMGJ9HMV0m80/KvWtT0zybpv1Gb0fVtbf1PhRq8YhT7Qb+Y5X2z2hm0+pPhmuK IvYHkZd7j9vdqZ9LrJeDLh4oi9geRlXMHvepeQNUvtR8wie9l9WVQEVuKr8IjmNKKFHUnMvsDWZN ROcshs+kf7vuc/2Y1+bU5Mk8p4pDgHIDb953V3vH/wAvP+UN0n/mFg/5NJmn9pf8ZH9X9Jef9q/8 cP8AV/SXqv5X/wDHb+kf8mpczvZXnk/zf987X2L55PfD7sjyn8uv+UN0r/mGg/5MpmD7S/4yP6v6 S6n2q/xw+79Jerflh/x2/pH/ACalzO9leeT/ADf987X2L55PfD7sjzL8u9N1EeS9Hf6tKUltIHjZ UZgVMS0NQDg7d7Pz5s4ljiZDh/SXE9pNBqMuqMoY5yjXMRJ6l6j+WtvcQ62vrRPFyPw81K1pFL0q BmX7PaLLgM/Ejw3w1/snZ+yeky4TPxIShZjVgjpPvf/Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vslider_v1.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vslider_v1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,179 +0,0 @@ - - - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - 2005-12-20T11:58:06Z - 2005-12-20T11:58:14Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA -AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A5vpun6JDomkk6RYzPNZQ -SyyywI7s7LuS3fNRrNZPHOg+h+zns3ptZpvEycXFxVtXcPJ69/zj3omhSea21GPTLW1vLKiwS28S -xkCaGYOCR7Llmg1U8pPF0r9Lge1HYuDQiHhX6hLn5GHkO8vKrJK6Hoh/7V1v/wARzX9pn978HrPY -w/4F/nn7ovZP+cd1prV784v+TVxl3ZB3l8P986j27O2L3T+/G8j0uPloGiH/ALV9v/xDMTtY/vfh -+t2XsfL/AAL/ADj90XsP/OPq8dau/nF/yanzI7FO8vh/vnU+3JsYvdP78bB/y48p2mv+XNPNxqsO -mfVrCz4+vT95zRq8aun2eP4463TDLmNyEaA5/Fp7G7VnpNHHhxyy8UpfT0oR8jzt6t+V3l630LzV -NaQX8WopJHDKZ4acQStyvDZn3+GvXvl3ZuAYpyAkJfTy/wA5wfaPXy1WKE5QljrjFS/5J78g8R8u -R8vLOin/AJcLf/iAzU9tH9/8P0l3/spL/BP879AeufkanHWrj3Mf/JubMrsA7z/zf98632yNjH7p -/fB5X5Vj5eVtFP8Ay4wf8mxmB26f3/8Am/pLm+y8v8F/zv0B63+Sycdan9yn/JubMz2dO8/83/fO -u9rzYx+6X3wYN+VnlW413ylpphuIoPq9la8vVJFecfagPTjj2joJajUGpCPDEc/My/U09ldqR0ul -jcZS4pHl5CP63qX5e6BNonmZrWWaOZpI0lDxEkUKzrTcDf4cyeyNIdPOcSQfpO3+e4fbuvGqxwmA -Y1xjf/km8c8jpy8n6Mf+XOD/AJNrmj9oT/hH+b+ku59nT/g3+d+gPVvymTjrT/7H/k3Lmb7MHef+ -b/vnA9qTYh7pffB5j5ATl5M0Y/8ALnB/ybXNd7SH/Cf839Jcr2fP+D/536A9V/K5OOtN9H/JuTM7 -2VO+T/N+6bg+0psQ90vviwT8ofL13q/knTDbvGno2lty9QsK8ohSlA38uHtTsrLq9SeAxHDGPO+p -l3A9zT2f2lDTYBxAniJ5eQj5h6d5M0e40rzEsE7IzugkBjJIoUlHcL4Zldh6CelyThMgkiB2/wA/ -yHc43a2thqIRlEGhxDf/ADHk/wCWScvI2jn/AJdYP+TS5z3tQf8ACv8AN/SXZ9in9x8f0B6j+Xqc -dZH+f+63zYeyB3yf5v3TcPt82If53+9ebflXHy8h6Of+XWH/AJNJmr9qj/hX+aPvLd2PL9z8f1PT -/IqcdZT3r/xB82Pscd8nvh903F7cN8Px/wB6wH8mNMuL3yBpRhp+7toOXI06wr/TI9t9lZtXqz4V -emMbs1zMv1MNDq4YcQ4upP6HpflmwmstehjlpyZSwoa7cHH8MzfZvs/LpcmSGSuI8B232/eD9DR2 -lqY5YxMeW/8AvXmn5NmQfl7pBRitbeGtCR/ulM5/2rzThq/SSPQOR85OT2cAcW/f+p6Z5X5nWoSz -FjRtya/sNmy9jMspyymRJPo5+6bR2rVRrz/Q85/JdK/l1pB/5d4f+TMeab2xP+GD+oPvk2dnn938 -XpXl1OOs2/yf/iBzZ+wx3y++H3TaO0zfD8f0MA/Iy2eb8t9JKitIIa/8iI8r9ouydRrNafBjxcMI -3uBzM65+5hps8YQ373pGkQPFrVqGFCRIf+EOZ/sp2dm0mTJDKKkeA8wdv3g6e5q1mUTAI8/0PPPy -J5f8q00ihI/cw9P+MEeaD2v1WXFrfRKUbgORI/il3M9NRhuHo+mV/TNoSamknX/UzZ+w+oyZZZTO -RkfRzN9Mne16utq8/wBDzb8jHp+WukD/AIoi/wCTEeab20H+Gj+oPvkwwzqL0bSWrrNr8pP+IHNr -7BDfL74fdkYZ5XTzb8jY5ZPy30kRrypBDX6YI8h7S9l6jVaw+DHi4YRvl1Mq5+5oEqej6Okia1bL -IOJo5p7cDmx9kdBm0s8sMseGR4D8P3nd7lMreX/kpcSxfl1pARytbeGtDT/dKZrPajWZsGs/dTlC -4C6NXvJxcuSi9K8vzPLrVuXYsQHFTv8AsNmy9j9TlzTySySM5egWTf8AqjLDPit5X+Tz8fy90cf8 -u8P/ACZTNP7XD/DP8wffJwdZkqfwemeVH5azD/sv+INmz9iRvl98Pum2aGd38P0vMfydtrq48gaS -LeMycLaDlTtWFafqyv2i0GbUas+HEyqIuvfJxNdjnPL6RdD9b0zypBcQa7FHOhjehYA+BRxX8M2H -sro8uCeSOSJjL0Hf/ko29mwlEyEhR2/3zyb8qNWurHyLpK28pi52sBanekS0zF7f1ebDqj4cjG4i -68jJ0/bPaE8GeomriPvL07yNqM99rqyTyGV1HEMfDhIaZnezOoy5p5JZCZH0Df8Az3J7A1stRKZk -eIjh/wB88Z8hf8oZov8AzBwf8m1zX+0f+M/5v6S8v7X/AONj+oPvk9U/Kz/jtP8AR/ybkzP9luc/ -fH7puw9iv8r/AJn+/eY/lxY3135M0j6rbyz8LO35+kjPSsYpXiDStMxu3tPkyan0RlKojkCepcX2 -o0uXNq/3cJTqAvhBPWXc9T/LW0urXXTHcwvBIQGCSKUJHCUVowHhmd7N4Z45TE4mJ9PMV/Pdh7Ia -fJilkjkjKJ9HMEfz+95n+Vut6npnkzS/qM3o+rZ2/qfCjV4xCn2g38xzH7Z1+bT6k+HLh4oi9geR -l3hxfaDtTUaXVnwZcPFCN7A8jKuYPe9R/L/VL7UvMPr3svqyqqorcVX4QkppRQB1JzM7A1eTPOcs -h4j6R0H8/uc/2X1+bUzyTynikOAcgNv3ndXe8g/L/wD5QzR/+YSD/k0uaj2k/wAZ/wA39JdD7W/4 -3/mj75PVfyu/47R+Y/5Ny5ney3PJ/m/dN2XsXzye+H3TeXflva3Vx5M0n0IXl42kHLgpalYlpWmY -vtBhnPU+mJl6RyF9S4PtPgyZNX6ImVRHIX1k9U/LS3ng13hNG0TGhCupU09OXehzN9mcUoGYkDE+ -nnt/Pdj7H4p45ZBMGJ9HMV0m80/KvWtT0zybpv1Gb0fVtbf1PhRq8YhT7Qb+Y5X2z2hm0+pPhmuK -IvYHkZd7j9vdqZ9LrJeDLh4oi9geRlXMHvepeQNUvtR8wie9l9WVQEVuKr8IjmNKKFHUnMvsDWZN -ROcshs+kf7vuc/2Y1+bU5Mk8p4pDgHIDb953V3vH/wAvP+UN0n/mFg/5NJmn9pf8ZH9X9Jef9q/8 -cP8AV/SXqv5X/wDHb+kf8mpczvZXnk/zf987X2L55PfD7sjyn8uv+UN0r/mGg/5MpmD7S/4yP6v6 -S6n2q/xw+79Jerflh/x2/pH/ACalzO9leeT/ADf987X2L55PfD7sjzL8u9N1EeS9Hf6tKUltIHjZ -UZgVMS0NQDg7d7Pz5s4ljiZDh/SXE9pNBqMuqMoY5yjXMRJ6l6j+WtvcQ62vrRPFyPw81K1pFL0q -BmX7PaLLgM/Ejw3w1/snZ+yeky4TPxIShZjVgjpPvf/Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-12-20T11:58:06Z - 2005-12-22T07:35:37Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A5vpun6JDomkk6RYzPNZQ SyyywI7s7LuS3fNRrNZPHOg+h+zns3ptZpvEycXFxVtXcPJ69/zj3omhSea21GPTLW1vLKiwS28S xkCaGYOCR7Llmg1U8pPF0r9Lge1HYuDQiHhX6hLn5GHkO8vKrJK6Hoh/7V1v/wARzX9pn978HrPY w/4F/nn7ovZP+cd1prV784v+TVxl3ZB3l8P986j27O2L3T+/G8j0uPloGiH/ALV9v/xDMTtY/vfh +t2XsfL/AAL/ADj90XsP/OPq8dau/nF/yanzI7FO8vh/vnU+3JsYvdP78bB/y48p2mv+XNPNxqsO mfVrCz4+vT95zRq8aun2eP4463TDLmNyEaA5/Fp7G7VnpNHHhxyy8UpfT0oR8jzt6t+V3l630LzV NaQX8WopJHDKZ4acQStyvDZn3+GvXvl3ZuAYpyAkJfTy/wA5wfaPXy1WKE5QljrjFS/5J78g8R8u R8vLOin/AJcLf/iAzU9tH9/8P0l3/spL/BP879AeufkanHWrj3Mf/JubMrsA7z/zf98632yNjH7p /fB5X5Vj5eVtFP8Ay4wf8mxmB26f3/8Am/pLm+y8v8F/zv0B63+Sycdan9yn/JubMz2dO8/83/fO u9rzYx+6X3wYN+VnlW413ylpphuIoPq9la8vVJFecfagPTjj2joJajUGpCPDEc/My/U09ldqR0ul jcZS4pHl5CP63qX5e6BNonmZrWWaOZpI0lDxEkUKzrTcDf4cyeyNIdPOcSQfpO3+e4fbuvGqxwmA Y1xjf/km8c8jpy8n6Mf+XOD/AJNrmj9oT/hH+b+ku59nT/g3+d+gPVvymTjrT/7H/k3Lmb7MHef+ b/vnA9qTYh7pffB5j5ATl5M0Y/8ALnB/ybXNd7SH/Cf839Jcr2fP+D/536A9V/K5OOtN9H/JuTM7 2VO+T/N+6bg+0psQ90vviwT8ofL13q/knTDbvGno2lty9QsK8ohSlA38uHtTsrLq9SeAxHDGPO+p l3A9zT2f2lDTYBxAniJ5eQj5h6d5M0e40rzEsE7IzugkBjJIoUlHcL4Zldh6CelyThMgkiB2/wA/ yHc43a2thqIRlEGhxDf/ADHk/wCWScvI2jn/AJdYP+TS5z3tQf8ACv8AN/SXZ9in9x8f0B6j+Xqc dZH+f+63zYeyB3yf5v3TcPt82If53+9ebflXHy8h6Of+XWH/AJNJmr9qj/hX+aPvLd2PL9z8f1PT /IqcdZT3r/xB82Pscd8nvh903F7cN8Px/wB6wH8mNMuL3yBpRhp+7toOXI06wr/TI9t9lZtXqz4V emMbs1zMv1MNDq4YcQ4upP6HpflmwmstehjlpyZSwoa7cHH8MzfZvs/LpcmSGSuI8B232/eD9DR2 lqY5YxMeW/8AvXmn5NmQfl7pBRitbeGtCR/ulM5/2rzThq/SSPQOR85OT2cAcW/f+p6Z5X5nWoSz FjRtya/sNmy9jMspyymRJPo5+6bR2rVRrz/Q85/JdK/l1pB/5d4f+TMeab2xP+GD+oPvk2dnn938 XpXl1OOs2/yf/iBzZ+wx3y++H3TaO0zfD8f0MA/Iy2eb8t9JKitIIa/8iI8r9ouydRrNafBjxcMI 3uBzM65+5hps8YQ373pGkQPFrVqGFCRIf+EOZ/sp2dm0mTJDKKkeA8wdv3g6e5q1mUTAI8/0PPPy J5f8q00ihI/cw9P+MEeaD2v1WXFrfRKUbgORI/il3M9NRhuHo+mV/TNoSamknX/UzZ+w+oyZZZTO RkfRzN9Mne16utq8/wBDzb8jHp+WukD/AIoi/wCTEeab20H+Gj+oPvkwwzqL0bSWrrNr8pP+IHNr 7BDfL74fdkYZ5XTzb8jY5ZPy30kRrypBDX6YI8h7S9l6jVaw+DHi4YRvl1Mq5+5oEqej6Okia1bL IOJo5p7cDmx9kdBm0s8sMseGR4D8P3nd7lMreX/kpcSxfl1pARytbeGtDT/dKZrPajWZsGs/dTlC 4C6NXvJxcuSi9K8vzPLrVuXYsQHFTv8AsNmy9j9TlzTySySM5egWTf8AqjLDPit5X+Tz8fy90cf8 u8P/ACZTNP7XD/DP8wffJwdZkqfwemeVH5azD/sv+INmz9iRvl98Pum2aGd38P0vMfydtrq48gaS LeMycLaDlTtWFafqyv2i0GbUas+HEyqIuvfJxNdjnPL6RdD9b0zypBcQa7FHOhjehYA+BRxX8M2H sro8uCeSOSJjL0Hf/ko29mwlEyEhR2/3zyb8qNWurHyLpK28pi52sBanekS0zF7f1ebDqj4cjG4i 68jJ0/bPaE8GeomriPvL07yNqM99rqyTyGV1HEMfDhIaZnezOoy5p5JZCZH0Df8Az3J7A1stRKZk eIjh/wB88Z8hf8oZov8AzBwf8m1zX+0f+M/5v6S8v7X/AONj+oPvk9U/Kz/jtP8AR/ybkzP9luc/ fH7puw9iv8r/AJn+/eY/lxY3135M0j6rbyz8LO35+kjPSsYpXiDStMxu3tPkyan0RlKojkCepcX2 o0uXNq/3cJTqAvhBPWXc9T/LW0urXXTHcwvBIQGCSKUJHCUVowHhmd7N4Z45TE4mJ9PMV/Pdh7Ia fJilkjkjKJ9HMEfz+95n+Vut6npnkzS/qM3o+rZ2/qfCjV4xCn2g38xzH7Z1+bT6k+HLh4oi9geR l3hxfaDtTUaXVnwZcPFCN7A8jKuYPe9R/L/VL7UvMPr3svqyqqorcVX4QkppRQB1JzM7A1eTPOcs h4j6R0H8/uc/2X1+bUzyTynikOAcgNv3ndXe8g/L/wD5QzR/+YSD/k0uaj2k/wAZ/wA39JdD7W/4 3/mj75PVfyu/47R+Y/5Ny5ney3PJ/m/dN2XsXzye+H3TeXflva3Vx5M0n0IXl42kHLgpalYlpWmY vtBhnPU+mJl6RyF9S4PtPgyZNX6ImVRHIX1k9U/LS3ng13hNG0TGhCupU09OXehzN9mcUoGYkDE+ nnt/Pdj7H4p45ZBMGJ9HMV0m80/KvWtT0zybpv1Gb0fVtbf1PhRq8YhT7Qb+Y5X2z2hm0+pPhmuK IvYHkZd7j9vdqZ9LrJeDLh4oi9geRlXMHvepeQNUvtR8wie9l9WVQEVuKr8IjmNKKFHUnMvsDWZN ROcshs+kf7vuc/2Y1+bU5Mk8p4pDgHIDb953V3vH/wAvP+UN0n/mFg/5NJmn9pf8ZH9X9Jef9q/8 cP8AV/SXqv5X/wDHb+kf8mpczvZXnk/zf987X2L55PfD7sjyn8uv+UN0r/mGg/5MpmD7S/4yP6v6 S6n2q/xw+79Jerflh/x2/pH/ACalzO9leeT/ADf987X2L55PfD7sjzL8u9N1EeS9Hf6tKUltIHjZ UZgVMS0NQDg7d7Pz5s4ljiZDh/SXE9pNBqMuqMoY5yjXMRJ6l6j+WtvcQ62vrRPFyPw81K1pFL0q BmX7PaLLgM/Ejw3w1/snZ+yeky4TPxIShZjVgjpPvf/Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vslider_v2.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vslider_v2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ - - - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - 2005-12-20T11:58:47Z - 2005-12-20T11:59:00Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA -AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AivlLyn5YuPLGlTz6VaSz -SWsLySPDGzMzRgkkkEkk5utDoceXHxSu7eN7b7bz6bPwQqqvf3nzerfkv5Q8tWvmuPUbTTre3vLa -qxTQxIjASwyqwqoHUDKu0NJDEBw9b/Q5fYHamXVmXiV6a5eYl+p595LP/OpaP/zBwf8AJtcz+zD+ -6+LzvtR/jX+b+kvWPyg/47cnzX/k1NmP2ufp+P6HY+yHPJ74/dN5N5MP/OpaP/zBwf8AJtcs7OP7 -v4uv9p/8a/zf0l6x+T5/3NyfNf8Ak1NlHap+n4/odh7I88nvj903nv5W6Faar5T0/wCsalBp/o2d -rx9cgc+Ue/GrL9nj+OQ02YwxiomW/T4Mu19Djz6qXHkjiqI+rrvLzHJ6n+XelW+meZzbwX0V+jIk -hmhIKglJxxNC2/w1yrW5TOIJHDz/AEOZ2BpYYMk4xnHIPQbj/wAlNuZeJeTj/wA6po//ADBwf8m1 -zI0J9Dovab/Gv839Jetfk4f9zcvzX/k1NlXaB5fH9DsPZLnk98fum8k8n/8AKKaP/wAwcH/JtcOk -PocD2l/xr/N/SXrX5N/8duX5r/yamyvWnl8f0Ow9k+eT3x+6bz38rvLF3rnlXT/q9xBB9Xs7Xl67 -Mtece3Git/LvkMOUQjvae1uzJ6rVS4DEcMR9RrmZeR7nqf5c6FcaL5na1nmind0jlDwMWUApcLQk -hd/hyGoyCQBH45OZ2DoZ6bJOEjEk8B9Jv+f5DueJeUD/AM6rpH/MHB/ybXJ4D6XR+0n+M/5v6S9a -/Jk/7m5fmn/JqbIag8nYeynOfvj903kflE/86tpH/MHB/wAm1wYjs4HtJ/jP+b+kvW/yX/47cvzT -/k1Nkcxdh7Kc5++P3Tefflb5S1LzD5WsfqUkMf1WztfU9ZnWvqR7U4q/8hyAlQZ9p9lZNXqZcBiO -GI531Mu4Hueqflz5dvtA80tZ3jxSSyJHMDCWZeLJcL+0qGtUwSlbl9idnz0uScJkEnhO3+f5DueH -eVP+UX0j/mDg/wCTYwAui9ov8Z+H6S9b/JT/AI7c3+sn/JqfAS7D2W5z98fum8j8qn/nV9I/5g4P -+TYyEi4HtF/jPw/SXrf5J/8AHbm/1k/5NT4guf7Lc5++P3Tec/lv5X1jXfLGn/o2NZPq1na+rydU -pzj+H7R/yTkZRssO1tBm1GpPhi+EC9wOZPe9W/K7QdS0TzM9pqCCOZ1jlVVYMOJjuFG491OGIpze -wdHk085xyCj6T0/p9zxPynPNF5Z0n05GStlb14kitIx4ZVlmQdnUe0H+M/D9JeufkpLLLrszSOzs -CgqxJNPSn8cOKRN25/sxzn74/dN4/wCWP+UZ0j/mCg/5NjKNSfV8HA9oP8Z+H63rv5H/APHcn/1k -/wCTU+S0x5uf7Mc5++P3Tebfl55Y1vXfLWn/AKMgE/1eytfWq6JTnH8P2ytfsnBnxGctu5r7W0Ob -PqT4ceKgL3A533kPWPyp0HVNF8zSWupQiGd1jlVQyv8AAY7hQaoWHVTktPjMSQfL9Lm9g6XJgnOO -QcJ9J6H+f3W8a8nX19a+WdK+q3EsHOyt+fpOyVpGKV4kVpXBnJEtu51fbuWcNSeEkbdPeXrf5MXV -1c6/NJczPPIDGoeRi5AEU5pVifHJae97c72bySnKZkSfp5+6bx7yv/yjOkf8wUH/ACbGOYbut9oP -8Z+H6S9d/JD/AI7k3+sn/JqfJYBzc/2Y5z98fum808geXtY1fyxpv6OtWufQs7b1eJUcecfw/aI6 -8Tk5xstHbGjy59SfDjxUBfzL1j8ptH1LSfMclvqEBt5nEcioxBJUx3AB+EnupxhGnN9n9NkwznHI -OE+k/wC7eR+R9V1Ow8saX9Ru5rX1bO39T0XZOXGMUrxIrSpyw263t3UZMepPBKUbA5Ejqe56z+UG -oX995hlmvbiS5lX00WSVy7BRHOaVYnapOAOf7N5p5JTM5GR9PMk9J97xzyp/yi+kf8wcH/JsZOnV -e0X+M/D9Jeufkp/x25v9ZP8Ak1PgIdh7Lc5++P3TeY+QtF1XUvK+mfULWS59KztvU9MV48oxSvzo -csiNnG7c0uXLqTwRMqiOQvqXrH5S6ZqGneYZIb63e3lbg6pIKEqY5xX7wcE3O9m8E8UpiYMT6ef+ -e8p8g6xqmm+VtM+oXUlt6tnbep6bceXGMUr8qnLMcbDgdu6rLi1J4JGNxHI11L1j8ptSv9Q8wyTX -073EqhEV5DUhRHOafeTkcopzvZvUTyymZyMj6ef+e8c8oj/nVdI/5g4P+Ta5dhHpdT7Sf4z/AJv6 -S9a/Jj/jty/NP+TU2Qzjk7D2U5z98fum8v8AImmaje+VdK+pWs1z6dnb+p6MbSceUYpXiDStMtwk -CO5cXt/TZMupPBGUqiOQJ6nuesflJY3tlr8kV5byW0rcGCTIyMVMc4rRgNtshqCDVfjk53szhnjl -MTiYn08xXSbzH8t/MOsaP5V039G3HoevZ23q/Aj14R/D9tWpTkemW4MUZQ3cftntDNptUfClw8UR -ewPIy7we96r+WGs6lq/mR7nUJvXmRUjV+KJRRHOwFECjqxyvU4xEADz/AEOb7PazLqJzlkPFIcI6 -Db19zxnyf/yimj/8wcH/ACbXMrRj0Ol9pf8AGv8AN/SXrX5N/wDHbl+a/wDJqbKtcOXx/Q7D2T55 -PfH7pvLfItjeXXlTSfq0Ek/Czt+fpoz0rGKV4g+GX6OQGPc9XD9osM56r0xMvSOQvqXq/wCUlrc2 -2vSJcRPC54MFkUqaenMK0NMq15BArz/Q5/stilCUxIGJ9PPbpN5r+WvmHV9H8p6b+jp/R9eztvV+ -BHrwj+H7Yb+Y5bpMEMmP1C6P6nH7b7Rz6bVHwpcPFEXsDyMu8F6p+Wes6jq3mRrm/l9aZFSNW4qv -wiOdgKKAOrHKtdhjjAERXP8AQ5vs5rMuonOWQ8UhwDkBt6+6njfkwf8AOpaP/wAwcH/Jtczezh+7 -+Lpfaf8Axr/N/SXrH5Pj/c3J81/5NTZR2oPp+P6HYeyPPJ74/dN5R5LH/OpaP/zBwf8AJtcyuzB+ -6+Lrvaf/ABr/ADf0l6x+UH/Hbk+a/wDJqbMftcfT8f0Ox9keeT3x+6bzXyNomrS+TdEljtZGjksr -dkYCoIMS75b2dqMcMdSkAbavaHs/Pm1HFCEpR4envL1P8q9PvbTWz9ZhaLmRw5ClaRS1/XlHamaE -+HhN8/0Ob7MaPLhM/EiY2Y1fum//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-12-20T11:58:47Z - 2005-12-22T07:35:50Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AivlLyn5YuPLGlTz6VaSz SWsLySPDGzMzRgkkkEkk5utDoceXHxSu7eN7b7bz6bPwQqqvf3nzerfkv5Q8tWvmuPUbTTre3vLa qxTQxIjASwyqwqoHUDKu0NJDEBw9b/Q5fYHamXVmXiV6a5eYl+p595LP/OpaP/zBwf8AJtcz+zD+ 6+LzvtR/jX+b+kvWPyg/47cnzX/k1NmP2ufp+P6HY+yHPJ74/dN5N5MP/OpaP/zBwf8AJtcs7OP7 v4uv9p/8a/zf0l6x+T5/3NyfNf8Ak1NlHap+n4/odh7I88nvj903nv5W6Faar5T0/wCsalBp/o2d rx9cgc+Ue/GrL9nj+OQ02YwxiomW/T4Mu19Djz6qXHkjiqI+rrvLzHJ6n+XelW+meZzbwX0V+jIk hmhIKglJxxNC2/w1yrW5TOIJHDz/AEOZ2BpYYMk4xnHIPQbj/wAlNuZeJeTj/wA6po//ADBwf8m1 zI0J9Dovab/Gv839Jetfk4f9zcvzX/k1NlXaB5fH9DsPZLnk98fum8k8n/8AKKaP/wAwcH/JtcOk PocD2l/xr/N/SXrX5N/8duX5r/yamyvWnl8f0Ow9k+eT3x+6bz38rvLF3rnlXT/q9xBB9Xs7Xl67 Mtece3Git/LvkMOUQjvae1uzJ6rVS4DEcMR9RrmZeR7nqf5c6FcaL5na1nmind0jlDwMWUApcLQk hd/hyGoyCQBH45OZ2DoZ6bJOEjEk8B9Jv+f5DueJeUD/AM6rpH/MHB/ybXJ4D6XR+0n+M/5v6S9a /Jk/7m5fmn/JqbIag8nYeynOfvj903kflE/86tpH/MHB/wAm1wYjs4HtJ/jP+b+kvW/yX/47cvzT /k1Nkcxdh7Kc5++P3Tefflb5S1LzD5WsfqUkMf1WztfU9ZnWvqR7U4q/8hyAlQZ9p9lZNXqZcBiO GI531Mu4Hueqflz5dvtA80tZ3jxSSyJHMDCWZeLJcL+0qGtUwSlbl9idnz0uScJkEnhO3+f5DueH eVP+UX0j/mDg/wCTYwAui9ov8Z+H6S9b/JT/AI7c3+sn/JqfAS7D2W5z98fum8j8qn/nV9I/5g4P +TYyEi4HtF/jPw/SXrf5J/8AHbm/1k/5NT4guf7Lc5++P3Tec/lv5X1jXfLGn/o2NZPq1na+rydU pzj+H7R/yTkZRssO1tBm1GpPhi+EC9wOZPe9W/K7QdS0TzM9pqCCOZ1jlVVYMOJjuFG491OGIpze wdHk085xyCj6T0/p9zxPynPNF5Z0n05GStlb14kitIx4ZVlmQdnUe0H+M/D9JeufkpLLLrszSOzs CgqxJNPSn8cOKRN25/sxzn74/dN4/wCWP+UZ0j/mCg/5NjKNSfV8HA9oP8Z+H63rv5H/APHcn/1k /wCTU+S0x5uf7Mc5++P3Tebfl55Y1vXfLWn/AKMgE/1eytfWq6JTnH8P2ytfsnBnxGctu5r7W0Ob PqT4ceKgL3A533kPWPyp0HVNF8zSWupQiGd1jlVQyv8AAY7hQaoWHVTktPjMSQfL9Lm9g6XJgnOO QcJ9J6H+f3W8a8nX19a+WdK+q3EsHOyt+fpOyVpGKV4kVpXBnJEtu51fbuWcNSeEkbdPeXrf5MXV 1c6/NJczPPIDGoeRi5AEU5pVifHJae97c72bySnKZkSfp5+6bx7yv/yjOkf8wUH/ACbGOYbut9oP 8Z+H6S9d/JD/AI7k3+sn/JqfJYBzc/2Y5z98fum808geXtY1fyxpv6OtWufQs7b1eJUcecfw/aI6 8Tk5xstHbGjy59SfDjxUBfzL1j8ptH1LSfMclvqEBt5nEcioxBJUx3AB+EnupxhGnN9n9NkwznHI OE+k/wC7eR+R9V1Ow8saX9Ru5rX1bO39T0XZOXGMUrxIrSpyw263t3UZMepPBKUbA5Ejqe56z+UG oX995hlmvbiS5lX00WSVy7BRHOaVYnapOAOf7N5p5JTM5GR9PMk9J97xzyp/yi+kf8wcH/JsZOnV e0X+M/D9Jeufkp/x25v9ZP8Ak1PgIdh7Lc5++P3TeY+QtF1XUvK+mfULWS59KztvU9MV48oxSvzo csiNnG7c0uXLqTwRMqiOQvqXrH5S6ZqGneYZIb63e3lbg6pIKEqY5xX7wcE3O9m8E8UpiYMT6ef+ e8p8g6xqmm+VtM+oXUlt6tnbep6bceXGMUr8qnLMcbDgdu6rLi1J4JGNxHI11L1j8ptSv9Q8wyTX 073EqhEV5DUhRHOafeTkcopzvZvUTyymZyMj6ef+e8c8oj/nVdI/5g4P+Ta5dhHpdT7Sf4z/AJv6 S9a/Jj/jty/NP+TU2Qzjk7D2U5z98fum8v8AImmaje+VdK+pWs1z6dnb+p6MbSceUYpXiDStMtwk CO5cXt/TZMupPBGUqiOQJ6nuesflJY3tlr8kV5byW0rcGCTIyMVMc4rRgNtshqCDVfjk53szhnjl MTiYn08xXSbzH8t/MOsaP5V039G3HoevZ23q/Aj14R/D9tWpTkemW4MUZQ3cftntDNptUfClw8UR ewPIy7we96r+WGs6lq/mR7nUJvXmRUjV+KJRRHOwFECjqxyvU4xEADz/AEOb7PazLqJzlkPFIcI6 Db19zxnyf/yimj/8wcH/ACbXMrRj0Ol9pf8AGv8AN/SXrX5N/wDHbl+a/wDJqbKtcOXx/Q7D2T55 PfH7pvLfItjeXXlTSfq0Ek/Czt+fpoz0rGKV4g+GX6OQGPc9XD9osM56r0xMvSOQvqXq/wCUlrc2 2vSJcRPC54MFkUqaenMK0NMq15BArz/Q5/stilCUxIGJ9PPbpN5r+WvmHV9H8p6b+jp/R9eztvV+ BHrwj+H7Yb+Y5bpMEMmP1C6P6nH7b7Rz6bVHwpcPFEXsDyMu8F6p+Wes6jq3mRrm/l9aZFSNW4qv wiOdgKKAOrHKtdhjjAERXP8AQ5vs5rMuonOWQ8UhwDkBt6+6njfkwf8AOpaP/wAwcH/Jtczezh+7 +Lpfaf8Axr/N/SXrH5Pj/c3J81/5NTZR2oPp+P6HYeyPPJ74/dN5R5LH/OpaP/zBwf8AJtcyuzB+ 6+Lrvaf/ABr/ADf0l6x+UH/Hbk+a/wDJqbMftcfT8f0Ox9keeT3x+6bzXyNomrS+TdEljtZGjksr dkYCoIMS75b2dqMcMdSkAbavaHs/Pm1HFCEpR4envL1P8q9PvbTWz9ZhaLmRw5ClaRS1/XlHamaE +HhN8/0Ob7MaPLhM/EiY2Y1fum//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vslider_v3.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vslider_v3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ - - - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - 2005-12-20T11:59:27Z - 2005-12-20T11:59:39Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA -AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AgmgaF5fPl/SpJNJs5ZZb -OGSSSSBGZmZASSSN8uhAENU5kF63+RHlry8nmwajBpttbXlp8MMsESRkCaGYOCVHcLgyQATCRLzP -y+tfLejf8wNv/wAQGWYuTDJzev8A5FCmtXHzj/5NT5HMnE8k8uLXy1o3/MDb/wDEBksXJjk5vXfy -NFNbuPnH/wAmp8jmZYmBfll5Ztdb8saf6+pw6d9XsbTj61Pj5xmvGrJ9nj+OCEqCyjZeq/lrocGj -eaZLaG+i1BXSKQzQ04glLheOzNv8NfpwZJWGUBTxHysK+V9G/wCYKD/k2MsxcmvJzet/koKa3N80 -/wCTU2RzMsTyjymtfKujf8wUH/JsZLFyY5eb1r8lxTW5vmn/ACamyOZliYF+Vvla413ypp/o3ENv -9XsrXl6xIrzj2pQHpxwQnQWcbL1P8u9Am0TzO1rNNHOzpHKHiJKgFJ1puBv8ODJKwmEaeLeTVr5S -0b/mCg/5NjLMXJhl5vWPyeFNbk+a/wDJqbI5mWLq8r8lLXyjo/8AzBwf8m1yWLkxy83q/wCUQprU -nzX/AJNy5HMnEwL8qPLF/rnlDTvqkkSfV7O15+qWFece1OKt/LjCYiEzgSXqPkLQrvRfMv1W6eN5 -HRJQYixFCk6/tBd/hyOSVhOONF435DWvk7R/+YOD/k2uWYuTXl5vVvypFNab5j/k3LkczLC8t8gL -Xybo/wDzCQf8mlyWLkxy83qv5WimtN8x/wAm5cjmZYerz78p9Bv9W8l6Z9UCn0bS258m4/aiFP8A -iOMJgDdZwJOz1DyLpF3pfmIQXQUSOokHE8hxKSj+GDJIEbMscSHk35bSzR+StI9KRkraQV4kitIl -8Mni5NeU7vUvy4klfXOUjs7dKsSTT05PHI5mWEvLfy3WvkjR/wDmFg/5NLksXJjl5vUvy3FNa/z/ -AN9yZHMyw9Xnv5R6Pfaj5H0v6qgf0rW351YLTlEtOvyxhIAboyRJOz0/yXpt1p/mBIblQkjLzABB -2KSDt8sGSQPJliiRzeV/lXPcReRtJ9GV4+VrBy4MVrSJetMniAprykgvUPIks0uuK0sjSMNgzEsa -cJNt8jmHJnhPN5V+WTU8jaP/AMwsP/JpMni5MM3N6j+XprrS/wCf+65Mhm6MsHV5p+U+m3995I0r -6pCZfTtbfnQgU5RLTqR4YccgBuuSJJ2eoeRrG7s9fWK6jMUhHMKSD8JSQV2J8MjlIPJliiRzeUfl -fqN7Z+SdJ+rTvDztLfnwJFaRLSv35LHEEMchIOz1H8v726u9eElzK0zgBQzmppwlNPxwZRScRJ5v -Ivy9ankvR/8AmEg/5NLksXJjl5vVPyxNdaPzH/JuTI5mWF5l+WWmajfeTdK+pwNP6dpb+px7cohT -9WHHIAboyRJOz1L8urG9svMHo3cTQyMA4VuvEpKK/hkcpBZYhTyn8tdX1HT/ACdpX1O4aD1bO39T -j34xin68ljiCN2OSRB2ep/ltqN7f+YDNdzNNIoVAzdQojmNPxyOUAMsRt475HanlDR/+YOD/AJNr -k8XJhl5vVvykNdbf5r/yblyOZlheW+QLDULzyjpP1O1mufTs7f1PRjaTjyjFK8QaVphxkAIyAkvV -fyrs7y0194ruCS3kPFgkqMjFTHMK0YDbbI5TbLEHl35ceYtX0fynpn6OuPQ9eytvV+BHrwj+H7at -/McOOII3RORB2eqfljrWo6t5je4v5vWmRUjVuKpRQk5AogUdWODJEDkyxknm8W8pNTyro3/MFB/y -bGTxcmGXm9Z/Jg11ub5p/wAmpsjmZYnlPkyyvrrytpH1W3luOFlb8/SRnpWMUrxBpWmHGdkZBu9Z -/J21u7bXpo7mGSCQ8GCSKUJBjnFaMBttkcpTiDzD8vPNOsaF5Y039GyrF9YsbX1eSK9eEfw/aB/m -OGEQRus5EF6t+Vev6lrfmaW61CQSTIscSsqqnwhLhgKKB3Y5HJEBOORLw/y41PLOjf8AMDb/APEB -k8XJhk5vXfyMaut3Hzj/AOTU+DMyxPHtBanlvRv+YG3/AOIDDi5Iyc3rv5Dmut3Pzj/5NT4MycTz -Pyz5Y1+68raJPb2MkkL2FuVcAUIKD3xxyACziSXq35LaNqmm63L9etnt/VZPT5034xTVp8qjI5JA -ssYIf//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-12-20T11:59:27Z - 2005-12-22T07:36:04Z - Illustrator - - - - JPEG - 16 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAQAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AgmgaF5fPl/SpJNJs5ZZb OGSSSSBGZmZASSSN8uhAENU5kF63+RHlry8nmwajBpttbXlp8MMsESRkCaGYOCVHcLgyQATCRLzP y+tfLejf8wNv/wAQGWYuTDJzev8A5FCmtXHzj/5NT5HMnE8k8uLXy1o3/MDb/wDEBksXJjk5vXfy NFNbuPnH/wAmp8jmZYmBfll5Ztdb8saf6+pw6d9XsbTj61Pj5xmvGrJ9nj+OCEqCyjZeq/lrocGj eaZLaG+i1BXSKQzQ04glLheOzNv8NfpwZJWGUBTxHysK+V9G/wCYKD/k2MsxcmvJzet/koKa3N80 /wCTU2RzMsTyjymtfKujf8wUH/JsZLFyY5eb1r8lxTW5vmn/ACamyOZliYF+Vvla413ypp/o3ENv 9XsrXl6xIrzj2pQHpxwQnQWcbL1P8u9Am0TzO1rNNHOzpHKHiJKgFJ1puBv8ODJKwmEaeLeTVr5S 0b/mCg/5NjLMXJhl5vWPyeFNbk+a/wDJqbI5mWLq8r8lLXyjo/8AzBwf8m1yWLkxy83q/wCUQprU nzX/AJNy5HMnEwL8qPLF/rnlDTvqkkSfV7O15+qWFece1OKt/LjCYiEzgSXqPkLQrvRfMv1W6eN5 HRJQYixFCk6/tBd/hyOSVhOONF435DWvk7R/+YOD/k2uWYuTXl5vVvypFNab5j/k3LkczLC8t8gL Xybo/wDzCQf8mlyWLkxy83qv5WimtN8x/wAm5cjmZYerz78p9Bv9W8l6Z9UCn0bS258m4/aiFP8A iOMJgDdZwJOz1DyLpF3pfmIQXQUSOokHE8hxKSj+GDJIEbMscSHk35bSzR+StI9KRkraQV4kitIl 8Mni5NeU7vUvy4klfXOUjs7dKsSTT05PHI5mWEvLfy3WvkjR/wDmFg/5NLksXJjl5vUvy3FNa/z/ AN9yZHMyw9Xnv5R6Pfaj5H0v6qgf0rW351YLTlEtOvyxhIAboyRJOz0/yXpt1p/mBIblQkjLzABB 2KSDt8sGSQPJliiRzeV/lXPcReRtJ9GV4+VrBy4MVrSJetMniAprykgvUPIks0uuK0sjSMNgzEsa cJNt8jmHJnhPN5V+WTU8jaP/AMwsP/JpMni5MM3N6j+XprrS/wCf+65Mhm6MsHV5p+U+m3995I0r 6pCZfTtbfnQgU5RLTqR4YccgBuuSJJ2eoeRrG7s9fWK6jMUhHMKSD8JSQV2J8MjlIPJliiRzeUfl fqN7Z+SdJ+rTvDztLfnwJFaRLSv35LHEEMchIOz1H8v726u9eElzK0zgBQzmppwlNPxwZRScRJ5v Ivy9ankvR/8AmEg/5NLksXJjl5vVPyxNdaPzH/JuTI5mWF5l+WWmajfeTdK+pwNP6dpb+px7cohT 9WHHIAboyRJOz1L8urG9svMHo3cTQyMA4VuvEpKK/hkcpBZYhTyn8tdX1HT/ACdpX1O4aD1bO39T j34xin68ljiCN2OSRB2ep/ltqN7f+YDNdzNNIoVAzdQojmNPxyOUAMsRt475HanlDR/+YOD/AJNr k8XJhl5vVvykNdbf5r/yblyOZlheW+QLDULzyjpP1O1mufTs7f1PRjaTjyjFK8QaVphxkAIyAkvV fyrs7y0194ruCS3kPFgkqMjFTHMK0YDbbI5TbLEHl35ceYtX0fynpn6OuPQ9eytvV+BHrwj+H7at /McOOII3RORB2eqfljrWo6t5je4v5vWmRUjVuKpRQk5AogUdWODJEDkyxknm8W8pNTyro3/MFB/y bGTxcmGXm9Z/Jg11ub5p/wAmpsjmZYnlPkyyvrrytpH1W3luOFlb8/SRnpWMUrxBpWmHGdkZBu9Z /J21u7bXpo7mGSCQ8GCSKUJBjnFaMBttkcpTiDzD8vPNOsaF5Y039GyrF9YsbX1eSK9eEfw/aB/m OGEQRus5EF6t+Vev6lrfmaW61CQSTIscSsqqnwhLhgKKB3Y5HJEBOORLw/y41PLOjf8AMDb/APEB k8XJhk5vXfyMaut3Hzj/AOTU+DMyxPHtBanlvRv+YG3/AOIDDi5Iyc3rv5Dmut3Pzj/5NT4MycTz Pyz5Y1+68raJPb2MkkL2FuVcAUIKD3xxyACziSXq35LaNqmm63L9etnt/VZPT5034xTVp8qjI5JA ssYIf//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vslider_v4.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vslider_v4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,125 +0,0 @@ - - - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - 2005-12-20T12:00:19Z - 2005-12-20T12:00:25Z - Illustrator - - - - JPEG - 4 - 256 - /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA -AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAEAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AhOZTjOxV2KsV/Rv5gf8A -V2t/+Ra/9UshUu9nce5lWTYOxViX/IRv+Xb/AITK/Uz9LLcsYOxViP6Z8+/9WiL7/wDr5ldy7mdR -72XZYwdirEf8V+Zv+pfl/wCH/wCaMr4j3M+Ed7LssYOxViX+P/8AtVXP+f0ZXx+TPg82W5YwdirE -/wDlZOhf74uv+Aj/AOqmV+IGfhllmWMHYqx7/Hvlr/lof/kW/wDTIeIGXAU1/Q2j/wDLDb/8ik/p -kqCLKMwoSj/Fnlz/AJb4/wAf6ZHiCeEqn+GvL/8A1b4P+AGHhC8RTPChAfp7Qv8Aq42v/I6P/mrB -xBPCUD/gfyv/AMsX/JWb/mvBwBPGU9yTF2KuxV//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-12-20T12:00:19Z - 2005-12-22T07:36:17Z - Illustrator - - - - JPEG - 4 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAAEAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AhOZTjOxV2KsV/Rv5gf8A V2t/+Ra/9UshUu9nce5lWTYOxViX/IRv+Xb/AITK/Uz9LLcsYOxViP6Z8+/9WiL7/wDr5ldy7mdR 72XZYwdirEf8V+Zv+pfl/wCH/wCaMr4j3M+Ed7LssYOxViX+P/8AtVXP+f0ZXx+TPg82W5YwdirE /wDlZOhf74uv+Aj/AOqmV+IGfhllmWMHYqx7/Hvlr/lof/kW/wDTIeIGXAU1/Q2j/wDLDb/8ik/p kqCLKMwoSj/Fnlz/AJb4/wAf6ZHiCeEqn+GvL/8A1b4P+AGHhC8RTPChAfp7Qv8Aq42v/I6P/mrB xBPCUD/gfyv/AMsX/JWb/mvBwBPGU9yTF2KuxV//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vtab.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ied_vtab.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,191 +0,0 @@ - - - - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - 2005-12-19T09:01:32Z - 2005-12-19T09:01:40Z - Illustrator - - - - JPEG - 108 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAABsAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7BhQ7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYqmP/TOf9Hv/ADJxS+e/+Vuecv8AfsH/ACKXArOPJvnHWdU0g3N4Y2lErJVU4igA -I2B98VT39N3ngn3H+uKu/Td54J9x/rirv03eeCfcf64q79N3ngn3H+uKu/Td54J9x/rirv03eeCf -cf64q79N3ngn3H+uKu/Td54J9x/rirv03eeCfcf64q79N3ngn3H+uKp9hQmP/TOf9Hv/ADJxS+R8 -CvUPy3/5R5v+Yh/+IrirKsVdirsVdiq5YpXR5EQtHH/eMOgxVbirsVdirsVdirLcKEx/6Zz/AKPf -+ZOKXyPgV6h+W/8Ayjzf8xD/APEVxVlWKuxV2Ksf81earfRrf046SahIP3UXZR/O/t4DvirX5aef -bmblpurmqcibe9NAOTmpjfp3Ox7YqzXUtLCAzW60UbvGO3uMVSvFXYq7FXYqy3ChMf8ApnP+j3/m -Til8j4Feoflv/wAo83/MQ/8AxFcVZVirsVY/5q81W+jW/px0k1CQfuouyj+d/bwHfFXm1vb3mrXj -3Fw7NyblNM3UnwH+e2KsjhhjhjWONeKLsAMVZz5P84ceGm6k/wAOy29wx6eCOf1HFWRanpnGs8A+ -Hq6Dt7jFUqxV2KuxVluFCY/9M5/0e/8AMnFL5HwK9Q/Lf/lHm/5iH/4iuKsqxVj/AJq81W+jW/px -0k1CQfuouyj+d/bwHfFXm1vb3mrXklxcSMxZuU0zdST2H+e2KsjhhjhjWONeKLsAMVX4q7FWbeT/ -ADhx4abqT/DstvcMengjn9RxVkWp6ZxrPAPh6ug7e4xVKsVdirLcKEx/6Zz/AKPf+ZOKXyPgV6h+ -W/8Ayjzf8xD/APEVxVPdXl1KOxc6bAJ7s/DGrMFVa/tHkRWnhirzmfyT5uurh57iIPNIeTyPKhJP -0HFVn/KvvM3++Y/+Ri/1xV3/ACr7zN/vmP8A5GL/AFxV3/KvvM3++Y/+Ri/1xV3/ACr7zN/vmP8A -5GL/AFxV3/KvvM3++Y/+Ri/1xV6T5H1LzHYWn6P12L1YYhS1uldXcAfsOK1I8Diqa3r2kknO3DLy -+0hAAr7UOKofFWW4UJj/ANM5/wBHv/MnFL5HwK9Q/Lf/AJR5v+Yh/wDiK4qyrFXYq7FXYq7FXYq7 -FXYq7FXYqy3ChMf+mc/6Pf8AmTil8j4Feoflv/yjzf8AMQ//ABFcVZVirsVdirsVdirsVdirsVdi -rsVZbhQmP/TOf9Hv/MnFL5HwK9Q/Lf8A5R5v+Yh/+IriqO84aveaVpIubQqJTKqVYchQgnp9GKsJ -/wCVheY/54v+RYxV3/KwvMf88X/IsYq7/lYXmP8Ani/5FjFXf8rC8x/zxf8AIsYq7/lYXmP+eL/k -WMVd/wArC8x/zxf8ixirv+VheY/54v8AkWMVTryl5t1jVNYW1umQwlHYhUCmqjbfFWcYqy3ChMf+ -mc/6Pf8AmTil8j4Feoflv/yjzf8AMQ//ABFcVTTzL5fvte04WNk0azCRZCZSVXioIO4DeOKsW/5V -D5p/37af8jH/AOqeGld/yqHzT/v20/5GP/1TxpXf8qh80/79tP8AkY//AFTxpXf8qh80/wC/bT/k -Y/8A1TxpXf8AKofNP+/bT/kY/wD1TxpXf8qh80/79tP+Rj/9U8aV3/KofNP+/bT/AJGP/wBU8aVM -/Ln5fa5oeprf3kkDQhGQiJ2ZqsNtiq4FZZirLcKEx/6Zz/o9/wCZOKXyPgV6h+W//KPN/wAxD/8A -EVxVm2k/71H/AFT/AAxCpzhQ7FXYq7FXYq7FXYqg9V/3kP8ArDFUmwJZbhQmP/TOf9Hv/MnFL5Hw -K9Q/Lf8A5R5v+Yh/+IrirKsVdirsVdirsVdirsVdirsVdirLcKEx/wCmc/6Pf+ZOKXyPgV6h+W// -ACjzf8xD/wDEVxVlWKuxV2KuxV2KuxV2KuxV2KuxVluFCY/9M5/0e/8AMnFL5HwK9Q/Lf/lHm/5i -H/4iuKp5rGsWmk2guroOYi4T4ACakE9yPDFUk/5WN5f/AJZ/+AX/AJqxV3/KxvL/APLP/wAAv/NW -Ku/5WN5f/ln/AOAX/mrFXf8AKxvL/wDLP/wC/wDNWKu/5WN5f/ln/wCAX/mrFXf8rG8v/wAs/wDw -C/8ANWKu/wCVjeX/AOWf/gF/5qxVG6R5w0nVbwWlsJRKVLDmoAovXoTiqeYqy3ChMf8ApnP+j3/m -Til8j4Feoflv/wAo83/MQ/8AxFcVb/Mb/lH1/wCM6f8AEWxV5jirsVdirsVdirsVdirJfy9/5SNP -+MUn6sVepYqy3ChMf+mc/wCj3/mTil8j4Feoflv/AMo83/MQ/wDxFcVZtpP+9R/1T/DEKnOFDsVd -irsVdirsVdiqD1X/AHkP+sMVSbAlluFCY/8ATOf9Hv8AzJxS+R8CvUPy3/5R5v8AmIf/AIiuKsut -7h4H5pStKb4qiP0tdeC/d/bjau/S114L939uNq79LXXgv3f242rv0tdeC/d/bjau/S114L939uNq -79LXXgv3f242rv0tdeC/d/bjaqc9/PNHwfjxrXYeGKofFWW4UJj/ANM5/wBHv/MnFL5HwK9Q/Lf/ -AJR5v+Yh/wDiK4qyrFXYq7FXYq7FXYq7FXYq7FXYqy3ChMf+mc/6Pf8AmTil8j4Feoflv/yjzf8A -MQ//ABFcVZVirsVdirsVdirsVdirsVdirsVZbhQmP/TOf9Hv/MnFL5HwK9Q/Lf8A5R5v+Yh/+Iri -rf5jf8o+v/GdP+ItirzHFXYq7FXYq7FXYq7FWS/l7/ykaf8AGKT9WKvUsVZbhQmP/TOf9Hv/ADJx -S+R8CvUPy3/5R5v+Yh/+IrirJptC0/W1+p36s0APqUVip5LsNx88VUf+VV+T/wDfEv8AyNbDSu/5 -VX5P/wB8S/8AI1saV3/Kq/J/++Jf+RrY0rv+VV+T/wDfEv8AyNbGld/yqvyf/viX/ka2NK7/AJVX -5P8A98S/8jWxpXf8qr8n/wC+Jf8Aka2NKvi8i+XtGf67YxyJOvwAtIzCjddjiqvgVluFCY/9M5/0 -e/8AMnFL5HwK9Q/Lf/lHm/5iH/4iuKsysJ44Z+b148SNt8VTH9K2ni33YUO/Stp4t92Ku/Stp4t9 -2Ku/Stp4t92Ku/Stp4t92Ku/Stp4t92Ku/Stp4t92Koe+vrea3KITyqDuMUpdgVluFCY/wDTOf8A -R7/zJxS+R8CvUPy3/wCUeb/mIf8A4iuKsqxV2KuxV2KuxV2KuxV2KuxV2KstwoTH/pnP+j3/AJk4 -pfI+BXqH5b/8o83/ADEP/wARXFWVYq7FXYq7FXYq7FXYq7FXYq7FWW4UJj/0zn/R7/zJxS+R8CvU -Py3/AOUeb/mIf/iK4qymg5LUngD8YWlSPaoIxVObfSLCWNZY5pJEYbbr/wA0jCqr+hLP+Z/vH9MV -d+hLP+Z/vH9MVd+hLP8Amf7x/TFXfoSz/mf7x/TFXfoSz/mf7x/TFWjodof2pB9I/piqUXaWqy8b -Z3dV2Z2KlSfagH34FUsVZbhQmP8A0zn/AEe/8ycUvkfAr1D8t/8AlHm/5iH/AOIrirKsVSPzP5cG -rW3OCQwX0Y/dSAkBv8l6dvftirzi31LVNLvHtroyji3GaJmNVPiN/wDbxVkMV48sayRzMyMKghji -q715/wDfjfecVd68/wDvxvvOKpJrGvT721vM3hJIGP3DFU+8meVrqbhqWpvJ6OzW9szH4/B3H8vg -O/y6qs9xV2KstwoTH/pnP+j3/mTil8j4Feoflv8A8o83/MQ//EVxVlWKuxVj/mryrb6zb+pHSPUI -x+6l7MP5H9vA9sVecW1zd6TdvbXKMoVuM0LdQfEf574qyKKWOWNZI2DIwqCMVSbV9XpytrZt+kkg -/UMVTzyX5L9b09T1OP8Ac7NbWzD7Xg7j+XwHf5dVXoWKuxV2KstwoTH/AKZz/o9/5k4pfI+BXqH5 -b/8AKPN/zEP/AMRXFWVYq7FXYqx/zV5Vt9Zt/UjpHqEY/dS9mH8j+3ge2KvMXk1DT2nsn5QuDxlj -PUEeGKss8leTBOI9U1JKw7NbW7ft+DuP5fAd/l1VehYq7FXYq7FWW4UJj/0zn/R7/wAycUvkfAr1 -D8t/+Ueb/mIf/iK4qyrFXYq7FXYqlepeW9I1G8gu7qEPNAfkHA6K4/aAP+dMVTPFW8VdirsVdirL -cKEx/wCmc/6Pf+ZOKXyPgVmvlDzfpOkaSbW6EplMrP8AAoIoQB3I8MVTv/lZHl7+W4/4Bf8AmrFX -f8rI8vfy3H/AL/zVirv+VkeXv5bj/gF/5qxV3/KyPL38tx/wC/8ANWKu/wCVkeXv5bj/AIBf+asV -d/ysjy9/Lcf8Av8AzVirv+VkeXv5bj/gF/5qxV3/ACsjy9/Lcf8AAL/zVirv+VkeXv5bj/gF/wCa -sVd/ysjy9/Lcf8Av/NWKp7/yuPyn/vu7/wCRaf8ANeKsj/5WJoH/ACrz9O8Z/qX6U+rceC+pz9Dl -05UpT3xV834q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq9G/wDKBf8Agxf9iuKv/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-12-19T09:01:32Z - 2005-12-22T07:35:20Z - Illustrator - - - - JPEG - 108 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAABsAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7BhQ7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYqmP/TOf9Hv/ADJxS+e/+Vuecv8AfsH/ACKXArOPJvnHWdU0g3N4Y2lErJVU4igA I2B98VT39N3ngn3H+uKu/Td54J9x/rirv03eeCfcf64q79N3ngn3H+uKu/Td54J9x/rirv03eeCf cf64q79N3ngn3H+uKu/Td54J9x/rirv03eeCfcf64q79N3ngn3H+uKp9hQmP/TOf9Hv/ADJxS+R8 CvUPy3/5R5v+Yh/+IrirKsVdirsVdiq5YpXR5EQtHH/eMOgxVbirsVdirsVdirLcKEx/6Zz/AKPf +ZOKXyPgV6h+W/8Ayjzf8xD/APEVxVlWKuxV2Ksf81earfRrf046SahIP3UXZR/O/t4DvirX5aef bmblpurmqcibe9NAOTmpjfp3Ox7YqzXUtLCAzW60UbvGO3uMVSvFXYq7FXYqy3ChMf8ApnP+j3/m Til8j4Feoflv/wAo83/MQ/8AxFcVZVirsVY/5q81W+jW/px0k1CQfuouyj+d/bwHfFXm1vb3mrXj 3Fw7NyblNM3UnwH+e2KsjhhjhjWONeKLsAMVZz5P84ceGm6k/wAOy29wx6eCOf1HFWRanpnGs8A+ Hq6Dt7jFUqxV2KuxVluFCY/9M5/0e/8AMnFL5HwK9Q/Lf/lHm/5iH/4iuKsqxVj/AJq81W+jW/px 0k1CQfuouyj+d/bwHfFXm1vb3mrXklxcSMxZuU0zdST2H+e2KsjhhjhjWONeKLsAMVX4q7FWbeT/ ADhx4abqT/DstvcMengjn9RxVkWp6ZxrPAPh6ug7e4xVKsVdirLcKEx/6Zz/AKPf+ZOKXyPgV6h+ W/8Ayjzf8xD/APEVxVPdXl1KOxc6bAJ7s/DGrMFVa/tHkRWnhirzmfyT5uurh57iIPNIeTyPKhJP 0HFVn/KvvM3++Y/+Ri/1xV3/ACr7zN/vmP8A5GL/AFxV3/KvvM3++Y/+Ri/1xV3/ACr7zN/vmP8A 5GL/AFxV3/KvvM3++Y/+Ri/1xV6T5H1LzHYWn6P12L1YYhS1uldXcAfsOK1I8Diqa3r2kknO3DLy +0hAAr7UOKofFWW4UJj/ANM5/wBHv/MnFL5HwK9Q/Lf/AJR5v+Yh/wDiK4qyrFXYq7FXYq7FXYq7 FXYq7FXYqy3ChMf+mc/6Pf8AmTil8j4Feoflv/yjzf8AMQ//ABFcVZVirsVdirsVdirsVdirsVdi rsVZbhQmP/TOf9Hv/MnFL5HwK9Q/Lf8A5R5v+Yh/+IriqO84aveaVpIubQqJTKqVYchQgnp9GKsJ /wCVheY/54v+RYxV3/KwvMf88X/IsYq7/lYXmP8Ani/5FjFXf8rC8x/zxf8AIsYq7/lYXmP+eL/k WMVd/wArC8x/zxf8ixirv+VheY/54v8AkWMVTryl5t1jVNYW1umQwlHYhUCmqjbfFWcYqy3ChMf+ mc/6Pf8AmTil8j4Feoflv/yjzf8AMQ//ABFcVTTzL5fvte04WNk0azCRZCZSVXioIO4DeOKsW/5V D5p/37af8jH/AOqeGld/yqHzT/v20/5GP/1TxpXf8qh80/79tP8AkY//AFTxpXf8qh80/wC/bT/k Y/8A1TxpXf8AKofNP+/bT/kY/wD1TxpXf8qh80/79tP+Rj/9U8aV3/KofNP+/bT/AJGP/wBU8aVM /Ln5fa5oeprf3kkDQhGQiJ2ZqsNtiq4FZZirLcKEx/6Zz/o9/wCZOKXyPgV6h+W//KPN/wAxD/8A EVxVm2k/71H/AFT/AAxCpzhQ7FXYq7FXYq7FXYqg9V/3kP8ArDFUmwJZbhQmP/TOf9Hv/MnFL5Hw K9Q/Lf8A5R5v+Yh/+IrirKsVdirsVdirsVdirsVdirsVdirLcKEx/wCmc/6Pf+ZOKXyPgV6h+W// ACjzf8xD/wDEVxVlWKuxV2KuxV2KuxV2KuxV2KuxVluFCY/9M5/0e/8AMnFL5HwK9Q/Lf/lHm/5i H/4iuKp5rGsWmk2guroOYi4T4ACakE9yPDFUk/5WN5f/AJZ/+AX/AJqxV3/KxvL/APLP/wAAv/NW Ku/5WN5f/ln/AOAX/mrFXf8AKxvL/wDLP/wC/wDNWKu/5WN5f/ln/wCAX/mrFXf8rG8v/wAs/wDw C/8ANWKu/wCVjeX/AOWf/gF/5qxVG6R5w0nVbwWlsJRKVLDmoAovXoTiqeYqy3ChMf8ApnP+j3/m Til8j4Feoflv/wAo83/MQ/8AxFcVb/Mb/lH1/wCM6f8AEWxV5jirsVdirsVdirsVdirJfy9/5SNP +MUn6sVepYqy3ChMf+mc/wCj3/mTil8j4Feoflv/AMo83/MQ/wDxFcVZtpP+9R/1T/DEKnOFDsVd irsVdirsVdiqD1X/AHkP+sMVSbAlluFCY/8ATOf9Hv8AzJxS+R8CvUPy3/5R5v8AmIf/AIiuKsut 7h4H5pStKb4qiP0tdeC/d/bjau/S114L939uNq79LXXgv3f242rv0tdeC/d/bjau/S114L939uNq 79LXXgv3f242rv0tdeC/d/bjaqc9/PNHwfjxrXYeGKofFWW4UJj/ANM5/wBHv/MnFL5HwK9Q/Lf/ AJR5v+Yh/wDiK4qyrFXYq7FXYq7FXYq7FXYq7FXYqy3ChMf+mc/6Pf8AmTil8j4Feoflv/yjzf8A MQ//ABFcVZVirsVdirsVdirsVdirsVdirsVZbhQmP/TOf9Hv/MnFL5HwK9Q/Lf8A5R5v+Yh/+Iri rf5jf8o+v/GdP+ItirzHFXYq7FXYq7FXYq7FWS/l7/ykaf8AGKT9WKvUsVZbhQmP/TOf9Hv/ADJx S+R8CvUPy3/5R5v+Yh/+IrirJptC0/W1+p36s0APqUVip5LsNx88VUf+VV+T/wDfEv8AyNbDSu/5 VX5P/wB8S/8AI1saV3/Kq/J/++Jf+RrY0rv+VV+T/wDfEv8AyNbGld/yqvyf/viX/ka2NK7/AJVX 5P8A98S/8jWxpXf8qr8n/wC+Jf8Aka2NKvi8i+XtGf67YxyJOvwAtIzCjddjiqvgVluFCY/9M5/0 e/8AMnFL5HwK9Q/Lf/lHm/5iH/4iuKsysJ44Z+b148SNt8VTH9K2ni33YUO/Stp4t92Ku/Stp4t9 2Ku/Stp4t92Ku/Stp4t92Ku/Stp4t92Ku/Stp4t92Koe+vrea3KITyqDuMUpdgVluFCY/wDTOf8A R7/zJxS+R8CvUPy3/wCUeb/mIf8A4iuKsqxV2KuxV2KuxV2KuxV2KuxV2KstwoTH/pnP+j3/AJk4 pfI+BXqH5b/8o83/ADEP/wARXFWVYq7FXYq7FXYq7FXYq7FXYq7FWW4UJj/0zn/R7/zJxS+R8CvU Py3/AOUeb/mIf/iK4qymg5LUngD8YWlSPaoIxVObfSLCWNZY5pJEYbbr/wA0jCqr+hLP+Z/vH9MV d+hLP+Z/vH9MVd+hLP8Amf7x/TFXfoSz/mf7x/TFXfoSz/mf7x/TFWjodof2pB9I/piqUXaWqy8b Z3dV2Z2KlSfagH34FUsVZbhQmP8A0zn/AEe/8ycUvkfAr1D8t/8AlHm/5iH/AOIrirKsVSPzP5cG rW3OCQwX0Y/dSAkBv8l6dvftirzi31LVNLvHtroyji3GaJmNVPiN/wDbxVkMV48sayRzMyMKghji q715/wDfjfecVd68/wDvxvvOKpJrGvT721vM3hJIGP3DFU+8meVrqbhqWpvJ6OzW9szH4/B3H8vg O/y6qs9xV2KstwoTH/pnP+j3/mTil8j4Feoflv8A8o83/MQ//EVxVlWKuxVj/mryrb6zb+pHSPUI x+6l7MP5H9vA9sVecW1zd6TdvbXKMoVuM0LdQfEf574qyKKWOWNZI2DIwqCMVSbV9XpytrZt+kkg /UMVTzyX5L9b09T1OP8Ac7NbWzD7Xg7j+XwHf5dVXoWKuxV2KstwoTH/AKZz/o9/5k4pfI+BXqH5 b/8AKPN/zEP/AMRXFWVYq7FXYqx/zV5Vt9Zt/UjpHqEY/dS9mH8j+3ge2KvMXk1DT2nsn5QuDxlj PUEeGKss8leTBOI9U1JKw7NbW7ft+DuP5fAd/l1VehYq7FXYq7FWW4UJj/0zn/R7/wAycUvkfAr1 D8t/+Ueb/mIf/iK4qyrFXYq7FXYqlepeW9I1G8gu7qEPNAfkHA6K4/aAP+dMVTPFW8VdirsVdirL cKEx/wCmc/6Pf+ZOKXyPgVmvlDzfpOkaSbW6EplMrP8AAoIoQB3I8MVTv/lZHl7+W4/4Bf8AmrFX f8rI8vfy3H/AL/zVirv+VkeXv5bj/gF/5qxV3/KyPL38tx/wC/8ANWKu/wCVkeXv5bj/AIBf+asV d/ysjy9/Lcf8Av8AzVirv+VkeXv5bj/gF/5qxV3/ACsjy9/Lcf8AAL/zVirv+VkeXv5bj/gF/wCa sVd/ysjy9/Lcf8Av/NWKp7/yuPyn/vu7/wCRaf8ANeKsj/5WJoH/ACrz9O8Z/qX6U+rceC+pz9Dl 05UpT3xV834q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq9G/wDKBf8Agxf9iuKv/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_end_left.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_end_left.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_end_left_selected.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_end_left_selected.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_end_middle.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_end_middle.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_end_right.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_end_right.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_end_right_selected.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_end_right_selected.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_middle.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_middle.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_middle_selected.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_nslider_vded_middle_selected.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_arrow.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_arrow.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ - - - - -]> - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_novideo.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_novideo.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion1.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion1.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion2.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion2.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion3.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion3.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion4.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion4.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion5.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion5.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion6.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion6.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion7.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion7.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion8.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_graf_ve_trans_slowmotion8.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_vded_end.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_vded_end.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_vded_playhead.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_vded_playhead.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_vded_scissors.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_vded_scissors.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_vded_start.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_vded_start.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_vded_timeline_selected.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_vded_timeline_selected.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ - - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_mmc.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_mmc.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - - - - -]> - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_mmc_non.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_mmc_non.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - - - - -]> - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_mms_non.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_mms_non.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ - - - - -]> - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_mms_ok.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_mms_ok.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ - - - - -]> - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_phone.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_phone.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ - - - - -]> - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_phone_non.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_phone_non.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ - - - - -]> - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_videolength.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_indi_ve_videolength.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ - - - - -]> - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/data/svg/qgn_prop_ve_pause.svg --- a/videditor/VideoEditorUiComponents/data/svg/qgn_prop_ve_pause.svg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ - - - - -]> - - - - - - - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/group/VideoEditorUiComponents.mmp --- a/videditor/VideoEditorUiComponents/group/VideoEditorUiComponents.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// To get the APP_LAYER_SYSTEMINCLUDE-definition -#include - -#include -#include "../../Group/buildconfig.hrh" - -#if defined( __DEBUG_ON__ ) -MACRO DEBUG_ON -#endif -#if defined( __DEBUG_ON_ALWAYS__ ) -MACRO DEBUG_ON_ALWAYS -#endif -#if defined(__DEBUG_ON__) || defined(__DEBUG_ON_ALWAYS__) -LIBRARY flogger.lib -#endif - - -TARGET VideoEditorUiComponents.dll -TARGETTYPE DLL -CAPABILITY CAP_GENERAL_DLL -UID 0x1000008d 0xA0000305 -VENDORID VID_DEFAULT - - -USERINCLUDE ../inc -USERINCLUDE ../../VideoEditorCommon/inc - -// Default system include paths for application layer modules. -APP_LAYER_SYSTEMINCLUDE - -SOURCEPATH ../src -SOURCE VeiCutterbar.cpp -// Removed to disable Manual Video Editor -//SOURCE VeiEditVideoLabelNavi.cpp -SOURCE VeiTimeLabelNavi.cpp -SOURCE VeiTextDisplay.cpp -SOURCE VeiVideoDisplay.cpp -// Removed to disable Manual Video Editor -//SOURCE VeiSlider.cpp -SOURCE VeiErrorUi.cpp -SOURCE ExtProgressDialog.cpp -SOURCE ExtProgressContainer.cpp -SOURCE ExtProgressAnimationControl.cpp - - -SOURCEPATH ../data -START RESOURCE VideoEditorUiComponents.rss -HEADER -TARGET VideoEditorUiComponents.rsc -TARGETPATH RESOURCE_FILES_DIR -LANGUAGE_IDS -END - -LIBRARY apparc.lib -LIBRARY aknicon.lib -LIBRARY AknLayout2.lib -LIBRARY aknlayout2adaptation.lib -LIBRARY aknlayout2scalable.lib -LIBRARY aknskins.lib -LIBRARY avkon.lib -LIBRARY bafl.lib -LIBRARY bitgdi.lib -LIBRARY BitmapTransforms.lib -LIBRARY bmpanim.lib -LIBRARY cdlengine.lib -LIBRARY commonengine.lib -LIBRARY commonui.lib -LIBRARY cone.lib -LIBRARY efsrv.lib -LIBRARY eikcdlg.lib -LIBRARY eikcore.lib -LIBRARY eikcoctl.lib -LIBRARY eikctl.lib -LIBRARY eikdlg.lib -LIBRARY estor.lib -LIBRARY euser.lib -LIBRARY fbscli.lib -LIBRARY fontutils.lib -LIBRARY gdi.lib -LIBRARY ImageConversion.lib -LIBRARY MGFetch.lib -LIBRARY mediaclientvideo.lib -LIBRARY platformenv.lib -LIBRARY ServiceHandler.lib -LIBRARY VideoEditorCommon.lib -LIBRARY ws32.lib -LIBRARY mmfcontrollerframework.lib - -#ifdef RD_TACTILE_FEEDBACK -LIBRARY touchfeedback.lib -#endif /* RD_TACTILE_FEEDBACK */ - -NOSTRICTDEF - - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/group/bld.inf --- a/videditor/VideoEditorUiComponents/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include - -#include "../../Group/buildconfig.hrh" - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -../rom/VideoEditorUiComponents.iby CORE_APP_LAYER_IBY_EXPORT_PATH(VideoEditorUiComponents.iby) -../rom/VideoEditorUiComponents_resource.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(VideoEditorUiComponents_resource.iby) - - -PRJ_EXTENSIONS -START EXTENSION s60/mifconv -OPTION TARGETFILE VideoEditorUiComponents.mif -OPTION HEADERFILE VideoEditorUiComponents.mbg -OPTION SOURCEFILE iconlist.txt -END - - -PRJ_MMPFILES -../Group/VideoEditorUiComponents.mmp - -PRJ_TESTMMPFILES -//../tsrc/ProgNote/group/ProgNote.mmp - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/group/iconlist.txt --- a/videditor/VideoEditorUiComponents/group/iconlist.txt Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ --c24,8 qgn_indi_vded_scissors --c24,8 qgn_indi_vded_play --c24,8 qgn_indi_vded2_play --c24,8 qgn_indi_vded2_pause --c24,8 qgn_indi_vded_pause --c24,8 qgn_indi_vded_start --c24,8 qgn_indi_vded_end --c24,8 qgn_indi_vded_volume_up_down --c24,8 qgn_indi_vded2_start --c24,8 qgn_indi_vded2_start_pressed --c24,8 qgn_indi_vded2_end --c24,8 qgn_indi_vded2_end_pressed --c24,8 qgn_indi_vded2_playhead --c24,8 qgn_indi_vded2_playhead_pressed --c24,8 qgn_graf_nslider_vded2_end_left --c24,8 qgn_graf_nslider_vded2_end_right --c24,8 qgn_graf_nslider_vded2_middle --c24,8 qgn_graf_nslider_vded2_end_left_selected --c24,8 qgn_graf_nslider_vded2_end_right_selected --c24,8 qgn_graf_nslider_vded2_middle_selected --c24,8 qgn_graf_nslider_vded_end_left --c24,8 qgn_graf_nslider_vded_end_left_selected --c24,8 qgn_graf_nslider_vded_end_middle --c24,8 qgn_graf_nslider_vded_end_right --c24,8 qgn_graf_nslider_vded_end_right_selected --c24,8 qgn_graf_nslider_vded_middle --c24,8 qgn_graf_nslider_vded_middle_selected --c24,8 qgn_indi_vded_playhead --c24,8 qgn_indi_vded_timeline_selected --c24,8 qgn_indi_volume_arrow_up diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/ExtProgressAnimationControl.h --- a/videditor/VideoEditorUiComponents/inc/ExtProgressAnimationControl.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,201 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* -* File: ExtProgressAnimationControl.h -* Created: 17-10-2005 -* Author: -* -*/ - -#ifndef EXTPROGRESSANIMATIONCONTROL_H -#define EXTPROGRESSANIMATIONCONTROL_H - -// INCLUDES -#include - -// FORWARD DECLARATIONS -class CAknBitmapAnimation; -class CAknsBasicBackgroundControlContext; - -// CLASS DECLARATION - -/** CLASS: CExtProgressAnimationControl -* -* CExtProgressAnimationControl represent animated transition using two -* thumbnail images. The thumbnails and transition type can be set -* to the control. -*/ -NONSHARABLE_CLASS( CExtProgressAnimationControl ) : public CCoeControl, public MCoeControlObserver -{ - -public: - -/** @name Methods:*/ -//@{ - /** NewL factory method, pops cleanup stack - * - * @param aRect - control rectangle - * @param aParent - pointer to window owning control - * @return pointer to created CExtProgressAnimationControl object - */ - static CExtProgressAnimationControl * NewL ( - const TRect & aRect, - const CCoeControl * aParent - ); - - /** Destructor - * - * @param - - * @return - - */ - ~CExtProgressAnimationControl(); - - /** StartAnimationL - * - * Starts animation routine. - * - * @param - - * @return - - */ - void StartAnimationL( TInt aFrameIntervalInMilliSeconds=-1 ); - - /** SetAnimationResourceId - * - * @param - - * @return - - */ - void SetAnimationResourceId(const TInt &aResourceId); - - /** MinimumSize - * - * @param - - * @return - - */ - //TSize MinimumSize(); - - /** SetAnimationResourceId - * - * @param - - * @return - - */ - void HandleControlEventL(CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/); - - /** StopAnimation - * - * @param - - * @return - - */ - void StopAnimation(); - - /** SetFrameIntervalL - * - * @param - - * @return - - */ - void SetFrameIntervalL(TInt aFrameIntervalInMilliSeconds); - -//@} - - -private: - -/** @name Methods:*/ -//@{ - - /** Default constructor - * - * @param - - * @return - - */ - CExtProgressAnimationControl(); - - /** ConstructL - * - * Second phase constructor - * - * @param aRect - control rectangle - * @param aParent - pointer to window owning control - * @param aLeft - left icon - * @param aRight - right icon - * @return - - */ - void ConstructL ( - const TRect & aRect, - const CCoeControl * aParent - ); - - /** SizeChanged - * - * @see CCoeControl - */ - void SizeChanged(); - - /** CountComponentControls - * - * @see CCoeControl - */ - //TInt CountComponentControls() const; - - /** ComponentControl - * - * @see CCoeControl - */ - //CCoeControl * ComponentControl (TInt aIndex) const; - - /** Draw - * - * @see CCoeControl - */ - void Draw (const TRect& aRect) const; - - /** - * From CoeControl, MopSupplyObject. - * - * @param aId - */ - virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); - -//@} - -/** @name Members:*/ -//@{ - -//@} - -/** @name Members:*/ -//@{ - - TBool iAnimationOn; - CAknBitmapAnimation* iAnimation; - TInt iAnimationSpeedInMilliSeconds; - TInt iBorderWidth; - - TInt iAnimationResourceId; - - /** Background context. Skin stuff. */ - CAknsBasicBackgroundControlContext* iBgContext; - -//@} - -}; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/ExtProgressContainer.h --- a/videditor/VideoEditorUiComponents/inc/ExtProgressContainer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,172 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* -* File: CExtProgressContainer.h -* Created: 17-10-2005 -* Author: -* -*/ - -#ifndef EXTPROGRESSCONTAINER_H -#define EXTPROGRESSCONTAINER_H - -// INCLUDES -#include -#include - -// FORWARD DECLARATIONS -class CEikProgressInfo; -class CExtProgressAnimationControl; -class CFbsBitmap; -class CEikLabel; -class CAknsBasicBackgroundControlContext; - -/* CLASS: CExtProgressContainer -* -* -*/ -NONSHARABLE_CLASS( CExtProgressContainer ) : public CCoeControl, public MCoeControlObserver -{ - -public: - - /** NewL factory method, does not pop cleanupstack - * - * @param - - * @return pointer to created CExtProgressContainer object - */ - static CExtProgressContainer * NewL (const TRect& aRect, - CCoeControl* aParent); - - /** Destructor - * - * @param - - * @return - - */ - virtual ~CExtProgressContainer (); - - /* Second phase constructor - * - * @param - - * @return - - */ - void ConstructL (const TRect& aRect, CCoeControl* aParent); - - /* GetProgressInfoL - * - * @param - - * @return - - */ - CEikProgressInfo* GetProgressInfoL(); - - /* GetAnimationControlL - * - * @param - - * @return - - */ - CExtProgressAnimationControl* GetAnimationControlL(); - - /* SetTextL - * - * @param aText - label text - * @return - - */ - void SetTextL(const TDesC &aText); - - // Test function - void Test(); - - - -protected: - - /** CountComponentControls - * - * @see CCoeControl - * - */ - TInt CountComponentControls() const; - - /** ComponentControl - * - * @see CCoeControl - * - */ - CCoeControl* ComponentControl(TInt aIndex) const; - - /** SizeChanged - * - * @see CCoeControl - * - */ - void SizeChanged(); - - /** HandleControlEventL - * - * @see CCoeControl - * - */ - void HandleControlEventL(CCoeControl* /*aControl*/,TCoeEvent aEventType); - - /** Draw - * - * - * @see CCoeControl - * - */ - void Draw(const TRect& aRect) const; - - /** - * From CoeControl, MopSupplyObject. - * - * @param aId - */ - virtual TTypeUid::Ptr MopSupplyObject( TTypeUid aId ); - - /** MinimumSize - * - * - * @see CCoeControl - * - */ - TSize MinimumSize(); - -private: - - /** Default constructor, cannot leave. - * - * @param - - * @return - - */ - CExtProgressContainer (); - -private: // data - - CEikLabel* iLabel; - CEikProgressInfo* iProgressInfo; - CExtProgressAnimationControl* iAnimationControl; - - /** Background context. Skin stuff. */ - CAknsBasicBackgroundControlContext* iBgContext; -}; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/ExtProgressDialog.h --- a/videditor/VideoEditorUiComponents/inc/ExtProgressDialog.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,210 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* -* File: ExtProgressDialog.h -* Created: 17-10-2005 -* Author: -* -*/ - -#ifndef EXTPROGRESSDIALOG_H -#define EXTPROGRESSDIALOG_H - -#include -#include -#include - -// Forward Declarations -class CFbsBitmap; -class CEikLabel; -class CEikProgressInfo; -class CExtProgressContainer; -class CExtProgressNoteAnimationControl; - -/* CLASS: MExtProgressDialogCallback -* -* -*/ -class MExtProgressDialogCallback -{ -public: - - /** DialogDismissedL - * - * Callback method. Gets called when a dialog is dismissed. - * - * @param aButtonId - id of the button pressed - * @return - - */ - virtual void DialogDismissedL( TInt aButtonId ) = 0; - -}; - -/* CLASS: CExtProgressDialog -* -* -* Usage: -* -* iProgNote = new (ELeave) CExtProgressDialog (&iProgNote, iBitmap1, iBitmap2); -* iProgNote->PrepareLC(R_WAIT_DIALOG); -* iProgNote->GetProgressInfoL()->SetFinalValue (aFinalValue); -* iProgNote->StartAnimationL(); -* iProgNote->SetTextL( aPrompt ); -* iProgNote->SetCallback (this); -* iProgNote->RunLD(); -* -* Resource definition: -* -* RESOURCE DIALOG r_wait_dialog -* { -* flags = EAknWaitNoteFlags; -* buttons = R_AVKON_SOFTKEYS_CANCEL; -* } -* -*/ -class CExtProgressDialog : public CAknDialog -{ - -public: - - /** Constructor - * - * @param aBitmap - background bitmap - * @param aSelectedItem - selected item - * @param aItems - Plugin info item array - * @return - - */ - IMPORT_C CExtProgressDialog(CExtProgressDialog** aSelfPtr); - - /** Destructor - * - * @param - - * @return - - */ - IMPORT_C ~CExtProgressDialog(); - - /** PrepareLC - * - * @param aResourceId - resource id - * @return - - */ - IMPORT_C void PrepareLC(TInt aResourceId); - - /** SetCallback - * - * @param aCallback - callback - * @return - - */ - IMPORT_C void SetCallback(MExtProgressDialogCallback* aCallback); - - /** GetProgressInfoL - * - * @param - - * @return - progress info - */ - IMPORT_C CEikProgressInfo* GetProgressInfoL(); - - /** StartAnimationL - * - * @param - - * @return - - */ - IMPORT_C void StartAnimationL(); - - /** SetTextL - * - * @param aText - title text - * @return - - */ - IMPORT_C void SetTextL(const TDesC &aText); - - /** SetAnimationResourceId - * - * @param aResourceId - animation resource id - * @return - - */ - IMPORT_C void SetAnimationResourceIdL(const TInt &aResourceId); - -protected: - - /** OkToExitL - * - * From CEikDialog update member variables . - * @param aButtonId The ID of the button that was activated. - * @return Should return ETrue if the dialog should exit, - * and EFalse if it should not - */ - TBool OkToExitL( TInt aButtonId ); - - /** OfferKeyEventL - * - * @see CCoeControl - * - */ - TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); - - /** HandleControlEventL - * - * @see CCoeControl - * - */ - void HandleControlEventL(CCoeControl* /*aControl*/,TCoeEvent aEventType); - - /** PreLayoutDynInitL - * - * @see CEikDialog - * - */ - void PreLayoutDynInitL(); - - /** SetSizeAndPosition - * - * @see CEikDialog - * - */ - void SetSizeAndPosition(const TSize &aSize); - - /** CountComponentControls - * - * @see CCoeControl - * - */ - TInt CountComponentControls() const; - - /** ComponentControl - * - * @see CCoeControl - * - */ - CCoeControl* ComponentControl(TInt aIndex) const; - -private: - - CExtProgressDialog** iSelfPtr; - - MExtProgressDialogCallback* iCallback; - RConeResourceLoader iResLoader; - - CExtProgressContainer* iContainer; -}; - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/VeiCutterBar.h --- a/videditor/VideoEditorUiComponents/inc/VeiCutterBar.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,351 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Declares CVeiCutterBar control for the Video Editor. -* -*/ - - - -#ifndef VEICUTTERBAR_H -#define VEICUTTERBAR_H - -#include - -class CPeriodic; - -/** - * CVeiCutterBar control class. - */ -class CVeiCutterBar : public CCoeControl, public MCoeControlObserver - { - public: - /** - * CVeiCutterBar components. - */ - enum TCutterBarComponent - { - EScissorsIcon = 1, - EProgressBar, - ESliderLeftEndIcon, - ESliderMiddleIcon, - ESliderRightEndIcon, - ESliderSelectedLeftEndIcon, - ESliderSelectedMiddleIcon, - ESliderSelectedRightEndIcon, - EPlayheadIcon, - ECutAreaBorderIcon, - EStartMarkIcon, - EEndMarkIcon, - EPlayheadTouch, - EStartMarkTouch, - EEndMarkTouch - }; - - // CVeiCutterBar icons that can be in pressed state - enum TCutterBarPressedIcon - { - ENoPressedIcon = 0, - EPressedPlayheadTouch, - EPressedStartMarkTouch, - EPressedEndMarkTouch - }; - public: - /** - * Destructor. - */ - IMPORT_C virtual ~CVeiCutterBar(); - - /** - * Static factory method. - * - * @param aCont pointer to the container - * - * @return the created CVeiCutterBar object - */ - IMPORT_C static CVeiCutterBar* NewL( const CCoeControl* aParent, TBool aDrawBorder = EFalse ); - - /** - * Static factory method. Leaves the created object in the cleanup - * stack. - * - * @param aCont pointer to the container - * - * @return the created CVeiCutterBar object - */ - IMPORT_C static CVeiCutterBar* NewLC( const CCoeControl* aParent, TBool aDrawBorder = EFalse ); - - public: - - IMPORT_C virtual void SetPlayHeadVisible( TBool aVisible ); - /** - * Sets the mark in point. - * - * @param aIn new In-point - */ - IMPORT_C virtual void SetInPoint( const TTimeIntervalMicroSeconds& aIn ); - - /** - * Sets the mark out point. - * - * @param aOut new Out-point - */ - IMPORT_C virtual void SetOutPoint( const TTimeIntervalMicroSeconds& aOut ); - - /** - * Sets the "finished" status, i.e., if the clip is finished, the - * leftover areas outside in/out points are grayed out. - * - * @param aStatus ETrue for "is finished"; - * EFalse for "not finished" - */ - IMPORT_C virtual void SetFinishedStatus( TBool aStatus ); - - IMPORT_C virtual void SetTotalDuration( const TTimeIntervalMicroSeconds& aDuration ); - - IMPORT_C virtual void SetCurrentPoint( TInt aLocation ); - - IMPORT_C virtual void Dim( TBool aDimmed ); - - /** - * Getter for iCutBarRect - * CVeiCutterBar's rect covers also the scissor icon area but iCutBarRect - * is the visible area of the progress bar - * - * @param - - * - * @return the progress bar rect - */ - IMPORT_C TRect ProgressBarRect(); - - /** - * Returns the playhead rectangle. - * If the playheadhasn't been set, returns an empty rect - * - * @param - - * - * @return playhead rect or empty rect - */ - IMPORT_C TRect PlayHeadRect(); - - /** - * Returns the start mark rectangle. - * If the start mark hasn't been set, returns an empty rect - * - * @param - - * - * @return start mark rect or empty rect - */ - IMPORT_C TRect StartMarkRect(); - - /** - * Returns the end mark rectangle. - * If the end mark hasn't been set, returns an empty rect - * - * @param - - * - * @return end mark rect or empty rect - */ - IMPORT_C TRect EndMarkRect(); - - /** - * Returns the start mark position in progress bar - * - * @param - - * - * @return the start mark position - */ - IMPORT_C TUint StartMarkPoint(); - - /** - * Returns the end mark position in progress bar - * - * @param - - * - * @return the end mark position - */ - IMPORT_C TUint EndMarkPoint(); - - /** - * Sets the rect of a component - * - * @param aComponentIndex specifies the component - * @param aRect the rect that the component is set - * - * @return the end mark position - */ - IMPORT_C void SetComponentRect(TCutterBarComponent aComponentIndex, TRect aRect); - - /** - * Sets one of the cutterbar components to pressed state. This function - * can also be used to set ENoPressedIcon as pressed component (= none - * of the components is pressed) - * - * @param aComponentIndex specifies the component that should be - * set to pressed state - * - * @return - - */ - IMPORT_C void SetPressedComponent(TCutterBarPressedIcon aComponentIndex); - - public: - - /** - * Handles key events from framework. - * - * @param aKeyEvent the key event - * @param aType the type of key event - * - * @return always EKeyWasNotConsumed - */ - TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, - TEventCode aType); - - private: - - /** - * Default constructor. - * - * @param aCont pointer to the container - */ - void ConstructL( const CCoeControl* aParent, TBool aDrawBorder ); - - /** - * From CoeControl,SizeChanged. - */ - void SizeChanged(); - - /** - * From CoeControl,CountComponentControls. - * - * @return number of component controls in this control - */ - TInt CountComponentControls() const; - - /** - * From CCoeControl,ComponentControl. - * - * @param aIndex index of the control to return - */ - CCoeControl* ComponentControl(TInt aIndex) const; - - /** - * From CCoeControl,Draw. - * - * @param aRect rectangle to draw - */ - void Draw(const TRect& aRect) const; - - /** - * From MCoeControlObserver, called when there is a control event - * to handle. - * - * @param aControl control originating the event - * @param aEventType event type - */ - void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType); - - // for test use - void DrawCoordinate(TInt aX, TInt aY, TInt aData1, TInt aData2, const TDesC& aInfo) const; - - /** - * Calculates the rect of the slider area that the user - * has selected to be cut - * - * @param - - * - * @return rect of the area to be cut - */ - TRect CVeiCutterBar::CalculateCutAreaRect() const; - - private: - - /** In point. */ - TUint iInPoint; - - /** Out point. */ - TUint iOutPoint; - - TUint iTotalDuration; - /** Current point. This is where the vertical bar is drawn. */ - TUint iCurrentPoint; - - /** Flag for marking when the editing is finished. */ - TBool iFinished; - - TRect iCutBarRect; - TRect iScissorsIconRect; - - TBool iDimmed; - TBool iDrawBorder; - TBool iDrawPlayHead; - - /** Slider Graphics */ - CFbsBitmap* iScissorsIcon; - CFbsBitmap* iScissorsIconMask; - CFbsBitmap* iSliderLeftEndIcon; - CFbsBitmap* iSliderLeftEndIconMask; - CFbsBitmap* iSliderMiddleIcon; - CFbsBitmap* iSliderMiddleIconMask; - CFbsBitmap* iSliderRightEndIcon; - CFbsBitmap* iSliderRightEndIconMask; - CFbsBitmap* iSliderSelectedLeftEndIcon; - CFbsBitmap* iSliderSelectedLeftEndIconMask; - CFbsBitmap* iSliderSelectedMiddleIcon; - CFbsBitmap* iSliderSelectedMiddleIconMask; - CFbsBitmap* iSliderSelectedRightEndIcon; - CFbsBitmap* iSliderSelectedRightEndIconMask; - CFbsBitmap* iPlayheadIcon; - CFbsBitmap* iPlayheadIconMask; - CFbsBitmap* iPlayheadIconPressed; - CFbsBitmap* iPlayheadIconPressedMask; - CFbsBitmap* iStartMarkIcon; - CFbsBitmap* iStartMarkIconMask; - CFbsBitmap* iStartMarkIconPressed; - CFbsBitmap* iStartMarkIconPressedMask; - CFbsBitmap* iEndMarkIcon; - CFbsBitmap* iEndMarkIconMask; - CFbsBitmap* iEndMarkIconPressed; - CFbsBitmap* iEndMarkIconPressedMask; - CFbsBitmap* iCutAreaBorderIcon; - CFbsBitmap* iCutAreaBorderIconMask; - - /** Rects for the slider graphics */ - TRect iSliderLeftEndIconRect; - TRect iSliderRightEndIconRect; - TRect iSliderMiddleIconRect; - TRect iSliderSelectedLeftEndIconRect; - TRect iSliderSelectedMiddleIconRect; - TRect iSliderSelectedRightEndIconRect; - TRect iPlayheadIconRect; - TRect iCutAreaBorderIconRect; - - /** Start mark rect. Position moves dynamically. */ - TRect iStartMarkRect; - - /** End mark rect. Position moves dynamically. */ - TRect iEndMarkRect; - - TRect iStartMarkTouchRect; - TRect iEndMarkTouchRect; - TRect iPlayheadTouchRect; - - // Tells what cutter bar component is pressed if any - TCutterBarPressedIcon iPressedComponent; - - }; -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/VeiEditVideoLabelNavi.h --- a/videditor/VideoEditorUiComponents/inc/VeiEditVideoLabelNavi.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,234 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEIEDITVIDEOLABELNAVI_H__ -#define __VEIEDITVIDEOLABELNAVI_H__ - -#include -#include -#include -#include - -// Forward declarations -class CAknLayoutFont; - -/** -* CVeiEditVideoLabelNavi. Navilabel with envelope and time. -* -*/ - -class CVeiEditVideoLabelNavi : public CCoeControl - { -public: - /** - * LabelNavi state. - */ - enum TLabelNaviState - { - EStateInitializing = 1, - EStateEditView, - EStateTrimForMmsView - }; -public: - /** - * Destructor. - */ - IMPORT_C virtual ~CVeiEditVideoLabelNavi(); - - /** - * Static factory method. - * - * @return the created CVeiEditVideoLabelNavi object - */ - IMPORT_C static CVeiEditVideoLabelNavi* NewL(); - - /** - * Static factory method. Leaves the created object in the cleanup - * stack. - * - * @return the created CVeiEditVideoLabelNavi object - */ - IMPORT_C static CVeiEditVideoLabelNavi* NewLC(); - - /** - * Set MMS envelope without red line or with it. - */ - IMPORT_C void SetMmsAvailableL( TBool aIsAvailable ); - - /** - * - */ - IMPORT_C void SetMemoryAvailableL( TBool aIsAvailable ); - - /** - * Set memory in use Phone/MMC. - */ - IMPORT_C void SetMemoryInUseL( TBool aPhoneMemory ); - - /** - * - */ - IMPORT_C TInt GetMaxMmsSize() const; - -public: - /** - * Set movie duration. - * @param aDuration in microseconds - */ - void SetDurationLabelL( const TInt64& aDuration ); - - /** - * Set movie size. - * @param aSize in kB. - */ - void SetSizeLabelL( const TUint& aSize ); - - /** - * Set whether editview or trimformms-view - * @param aState - */ - void SetState( CVeiEditVideoLabelNavi::TLabelNaviState aState ); - - /** - * Set whether editview or trimformms-view - * @param aState - */ - TBool IsMMSAvailable() const; - - -protected: - /** - * From CCoeControl. Handle the size change events. - */ - void SizeChanged(); - - /** - * From CCoeControl. Draw a control. - * @param aRect The region of the control to be redrawn. - */ - void Draw(const TRect& aRect) const; - - /** - * From CCoeControl. Handles a change to the control's resources. - * @param aType A message UID value. - */ - void HandleResourceChange(TInt aType); - -private: - /** - * Default constructor. - */ - void ConstructL(); - - /** - * Constructor. - */ - CVeiEditVideoLabelNavi(); - - /** - * Completes construction after session to the messaging serve has been opened. - */ - void CompleteConstructL(); - - /** - * Load the icon bitmaps. - */ - void LoadBitmapsL(); - - /** - * Delete the icon bitmaps. - */ - void DeleteBitmaps(); - -private: - /** Movie duration. */ - TInt64 iStoryboardDuration; - - /** Movie size. */ - TInt iStoryboardSize; - - /** Layouts for text. */ - TAknLayoutText iTextLayout[3]; - - /** Layouts for icons. */ - TAknLayoutRect iBitmapLayout[3]; - - /** MMS available bitmap. */ - CFbsBitmap* iMmsBitmap; - /** MMS available bitmap mask. */ - CFbsBitmap* iMmsBitmapMask; - /** MMS not available bitmap. */ - CFbsBitmap* iNoMmsBitmap; - /** MMS not available bitmap mask. */ - CFbsBitmap* iNoMmsBitmapMask; - - /** MMS available flag. */ - TBool iMmsAvailable; - /** MMS Max size. */ - TInt iMmsMaxSize; - - /** Current state. */ - TLabelNaviState iState; - - /** Hard disk available bitmap. */ - CFbsBitmap* iPhoneMemoryBitmap; - /** Hard disk available bitmap mask. */ - CFbsBitmap* iPhoneMemoryBitmapMask; - - /** Hard disk not available bitmap. */ - CFbsBitmap* iNoPhoneMemoryBitmap; - /** Hard disk not available bitmap mask. */ - CFbsBitmap* iNoPhoneMemoryBitmapMask; - - /** Hard disk available flag. */ - TBool iPhoneMemoryAvailable; - - /** Hard disk available bitmap. */ - CFbsBitmap* iMMCBitmap; - /** Hard disk available bitmap mask. */ - CFbsBitmap* iMMCBitmapMask; - - /** Hard disk not available bitmap. */ - CFbsBitmap* iNoMMCBitmap; - /** Hard disk not available bitmap mask. */ - CFbsBitmap* iNoMMCBitmapMask; - - - /** Hard disk available flag. */ - TBool iMMCAvailable; - - /** Whether phone memory or memory card in use. */ - TBool iPhoneMemory; - - /** Whether is enough memory */ - TBool iMemoryAvailable; - - /** Time bitmap. */ - CFbsBitmap* iTimeBitmap; - - /** Time bitmap mask. */ - CFbsBitmap* iTimeBitmapMask; - - RConeResourceLoader iResLoader; - - CAknLayoutFont* iCustomFont; - }; - -#endif - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/VeiErrorUi.h --- a/videditor/VideoEditorUiComponents/inc/VeiErrorUi.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VEIERRORUI_H -#define VEIERRORUI_H - -// INCLUDES -#include -#include -#include "VideoEditorCommon.h" - -// FORWARD DECLARATIONS -class CErrorUI; -class CCoeEnv; - -/** CLASS: CVeiErrorUI -* -* Extended error UI. -* -*/ -NONSHARABLE_CLASS( CVeiErrorUI ) : public CBase -{ -public: - - /** @name Methods:*/ - //@{ - - /** - * Destructor - */ - CVeiErrorUI::~CVeiErrorUI(); - - /** - * Static factory constructor. - * - * @param aCoeEnv - * @return created instance - */ - IMPORT_C static CVeiErrorUI* NewL( CCoeEnv& aCoeEnv ); - - /** - * Shows global error note for given error. - * There are empirically tested error codes for which platform shows something - * For other ones platform does not show anything and for them default string is showed. - * These error codes must be individually tested for every phone model. - * - * @param aError standard error code - * @return error code if showing the note fails, or KErrNone - */ - IMPORT_C TInt ShowGlobalErrorNote( TInt aError ) const; - - /** - * Shows error note with given message. - * - * @param aCoeEnv No description. - * @param aResourceId No description. - * @param aError No description. - * @return error code if showing the note fails, or KErrNone - */ - IMPORT_C static TInt ShowErrorNote( CCoeEnv& aCoeEnv, const TInt aResourceId = 0, TInt aError = 0 ); - - //@} - -private: - - /** @name Methods:*/ - //@{ - - /** - * C++ constructor. - */ - CVeiErrorUI( CCoeEnv& aCoeEnv ); - - /** - * Second-phase constructor. - */ - void ConstructL(); - - //@} - -private: - - /** @name Members:*/ - //@{ - - CCoeEnv& iCoeEnv; - RConeResourceLoader iResLoader; - CErrorUI* iErrorUI; - - //@} -}; - -#endif - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/VeiSlider.h --- a/videditor/VideoEditorUiComponents/inc/VeiSlider.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,346 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* -* File: VeiSlider.h -* Created: 30-10-2004 -* Author: -* -*/ - -#ifndef __VEISLIDER_H__ -#define __VEISLIDER_H__ - -#include - -class CFbsBitmap; - -/*! - @class CVeiSlider - @discussion Simple slider control base class. - */ - -class CVeiSlider : public CCoeControl - { - public: - - /*! - @function ~CVeiSlider - @discussion Destroy the object and release all memory objects - */ - IMPORT_C ~CVeiSlider(); - - public: // new functions - - /*! - @function SetMinimum - @param aValue the new minimum value - @discussion Sets the minimum value of the slider - */ - IMPORT_C void SetMinimum(TInt aValue); - - /*! - @function SetMaximum - @param aValue the new maximum value - @discussion Sets the maximum value of the slider - */ - IMPORT_C void SetMaximum(TInt aValue); - - /*! - @function SetStepL - @param aValue the new step value - @discussion Sets the step of the slider - */ - IMPORT_C void SetStep(TUint aValue); - - /*! - @function SetStepAmount - @param aValue the new step amount - @discussion Sets the number of steps in the slider - */ - IMPORT_C void SetStepAmount(TUint8 aValue); - - /*! - @function SetPosition - @discussion Sets the position of the slider. Panics if the position is out of bounds. - */ - IMPORT_C void SetPosition(TInt aValue); - - /*! - @function Minimum - @discussion Gets the minimum value of the slider - @return minimum value - */ - IMPORT_C TInt Minimum() const; - - /*! - @function Maximum - @discussion Gets the maximum value of the slider - @return maximum value - */ - IMPORT_C TInt Maximum() const; - - /*! - @function Step - @discussion Gets the step of the slider - @return current step - */ - IMPORT_C TInt Step() const; - - /*! - @function SliderPosition - @discussion Gets the position of the slider - @return current position - */ - IMPORT_C TInt SliderPosition() const; - - /*! - @function Increment - @discussion Increments the slider - */ - IMPORT_C void Increment(); - - /*! - @function Decrement - @discussion Decrements the slider - */ - IMPORT_C void Decrement(); - - /*! - @function MinimumSize - @discussion Gets the minimum size of this component - @return a minimum size of the control - */ - virtual TSize MinimumSize() = 0; - - protected: - - /*! - @function CVeiSlider - @discussion Constructs this object - */ - CVeiSlider(); - - /*! - @function LoadBitmapL - @discussion Loads one bitmap and its mask - */ - void LoadBitmapL( - CFbsBitmap*& aBitmap, - CFbsBitmap*& aMask, - TInt aBitmapIndex, - TInt aMaskIndex - ) const; - - public: // from CoeControl - - /*! - @function CountComponentControls - @return Number of component controls - */ - virtual TInt CountComponentControls() const; - - /*! - @function ComponentControl. - @param aIndex index of the component control - @return Pointer to component control - */ - virtual CCoeControl* ComponentControl(TInt aIndex) const; - - - protected: // data - - /// bitmap holding the slider background - CFbsBitmap* iSliderBg; - - /// mask for the slider background - CFbsBitmap* iSliderBgMask; - - /// bitmap holding the slider tab that moves - CFbsBitmap* iSliderTab; - - /// mask for the slider tab - CFbsBitmap* iSliderTabMask; - - private: // data - - /// minimum value of the slider - TInt iMinimumValue; - - /// maximum value of the slider - TInt iMaximumValue; - - /// step value - TUint iStep; - - /// number of steps - TUint8 iNumberOfSteps; - - /// current position - TInt iPosition; - - }; - - - -/*! - @class CVeiVerticalSlider - @discussion Vertical slider control - */ - -NONSHARABLE_CLASS( CVeiVerticalSlider ) : public CVeiSlider - { - public: - - /*! - @function NewL - @discussion Create a CVeiVerticalSlider object, which will draw itself to aRect - @param aRect the rectangle this view will be drawn to - @return a pointer to the created instance of CVeiVerticalSlider - */ - IMPORT_C static CVeiVerticalSlider* NewL(const TRect& aRect, const CCoeControl& aControl); - - /*! - @function NewLC - @discussion Create a CVeiSlider object, which will draw itself to aRect - @param aRect the rectangle this view will be drawn to - @return a pointer to the created instance of CVeiSlider - */ - IMPORT_C static CVeiVerticalSlider* NewLC(const TRect& aRect, const CCoeControl& aControl); - - /*! - @function ~CVeiSlider - @discussion Destroy the object and release all memory objects - */ - IMPORT_C ~CVeiVerticalSlider(); - - /*! - @function MinimumSize - @discussion Gets the minimum size of this component - @return a minimum size of the control - */ - IMPORT_C TSize MinimumSize(); - - private: - - /*! - @fuction ConstructL - @discussion Perform the second phase construction of a CVeiVerticalSlider object - @param aRect Frame rectangle for container. - */ - void ConstructL(const TRect& aRect, const CCoeControl& aControl); - - /*! - @function CVeiVerticalSlider - @discussion Constructs this object - */ - CVeiVerticalSlider(); - - public: // from CoeControl - - /*! - @function Draw - @discussion Draw this CVeiVerticalSlider to the screen - @param aRect the rectangle of this view that needs updating - */ - virtual void Draw(const TRect& aRect) const; - - /*! - @function SizeChanged - @discussion Responds to changes to the size and position of the contents of this control. - */ - virtual void SizeChanged(); - - }; - - - -/*! - @class CVeiHorizontalSlider - @discussion Horizontal slider control - */ - -NONSHARABLE_CLASS( CVeiHorizontalSlider ) : public CVeiSlider - { - public: - - /*! - @function NewL - @discussion Create a CVeiHorizontalSlider object, which will draw itself to aRect - @param aRect the rectangle this view will be drawn to - @return a pointer to the created instance of CVeiHorizontalSlider - */ - IMPORT_C static CVeiHorizontalSlider* NewL(const TRect& aRect, const CCoeControl& aControl); - - /*! - @function NewLC - @discussion Create a CVeiSlider object, which will draw itself to aRect - @param aRect the rectangle this view will be drawn to - @return a pointer to the created instance of CVeiSlider - */ - IMPORT_C static CVeiHorizontalSlider* NewLC(const TRect& aRect, const CCoeControl& aControl); - - /*! - @function ~CVeiSlider - @discussion Destroy the object and release all memory objects - */ - IMPORT_C ~CVeiHorizontalSlider(); - - /*! - @function MinimumSize - @discussion Gets the minimum size of this component - @return a minimum size of the control - */ - IMPORT_C TSize MinimumSize(); - - private: - - /*! - @fuction ConstructL - @discussion Perform the second phase construction of a CVeiHorizontalSlider object - @param aRect Frame rectangle for container. - */ - void ConstructL(const TRect& aRect, const CCoeControl& aControl); - - /*! - @function CVeiHorizontalSlider - @discussion Constructs this object - */ - CVeiHorizontalSlider(); - - public: // from CoeControl - - /*! - @function Draw - @discussion Draw this CVeiHorizontalSlider to the screen - @param aRect the rectangle of this view that needs updating - */ - virtual void Draw(const TRect& aRect) const; - - /*! - @function SizeChanged - @discussion Responds to changes to the size and position of the contents of this control. - */ - virtual void SizeChanged(); - - }; - -#endif // __VEISLIDER_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/VeiSlider.pan --- a/videditor/VideoEditorUiComponents/inc/VeiSlider.pan Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEISLIDER_PAN__ -#define __VEISLIDER_PAN__ - -enum TVeiSliderPanic - { - EVeiSliderPanicMinMax = -0x100, - EVeiSliderPanicBitmapsNotLoaded, - EVeiSliderPanicStepNotPositive, - EVeiSliderPanicIndexUnderflow, - EVeiSliderPanicIndexOverflow, - EVeiSliderPanicOther - }; - -void Panic(TInt aCategory) - { - _LIT(KComponentName, "VEISLIDER"); - User::Panic(KComponentName, aCategory); - } - -#endif __VEISLIDER_PAN__ diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/VeiTextDisplay.h --- a/videditor/VideoEditorUiComponents/inc/VeiTextDisplay.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,242 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef VEITEXTDISPLAY_H -#define VEITEXTDISPLAY_H - -#include -#include - - -/** - * CVeiTextDisplay control class. - */ -class CVeiTextDisplay : public CCoeControl - { - public: - /** - * Destructor. - */ - IMPORT_C virtual ~CVeiTextDisplay(); - - /** - * Static factory method. - * - * @return the created CVeiTextDisplay object - */ - IMPORT_C static CVeiTextDisplay* NewL( const TRect& aRect, const CCoeControl* aParent ); - - /** - * Static factory method. Leaves the created object in the cleanup - * stack. - * - * @return the created CVeiCutAudioBar object - */ - IMPORT_C static CVeiTextDisplay* NewLC( const TRect& aRect, const CCoeControl* aParent ); - - - public: - - enum TVeiLayout - { - EOnlyName = 0x77, - ENameAndDuration, - EEverything, - ECutInCutOut, - EArrowsHorizontal, - EArrowsVertical, - ERecording, - ERecordingPaused, - EOnlyDuration - }; - - /** - * CVeiTextDisplay components. - */ - enum TTextDisplayComponent - { - EStartTimeText= 1, - EEndTimeText, - EStartTimeIcon, - EEndTimeIcon - }; - - IMPORT_C void SetLandscapeScreenOrientation( TBool aLandscapeScreenOrientation ); - - IMPORT_C void SetCutIn( const TTimeIntervalMicroSeconds& aCutInTime ); - - IMPORT_C void SetCutOut( const TTimeIntervalMicroSeconds& aCutOutTime ); - - IMPORT_C void SetTime( const TTime& aClipTime ); - - IMPORT_C void SetLocation( const TDesC& aClipLocation ); - - IMPORT_C void SetLayout( TVeiLayout aLayout ); - - IMPORT_C void SetName( const TDesC& aName ); - - IMPORT_C void SetDuration( const TTimeIntervalMicroSeconds& aDuration ); - - /** - * Control Up arrow visibility. - * - * @param aVisible True/False - */ - IMPORT_C void SetUpperArrowVisibility(TBool aVisible); - - /** - * Control Lower arrow visibility. - * - * @param aVisible True/False - */ - IMPORT_C void SetLowerArrowVisibility(TBool aVisible); - - /** - * Control Right arrow visibility. - * - * @param aVisible True/False - */ - IMPORT_C void SetRightArrowVisibility(TBool aVisible); - - /** - * Control Left arrow visibility. - * - * @param aVisible True/False - */ - IMPORT_C void SetLeftArrowVisibility(TBool aVisible); - - /** - * Set slow motion on status. - * - * @param aOn True/False - */ - IMPORT_C void SetSlowMotionOn(TBool aOn); - - /** - * slow motion on status. - * - * @return aOn True/False - */ - IMPORT_C TBool SlowMotionOn() const; - - /** - * Set value of slow motion effect. - * - * @param aPreset - */ - IMPORT_C void SetSlowMotionPreset(TInt aPreset); - - /** - * Slow motion effect value. - * - * @return value - */ - IMPORT_C TInt SlowMotionPreset() const; - - IMPORT_C void SetArrowSize(const TSize& aArrowSize); - - void ParseTimeToMinSec( TDes& aLayoutTime, const TTimeIntervalMicroSeconds& aDuration ) const; - - /** - * Sets the rect of a component - * - * @param aComponentIndex specifies the component - * @param aRect the rect that the component is set - * - * @return the end mark position - */ - IMPORT_C void SetComponentRect(TTextDisplayComponent aComponentIndex, TRect aRect); - - private: - /** - * Default constructor. - * - */ - void ConstructL( const TRect& aRect, const CCoeControl* aParent ); - - /** - * C++ default constructor. - * - */ - CVeiTextDisplay::CVeiTextDisplay(); - - /** - * From CCoeControl,Draw. - * - * @param aRect rectangle to draw - */ - void Draw(const TRect& aRect) const; - - static TInt UpdateBlinker( TAny* aThis ); - void DoUpdateBlinker(); - void SizeChanged(); - - private: // data - HBufC* iClipName; - TTimeIntervalMicroSeconds iDuration; - TTime iClipTime; - HBufC* iClipLocation; - - TTimeIntervalMicroSeconds iCutInTime; - TTimeIntervalMicroSeconds iCutOutTime; - - TVeiLayout iLayout; - - CFbsBitmap* iUpperArrow; - CFbsBitmap* iLowerArrow; - CFbsBitmap* iRightArrow; - CFbsBitmap* iLeftArrow; - CFbsBitmap* iUpperArrowMask; - CFbsBitmap* iLowerArrowMask; - CFbsBitmap* iRightArrowMask; - CFbsBitmap* iLeftArrowMask; - CFbsBitmap* iStartMarkIcon; - CFbsBitmap* iStartMarkIconMask; - CFbsBitmap* iEndMarkIcon; - CFbsBitmap* iEndMarkIconMask; - - TBool iUpperArrowVisible; - TBool iLowerArrowVisible; - TBool iRightArrowVisible; - TBool iLeftArrowVisible; - - TBool iLandscapeScreenOrientation; - TBool iSlowMotionOn; - TInt iPresetValue; - - CPeriodic* iBlinkTimer; - TBool iBlinkFlag; - - TSize iDynamicArrowSize; - - TPoint iUpperArrowPoint; - TPoint iLowerArrowPoint; - - RConeResourceLoader iResLoader; - - TRect iStartTimeIconRect; - TRect iEndTimeIconRect; - TRect iStartTimeTextRect; - TRect iEndTimeTextRect; - - }; -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/VeiTimeLabelNavi.h --- a/videditor/VideoEditorUiComponents/inc/VeiTimeLabelNavi.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - -#ifndef TIMELABELNAVI_H -#define TIMELABELNAVI_H - -// INCLUDES -#include -#include - - -// FORWARD DECLARATIONS -class CFbsBitmap; -class MTimeLabelNaviObserver; -#ifdef RD_TACTILE_FEEDBACK -class MTouchFeedback; -#endif /* RD_TACTILE_FEEDBACK */ - -// CLASS DECLARATION - -/** - * CTimeLabelNavi - */ -class CVeiTimeLabelNavi : public CCoeControl -{ - public: // Constructors and destructor - /** - * Destructor - */ - IMPORT_C virtual ~CVeiTimeLabelNavi(); - - /** - * Constructors. - */ - IMPORT_C static CVeiTimeLabelNavi* NewL(); - IMPORT_C static CVeiTimeLabelNavi* NewLC(); - - - public: // New functions - /** - * Changes navipane label. - * @param aLabel label text - */ - IMPORT_C void SetLabelL(const TDesC& aLabel); - - /** - * Sets left navipane arrow visibility - * @param aVisible Whether to show or not. - * @return - - */ - IMPORT_C void SetLeftArrowVisibilityL(TBool aVisible); - - /** - * Sets right navipane arrow visibility - * @param aVisible Whether to show or not. - * @return - - */ - IMPORT_C void SetRightArrowVisibilityL(TBool aVisible); - - /** - * Sets volume icon visibility - * @param aVisible Whether to show or not. - * @return - - */ - IMPORT_C void SetVolumeIconVisibilityL(TBool aVisible); - - /** - * Sets pause icon visibility - * @param aVisible whether to show or not. - * @return - - */ - IMPORT_C void SetPauseIconVisibilityL(TBool aVisible); - - /** - * SetNaviObserver - * @param aObserver Observer. - */ - void SetNaviObserver(MTimeLabelNaviObserver* aObserver) - { - iObserver = aObserver; - }; - - protected: // Functions from base classes - - /** - * From CCoeControl. Handle the size change events. - */ - void SizeChanged(); - - /** - * From CCoeControl. Draw a control. - * @param aRect The region of the control to be redrawn. - */ - void Draw(const TRect& aRect) const; - - /** - * From CCoeControl. Handles a change to the control's resources. - * @param aType A message UID value. - */ - void HandleResourceChange(TInt aType); - - /** - * From CCoeControl. Handles a control's pointer events. - * @param aPointerEvent pointer event. - */ - void HandlePointerEventL(const TPointerEvent& aPointerEvent); - - private: // Constructors and destructor - - /** - * Constructor. - */ - CVeiTimeLabelNavi(); - - /** - * EPOC 2nd phase constructor. - */ - void ConstructL(); - - /** - * Load the icon bitmaps. - */ - void LoadBitmapsL(); - - /** - * Delete the icon bitmaps. - */ - void DeleteBitmaps(); - - private: // Data - /// Own: Volume bitmap - CFbsBitmap* iVolumeBitmap; - CFbsBitmap* iVolumeBitmapMask; - - /// Own: Arrow bitmap - CFbsBitmap* iArrowBitmap; - CFbsBitmap* iArrowBitmapMask; - - /// Own: Muted bitmap - CFbsBitmap* iMutedBitmap; - CFbsBitmap* iMutedBitmapMask; - - /// Own: Paused bitmap - CFbsBitmap* iPausedBitmap; - CFbsBitmap* iPausedBitmapMask; - - TBool iArrowVisible; - TBool iVolumeIconVisible; - TBool iPauseIconVisible; - - TBuf<32> iLabel; - - /// Rectangle where label is drawn - TAknLayoutText iTextLayout; - /// Layout array for volume/muted, array and paused items - TAknLayoutRect iBitmapLayout[3]; - - /// Ref: to observer - MTimeLabelNaviObserver* iObserver; - - // Feedback for screen touch: -#ifdef RD_TACTILE_FEEDBACK - MTouchFeedback* iTouchFeedBack; -#endif /* RD_TACTILE_FEEDBACK */ - -}; - -#endif // VEITIMELABELNAVI_H - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/VeiVideoDisplay.h --- a/videditor/VideoEditorUiComponents/inc/VeiVideoDisplay.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,254 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Declares VeiCutAudioBar control for the video editor application. -* -*/ - - - -#ifndef VEIVIDEODISPLAY_H -#define VEIVIDEODISPLAY_H - -#include -#include -#include - -const TInt KMaxVolumeLevel = 10; - -class CAknBitmapAnimation; -/** - * Observer for notifying that video player - * has finished playing - * - * - */ -class MVeiVideoDisplayObserver - { -public: - enum TPlayerEvent - { - EStop = 0x90, - ELoadingStarted, - EOpenComplete, - EPlayComplete, - EBufferingStarted, - ELoadingComplete, - EVolumeLevelChanged, - EError - }; - /** - * Called to notify that amr conversion is completed - * - * @param aConvertedFilename converted filename. - * @param aError KErrNone if conversion was - * completed successfully; one of the system wide - * error codes if conversion failed - */ - virtual void NotifyVideoDisplayEvent( const TPlayerEvent aEvent, const TInt& aInfo = 0 ) = 0; - - - }; -/** - * CVeiVideoDisplay control class. - */ -class CVeiVideoDisplay : public CCoeControl, - public MVideoPlayerUtilityObserver, - public MVideoLoadingObserver, - public MCoeForegroundObserver - { - public: - /** - * Destructor. - */ - IMPORT_C virtual ~CVeiVideoDisplay(); - - /** - * Static factory method. - * - * @return the created CVeiVideoDisplay object - */ - IMPORT_C static CVeiVideoDisplay* NewL( const TRect& aRect, const CCoeControl* aParent, - MVeiVideoDisplayObserver& aObserver ); - - /** - * Static factory method. Leaves the created object in the cleanup - * stack. - * - * @return the created CVeiCutAudioBar object - */ - IMPORT_C static CVeiVideoDisplay* NewLC( const TRect& aRect, const CCoeControl* aParent, - MVeiVideoDisplayObserver& aObserver); - - public: - - IMPORT_C TInt Volume() const; - IMPORT_C void ShowAnimationL( TInt aResourceId, TInt aFrameIntervalInMilliSeconds=-1 ); - IMPORT_C void StopAnimation(); - IMPORT_C void OpenFileL( const TDesC& aFilename ); - - IMPORT_C void Play(); - IMPORT_C void PlayL( const TDesC& aFilename, - const TTimeIntervalMicroSeconds& aStartPoint = 0, - const TTimeIntervalMicroSeconds& aEndPoint = 0); - - IMPORT_C void PlayMarkedL( const TTimeIntervalMicroSeconds& aStartPoint, - const TTimeIntervalMicroSeconds& aEndPoint); - - IMPORT_C void Stop( TBool aCloseStream ); - - IMPORT_C void PauseL(); - - IMPORT_C void ShowPictureL( const CFbsBitmap& aBitmap, const CFbsBitmap& aMask ); - - IMPORT_C void ShowPictureL( const CFbsBitmap& aBitmap ); - - IMPORT_C void SetPictureL( const CFbsBitmap& aBitmap ); - - IMPORT_C void ShowBlankScreen(); - - IMPORT_C void ShowBlackScreen(); - - IMPORT_C void SetBlackScreen( TBool aBlack ); - - IMPORT_C TTimeIntervalMicroSeconds PositionL() const; - - IMPORT_C void SetPositionL( const TTimeIntervalMicroSeconds& aPosition ); - - IMPORT_C TInt GetBorderWidth() const; - - IMPORT_C TSize GetScreenSize() const; - - IMPORT_C TTimeIntervalMicroSeconds TotalLengthL(); - - IMPORT_C void SetFrameIntervalL(TInt aFrameIntervalInMilliSeconds); - - IMPORT_C void SetRotationL(TVideoRotation aRotation); - - IMPORT_C TVideoRotation RotationL() const; - - IMPORT_C void SetMuteL( TBool aMuted ); - - IMPORT_C void AdjustVolumeL( TInt aIncrement ); - - public: - TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); - - private: // From MCoeForegroundObserver - - virtual void HandleGainingForeground(); - virtual void HandleLosingForeground(); - - private: - TInt TimeIncrement(TInt aKeyCount) const; - - virtual void HandleResourceChange(TInt aType); - /** - * Default constructor. - * - */ - void ConstructL( const TRect& aRect, const CCoeControl* aParent ); - /** - * C++ default constructor. - * - */ - CVeiVideoDisplay( MVeiVideoDisplayObserver& aObserver ); - /* - * From CoeControl,SizeChanged. - */ - void SizeChanged(); - - // From MVideoPlayerUtilityObserver - void MvpuoOpenComplete( TInt aError ); - void MvpuoFrameReady( CFbsBitmap& aFrame, TInt aError ); - void MvpuoPlayComplete( TInt aError ); - void MvpuoPrepareComplete( TInt aError ); - void MvpuoEvent( const TMMFEvent& aEvent ); - void MvloLoadingStarted(); - void MvloLoadingComplete(); - /** - * From CCoeControl,Draw. - * - * @param aRect rectangle to draw - */ - void Draw(const TRect& aRect) const; - - TRect CalculateVideoPlayerArea(); - - void LocateEntryL(); - - void SetPlaybackVolumeL(); - - void StoreDisplayBitmapL( const CFbsBitmap& aBitmap, const CFbsBitmap* aMask = NULL); - - /** - * Set the animation's frame interval via a callback. - * This is needed because if the frame interval is altered immediately - * after the animation is started, the change does not take effect visually. - * There must be some delay in between. - */ - void SetAnimationFrameIntervalCallbackL(); - static TInt SetAnimationFrameIntervalCallbackMethod(TAny* aThis); - - private: // data - - /** Video player utility. */ - CVideoPlayerUtility* iVideoPlayerUtility; - CFbsBitmap* iDisplayBitmap; - CFbsBitmap* iDisplayMask; - - CFbsBitmap* iBgSquaresBitmap; - CFbsBitmap* iBgSquaresBitmapMask; - - MVeiVideoDisplayObserver& iObserver; - TBool iBlank; - TInt iBorderWidth; - TTimeIntervalMicroSeconds iDuration; - /** Videoplayerutility volume */ - TInt iInternalVolume; - - /** Max volume */ - TInt iMaxVolume; - - - TBool iAnimationOn; - TBool iBlack; - CAknBitmapAnimation* iAnimation; - TInt iAnimationResourceId; - TInt iAnimationFrameIntervalInMilliSeconds; - TInt iStoredAnimationFrameIntervalInMilliSeconds; - - /** Seek thumbnail position in video clip. */ - //TTimeIntervalMicroSeconds iSeekPos; - - TInt iKeyRepeatCount; - - TBool iSeeking; - TBool iBufferingCompleted; - - TBool iMuted; - - HBufC* iFilename; - TTimeIntervalMicroSeconds iStartPoint; - TTimeIntervalMicroSeconds iEndPoint; - - TBool iNewFile; - - /** Callback utility for setting the animation frame interval*/ - CAsyncCallBack* iCallBack; - }; -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/inc/mtimelabelnaviobserver.h --- a/videditor/VideoEditorUiComponents/inc/mtimelabelnaviobserver.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Time label navi observer. -* -*/ - - -#ifndef M_TIMELABELNAVIOBSERVER_H -#define M_TIMELABELNAVIOBSERVER_H - -/** ?description */ -//const ?type ?constant_var = ?constant; - -/** - * Time label navi observer API - * - * @lib VideoEditorUiComponents.lib - * @since S60 v5.0 - */ -class MTimeLabelNaviObserver - { - -public: - /** - * HandleNaviEventL - * - * Callend when navipane is clicked. - * @since S60 v5.0 - */ - virtual void HandleNaviEventL() = 0; - - }; - - -#endif // M_TIMELABELNAVIOBSERVER_H diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/rom/VideoEditorUiComponents.iby --- a/videditor/VideoEditorUiComponents/rom/VideoEditorUiComponents.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_SIMPLE_VIDEO_EDITOR - -#ifndef __VIDEOEDITORUICOMPONENTS_IBY__ -#define __VIDEOEDITORUICOMPONENTS_IBY__ - -#include - -// Video Editor UI Components dll -file=ABI_DIR\BUILD_DIR\VideoEditorUiComponents.dll SHARED_LIB_DIR\VideoEditorUiComponents.dll - -// icons (svg) -S60_APP_BITMAP(VideoEditorUiComponents) - -// Icons (bitmap) -S60_APP_BITMAP(VideoEditorBitmaps) - -#endif // __VIDEOEDITORUICOMPONENTS_IBY__ - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/rom/VideoEditorUiComponents_resource.iby --- a/videditor/VideoEditorUiComponents/rom/VideoEditorUiComponents_resource.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_SIMPLE_VIDEO_EDITOR - -#ifndef __VIDEOEDITORUICOMPONENTSRESOURCES_IBY__ -#define __VIDEOEDITORUICOMPONENTSRESOURCES_IBY__ - -#include - -data=DATAZ_\RESOURCE_FILES_DIR\VideoEditorUiComponents.rsc RESOURCE_FILES_DIR\VideoEditorUiComponents.rsc - -#endif // __VIDEOEDITORUICOMPONENTSRESOURCES_IBY__ - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/src/ExtProgressAnimationControl.cpp --- a/videditor/VideoEditorUiComponents/src/ExtProgressAnimationControl.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,209 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* -* File: ExtProgressAnimationControl.cpp -* Created: 17-10-2005 -* Author: -* -*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ExtProgressAnimationControl.h" -#include "videoeditorcommon.h" - -//const TInt KCropFastKeyTimerDelayInMicroseconds = 10000; -//const TInt KDefaultFastKeyTimerIntervalInMicroseconds = 10000; - -// CONSTANTS -//const TReal KIconHeightFrac = 0.25; -//const TInt KStartOffsetX = 10; - -//============================================================================= -CExtProgressAnimationControl * CExtProgressAnimationControl::NewL ( - const TRect & aRect, - const CCoeControl * aParent - ) -{ - CExtProgressAnimationControl * self = new (ELeave) CExtProgressAnimationControl; - CleanupStack::PushL(self); - self->ConstructL (aRect, aParent); - CleanupStack::Pop( self ); - return self; -} - -//============================================================================= -CExtProgressAnimationControl::~CExtProgressAnimationControl() -{ - StopAnimation(); - - delete iAnimation; - delete iBgContext; -} - -//============================================================================= -void CExtProgressAnimationControl::SetAnimationResourceId(const TInt &aResourceId) -{ - switch (aResourceId) - { - case VideoEditor::EAnimationMerging: - { - iAnimationResourceId = R_VED_MERGING_NOTE_ANIMATION; - break; - } - case VideoEditor::EAnimationChangeAudio: - { - iAnimationResourceId = R_VED_MERGING_AUDIO_NOTE_ANIMATION; - break; - } - case VideoEditor::EAnimationAddText: - { - iAnimationResourceId = R_VED_ADDING_TEXT_NOTE_ANIMATION; - break; - } - case VideoEditor::EAnimationCut: - { - iAnimationResourceId = R_VED_CUTTING_NOTE_ANIMATION; - break; - } - default: - { - iAnimationResourceId = R_VED_MERGING_NOTE_ANIMATION; - break; - } - } - -} - -//============================================================================= -CExtProgressAnimationControl::CExtProgressAnimationControl() : iBorderWidth(2) -{ - -} - -//============================================================================= -void CExtProgressAnimationControl::ConstructL ( - const TRect & aRect, - const CCoeControl * aParent - ) -{ - SetContainerWindowL( *aParent ); - SetRect(aRect); - - // Activate control - ActivateL(); -} - -//============================================================================= -void CExtProgressAnimationControl::SizeChanged() -{ - TRect rect = Rect(); - if ( iBgContext ) - { - iBgContext->SetRect( rect ); - } -} - -//============================================================================= -void CExtProgressAnimationControl::Draw (const TRect& aRect) const -{ - CWindowGc& gc = SystemGc(); - - // draw skin background - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - AknsDrawUtils::Background( skin, cc, this, SystemGc(), aRect ); -} - -//============================================================================= -TTypeUid::Ptr CExtProgressAnimationControl::MopSupplyObject( TTypeUid aId ) -{ - if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext ) - { - return MAknsControlContext::SupplyMopObject( aId, iBgContext ); - } - return CCoeControl::MopSupplyObject( aId ); -} - -//============================================================================= -void CExtProgressAnimationControl::HandleControlEventL( - CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/) - { - } - -//============================================================================= -void CExtProgressAnimationControl::StartAnimationL(TInt aFrameIntervalInMilliSeconds ) - { - - if ( iAnimation ) - { - delete iAnimation; - iAnimation = 0; - } - - iAnimation = CAknBitmapAnimation::NewL(); - - TResourceReader reader; - iCoeEnv->CreateResourceReaderLC( reader, iAnimationResourceId ); - iAnimation->ConstructFromResourceL( reader ); - TRect rect( Rect() ); - rect.Move( iBorderWidth, iBorderWidth ); - rect.Resize( -iBorderWidth*2, -iBorderWidth ); - iAnimation->SetRect( rect ); - iAnimation->SetContainerWindowL( *this ); - iAnimationOn = ETrue; - iAnimation->StartAnimationL(); - CleanupStack::PopAndDestroy(); //reader - CBitmapAnimClientData* animClientData = iAnimation->BitmapAnimData(); - iAnimationSpeedInMilliSeconds = animClientData->FrameIntervalInMilliSeconds(); - - if ( aFrameIntervalInMilliSeconds > 0 ) - { - SetFrameIntervalL( aFrameIntervalInMilliSeconds ); - } - DrawDeferred(); - } - -//============================================================================= -void CExtProgressAnimationControl::StopAnimation() - { - if ( iAnimationOn ) - { - iAnimation->CancelAnimation(); - } - iAnimationOn = EFalse; - DrawDeferred(); - } - -//============================================================================= -void CExtProgressAnimationControl::SetFrameIntervalL(TInt aFrameIntervalInMilliSeconds) - { - iAnimationSpeedInMilliSeconds+=aFrameIntervalInMilliSeconds; - iAnimation->SetFrameIntervalL( iAnimationSpeedInMilliSeconds ); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/src/ExtProgressContainer.cpp --- a/videditor/VideoEditorUiComponents/src/ExtProgressContainer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* -* File: ExtProgressContainer.cpp -* Created: 14-10-2005 -* Author: -* -*/ - -#include "ExtProgressContainer.h" -#include "ExtProgressAnimationControl.h" - -#include -#include -#include -#include -#include -#include - -// Constants -const TInt KProgressBarDefaultFinalValue = 20; -const TInt KProgressBarDefaultHeight = 15; -const TInt KProgressBarDefaultWidth = 240; - -// Positions -const TReal KContTX = 0.00; -const TReal KContTY = 0.20; -const TReal KContBX = 1.00; -const TReal KContBY = 1.00; - -const TReal KLabelTX = 0.10; -const TReal KLabelTY = 0.10; -const TReal KLabelBX = 0.90; -const TReal KLabelBY = 0.30; - -const TReal KAnimTX = 0.10; -const TReal KAnimTY = 0.30; -const TReal KAnimBX = 0.90; -const TReal KAnimBY = 0.80; - -const TReal KProgTX = 0.10; -const TReal KProgTY = 0.80; -//const TReal KProgBX = 0.70; -//const TReal KProgBY = 0.90; - - - -//============================================================================= -CExtProgressContainer * CExtProgressContainer::NewL (const TRect& aRect, CCoeControl* aParent) -{ - CExtProgressContainer* self = new (ELeave) CExtProgressContainer(); - CleanupStack::PushL(self); - self->ConstructL(aRect, aParent); - CleanupStack::Pop( self ); - return self; -} - -//============================================================================= -CExtProgressContainer::CExtProgressContainer () -{ -} - -//============================================================================= -CExtProgressContainer::~CExtProgressContainer () -{ - delete iProgressInfo; - delete iAnimationControl; - delete iLabel; - delete iBgContext; -} - -//============================================================================= -void CExtProgressContainer::ConstructL (const TRect& aRect, CCoeControl* aParent) -{ - SetContainerWindowL(*aParent); - - TRect rect; - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect); - TSize size = rect.Size(); - SetRect(TRect - (static_cast(size.iWidth * KContTX + 0.5), - static_cast(size.iHeight * KContTY + 0.5), - static_cast(size.iWidth * KContBX + 0.5), - static_cast(size.iHeight * KContBY + 0.5))); - - - iLabel = new(ELeave) CEikLabel; - iLabel->SetContainerWindowL(*this); - - iAnimationControl = CExtProgressAnimationControl::NewL(aRect, aParent); - iAnimationControl->SetObserver(this); - iAnimationControl->SetContainerWindowL(*this); - - // Set Progress Bar property, coding directly - CEikProgressInfo::SInfo info; - - info.iHeight = KProgressBarDefaultHeight; - info.iWidth = KProgressBarDefaultWidth; - info.iSplitsInBlock = 0; - info.iTextType = EEikProgressTextNone; - info.iFinalValue = KProgressBarDefaultFinalValue; - - iProgressInfo = new( ELeave ) CEikProgressInfo( info ); - - iProgressInfo->ConstructL(); - iProgressInfo->SetContainerWindowL(*this); - - SizeChanged(); - - ActivateL(); -} - -//============================================================================= -void CExtProgressContainer::HandleControlEventL( - CCoeControl* /*aControl*/,TCoeEvent aEventType) -{ - if (aEventType == MCoeControlObserver::EEventStateChanged ) - { - ReportEventL(MCoeControlObserver::EEventStateChanged); - } - -} - -//============================================================================= -TInt CExtProgressContainer::CountComponentControls() const -{ - return 3; -} - -//============================================================================= -CCoeControl* CExtProgressContainer::ComponentControl(TInt aIndex) const -{ - CCoeControl* ret = NULL; - switch (aIndex) - { - case 0: - { - ret = iLabel; - break; - } - case 1: - { - ret = iAnimationControl; - break; - } - case 2: - { - ret = iProgressInfo; - break; - } - default: - { - break; - } - - } - - return ret; -} - -//============================================================================= -CEikProgressInfo* CExtProgressContainer::GetProgressInfoL() -{ - return iProgressInfo; -} - -//============================================================================= -CExtProgressAnimationControl* CExtProgressContainer::GetAnimationControlL() -{ - return iAnimationControl; -} - -//============================================================================= -void CExtProgressContainer::SetTextL(const TDesC &aText) -{ - iLabel->SetTextL(aText); - DrawNow(); -} - - -//============================================================================= -void CExtProgressContainer::Draw(const TRect& aRect) const -{ - CWindowGc& gc = SystemGc(); - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - - AknsDrawUtils::Background( skin, cc, this, gc, aRect ); -// AknsDrawUtils::Background( skin, cc, iLabel, gc, aRect ); -// AknsDrawUtils::Background( skin, cc, iProgressInfo, gc, aRect ); -// AknsDrawUtils::Background( skin, cc, iAnimationControl, gc, aRect ); - - // Just draw a rectangle round the edge of the control. - // CWindowGc& gc=SystemGc(); - //gc.Clear(aRect); - //gc.SetClippingRect(aRect); - //gc.DrawRect(Rect()); -} - - -//============================================================================= -void CExtProgressContainer::SizeChanged() -{ - TRect rect( Rect() ); - if ( iBgContext ) - { - iBgContext->SetRect( rect ); - } - - TSize size= rect.Size(); - - if (iLabel) - { - iLabel->SetRect(TRect - (static_cast(size.iWidth * KLabelTX + 0.5), - static_cast(size.iHeight * KLabelTY + 0.5), - static_cast(size.iWidth * KLabelBX + 0.5), - static_cast(size.iHeight * KLabelBY + 0.5 ))); - } - - if (iAnimationControl ) - { - iAnimationControl->SetRect(TRect - (static_cast(size.iWidth * KAnimTX + 0.5), - static_cast(size.iHeight * KAnimTY + 0.5), - static_cast(size.iWidth * KAnimBX + 0.5), - static_cast(size.iHeight * KAnimBY + 0.5))); - } - - if (iProgressInfo) - { - TSize minSize = iProgressInfo->MinimumSize(); - - iProgressInfo->SetExtent(TPoint - (static_cast(size.iWidth * KProgTX + 0.5), - static_cast(size.iHeight * KProgTY + 0.5)), - minSize); - - /* - iProgressInfo->SetPosition(TPoint - (size.iWidth * KProgTX, - size.iHeight * KProgTY)); - - iProgressInfo->SetExtent(TRect - (size.iWidth * KProgTX, - size.iHeight * KProgTY, - size.iWidth * KProgBX, - size.iHeight * KProgBY)); - */ - } - -} - -//============================================================================= -TTypeUid::Ptr CExtProgressContainer::MopSupplyObject( TTypeUid aId ) -{ - if ( aId.iUid == MAknsControlContext::ETypeId && iBgContext ) - { - return MAknsControlContext::SupplyMopObject( aId, iBgContext ); - } - return CCoeControl::MopSupplyObject( aId ); -} - -//============================================================================= -TSize CExtProgressContainer::MinimumSize() -{ - return Rect().Size(); -} - -//============================================================================= -void CExtProgressContainer::Test() -{ - - -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/src/ExtProgressDialog.cpp --- a/videditor/VideoEditorUiComponents/src/ExtProgressDialog.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,225 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* -* File: ExtProgressDialog.cpp -* Created: 14-10-2005 -* Author: -* -*/ - -#include "ExtProgressDialog.h" -#include "ExtProgressContainer.h" -#include "ExtProgressAnimationControl.h" - -#include -#include -#include -#include -#include -#include -#include - -// CONSTANTS -_LIT(KResourceFile, "VideoEditorUiComponents.rsc"); - - -//============================================================================= -EXPORT_C CExtProgressDialog::CExtProgressDialog(CExtProgressDialog** aSelfPtr) -: iSelfPtr(aSelfPtr), - iResLoader(*CEikonEnv::Static()) -{ -} - -//============================================================================= -EXPORT_C CExtProgressDialog::~CExtProgressDialog() -{ - - delete iContainer; - iResLoader.Close(); - - // Nullify self pointer - *iSelfPtr = NULL; -} - -//============================================================================= -EXPORT_C void CExtProgressDialog::PrepareLC(TInt aResourceId) -{ - TFileName resourceFile; - Dll::FileName(resourceFile); - TParse p; - p.Set(KResourceFile, &KDC_RESOURCE_FILES_DIR, &resourceFile); - resourceFile = p.FullName(); - iResLoader.OpenL( resourceFile ); - - CEikDialog::PrepareLC(aResourceId); - - TRect rect; - iContainer = CExtProgressContainer::NewL(rect, this); - - iContainer->SetControlContext(this); - iContainer->SetObserver(this); - -} - -//============================================================================= -void CExtProgressDialog::SetSizeAndPosition( const TSize& /*aSize*/ ) -{ - TRect rect; - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, rect); - - TSize size = iContainer->Rect().Size(); - SetSize(size); - SetPosition(TPoint(0, rect.iBr.iY - size.iHeight)); -} - -//============================================================================= -TBool CExtProgressDialog::OkToExitL( TInt aButtonId ) -{ - if (iCallback) - { - iCallback->DialogDismissedL(aButtonId); - } - - return ETrue; -} - -//============================================================================= -void CExtProgressDialog::PreLayoutDynInitL() -{ - -} - -//============================================================================= -TKeyResponse CExtProgressDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) -{ - TKeyResponse res = EKeyWasConsumed; - - if (aType == EEventKey) - { - switch (aKeyEvent.iCode) - { - case 0x31: - { - iContainer->GetProgressInfoL()->IncrementAndDraw(1); - - break; - } - case 0x32: - { - DrawNow(); - - break; - } - case 0x33: - { - iContainer->GetAnimationControlL()->StartAnimationL(); - - break; - } - case 0x34: - { - iContainer->DrawNow(); - - break; - } - case 0x37: - { - iContainer->Test(); - - break; - } - default: - { - res = CEikDialog::OfferKeyEventL(aKeyEvent, aType); - } - } - } - return res; -} - -//============================================================================= -EXPORT_C void CExtProgressDialog::SetCallback(MExtProgressDialogCallback* aCallback) -{ - iCallback = aCallback; -} - -//============================================================================= -EXPORT_C CEikProgressInfo* CExtProgressDialog::GetProgressInfoL() -{ - return iContainer->GetProgressInfoL(); -} - -//============================================================================= -EXPORT_C void CExtProgressDialog::StartAnimationL() -{ - return iContainer->GetAnimationControlL()->StartAnimationL(); - -} - -//============================================================================= -EXPORT_C void CExtProgressDialog::SetTextL(const TDesC &aText) -{ - iContainer->SetTextL(aText); -} -//============================================================================= - -EXPORT_C void CExtProgressDialog::SetAnimationResourceIdL(const TInt &aResourceId) -{ - iContainer->GetAnimationControlL()->SetAnimationResourceId(aResourceId); -} -//============================================================================= - -void CExtProgressDialog::HandleControlEventL( - CCoeControl* /*aControl*/,TCoeEvent aEventType) -{ - if (aEventType == MCoeControlObserver::EEventStateChanged ) - { - DrawNow(); - } -} - -//============================================================================= -TInt CExtProgressDialog::CountComponentControls() const -{ - return 1; -} - -//============================================================================= -CCoeControl* CExtProgressDialog::ComponentControl(TInt aIndex) const -{ - CCoeControl* ret = NULL; - switch (aIndex) - { - case 0: - { - ret = iContainer; - break; - } - default: - { - break; - } - - } - - return ret; -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/src/VeiCutterBar.cpp --- a/videditor/VideoEditorUiComponents/src/VeiCutterBar.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,886 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES - -// System includes -#include -#include -#include -#include -#include -#include -#include -#include - - -// User includes -#include "VeiCutterBar.h" -#include "VideoEditorUtils.h" - - -EXPORT_C CVeiCutterBar* CVeiCutterBar::NewL( const CCoeControl* aParent, TBool aDrawBorder ) - { - CVeiCutterBar* self = CVeiCutterBar::NewLC( aParent, aDrawBorder ); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C CVeiCutterBar* CVeiCutterBar::NewLC( const CCoeControl* aParent, TBool aDrawBorder ) - { - CVeiCutterBar* self = new (ELeave) CVeiCutterBar; - CleanupStack::PushL( self ); - self->ConstructL( aParent, aDrawBorder ); - return self; - } - -void CVeiCutterBar::ConstructL( const CCoeControl* aParent, TBool aDrawBorder ) - { - SetContainerWindowL( *aParent ); - - TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) ); - - if( !AknLayoutUtils::PenEnabled() ) - { - AknIconUtils::CreateIconL( iScissorsIcon, iScissorsIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded_scissors, - EMbmVideoeditoruicomponentsQgn_indi_vded_scissors_mask ); - - // left end of the slider when that part is unselected - AknIconUtils::CreateIconL( iSliderLeftEndIcon, iSliderLeftEndIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_end_left, - EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_end_left_mask ); - - // middle part of the slider when that part is unselected - // should be qgn_graf_nslider_vded_middle but that icon is currently incorrect - AknIconUtils::CreateIconL( iSliderMiddleIcon, iSliderMiddleIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_end_middle, - EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_end_middle_mask ); - - // right end of the slider when that part is unselected - AknIconUtils::CreateIconL( iSliderRightEndIcon, iSliderRightEndIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_end_right, - EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_end_right_mask ); - - // left end of the cut selection slider - AknIconUtils::CreateIconL( iSliderSelectedLeftEndIcon, iSliderSelectedLeftEndIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_end_left_selected, - EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_end_left_selected_mask ); - - // middle part of the cut selection slider - AknIconUtils::CreateIconL( iSliderSelectedMiddleIcon, iSliderSelectedMiddleIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_middle_selected, - EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_middle_selected_mask ); - - // right end of the cut selection slider - AknIconUtils::CreateIconL( iSliderSelectedRightEndIcon, iSliderSelectedRightEndIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_end_right_selected, - EMbmVideoeditoruicomponentsQgn_graf_nslider_vded_end_right_selected_mask ); - - // playhead - AknIconUtils::CreateIconL( iPlayheadIcon, iPlayheadIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded_playhead, - EMbmVideoeditoruicomponentsQgn_indi_vded_playhead_mask ); - - // left/right border of cut selection slider - AknIconUtils::CreateIconL( iCutAreaBorderIcon, iCutAreaBorderIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded_timeline_selected, - EMbmVideoeditoruicomponentsQgn_indi_vded_timeline_selected_mask ); - } - else - { - // left end of the slider when that part is unselected - AknIconUtils::CreateIconL( iSliderLeftEndIcon, iSliderLeftEndIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_graf_nslider_vded2_end_left, - EMbmVideoeditoruicomponentsQgn_graf_nslider_vded2_end_left_mask ); - - // middle part of the slider when that part is unselected - // should be qgn_graf_nslider_vded_middle but that icon is currently incorrect - AknIconUtils::CreateIconL( iSliderMiddleIcon, iSliderMiddleIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_graf_nslider_vded2_middle, - EMbmVideoeditoruicomponentsQgn_graf_nslider_vded2_middle_mask ); - - // right end of the slider when that part is unselected - AknIconUtils::CreateIconL( iSliderRightEndIcon, iSliderRightEndIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_graf_nslider_vded2_end_right, - EMbmVideoeditoruicomponentsQgn_graf_nslider_vded2_end_right_mask ); - - // middle part of the cut selection slider - AknIconUtils::CreateIconL( iSliderSelectedMiddleIcon, iSliderSelectedMiddleIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_graf_nslider_vded2_middle_selected, - EMbmVideoeditoruicomponentsQgn_graf_nslider_vded2_middle_selected_mask ); - - // playhead - AknIconUtils::CreateIconL( iPlayheadIcon, iPlayheadIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded2_playhead, - EMbmVideoeditoruicomponentsQgn_indi_vded2_playhead_mask ); - - // pressed playhead - AknIconUtils::CreateIconL( iPlayheadIconPressed, iPlayheadIconPressedMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded2_playhead_pressed, - EMbmVideoeditoruicomponentsQgn_indi_vded2_playhead_pressed_mask ); - - // Start mark - AknIconUtils::CreateIconL( iStartMarkIcon, iStartMarkIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded2_start, - EMbmVideoeditoruicomponentsQgn_indi_vded2_start_mask ); - - // Pressed Start mark - AknIconUtils::CreateIconL( iStartMarkIconPressed, iStartMarkIconPressedMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded2_start_pressed, - EMbmVideoeditoruicomponentsQgn_indi_vded2_start_pressed_mask ); - - // End Mark - AknIconUtils::CreateIconL( iEndMarkIcon, iEndMarkIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded2_end, - EMbmVideoeditoruicomponentsQgn_indi_vded2_end_mask ); - - // Pressed End Mark - AknIconUtils::CreateIconL( iEndMarkIconPressed, iEndMarkIconPressedMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded2_end_pressed, - EMbmVideoeditoruicomponentsQgn_indi_vded2_end_pressed_mask ); - } - - iDrawBorder = aDrawBorder; - iInPoint = 0; - iCurrentPoint = 0; - iTotalDuration = 1; - iDimmed = EFalse; - iDrawPlayHead = ETrue; - iOutPoint = 13; - iFinished = ETrue; - } - -EXPORT_C CVeiCutterBar::~CVeiCutterBar() - { - if (iScissorsIcon) - { - delete iScissorsIcon; - delete iScissorsIconMask; - } - - delete iSliderLeftEndIcon; - delete iSliderLeftEndIconMask; - delete iSliderMiddleIcon; - delete iSliderMiddleIconMask; - delete iSliderRightEndIcon; - delete iSliderRightEndIconMask; - - if (iSliderSelectedLeftEndIcon) - { - delete iSliderSelectedLeftEndIcon; - delete iSliderSelectedLeftEndIconMask; - } - - delete iSliderSelectedMiddleIcon; - delete iSliderSelectedMiddleIconMask; - - if (iSliderSelectedRightEndIcon) - { - delete iSliderSelectedRightEndIcon; - delete iSliderSelectedRightEndIconMask; - } - - delete iPlayheadIcon; - delete iPlayheadIconMask; - - if (iPlayheadIconPressed) - { - delete iPlayheadIconPressed; - delete iPlayheadIconPressedMask; - } - if (iStartMarkIcon) - { - delete iStartMarkIcon; - delete iStartMarkIconMask; - } - if (iStartMarkIconPressed) - { - delete iStartMarkIconPressed; - delete iStartMarkIconPressedMask; - } - if (iEndMarkIcon) - { - delete iEndMarkIcon; - delete iEndMarkIconMask; - } - if (iEndMarkIconPressed) - { - delete iEndMarkIconPressed; - delete iEndMarkIconPressedMask; - } - if (iCutAreaBorderIcon) - { - delete iCutAreaBorderIcon; - delete iCutAreaBorderIconMask; - } - } - -TInt CVeiCutterBar::CountComponentControls() const - { - return 0; - } - -void CVeiCutterBar::DrawCoordinate(TInt aX, TInt aY, TInt aData1, TInt aData2, const TDesC& aInfo) const -{ - CWindowGc& gc = SystemGc(); - TPoint writepoint(aX, aY); - - _LIT(KXY, "%S:(%d,%d)"); - _LIT(KX, "%S:%d"); - TBuf<200> buffer; - if (aData2 > 0) - { - buffer.Format(KXY, &aInfo, aData1, aData2); - } - else - { - buffer.Format(KX, &aInfo, aData1); - } - const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - gc.UseFont( font ); - - // Get text color from skin - TRgb textColor( KRgbBlack ); - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - AknsUtils::GetCachedColor(skin, textColor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); - gc.SetPenColor( textColor ); - - gc.DrawText( buffer, writepoint ); - - gc.DiscardFont(); -} - - -void CVeiCutterBar::Draw( const TRect& /*aRect*/ ) const - { - CWindowGc& gc = SystemGc(); - - if( !AknLayoutUtils::PenEnabled() ) - { - gc.BitBltMasked(iScissorsIconRect.iTl, iScissorsIcon, iScissorsIconRect.Size(), - iScissorsIconMask, EFalse ); - } - - // The following three icons are visible only when the user has selected an area to be cut. - // In the initial state, the whole slider is selected so these icons won't be shown. - - // draw left end of the slider - gc.BitBltMasked(iSliderLeftEndIconRect.iTl, iSliderLeftEndIcon, iSliderLeftEndIconRect.Size(), - iSliderLeftEndIconMask, EFalse ); - - // draw middle part of the slider - gc.BitBltMasked(iSliderMiddleIconRect.iTl, iSliderMiddleIcon, iSliderMiddleIconRect.Size(), - iSliderMiddleIconMask, EFalse ); - - // draw right end of the slider - gc.BitBltMasked(iSliderRightEndIconRect.iTl, iSliderRightEndIcon, iSliderRightEndIconRect.Size(), - iSliderRightEndIconMask, EFalse ); - - // the selected area of the slider is constructed from 3 icons: - // - // |<-------------- whole slider ------------------------>| - // - // |<-------- selected area ------------>| - // - // ----- -----a-------------------------b----- ---------- - // | |left | middle |right| | - // | |end | part |end | | - // ----- ----- ------------------------- ----- ---------- - - TRect selectedArea(CalculateCutAreaRect()); - - if( !AknLayoutUtils::PenEnabled() ) - { - // if the start and end mark are close to each other, the width of the left and - // right end icons has to be decreased - TRect leftRect(iSliderSelectedLeftEndIconRect); - TRect rightRect(iSliderSelectedRightEndIconRect); - - // the width of the selected area is smaller than the width of the left/right end - if (selectedArea.Width() <= iSliderSelectedRightEndIconRect.Width()) - { - leftRect = selectedArea; - rightRect = selectedArea; - } - - // calculate point a - TInt leftEndWidth = iSliderSelectedLeftEndIconRect.Width(); - TInt xA = selectedArea.iTl.iX + leftEndWidth; - TPoint pointA = TPoint(xA, selectedArea.iTl.iY); - - // calculate point b - TInt rightEndWidth = rightRect.Width(); - TInt xB = selectedArea.iBr.iX - rightEndWidth; - TPoint pointB = TPoint(xB, selectedArea.iTl.iY); - - // calculate the size of the middle part - TInt middlePartWidth = pointB.iX - pointA.iX; - TSize middlePartSize = TSize(middlePartWidth, iSliderSelectedMiddleIconRect.Height()); - - // draw left end of the cut selection slider - gc.BitBltMasked(selectedArea.iTl, iSliderSelectedLeftEndIcon, leftRect.Size(), - iSliderSelectedLeftEndIconMask, EFalse ); - - // draw middle part of the cut selection slider - gc.BitBltMasked(pointA, iSliderSelectedMiddleIcon, middlePartSize, - iSliderSelectedMiddleIconMask, EFalse ); - - // draw right end of the cut selection slider - gc.BitBltMasked(pointB, iSliderSelectedRightEndIcon, rightRect.Size(), - iSliderSelectedRightEndIconMask, EFalse ); - - if ( iFinished && !iDimmed ) - { - // draw the left border of cut selection slider if the start mark has been set - if ( iInPoint > 0 ) - { - gc.BitBltMasked(iStartMarkRect.iTl, iCutAreaBorderIcon, iCutAreaBorderIconRect.Size(), - iCutAreaBorderIconMask, EFalse ); - } - - // draw the right border of the cut selection slider if the end mark has been set - if (iOutPoint < iTotalDuration) - { - gc.BitBltMasked(iEndMarkRect.iTl, iCutAreaBorderIcon, iCutAreaBorderIconRect.Size(), - iCutAreaBorderIconMask, EFalse ); - } - } - } - else - { - // draw middle part of the cut selection slider - gc.BitBltMasked(selectedArea.iTl, iSliderSelectedMiddleIcon, selectedArea.Size(), - iSliderSelectedMiddleIconMask, EFalse ); - - if ( iFinished && !iDimmed ) - { - TPoint startPoint(selectedArea.iTl); - startPoint.iX = startPoint.iX - iStartMarkRect.Width(); - - if( iPressedComponent == EPressedStartMarkTouch ) - { - gc.BitBltMasked(startPoint, iStartMarkIconPressed, iStartMarkRect.Size(), - iStartMarkIconPressedMask, EFalse ); - } - else - { - gc.BitBltMasked(startPoint, iStartMarkIcon, iStartMarkRect.Size(), - iStartMarkIconMask, EFalse ); - } - - TPoint endPoint(selectedArea.iBr); - endPoint.iY = iEndMarkRect.iTl.iY; - - if( iPressedComponent == EPressedEndMarkTouch ) - { - gc.BitBltMasked(endPoint, iEndMarkIconPressed, iEndMarkRect.Size(), - iEndMarkIconPressedMask, EFalse ); - } - else - { - gc.BitBltMasked(endPoint, iEndMarkIcon, iEndMarkRect.Size(), - iEndMarkIconMask, EFalse ); - } - - } - } - - // calculate the playhead position - TUint width = iCutBarRect.Width(); - TInt currentPointX = 0; - if (iTotalDuration > 0) - { - currentPointX = iCurrentPoint * width / iTotalDuration + iCutBarRect.iTl.iX; - - // set the center of the playhead icon to the current position - currentPointX = currentPointX - ( iPlayheadIconRect.Width()/2 ); - } - - if( !AknLayoutUtils::PenEnabled() ) - { - // don't draw the playhead outside the cut bar area because it is not refreshed often enough - if ( currentPointX < iCutBarRect.iTl.iX ) - { - currentPointX = iCutBarRect.iTl.iX; - } - else if ( currentPointX > iCutBarRect.iBr.iX ) - { - currentPointX = iCutBarRect.iBr.iX; - } - - // draw playhead - gc.BitBltMasked(TPoint(currentPointX,iCutBarRect.iTl.iY), iPlayheadIcon, iPlayheadIconRect.Size(), - iPlayheadIconMask, EFalse ); - } - else - { - // draw playhead - if( iPressedComponent == EPressedPlayheadTouch ) - { - gc.BitBltMasked(TPoint(currentPointX,iCutBarRect.iBr.iY - iPlayheadIconRect.Height()), iPlayheadIconPressed, - iPlayheadIconRect.Size(), iPlayheadIconPressedMask, EFalse ); - } - else - { - gc.BitBltMasked(TPoint(currentPointX,iCutBarRect.iBr.iY - iPlayheadIconRect.Height()), iPlayheadIcon, iPlayheadIconRect.Size(), - iPlayheadIconMask, EFalse ); - } - } - } - -CCoeControl* CVeiCutterBar::ComponentControl( TInt /*aIndex*/ ) const - { - return NULL; - } - - -EXPORT_C void CVeiCutterBar::Dim( TBool aDimmed ) - { - iDimmed = aDimmed; - DrawDeferred(); - } - -EXPORT_C void CVeiCutterBar::SetPlayHeadVisible( TBool aVisible ) - { - iDrawPlayHead = aVisible; - } - -void CVeiCutterBar::HandleControlEventL( CCoeControl* /*aControl*/, - TCoeEvent /*aEventType*/ ) - { - DrawDeferred(); - } - -void CVeiCutterBar::SizeChanged() - { - // the component rects are set in CVeiSimpleCutVideoContainer::SizeChanged(), - // CVeiEditVideoContainer::SetCursorLocation() or CVeiCutVideoContainer::SizeChanged() - - // left end of the slider when that part is unselected - AknIconUtils::SetSize( iSliderLeftEndIcon, iSliderLeftEndIconRect.Size(), EAspectRatioNotPreserved); - - // middle part of the slider when that part is unselected - AknIconUtils::SetSize( iSliderMiddleIcon, iSliderMiddleIconRect.Size(), EAspectRatioNotPreserved); - - // right end of the slider when that part is unselected - AknIconUtils::SetSize( iSliderRightEndIcon, iSliderRightEndIconRect.Size(), EAspectRatioNotPreserved); - - if( !AknLayoutUtils::PenEnabled() ) - { - // left end of the cut selection slider - AknIconUtils::SetSize( iSliderSelectedLeftEndIcon, iSliderSelectedLeftEndIconRect.Size(), EAspectRatioNotPreserved); - - // middle part of the cut selection slider - AknIconUtils::SetSize( iSliderSelectedMiddleIcon, iSliderSelectedMiddleIconRect.Size(), EAspectRatioNotPreserved); - - // right end of the cut selection slider - AknIconUtils::SetSize( iSliderSelectedRightEndIcon, iSliderSelectedRightEndIconRect.Size(), EAspectRatioNotPreserved); - - // left/right border of cut selection slider - AknIconUtils::SetSize( iCutAreaBorderIcon, iCutAreaBorderIconRect.Size(), EAspectRatioNotPreserved); - - AknIconUtils::SetSize( iScissorsIcon, iScissorsIconRect.Size(), EAspectRatioNotPreserved); - - iStartMarkRect = TRect(CalculateCutAreaRect().iTl, iCutAreaBorderIconRect.Size()); - - TInt xD = CalculateCutAreaRect().iBr.iX - iCutAreaBorderIconRect.Width(); - TPoint pointD = TPoint (xD, iSliderSelectedLeftEndIconRect.iTl.iY); - - // set the end mark rect - iEndMarkRect = TRect(pointD, iCutAreaBorderIconRect.Size()); - } - else - { - // middle part of the cut selection slider - AknIconUtils::SetSize( iSliderSelectedMiddleIcon, TSize(iCutBarRect.Size().iWidth, iSliderSelectedMiddleIconRect.Size().iHeight), EAspectRatioNotPreserved); - - // left border of cut selection slider - AknIconUtils::SetSize( iStartMarkIcon, iStartMarkRect.Size(), EAspectRatioNotPreserved); - AknIconUtils::SetSize( iStartMarkIconPressed, iStartMarkRect.Size(), EAspectRatioNotPreserved); - - // right border of cut selection slider - AknIconUtils::SetSize( iEndMarkIcon, iEndMarkRect.Size(), EAspectRatioNotPreserved); - AknIconUtils::SetSize( iEndMarkIconPressed, iEndMarkRect.Size(), EAspectRatioNotPreserved); - } - - // playhead - AknIconUtils::SetSize( iPlayheadIcon, iPlayheadIconRect.Size(), EAspectRatioNotPreserved); - AknIconUtils::SetSize( iPlayheadIconPressed, iPlayheadIconRect.Size(), EAspectRatioNotPreserved); - } - -TKeyResponse CVeiCutterBar::OfferKeyEventL( const TKeyEvent& /*aKeyEvent*/, - TEventCode /*aType*/ ) - { - return EKeyWasNotConsumed; - } - -EXPORT_C void CVeiCutterBar::SetInPoint( const TTimeIntervalMicroSeconds& aIn ) - { - iInPoint = static_cast((aIn.Int64()/1000)); - - if( !AknLayoutUtils::PenEnabled() ) - { - iStartMarkRect = TRect(CalculateCutAreaRect().iTl, iCutAreaBorderIconRect.Size()); - DrawDeferred(); - return; - } - - TInt xD = CalculateCutAreaRect().iTl.iX - iStartMarkRect.Width(); - TPoint pointD = TPoint (xD, iStartMarkRect.iTl.iY); - TInt delta = pointD.iX - iStartMarkRect.iTl.iX; - iStartMarkTouchRect.iTl.iX += delta; - iStartMarkTouchRect.iBr.iX += delta; - - // set the start mark rect - iStartMarkRect = TRect(pointD, iStartMarkRect.Size()); - DrawDeferred(); - } - -EXPORT_C void CVeiCutterBar::SetOutPoint( const TTimeIntervalMicroSeconds& aOutPoint ) - { - iOutPoint = static_cast((aOutPoint.Int64()/1000)); - - // calculate the top left point (d in the picture below) for the end mark rect - // for more clarification, see the picture in Draw function - // - // right - // |<- end ->| - // -----b-----d---c--------- - // | |bor| - // | |der| - // ------------------------- - - if( !AknLayoutUtils::PenEnabled() ) - { - TInt xD = CalculateCutAreaRect().iBr.iX - iCutAreaBorderIconRect.Width(); - TPoint pointD = TPoint (xD, iSliderSelectedLeftEndIconRect.iTl.iY); - - // set the end mark rect - iEndMarkRect = TRect(pointD, iCutAreaBorderIconRect.Size()); - } - else - { - TPoint pointD = TPoint (CalculateCutAreaRect().iBr.iX, iEndMarkRect.iTl.iY); - TInt delta = pointD.iX - iEndMarkRect.iTl.iX; - iEndMarkTouchRect.iTl.iX += delta; - iEndMarkTouchRect.iBr.iX += delta; - - iEndMarkRect = TRect(pointD, iEndMarkRect.Size()); - } - - DrawDeferred(); - } - -EXPORT_C void CVeiCutterBar::SetFinishedStatus( TBool aStatus ) - { - iFinished = aStatus; -// iCurrentPoint = 0; - SetCurrentPoint( 0 ); - DrawDeferred(); - } - -EXPORT_C void CVeiCutterBar::SetTotalDuration( const TTimeIntervalMicroSeconds& aDuration ) - { - TTimeIntervalMicroSeconds duration (aDuration); - if ( duration.Int64() == 0 ) - { - duration = 1; - } - - TInt64 i = duration.Int64(); - for (;0 == (i/1000);i++) - { - ; - } - duration = i; - - iTotalDuration = static_cast((duration.Int64()/1000)); - SetOutPoint(aDuration); -// DrawDeferred(); - } - -EXPORT_C void CVeiCutterBar::SetCurrentPoint( TInt aLocation ) - { - if( AknLayoutUtils::PenEnabled() ) - { - // calculate the playhead position - TUint width = iCutBarRect.Width(); - TInt currentPointX = 0; - if (iTotalDuration > 0) - { - currentPointX = aLocation * width / iTotalDuration + iCutBarRect.iTl.iX; - } - currentPointX = currentPointX - ( iPlayheadTouchRect.Width()/2 ); - iPlayheadTouchRect.iBr.iX = currentPointX + iPlayheadTouchRect.Width(); - iPlayheadTouchRect.iTl.iX = currentPointX; - } - - iCurrentPoint = aLocation; - DrawDeferred(); - } - -// ---------------------------------------------------------------------------- -// CVeiCutterBar::ProgressBarRect -// -// ---------------------------------------------------------------------------- -// -EXPORT_C TRect CVeiCutterBar::ProgressBarRect() - { - return iCutBarRect; - } - -// ---------------------------------------------------------------------------- -// CVeiCutterBar::PlayHeadRect -// -// ---------------------------------------------------------------------------- -// -EXPORT_C TRect CVeiCutterBar::PlayHeadRect() - { - return iPlayheadTouchRect; - } - -// ---------------------------------------------------------------------------- -// CVeiCutterBar::StartMarkRect -// -// ---------------------------------------------------------------------------- -// -EXPORT_C TRect CVeiCutterBar::StartMarkRect() - { - if( AknLayoutUtils::PenEnabled() ) - { - return iStartMarkTouchRect; - } - - TRect startMarkArea; - - // start mark has not been set - if (iInPoint == 0) - { - startMarkArea = TRect(0,0,0,0); - } - else - { - startMarkArea = iStartMarkRect; - } - return startMarkArea; - } - -// ---------------------------------------------------------------------------- -// CVeiCutterBar::EndMarkRect -// -// ---------------------------------------------------------------------------- -// -EXPORT_C TRect CVeiCutterBar::EndMarkRect() - { - if( AknLayoutUtils::PenEnabled() ) - { - return iEndMarkTouchRect; - } - - TRect endMarkArea; - - // end mark has not been set - if (iOutPoint == iTotalDuration) - { - endMarkArea = TRect(0,0,0,0); - } - else - { - endMarkArea = iEndMarkRect; - } - return endMarkArea; - } - -// ---------------------------------------------------------------------------- -// CVeiCutterBar::StartMarkPoint -// -// ---------------------------------------------------------------------------- -// -EXPORT_C TUint CVeiCutterBar::StartMarkPoint() -{ - // start mark hasn't been set - if (iInPoint == 0) - { - return 0; - } - // start mark has been set - else - { - TInt startPoint = iInPoint * iCutBarRect.Width() / iTotalDuration + iCutBarRect.iTl.iX; - return startPoint; - } -} - -// ---------------------------------------------------------------------------- -// CVeiCutterBar::EndMarkPoint -// -// ---------------------------------------------------------------------------- -// -EXPORT_C TUint CVeiCutterBar::EndMarkPoint() -{ - // end mark hasn't been set - if (iOutPoint == iTotalDuration) - { - return iCutBarRect.iBr.iX; - } - // end mark has been set - else - { - TInt endPoint = iOutPoint * iCutBarRect.Width() / iTotalDuration + iCutBarRect.iTl.iX; - return endPoint; - } -} - - -// ---------------------------------------------------------------------------- -// CVeiCutterBar::SetComponentRect -// -// ---------------------------------------------------------------------------- -// -EXPORT_C void CVeiCutterBar::SetComponentRect(TCutterBarComponent aComponentIndex, TRect aRect) - { - switch ( aComponentIndex ) - { - case EScissorsIcon: - { - iScissorsIconRect = aRect; - break; - } - case EProgressBar: - { - iCutBarRect = aRect; - break; - } - case ESliderLeftEndIcon: - { - iSliderLeftEndIconRect = aRect; - break; - } - case ESliderMiddleIcon: - { - iSliderMiddleIconRect = aRect; - break; - } - case ESliderRightEndIcon: - { - iSliderRightEndIconRect = aRect; - break; - } - case ESliderSelectedLeftEndIcon: - { - iSliderSelectedLeftEndIconRect = aRect; - break; - } - case ESliderSelectedMiddleIcon: - { - iSliderSelectedMiddleIconRect = aRect; - break; - } - case ESliderSelectedRightEndIcon: - { - iSliderSelectedRightEndIconRect = aRect; - break; - } - case EPlayheadIcon: - { - iPlayheadIconRect = aRect; - break; - } - case ECutAreaBorderIcon: - { - iCutAreaBorderIconRect = aRect; - break; - } - case EStartMarkIcon: - { - iStartMarkRect = aRect; - break; - } - case EEndMarkIcon: - { - iEndMarkRect = aRect; - break; - } - case EPlayheadTouch: - { - iPlayheadTouchRect = aRect; - SetCurrentPoint(iCurrentPoint); - break; - } - case EStartMarkTouch: - { - iStartMarkTouchRect = aRect; - break; - } - case EEndMarkTouch: - { - iEndMarkTouchRect = aRect; - break; - } - } - } - -// ---------------------------------------------------------------------------- -// CVeiCutterBar::SetPressedComponent -// -// ---------------------------------------------------------------------------- -// -EXPORT_C void CVeiCutterBar::SetPressedComponent(TCutterBarPressedIcon aComponentIndex) - { - iPressedComponent = aComponentIndex; - } - -// ---------------------------------------------------------------------------- -// CVeiCutterBar::CalculateCutAreaRect -// -// ---------------------------------------------------------------------------- -// -TRect CVeiCutterBar::CalculateCutAreaRect() const - { - - TUint width = iCutBarRect.Width(); - TInt inPointX = 0; - TInt outPointX = 0; - - if (0 < iTotalDuration) - { - inPointX = iInPoint * width / iTotalDuration + iCutBarRect.iTl.iX; - outPointX = iOutPoint * width / iTotalDuration + iCutBarRect.iTl.iX; - } - - if ( outPointX > iCutBarRect.iBr.iX ) - { - outPointX = iCutBarRect.iBr.iX; - } - - // area to be cut - TRect selectedArea( iCutBarRect ); - - if ( iFinished && !iDimmed ) - { - selectedArea.iTl.iX = inPointX; - selectedArea.iBr.iX = outPointX; - } - - return selectedArea; - - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/src/VeiEditVideoLabelNavi.cpp --- a/videditor/VideoEditorUiComponents/src/VeiEditVideoLabelNavi.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,625 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "VeiEditVideoLabelNavi.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "VeiVideoEditorSettings.h" -#include "VideoEditorCommon.h" -#include "VideoEditorUtils.h" -#include "VideoEditorDebugUtils.h" - -#include -#include -#include - -// CONSTANTS -_LIT(KResourceFile, "VideoEditorUiComponents.rsc"); -const TReal KQvgaTextAndIconShrinkFactor = 0.8; - -// --------------------------------------------------------- -// CVeiEditVideoLabelNavi::NewL() -// --------------------------------------------------------- -// -EXPORT_C CVeiEditVideoLabelNavi* CVeiEditVideoLabelNavi::NewL() - { - CVeiEditVideoLabelNavi* self = CVeiEditVideoLabelNavi::NewLC(); - CleanupStack::Pop( self ); - return self; - } -// --------------------------------------------------------- -// CVeiEditVideoLabelNavi::NewLC() -// --------------------------------------------------------- -// -EXPORT_C CVeiEditVideoLabelNavi* CVeiEditVideoLabelNavi::NewLC() - { - CVeiEditVideoLabelNavi* self = new (ELeave) CVeiEditVideoLabelNavi; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } -// --------------------------------------------------------- -// TUid CVeiEditVideoLabelNavi::ConstructL() -// --------------------------------------------------------- -// -void CVeiEditVideoLabelNavi::ConstructL() - { - LOG(KVideoEditorLogFile, "CVeiEditVideoLabelNavi::ConstructL: in"); - - iState = /*EStateEditView*/EStateInitializing; - - iMmsMaxSize = 0; - CVeiVideoEditorSettings::GetMaxMmsSizeL( iMmsMaxSize ); - - LoadBitmapsL(); - - // Open resource file - TFileName resourceFile; - Dll::FileName(resourceFile); - TParse p; - p.Set(KResourceFile, &KDC_RESOURCE_FILES_DIR, &resourceFile); - resourceFile = p.FullName(); - iResLoader.OpenL( resourceFile ); - - // The primary small font seems to be the smallest font available, - // but it is still too large to fit all the texts in QVGA mode. - // We need to shrink it a little bit. - TAknFontSpecification spec( KAknFontCategoryPrimarySmall ); - const CFont* myFont = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - spec.SetTextPaneHeight( myFont->HeightInPixels() * KQvgaTextAndIconShrinkFactor ); - CWsScreenDevice* dev = ControlEnv()->ScreenDevice(); - iCustomFont = AknFontAccess::CreateLayoutFontFromSpecificationL( *dev, spec ); - - LOG(KVideoEditorLogFile, "CVeiEditVideoLabelNavi::ConstructL: out"); - } -// --------------------------------------------------------- -// TUid CVeiEditVideoLabelNavi::LoadBitmapsL() -// --------------------------------------------------------- -// -void CVeiEditVideoLabelNavi::LoadBitmapsL() - { - LOG(KVideoEditorLogFile, "CVeiEditVideoLabelNavi::LoadBitmapsL: in"); - - TFileName bitmapfile( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) ); - MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); -/* Mms bitmap */ - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iMmsBitmap, iMmsBitmapMask, - bitmapfile, - EMbmVideoeditoruicomponentsQgn_indi_ve_mms_ok, EMbmVideoeditoruicomponentsQgn_indi_ve_mms_ok_mask,KRgbBlack); - -/* No Mms bitmap */ - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iNoMmsBitmap, iNoMmsBitmapMask, - bitmapfile, - EMbmVideoeditoruicomponentsQgn_indi_ve_mms_non, EMbmVideoeditoruicomponentsQgn_indi_ve_mms_non_mask,KRgbBlack); - -/* Phone memory bitmap */ - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iPhoneMemoryBitmap, iPhoneMemoryBitmapMask, - bitmapfile, - EMbmVideoeditoruicomponentsQgn_indi_ve_phone, EMbmVideoeditoruicomponentsQgn_indi_ve_phone_mask,KRgbBlack); - -/* No phone memory bitmap */ - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iNoPhoneMemoryBitmap, iNoPhoneMemoryBitmapMask, - bitmapfile, - EMbmVideoeditoruicomponentsQgn_indi_ve_phone_non, EMbmVideoeditoruicomponentsQgn_indi_ve_phone_non_mask,KRgbBlack); - -/* MMC bitmap */ - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iMMCBitmap, iMMCBitmapMask, - bitmapfile, - EMbmVideoeditoruicomponentsQgn_indi_ve_mmc, EMbmVideoeditoruicomponentsQgn_indi_ve_mmc_mask,KRgbBlack); - -/* No MMC bitmap */ - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iNoMMCBitmap, iNoMMCBitmapMask, - bitmapfile, - EMbmVideoeditoruicomponentsQgn_indi_ve_mmc_non, EMbmVideoeditoruicomponentsQgn_indi_ve_mmc_non_mask,KRgbBlack); - -/* Time bitmap */ - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iTimeBitmap, iTimeBitmapMask, - bitmapfile, - EMbmVideoeditoruicomponentsQgn_indi_ve_videolength, EMbmVideoeditoruicomponentsQgn_indi_ve_videolength_mask,KRgbBlack); - - LOG(KVideoEditorLogFile, "CVeiEditVideoLabelNavi::LoadBitmapsL: out"); - } - -// --------------------------------------------------------- -// TUid CVeiEditVideoLabelNavi::~CVeiEditVideoLabelNavi() -// --------------------------------------------------------- -// -EXPORT_C CVeiEditVideoLabelNavi::~CVeiEditVideoLabelNavi() - { - DeleteBitmaps(); - iResLoader.Close(); - delete iCustomFont; - } - -void CVeiEditVideoLabelNavi::DeleteBitmaps() - { - delete iMmsBitmap; - iMmsBitmap = NULL; - - delete iMmsBitmapMask; - iMmsBitmapMask = NULL; - - delete iNoMmsBitmap; - iNoMmsBitmap = NULL; - - delete iNoMmsBitmapMask; - iNoMmsBitmapMask = NULL; - - delete iPhoneMemoryBitmap; - iPhoneMemoryBitmap = NULL; - - delete iPhoneMemoryBitmapMask; - iPhoneMemoryBitmapMask = NULL; - - delete iNoPhoneMemoryBitmap; - iNoPhoneMemoryBitmap = NULL; - - delete iNoPhoneMemoryBitmapMask; - iNoPhoneMemoryBitmapMask = NULL; - - delete iMMCBitmap; - iMMCBitmap = NULL; - - delete iMMCBitmapMask; - iMMCBitmapMask = NULL; - - delete iNoMMCBitmap; - iNoMMCBitmap = NULL; - - delete iNoMMCBitmapMask; - iNoMMCBitmapMask = NULL; - - delete iTimeBitmap; - iTimeBitmap = NULL; - - delete iTimeBitmapMask; - iTimeBitmapMask = NULL; - } - -// --------------------------------------------------------- -// CVeiEditVideoLabelNavi::CVeiEditVideoLabelNavi() -// --------------------------------------------------------- -// -CVeiEditVideoLabelNavi::CVeiEditVideoLabelNavi() : iResLoader(*CEikonEnv::Static()) - { - iStoryboardDuration = 0; - iStoryboardSize = 0; - } - -// --------------------------------------------------------- -// CVeiEditVideoLabelNavi::Draw(const TRect& aRect) const -// --------------------------------------------------------- -// -void CVeiEditVideoLabelNavi::Draw(const TRect& aRect) const - { - if ( iState == EStateInitializing ) - { - return; - } - CWindowGc& gc=SystemGc(); - - // Get navi pane text color from skin - TRgb textColor( KRgbBlack ); - MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); - AknsUtils::GetCachedColor(skinInstance, textColor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG2 ); - - TBuf<25> layoutTime; - //minutes and seconds "120:13" - TBuf<15> minsec; - TInt64 duration = 0; - TTimeIntervalHours hours; - TTimeIntervalMinutes minutes; - TTimeIntervalMicroSeconds seconds; - duration = static_cast( iStoryboardDuration / 1000 ); - - TChar timeSeparator = TLocale().TimeSeparator(2); - - //over 1 hour - if( duration >= 3600000 ) - { - hours = TTimeIntervalHours( (TInt)(duration / 3600000) ); - minsec.AppendNum( hours.Int() ); - minsec.Append( timeSeparator ); - - duration = duration - TInt64(hours.Int()) * TInt64(3600000); - } - //over 1 minute - if( duration >= 60000 ) - { - minutes = TTimeIntervalMinutes( (TInt)(duration / 60000) ); - minsec.AppendNum( minutes.Int() ); - - duration = duration - TInt64(minutes.Int()) * TInt64(60000); - } - else - { - minsec.Append( _L( "00" ) ); - } - - if( duration >= 1000 ) - { - seconds = TTimeIntervalMicroSeconds( duration / 1000 ); - - if( seconds.Int64() >= 60 ) - { - minsec.Append( timeSeparator ); - minsec.AppendNum( seconds.Int64() - 60 ); - } - else - { - minsec.Append( timeSeparator ); - if ( seconds.Int64() < 10 ) - { - minsec.Append( _L("0") ); - } - - minsec.AppendNum( seconds.Int64() ); - } - } - else - { - minsec.Append( timeSeparator ); - minsec.Append( _L("00") ); - } - layoutTime.Append( minsec ); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( layoutTime ); - - //text MMS - TBuf<25> layoutTextMMS; - HBufC* stringholder = StringLoader::LoadLC( R_VEI_NAVI_PANE_MMS, iEikonEnv ); - layoutTextMMS.Append( *stringholder ); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( layoutTextMMS ); - CleanupStack::PopAndDestroy( stringholder ); - - //size of the movie in KB, MB or GB - TBuf<25> layoutSize; - - if ( iStoryboardSize < 1000 ) - { - HBufC* stringholder = StringLoader::LoadLC( R_VEI_SIZE_KB, iStoryboardSize, iEikonEnv ); - layoutSize.Append( *stringholder ); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( layoutSize ); - CleanupStack::PopAndDestroy( stringholder ); - } - else - { - TReal size = (TReal)iStoryboardSize / 1024; - if ( size >= 1000 ) - { - // Gigabytes are handled differently from megabytes, because we don't have - // appropriate localized string (i.e. with %U param) for gigabytes. - TInt gigaSize = (TInt) (size/1024 + 0.5); - stringholder = StringLoader::LoadLC( R_VEI_SIZE_GB, gigaSize, iEikonEnv ); - layoutSize.Append( *stringholder ); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( layoutSize ); - CleanupStack::PopAndDestroy( stringholder ); - } - else - { - // for megabytes, drop the decimals if the value has 3 or more digits - TBuf16<256> sizeValue; - if (size < 100) - { - _LIT16( KFormat,"%3.1f" ); - sizeValue.Format( KFormat,size ); - } - else - { - _LIT16( KFormat,"%3.0f" ); - sizeValue.Format( KFormat,size ); - } - stringholder = StringLoader::LoadLC( R_VEI_SIZE_MB, sizeValue, iCoeEnv ); - layoutSize.Append( *stringholder ); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( layoutSize ); - CleanupStack::PopAndDestroy( stringholder ); - } - } - - - if ( iState == EStateEditView ) //EditView owns the navipane - { - if ( iMmsAvailable ) - { - iBitmapLayout[0].DrawImage( gc, iMmsBitmap, iMmsBitmapMask ); - } - else - { - iBitmapLayout[0].DrawImage( gc, iNoMmsBitmap, iNoMmsBitmapMask ); - } - - if ( aRect.iBr.iX >= 148 ) // QVGA or bigger - { - - if ( iPhoneMemory ) //phone memory in use. - { - if ( iMemoryAvailable ) - { - iBitmapLayout[1].DrawImage( gc, iPhoneMemoryBitmap, iPhoneMemoryBitmapMask ); - } - else - { - iBitmapLayout[1].DrawImage( gc, iNoPhoneMemoryBitmap, iNoPhoneMemoryBitmapMask ); - } - } - else //mmc-memory in use. - { - if ( iMemoryAvailable ) - { - iBitmapLayout[1].DrawImage( gc, iMMCBitmap, iMMCBitmapMask ); - } - else - { - iBitmapLayout[1].DrawImage( gc, iNoMMCBitmap, iNoMMCBitmapMask ); - } - } - iTextLayout[1].DrawText( gc, layoutSize, ETrue, textColor ); - } - - iBitmapLayout[2].DrawImage( gc, iTimeBitmap, iTimeBitmapMask ); - - - iTextLayout[0].DrawText( gc, layoutTextMMS, ETrue, textColor ); - iTextLayout[2].DrawText( gc, layoutTime, ETrue, textColor ); - - } - else if ( iState == EStateTrimForMmsView ) //TrimForMmsView owns the navi pane. - { - if ( iMmsAvailable ) - { - iBitmapLayout[0].DrawImage( gc, iMmsBitmap, iMmsBitmapMask ); - } - else - { - iBitmapLayout[0].DrawImage( gc, iNoMmsBitmap, iNoMmsBitmapMask ); - } - iTextLayout[0].DrawText( gc, layoutSize, ETrue, textColor ); - iBitmapLayout[2].DrawImage( gc, iTimeBitmap, iTimeBitmapMask ); - iTextLayout[2].DrawText( gc, layoutTime, ETrue, textColor ); - } - - // TEST -/* gc.SetPenColor( KRgbRed ); - iBitmapLayout[0].DrawOutLineRect(gc); - iBitmapLayout[1].DrawOutLineRect(gc); - iBitmapLayout[2].DrawOutLineRect(gc); - - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - gc.DrawRect( iTextLayout[0].TextRect() ); - gc.DrawRect( iTextLayout[1].TextRect() ); - gc.DrawRect( iTextLayout[2].TextRect() ); - - gc.DrawRect( Rect() );*/ - // END TEST - - } - -// --------------------------------------------------------- -// CVeiEditVideoLabelNavi::HandleResourceChange(TInt aType) -// --------------------------------------------------------- -// -void CVeiEditVideoLabelNavi::HandleResourceChange(TInt aType) - { - LOGFMT(KVideoEditorLogFile, "CVeiEditVideoLabelNavi::HandleResourceChange() In, aType:%d", aType); - - if (KAknsMessageSkinChange == aType) - { - // Reload the icon bitmaps with the current skin color - DeleteBitmaps(); - TRAP_IGNORE( LoadBitmapsL() ); - } - CCoeControl::HandleResourceChange(aType); - - LOG(KVideoEditorLogFile, "CVeiEditVideoLabelNavi::HandleResourceChange() Out"); - } - -// -------------------------------------------------------- -// CVeiEditVideoLabelNavi::SetMmsAvailableL( TBool aIsAvailable ) -// Set MMS envelope without red line or with it. -// --------------------------------------------------------- -// -EXPORT_C void CVeiEditVideoLabelNavi::SetMmsAvailableL( TBool aIsAvailable ) - { - iMmsAvailable = aIsAvailable; - ReportEventL( MCoeControlObserver::EEventStateChanged ); - } -EXPORT_C TBool CVeiEditVideoLabelNavi::IsMMSAvailable() const - { - return iMmsAvailable; - } - -// -------------------------------------------------------- -// CVeiEditVideoLabelNavi::SetMemoryInUseL( TBool aPhoneMemory ) -// Set memory in use Phone/MMC. -// --------------------------------------------------------- -// -EXPORT_C void CVeiEditVideoLabelNavi::SetMemoryInUseL( TBool aPhoneMemory ) - { - iPhoneMemory = aPhoneMemory; - ReportEventL( MCoeControlObserver::EEventStateChanged ); - } -// -------------------------------------------------------- -// CVeiEditVideoLabelNavi::SetMemoryAvailableL( TBool aIsAvailable ) -// ?implementation_description -// --------------------------------------------------------- -// -EXPORT_C void CVeiEditVideoLabelNavi::SetMemoryAvailableL( TBool aIsAvailable ) - { - iMemoryAvailable = aIsAvailable; - ReportEventL( MCoeControlObserver::EEventStateChanged ); - } -// --------------------------------------------------------- -// CVeiEditVideoLabelNavi::SetDurationLabelL( const TUint& aDuration ) -// Set movie duration. -// --------------------------------------------------------- -// -EXPORT_C void CVeiEditVideoLabelNavi::SetDurationLabelL( const TInt64& aDuration ) - { - iStoryboardDuration = aDuration; - ReportEventL( MCoeControlObserver::EEventStateChanged ); - } - -// --------------------------------------------------------- -// CVeiEditVideoLabelNavi::SetSizeLabelL( const TUint& aSize ) -// Set movie size. -// --------------------------------------------------------- -// -EXPORT_C void CVeiEditVideoLabelNavi::SetSizeLabelL( const TUint& aSize ) - { - iStoryboardSize = aSize; - ReportEventL( MCoeControlObserver::EEventStateChanged ); - } -// --------------------------------------------------------- -// CVeiEditVideoLabelNavi::SetState( CVeiEditVideoLabelNavi::TLabelNaviState aState ) -// Set whether editview or trimformms-view -// --------------------------------------------------------- -// -EXPORT_C void CVeiEditVideoLabelNavi::SetState( CVeiEditVideoLabelNavi::TLabelNaviState aState ) - { - iState = aState; - } - -// --------------------------------------------------------- -// CVeiEditVideoLabelNavi::SizeChanged() -// --------------------------------------------------------- -// -void CVeiEditVideoLabelNavi::SizeChanged() - { - TRect parentRect = Rect(); - parentRect.iTl.iY = parentRect.iTl.iY +2; - TInt adjustLeftMemoryIcon(0); - TInt adjustLeftTimeIcon(0); - - TInt adjustLeftMMSIcon = 0; - TInt adjustWidth = parentRect.Height(); - TInt adjustHeight = parentRect.Height(); - - const CFont* myFont = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - - // For high resolution(352x416) use different font - if ( parentRect.iBr.iX >= 216 ) // high resolution(352x416) - { - adjustLeftMemoryIcon = STATIC_CAST( TInt, parentRect.Width() * 0.28 ); - adjustLeftTimeIcon = STATIC_CAST( TInt, parentRect.Width() * 0.67 ); - myFont = AknLayoutUtils::FontFromId( ELatinBold12 ); - } - else if ( parentRect.iBr.iX >= 148 ) // QVGA (240x320) - { - adjustLeftMemoryIcon = STATIC_CAST( TInt, parentRect.Width() * 0.27 ); - adjustLeftTimeIcon = STATIC_CAST( TInt, parentRect.Width() * 0.64 ); - - // Reduce the relative size of the icons a little bit. - adjustWidth *= KQvgaTextAndIconShrinkFactor; - adjustHeight *= KQvgaTextAndIconShrinkFactor; - - // use the extra small font - myFont = (const CFont*)iCustomFont; - } - else - { - // in the small resolution (176x208) the memory icon and text are dropped out - adjustLeftMemoryIcon = STATIC_CAST( TInt, parentRect.Width() * 0.4138 ); - adjustLeftTimeIcon = STATIC_CAST( TInt, parentRect.Width() * 0.42 + 15); - } - - AknIconUtils::SetSize( iMmsBitmap, TSize( adjustWidth,adjustHeight) ); - AknIconUtils::SetSize( iNoMmsBitmap, TSize(adjustWidth,adjustHeight) ); - AknIconUtils::SetSize( iPhoneMemoryBitmap, TSize(adjustWidth,adjustHeight) ); - AknIconUtils::SetSize( iNoPhoneMemoryBitmap, TSize(adjustWidth,adjustHeight) ); - AknIconUtils::SetSize( iMMCBitmap, TSize(adjustWidth,adjustHeight) ); - AknIconUtils::SetSize( iNoMMCBitmap, TSize(adjustWidth,adjustHeight) ); - AknIconUtils::SetSize( iTimeBitmap, TSize(adjustWidth,adjustHeight) ); - - //LayoutRect(const TRect &aParent, TInt C, TInt left, TInt top, TInt right, TInt bottom, TInt Width, TInt Height); - iBitmapLayout[0].LayoutRect( parentRect, ELayoutEmpty, adjustLeftMMSIcon, 0, ELayoutEmpty, ELayoutEmpty, adjustWidth, adjustHeight ); - iBitmapLayout[1].LayoutRect( parentRect, ELayoutEmpty, adjustLeftMemoryIcon, 0, ELayoutEmpty, ELayoutEmpty, adjustWidth, adjustHeight ); - iBitmapLayout[2].LayoutRect( parentRect, ELayoutEmpty, adjustLeftTimeIcon, 0, ELayoutEmpty, ELayoutEmpty, adjustWidth, adjustHeight ); - - //layout for MMS-text - TInt tX = adjustLeftMMSIcon + adjustWidth; - TInt tY = 2; - - TInt bX = adjustLeftTimeIcon; - TInt bY = parentRect.Height(); - TRect mmsTextArea( tX, tY, bX, bY ); - - TInt baseline = ( mmsTextArea.Height() / 2 ) + ( myFont->AscentInPixels() / 2 ); - if (myFont == iCustomFont) - { - // It seems that even if the font size is scaled down, AscentInPixels() - // returns the original fon't ascent. We have to scale it down as well. - baseline = ( mmsTextArea.Height() / 2 ) + ( myFont->AscentInPixels() / 2 * KQvgaTextAndIconShrinkFactor ); - } - TInt margin=1; - TInt width = mmsTextArea.Width(); - iTextLayout[0].LayoutText( mmsTextArea,0,0,margin,margin,baseline,width,ELayoutAlignLeft,myFont ); - - //layout for size-text - tX = adjustLeftMemoryIcon + adjustWidth; - bX = adjustLeftTimeIcon; - TRect sizeTextArea( tX, tY, bX, bY ); - width = sizeTextArea.Width(); - //LayoutText(const TRect& aParent, TInt fontid, TInt C, TInt l, TInt r, TInt B, TInt W, TInt J, const CFont* aCustomFont=0); - iTextLayout[1].LayoutText( sizeTextArea, 0, 0, margin, margin, baseline, width, ELayoutAlignLeft, myFont ); - - //layout for time-text - tX = adjustLeftTimeIcon + adjustWidth; - bX = parentRect.Width(); - TRect timeTextArea( tX, tY, bX, bY ); - width = timeTextArea.Width(); - iTextLayout[2].LayoutText( timeTextArea, 0, 0, margin, margin, baseline, width, ELayoutAlignLeft, myFont ); - } - - -//------------------------------------------------------------------------------- -//CVeiEditVideoLabelNavi::GetMaxMmsSize() -// available max size of the MMS. -//------------------------------------------------------------------------------- -EXPORT_C TInt CVeiEditVideoLabelNavi::GetMaxMmsSize() const - { - return iMmsMaxSize/1024; - } -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/src/VeiErrorUi.cpp --- a/videditor/VideoEditorUiComponents/src/VeiErrorUi.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDES -#include -#include -#include -#include -#include -#include "VeiErrorUi.h" -#include "VideoEditorDebugUtils.h" - -// CONSTANTS -_LIT(KResourceFile, "VideoEditorUiComponents.rsc"); - - -//============================================================================= -EXPORT_C CVeiErrorUI* CVeiErrorUI::NewL( CCoeEnv& aCoeEnv ) - { - CVeiErrorUI* self = new (ELeave) CVeiErrorUI( aCoeEnv ); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -//============================================================================= -void CVeiErrorUI::ConstructL() - { - iErrorUI = CErrorUI::NewL(); - - // Locate and open the resource file - TFileName fileName; - TParse p; - - Dll::FileName(fileName); - p.Set(KResourceFile, &KDC_RESOURCE_FILES_DIR, &fileName); - fileName = p.FullName(); - - LOGFMT(KVideoEditorLogFile, "\tLoading resource file: %S", &fileName); - iResLoader.OpenL( fileName ); // RConeResourceLoader selects the correct language file - } - -//============================================================================= -CVeiErrorUI::CVeiErrorUI( CCoeEnv& aCoeEnv ) : iCoeEnv( aCoeEnv ), iResLoader( aCoeEnv ) - { - } - -//============================================================================= -CVeiErrorUI::~CVeiErrorUI() - { - delete iErrorUI; - iResLoader.Close(); - } - -//============================================================================= -EXPORT_C TInt CVeiErrorUI::ShowGlobalErrorNote( const TInt aError ) const - { - LOGFMT(KVideoEditorLogFile, "CVeiErrorUI::ShowGlobalErrorNoteL: In (%d)", aError); - - TRAPD ( err, - switch( aError ) - { - case 0: - { - // do nothing to KErrNone - break; - } - case -3: - { - // do nothing to KErrCancel - break; - } - case -4: // KErrNoMemory - { - iErrorUI->ShowGlobalErrorNoteL( aError ); - break; - } - case -5: // KErrNotSupported - { - iErrorUI->ShowGlobalErrorNoteL( aError ); - break; - } - case -14: // KErrInUse - { - iErrorUI->ShowGlobalErrorNoteL( aError ); - break; - } - case -26: // KErrDiskFull - { - iErrorUI->ShowGlobalErrorNoteL( aError ); - break; - } - case -33: // KErrTimedOut - { - iErrorUI->ShowGlobalErrorNoteL( aError ); - break; - } - case -46: // KErrPermissionDenied - { - iErrorUI->ShowGlobalErrorNoteL( aError ); - break; - } - default : - { - HBufC* stringholder; - stringholder = StringLoader::LoadLC( R_VEI_DEFAULT_ERROR_NOTE, &iCoeEnv ); - CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue ); - dlg->ExecuteLD( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - break; - } - } - ); - - LOGFMT(KVideoEditorLogFile, "CVeiErrorUI::ShowGlobalErrorNote: Out: %d", err); - - return err; - } - -//============================================================================= -EXPORT_C TInt CVeiErrorUI::ShowErrorNote( CCoeEnv& aCoeEnv, const TInt aResourceId, TInt aError ) - { - LOG(KVideoEditorLogFile, "CVeiErrorUI::ShowErrorNote: in"); - - TRAPD ( err, - - HBufC* stringholder; - if ( aError == 0 ) - { - stringholder = StringLoader::LoadLC( aResourceId, &aCoeEnv ); - } - else - { - stringholder = StringLoader::LoadLC( aResourceId, aError, &aCoeEnv ); - } - - CAknErrorNote* dlg = new ( ELeave ) CAknErrorNote( ETrue ); - dlg->ExecuteLD( *stringholder ); - - CleanupStack::PopAndDestroy( stringholder ); - ); - - LOGFMT(KVideoEditorLogFile, "CVeiErrorUI::ShowErrorNote: out: %d", err); - - return err; - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/src/VeiSlider.cpp --- a/videditor/VideoEditorUiComponents/src/VeiSlider.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,429 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "VeiSlider.h" -#include "VeiSlider.pan" -#include "VideoEditorDebugUtils.h" - -#include -#include -#include -#include -#include - -// CONSTANTS -_LIT(KSliderMifFile, "\\resource\\apps\\VideoEditorUiComponents.mif"); - -const TInt KTabAspectRatioX = 10; -const TInt KTabAspectRatioY = 24; - -//============================================================================= -// -// class CVeiSlider member functions -// -//============================================================================= - -//============================================================================= -EXPORT_C CVeiSlider::~CVeiSlider() - { - delete iSliderBg; - delete iSliderBgMask; - delete iSliderTab; - delete iSliderTabMask; - } - -//============================================================================= -CVeiSlider::CVeiSlider() - { - // no implementation required - } - -//============================================================================= -TInt CVeiSlider::CountComponentControls() const - { - return 0; - } - -//============================================================================= -CCoeControl* CVeiSlider::ComponentControl(TInt /*aIndex*/) const - { - return NULL; - } - -// setters - -//============================================================================= -EXPORT_C void CVeiSlider::SetMinimum(TInt aValue) - { - iMinimumValue = aValue; - } - -//============================================================================= -EXPORT_C void CVeiSlider::SetMaximum(TInt aValue) - { - iMaximumValue = aValue; - } - -//============================================================================= -EXPORT_C void CVeiSlider::SetStep(TUint aValue) - { - iStep = aValue; - } - -//============================================================================= -EXPORT_C void CVeiSlider::SetStepAmount(TUint8 aValue) - { - iNumberOfSteps = aValue; - - if(aValue == 0) - { - iStep = 0; - } - else - { - iStep = (iMaximumValue-iMinimumValue) / aValue; - } - } - -//============================================================================= -EXPORT_C void CVeiSlider::SetPosition(TInt aValue) - { - __ASSERT_ALWAYS( aValue >= iMinimumValue, Panic(EVeiSliderPanicIndexUnderflow) ); - __ASSERT_ALWAYS( aValue <= iMaximumValue, Panic(EVeiSliderPanicIndexOverflow) ); - - iPosition = aValue; - } - -// getters - -//============================================================================= -EXPORT_C TInt CVeiSlider::Minimum() const - { - return iMinimumValue; - } - -//============================================================================= -EXPORT_C TInt CVeiSlider::Maximum() const - { - return iMaximumValue; - } - -//============================================================================= -EXPORT_C TInt CVeiSlider::Step() const - { - return iStep; - } - -//============================================================================= -EXPORT_C TInt CVeiSlider::SliderPosition() const - { - return iPosition; - } - -//============================================================================= -EXPORT_C void CVeiSlider::Increment() - { - iPosition += iStep; - if(iPosition > iMaximumValue) - { - iPosition = iMaximumValue; - } - } - -//============================================================================= -EXPORT_C void CVeiSlider::Decrement() - { - iPosition -= iStep; - if(iPosition < iMinimumValue) - { - iPosition = iMinimumValue; - } - } - -//============================================================================= -void CVeiSlider::LoadBitmapL( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask, TInt aBitmapId, TInt aMaskId ) const - { - TFileName iconFile( KSliderMifFile ); - - User::LeaveIfError( CompleteWithAppPath(iconFile) ); - - // Get ids for bitmap and mask - AknIconUtils::CreateIconL( - aBitmap, - aMask, - iconFile, - aBitmapId, - aMaskId - ); - } - - -//============================================================================= -// -// class CVeiVerticalSlider member functions -// -//============================================================================= - -//============================================================================= -EXPORT_C CVeiVerticalSlider* CVeiVerticalSlider::NewL(const TRect& aRect, const CCoeControl& aControl) - { - CVeiVerticalSlider* self = CVeiVerticalSlider::NewLC(aRect, aControl); - CleanupStack::Pop(self); - return self; - } - -//============================================================================= -EXPORT_C CVeiVerticalSlider* CVeiVerticalSlider::NewLC(const TRect& aRect, const CCoeControl& aControl) - { - CVeiVerticalSlider* self = new (ELeave) CVeiVerticalSlider; - CleanupStack::PushL(self); - self->ConstructL(aRect, aControl); - return self; - } - -//============================================================================= -EXPORT_C CVeiVerticalSlider::~CVeiVerticalSlider() - { - } - -//============================================================================= -void CVeiVerticalSlider::ConstructL(const TRect& aRect, const CCoeControl& aControl) - { - LOG(KVideoEditorLogFile, "CVeiVerticalSlider::ConstructL: in"); - - SetContainerWindowL(aControl); - - // Load the bitmaps - LoadBitmapL( iSliderBg, iSliderBgMask, EMbmVideoeditoruicomponentsQgn_graf_ied_vslider, EMbmVideoeditoruicomponentsQgn_graf_ied_vslider_mask ); - LoadBitmapL( iSliderTab, iSliderTabMask, EMbmVideoeditoruicomponentsQgn_graf_ied_vtab, EMbmVideoeditoruicomponentsQgn_graf_ied_vtab_mask ); - - SetRect(aRect); - ActivateL(); - - LOG(KVideoEditorLogFile, "CVeiVerticalSlider::ConstructL: out"); - } - -//============================================================================= -CVeiVerticalSlider::CVeiVerticalSlider() - { - // no implementation required - } - -//============================================================================= -void CVeiVerticalSlider::Draw(const TRect& aRect) const - { - if ( Minimum() <= Maximum() ) - { - TUint height = Maximum() - Minimum(); // height of the slider - TUint pixelsFromMin = SliderPosition() - Minimum(); // tab position from the beginning - - TReal factor = 0.0; - if (Minimum() < Maximum() ) - { - factor = (TReal) pixelsFromMin / height; // tab position from the beginning in percentage - } - TUint sliderTabHeight = iSliderTab->SizeInPixels().iHeight; // slider tab height - - // slider bitmap is actually a bit longer but this resolves the problem - // where the tab is drawn outside of the slider when in maximum position - TUint sliderBitmapHeight = iSliderBg->SizeInPixels().iHeight - sliderTabHeight; - - TUint tabPositionFromMinInPixels = (TUint) (factor * sliderBitmapHeight + 0.5); // calculate tab position - - // top left coordinate - const TPoint tl = aRect.iTl; - - CWindowGc& gc = SystemGc(); - - // draw actual slider using mask bitmap - TRect bgRect(TPoint(0,0), iSliderBg->SizeInPixels()); - gc.BitBltMasked(tl, iSliderBg, bgRect, iSliderBgMask, ETrue); - - // draw the tab using mask bitmap - TRect tabRect(TPoint(0,0), iSliderTab->SizeInPixels()); - gc.BitBltMasked(TPoint(tl.iX, tl.iY+tabPositionFromMinInPixels), iSliderTab, tabRect, iSliderTabMask, ETrue); - } - } - -//============================================================================= -void CVeiVerticalSlider::SizeChanged() - { - LOG(KVideoEditorLogFile, "CVeiVerticalSlider::SizeChanged: in"); - - __ASSERT_ALWAYS( iSliderBg && iSliderTab, Panic(EVeiSliderPanicBitmapsNotLoaded) ); - - // Set size for scalable icons - MUST BE CALLED BEFORE ICON IS USABLE - TSize sliderSize; - TSize tabSize; - - TInt w = Rect().Width(); - TInt h = Rect().Height(); - - // NOTE: this assumes that the slider and the slider tab have the same width. - // If that is not the case, it should be handled with transparency in the SVG graphic. - - // Set the slider bg to fill the whole rect - sliderSize.iWidth = w; - sliderSize.iHeight = h; - AknIconUtils::SetSize( iSliderBg, sliderSize, EAspectRatioNotPreserved); - - // The slider tab is set to have the same width. - // The height is calculated from the aspect ratio (set based on the original SVG) - tabSize.iWidth = w; - tabSize.iHeight = (TInt)( w * KTabAspectRatioY / KTabAspectRatioX ); - AknIconUtils::SetSize( iSliderTab, tabSize, EAspectRatioNotPreserved); - - LOGFMT4(KVideoEditorLogFile, "CVeiVerticalSlider::SizeChanged: out: sliderSize(%d,%d), tabSize(%d,%d)", sliderSize.iWidth,sliderSize.iHeight,tabSize.iWidth,tabSize.iHeight); - } - -//============================================================================= -TSize CVeiVerticalSlider::MinimumSize() - { - LOG(KVideoEditorLogFile, "CVeiVerticalSlider::MinimumSize()"); - - return iSliderBg->SizeInPixels(); - } - -//============================================================================= -// -// class CVeiHorizontalSlider member functions -// -//============================================================================= - -//============================================================================= -EXPORT_C CVeiHorizontalSlider* CVeiHorizontalSlider::NewL(const TRect& aRect, const CCoeControl& aControl) - { - CVeiHorizontalSlider* self = CVeiHorizontalSlider::NewLC(aRect, aControl); - CleanupStack::Pop(self); - return self; - } - -//============================================================================= -EXPORT_C CVeiHorizontalSlider* CVeiHorizontalSlider::NewLC(const TRect& aRect, const CCoeControl& aControl) - { - CVeiHorizontalSlider* self = new (ELeave) CVeiHorizontalSlider; - CleanupStack::PushL(self); - self->ConstructL(aRect, aControl); - return self; - } - -//============================================================================= -EXPORT_C CVeiHorizontalSlider::~CVeiHorizontalSlider() - { - } - -//============================================================================= -void CVeiHorizontalSlider::ConstructL(const TRect& aRect, const CCoeControl& aControl) - { - LOG(KVideoEditorLogFile, "CVeiVerticalSlider::ConstructL: in"); - - SetContainerWindowL(aControl); - - // Load the bitmaps - LoadBitmapL( iSliderBg, iSliderBgMask, EMbmVideoeditoruicomponentsQgn_graf_ied_hslider, EMbmVideoeditoruicomponentsQgn_graf_ied_hslider_mask ); - LoadBitmapL( iSliderTab, iSliderTabMask, EMbmVideoeditoruicomponentsQgn_graf_ied_htab, EMbmVideoeditoruicomponentsQgn_graf_ied_htab_mask ); - - SetRect(aRect); - ActivateL(); - - LOG(KVideoEditorLogFile, "CVeiVerticalSlider::ConstructL: out"); - } - -//============================================================================= -CVeiHorizontalSlider::CVeiHorizontalSlider() - { - // no implementation required - } - -//============================================================================= -void CVeiHorizontalSlider::Draw(const TRect& aRect) const - { - if ( Minimum() <= Maximum() ) - { - TUint height = Maximum() - Minimum(); // height of the slider - TUint pixelsFromMin = SliderPosition() - Minimum(); // tab position from the beginning - - TReal factor = 0.0; - if (Minimum() < Maximum() ) - { - factor = (TReal) pixelsFromMin / height; // tab position from the beginning in percentage - } - TUint sliderTabWidth = iSliderTab->SizeInPixels().iWidth; // slider tab width - - // slider bitmap is actually a bit longer but this resolves the problem - // where the tab is drawn outside of the slider when in maximum position - TUint sliderBitmapWidth = iSliderBg->SizeInPixels().iWidth - sliderTabWidth; - - TUint tabPositionFromMinInPixels = (TUint) (factor * sliderBitmapWidth + 0.5); // calculate tab position - - // top left coordinate - const TPoint tl = aRect.iTl; - - CWindowGc& gc = SystemGc(); - - // draw actual slider using mask bitmap - TRect bgRect(TPoint(0,0), iSliderBg->SizeInPixels()); - gc.BitBltMasked(tl, iSliderBg, bgRect, iSliderBgMask, ETrue); - - // draw the tab using mask bitmap - TRect tabRect(TPoint(0,0),iSliderTab->SizeInPixels()); - gc.BitBltMasked(TPoint(tl.iX + tabPositionFromMinInPixels, tl.iY), iSliderTab, tabRect, iSliderTabMask, ETrue); - } - } - -//============================================================================= -void CVeiHorizontalSlider::SizeChanged() - { - LOG(KVideoEditorLogFile, "CVeiHorizontalSlider::SizeChanged: in"); - - __ASSERT_ALWAYS( iSliderBg && iSliderTab, Panic(EVeiSliderPanicBitmapsNotLoaded) ); - - // Set size for scalable icons - MUST BE CALLED BEFORE ICON IS USABLE - TSize sliderSize; - TSize tabSize; - - TInt w = Rect().Width(); - TInt h = Rect().Height(); - - // NOTE: this assumes that the slider and the slider tab have the same height. - // If that is not the case, it should be handled with transparency in the SVG graphic. - - // Set the slider bg to fill the whole rect. - sliderSize.iWidth = w; - sliderSize.iHeight = h; - AknIconUtils::SetSize( iSliderBg, sliderSize, EAspectRatioNotPreserved); - - // The slider tab is set to have the same height with the bg. - // The width is calculated from the aspect ratio (set based on the original SVG). - tabSize.iWidth = (TInt)( h * KTabAspectRatioY / KTabAspectRatioX ); - tabSize.iHeight = h; - AknIconUtils::SetSize( iSliderTab, tabSize, EAspectRatioNotPreserved); - - LOGFMT4(KVideoEditorLogFile, "CVeiHorizontalSlider::SizeChanged: out: sliderSize(%d,%d), tabSize(%d,%d)", sliderSize.iWidth,sliderSize.iHeight,tabSize.iWidth,tabSize.iHeight); - } - -//============================================================================= -TSize CVeiHorizontalSlider::MinimumSize() - { - LOG(KVideoEditorLogFile, "CVeiHorizontalSlider::MinimumSize()"); - - return iSliderBg->SizeInPixels(); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/src/VeiTextDisplay.cpp --- a/videditor/VideoEditorUiComponents/src/VeiTextDisplay.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,764 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// User includes -#include "VeiTextDisplay.h" -#include "VideoEditorCommon.h" -#include "VideoEditorUtils.h" -#include "VideoEditorDebugUtils.h" - -// CONSTANTS -_LIT(KResourceFile, "VideoEditorUiComponents.rsc"); - -EXPORT_C CVeiTextDisplay* CVeiTextDisplay::NewL( const TRect& aRect, const CCoeControl* aParent ) - { - CVeiTextDisplay* self = CVeiTextDisplay::NewLC( aRect, aParent ); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C CVeiTextDisplay* CVeiTextDisplay::NewLC( const TRect& aRect, const CCoeControl* aParent ) - { - CVeiTextDisplay* self = new (ELeave) CVeiTextDisplay; - CleanupStack::PushL( self ); - self->ConstructL( aRect, aParent ); - return self; - } - -void CVeiTextDisplay::ConstructL( const TRect& aRect, const CCoeControl* aParent ) - { - iClipName = HBufC::NewL( 0 ); - iClipLocation = HBufC::NewL( 0 ); - - iLayout = EOnlyName; - - TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) ); - - AknIconUtils::CreateIconL( iUpperArrow, iUpperArrowMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_volume_arrow_up, - EMbmVideoeditoruicomponentsQgn_indi_volume_arrow_up_mask ); - - AknIconUtils::CreateIconL( iLowerArrow, iLowerArrowMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_volume_arrow_up, - EMbmVideoeditoruicomponentsQgn_indi_volume_arrow_up_mask ); - - AknIconUtils::CreateIconL( iRightArrow, iRightArrowMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_volume_arrow_up, - EMbmVideoeditoruicomponentsQgn_indi_volume_arrow_up_mask ); - - AknIconUtils::CreateIconL( iLeftArrow, iLeftArrowMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_volume_arrow_up, - EMbmVideoeditoruicomponentsQgn_indi_volume_arrow_up_mask ); - - AknIconUtils::CreateIconL( iStartMarkIcon, iStartMarkIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded_start, - EMbmVideoeditoruicomponentsQgn_indi_vded_start_mask ); - - AknIconUtils::CreateIconL( iEndMarkIcon, iEndMarkIconMask, - mbmPath, EMbmVideoeditoruicomponentsQgn_indi_vded_end, - EMbmVideoeditoruicomponentsQgn_indi_vded_end_mask ); - - iUpperArrowVisible = EFalse; - iLowerArrowVisible = EFalse; - iRightArrowVisible = EFalse; - iLeftArrowVisible = EFalse; - - iSlowMotionOn = EFalse; - - iBlinkTimer = CPeriodic::NewL( CActive::EPriorityLow ); - - // Open resource file - TFileName resourceFile; - Dll::FileName(resourceFile); - TParse p; - p.Set(KResourceFile, &KDC_RESOURCE_FILES_DIR, &resourceFile); - resourceFile = p.FullName(); - iResLoader.OpenL( resourceFile ); - - SetContainerWindowL( *aParent ); - SetRect( aRect ); - ActivateL(); - } - -CVeiTextDisplay::CVeiTextDisplay() : iResLoader(*CEikonEnv::Static()) - { - } - -EXPORT_C CVeiTextDisplay::~CVeiTextDisplay() - { - if ( iClipName ) - { - delete iClipName; - } - - delete iClipLocation; - delete iUpperArrow; - delete iUpperArrowMask; - - delete iLowerArrow; - delete iLowerArrowMask; - - delete iRightArrow; - delete iRightArrowMask; - - delete iLeftArrow; - delete iLeftArrowMask; - - delete iStartMarkIcon; - delete iStartMarkIconMask; - - delete iEndMarkIcon; - delete iEndMarkIconMask; - - if ( iBlinkTimer ) - { - iBlinkTimer->Cancel(); - delete iBlinkTimer; - } - iResLoader.Close(); - } - -void CVeiTextDisplay::SizeChanged() - { - TRect rect( Rect() ); - const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - TInt fontHeight = font->HeightInPixels(); - - TSize arrowSize; - - if ( iLayout == EArrowsVertical ) - { - arrowSize = TSize( (rect.Height()-fontHeight) / 2, (rect.Height()-fontHeight) / 2 ); - } - else - { - arrowSize = iDynamicArrowSize; - } - - AknIconUtils::SetSize( iUpperArrow, arrowSize, - EAspectRatioNotPreserved ); - - AknIconUtils::SetSizeAndRotation( iLowerArrow, - arrowSize, EAspectRatioNotPreserved, 180 ); - - AknIconUtils::SetSizeAndRotation( iRightArrow, - arrowSize, EAspectRatioNotPreserved, 90 ); - - AknIconUtils::SetSizeAndRotation( iLeftArrow, - arrowSize, EAspectRatioNotPreserved, 270 ); - - AknIconUtils::SetSize( iStartMarkIcon, - iStartTimeIconRect.Size(), EAspectRatioNotPreserved); - - AknIconUtils::SetSize( iEndMarkIcon, - iEndTimeIconRect.Size(), EAspectRatioNotPreserved); - - TInt upperArrowY = ( (rect.iBr.iY - rect.Height() / 2) - fontHeight / 2) - iUpperArrow->SizeInPixels().iHeight; - TInt upperArrowX = (rect.iBr.iX - rect.Width() / 2) - iUpperArrow->SizeInPixels().iWidth / 2; - - TInt lowerArrowY = (rect.iBr.iY - rect.Height() / 2) + fontHeight / 2; - - iUpperArrowPoint.SetXY( upperArrowX, upperArrowY - 2 ); - iLowerArrowPoint.SetXY( upperArrowX, lowerArrowY ); - } - -EXPORT_C void CVeiTextDisplay::SetName( const TDesC& aName ) - { - if ( iClipName ) - { - delete iClipName; - iClipName = NULL; - } - - TRAP_IGNORE( - iClipName = HBufC::NewL( aName.Length() ); - *iClipName = aName ); - - DrawDeferred(); - } - - -EXPORT_C void CVeiTextDisplay::SetDuration( const TTimeIntervalMicroSeconds& aDuration ) - { - iDuration = aDuration; - DrawDeferred(); - } - - -EXPORT_C void CVeiTextDisplay::SetTime( const TTime& aClipTime ) - { - iClipTime = aClipTime; - } - -EXPORT_C void CVeiTextDisplay::SetLocation( const TDesC& aClipLocation ) - { - if ( iClipLocation ) - { - delete iClipLocation; - iClipLocation = NULL; - } - - TRAP_IGNORE( - iClipLocation = HBufC::NewL( aClipLocation.Length() ); - *iClipLocation = aClipLocation ); - - DrawDeferred(); - } - -EXPORT_C void CVeiTextDisplay::SetLandscapeScreenOrientation( TBool aLandscapeScreenOrientation ) - { - iLandscapeScreenOrientation = aLandscapeScreenOrientation; - - DrawDeferred(); - } - -EXPORT_C void CVeiTextDisplay::SetCutIn( const TTimeIntervalMicroSeconds& aCutInTime ) - - { - iCutInTime = aCutInTime; - DrawDeferred(); - } -EXPORT_C void CVeiTextDisplay::SetCutOut( const TTimeIntervalMicroSeconds& aCutOutTime ) - { - iCutOutTime = aCutOutTime; - DrawDeferred(); - } - -EXPORT_C void CVeiTextDisplay::SetLayout( TVeiLayout aLayout ) - { - iLayout = aLayout; - - if ( iBlinkTimer->IsActive() ) - { - iBlinkTimer->Cancel(); - } - iBlinkFlag = ETrue; - - if ( iLayout == ERecordingPaused ) - { - const TUint delay = 350000; - iBlinkTimer->Start( delay, delay, TCallBack( CVeiTextDisplay::UpdateBlinker, this ) ); - } - DrawDeferred(); - } - -TInt CVeiTextDisplay::UpdateBlinker( TAny* aThis ) - { - STATIC_CAST( CVeiTextDisplay*, aThis )->DoUpdateBlinker(); - return 1; - } - -void CVeiTextDisplay::DoUpdateBlinker() - { - if ( iBlinkFlag ) - iBlinkFlag = EFalse; - else - iBlinkFlag = ETrue; - - DrawDeferred(); - } - -EXPORT_C void CVeiTextDisplay::SetUpperArrowVisibility(TBool aVisible) - { - iUpperArrowVisible = aVisible; - } - -EXPORT_C void CVeiTextDisplay::SetLowerArrowVisibility(TBool aVisible) - { - iLowerArrowVisible = aVisible; - } - -EXPORT_C void CVeiTextDisplay::SetRightArrowVisibility(TBool aVisible) - { - iRightArrowVisible = aVisible; - } - -EXPORT_C void CVeiTextDisplay::SetLeftArrowVisibility(TBool aVisible) - { - iLeftArrowVisible = aVisible; - } - -EXPORT_C void CVeiTextDisplay::SetSlowMotionOn(TBool aOn) - { - iSlowMotionOn = aOn; - } - -EXPORT_C TBool CVeiTextDisplay::SlowMotionOn() const - { - return iSlowMotionOn; - } - -EXPORT_C void CVeiTextDisplay::SetSlowMotionPreset(TInt aPreset) - { - iPresetValue = aPreset; - DrawDeferred(); - } - -EXPORT_C TInt CVeiTextDisplay::SlowMotionPreset() const - { - return iPresetValue; - } - -EXPORT_C void CVeiTextDisplay::SetArrowSize(const TSize& aArrowSize) - { - iDynamicArrowSize = aArrowSize; - } - -void CVeiTextDisplay::Draw( const TRect& /*aRect*/ ) const - { - CWindowGc& gc = SystemGc(); - - const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); - TFileName visualText; - TPoint textPoint; - TPoint persentPoint; - TBuf<60> layoutTime; - - - - // Get text color from skin - TRgb textColor( KRgbBlack ); - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - AknsUtils::GetCachedColor(skin, textColor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); - gc.SetPenColor( textColor ); - - if ( (iLayout == EOnlyName) && (iClipName && iClipName->Length() > 0) ) - { - gc.UseFont( font ); - - TInt maxWidthNonClipping = Rect().Width() - 20; - - AknBidiTextUtils::ConvertToVisualAndClip( *iClipName, - visualText, *font, maxWidthNonClipping, maxWidthNonClipping + 10 ); - - TInt xOffset = ( Rect().Width() - font->TextWidthInPixels( visualText ) ) / 2; - if( (xOffset < 0) || iLandscapeScreenOrientation ) - { - xOffset = 0; - } - - textPoint.iX = Rect().iTl.iX + xOffset; - - gc.DrawText( visualText, textPoint ); - - gc.DiscardFont(); - } - else if (((iLayout == ENameAndDuration) || (iLayout == ERecording) || - (iLayout == ERecordingPaused)) && !iLandscapeScreenOrientation ) - { - gc.UseFont( font ); - - TBuf<10> durationValue; - - TInt maxWidthNonClipping = Rect().Width() - 20; - - ParseTimeToMinSec( layoutTime, iDuration ); - durationValue.Append( layoutTime); - - TFileName nameAndDuration; - if (iClipName) - { - nameAndDuration.Append( *iClipName ); - } - - TInt durationWidthValue = font->TextWidthInPixels(durationValue); - - AknBidiTextUtils::ConvertToVisualAndClip( nameAndDuration, visualText, *font, - maxWidthNonClipping - durationWidthValue, - maxWidthNonClipping ); - - LOGFMT(KVideoEditorLogFile, "CVeiTextDisplay::Draw: duration width: %d", durationWidthValue); - - - visualText.Append( _L(" ") ); - visualText.Append( durationValue ); - - textPoint.iX = Rect().iTl.iX - + ( Rect().Width() - font->TextWidthInPixels( visualText ) ) / 2; - - if ((iLayout == ERecording) || (iLayout == ERecordingPaused)) - { - if ( iBlinkFlag ) - gc.SetPenColor( KRgbRed ); - else - { - gc.DiscardFont(); - return; - } - } - gc.DrawText( visualText, textPoint ); - - gc.DiscardFont(); - } - else if (iLayout == ECutInCutOut) - { - gc.UseFont( font ); - - TBuf<40> cutInValue; - TBuf<40> cutOutValue; - TFileName visualText2; - - ParseTimeToMinSec( layoutTime, iCutInTime ); - cutInValue.Append( layoutTime ); - ParseTimeToMinSec( layoutTime, iCutOutTime ); - cutOutValue.Append( layoutTime ); - - AknBidiTextUtils::ConvertToVisualAndClip( cutInValue, visualText, *font, iStartTimeTextRect.Width(), - iStartTimeTextRect.Width()); - - AknBidiTextUtils::ConvertToVisualAndClip( cutOutValue, visualText2, *font, iEndTimeTextRect.Width(), - iEndTimeTextRect.Width() ); - - TInt cutInWidth = font->TextWidthInPixels( visualText ); - TInt cutOutWidth = font->TextWidthInPixels( visualText2 ); - TInt marginWidth( font->MaxCharWidthInPixels() /2 ); - - gc.DrawText( visualText, iStartTimeTextRect, font->AscentInPixels(), CGraphicsContext::ELeft, 0 ); - gc.DrawText( visualText2, iEndTimeTextRect, font->AscentInPixels(), CGraphicsContext::ELeft, 0 ); - gc.DiscardFont(); - - gc.BitBltMasked( iStartTimeIconRect.iTl, iStartMarkIcon, iStartTimeIconRect.Size(), - iStartMarkIconMask, EFalse); - gc.BitBltMasked( iEndTimeIconRect.iTl, iEndMarkIcon, iEndTimeIconRect.Size(), - iEndMarkIconMask, EFalse); - - } - else if (((iLayout == ENameAndDuration ) ||(iLayout == EEverything) || (iLayout == ERecording) || - (iLayout == ERecordingPaused)) && iLandscapeScreenOrientation ) - { - gc.UseFont( font ); - textPoint.iX = Rect().iTl.iX; - - TBuf<24> dateFormatString; - TBuf<24> timeFormatString; - StringLoader::Load( dateFormatString, R_QTN_DATE_USUAL_WITH_ZERO, iEikonEnv ); - StringLoader::Load( timeFormatString, R_QTN_TIME_LONG_WITH_ZERO, iEikonEnv ); - - TBuf<50> dateValue; - TBuf<40> timeValue; - TBuf<40> durationValue; - - // these should not fail... - TRAPD(err1, iClipTime.FormatL( dateValue, dateFormatString )); - if (KErrNone != err1) - { - dateValue.Zero(); - } - TRAP(err1, iClipTime.FormatL( timeValue, timeFormatString )); - if (KErrNone != err1) - { - timeValue.Zero(); - } - - ParseTimeToMinSec( layoutTime, iDuration ); - durationValue.Append( layoutTime ); - - TBuf<64> durString; - StringLoader::Load( durString, R_VEI_EDIT_VIDEO_DURATION, iEikonEnv ); - durationValue.Insert( 0, durString ); - - TInt maxWidthNonClipping = Rect().Width() - 10; - /* name */ - if (iClipName) - { - AknBidiTextUtils::ConvertToVisualAndClip( *iClipName, visualText, *font, - maxWidthNonClipping, maxWidthNonClipping + 10 ); - - if ((iLayout == ERecording) || (iLayout == ERecordingPaused)) - { - if ( iBlinkFlag ) - { - gc.SetPenColor( KRgbRed ); - gc.DrawText( visualText, textPoint ); - } - } - else - { - gc.DrawText( visualText, textPoint ); - } - gc.SetPenColor( textColor ); - } - - /* date */ - AknBidiTextUtils::ConvertToVisualAndClip( dateValue, visualText, *font, - maxWidthNonClipping, maxWidthNonClipping + 10 ); - - textPoint.iY += font->HeightInPixels() + 3; - gc.DrawText( visualText, textPoint ); - /* time */ - AknBidiTextUtils::ConvertToVisualAndClip( timeValue, visualText, *font, - maxWidthNonClipping, maxWidthNonClipping + 10 ); - - textPoint.iY += font->HeightInPixels() + 3; - gc.DrawText( visualText, textPoint ); - /* location */ - if( iClipLocation && iClipLocation->Length() > 0 ) - { - AknBidiTextUtils::ConvertToVisualAndClip( *iClipLocation, visualText, *font, - maxWidthNonClipping, maxWidthNonClipping + 10 ); - - textPoint.iY += font->HeightInPixels() + 3; - gc.DrawText( visualText, textPoint ); - } - /* duration */ - AknBidiTextUtils::ConvertToVisualAndClip( durationValue, visualText, *font, - maxWidthNonClipping, maxWidthNonClipping + 10 ); - - textPoint.iY += font->HeightInPixels() + 3; - gc.DrawText( visualText, textPoint ); - - gc.DiscardFont(); - } - else if ( iLayout == EArrowsVertical ) - { - // ** Transition ** - gc.UseFont( font ); - - TInt maxWidthNonClipping = Rect().Width()-20; - - if (iClipName) - { - AknBidiTextUtils::ConvertToVisualAndClip( *iClipName, visualText, *font, maxWidthNonClipping, - maxWidthNonClipping+10); - - TInt xOffset = ( Rect().Width() - font->TextWidthInPixels( visualText ) ) / 2; - if( xOffset < 0) - { - xOffset = 0; - } - - textPoint.iX = Rect().iTl.iX + xOffset; - textPoint.iY = (Rect().iBr.iY - iLowerArrow->SizeInPixels().iHeight) - 2; - - gc.DrawText( visualText, textPoint ); - gc.DiscardFont(); - } - - TPoint upperArrowPos( Rect().iTl ); - if(iUpperArrowVisible) - { - TRect upArrowIconSourceRect(0, 0, iUpperArrow->SizeInPixels().iWidth, - iUpperArrow->SizeInPixels().iHeight); - - gc.BitBltMasked( iUpperArrowPoint, iUpperArrow, upArrowIconSourceRect, - iUpperArrowMask, EFalse); - - } - - if(iLowerArrowVisible) - { - TRect downArrowIconSourceRect(0, 0, iLowerArrow->SizeInPixels().iWidth, - iLowerArrow->SizeInPixels().iHeight); - - gc.BitBltMasked( iLowerArrowPoint, iLowerArrow, downArrowIconSourceRect, - iLowerArrowMask, EFalse); - } - } - - else if ( iLayout == EArrowsHorizontal ) - { - // ** SlowMotion ** - if(iSlowMotionOn) - { - gc.UseFont( font ); - visualText.Format( _L("%d"),iPresetValue ); - - // *** % char added in asciicode format - visualText.Append(37); - - textPoint.iY = Rect().iTl.iY; - textPoint.iY = textPoint.iY + font->HeightInPixels(); - TInt NumberWidthInPixels = font->TextWidthInPixels( visualText ); - - // TRect's middle point - textPoint.iX = Rect().iTl.iX + (Rect().iBr.iX - Rect().iTl.iX) / 2; - textPoint.iX = textPoint.iX - NumberWidthInPixels / 2; - gc.DrawText( visualText, textPoint ); - gc.DiscardFont(); - - if(iLeftArrowVisible) - { - TPoint leftArrowPos( Rect().iTl.iX, ( Rect().iBr.iY - Rect().Height() / 2 ) - - iLeftArrow->SizeInPixels().iHeight / 2 ); - - TRect leftArrowIconSourceRect(0, 0, iLeftArrow->SizeInPixels().iWidth, - iLeftArrow->SizeInPixels().iHeight); - - gc.BitBltMasked( leftArrowPos, iLeftArrow, leftArrowIconSourceRect, - iLeftArrowMask, EFalse); - } - - if(iRightArrowVisible) - { - TPoint rightArrowPos( Rect().iBr.iX - iRightArrow->SizeInPixels().iWidth, - ( Rect().iBr.iY - Rect().Height() / 2 ) - iLeftArrow->SizeInPixels().iHeight / 2 ); - - TRect rightArrowIconSourceRect(0, 0, iRightArrow->SizeInPixels().iWidth, - iRightArrow->SizeInPixels().iHeight); - - gc.BitBltMasked( rightArrowPos, iRightArrow, rightArrowIconSourceRect, - iRightArrowMask, EFalse); - } - } - else - { - // ** Trim for MMS ** - TPoint rightArrowPos( Rect().iTl ); - if(iRightArrowVisible) - { - rightArrowPos.SetXY( Rect().iBr.iX, Rect().iBr.iY - iRightArrow->SizeInPixels().iHeight ); - - TRect rightArrowIconSourceRect(0, 0, iRightArrow->SizeInPixels().iWidth, - iRightArrow->SizeInPixels().iHeight); - - gc.BitBltMasked( rightArrowPos, iRightArrow, rightArrowIconSourceRect, - iRightArrowMask, EFalse); - } - TPoint leftArrowPos( Rect().iTl); - if(iLeftArrowVisible) - { - leftArrowPos.SetXY( Rect().iTl.iX - iLeftArrow->SizeInPixels().iWidth, rightArrowPos.iY ); - - TRect leftArrowIconSourceRect(0, 0, iLeftArrow->SizeInPixels().iWidth, - iLeftArrow->SizeInPixels().iHeight); - - gc.BitBltMasked( leftArrowPos, iLeftArrow, leftArrowIconSourceRect, - iLeftArrowMask, EFalse); - } - - if (iClipName) - { - gc.UseFont( font ); - - persentPoint.iX = Rect().iTl.iX + Rect().Width() / 2; - persentPoint.iX = persentPoint.iX - (font->TextWidthInPixels( *iClipName ) ) / 2; - - persentPoint.iY = rightArrowPos.iY + iLeftArrow->SizeInPixels().iHeight; - persentPoint.iY = persentPoint.iY; - - TInt maxWidthNonClipping = Rect().Width() - 20; - AknBidiTextUtils::ConvertToVisualAndClip( *iClipName, visualText, *font, maxWidthNonClipping, maxWidthNonClipping + 20 ); - - gc.DrawText( visualText, persentPoint ); - gc.DiscardFont(); - } - } - } - } - -void CVeiTextDisplay::ParseTimeToMinSec( TDes& aLayoutTime, const TTimeIntervalMicroSeconds& aDuration ) const - { - //minutes and seconds "120:13" - aLayoutTime.Zero(); - TBuf<30> minsec; - TInt64 duration = 0; - TTimeIntervalMinutes minutes; - TTimeIntervalMicroSeconds32 seconds; - duration = ( aDuration.Int64() / 1000 ); - - TChar timeSeparator = TLocale().TimeSeparator(2); - //over 1 minute - if( duration >= 60000 ) - { - minutes = TTimeIntervalMinutes (static_cast(duration) / 60000 ); - minsec.AppendNum( minutes.Int() ); - minsec.Append( timeSeparator ); - - duration = duration - TInt64(minutes.Int()) * TInt64(60000); - } - else - { - minsec.Append( _L( "0" ) ); - minsec.Append( timeSeparator ); - } - if( duration >= 1000 ) - { - seconds = TTimeIntervalMicroSeconds32 (static_cast(duration) / 1000 ); - - if( seconds.Int() >= 60 ) - { - minsec.AppendNum( seconds.Int() - 60 ); - } - else - { - if ( seconds.Int() < 10 ) - { - minsec.Append( _L("0") ); - } - - minsec.AppendNum( seconds.Int() ); - } - } - else - { - minsec.Append( _L("00") ); - } - aLayoutTime.Append( minsec ); - - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( aLayoutTime ); - } - -// ---------------------------------------------------------------------------- -// CVeiTextDisplay::SetComponentRect -// -// ---------------------------------------------------------------------------- -// -EXPORT_C void CVeiTextDisplay::SetComponentRect(TTextDisplayComponent aComponentIndex, TRect aRect) - { - switch ( aComponentIndex ) - { - case EStartTimeText: - { - iStartTimeTextRect = aRect; - break; - } - case EEndTimeText: - { - iEndTimeTextRect= aRect; - break; - } - case EStartTimeIcon: - { - iStartTimeIconRect = aRect; - break; - } - case EEndTimeIcon: - { - iEndTimeIconRect= aRect; - break; - } - } - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/src/VeiTimeLabelNavi.cpp --- a/videditor/VideoEditorUiComponents/src/VeiTimeLabelNavi.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,395 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// INCLUDE FILES -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef RD_TACTILE_FEEDBACK -#include -#endif /* RD_TACTILE_FEEDBACK */ - -// User includes -#include "VeiTimeLabelNavi.h" -#include "VideoEditorCommon.h" -#include "VideoEditorUtils.h" -#include "VideoEditorDebugUtils.h" -#include "mtimelabelnaviobserver.h" - -// CONSTANTS -_LIT(KDefaultLabel,""); // empty label text - -enum TVeiTimeLabelLayout - { - EArrayItem = 0, - ESpeakerItem, - EPausedItem - }; - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CTimeLabelNavi::~CTimeLabelNavi() -// Destructor -// --------------------------------------------------------- -// -EXPORT_C CVeiTimeLabelNavi::~CVeiTimeLabelNavi() - { - DeleteBitmaps(); - } - -void CVeiTimeLabelNavi::DeleteBitmaps() - { - delete iArrowBitmap; - iArrowBitmap = NULL; - - delete iArrowBitmapMask; - iArrowBitmapMask = NULL; - - delete iVolumeBitmap; - iVolumeBitmap = NULL; - - delete iVolumeBitmapMask; - iVolumeBitmapMask = NULL; - - delete iMutedBitmap; - iMutedBitmap = NULL; - - delete iMutedBitmapMask; - iMutedBitmapMask = NULL; - - delete iPausedBitmap; - iPausedBitmap = NULL; - - delete iPausedBitmapMask; - iPausedBitmapMask = NULL; - } - -// --------------------------------------------------------- -// CTimeLabelNavi::CTimeLabelNavi() -// Constructor -// --------------------------------------------------------- -// -CVeiTimeLabelNavi::CVeiTimeLabelNavi(): -iArrowVisible(ETrue), -iVolumeIconVisible(ETrue), -iPauseIconVisible(EFalse) - { - iLabel = KDefaultLabel; - } - -// --------------------------------------------------------- -// CTimeLabelNavi::ConstructL() -// Constructor -// --------------------------------------------------------- -// -void CVeiTimeLabelNavi::ConstructL() - { - LoadBitmapsL(); - } - -void CVeiTimeLabelNavi::LoadBitmapsL() - { - LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::LoadBitmapsL: in"); - - TFileName bitmapfile( VideoEditorUtils::IconFileNameAndPath( - KVideoEditorUiComponentsIconFileId) ); - - //Loads a specific bitmap from a multi-bitmap file. - //const bitmapfile = the filename of the multi-bitmap (.mbm) file. - MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); - -/* muted bitmap */ - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDQgnIndiSpeakerMuted,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iMutedBitmap, iMutedBitmapMask, - AknIconUtils::AvkonIconFileName(), - EMbmAvkonQgn_indi_speaker_muted, - EMbmAvkonQgn_indi_speaker_muted_mask,KRgbBlack); -// Arrow bitmap - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iArrowBitmap, iArrowBitmapMask, - bitmapfile, - EMbmVideoeditoruicomponentsQgn_indi_vded_volume_up_down, - EMbmVideoeditoruicomponentsQgn_indi_vded_volume_up_down_mask, - KRgbBlack); - -/* Speaker bitmap */ - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDQgnIndiSpeaker,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iVolumeBitmap, iVolumeBitmapMask, - AknIconUtils::AvkonIconFileName(), - EMbmAvkonQgn_indi_speaker, EMbmAvkonQgn_indi_speaker_mask, - KRgbBlack); - -/* Pause bitmap */ -// Pause bitmap in not used anywhere at the moment. There is not proper -// icon to be used for it anyway in the platform. If needed in the future, -// a new icon graphic need to be requested. -/* - AknsUtils::CreateColorIconL( - skinInstance, KAknsIIDNone,KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG6, - iPausedBitmap, iPausedBitmapMask, - bitmapfile, - EMbmVideoeditoruicomponentsQgn_prop_ve_pause, - EMbmVideoeditoruicomponentsQgn_prop_ve_pause_mask,KRgbBlack); -*/ - -#ifdef RD_TACTILE_FEEDBACK - iTouchFeedBack = MTouchFeedback::Instance(); -#endif /* RD_TACTILE_FEEDBACK */ - - LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::LoadBitmapsL: out"); - } - - -// --------------------------------------------------------- -// CTimeLabelNavi::NewL() -// Symbian OS two-phase contruction -// --------------------------------------------------------- -// -EXPORT_C CVeiTimeLabelNavi* CVeiTimeLabelNavi::NewL() - { - LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::NewL: in"); - - CVeiTimeLabelNavi* self = CVeiTimeLabelNavi::NewLC(); - CleanupStack::Pop( self ); - - LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::NewL: out"); - return self; - } - -EXPORT_C CVeiTimeLabelNavi* CVeiTimeLabelNavi::NewLC() - { - LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::NewLC: in"); - - CVeiTimeLabelNavi* self = new(ELeave) CVeiTimeLabelNavi(); - CleanupStack::PushL(self); - self->ConstructL(); - - LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::NewLC: out"); - return self; - } - - -EXPORT_C void CVeiTimeLabelNavi::SetLabelL( const TDesC& aLabel ) - { - #ifdef VERBOSE - LOGFMT(KVideoEditorLogFile, "CVeiTimeLabelNavi::SetLabelL: %S", &aLabel); - #endif - - if (aLabel.Length() <= iLabel.MaxLength()) - { - iLabel = aLabel; - } - ReportEventL(MCoeControlObserver::EEventStateChanged); - } - -EXPORT_C void CVeiTimeLabelNavi::SetLeftArrowVisibilityL(TBool aVisible) - { - iArrowVisible = aVisible; - ReportEventL(MCoeControlObserver::EEventStateChanged); - } - -EXPORT_C void CVeiTimeLabelNavi::SetRightArrowVisibilityL(TBool aVisible) - { - iArrowVisible = aVisible; - ReportEventL(MCoeControlObserver::EEventStateChanged); - } - -EXPORT_C void CVeiTimeLabelNavi::SetVolumeIconVisibilityL(TBool aVisible) - { - iVolumeIconVisible = aVisible; - ReportEventL(MCoeControlObserver::EEventStateChanged); - } - -EXPORT_C void CVeiTimeLabelNavi::SetPauseIconVisibilityL(TBool aVisible) - { - iPauseIconVisible = aVisible; - ReportEventL(MCoeControlObserver::EEventStateChanged); - } - -void CVeiTimeLabelNavi::SizeChanged() - { - TRect parentRect(Rect()); - parentRect.iTl.iY+=2; - /* - const TRect & aParent, - TInt C, - TInt l, - TInt t, - TInt r, - TInt b, - TInt W, - TInt H - - //C colour index, 0..255 - //l left margin - //r right margin - //B Baseline from top of the parent rectangle - //W text width in pixels - //J justification. ELayoutAlignNone; ELayoutAlignCenter; ELayoutAlignLeft; ELayoutAlignRight -*/ - - const CFont* myFont = AknLayoutUtils::FontFromId( ELatinBold19/*EAknLogicalFontSecondaryFont*/ ); - TInt baseline = ( parentRect.Height() / 2 ) + ( myFont->AscentInPixels() / 2 ); - TInt iconHeightWidth = parentRect.Height(); - - TSize iconSize = TSize(STATIC_CAST(TInt,0.0649*parentRect.Width()), - STATIC_CAST(TInt,0.5625*parentRect.Height() )); //14,18 - - AknIconUtils::SetSize( - iArrowBitmap, - iconSize, - EAspectRatioNotPreserved ); - - AknIconUtils::SetSize( - iPausedBitmap, - iconSize, - EAspectRatioNotPreserved ); - - TInt arrowTop = ( parentRect.iBr.iY/2 - iconSize.iHeight/2 ); - - iBitmapLayout[EArrayItem].LayoutRect(parentRect, ELayoutEmpty, STATIC_CAST(TInt, 0.0926*parentRect.Width()), arrowTop, ELayoutEmpty, ELayoutEmpty,iconHeightWidth,iconSize.iHeight); - iBitmapLayout[ESpeakerItem].LayoutRect(parentRect, ELayoutEmpty, STATIC_CAST(TInt, 0.1625*parentRect.Width()), 0, ELayoutEmpty, ELayoutEmpty, iconHeightWidth, iconHeightWidth); - iBitmapLayout[EPausedItem].LayoutRect(parentRect, ELayoutEmpty, 0, 0, ELayoutEmpty, ELayoutEmpty, 17, 16); - - TInt textLeftMargin = STATIC_CAST( TInt, 0.6045*parentRect.Width() ); - TInt textRightMargin = STATIC_CAST( TInt, 0.9546*parentRect.Width() ); - - if( parentRect.iBr.iX != 108 ) - { - iTextLayout.LayoutText(parentRect, ELatinBold19, 0, textLeftMargin, 0, - baseline, textRightMargin-textLeftMargin, ELayoutAlignLeft); - - } - else - { - arrowTop = STATIC_CAST( TInt, parentRect.iBr.iY/2 - 9/2 ); - iBitmapLayout[EArrayItem].LayoutRect(parentRect, ELayoutEmpty, 14, arrowTop, ELayoutEmpty, ELayoutEmpty,iconHeightWidth,9); - iBitmapLayout[ESpeakerItem].LayoutRect(parentRect, ELayoutEmpty, 20, 0, ELayoutEmpty, ELayoutEmpty,iconHeightWidth,iconHeightWidth); - iBitmapLayout[EPausedItem].LayoutRect(parentRect, ELayoutEmpty, 0, 0, ELayoutEmpty, ELayoutEmpty,17, 16); - - - textLeftMargin = STATIC_CAST( TInt, 0.7273*parentRect.Width()/2 +20); - textRightMargin = STATIC_CAST( TInt, 0.9546*parentRect.Width()/2 +20); - - iTextLayout.LayoutText(parentRect, ELatinBold19, 0, textLeftMargin, 0, - baseline, textRightMargin-textLeftMargin, ELayoutAlignLeft); - } - - - AknIconUtils::SetSize( iVolumeBitmap, TSize( iconHeightWidth, iconHeightWidth) ); - - AknIconUtils::SetSize( iMutedBitmap, TSize( iconHeightWidth, iconHeightWidth) ); - } - -void CVeiTimeLabelNavi::Draw(const TRect& /*aRect*/) const - { - CWindowGc& gc=SystemGc(); - - if ( iVolumeIconVisible ) - { - iBitmapLayout[ESpeakerItem].DrawImage( gc, iVolumeBitmap, iVolumeBitmapMask ); - - if ( iArrowVisible && !AknLayoutUtils::PenEnabled() ) - { - iBitmapLayout[EArrayItem].DrawImage( gc, iArrowBitmap, iArrowBitmapMask ); - } - } - else - { - iBitmapLayout[ESpeakerItem].DrawImage( gc, iMutedBitmap, iMutedBitmapMask ); - } - - if ( iPauseIconVisible ) - { - // not in use at the moment, pause icon is drawed in main pane instead - //iBitmapLayout[EPausedItem].DrawImage( gc, iPausedBitmap, NULL ); - } - - TBuf<32> labelWithConvNumbers; - labelWithConvNumbers.Append( iLabel ); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( labelWithConvNumbers ); - - MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); - //AknsDrawUtils::DrawCachedImage(skinInstance,gc,TRect(0,0,24,24),KAknsIIDQgnIndiSpeaker); - - // Get navi pane text color from skin - TRgb textColor( KRgbBlack ); - // Note: we are using the navi icon color for the text. There should - // be separate color definition for the text, but I could not find - // out what it is. Apparently KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG2 - // is NOT the correct color. Someone should find out which color is used - // for the label in CAknNavigationDecorator. - //AknsUtils::GetCachedColor(skinInstance, textColor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG2 ); - AknsUtils::GetCachedColor(skinInstance, textColor, KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG6 ); - - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - iTextLayout.DrawText(gc, labelWithConvNumbers, ETrue, textColor); - } - -void CVeiTimeLabelNavi::HandleResourceChange(TInt aType) - { - LOGFMT(KVideoEditorLogFile, "CVeiTimeLabelNavi::HandleResourceChange() In, aType:%d", aType); - - if (KAknsMessageSkinChange == aType) - { - // Reload the icon bitmaps with the current skin color - DeleteBitmaps(); - TRAP_IGNORE( LoadBitmapsL() ); - } - CCoeControl::HandleResourceChange(aType); - - LOG(KVideoEditorLogFile, "CVeiTimeLabelNavi::HandleResourceChange() Out"); - } - -void CVeiTimeLabelNavi::HandlePointerEventL(const TPointerEvent& aPointerEvent) - { - if( iObserver && - iBitmapLayout[ESpeakerItem].Rect().Contains( aPointerEvent.iPosition ) ) - { -#ifdef RD_TACTILE_FEEDBACK - if ( iTouchFeedBack ) - { - iTouchFeedBack->InstantFeedback( ETouchFeedbackBasic ); - } -#endif /* RD_TACTILE_FEEDBACK */ - - iObserver->HandleNaviEventL(); - } - } - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoEditorUiComponents/src/VeiVideoDisplay.cpp --- a/videditor/VideoEditorUiComponents/src/VeiVideoDisplay.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1025 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// System includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef VERBOSE -#include -#endif - -// User includes -#include "VeiVideoEditorSettings.h" -#include "VeiVideoDisplay.h" -#include "VideoEditorCommon.h" -#include "VideoEditorUtils.h" -#include "VideoEditorDebugUtils.h" - -// CONSTANTS -_LIT(KResourceFile, "VideoEditorUiComponents.rsc"); - -EXPORT_C CVeiVideoDisplay* CVeiVideoDisplay::NewL( const TRect& aRect, const CCoeControl* aParent, - MVeiVideoDisplayObserver& aObserver ) - { - CVeiVideoDisplay* self = CVeiVideoDisplay::NewLC( aRect, aParent, aObserver ); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C CVeiVideoDisplay* CVeiVideoDisplay::NewLC( const TRect& aRect, const CCoeControl* aParent, - MVeiVideoDisplayObserver& aObserver ) - { - CVeiVideoDisplay* self = new (ELeave) CVeiVideoDisplay (aObserver); - CleanupStack::PushL( self ); - self->ConstructL( aRect, aParent ); - return self; - } - -CVeiVideoDisplay::CVeiVideoDisplay( MVeiVideoDisplayObserver& aObserver ) : iObserver (aObserver) - { - } - -void CVeiVideoDisplay::ConstructL( const TRect& aRect, - const CCoeControl* aParent) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ConstructL: in"); - - TFileName mbmPath( VideoEditorUtils::IconFileNameAndPath(KVideoEditorUiComponentsIconFileId) ); - - -// Backgroud squares icon loading is disabled there is no suitable graphic in -// S60 build at the moment. A new graphic should be requested and added here. - -// AknIconUtils::CreateIconL( iBgSquaresBitmap, iBgSquaresBitmapMask, -// mbmPath, EMbmVideoeditoruicomponentsQgn_graf_ve_novideo, -// EMbmVideoeditoruicomponentsQgn_graf_ve_novideo_mask ); - - - TRAP_IGNORE( CVeiVideoEditorSettings::GetMediaPlayerVolumeLevelL( iInternalVolume ) ); - - iMuted = (iInternalVolume == 0); - - iBorderWidth = 2; - iDuration = 0; - iMaxVolume = 0; - iBlank = ETrue; - iAnimationOn = EFalse; - iBufferingCompleted = ETrue; - SetContainerWindowL( *aParent ); - - SetRect( aRect ); - ActivateL(); - - ControlEnv()->AddForegroundObserverL( *this ); - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ConstructL: out"); - } - -void CVeiVideoDisplay::SizeChanged() - { - LOGFMT2(KVideoEditorLogFile, "CVeiVideoDisplay::SizeChanged: in: Size(): (%d,%d)", Size().iWidth, Size().iHeight); - - if ( iVideoPlayerUtility ) - { - TRect screenRect = CalculateVideoPlayerArea(); - LOGFMT4(KVideoEditorLogFile, "CVeiVideoDisplay::SizeChanged 1, ScreenRect Tl:(%d,%d) Br:(%d,%d)", screenRect.iTl.iX,screenRect.iTl.iY,screenRect.iBr.iX,screenRect.iBr.iY); - - /* Get the required parameters for the video player. */ - CCoeEnv* coeEnv = CCoeEnv::Static(); - RWsSession& session = coeEnv->WsSession(); - CWsScreenDevice* screenDevice = coeEnv->ScreenDevice(); - RDrawableWindow* drawableWindow = DrawableWindow(); - - TRAPD(err, iVideoPlayerUtility->SetDisplayWindowL( session, *screenDevice, *drawableWindow, - screenRect, screenRect ) ); - if( KErrNone != err ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::SizeChanged: iVideoPlayerUtility->SetDisplayWindowL failed: %d", err); - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EError ); - } - } - AknIconUtils::SetSize( iBgSquaresBitmap, Size(), EAspectRatioNotPreserved ); - - - if( iAnimationOn ) - { - iAnimation->CancelAnimation(); - TRect rect( Rect() ); - rect.Move( iBorderWidth, iBorderWidth ); - rect.Resize( -iBorderWidth*2, -iBorderWidth ); - - iAnimation->SetRect( rect ); - TRAPD(err, iAnimation->StartAnimationL() ); - if( KErrNone != err ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::SizeChanged: StartAnimationL failed: %d", err); - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EError ); - } - } - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::SizeChanged: out"); - } - -TRect CVeiVideoDisplay::CalculateVideoPlayerArea() - { - /* Calculate regions. */ - TRect screenRect; - TRect rect( Rect() ); - /* In full screen mode return whole screen rect*/ - if ( rect.iTl == TPoint( 0,0) ) - { - return rect; - } - LOGFMT4(KVideoEditorLogFile, "CVeiVideoDisplay::CalculateVideoPlayerArea() 1: Rect() Tl:(%d,%d) Br:(%d,%d)", rect.iTl.iX,rect.iTl.iY,rect.iBr.iX,rect.iBr.iY); - - TPoint position = PositionRelativeToScreen(); - LOGFMT2(KVideoEditorLogFile, "CVeiVideoDisplay::CalculateVideoPlayerArea() 2: PositionRelativeToScreen(%d,%d)", position.iX, position.iY); - - screenRect = rect; - screenRect.Move( TPoint( iBorderWidth, (position.iY-Rect().iTl.iY) + iBorderWidth ) ); - screenRect.Resize( -(iBorderWidth*2), -(iBorderWidth*2 )); - return screenRect; - } - -TKeyResponse CVeiVideoDisplay::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) - { - LOGFMT2(KVideoEditorLogFile, "CVeiVideoDisplay::OfferKeyEventL: aKeyEvent.iCode:%d, aType:%d", aKeyEvent.iCode, aType); - - if ( iMuted ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::OfferKeyEventL: volume is muted."); - return EKeyWasNotConsumed; - } - - if ( aType == EEventKey ) - { - switch (aKeyEvent.iCode) - { - case EKeyDownArrow: - case EStdKeyDecVolume: - { - AdjustVolumeL( -1 ); - return EKeyWasConsumed; - } - case EKeyUpArrow: - case EStdKeyIncVolume: - { - AdjustVolumeL( 1 ); - return EKeyWasConsumed; - } - default: - { - return EKeyWasConsumed; - } - } - } - return EKeyWasConsumed; - } - -EXPORT_C CVeiVideoDisplay::~CVeiVideoDisplay() - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::~CVeiVideoDisplay(): In"); - // Remove foreground event observer - ControlEnv()->RemoveForegroundObserver( *this ); - if ( iDisplayBitmap ) - { - delete iDisplayBitmap; - iDisplayBitmap = NULL; - } - if ( iDisplayMask ) - { - delete iDisplayMask; - iDisplayMask = NULL; - } - delete iBgSquaresBitmap; - delete iBgSquaresBitmapMask; - - if ( iVideoPlayerUtility != NULL ) - { - iVideoPlayerUtility->Close(); - delete iVideoPlayerUtility; - iVideoPlayerUtility = NULL; - } - delete iAnimation; - delete iCallBack; - delete iFilename; - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::~CVeiVideoDisplay(): Out"); - } - -EXPORT_C void CVeiVideoDisplay::ShowPictureL( const CFbsBitmap& aBitmap, const CFbsBitmap& aMask ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ShowPictureL: In"); - - StoreDisplayBitmapL( aBitmap, &aMask ); - - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ShowPictureL: Out"); - } - -EXPORT_C void CVeiVideoDisplay::ShowPictureL( const CFbsBitmap& aBitmap ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ShowPicture2: In"); - - StoreDisplayBitmapL( aBitmap ); - - // set screen size to pause mode - if ( iVideoPlayerUtility ) - { - TRect screenRect = TRect( TPoint(0,0), TPoint(0,0) ); - LOGFMT4(KVideoEditorLogFile, "CVeiVideoDisplay::SizeChanged 1, ScreenRect Tl:(%d,%d) Br:(%d,%d)", screenRect.iTl.iX,screenRect.iTl.iY,screenRect.iBr.iX,screenRect.iBr.iY); - - /* Get the required parameters for the video player. */ - CCoeEnv* coeEnv = CCoeEnv::Static(); - RWsSession& session = coeEnv->WsSession(); - CWsScreenDevice* screenDevice = coeEnv->ScreenDevice(); - RDrawableWindow* drawableWindow = DrawableWindow(); - - iVideoPlayerUtility->SetDisplayWindowL( session, *screenDevice, *drawableWindow, - screenRect, screenRect ); - } - - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ShowPicture2: Out"); - } - -EXPORT_C void CVeiVideoDisplay::SetPictureL( const CFbsBitmap& aBitmap ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::SetPictureL: In"); - - StoreDisplayBitmapL( aBitmap ); - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::SetPictureL: Out"); - } - -void CVeiVideoDisplay::StoreDisplayBitmapL( const CFbsBitmap& aBitmap, const CFbsBitmap* aMask ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::StoreDisplayBitmapL: In"); - - iBlank = EFalse; - iBlack = EFalse; - - // Delete old bitmaps - if ( iDisplayBitmap ) - { - delete iDisplayBitmap; - iDisplayBitmap = NULL; - } - if ( iDisplayMask ) - { - delete iDisplayMask; - iDisplayMask = NULL; - } - - // Create new bitmaps - iDisplayBitmap = new (ELeave) CFbsBitmap; - iDisplayBitmap->Duplicate( aBitmap.Handle() ); - if (aMask) - { - iDisplayMask = new (ELeave) CFbsBitmap; - iDisplayMask->Duplicate( aMask->Handle() ); - } - -#ifdef VERBOSE - // Write the display bitmap to disk - _LIT(KFileName, "C:\\data\\images\\videoeditor\\iDisplayBitmap.mbm"); - TFileName saveToFile( KFileName ); - CEikonEnv* env = CEikonEnv::Static(); - env->EikAppUi()->Application()->GenerateFileName( env->FsSession(), saveToFile ); - User::LeaveIfError( iDisplayBitmap->Save( saveToFile ) ); - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::StoreDisplayBitmapL: saved %S", &saveToFile); -#endif - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::StoreDisplayBitmapL: Out"); - } - -EXPORT_C void CVeiVideoDisplay::ShowBlackScreen() - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ShowBlackScreen: In"); - iBlack = ETrue; - DrawDeferred(); - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ShowBlackScreen: Out"); - } -EXPORT_C void CVeiVideoDisplay::SetBlackScreen( TBool aBlack ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::SetBlackScreen: In and out, aBlack:%d", aBlack); - iBlack = aBlack; - } -EXPORT_C void CVeiVideoDisplay::ShowBlankScreen() - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ShowBlankScreen: In and out"); - iBlank = ETrue; - DrawDeferred(); - } - -EXPORT_C TTimeIntervalMicroSeconds CVeiVideoDisplay::PositionL() const - { - if ( !iVideoPlayerUtility ) - return TTimeIntervalMicroSeconds(0); - else - return iVideoPlayerUtility->PositionL(); - } - -EXPORT_C TVideoRotation CVeiVideoDisplay::RotationL() const - { - if ( iVideoPlayerUtility ) - { - return iVideoPlayerUtility->RotationL(); - } - else - { - return EVideoRotationNone; - } - } - -EXPORT_C void CVeiVideoDisplay::SetPositionL( const TTimeIntervalMicroSeconds& aPosition ) - { - LOGFMT(KVideoEditorLogFile, "VideoDisplay SetPositionL: %Ld", aPosition.Int64()); - iStartPoint = aPosition; - if ( iVideoPlayerUtility && iBufferingCompleted ) - { - iVideoPlayerUtility->SetPositionL( iStartPoint ); - } - } - -EXPORT_C void CVeiVideoDisplay::SetRotationL(TVideoRotation aRotation) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::SetRotationL: in"); - if ( iVideoPlayerUtility ) - { - iVideoPlayerUtility->SetRotationL( aRotation ); - } - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::SetRotationL: out"); - } - - -EXPORT_C void CVeiVideoDisplay::Stop( TBool aCloseStream ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Stop: in"); - if ( iVideoPlayerUtility ) - { - // this is poor solution, responsibility of taking care of iStartPoint be elsewhere - TRAP_IGNORE(iStartPoint = PositionL()); - iVideoPlayerUtility->Stop(); - - if ( aCloseStream ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Stop 1, Close CVideoPlayerUtility."); - iVideoPlayerUtility->Close(); - delete iVideoPlayerUtility; - iVideoPlayerUtility = NULL; - } - } - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Stop 2"); - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EStop ); - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Stop: out"); - } - -EXPORT_C TInt CVeiVideoDisplay::GetBorderWidth() const - { - return iBorderWidth; - } - -EXPORT_C TSize CVeiVideoDisplay::GetScreenSize() const - { - TRect rect( Rect() ); - rect.Shrink( iBorderWidth, iBorderWidth-1 ); - return rect.Size(); - } - -EXPORT_C void CVeiVideoDisplay::Play() - { - /*LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Play :in"); - if (iVideoPlayerUtility && iBufferingCompleted ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Play :2"); - //SizeChanged(); - iVideoPlayerUtility->Play(); - } - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Play: out"); - */ - PlayL(*iFilename); - } - -EXPORT_C void CVeiVideoDisplay::PlayMarkedL( const TTimeIntervalMicroSeconds& aStartPoint, const TTimeIntervalMicroSeconds& aEndPoint) - { - /* - LOGFMT2(KVideoEditorLogFile, "CVeiVideoDisplay::PlayMarked:In, aStartPoint:%Ld, aEndPoint:%Ld", aStartPoint.Int64(), aEndPoint.Int64()); - iVideoPlayerUtility->SetPositionL(aStartPoint); - //SizeChanged(); - iVideoPlayerUtility->Play(aStartPoint, aEndPoint); - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::PlayMarked :Out"); - */ - PlayL(*iFilename, aStartPoint, aEndPoint); - } - -EXPORT_C void CVeiVideoDisplay::PlayL( const TDesC& aFilename, - const TTimeIntervalMicroSeconds& aStartPoint, - const TTimeIntervalMicroSeconds& aEndPoint ) - { - LOGFMT3(KVideoEditorLogFile, "CVeiVideoDisplay::PlayL(): In, aFilename:%S, aStartPoint:%Ld, aEndPoint:%Ld", &aFilename, aStartPoint.Int64(), aEndPoint.Int64()); - - if ( iVideoPlayerUtility && iBufferingCompleted) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::PlayL 1"); - if ( aEndPoint.Int64() != 0 ) - { - LOGFMT2(KVideoEditorLogFile, "CVeiVideoDisplay::Play 2, iStartPoint:%Ld, aStartPoint:%Ld", iStartPoint.Int64(), aStartPoint.Int64()); - iStartPoint = aStartPoint; - //iVideoPlayerUtility->SetPositionL(iStartPoint); - //SizeChanged(); - iVideoPlayerUtility->Stop(); - iVideoPlayerUtility->Play( aStartPoint, aEndPoint ); - } - else - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::PlayL 3"); - //SizeChanged(); - //iVideoPlayerUtility->Play(iStartPoint, iVideoPlayerUtility->DurationL()); - iVideoPlayerUtility->Play(); - } - } - else if (!iVideoPlayerUtility && iBufferingCompleted) /* should this be: if (! iVideoPlayerUtility)*/ - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::PlayL 4"); - if ( aEndPoint.Int64() != 0 ) - { - iStartPoint = aStartPoint; - iEndPoint = aEndPoint; - } - OpenFileL( aFilename ); - } - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::PlayL(): out"); - } - -EXPORT_C void CVeiVideoDisplay::PauseL() - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::PauseL(): in"); - if ( iVideoPlayerUtility && iBufferingCompleted ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::PauseL 1, calling pause"); - iVideoPlayerUtility->PauseL(); - - /* - //@: for some reason this does not work - TDisplayMode dmode = EColor64K; - iVideoPlayerUtility->GetFrameL(dmode, ContentAccess::EPlay); - */ - - /* - //@: do not work either: - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::PauseL(): 2, refreshing"); - TInt err = KErrNone; - TRAP(err, iVideoPlayerUtility->RefreshFrameL()); - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::PauseL(): 3, err:%d", err); - */ - } - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::PauseL(): out"); - } - -EXPORT_C void CVeiVideoDisplay::OpenFileL( const TDesC& aFilename ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::OpenFileL: In, aFilename:%S", &aFilename); - - /* Calculate regions. */ - TRect screenRect = CalculateVideoPlayerArea(); - - /* Get the required parameters for the video player. */ - CCoeEnv* coeEnv = CCoeEnv::Static(); - RWsSession& session = coeEnv->WsSession(); - CWsScreenDevice* screenDevice = coeEnv->ScreenDevice(); - RDrawableWindow* drawableWindow = DrawableWindow(); - - if ( iVideoPlayerUtility != NULL ) - { - delete iVideoPlayerUtility; - iVideoPlayerUtility = NULL; - } - - if (!iFilename) - { - iNewFile = ETrue; - iDuration = TTimeIntervalMicroSeconds(0); - iFilename = aFilename.AllocL(); - } - else if ((*iFilename).CompareF(aFilename)) - { - iNewFile = ETrue; - iDuration = TTimeIntervalMicroSeconds(0); - HBufC* temp = aFilename.AllocL(); - delete iFilename; - iFilename = temp; - } - - /* Initialize the video player. */ - iVideoPlayerUtility = CVideoPlayerUtility::NewL( *this, - static_cast(KAudioPriorityRealOnePlayer), - static_cast(KAudioPrefRealOneLocalPlayback), - session, *screenDevice, *drawableWindow, screenRect, screenRect ); - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::OpenFileL 2"); - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::ELoadingStarted ); - iVideoPlayerUtility->RegisterForVideoLoadingNotification( *this ); - /* Open the file. */ - iVideoPlayerUtility->OpenFileL( *iFilename ); - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::OpenFileL: Out"); - } -// --------------------------------------------------------- -// CVeiPreviewContainer::MvpuoFrameReady( CFbsBitmap& aFrame, TInt aError ) -// Notification to the client that the frame requested by a call to GetFrameL is ready. -// --------------------------------------------------------- -void CVeiVideoDisplay::MvpuoFrameReady( CFbsBitmap& /*aFrame*/, TInt DEBUGLOG_ARG(aError) ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::MvpuoFrameReady: In and Out, aError:%d", aError); - /* - @: for some reason this does not work - if (KErrNone == aError) - { - SetPictureL(aFrame); - } - DrawDeferred(); - */ - } - -// --------------------------------------------------------- -// CVeiVideoDisplay::MvpuoOpenComplete( TInt aError ) -// Notification to the client that the opening of the video clip has completed. -// --------------------------------------------------------- -void CVeiVideoDisplay::MvpuoOpenComplete( TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::MvpuoOpenComplete: In, aError:%d", aError); - if( aError != KErrNone ) - { - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EError ); - return; - } - - iVideoPlayerUtility->Prepare(); - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::MvpuoOpenComplete: Out"); - } - -// --------------------------------------------------------- -// CVeiVideoDisplay::MvpuoPlayComplete( TInt aError ) -// Notification that video playback has completed. -// --------------------------------------------------------- -void CVeiVideoDisplay::MvpuoPlayComplete( TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::MvpuoPlayComplete:In, aError:%d", aError); - iStartPoint = TTimeIntervalMicroSeconds(0); - /* iBufferingCompleted is set to EFalse in MvloLoadingStarted and set back ETrue in - MvloLoadingCompleted. - If error occurs in the middle of the loading process the latter one is not called and - iBufferingCompleted is left to EFalse, that is why is it set to ETrue here also for safety's sake - */ - iBufferingCompleted = ETrue; - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EPlayComplete, aError ); - - // Stop() better to be called from iObserver - /*if ( KErrSessionClosed == aError ) // -45 (10/2006) - { - Stop( ETrue ); - } - */ - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::MvpuoPlayComplete: Out"); - } - -// --------------------------------------------------------- -// CVeiPreviewContainer::MvpuoEvent( const TMMFEvent& /*aEvent*/ ) -// -// --------------------------------------------------------- -void CVeiVideoDisplay::MvpuoEvent( const TMMFEvent& aEvent ) - { - LOGFMT2(KVideoEditorLogFile, "CVeiVideoDisplay::MvpuoEvent In, aEvent.iEventType:%d, aEvent.iErrorCode:%d", - aEvent.iEventType.iUid, aEvent.iErrorCode); - - if (KMMFEventCategoryVideoPlayerGeneralError == aEvent.iEventType && - KErrMMAudioDevice == aEvent.iErrorCode) - { - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EError, aEvent.iErrorCode ); - } - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::MvpuoEvent, Out"); - } - -// --------------------------------------------------------- -// CVeiVideoDisplay::MvpuoPrepareComplete( TInt aError ) -// Notification to the client that the opening of the video clip has been prepared. -// --------------------------------------------------------- -void CVeiVideoDisplay::MvpuoPrepareComplete( TInt aError ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::MvpuoPrepareComplete:In, aError:%d",aError); - - //LocateEntryL(); - if( KErrNone != aError ) - { - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EError, aError ); - return; - } - - SetPlaybackVolumeL(); - - SetPositionL(iStartPoint); - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EOpenComplete, iStartPoint.Int64() ); -/** If volume is 0(muted) give event so muted icon is drawn to navipane */ - if ( iInternalVolume == 0 ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::MvpuoPrepareComplete 1"); - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EVolumeLevelChanged); - } - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::MvpuoPrepareComplete: Out"); - } - - -void CVeiVideoDisplay::LocateEntryL() - { - TInt metaDataCount = iVideoPlayerUtility->NumberOfMetaDataEntriesL(); - CMMFMetaDataEntry* entry = NULL; - // Loop through metadata - for ( TInt i = 0; i < metaDataCount; i++ ) - { - entry = iVideoPlayerUtility->MetaDataEntryL( i ); - HBufC* name = entry->Name().AllocLC(); - HBufC* value = entry->Value().AllocLC(); - LOGFMT3(KVideoEditorLogFile, "CVeiVideoDisplay::LocateEntryL, i:%d, name,value:%S,%S", i, name, value); - CleanupStack::PopAndDestroy( value ); - CleanupStack::PopAndDestroy( name ); - } - } - -void CVeiVideoDisplay::MvloLoadingStarted() - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::MvloLoadingStarted, In"); - iBufferingCompleted = EFalse; - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EBufferingStarted ); - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::MvloLoadingStarted, Out"); - } - -void CVeiVideoDisplay::MvloLoadingComplete() - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::MvloLoadingComplete, In, iStartPoint:%Ld", iStartPoint.Int64()); - iBufferingCompleted = ETrue; - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::ELoadingComplete, iStartPoint.Int64() ); - // set screen size to play mode - SizeChanged(); - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::MvloLoadingComplete, Out"); - } - -void CVeiVideoDisplay::Draw( const TRect& aRect ) const - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Draw in"); - CWindowGc& gc = SystemGc(); - - TRect rect( Rect() ); - - rect.Move(iBorderWidth,iBorderWidth); - rect.Resize(-iBorderWidth*2,-iBorderWidth*2); - TSize clipRect( rect.Size() ); - - if ( Window().DisplayMode() == EColor16MA ) - { - gc.SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha); - gc.SetBrushColor(TRgb::Color16MA( 0 )); - gc.Clear(aRect); - } - - if ( iBlack ) - { -/* - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Draw 1"); - gc.SetPenStyle( CWindowGc::ENullPen ); - gc.SetBrushColor( KRgbBlack ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.DrawRect( rect ); - - gc.SetPenStyle( CWindowGc::ESolidPen ); - gc.SetPenSize( TSize(iBorderWidth,iBorderWidth) ); - - gc.DrawRoundRect(aRect, TSize(4,4)); -*/ - return; - } - - if ( iBlank ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Draw 2"); - gc.BitBltMasked( rect.iTl, iBgSquaresBitmap, clipRect, iBgSquaresBitmapMask, EFalse); - } - else - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Draw 3"); - - if ( iDisplayBitmap->SizeInPixels() == GetScreenSize() ) - { - - gc.BitBlt( rect.iTl, iDisplayBitmap, clipRect); - } - else - { - - TSize clipRectSize = iDisplayBitmap->SizeInPixels(); - TRect destRect; - - // check which one has bigger aspect ratio, video diplay or thumbnail. - TReal displayAR = rect.Width() / TReal(rect.Height()); - TReal thumbnailAR = clipRectSize.iWidth / TReal(clipRectSize.iHeight); - - if (thumbnailAR > displayAR) - { - //Create proper destination rect - TInt newHeight = (clipRectSize.iHeight * rect.Width() ) / clipRectSize.iWidth; - TInt newTLiY = rect.iTl.iY + (rect.Height() - newHeight) / 2; - destRect = TRect(TPoint(rect.iTl.iX,newTLiY), TSize(rect.Width(), newHeight)); - } - else - { - // write here destrect calculation when thumbnailAR < displayAR - TInt newWidth = rect.Height()*thumbnailAR; - TInt newTLiX = rect.iTl.iX + ((rect.Width()-newWidth)/2); - destRect = TRect (TPoint(newTLiX, rect.iTl.iY), TSize(newWidth, rect.Height())); - } - gc.DrawBitmap( destRect, iDisplayBitmap ); - } - } - -/* - gc.SetPenStyle( CWindowGc::ESolidPen ); - gc.SetPenSize( TSize(iBorderWidth,iBorderWidth) ); - - rect = Rect(); - rect.Resize(-(iBorderWidth-1),-(iBorderWidth-1)); - gc.DrawRoundRect( rect, TSize(4,4)); -*/ - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::Draw out"); - } - - -EXPORT_C TTimeIntervalMicroSeconds CVeiVideoDisplay::TotalLengthL() - { - if ( !iVideoPlayerUtility ) - { - return iDuration; - //return TTimeIntervalMicroSeconds(0); - } - else - { - TRAPD( err, iDuration =iVideoPlayerUtility->DurationL() ); - if ( err == KErrNone ) - { - return iDuration; - } - else - { - return TTimeIntervalMicroSeconds(0); - } - } - } - -EXPORT_C void CVeiVideoDisplay::AdjustVolumeL( TInt aIncrement ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::AdjustVolumeL( %d ): in", aIncrement); - - iInternalVolume += aIncrement; - - if ( iInternalVolume < 0 ) - { - iInternalVolume = 0; - } - if ( iInternalVolume > KMaxVolumeLevel ) - { - iInternalVolume = KMaxVolumeLevel; - } - - SetPlaybackVolumeL(); - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EVolumeLevelChanged ); - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::SetVolumeL(): out"); - } - -void CVeiVideoDisplay::SetPlaybackVolumeL() - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::SetPlaybackVolumeL(): in: iInternalVolume: %d", iInternalVolume); - - if ( iVideoPlayerUtility ) - { - // Convert the internal volume to CVideoPlayerUtility's scale. - iMaxVolume = iVideoPlayerUtility->MaxVolume(); - - TInt vol = iMaxVolume * iInternalVolume / KMaxVolumeLevel; - iVideoPlayerUtility->SetVolumeL( vol ); - } - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::SetPlaybackVolumeL(): out"); - } - -EXPORT_C void CVeiVideoDisplay::ShowAnimationL( TInt aResourceId, TInt aFrameIntervalInMilliSeconds ) - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ShowAnimationL: in"); - - iAnimationResourceId = aResourceId; - - if ( iAnimation ) - { - delete iAnimation; - iAnimation = 0; - } - /* In slowmotion video thumbnail is shown */ - if ( aResourceId != R_VEI_SLOW_MOTION_ANIMATION ) - { - iBlack = ETrue; - DrawNow(); - iBlack = EFalse; - } - else - { - DrawNow(); - } - - // Locate and open the resource file - TFileName fileName; - TParse p; - - Dll::FileName(fileName); - p.Set(KResourceFile, &KDC_RESOURCE_FILES_DIR, &fileName); - fileName = p.FullName(); - - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::ShowAnimationL: Loading resource file: %S", &fileName); - RConeResourceLoader coneResLoader (*iCoeEnv); - coneResLoader.OpenL( fileName ); // RConeResourceLoader selects the correct language file - CleanupClosePushL( coneResLoader ); - - // Create animation from resource - iAnimation = CAknBitmapAnimation::NewL(); - - TResourceReader reader; - iCoeEnv->CreateResourceReaderLC( reader, aResourceId ); - iAnimation->ConstructFromResourceL( reader ); - TRect rect( Rect() ); - rect.Move( iBorderWidth, iBorderWidth ); - rect.Resize( -iBorderWidth*2, -iBorderWidth ); - iAnimation->SetRect( rect ); - iAnimation->SetContainerWindowL( *this ); - iAnimationOn = ETrue; - iAnimation->StartAnimationL(); - CleanupStack::PopAndDestroy(); //reader - CBitmapAnimClientData* animClientData = iAnimation->BitmapAnimData(); - iAnimationFrameIntervalInMilliSeconds = animClientData->FrameIntervalInMilliSeconds(); - - CleanupStack::PopAndDestroy(); // coneResLoader - - if ( aFrameIntervalInMilliSeconds > 0 ) - { - SetFrameIntervalL( aFrameIntervalInMilliSeconds ); - } - DrawDeferred(); - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::ShowAnimationL: out"); - } - -EXPORT_C void CVeiVideoDisplay::StopAnimation() - { - if ( iAnimationOn ) - { - iAnimation->CancelAnimation(); - } - iAnimationOn = EFalse; - DrawDeferred(); - } - -EXPORT_C void CVeiVideoDisplay::SetFrameIntervalL(TInt aFrameIntervalInMilliSeconds) - { - iAnimationFrameIntervalInMilliSeconds+=aFrameIntervalInMilliSeconds; - iAnimation->SetFrameIntervalL( iAnimationFrameIntervalInMilliSeconds ); - } - -void CVeiVideoDisplay::HandleResourceChange(TInt aType) - { - if( (aType == KEikMessageFadeAllWindows) && iAnimationOn ) - { - iAnimation->CancelAnimation(); - } - else if( (aType == KEikMessageUnfadeWindows) && iAnimationOn ) - { - TRAPD(err, iAnimation->StartAnimationL() ); - if( KErrNone != err ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::HandleResourceChange: StartAnimationL failed: %d", err); - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EError ); - } - } - } - -EXPORT_C TInt CVeiVideoDisplay::Volume() const - { - return iInternalVolume; - } - -EXPORT_C void CVeiVideoDisplay::SetMuteL( TBool aMuted ) - { - iMuted = aMuted; - } - -//======================================================================================================= -void CVeiVideoDisplay::HandleLosingForeground() - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::HandleLosingForeground(): In"); - - if( iAnimationOn ) - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::HandleLosingForeground(): stopping animation. iAnimationFrameIntervalInMilliSeconds == %d", iAnimationFrameIntervalInMilliSeconds); - - // Delete the animation when going to backgroung. This should not be necessary, there are some - // platforms where the bitmap animation works incorrectly when swithching back (see EFLI-6VL4JS) - iStoredAnimationFrameIntervalInMilliSeconds = iAnimationFrameIntervalInMilliSeconds; - delete iAnimation; - iAnimation = NULL; - } - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::HandleLosingForeground(): Out"); - } - -//======================================================================================================= -void CVeiVideoDisplay::HandleGainingForeground() - { - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::HandleGainingForeground(): In"); - - if( iAnimationOn ) - { - TRAPD(err, ShowAnimationL( iAnimationResourceId, 0 )); - if( KErrNone == err ) - { - // restore the animation speed - LOGFMT2(KVideoEditorLogFile, "CVeiVideoDisplay::HandleLosingForeground(): animation started. next restoring speed to %d (now it is %d)", iStoredAnimationFrameIntervalInMilliSeconds, iAnimationFrameIntervalInMilliSeconds); - iAnimationFrameIntervalInMilliSeconds = iStoredAnimationFrameIntervalInMilliSeconds; - // set the animation's frame interval via callback. if set directly after starting the - // animation, the rate change does not take effect on screen. - SetAnimationFrameIntervalCallbackL(); - } - else - { - LOGFMT(KVideoEditorLogFile, "CVeiVideoDisplay::SizeChanged: HandleGainingForeground failed: %d", err); - iObserver.NotifyVideoDisplayEvent( MVeiVideoDisplayObserver::EError ); - } - } - - LOG(KVideoEditorLogFile, "CVeiVideoDisplay::HandleGainingForeground: Out"); - } - -//======================================================================================================= -void CVeiVideoDisplay::SetAnimationFrameIntervalCallbackL() - { - LOG( KVideoEditorLogFile, "CVeiVideoDisplay::DoSetAnimationFrameIntervalL: in"); - - if (! iCallBack) - { - TCallBack cb (CVeiVideoDisplay::SetAnimationFrameIntervalCallbackMethod, this); - iCallBack = new (ELeave) CAsyncCallBack(cb, CActive::EPriorityLow); - } - iCallBack->CallBack(); - - LOG( KVideoEditorLogFile, "CVeiVideoDisplay::DoSetAnimationFrameIntervalL: out"); - } - -//======================================================================================================= -TInt CVeiVideoDisplay::SetAnimationFrameIntervalCallbackMethod(TAny* aThis) - { - LOG( KVideoEditorLogFile, "CVeiVideoDisplay::SetAnimationFrameIntervalCallbackMethod"); - - CVeiVideoDisplay* me = static_cast(aThis); - TRAPD( err, me->SetFrameIntervalL( 0 ) ); - - return err; - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoProvider/group/VideoProvider.mmp --- a/videditor/VideoProvider/group/VideoProvider.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// To get the APP_LAYER_SYSTEMINCLUDE-definition -#include - -#include -#include "../inc/VideoProviderUids.hrh" -#include "../../Group/buildconfig.hrh" - -#if defined( __DEBUG_ON__ ) -MACRO DEBUG_ON -#endif -#if defined( __DEBUG_ON_ALWAYS__ ) -MACRO DEBUG_ON_ALWAYS -#endif -#if defined(__DEBUG_ON__) || defined(__DEBUG_ON_ALWAYS__) -LIBRARY flogger.lib -#endif - -#if defined( __INCLUDE_MANUAL_VIDEO_EDITOR__ ) -MACRO INCLUDE_MANUAL_VIDEO_EDITOR -#endif - -#if defined( __INCLUDE_SIMPLE_VIDEO_EDITOR__ ) -MACRO INCLUDE_SIMPLE_VIDEO_EDITOR -LIBRARY SimpleVideoEditor.lib -#endif - -#if defined( __FILE_TIME_STAMP_UPDATE__ ) -MACRO FILE_TIME_STAMP_UPDATE -#endif - -// Define this macro to test the performance of the provider. -// (This is independent of the rest of the logging so that -// it does not affect the timings) -//MACRO LOG_TIMING - - -TARGET VideoProvider.dll -TARGETTYPE PLUGIN -CAPABILITY CAP_ECOM_PLUGIN - -// MAGIC Dll recognition UID followed by the unique UID for this dll -UID 0x10009D8D 0x101FFA8E - - -USERINCLUDE ../inc -USERINCLUDE ../../SimpleVideoEditor/inc -USERINCLUDE ../../VideoEditorCommon/inc -USERINCLUDE ../../VideoEditorCommon/data - -// Default system include paths for application layer modules. -APP_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/caf -SYSTEMINCLUDE /epoc32/include/ECom - -SOURCEPATH ../src -SOURCE VideoProvider.cpp - -SOURCEPATH ../src - -START RESOURCE VideoProvider.rss -TARGET VideoProvider.rsc -TARGETPATH ECOM_RESOURCE_DIR -END - - -START RESOURCE VideoProviderInternal.rss -HEADER -TARGET VideoProviderInternal.rsc -TARGETPATH RESOURCE_FILES_DIR -LANGUAGE_IDS -END - - -LIBRARY apgrfx.lib -LIBRARY apmime.lib -LIBRARY apparc.lib -LIBRARY avkon.lib -LIBRARY bafl.lib -LIBRARY commonengine.lib -LIBRARY cone.lib -LIBRARY efsrv.lib -LIBRARY euser.lib -LIBRARY ServiceHandler.lib -LIBRARY VideoEditorCommon.lib - -LIBRARY caf.lib // CAF - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoProvider/group/bld.inf --- a/videditor/VideoProvider/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include - -#include "../../Group/buildconfig.hrh" - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -../rom/VideoProvider.iby CORE_APP_LAYER_IBY_EXPORT_PATH(VideoProvider.iby) -../rom/VideoProvider_resource.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(VideoProvider_resource.iby) - -PRJ_MMPFILES -VideoProvider.mmp - -PRJ_TESTEXPORTS - -PRJ_TESTMMPFILES -//../internal/tsrc/group/VideoEditorTest.mmp diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoProvider/inc/VideoProvider.h --- a/videditor/VideoProvider/inc/VideoProvider.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Declares Base service API for all providers to implement in order to -* offer services to Application Interworking Framework. -* -*/ - - -#ifndef _VIDEOPROVIDER_H -#define _VIDEOPROVIDER_H - -// - -#include -#include -#include -#include -#include "SimpleVideoEditor.h" - - -// FORWARD DECLARATIONS -class MAiwNotifyCallback; -class CAknOpenFileService; -class TDataType; - - -class CVideoProvider : public CAiwServiceIfMenu, - public MAknServerAppExitObserver, - public MSimpleVideoEditorExitObserver - { - public: - /** New factory method - * - * - * @param - - * @return - pointer to a new instance of CEditorProvider - */ - static CVideoProvider* NewL(); - - /** Destructor - * - * @param - - * @return - - */ - ~CVideoProvider(); - - public: - /** InitialiseL - * - * @see CAiwServiceIfBase - */ - virtual void InitialiseL ( - MAiwNotifyCallback & aFrameworkCallback, - const RCriteriaArray & aInterest - ); - - /** HandleServiceCmdL - * - * @see CAiwServiceIfBase - */ - virtual void HandleServiceCmdL ( - const TInt & aCmdId, - const CAiwGenericParamList & aInParamList, - CAiwGenericParamList & aOutParamList, - TUint aCmdOptions = 0, - const MAiwNotifyCallback * aCallback = NULL - ); - - /** InitializeMenuPaneL - * - * @see CAiwServiceIfMenu - */ - virtual void InitializeMenuPaneL ( - CAiwMenuPane & aMenuPane, - TInt aIndex, - TInt aCascadeId, - const CAiwGenericParamList & aInParamList - ); - - /** HandleMenuCmdL - * - * @see CAiwServiceIfMenu - */ - virtual void HandleMenuCmdL ( - TInt aMenuCmdId, - const CAiwGenericParamList & aInParamList, - CAiwGenericParamList & aOutParamList, - TUint aCmdOptions = 0, - const MAiwNotifyCallback * aCallback = NULL - ); - - /** HandleServerAppExit - * - * @see MAknServerAppExitObserver - */ - virtual void HandleServerAppExit (TInt aReason); - - /** HandleSimpleVideoEditorExit - * - * @see MSimpleVideoEditorExitObserver - */ - virtual void HandleSimpleVideoEditorExit (TInt aReason, const TDesC& aResultFileName); - - private: - CVideoProvider(); - - private: - /** - * @param aMenuCmdId - * @param aFileName - * @param CAiwGenericParamList - * @return - - */ - void LaunchEditorL( - TInt aMenuCmdId, - const TDesC & aFileName, - const CAiwGenericParamList & aInParamList - ); - - /** HandleCmdsL - * - * Handle menu and service commands - * - * @see HandleMenuCmdL - * @see HandleServiceCmdL - */ - void HandleCmdsL ( - TInt aMenuCmdId, - const CAiwGenericParamList & aInParamList, - CAiwGenericParamList & aOutParamList, - TUint aCmdOptions, - const MAiwNotifyCallback * aCallback - ); - - TBool IsSupportedVideoFile (const TDesC& aDataType) const; - TBool IsSupportedAudioFile (const TDesC& aDataType) const; - TBool IsSupportedImageFile (const TDesC& aDataType) const; - - void FinalizeL (const TDesC& aFileName); - void CloseFsSession(); - - private: // Data - - RFs iSharableFS; - TFileName iResourceFile; - RConeResourceLoader iResLoader; - TBool iResFileIsLoaded; - CAknOpenFileService * iOpenFileService; - const MAiwNotifyCallback* iAiwNotifyCallback; - #if defined(INCLUDE_SIMPLE_VIDEO_EDITOR) - CSimpleVideoEditor* iSimpleVideoEditor; - #endif - CAiwGenericParamList* iInParamList; - CAiwGenericParamList* iOutParamList; - - // Time stamp of the original file. If there are multiple files, - // the most recent. - TTime iOriginalTimeStamp; - - /// Media Gallery Albums support. - /// List of albums where the source file(s) belong(s) to. - RArray iSourceMGAlbumIdList; - }; - -// -#endif - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoProvider/inc/VideoProvider.rh --- a/videditor/VideoProvider/inc/VideoProvider.rh Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - -#ifndef _AIW_PROVIDER_EXAMPLE_RH -#define _AIW_PROVIDER_EXAMPLE_RH - -enum - { - //EVideoEditorProviderCmdEdit = 1, - EVideoEditorProviderCmdMerge = 1, - EVideoEditorProviderCmdAddAudio = 2, - EVideoEditorProviderCmdAddText = 3, - EVideoEditorProviderCmdCut = 4, - EVideoEditorProviderCmdAdvanced = 5 - }; - -#endif // _AIW_PROVIDER_EXAMPLE_RH - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoProvider/inc/VideoProviderUids.hrh --- a/videditor/VideoProvider/inc/VideoProviderUids.hrh Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef _AIW_EXAMPLE_PROVIDER_UIDS_HRH -#define _AIW_EXAMPLE_PROVIDER_UIDS_HRH - - -#define KVideoEditorProviderDllUid 0x101FFA8E -#define KVideoEditorProviderImplUid 0xA0000304 - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoProvider/rom/VideoProvider.iby --- a/videditor/VideoProvider/rom/VideoProvider.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_SIMPLE_VIDEO_EDITOR - -#ifndef __VIDEOPROVIDER_IBY__ -#define __VIDEOPROVIDER_IBY__ - -#include - -//VideoProvider plugin dll -ECOM_PLUGIN(VideoProvider.dll, VideoProvider.rsc) - -#endif // __VIDEOPROVIDER_IBY__ - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoProvider/rom/VideoProvider_resource.iby --- a/videditor/VideoProvider/rom/VideoProvider_resource.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_SIMPLE_VIDEO_EDITOR - -#ifndef __VIDEOPROVIDERRESOURCES_IBY__ -#define __VIDEOPROVIDERRESOURCES_IBY__ - -#include - -//VideoProvider dll -data=DATAZ_\RESOURCE_FILES_DIR\VideoProviderInternal.rsc RESOURCE_FILES_DIR\VideoProviderInternal.rsc - -#endif // __VIDEOPROVIDERRESOURCES_IBY__ - -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoProvider/src/VideoProvider.cpp --- a/videditor/VideoProvider/src/VideoProvider.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,713 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include "VideoProvider.h" -#include -#include -#include -#include -#include -#include -#include "VideoProviderUids.hrh" -#include "VideoProvider.rh" -#include -#include -#include -#include -#include -#include -#include // for DRM checks -#include -#include -#include "VideoEditorCommon.h" -#include "VideoEditorUtils.h" -#include "VideoEditorDebugUtils.h" -#if defined(INCLUDE_SIMPLE_VIDEO_EDITOR) -#include "SimpleVideoEditor.h" -#endif - -using namespace ContentAccess; - - -//============================================================================= -CVideoProvider* CVideoProvider::NewL() - { - LOG(KVideoProviderLogFile, "CVideoProvider::NewL"); - - return new (ELeave) CVideoProvider(); - } - -//============================================================================= -CVideoProvider::CVideoProvider() : iResLoader(*CEikonEnv::Static()) - { - LOG(KVideoProviderLogFile, "CVideoProvider::CVideoProvider: In"); - - _LIT(KResourceFile, "VideoProviderInternal.rsc"); - TFileName fileName; - TParse p; - - Dll::FileName(fileName); - p.Set(KResourceFile, &KDC_RESOURCE_FILES_DIR, &fileName); - iResourceFile = p.FullName(); - - iResFileIsLoaded = EFalse; - - LOG(KVideoProviderLogFile, "CVideoProvider::CVideoProvider: Out"); - } - -//============================================================================= -CVideoProvider::~CVideoProvider() - { - LOG(KVideoProviderLogFile, "CVideoProvider::~CVideoProvider(): In"); - - #if defined(INCLUDE_SIMPLE_VIDEO_EDITOR) - if (iSimpleVideoEditor) - { - iSimpleVideoEditor->Cancel(); - } - delete iSimpleVideoEditor; - iSimpleVideoEditor = NULL; - #endif - -LOG(KVideoProviderLogFile, "CVideoProvider::~CVideoProvider(): 1"); - CloseFsSession(); -LOG(KVideoProviderLogFile, "CVideoProvider::~CVideoProvider(): 2"); - - iAiwNotifyCallback = NULL; - iInParamList->Reset(); - delete iInParamList; - iOutParamList->Reset(); - delete iOutParamList; -LOG(KVideoProviderLogFile, "CVideoProvider::~CVideoProvider(): 3"); - delete iOpenFileService; - iOpenFileService = NULL; - iResLoader.Close(); -LOG(KVideoProviderLogFile, "CVideoProvider::~CVideoProvider(): 4"); - iSourceMGAlbumIdList.Close(); - - LOG(KVideoProviderLogFile, "CVideoProvider::~CVideoProvider(): Out"); - } - -//============================================================================= -void CVideoProvider::InitialiseL(MAiwNotifyCallback& /*aFrameworkCallback*/, - const RCriteriaArray& /*aInterest*/) - { - LOG(KVideoProviderLogFile, "CVideoProvider::InitialiseL: in"); - - if (!iInParamList) - { - iInParamList = CAiwGenericParamList::NewL(); - } - - if (!iOutParamList) - { - iOutParamList = CAiwGenericParamList::NewL(); - } - - if ( !iResFileIsLoaded ) - { - BaflUtils::NearestLanguageFile( CEikonEnv::Static()->FsSession(), iResourceFile ); - LOGFMT(KVideoProviderLogFile, "CVideoProvider::InitialiseL: Loading resource file: %S", &iResourceFile); - iResLoader.OpenL( iResourceFile ); - } - - iResFileIsLoaded = ETrue; - - // Publish & Subscribe API used for delivering document name from application to AIW provider - // NOTE: this assumes only a single instance of video editor(s) at a time. - TInt err = RProperty::Define(KUidVideoEditorProperties, VideoEditor::EPropertyFilename, RProperty::EText); - if (err != KErrAlreadyExists) - { - LOGFMT(KVideoProviderLogFile, "CVideoProvider::InitialiseL: Calling RProperty::Define(KUidVideoEditorProperties, VideoEditor::EPropertyFilename, RProperty::EText): error %d", err); - User::LeaveIfError(err); - } - - LOG(KVideoProviderLogFile, "CVideoProvider::InitialiseL: out"); - } - -//============================================================================= -void CVideoProvider::InitializeMenuPaneL(CAiwMenuPane& aMenuPane, - TInt aIndex, - TInt /*aCascadeId*/, - const CAiwGenericParamList& aInParamList) - { - LOGFMT2(KVideoProviderLogFile, "CVideoProvider::InitializeMenuPaneL: In (aIndex: %d, aInParamList.Count(): %d)", aIndex, aInParamList.Count()); - -#ifdef LOG_TIMING - TTime startTime(0); - startTime.UniversalTime(); - TTime inputAnalyzedTime(0); - TTime endTime(0); -#endif // LOG_TIMING - - RFs& fs = CEikonEnv::Static()->FsSession(); - - // First check what kin of files the parameter list contains - // and what we can do with them - TInt numberOfEditableVideoClips = 0; - TInt numberOfEditableAudioClips = 0; - TInt numberOfEditableImages = 0; - - // We trust that aInParamList is always the same, i.e. - // - a few (seems to be 3) parameters in the begining - // - after that, filename/mimetype pairs - TInt paramCount = aInParamList.Count(); - TInt fileCount = aInParamList.Count( EGenericParamFile ); - - if ( fileCount <= KAiwMaxNumberOfFilesSimultaneouslyHandled ) - { - for ( TInt i=0; i < paramCount ; i++ ) - { - TBool isDRMProtected( EFalse ); - - // Extract file names from the parameter list. - const TAiwGenericParam& param = aInParamList[i]; - if (param.SemanticId() == EGenericParamFile) - { - TPtrC fileName = param.Value().AsDes(); - LOGFMT(KVideoProviderLogFile, "\tfile name: %S", &fileName); - - // Next we need to get the MIME typ of the file. - TBuf mimeType; - RFile file; - TInt err( file.Open( fs, fileName, EFileShareReadersOnly ) ); - if( KErrNone != err ) - { - err = file.Open( fs, fileName, EFileShareAny ); - } - - if( KErrNone == err ) - { - TDataRecognitionResult dataType; - CleanupClosePushL( file ); - // Check if the file is valid - RApaLsSession lsSession; - err = lsSession.Connect(); - CleanupClosePushL( lsSession ); - err = lsSession.RecognizeData( file, dataType ); - if ( KErrNone == err ) - { - const TInt confidence( dataType.iConfidence ); - if( CApaDataRecognizerType::ECertain == confidence || - CApaDataRecognizerType::EProbable == confidence || - CApaDataRecognizerType::EPossible == confidence ) - { - mimeType = dataType.iDataType.Des(); - } - } - CleanupStack::PopAndDestroy( 2 ); // file, lsSession - } - - // Based on the MIME type, decice whether we support this file. - if (mimeType.Length()) - { - // Create CContent-object - CContent* pContent = CContent::NewLC(fileName); - // See if the content object is protected - User::LeaveIfError( pContent->GetAttribute( EIsProtected, isDRMProtected ) ); - - CleanupStack::PopAndDestroy (pContent); - if (!isDRMProtected) - { - if ( IsSupportedVideoFile(mimeType) ) - { - numberOfEditableVideoClips++; - } - else if ( IsSupportedAudioFile(mimeType) ) - { - numberOfEditableAudioClips++; - } - else if ( IsSupportedImageFile(mimeType) ) - { - numberOfEditableImages++; - } - } - else - { - LOGFMT(KVideoProviderLogFile, "\tCannot edit DRM protected file: %S", &fileName); - } - } - } - } - } - else - { - LOGFMT(KVideoProviderLogFile, "CVideoProvider::InitialiseL: too many files to handle (%d). Ignored.", fileCount); - } - - // When the content of the parameter list is analyzed, - // add the appropriate menu items - LOGFMT3(KVideoProviderLogFile, "CVideoProvider::InitializeMenuPaneL: AIW parameter list content analyzed: numberOfEditableVideoClips: %d, numberOfEditableAudioClips: %d, numberOfEditableImages: %d", numberOfEditableVideoClips,numberOfEditableAudioClips,numberOfEditableImages); - -#ifdef LOG_TIMING - inputAnalyzedTime.UniversalTime(); -#endif // LOG_TIMING - - // CASE 1: one video selected: all options available - if (numberOfEditableVideoClips == 1 && (numberOfEditableAudioClips+numberOfEditableImages) == 0) - { - -#if defined(INCLUDE_MANUAL_VIDEO_EDITOR) - - // Advanced (manual) editor - aMenuPane.AddMenuItemsL( - iResourceFile, - R_VIDEOEDITORPROVIDER_ADVANCED_MENU, - KAiwCmdEdit, - aIndex ); - -#endif // INCLUDE_MANUAL_VIDEO_EDITOR - -#if defined(INCLUDE_SIMPLE_VIDEO_EDITOR) - - // Simple Cut - aMenuPane.AddMenuItemsL( - iResourceFile, - R_VIDEOEDITORPROVIDER_CUT_MENU, - KAiwCmdEdit, - aIndex ); - - // Simple Add text - aMenuPane.AddMenuItemsL( - iResourceFile, - R_VIDEOEDITORPROVIDER_ADD_TEXT_MENU, - KAiwCmdEdit, - aIndex ); - - // Simple Add audio - aMenuPane.AddMenuItemsL( - iResourceFile, - R_VIDEOEDITORPROVIDER_ADD_AUDIO_MENU, - KAiwCmdEdit, - aIndex ); - - // Simple merge - aMenuPane.AddMenuItemsL( - iResourceFile, - R_VIDEOEDITORPROVIDER_MERGE_MENU, - KAiwCmdEdit, - aIndex ); - - // Sub-menu title "Edit" - aMenuPane.AddMenuItemsL( - iResourceFile, - R_VIDEOEDITORPROVIDER_SUBMENU_TITLE, - KAiwCmdEdit, - aIndex ); - -#endif // INCLUDE_SIMPLE_VIDEO_EDITOR - - } - -#if defined(INCLUDE_MANUAL_VIDEO_EDITOR) - - // CASE 2: several video clips or other files selected: only manual editor available, - // and only if there is at least one video. - if (numberOfEditableVideoClips > 0 - && (numberOfEditableVideoClips+numberOfEditableAudioClips+numberOfEditableImages) > 1) - { - // Advanced (manual) editor only - aMenuPane.AddMenuItemsL( - iResourceFile, - R_VIDEOEDITORPROVIDER_EDIT_MENU, - KAiwCmdEdit, - aIndex ); - } - -#endif // INCLUDE_MANUAL_VIDEO_EDITOR - -#ifdef LOG_TIMING - endTime.UniversalTime(); - - TInt64 totalTime = endTime.Int64() - startTime.Int64(); - TInt64 inputlistAnalyzingtime = inputAnalyzedTime.Int64() - startTime.Int64(); - TInt64 menuPaneAddingTime = endTime.Int64() - inputAnalyzedTime.Int64(); - - _LIT(KText1, "AIW Parameter list contains %d files (total %d parameters). Times taken:"); - _LIT(KText2, " Total: %Ld, Analyzing input param list: %Ld, Adding menu items: %Ld"); - TFileName path(KLogsFolder); - path.Append(KLogDir); - path.Append(KBackslash); - TFileName fileNameAndPath(path); - fileNameAndPath.Append(_L("VideoProviderTiming.log")); - if(BaflUtils::FolderExists(fs,path)) - { - TLogFileDes16OverflowHandler ofh; - TBuf buf1; - TBuf buf2; - buf1.AppendFormat(KText1,&ofh,fileCount,paramCount); - buf2.AppendFormat(KText2,&ofh,totalTime,inputlistAnalyzingtime,menuPaneAddingTime); - CLogFile::StaticLog(fileNameAndPath,buf1); - CLogFile::StaticLog(fileNameAndPath,buf2); - } - RDebug::Print(KText1, fileCount, paramCount); - RDebug::Print(KText2, totalTime, inputlistAnalyzingtime, menuPaneAddingTime); -#endif // LOG_TIMING - - LOG(KVideoProviderLogFile, "CVideoProvider::InitializeMenuPaneL: out"); - } - -//============================================================================= -void CVideoProvider::HandleServiceCmdL(const TInt& aCmdId, - const CAiwGenericParamList& aInParamList, - CAiwGenericParamList& aOutParamList, - TUint aCmdOptions, - const MAiwNotifyCallback* aCallback) - { - LOGFMT(KVideoProviderLogFile, "CVideoProvider::HandleServiceCmdL (%d)", aCmdId); - HandleCmdsL(aCmdId, aInParamList, aOutParamList, aCmdOptions, aCallback); - } - -//============================================================================= -void CVideoProvider::HandleMenuCmdL ( - TInt aMenuCmdId, - const CAiwGenericParamList & aInParamList, - CAiwGenericParamList & aOutParamList, - TUint aCmdOptions, - const MAiwNotifyCallback * aCallback) - - { - LOGFMT(KVideoProviderLogFile, "CVideoProvider::HandleMenuCmdL (%d)", aMenuCmdId); - HandleCmdsL(aMenuCmdId, aInParamList, aOutParamList, aCmdOptions, aCallback); - } - -//============================================================================= -void CVideoProvider::HandleCmdsL(TInt aMenuCmdId, - const CAiwGenericParamList& aInParamList, - CAiwGenericParamList& aOutParamList, - TUint /*aCmdOptions*/, - const MAiwNotifyCallback* aCallback) - { - LOGFMT(KVideoProviderLogFile, "CVideoProvider::HandleCmdsL (%d): In", aMenuCmdId); - - switch ( aMenuCmdId ) - { - case EVideoEditorProviderCmdMerge: - case EVideoEditorProviderCmdAddAudio: - case EVideoEditorProviderCmdAddText: - case EVideoEditorProviderCmdCut: - case EVideoEditorProviderCmdAdvanced: - { - // Store input parameters - if (aCallback) - { - iAiwNotifyCallback = aCallback; - iInParamList->Reset(); - iInParamList->AppendL(aInParamList); - iOutParamList->Reset(); - iOutParamList->AppendL(aOutParamList); - LOG(KVideoProviderLogFile, "CVideoProvider: Using AIW call back"); - } - else - { - iAiwNotifyCallback = NULL; - } - - // Open file server session - User::LeaveIfError(iSharableFS.Connect()); - iSharableFS.ShareProtected(); - - // Find the first file on the generic param list... - // There must be at least one file, and all the files must exist. - TPtrC fileName; - TInt count = aInParamList.Count(); - iSourceMGAlbumIdList.Reset(); - for (TInt i = count - 1; i >= 0; --i) - { - const TAiwGenericParam& param = aInParamList[i]; - if (param.SemanticId() == EGenericParamFile) - { - fileName.Set(param.Value().AsDes()); - - // Check that that the file exists and is accessible. - // The AIW consumer should provide us only valid files. - // If this is not the case, just leave and let the consumer handle the error. - TEntry entry; - TInt err = iSharableFS.Entry( fileName, entry ); - LOGFMT2(KVideoProviderLogFile, "CVideoProvider::HandleCmdsL: Could not open file: %S, error: %d", &fileName, err); - User::LeaveIfError( err ); - - // Store the time stamp of the most recent file (needed later). - TTime time = entry.iModified; - if (iOriginalTimeStamp < time) - { - iOriginalTimeStamp = time; - } - - // Find out whether the source file belongs to any albums - VideoEditorUtils::GetMGAlbumsListForMediaFileL ( - iSourceMGAlbumIdList, - fileName ); - } - } - - // Launch the editor - LaunchEditorL( aMenuCmdId, fileName, aInParamList); - - break; - } - default: - { - break; - } - } - LOG(KVideoProviderLogFile, "CVideoProvider::HandleCmdsL: out"); - } - -//============================================================================= -void CVideoProvider::LaunchEditorL( - TInt aMenuCmdId, - const TDesC & aFileName, - const CAiwGenericParamList & aInParamList - ) - { - LOGFMT(KVideoProviderLogFile, "CVideoProvider::LaunchEditorL: file: %S", &aFileName); - - RFile fileHandle; - TInt err = fileHandle.Open(iSharableFS,aFileName,EFileWrite|EFileShareReadersOrWriters); - if (KErrNone != err) - { - LOG(KVideoEditorLogFile, "CVideoProvider::LaunchEditorL: Could not open file with EFileWrite. Trying EFileRead"); - User::LeaveIfError( fileHandle.Open (iSharableFS,aFileName,EFileRead|EFileShareReadersOrWriters) ); - } - CleanupClosePushL (fileHandle); - - if (iAiwNotifyCallback) - { - const_cast(iAiwNotifyCallback)->HandleNotifyL(KAiwCmdEdit, KAiwEventStarted, *iOutParamList, *iInParamList); - } - - switch ( aMenuCmdId ) - { - case EVideoEditorProviderCmdMerge: - { - LOG(KVideoProviderLogFile, "\tEVideoEditorProviderCmdMerge"); - - #if defined(INCLUDE_SIMPLE_VIDEO_EDITOR) - delete iSimpleVideoEditor; - iSimpleVideoEditor = NULL; - iSimpleVideoEditor = CSimpleVideoEditor::NewL( *this ); - iSimpleVideoEditor->Merge (aFileName); - #endif // INCLUDE_SIMPLE_VIDEO_EDITOR - - break; - } - case EVideoEditorProviderCmdAddAudio: - { - LOG(KVideoProviderLogFile, "\tEVideoEditorProviderCmdAddAudio"); - - #if defined(INCLUDE_SIMPLE_VIDEO_EDITOR) - delete iSimpleVideoEditor; - iSimpleVideoEditor = NULL; - iSimpleVideoEditor = CSimpleVideoEditor::NewL( *this ); - iSimpleVideoEditor->ChangeAudio (aFileName); - #endif // INCLUDE_SIMPLE_VIDEO_EDITOR - - break; - } - case EVideoEditorProviderCmdAddText: - { - LOG(KVideoProviderLogFile, "\tEVideoEditorProviderCmdAddText"); - - #if defined(INCLUDE_SIMPLE_VIDEO_EDITOR) - delete iSimpleVideoEditor; - iSimpleVideoEditor = NULL; - iSimpleVideoEditor = CSimpleVideoEditor::NewL( *this ); - iSimpleVideoEditor->AddText (aFileName); - #endif // INCLUDE_SIMPLE_VIDEO_EDITOR - - break; - } - case EVideoEditorProviderCmdCut: - { - LOG(KVideoProviderLogFile, "\tEVideoEditorProviderCmdCut"); - iOpenFileService = CAknOpenFileService::NewL (KUidSimpleCutVideo,fileHandle,(MAknServerAppExitObserver *)this,&const_cast(aInParamList)); - break; - } - case EVideoEditorProviderCmdAdvanced: - { - LOG(KVideoProviderLogFile, "\tEVideoEditorProviderCmdAdvanced"); - iOpenFileService = CAknOpenFileService::NewL (KUidVideoEditor,fileHandle,(MAknServerAppExitObserver *)this,&const_cast(aInParamList)); - break; - } - default: - LOG(KVideoProviderLogFile, "\tUnknown command!"); - break; - } - - CleanupStack::PopAndDestroy( &fileHandle ); // close fileHandle - - LOG(KVideoProviderLogFile, "CVideoProvider::LaunchEditorL: out"); - } - -//============================================================================= -TBool CVideoProvider::IsSupportedVideoFile (const TDesC& aDataType) const - { - _LIT(KMime3gp, "video/3gpp"); - _LIT(KMimeMp4, "video/mp4"); - - return aDataType.CompareF( KMime3gp ) == 0 || aDataType.CompareF( KMimeMp4 ) == 0; - } - -//============================================================================= -TBool CVideoProvider::IsSupportedAudioFile (const TDesC& aDataType) const - { - _LIT(KMimeAllAudio, "audio/"); - return aDataType.Left(6).CompareF( KMimeAllAudio ) == 0; - } - -//============================================================================= -TBool CVideoProvider::IsSupportedImageFile (const TDesC& aDataType) const - { - _LIT(KMimeAllImages, "image/"); - return aDataType.Left(6).CompareF( KMimeAllImages ) == 0; - } - -//============================================================================= -void CVideoProvider::HandleServerAppExit (TInt aReason) - { - LOGFMT(KVideoProviderLogFile, "CVideoProvider::HandleServerAppExit: In: %d", aReason); - - delete iOpenFileService; - iOpenFileService = NULL; - - // Get the output file name provided by the editor application - TFileName newFileName; - (void) RProperty::Get(KUidVideoEditorProperties, VideoEditor::EPropertyFilename, newFileName); - - // Report new file to AIW consumer - TRAP_IGNORE( FinalizeL (newFileName) ); - MAknServerAppExitObserver::HandleServerAppExit(aReason); - - LOG(KVideoProviderLogFile, "CVideoProvider::HandleServerAppExit: Out"); - } - -//============================================================================= -void CVideoProvider::HandleSimpleVideoEditorExit (TInt DEBUGLOG_ARG(aReason), const TDesC& aResultFileName) - { - LOGFMT2(KVideoProviderLogFile, "CVideoProvider::HandleSimpleVideoEditorExitL: In: %d, %S", aReason, &aResultFileName); - -#if defined(INCLUDE_SIMPLE_VIDEO_EDITOR) - - // Report new file to AIW consumer - TRAP_IGNORE( FinalizeL (aResultFileName) ); - - delete iSimpleVideoEditor; - iSimpleVideoEditor = NULL; - - -#endif // INCLUDE_SIMPLE_VIDEO_EDITOR - - LOG(KVideoProviderLogFile, "CVideoProvider::HandleSimpleVideoEditorExitL: Out"); - } - -//============================================================================= -void CVideoProvider::FinalizeL (const TDesC& aFileName) - { - LOGFMT(KVideoProviderLogFile, "CVideoProvider::FinalizeL: In: %S", &aFileName); - -#ifdef FILE_TIME_STAMP_UPDATE - LOG(KVideoProviderLogFile, "CVideoProvider::FinalizeL: 2, executing FILE_TIME_STAMP_UPDATE"); - // Set the timestamp of the saved file to original file's timestamp + 1 second. - // The idea is to make the original and edited images appear next to each other. - if( aFileName.Length() && BaflUtils::FileExists(iSharableFS,aFileName) ) - { - // The requirement is to increment the time by 1 second. - // For some weird reason, setting Attribs to - // iOriginalTimeStamp + TTimeIntervalSeconds (1) has no effect, - // but 2 seconds works fine... - TTime newTime = iOriginalTimeStamp + TTimeIntervalSeconds (2); - - CFileMan* fileMan = CFileMan::NewL( iSharableFS ); - CleanupStack::PushL (fileMan); - // do not set or clear any attribute, mofify time attribute - fileMan->Attribs(aFileName, 0, 0, newTime); - CleanupStack::PopAndDestroy (fileMan); - } -#endif - - iSourceMGAlbumIdList.Reset(); - - // Notify the AIW consumer - if (iAiwNotifyCallback) - { - // Insert the file name to the output parameter list - // (we assume that it is always the first item on the list) - iOutParamList->Reset(); - TAiwVariant variant(aFileName); - TAiwGenericParam param(EGenericParamFile, variant); - iOutParamList->AppendL(param); - - LOG(KVideoProviderLogFile, "CVideoProvider: Calling HandleNotifyL"); - - // Non-leaving function shall use TRAP - TRAP_IGNORE ( - const_cast(iAiwNotifyCallback)->HandleNotifyL(KAiwCmdEdit, KAiwEventCompleted, *iOutParamList, *iInParamList); - const_cast(iAiwNotifyCallback)->HandleNotifyL(KAiwCmdEdit, KAiwEventStopped, *iOutParamList, *iInParamList); - ); - - // Reset new filename property and out paramlist - User::LeaveIfError(RProperty::Set(KUidVideoEditorProperties, VideoEditor::EPropertyFilename, KNullDesC)); - iOutParamList->Reset(); - } - - CloseFsSession(); - - LOG(KVideoProviderLogFile, "CVideoProvider::FinalizeL: Out"); - } - -//============================================================================= -void CVideoProvider::CloseFsSession() - { - LOG(KVideoProviderLogFile, "CVideoProvider::CloseFsSession(): In"); - - if (iSharableFS.Handle() != 0) - { - LOG(KVideoProviderLogFile, "\tClosing iSharableFS"); - iSharableFS.Close(); - } - - LOG(KVideoProviderLogFile, "CVideoProvider::CloseFsSession(): Out"); - } - - -// -// Rest of the file is for ECom initialization. -// - -// Map the interface UIDs to implementation factory functions -LOCAL_D const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY( KVideoEditorProviderImplUid, CVideoProvider::NewL) - }; - -// --------------------------------------------------------- -// -// Exported proxy for instantiation method resolution -// --------------------------------------------------------- -// -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) - { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); - return ImplementationTable; - } - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoProvider/src/VideoProvider.rss --- a/videditor/VideoProvider/src/VideoProvider.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Declares Base service API for all providers to implement in order to -* offer services to Application Interworking Framework. -* -*/ - - - -#include -#include "RegistryInfoV2.rh" -#include "VideoProvider.rh" -#include "VideoProviderUids.hrh" -#include - -RESOURCE REGISTRY_INFO theInfo - { - resource_format_version = RESOURCE_FORMAT_VERSION_2; - dll_uid = KVideoEditorProviderDllUid; - interfaces = - { - INTERFACE_INFO - { - interface_uid = KAiwClassMenu; - implementations = - { - IMPLEMENTATION_INFO - { - implementation_uid = KVideoEditorProviderImplUid; - version_no = 1; - display_name = "Video Editor Menu Provider"; - default_data = "video/*"; - opaque_data = KAiwCmdEditStr; - } - }; - }, - INTERFACE_INFO - { - // Interface UID of resolvers - interface_uid = KAiwClassBase; - implementations = - { - IMPLEMENTATION_INFO - { - implementation_uid = KVideoEditorProviderImplUid; - version_no = 1; - display_name = "Video Editor Base Provider"; - default_data = "video/*"; - opaque_data = KAiwCmdEditStr; - } - }; - } - }; - } - -// End of file - - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/VideoProvider/src/VideoProviderInternal.rss --- a/videditor/VideoProvider/src/VideoProviderInternal.rss Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,144 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Declares Base service API for all providers to implement in order to -* offer services to Application Interworking Framework. -* -*/ - - -NAME VEPI - -// INCLUDES -#include -#include -#include "RegistryInfoV2.rh" -#include "VideoProvider.rh" - -#include - -#include -#include -#include -#include -#include - - -RESOURCE RSS_SIGNATURE { } - -// Menu title for the Edit sub-menu -RESOURCE MENU_PANE r_videoeditorprovider_submenu_title -{ - items= - { - MENU_ITEM - { - command = AIW_SUBMENU_TITLE; - txt = qtn_vie_options_edit; - } - }; -} - - -// Menu item for "Simple Merge" -RESOURCE MENU_PANE r_videoeditorprovider_merge_menu -{ - items= - { - MENU_ITEM - { - command = EVideoEditorProviderCmdMerge; - txt = qtn_vie_options_merge; // menu text - extratxt = qtn_vie_options_sub_merge; // submenu text - } - }; -} - -// Menu item for "Simple Change audio" -RESOURCE MENU_PANE r_videoeditorprovider_add_audio_menu -{ - items= - { - MENU_ITEM - { - command = EVideoEditorProviderCmdAddAudio; - txt = qtn_vie_options_change_sound; // menu text - extratxt = qtn_vie_options_sub_change_sound; // submenu text - } - }; -} - -// Menu item for "Simple Add text" -RESOURCE MENU_PANE r_videoeditorprovider_add_text_menu -{ - items= - { - MENU_ITEM - { - command = EVideoEditorProviderCmdAddText; - txt = qtn_vie_options_add_text; // menu text - extratxt =qtn_vie_options_sub_add_text; // submenu text - } - }; -} - -// Menu item for "Simple Cut" -RESOURCE MENU_PANE r_videoeditorprovider_cut_menu -{ - items= - { - MENU_ITEM - { - command = EVideoEditorProviderCmdCut; - txt = qtn_vie_options_cut; // menu text - extratxt = qtn_vie_options_sub_cut; // submenu text - } - }; -} - -// Menu item for "Manual video editor", used when the -// item is displayed in sub-menu with other edit commands -RESOURCE MENU_PANE r_videoeditorprovider_advanced_menu -{ - items= - { - MENU_ITEM - { - command = EVideoEditorProviderCmdAdvanced; - txt = qtn_vei_menu_advanced; - } - }; -} - -// Menu item for "Manual video editor", used when there -// are no other editing options present (i.e. no sub-menu) -RESOURCE MENU_PANE r_videoeditorprovider_edit_menu -{ - items= - { - MENU_ITEM - { - command = EVideoEditorProviderCmdAdvanced; - txt = qtn_vei_menu_advanced; - }, - MENU_ITEM - { - command = AIW_SUBMENU_TITLE; - txt = qtn_form_litxt_edit; - } - }; -} - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/data/VideoEditor.pkg --- a/videditor/data/VideoEditor.pkg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -; -; Copyright (c) 2010 Ixonos Plc. -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of the "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - Initial contribution -; -; Contributors: -; Ixonos Plc -; -; Description: -; -; Languages -&EN - -; Header -#{"Video Editor"}, (0xA0000303), 1, 0, 0, TYPE=SA -; Uid from VidoeEditorCommon - -; Localised Vendor name -%{"Nokia"} - -; Unique Vendor name -:"Nokia" - - -; Full video editor application -; ----------------------------- -; ""-"z:\sys\bin\ManualVideoEditor.exe" -; ""-"z:\private\10003a3f\import\apps\manualvideoeditor_reg.rsc" -; ""-"z:\resource\apps\ManualVideoEditor.RSC" -; ""-"z:\resource\apps\ManualVideoEditor.mif" -; ""-"z:\resource\help\VideoEditorHelp.hlp" - -; Simple Cut video function -; ------------------------- -""-"z:\sys\bin\VedSimpleCutVideo.exe" -""-"z:\resource\apps\VedSimpleCutVideo.rsc" -""-"z:\private\10003a3f\import\apps\VedSimpleCutVideo_reg.rsc" - -; Merge, Add Text, Add Image, Add Audio) -; -------------------------------------- -""-"z:\sys\bin\SimpleVideoEditor.dll" -""-"z:\resource\SimpleVideoEditor.rsc" - -; AIW service provider -; -------------------- -""-"z:\resource\plugins\VideoProvider.rsc" -""-"z:\sys\bin\VideoProvider.dll" -""-"z:\resource\VideoProviderInternal.rsc" - -; Common components DLL -; --------------------- -""-"z:\sys\bin\VideoEditorCommon.dll" -""-"z:\resource\VideoEditorCommon.rsc" - -; UI components DLL -; ----------------- -""-"z:\sys\bin\VideoEditorUiComponents.dll" -""-"z:\resource\VideoEditorUiComponents.rsc" -""-"z:\resource\apps\VideoEditorUiComponents.mif" -""-"z:\resource\apps\VideoEditorBitmaps.mbm" - -; Trim For Mms -; ------------ -; to be added later diff -r 951a5db380a0 -r d87d32eab1a9 videditor/data/VideoEditorStub.sis Binary file videditor/data/VideoEditorStub.sis has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/data/VideoEditor_stub.pkg --- a/videditor/data/VideoEditor_stub.pkg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -; -; Copyright (c) 2010 Ixonos Plc. -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of the "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - Initial contribution -; -; Contributors: -; Ixonos Plc -; -; Description: -; -; Languages -&EN - -; Header -#{"Video Editor"}, (0xA0000303), 1, 0, 0, TYPE=SA -; Uid from VidoeEditorCommon - -; Localised Vendor name -%{"Nokia"} - -; Unique Vendor name -:"Nokia" - - -; Full video editor application -; ----------------------------- -; ""-"z:\sys\bin\ManualVideoEditor.exe" -; ""-"z:\private\10003a3f\import\apps\manualvideoeditor_reg.rsc" -; ""-"z:\resource\apps\ManualVideoEditor.RSC" -; ""-"z:\resource\apps\ManualVideoEditor.mif" -; ""-"z:\resource\help\VideoEditorHelp.hlp" - -; Simple Cut video function -; ------------------------- -""-"z:\sys\bin\VedSimpleCutVideo.exe" -""-"z:\resource\apps\VedSimpleCutVideo.rsc" -""-"z:\private\10003a3f\import\apps\VedSimpleCutVideo_reg.rsc" - -; Merge, Add Text, Add Image, Add Audio) -; -------------------------------------- -""-"z:\sys\bin\SimpleVideoEditor.dll" -""-"z:\resource\SimpleVideoEditor.rsc" - -; AIW service provider -; -------------------- -""-"z:\resource\plugins\VideoProvider.rsc" -""-"z:\sys\bin\VideoProvider.dll" -""-"z:\resource\VideoProviderInternal.rsc" - -; Common components DLL -; --------------------- -""-"z:\sys\bin\VideoEditorCommon.dll" -""-"z:\resource\VideoEditorCommon.rsc" - -; UI components DLL -; ----------------- -""-"z:\sys\bin\VideoEditorUiComponents.dll" -""-"z:\resource\VideoEditorUiComponents.rsc" -""-"z:\resource\apps\VideoEditorUiComponents.mif" -""-"z:\resource\apps\VideoEditorBitmaps.mbm" - -; Trim For Mms -; ------------ -; to be added later diff -r 951a5db380a0 -r d87d32eab1a9 videditor/data/VideoEditor_stub.sis Binary file videditor/data/VideoEditor_stub.sis has changed diff -r 951a5db380a0 -r d87d32eab1a9 videditor/data/buildsis.bat --- a/videditor/data/buildsis.bat Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -rem -rem Copyright (c) 2010 Ixonos Plc. -rem All rights reserved. -rem This component and the accompanying materials are made available -rem under the terms of the "Eclipse Public License v1.0" -rem which accompanies this distribution, and is available -rem at the URL "http://www.eclipse.org/legal/epl-v10.html". -rem -rem Initial Contributors: -rem Nokia Corporation - Initial contribution -rem -rem Contributors: -rem Ixonos Plc -rem -rem Description: -rem - -makesis -s VideoEditor.pkg VideoEditorStub.sis \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videditor/group/bld.inf --- a/videditor/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Build information file for Simple Cut Video. -* -*/ - - -#include - -#include "buildconfig.hrh" - -#include "../VideoEditorCommon/Group/bld.inf" -#include "../VideoEditorUiComponents/Group/bld.inf" -#include "../SimpleVideoEditor/group/bld.inf" -#include "../SimpleCutVideo/group/bld.inf" -#include "../VideoProvider/group/bld.inf" -#if defined (__INCLUDE_MANUAL_VIDEO_EDITOR__) -#include "../ManualVideoEditor/group/bld.inf" -#endif - -PRJ_EXPORTS -// ROM description files -//../internal/tsrc/rom/VideoEditor.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(VideoEditor.iby) -//../internal/tsrc/rom/VideoEditorResource.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(VideoEditorResource.iby) - -// export localised loc file -../loc/SimpleVideoEditor.loc APP_LAYER_LOC_EXPORT_PATH(SimpleVideoEditor.loc) - -// sis stub -../data/VideoEditorStub.sis /epoc32/data/z/system/install/VideoEditorStub.sis - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videditor/group/buildconfig.hrh --- a/videditor/group/buildconfig.hrh Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// -// Compile-time variation for Video Editor project. -// -// After modifying this file, reallyclean and build the whole project! -// - -#ifndef BUILDCONFIG_HRH -#define BUILDCONFIG_HRH - -// Enable logging facility in all modules. -// Enabling logs will do the both of the following: -// -// 1) Write the the logging information to RDebug::Print() -// (in UDEB builds only) -// 2) Write the log to file using RFileLogger (both in UDEB and UREL) -// or using internal logfile implementation (selected in VideoEditorDebugUtils.h) -// -// Create the folder C:/Logs/VideoEditor to enable the file logging. -// -// - enable logs in UDEB builds: -#define __DEBUG_ON__ -// - enable logs in all builds (not to be used in released code): -//#define __DEBUG_ON_ALWAYS__ - - -// Export the ROM description (.iby) files -// Not needed if we are not creating rom image. -// Do not export if __DSW_EXPORTS defined -// -//#ifndef __DSW_EXPORTS -//#define __EXPORT_ROM_DESCRIPTION_FILES__ -//#endif - - -// Include the "full" video editor application into the build. -// -// NOTE: If this flag is defined, include the following -// IBY files in VideoEditor.iby: -// -// #include -// #include -// #include -// #include -// -//#define __INCLUDE_MANUAL_VIDEO_EDITOR__ - - -// Include the "simple" video editor components into the build. -// -// NOTE: If this flag is defined, include the following -// IBY files in VideoEditor.iby: -// -// #include -// #include -// #include -// #include -// #include -// -#define __INCLUDE_SIMPLE_VIDEO_EDITOR__ - - -// Change file time stamp to [original + 2 seconds] -// before adding new video to gallery -// -#define __FILE_TIME_STAMP_UPDATE__ - -// Force the application to draw video frame in playback's pause state -// Depends on the device if this has to be defined -//#define __GET_PAUSE_THUMBNAIL__ - -#endif // BUILDCONFIG_HRH - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videditor/loc/SimpleVideoEditor.loc --- a/videditor/loc/SimpleVideoEditor.loc Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,512 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* This is a localisation file for Simple Video Editor. -* -*/ -#include - - -//============================================================================= -// ERROR NOTES -//============================================================================= - -// d: Error note when inserting audio failed -// d: audio format is not supported -// l: popup_note_window -// r:5.0 -// -#define qtn_vie_note_err_audio_format "Audio format not supported. Unable to insert." - -// d: Error note when there are problems with the video conversion -// l: popup_note_window -// r:5.0 -// -#define qtn_vie_note_unable_convert "Unable to convert the file. The file insertion canceled." - -// d: Error note when inserting video failed -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_note_err_unable_to_insert_video "Unable to insert video." - -// d: Error note when editing video is not possible -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_note_err_edit "Unable to edit. Video clip corrupted or format not supported." - -// d:Error note when inserting image failed. -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_note_err_unable_to_insert_image "Unable to insert image." - -// d:Error note shown when merging two videos fails -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_note_err_unable_to_merge_video_video "Unable to merge two video clips together." - -// d:Error note shown when merging video and image fails -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_note_err_unable_to_merge_video_image "Unable to merge video clip and image." - -// d:Error note shown Merge if the user selects an image -// d:image that is in unsupported format -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_note_err_image_format_not_supported "Image format not supported. Unable to insert." - -// d:Error note shown when processing video and text together fails -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_note_err_unable_to_add_text "Unable to add text." - -// d:Error note shown in Change sound -// d:when processing video and audio together fails -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_note_err_unable_to_change_sound "Unable to change sound." - -// d:Error note shown if mmc is not accessible and -// d:the phone contains a mass storage -// d:Drive letter will be displayed in %U -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_note_mmc_not_accessible_mass_storage "Memory card not accessible. %U Mass storage will be used instead." - -// d:Error note shown if mmc is not accessible and -// d:the phone doesn't contain a mass storage -// d:Drive letter will be displayed in %U -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_note_mmc_not_accessible_device "Memory card not accessible. %U Device memory will be used instead." - -// d:Error note shown if processing video or audio fails -// d: because of low RAM -// l:popup_note_window -// r:5.0 -// -#define qtn_sie_error_not_enough_memory qtn_memlo_ram_out_of_mem - -//============================================================================= -// PROGRESS NOTES -//============================================================================= - -// d:Text in progress note -// d:Shown when user has selected "Changing video sound", -// d:"Adding text to video" or "Merge with video or image" -// l:popup_note_wait_window -// r:5.0 -// -#define qtn_vie_note_processing "Processing video" - -// d:Text in progress note -// d:Shown when user has selected cutting function -// l:popup_note_wait_window -// r:5.0 -// -#define qtn_vie_note_cutting "Saving video clip" - -// d:Text in progress note -// d:Shown when user has selected Snapshot function -// l:popup_note_wait_window -// r:5.0 -// -#define qtn_vie_note_saving_snapshot "Saving snapshot to Gallery." - -//============================================================================= -// OPTIONS MENU ITEMS -//============================================================================= - -// d:Command in options menu -// d:Saves the edited image -// d:Re-used ImageEditor string. -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_save "Save" - -// d:Command in options menu -// d:Takes a picture from the video clip (current frame) -// d:and saves it in to the memory -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_snapshot "Take snapshot" - -// d:Command in the Cut Video view options menu -// d:Opens the Remove submenu. -// l:list_single_pane_t1_cp2/opt3 -// r:5.0 -// -#define qtn_vie_options_remove_mark "Reset mark" - -// d:Command in options menu -// d:Removes both start and end marks from cutting timeline, view -// d:returns to initial state. Only available, if both marks have been set. -// l:list_single_popup_submenu_pane_t1 -// r:5.0 -// -#define qtn_vie_options_remove_mark_both "Both marks" - -// d:Command in the Remove submenu -// d:Removes the Out mark -// l:list_single_popup_submenu_pane_t1 -// r:5.0 -// -#define qtn_vie_options_remove_mark_end "End mark" - -// d:Command in the Remove submenu -// d:Removes the In mark -// l:list_single_popup_submenu_pane_t1 -// r:5.0 -// -#define qtn_vie_options_remove_mark_start "Start mark" - -// d:Command in options menu -// d:Inserts end mark into the current position. -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_end_mark "Set end mark" - -// d:Command in options menu -// d:Inserts start mark into the current position. -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_start_mark "Set start mark" - -// d:Command in options menu -// d:Stops the playback and moves playhead position to the beginning. -// d:Re-used Media Player string -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_stop "Stop" - -// d:Command in options menu -// d:Plays the marked section (between start and end marks). -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_play_marked "Play marked" - -// d:Command in options menu -// d:Resumes playback. -// d:Re-used Media Player string -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_resume "Resume" - -// d:Command in options menu -// d:Starts playback. -// d:Re-used Media Player string -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_play "Play" - - -//============================================================================= -// SIMPLE VIDEO EDITOR AIW COMMANDS -//============================================================================= - -// d:Command in the AIW provider's menu -// d:Launches Video editor's "Video sound change" functionality -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_change_sound "Change sound" - -// d:Command in the AIW provider's menu -// d:Launches Video editor's "Add text" functionality -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_add_text "Add text" - -// d:Command in the AIW provider's menu -// d:Launches Video editor's "Merge" functionality -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_merge "Merge" - -// d:Command in the AIW provider's menu -// d:Launches Video editor's "Cut" functionality -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_options_cut "Cut" - -// d:Submenu title in the AIW provider's menu -// d:Opens a submenu -// l:list_single_pane_t1_cp2/opt3 -// r:5.0 -// -#define qtn_vie_options_edit "Edit" - -// d:Command in the AIW provider's Edit submenu -// d:Launches Video editor's "Video sound change" functionality -// l:list_single_popup_submenu_pane_t1 -// r:5.0 -// -#define qtn_vie_options_sub_change_sound "Change sound" - -// d:Command in the AIW provider's Edit submenu -// d:Launches Video editor's "Add text" functionality -// l:list_single_popup_submenu_pane_t1 -// r:5.0 -// -#define qtn_vie_options_sub_add_text "Add text" - -// d:Command in the AIW provider's Edit submenu -// d:Launches Video editor's "Merge" functionality -// l:list_single_popup_submenu_pane_t1 -// r:5.0 -// -#define qtn_vie_options_sub_merge "Merge" - -// d:Command in the AIW provider's Edit submenu -// d:Launches Video editor's "Cut" functionality -// l:list_single_popup_submenu_pane_t1 -// r:5.0 -// -#define qtn_vie_options_sub_cut "Cut" - - -//============================================================================= -// SIMPLE VIDEO EDITOR SPECIFIC SOFTKEYS -//============================================================================= - -// d:Softkey command -// d:Softkey text if in playing state or if -// d:user has moved the playhead with scroll left/right. -// l:control_pane_t1/opt7 -// r:5.0 -// -#define qtn_vie_softkey_start_mark "Start mark" - -// d:Softkey command -// d:Softkey text if in playing state or if -// d:user has moved the playhead with scroll left/right. -// l:control_pane_t1/opt7 -// r:5.0 -// -#define qtn_vie_softkey_end_mark "End mark" - -// d:Softkey command -// d:Right softkey text if in cutting view -// d:Applies video cutting -// l:control_pane_t1/opt7 -// r:5.0 -// -#define qtn_vie_softkey_cut_done "Done" - - -//============================================================================= -// SAVING QUERY -//============================================================================= - -// d:List query heading text. -// d:This list query is used when option "Save" has been selected. -// l:heading_pane_t1 -// r:5.0 -// -#define qtn_vie_query_heading_save "Save video:" - -// d:List query item in saving query. -// d:Overwrites existing file. -// d:Re-used Image Editor string. -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_query_save_replace "Replace original" - -// d:List query item in saving query. -// d:Creates a new file. -// d:Re-used Image Editor string. -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_query_save_new "Save with a new name" - - -//============================================================================= -// CUTTING QUERY -//============================================================================= - -// d:List query heading text. -// d:This list query is used when "Cut" has been selected from options menu -// l:heading_pane_t1 -// r:5.0 -// -#define qtn_vie_query_heading_length "Cutting length:" - -// d:List query item in cutting query. -// d:User can define him/herself cutting start and end marks -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_query_length_manual "User defined" - -// d:List query item in cutting query. -// d:MMS properties define cutting length -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_query_length_mms "Multimedia message" - - -//============================================================================= -// MERGING LIST QUERY -//============================================================================= - -// d:List query heading text. -// d:This list query is used to select one video/image file -// d:from the list of videos/images. -// l:heading_pane_t1 -// r:5.0 -// -#define qtn_vie_query_heading_merge_with "Merge with:" - -// d:Select to list the image files from the Media gallery. -// d:(list query item) -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_query_merge_with_image "Image" - -// d:Select to list the video files from the Media gallery. -// d:(list query item) -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_query_merge_with_video "Video" - -// d:List query heading text. -// d:This list query is used to select where to insert selected image -// l:heading_pane_t1 -// r:5.0 -// -#define qtn_vie_query_heading_add_image_to "Add image:" - -// d:List query heading text. -// d:This list query is used to select where to insert selected video -// l:heading_pane_t1 -// r:5.0 -// -#define qtn_vie_query_heading_add_video_to "Add video:" - -// d:Select if want to insert selected image/video to the beginning. -// d:(list query item) -// d:Used also when adding text to video -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_query_add_text_to_beginning "To the beginning" - -// d:Select if want to insert selected image/video to the end. -// d:(list query item) -// d:Used also when adding text to video -// l:list_single_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_query_add_text_to_end "To the end" - - -//============================================================================= -// OTHER QUERY TEXTS -//============================================================================= - -// d:Confirmation query text -// d:Query is shown when user decides to send a video via MMS and the selected -// d:video exceeds the MMS size limitation -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_query_cut "Video too large to be sent via MMS. Cut video?" - -// d:Query heading text -// d:For the location to insert text in a video (beginning/end?) -// l:heading_pane_t1 -// r:5.0 -// -#define qtn_vie_query_heading_add_text_to "Add text:" - -// d:Query heading text -// d:Shown in the data query for adding text -// l:popup_query_data_window -// r:5.0 -// -#define qtn_vie_query_heading_enter_text "Enter text:" - -// d:Confirmation query text -// d:Shown when user decides to send a video via MMS and the selected video -// d:format is not supported by MMS, -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_query_convert "Format not supported by MMS. Conversion to supported format may affect video quality. Convert and continue sending?" - -// d:Confirmation query text -// d:Shown when user tries to change video sound and selects a sound file, -// d:which is shorter than the selected video clip -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_query_insert_short_audio "Sound clip shorter than the video clip. Remaining part of the video will have the original audio. Change sound anyway?" - -// d:Confirmation query text -// d:Shown when user tries to change video sound and selects a sound file, -// d:which is longer than the selected video clip -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_query_insert_long_audio "Sound clip longer than the video clip. Remaining part of the sound will be cut. Change sound anyway?" - -// d:Confirmation query -// d:When user selects "Exit", and video is modified -// d:user is prompted about saving the changes. -// d:Re-used Image Editor string. -// l:popup_note_window -// r:5.0 -// -#define qtn_vie_query_conf_save_changes "Save changes?" - - -//============================================================================= -// MISCANCELLOUS -//============================================================================= - -// d:Default name for the snapshot file -// l:list_double_large_graphic_pane_t1_cp2 -// r:5.0 -// -#define qtn_vie_default_name_snapshot "Snapshot" - -// End of file - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditor_plat/group/bld.inf --- a/videoeditor_plat/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Includes all the API specific bld.inf files, which -* export files. -* -*/ - - -#include "../video_editor_engine_api/group/bld.inf" \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditor_plat/video_editor_engine_api/group/bld.inf --- a/videoeditor_plat/video_editor_engine_api/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* File that exports the files belonging to -* Video Editor Engine API. -* -*/ - - -#include - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -../inc/VedMovie.h MW_LAYER_PLATFORM_EXPORT_PATH(VedMovie.h) -../inc/VedCommon.h MW_LAYER_PLATFORM_EXPORT_PATH(VedCommon.h) -../inc/VedCommon.inl MW_LAYER_PLATFORM_EXPORT_PATH(VedCommon.inl) -../inc/VedAudioClipInfo.h MW_LAYER_PLATFORM_EXPORT_PATH(VedAudioClipInfo.h) -../inc/VedVideoClipInfo.h MW_LAYER_PLATFORM_EXPORT_PATH(VedVideoClipInfo.h) -../inc/VedVideoClipGenerator.h MW_LAYER_PLATFORM_EXPORT_PATH(VedVideoClipGenerator.h) - -// End of File - - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditor_plat/video_editor_engine_api/inc/VedAudioClipInfo.h --- a/videoeditor_plat/video_editor_engine_api/inc/VedAudioClipInfo.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __VEDAUDIOCLIPINFO_H__ -#define __VEDAUDIOCLIPINFO_H__ - -#include -#include "VedCommon.h" - -/* - * Forward declarations. - */ -class CVedAudioClipInfo; - -/** - * Observer for notifying that audio clip info - * is ready for reading. - * - * @see CVedAudioClipInfo - */ -class MVedAudioClipInfoObserver - { -public: - /** - * Called to notify that audio clip info is ready - * for reading. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown type - * - * @param aInfo audio clip info - * @param aError KErrNone if info is ready - * for reading; one of the system wide - * error codes if reading file failed - */ - virtual void NotifyAudioClipInfoReady(CVedAudioClipInfo& aInfo, - TInt aError) = 0; - }; - - -/** - * Observer for audio clip visualization. - * - * @see CVedAudioClipInfo - */ -class MVedAudioClipVisualizationObserver - { -public: - - /** - * Called to notify that audio clip visualization has been started. - * - * @param aInfo audio clip info - */ - virtual void NotifyAudioClipVisualizationStarted(const CVedAudioClipInfo& aInfo) = 0; - - /** - * Called to inform about the current progress of the audio clip visualization. - * - * @param aInfo audio clip info - * @param aPercentage percentage of the operation completed, must be - * in range 0..100 - */ - virtual void NotifyAudioClipVisualizationProgressed(const CVedAudioClipInfo& aInfo, - TInt aPercentage) = 0; - - /** - * Called to notify that audio clip visualization has been completed. - * Note that if the visualization was successfully completed, the ownership - * of the visualization array is passed to the observer and the observer is - * responsible for freeing the array). - * - * @param aInfo audio clip info - * @param aError KErrNone if visualization was - * completed successfully; one of the system wide - * error codes if generating visualization failed - * @param aVisualization pointer to the array containing the visualization values; - * note that the ownership of the array is passed to the - * observer (i.e., the observer is responsible for freeing - * the array); or 0, if generating the visualization failed - * @param aResolution resolution of the visualization (i.e., the number of values - * in the visualization array); or 0, if generating the - * visualization failed - */ - virtual void NotifyAudioClipVisualizationCompleted(const CVedAudioClipInfo& aInfo, - TInt aError, TInt8* aVisualization, - TInt aResolution) = 0; - }; - - -/** - * Utility class for getting information about audio clip files. - * - */ -class CVedAudioClipInfo : public CBase - { -public: - - /* Constructors & destructor. */ - - /** - * Constructs a new CVedAudioClipInfo object to get information - * about the specified audio clip file. The specified observer - * is notified when info is ready for reading. This method - * may leave if no resources are available to construct - * a new object. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileName name of audio clip file - * @param aObserver observer to notify when info is ready for reading - * - * @return pointer to a new CVedAudioClipInfo instance - */ - IMPORT_C static CVedAudioClipInfo* NewL(const TDesC& aFileName, - MVedAudioClipInfoObserver& aObserver); - - /** - * Constructs a new CVedAudioClipInfo object to get information - * about the specified audio clip file. The constructed object - * is left in the cleanup stack. The specified observer - * is notified when info is ready for reading. This method - * may leave if no resources are available to construct a new - * object. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileName name of audio clip file - * @param aObserver observer to notify when info is ready for reading - * - * @return pointer to a new CVedAudioClipInfo instance - */ - IMPORT_C static CVedAudioClipInfo* NewLC(const TDesC& aFileName, - MVedAudioClipInfoObserver& aObserver); - - /* Property methods. */ - - /** - * Returns the file name of the clip. Panics if info - * is not yet ready for reading. - * - * @return file name - */ - virtual TPtrC FileName() const = 0; - - /** - * Returns the audio type of the clip. Panics if info - * is not yet ready for reading. - * - * @return audio type - */ - virtual TVedAudioType Type() const = 0; - - /** - * Returns the duration of the clip. Panics if info - * is not yet ready for reading. - * - * @return duration in microseconds - */ - virtual TTimeIntervalMicroSeconds Duration() const = 0; - - /** - * Returns the channel mode of the audio if applicable. - * - * @return channel mode - */ - virtual TVedAudioChannelMode ChannelMode() const = 0; - - /** - * Returns the audio format of the clip. Panics if info - * is not yet ready for reading. - * - * @return audio format of the clip - */ - virtual TVedAudioFormat Format() const = 0; - - /** - * Returns the sampling rate in hertz. - * - * @return sampling rate - */ - virtual TInt SamplingRate() const = 0; - - /** - * Returns the bitrate mode. - * - * @return bitrate mode - */ - virtual TVedBitrateMode BitrateMode() const = 0; - - /** - * Returns the bitrate. - * - * @return bitrate in bits per second - */ - virtual TInt Bitrate() const = 0; - - /* Visualization methods. */ - - /** - * Generates a visualization of the audio clip. The visualization consists - * of an array of values with the specified resolution. This method is - * asynchronous. The visualization is generated in background and the observer - * is notified when the visualization is complete. This method panics if info - * is not yet ready for reading or the resolution is illegal. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aObserver observer to be notified when the visualization is completed - * @param aResolution resolution of the visualization (i.e., the number of values - * in the visualization array) - * @param aPriority priority of the visualization - */ - virtual void GetVisualizationL(MVedAudioClipVisualizationObserver& aObserver, - TInt aResolution, TInt aPriority) = 0; - - /** - * Cancels visualization generation. If no visualization is currently being - * generated, the function does nothing. - */ - virtual void CancelVisualizationL() = 0; - - /** - * Constructs a new CVedAudioClipInfo object to get information - * about the specified audio clip file. The specified observer - * is notified when info is ready for reading. This method - * may leave if no resources are available to construct - * a new object. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileHandle handle of audio clip file - * @param aObserver observer to notify when info is ready for reading - * - * @return pointer to a new CVedAudioClipInfo instance - */ - IMPORT_C static CVedAudioClipInfo* NewL(RFile* aFileHandle, - MVedAudioClipInfoObserver& aObserver); - - /** - * Constructs a new CVedAudioClipInfo object to get information - * about the specified audio clip file. The constructed object - * is left in the cleanup stack. The specified observer - * is notified when info is ready for reading. This method - * may leave if no resources are available to construct a new - * object. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileHandle handle of audio clip file - * @param aObserver observer to notify when info is ready for reading - * - * @return pointer to a new CVedAudioClipInfo instance - */ - IMPORT_C static CVedAudioClipInfo* NewLC(RFile* aFileHandle, - MVedAudioClipInfoObserver& aObserver); - - /** - * Returns the file handle of the clip. Panics if there is no file - * associated with this clip or info is not yet ready for reading. - * - * @return file name of the clip - */ - virtual RFile* FileHandle() const = 0; - - - }; - -#endif // __VEDAUDIOCLIPINFO_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditor_plat/video_editor_engine_api/inc/VedCommon.h --- a/videoeditor_plat/video_editor_engine_api/inc/VedCommon.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,349 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef __VEDCOMMON_H__ -#define __VEDCOMMON_H__ - -#include - - -/** - * Constants for video clip speed settings. The speed is given by % x10, i.e. 1000 means 100 %. - */ -const TInt KVedNormalSpeed(1000); -const TInt KVedMaxSpeed(1000); -const TInt KVedMinSpeed(1); - - -/** - * Enumeration for video clip classes. - */ -enum TVedVideoClipClass - { - EVedVideoClipClassFile = 15001, - EVedVideoClipClassGenerated - }; - - -/** - * Enumeration for bitrate modes. - */ -enum TVedBitrateMode - { - EVedBitrateModeUnrecognized = 18001, - EVedBitrateModeConstant, - EVedBitrateModeVariable, - EVedBitrateModeLast // should always be the last one - }; - -/** - * Enumeration for video bitstream modes. - */ -enum TVedVideoBitstreamMode - { - EVedVideoBitstreamModeUnknown = 0, /* unrecognized mode; outside of H.263 Profile 0 Level 10, or MPEG-4 Visual Simple Profile */ - EVedVideoBitstreamModeH263, /* H.263 Simple Profile (Profile 0, Level 10) */ - EVedVideoBitstreamModeMPEG4ShortHeader, /* MPEG-4 Visual Simple Profile - Short Header */ - EVedVideoBitstreamModeMPEG4Regular, /* MPEG-4 Visual Simple Profile - Regular */ - EVedVideoBitstreamModeMPEG4Resyn, /* MPEG-4 Visual Simple Profile - Regular with Resynchronization Markers */ - EVedVideoBitstreamModeMPEG4DP, /* MPEG-4 Visual Simple Profile - Data Partitioned */ - EVedVideoBitstreamModeMPEG4DP_RVLC, /* MPEG-4 Visual Simple Profile - Data Partitioned with Reversible VLCs */ - EVedVideoBitstreamModeMPEG4Resyn_DP, /* MPEG-4 Visual Simple Profile - Data Partitioned with Resynchronization Markers */ - EVedVideoBitstreamModeMPEG4Resyn_DP_RVLC, /* MPEG-4 Visual Simple Profile - Data Partitioned with Reversible VLCs & Resynchronization Markers */ - EVedVideoBitstreamModeAVC - }; - - - -/* Video format of bitstream - used everywhere */ -enum TVedVideoType - { - EVedVideoTypeUnrecognized = 13001, /* should always be the first one */ - EVedVideoTypeNoVideo, /* video is not present */ - EVedVideoTypeH263Profile0Level10, /* H.263 Simple Profile (Profile 0, Level 10) */ - EVedVideoTypeH263Profile0Level45, /* H.263 Simple Profile (Profile 0, Level 45) */ - EVedVideoTypeMPEG4SimpleProfile, /* MPEG-4 Visual Simple Profile (any mode) */ - EVedVideoTypeAVCBaselineProfile, /* AVC Baseline Profile */ - EVedVideoTypeLast /* should always be the last one */ - }; - -/** - * Enumeration for video formats. - */ -enum TVedVideoFormat - { - EVedVideoFormatUnrecognized = 11001, // should always be the first one - EVedVideoFormat3GPP, - EVedVideoFormatMP4, - EVedVideoFormatLast // should always be the last one - }; - -/** - * Enumeration for audio formats. - */ -enum TVedAudioFormat - { - EVedAudioFormatUnrecognized = 16001, // should always be the first one - EVedAudioFormat3GPP, - EVedAudioFormatMP4, - EVedAudioFormatAMR, - EVedAudioFormatAMRWB, - EVedAudioFormatMP3, - EVedAudioFormatAAC_ADIF, - EVedAudioFormatAAC_ADTS, - EVedAudioFormatWAV, - EVedAudioFormatLast // should always be the last one - }; - - -/** - * Enumeration for audio types (that is, codecs). - */ -enum TVedAudioType - { - EVedAudioTypeUnrecognized = 14001, // should always be the first one - EVedAudioTypeNoAudio, - EVedAudioTypeAMR, - EVedAudioTypeAMRWB, - EVedAudioTypeMP3, - EVedAudioTypeAAC_LC, - EVedAudioTypeAAC_LTP, - EVedAudioTypeWAV, - EVedAudioTypeLast // should always be the last one - }; - -/** - * Enumeration for audio channel modes. - */ -enum TVedAudioChannelMode - { - EVedAudioChannelModeUnrecognized = 17001, - EVedAudioChannelModeStereo, - EVedAudioChannelModeDualChannel, - EVedAudioChannelModeSingleChannel - }; - -/** - * Output parameter class - */ - -class TVedOutputParameters - { - public: - // default constructor; initializes optional parameters to values which mean that editor can decide the value - inline TVedOutputParameters() - : iVideoType(EVedVideoTypeH263Profile0Level10), iVideoResolution(TSize(0,0)), iVideoBitrate(0), iVideoFrameRate(0), - iAudioType(EVedAudioTypeAMR), iAudioBitrate(0), iAudioChannelMode(EVedAudioChannelModeSingleChannel), iAudioSamplingRate(0), - iSyncIntervalInPicture(0), iSegmentSizeInBytes(0) - {} - - public: - - // video codec - TVedVideoType iVideoType; - // target resolution, 0 = no preference (use from input) - TSize iVideoResolution; - // target video bitrate, 0 = no preference - TInt iVideoBitrate; - // target video framerate, 0 = no preference - TReal iVideoFrameRate; - - // audio codec - TVedAudioType iAudioType; - // target audio bitrate, 0 = no preference - TInt iAudioBitrate; - // audio channel mode - TVedAudioChannelMode iAudioChannelMode; - // audio sampling rate, 0 = no preference - TInt iAudioSamplingRate; - - // Segment interval in picture. In H.263 baseline this means number of non-empty GOB headers (1=every GOB has a header), - // Default is 0 == no segments inside picture - // Coding standard & used profile etc. limit the value. - TInt iSyncIntervalInPicture; - - // Target size of each coded video segment. Valid for H.264 and MPEG-4 - // Default is 0 == no segments inside picture - TInt iSegmentSizeInBytes; - - }; - - -/** - * Enumeration for start transition effects. - */ -enum TVedStartTransitionEffect - { - EVedStartTransitionEffectNone = 21001, // should always be the first one - EVedStartTransitionEffectFadeFromBlack, - EVedStartTransitionEffectFadeFromWhite, - EVedStartTransitionEffectLast // should always be the last one - }; - - -/** - * Enumeration for middle transition effects. - */ -enum TVedMiddleTransitionEffect - { - EVedMiddleTransitionEffectNone = 22001, // should always be the first one - EVedMiddleTransitionEffectDipToBlack, - EVedMiddleTransitionEffectDipToWhite, - EVedMiddleTransitionEffectCrossfade, - EVedMiddleTransitionEffectWipeLeftToRight, - EVedMiddleTransitionEffectWipeRightToLeft, - EVedMiddleTransitionEffectWipeTopToBottom, - EVedMiddleTransitionEffectWipeBottomToTop, - EVedMiddleTransitionEffectLast // should always be the last one - }; - - -/** - * Enumeration for end transition effects. - */ -enum TVedEndTransitionEffect - { - EVedEndTransitionEffectNone = 23001, // should always be the first one - EVedEndTransitionEffectFadeToBlack, - EVedEndTransitionEffectFadeToWhite, - EVedEndTransitionEffectLast // should always be the last one - }; - - -/** - * Enumeration for color effects. - */ -enum TVedColorEffect - { - EVedColorEffectNone = 31001, // should always be the first one - EVedColorEffectBlackAndWhite, - EVedColorEffectToning, - EVedColorEffectLast // should always be the last one - }; - - -/** - * Class for storing dynamic level marks. - */ -class TVedDynamicLevelMark - { -public: - /** Mark time. */ - TTimeIntervalMicroSeconds iTime; - - /** - * Dynamic level (-63.5 - +12.7) in dB:s; one step represents +0.1 or -0.5 dB => values are -127...+127 - */ - TInt8 iLevel; - - /** - * Constructs a new dynamic level mark. - * - * @param aTime time for the mark - * @param aLevel dynamic level (-63.5 ... +12.7) in dB:s one step = +0.1 or -0.5 dB => values can be -127...+127 - */ - inline TVedDynamicLevelMark(TTimeIntervalMicroSeconds aTime, TInt aLevel); - - /** - * Constructs a new dynamic level mark from existing instance. - * - * @param aMark dynamic level mark to copy - */ - inline TVedDynamicLevelMark(const TVedDynamicLevelMark& aMark); - }; - - -/** - * Transcode factor. - */ -struct TVedTranscodeFactor - { - TInt iTRes; - TVedVideoBitstreamMode iStreamType; - }; - - -/** - * Enumerates video editor engine panic codes and - * provides a static Panic() function. - * - */ -class TVedPanic - { -public: - enum TVedPanicCodes - { - EInternal = 1, // internal error (that is, a in the video editor engine) - EDeprecated, // deprecated class or method - EVideoClipInfoNotReady, - EVideoClipInfoIllegalVideoFrameIndex, - EVideoClipInfoIllegalVideoFrameTime, - EVideoClipInfoFrameOperationAlreadyRunning, - EVideoClipInfoIllegalFrameResolution, - EVideoClipInfoNoFileAssociated, - EVideoClipInfoNoGeneratorAssociated, - EAudioClipInfoNotReady, //10 - EMovieEmpty, - EMovieAddOperationAlreadyRunning, - EMovieIllegalStartTransitionEffect, - EMovieIllegalMiddleTransitionEffect, - EMovieIllegalEndTransitionEffect, - EMovieProcessingOperationAlreadyRunning, - EMovieObserverAlreadyRegistered, - EMovieObserverNotRegistered, - EMovieIllegalQuality, - EVideoClipIllegalIndex, //20 - EVideoClipIllegalSpeed, - EVideoClipIllegalColorEffect, - EVideoClipIllegalCutInTime, - EVideoClipIllegalCutOutTime, - EVideoClipNoFileAssociated, - EAudioClipIllegalStartTime, - EAudioClipIllegalCutInTime, - EAudioClipIllegalCutOutTime, - EVideoClipGeneratorNotInserted, - EVideoClipGeneratorNotReady,//30 - EVideoClipGeneratorAlreadyInserted, - EVideoClipGeneratorIllegalVideoFrameIndex, - EVideoClipGeneratorIllegalDuration, - EVideoClipGeneratorIllegalFrameResolution, - EVideoClipGeneratorIllegalVideoFrameTime, - EImageClipGeneratorIllegalMaxResolution, - EImageClipGeneratorNotReady, - EImageClipGeneratorFrameOperationAlreadyRunning, - ETitleClipGeneratorIllegalMaxResolution, - ETitleClipGeneratorIllegalMaxFramerate,//40 - ETitleClipGeneratorFrameOperationAlreadyRunning, - EIllegalDynamicLevelMark, - EIllegalDynamicLevelMarkIndex, - EVideoClipGeneratorNotOveray, - EAnimationClipGeneratorNotReady - }; - -public: - inline static void Panic(TInt aPanic); - }; - - -#include "VedCommon.inl" - -#endif // __VEDCOMMON_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditor_plat/video_editor_engine_api/inc/VedCommon.inl --- a/videoeditor_plat/video_editor_engine_api/inc/VedCommon.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __VEDCOMMON_INL__ -#define __VEDCOMMON_INL__ - - -inline void TVedPanic::Panic(TInt aPanic) - { - _LIT(KVedPanicCategory, "VIDEO EDITOR ENG"); - - User::Panic(KVedPanicCategory, aPanic); - } - -inline TVedDynamicLevelMark::TVedDynamicLevelMark(TTimeIntervalMicroSeconds aTime, TInt aLevel) - { - iTime = aTime; - if ( aLevel < -127 ) // level is TInt8 with 0.5 dB steps - { - iLevel = -127; - } - else if (aLevel > 127 ) - { - iLevel = 127; - } - else - { - iLevel = TInt8(aLevel); - } - } - -inline TVedDynamicLevelMark::TVedDynamicLevelMark(const TVedDynamicLevelMark& aMark) - { - iTime = aMark.iTime; - iLevel = aMark.iLevel; - } - -#endif //__VEDCOMMON_INL__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditor_plat/video_editor_engine_api/inc/VedMovie.h --- a/videoeditor_plat/video_editor_engine_api/inc/VedMovie.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1308 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef __VEDMOVIE_H__ -#define __VEDMOVIE_H__ - -/* - * Constant definitions. - */ -#define KVedAudioClipOriginalDuration TTimeIntervalMicroSeconds(-1) - -const TInt KVedClipIndexAll(-1); - -#include -#include -#include "VedVideoClipInfo.h" -#include "VedAudioClipInfo.h" - -class CVedMovie; -class TVedDynamicLevelMark; - -/** - * Observer for movie events. - *

- * Note that every change operation that is made to a movie or the clips it consists of - * results in a maximum of one notification method called (that is, more than one - * notification method is never called as a result of a single change). For example, - * changing the index of a clip results in the NotifyVideoClipIndicesChanged() - * method being called once. The NotifyVideoClipTimingsChanged() method is not - * called even if the timings of several clips may have changed as a result. See the - * descriptions of the notification methods for more detailed information. - * - * @see CVedMovie - */ -class MVedMovieObserver - { -public: - - /** - * Called to notify that a new video clip has been successfully - * added to the movie. Note that the indices and the start and end times - * of the video clips after the new clip have also changed as a result. - * Note that the transitions may also have changed. - * - * @param aMovie movie - * @param aIndex index of video clip in movie - */ - virtual void NotifyVideoClipAdded(CVedMovie& aMovie, TInt aIndex) = 0; - - /** - * Called to notify that adding a new video clip to the movie has failed. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - KErrNotSupported if the format of the file is recognized but - * adding it to the movie is not supported (e.g., it is of different resolution - * or format than the other clips) - * - * @param aMovie movie - * @param aError one of the system wide error codes - */ - virtual void NotifyVideoClipAddingFailed(CVedMovie& aMovie, TInt aError) = 0; - - /** - * Called to notify that a video clip has been removed from the movie. - * Note that the indices and the start and end times of the video clips after - * the removed clip have also changed as a result. Note that the - * transitions may also have changed. - * - * @param aMovie movie - * @param aIndex index of the removed video clip - */ - virtual void NotifyVideoClipRemoved(CVedMovie& aMovie, TInt aIndex) = 0; - - /** - * Called to notify that a video clip has moved (that is, its index and - * start and end times have changed). Note that the indices and the start and - * end times of the clips between the old and new indices have also changed - * as a result. Note that the transitions may also have changed. - * - * @param aMovie movie - * @param aOldIndex old index of the moved clip - * @param aNewIndex new index of the moved clip - */ - virtual void NotifyVideoClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, - TInt aNewIndex) = 0; - - /** - * Called to notify that the timings (that is, the cut in or cut out time or - * the speed and consequently the end time, edited duration, and possibly audio - * settings) of a video clip have changed (but the index of the clip has - * not changed). Note that the start and end times of the video clips - * after the changed clip have also changed. - * - * @param aMovie movie - * @param aClip changed video clip - */ - virtual void NotifyVideoClipTimingsChanged(CVedMovie& aMovie, - TInt aIndex) = 0; - - /** - * Called to notify that the color effect or a color tone of the existing effect - * of a video clip has changed. - * - * @param aMovie movie - * @param aClip changed video clip - */ - virtual void NotifyVideoClipColorEffectChanged(CVedMovie& aMovie, - TInt aIndex) = 0; - - /** - * Called to notify that the audio settings of a video clip have changed. - * - * @param aMovie movie - * @param aClip changed video clip - */ - virtual void NotifyVideoClipAudioSettingsChanged(CVedMovie& aMovie, - TInt aIndex) = 0; - - /** - * Called to notify that some generator-specific settings of - * a generated video clip have changed. - * - * @param aMovie movie - * @param aClip changed video clip - */ - virtual void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& aMovie, - TInt aIndex) = 0; - - /** - * Called to notify that the descriptive name of a clip has changed. - * - * @param aMovie movie - * @param aIndex changed video clip index - */ - virtual void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie, - TInt aIndex) = 0; - - /** - * Called to notify that the start transition effect of the movie - * has changed (but no other changes have occurred). - * - * @param aMovie movie - */ - virtual void NotifyStartTransitionEffectChanged(CVedMovie& aMovie) = 0; - - /** - * Called to notify that a middle transition effect has changed - * (but no other changes have occurred). - * - * @param aMovie movie - * @param aIndex index of the changed middle transition effect - */ - virtual void NotifyMiddleTransitionEffectChanged(CVedMovie& aMovie, - TInt aIndex) = 0; - - /** - * Called to notify that the end transition effect of the movie - * has changed (but no other changes have occurred). - * - * @param aMovie movie - */ - virtual void NotifyEndTransitionEffectChanged(CVedMovie& aMovie) = 0; - - /** - * Called to notify that a new audio clip has been successfully - * added to the movie. Note that the indices of the audio clips - * starting after the new clip have also changed as a result. - * - * @param aMovie movie - * @param aClip new audio clip - */ - virtual void NotifyAudioClipAdded(CVedMovie& aMovie, TInt aIndex) = 0; - - /** - * Called to notify that adding a new audio clip to the movie has failed. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - * @param aMovie movie - * @param aError one of the system wide error codes - */ - virtual void NotifyAudioClipAddingFailed(CVedMovie& aMovie, TInt aError) = 0; - - /** - * Called to notify that an audio clip has been removed from the movie. - * Note that the indices of the audio clips starting after the removed - * clip have also changed as a result. - * - * @param aMovie movie - * @param aIndex index of the removed audio clip - */ - virtual void NotifyAudioClipRemoved(CVedMovie& aMovie, TInt aIndex) = 0; - - /** - * Called to notify that an audio clip has moved (that is, its - * index has changed). This may happen when the start time of the audio - * clip is changed. Note that the indices of the clips between the old and - * new indices have also changed as a result. - * - * @param aMovie movie - * @param aOldIndex old index of the moved clip - * @param aNewIndex new index of the moved clip - */ - virtual void NotifyAudioClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, - TInt aNewIndex) = 0; - - /** - * Called to notify that the timings (for example, the start time or - * the duration) of an audio clip have changed (but the index of the - * clip has not changed as a result). - * - * @param aMovie movie - * @param aClip changed audio clip - */ - virtual void NotifyAudioClipTimingsChanged(CVedMovie& aMovie, - TInt aIndex) = 0; - - /** - * Called to notify that the quality setting of the movie has been - * changed. - * - * @param aMovie movie - */ - virtual void NotifyMovieQualityChanged(CVedMovie& aMovie) = 0; - - /** - * Called to notify that the movie has been reseted. - * - * @param aMovie movie - */ - virtual void NotifyMovieReseted(CVedMovie& aMovie) = 0; - - /** - * Called to notify that the output parameters have been changed - * - * @param aMovie movie - */ - virtual void NotifyMovieOutputParametersChanged(CVedMovie& aMovie) = 0; - - /** - * Called to notify that a dynamic level mark has been inserted - * to an audio clip. - * - * @param aMovie movie - * @param aClipIndex audio clip index - * @param aMarkIndex index of the inserted level mark - */ - virtual void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex) = 0; - - /** - * Called to notify that a dynamic level mark has been inserted - * to an audio clip. - * - * @param aMovie movie - * @param aClipIndex audio clip index - * @param aMarkIndex index of the inserted level mark - */ - virtual void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex) = 0; - - /** - * Called to notify that a dynamic level mark has been inserted - * to an audio clip. - * - * @param aMovie movie - * @param aClipIndex audio clip index - * @param aMarkIndex index of the inserted level mark - */ - virtual void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex) = 0; - - /** - * Called to notify that a dynamic level mark has been inserted - * to an audio clip. - * - * @param aMovie movie - * @param aClipIndex audio clip index - * @param aMarkIndex index of the inserted level mark - */ - virtual void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie, - TInt aClipIndex, - TInt aMarkIndex) = 0; - }; - - -/** - * Observer for movie processing operations. - * - * - * @see CVedMovie - */ -class MVedMovieProcessingObserver - { -public: - /** - * Called to notify that a new movie processing operation has been started. - * - * @param aMovie movie - */ - virtual void NotifyMovieProcessingStartedL(CVedMovie& aMovie) = 0; - - /** - * Called to inform about the current progress of the movie processing operation. - * - * @param aMovie movie - * @param aPercentage percentage of the operation completed, must be - * in range 0..100 - */ - virtual void NotifyMovieProcessingProgressed(CVedMovie& aMovie, TInt aPercentage) = 0; - - /** - * Called to notify that the movie processing operation has been completed. - * - * @param aMovie movie - * @param aError error code why the operation was completed. - * KErrNone if the operation was completed - * successfully. - */ - virtual void NotifyMovieProcessingCompleted(CVedMovie& aMovie, TInt aError) = 0; - }; - - -/** - * Video movie, which consists of zero or more video clips and zero or more audio clips. - * - * @see CVedVideoClip - * @see CVedAudioClip - */ -class CVedMovie : public CBase - { -public: - - /** - * Enumeration for movie quality settings. - */ - enum TVedMovieQuality - { - EQualityAutomatic = 0, - EQualityMMSInteroperability, - EQualityResolutionCIF, // Obsolete, please use Medium/High instead - EQualityResolutionQCIF, // Obsolete, please use Medium/High instead - EQualityResolutionMedium, - EQualityResolutionHigh, - EQualityLast // this should always be the last - }; - - -public: - - /* Constructors & destructor. */ - - /** - * Constructs a new empty CVedMovie object. May leave if no resources are available. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFs file server session to use to lock the video and audio - * clip files of the new movie; or NULL to not to lock the files - * - * @return pointer to a new CVedMovie instance - */ - IMPORT_C static CVedMovie* NewL(RFs* aFs); - - /** - * Constructs a new empty CVedMovie object and leaves the object in the cleanup stack. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFs file server session to use to lock the video and audio - * clip files of the new movie; or NULL to not to lock the files - * - * @return pointer to a new CVedMovie instance - */ - IMPORT_C static CVedMovie* NewLC(RFs* aFs); - - /* Property methods. */ - - /** - * Returns the quality setting of this movie. - * - * @return quality setting of this movie - */ - virtual TVedMovieQuality Quality() const = 0; - - /** - * Sets the quality setting of this movie. - * - * @param aQuality quality setting - */ - virtual void SetQuality(TVedMovieQuality aQuality) = 0; - - /** - * Returns the video format of this movie. - * - * @return video format of this movie - */ - virtual TVedVideoFormat Format() const = 0; - - /** - * Returns the video type of this movie. - * - * @return video type of this movie - */ - virtual TVedVideoType VideoType() const = 0; - - /** - * Returns the resolution of this movie. Panics with - * TVedPanic::EMovieEmpty if there are no clips - * in the movie. - * - * @return resolution of the movie - */ - virtual TSize Resolution() const = 0; - - /** - * Returns the recommended maximum framerate of this movie.. - *

- * Note that the returned maximum framerate is a recommendation, - * not a guarantee. For example, the video clip generators inserted - * in this movie should not generate frames at higher framerates - * than the recommendation. The movie may, however, exceed this - * framerate (for example, if the framerates of some of the video - * clips are higher than the recommendation and it is not possible - * to drop the framerate). - * - * @return maximum framerate in frames per second - */ - virtual TInt MaximumFramerate() const = 0; - - /** - * Returns the audio type of the movie audio track. - * - * @return audio type of the movie audio track - */ - virtual TVedAudioType AudioType() const = 0; - - /** - * Returns the audio sampling rate of the movie audio track. - * - * @return audio sampling rate of the movie audio track. - */ - virtual TInt AudioSamplingRate() const = 0; - - /** - * Returns the audio channel mode of the movie audio track. - * - * @return audio channel mode of the movie audio track. - */ - virtual TVedAudioChannelMode AudioChannelMode() const = 0; - - /** - * Returns the total duration of this movie. - * - * @return duration in microseconds - */ - virtual TTimeIntervalMicroSeconds Duration() const = 0; - - /** - * Returns an estimate of the total size of this movie. - * - * @return size estimate in bytes - */ - virtual TInt GetSizeEstimateL() const = 0; - - /** - * Estimates end cutpoint with given target size and start cutpoint for current movie. - * - * @param aTargetSize Target filesize for section indicated by aStartTime and aEndTime. - * @param aStartTime Start time for first frame included in cutted section. - * @param aEndTime On return contains estimated end time for given target size and start cutpoint for current movie.. - */ - virtual void GetDurationEstimateL(TInt aTargetSize, TTimeIntervalMicroSeconds aStartTime, TTimeIntervalMicroSeconds& aEndTime) = 0; - - /** - * Returns whether movie properties meet MMS compatibility - * - * @return ETrue if MMS compatible, else EFalse - */ - virtual TBool IsMovieMMSCompatible() const = 0; - - /* Video clip management methods. */ - - /** - * Returns the number of video clips in this movie. - * - * @return number of video clips - */ - virtual TInt VideoClipCount() const = 0; - - /** - * Inserts a video clip from the specified file to the specified index - * in this movie. The observers are notified when the clip has been added - * or adding clip has failed. Panics with EMovieAddOperationAlreadyRunning - * if another add video or audio clip operation is already running. - * Panics with code USER-130 if the clip index is invalid. - * The file will be opened in EFileShareReadersOnly mode by default, - * and the same mode should be used by the client too if it need to open - * the file at the same time. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileName file name of the clip to add - * @param aIndex index the clip should be inserted at - */ - virtual void InsertVideoClipL(const TDesC& aFileName, TInt aIndex) = 0; - - /** - * Inserts a video clip generated by the specified generator to the - * specified index in this movie. The observers are notified when the clip - * has been added or adding clip has failed. Note that a video clip - * generator can be inserted to a movie only once. Panics with - * EVideoClipGeneratorAlreadyInserted if the generator has - * already been inserted to a movie. Panics with - * EMovieAddOperationAlreadyRunning if another add video - * or audio clip operation is already running. Panics with code - * USER-130 if the clip index is invalid. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aGenerator generator to add - * @param aIsOwnedByVideoClip ETrue, if this movie is responsible - * for deleting the generator when the clip - * is removed from this movie; EFalse, - * otherwise - * @param aIndex index the clip should be inserted at - */ - virtual void InsertVideoClipL(CVedVideoClipGenerator& aGenerator, TBool aIsOwnedByVideoClip, - TInt aIndex) = 0; - - /** - * Removes the video clip at the specified index from this movie. - * Panics with code USER-130 if the clip index is invalid. - * - * @param aIndex index of the clip to be removed - */ - virtual void RemoveVideoClip(TInt aIndex) = 0; - - - /* Transition effect management methods. */ - - /** - * Returns the start transition effect of this movie. Panics with - * TVedPanic::EMovieEmpty if there are no video clips - * in the movie. - * - * @return start transition effect - */ - virtual TVedStartTransitionEffect StartTransitionEffect() const = 0; - - /** - * Sets the start transition effect of this movie. Panics with - * TVedPanic::EMovieEmpty if there are no video clips - * in the movie. - * - * @param aEffect start transition effect - */ - virtual void SetStartTransitionEffect(TVedStartTransitionEffect aEffect) = 0; - - /** - * Returns the number of middle transition effects in this movie. - * Note that this is the same as the number of video clips minus one. - * - * @return number of middle transition effects - */ - virtual TInt MiddleTransitionEffectCount() const = 0; - - /** - * Returns the middle transition effect at the specified index. - * Panics with code USER-130 if the index is invalid. - * - * @param aIndex index - * - * @return middle transition effect at the specified index - */ - virtual TVedMiddleTransitionEffect MiddleTransitionEffect(TInt aIndex) const = 0; - - /** - * Sets the middle transition effect at the specified index. - * Panics with code USER-130 if the index is invalid. - * - * @param aEffect middle transition effect - * @param aIndex index - */ - virtual void SetMiddleTransitionEffect(TVedMiddleTransitionEffect aEffect, TInt aIndex) = 0; - - /** - * Returns the end transition effect of this movie. Panics with - * TVedPanic::EMovieEmpty if there are no video clips - * in the movie. - * - * @return end transition effect - */ - virtual TVedEndTransitionEffect EndTransitionEffect() const = 0; - - /** - * Sets the end transition effect of this movie. Panics with - * TVedPanic::EMovieEmpty if there are no video clips - * in the movie. - * - * @param aEffect end transition effect - */ - virtual void SetEndTransitionEffect(TVedEndTransitionEffect aEffect) = 0; - - - /* Audio clip management methods. */ - - /** - * Returns the number of audio clips in this movie. - * - * @return number of audio clips - */ - virtual TInt AudioClipCount() const = 0; - - /** - * Adds the specified audio clip to this movie. The observers are notified - * when the clip has been added or adding clip has failed. Panics with - * EMovieAddOperationAlreadyRunning if another add video or - * audio clip operation is already running. - * The file will be opened in EFileShareReadersOnly mode by default, - * and the same mode should be used by the client too if it need to open - * the file at the same time. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileName file name of the clip to add - * @param aStartTime start time of the clip in movie timebase - * @param aCutInTime cut in time of the clip - * @param aCutOutTime cut out time of the clip; or - * KVedAudioClipOriginalDuration to specify - * that the original duration of the clip should be used - */ - virtual void AddAudioClipL(const TDesC& aFileName, - TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds aCutInTime = TTimeIntervalMicroSeconds(0), - TTimeIntervalMicroSeconds aCutOutTime = KVedAudioClipOriginalDuration) = 0; - - /** - * Removes the audio clip at the specified index from this movie. - * Panics with code USER-130 if the clip index is invalid. - * - * @param aIndex index of the clip to be removed - */ - virtual void RemoveAudioClip(TInt aIndex) = 0; - - - /* Whole movie management methods. */ - - /** - * Removes all video and audio clips and clears all transitions. - */ - virtual void Reset() = 0; - - - /* Processing methods. */ - - /** - * Starts a video processing operation. This method is asynchronous and - * returns immediately. The processing will happen in the background and - * the observer will be notified about the progress of the operation. - * Processed data is written into the specified file. Panics with - * TVedPanic::EMovieEmpty if there are no clips - * in the movie. Note that calling ProcessL may cause - * changes in the maximum frame rates of generated clips. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrAccessDenied if the file access is denied - * - KErrDiskFull if the disk is full - * - KErrWrite if not all data could be written - * - KErrBadName if the filename is bad - * - KErrDirFull if the directory is full - * - * @param aObserver observer to be notified of the processing status - * @param aFileName name of the file to be written - */ - virtual void ProcessL(const TDesC& aFileName, - MVedMovieProcessingObserver& aObserver) = 0; - - /** - * Cancels the current video processing operation. If there is no - * operation in progress, the function does nothing. - */ - virtual void CancelProcessing() = 0; - - - /* Observer methods. */ - - /** - * Registers a movie observer. Panics with panic code - * EMovieObserverAlreadyRegistered if the movie observer is - * already registered. - * - * @param aObserver observer that will receive the events - */ - virtual void RegisterMovieObserverL(MVedMovieObserver* aObserver) = 0; - - /** - * Unregisters a movie observer. - * - * @param aObserver observer to be unregistered - */ - virtual void UnregisterMovieObserver(MVedMovieObserver* aObserver) = 0; - - /* Video Clip Methods */ - /** - * Returns a video clip info object to get detailed information about - * the original video clip. Note that the specified editing operations - * (for example, cutting or muting audio) do not - * affect the values returned by the info object. - * - * @param aIndex index of video clip in movie - * @return pointer to a video clip info instance - */ - virtual CVedVideoClipInfo* VideoClipInfo(TInt aIndex) const = 0; - - /** - * Returns whether this video clip with the specified editing operations - * applied (for example, changing speed or muting) has an audio track or not. - * - * @param aIndex index of video clip in movie - * @return ETrue if clip has an audio track; - * EFalse otherwise - */ - virtual TBool VideoClipEditedHasAudio(TInt aIndex) const = 0; - - /** - * Sets the index of this video clip in the movie. - * Panics with code EVideoClipIllegalIndex - * if the clip index is invalid. - * - * @param aIndex index of video clip in movie - * @param aNewIndex new index of this clip - */ - virtual void VideoClipSetIndex(TInt aOldIndex, TInt aNewIndex) = 0; - - /** - * Returns the playback speed of this video clip. Playback speed is - * specified as parts per thousand of the normal playback speed. For example. - * 1000 means the normal speed, 750 means 75% of the normal speed, and so on. - * - * @param aIndex index of video clip in movie - * @return playback speed - */ - virtual TInt VideoClipSpeed(TInt aIndex) const = 0; - - /** - * Sets the playback speed of this video clip. Playback speed is - * specified as parts per thousand of the normal playback speed. For example. - * 1000 means the normal speed, 750 means 75% of the normal speed, and so on. - * Panics with EVideoClipIllegalSpeed if playback speed is - * illegal. - * - * @param aIndex index of video clip in movie - * @param aSpeed playback speed; must be between 1 and 1000 - */ - virtual void VideoClipSetSpeed(TInt aIndex, TInt aSpeed) = 0; - - /** - * Returns the color effect of this video clip. - * - * @param aIndex index of video clip in movie - * @return color effect - */ - virtual TVedColorEffect VideoClipColorEffect(TInt aIndex) const = 0; - - /** - * Sets the color effect of this video clip. - * - * @param aIndex index of video clip in movie - * @param aColorEffect color effect - */ - virtual void VideoClipSetColorEffect(TInt aIndex, TVedColorEffect aColorEffect) = 0; - - /** - * Returns whether this video clip can be muted or not (that is, - * whether the mute setting has any effect). For example, if - * this video clip has no audio track, it can never have audio - * even if the mute setting is false. - * - * @param aIndex index of video clip in movie - * @return ETrue if this video clip can be muted; - * EFalse otherwise - */ - virtual TBool VideoClipIsMuteable(TInt aIndex) const = 0; - - /** - * Returns whether the audio track of this video clip is muted or not. - * Note that this returns ETrue only for cases where user has explicitly - * muted the audio or if there is no audio track even in the input; - * if the track is muted automatically, e.g. due to slow motion effect, - * but not explicitly by the user, the return value is EFalse. - * If the user need to know for sure if there is audio track in the output, - * and this method returns EFalse, then the user should also compare - * the return value of VideoClipSpeed() to KVedNormalSpeed, - * and if they are not equal, assume the audio track is muted. - * - * @param aIndex index of video clip in movie - * @return ETrue if the audio track is muted; - * EFalse otherwise - */ - virtual TBool VideoClipIsMuted(TInt aIndex) const = 0; - - /** - * Sets whether the audio track of this video clip is muted or not. - * - * @param aIndex index of video clip in movie - * @param aVolume ETrue to mute the audio track; - * EFalse not to mute the audio track - */ - virtual void VideoClipSetMuted(TInt aIndex, TBool aMuted) = 0; - - /** - * Returns the cut in time of this video clip in clip timebase. - * - * @param aIndex index of video clip in movie - * @return cut in time in microseconds in clip timebase - */ - virtual TTimeIntervalMicroSeconds VideoClipCutInTime(TInt aIndex) const = 0; - - /** - * Sets the cut in time of this video clip in clip timebase. - * Panics with EVideoClipIllegalCutInTime if - * cut in time is illegal. - * - * @param aIndex index of video clip in movie - * @param aCutInTime cut in time in microseconds in clip timebase - */ - virtual void VideoClipSetCutInTime(TInt aIndex, TTimeIntervalMicroSeconds aCutInTime) = 0; - - /** - * Returns the cut out time of this video clip in clip timebase. - * - * @param aIndex index of video clip in movie - * @return cut out time in microseconds in clip timebase - */ - virtual TTimeIntervalMicroSeconds VideoClipCutOutTime(TInt aIndex) const = 0; - - /** - * Sets the cut out time of this video clip in clip timebase. - * Panics with EVideoClipIllegalCutOutTime if - * cut out time is illegal. - * - * @param aIndex index of video clip in movie - * @param aCutOutTime cut out time in microseconds in clip timebase - */ - virtual void VideoClipSetCutOutTime(TInt aIndex, TTimeIntervalMicroSeconds aCutOutTime) = 0; - - /** - * Returns the start time of this video clip in movie timebase. - * - * @param aIndex index of video clip in movie - * @return start time in microseconds in movie timebase - */ - virtual TTimeIntervalMicroSeconds VideoClipStartTime(TInt aIndex) const = 0; - - /** - * Returns the end time of this video clip in movie timebase. - * - * @param aIndex index of video clip in movie - * @return end time in microseconds in movie timebase - */ - virtual TTimeIntervalMicroSeconds VideoClipEndTime(TInt aIndex) const = 0; - - /** - * Returns the duration of this video clip with the specified - * editing operations applied (for example, cutting - * and changing speed) - * - * @param aIndex index of video clip in movie - * @return duration in microseconds - */ - virtual TTimeIntervalMicroSeconds VideoClipEditedDuration(TInt aIndex) const = 0; - - /* Audio Clip Methods */ - - /** - * Returns an audio clip info object to get detailed information about - * the original audio clip. Note that the specified editing operations - * (for example, changing duration) do not - * affect the values returned by the info object. - * - * @param aIndex index of audio clip in movie - * @return pointer to an audio clip info instance - */ - virtual CVedAudioClipInfo* AudioClipInfo(TInt aIndex) const = 0; - - /** - * Returns the start time of this audio clip in movie timebase. - * - * @param aIndex index of audio clip in movie - * @return start time in microseconds in movie timebase - */ - virtual TTimeIntervalMicroSeconds AudioClipStartTime(TInt aIndex) const = 0; - - /** - * Sets the start time of this audio clip in movie timebase. - * Also updates the end time. Duration remains unchanged. - * Note that since the audio clips are ordered based on their - * start times, the index of the clip may change as a result - * of changing the start time. - * - * @param aIndex index of audio clip in movie - * @param aStartTime start time in microseconds in movie timebase - */ - virtual void AudioClipSetStartTime(TInt aIndex, TTimeIntervalMicroSeconds aStartTime) = 0; - - /** - * Returns the end time of this audio clip in movie timebase. - * - * @param aIndex index of audio clip in movie - * @return end time in microseconds in movie timebase - */ - virtual TTimeIntervalMicroSeconds AudioClipEndTime(TInt aIndex) const = 0; - - /** - * Returns the duration of the selected part of this clip. - * - * @param aIndex index of audio clip in movie - * @return duration in microseconds - */ - virtual TTimeIntervalMicroSeconds AudioClipEditedDuration(TInt aIndex) const = 0; - - /** - * Returns the cut in time of this audio clip in clip timebase. - * - * @param aIndex index of audio clip in movie - * @return cut in time in microseconds in clip timebase - */ - virtual TTimeIntervalMicroSeconds AudioClipCutInTime(TInt aIndex) const = 0; - - /** - * Sets the cut in time of this audio clip in clip timebase. - * Panics with EAudioClipIllegalCutInTime if - * cut in time is illegal. - * - * @param aIndex index of audio clip in movie - * @param aCutInTime cut in time in microseconds in clip timebase - */ - virtual void AudioClipSetCutInTime(TInt aIndex, TTimeIntervalMicroSeconds aCutInTime) = 0; - - /** - * Returns the cut out time of this audio clip in clip timebase. - * - * @param aIndex index of audio clip in movie - * @return cut out time in microseconds in clip timebase - */ - virtual TTimeIntervalMicroSeconds AudioClipCutOutTime(TInt aIndex) const = 0; - - /** - * Sets the cut out time of this audio clip in clip timebase. - * Panics with EAudioClipIllegalCutOutTime if - * cut in time is illegal. - * - * @param aIndex index of audio clip in movie - * @param aCutOutTime cut out time in microseconds in clip timebase - */ - virtual void AudioClipSetCutOutTime(TInt aIndex, TTimeIntervalMicroSeconds aCutOutTime) = 0; - - /** - * Returns the target bitrate of the movie audio track. - * - * @return target bitrate of the movie audio track. - */ - virtual TInt AudioBitrate() const = 0; - - /** - * Returns the target bitrate of the movie video track. - * - * @return target bitrate of the movie video track. - */ - virtual TInt VideoBitrate() const = 0; - - /** - * Returns the target framerate of the movie video track. - * - * @return target framerate of the movie video track. - */ - virtual TReal VideoFrameRate() const = 0; - - /** - * Sets the output parameters for the movie. Leaves - * with KErrNotSupported if a parameter is illegal, - * e.g., target bitrate is too high for the given - * codec. Setting a integer parameter to zero indicates - * that a default value will be used for that parameter. - * - * This method overrides the SetQuality method - * - * Possible leave codes: - * - KErrNotSupported if setting is not valid - * - * @param Output parameters - */ - - virtual void SetOutputParametersL(TVedOutputParameters& aOutputParams) = 0; - - /** - * Sets the maximum size for the movie - * - * @param aLimit Maximum size in bytes - */ - virtual void SetMovieSizeLimit(TInt aLimit) = 0; - - /** - * Returns whether this audio clip is normalized or not. - * - * @param aIndex index of audio clip in movie - * @return ETrue if the audio clip is normalized; - * EFalse otherwise - */ - virtual TBool AudioClipNormalizing(TInt aIndex) const = 0; - - /** - * Sets whether this audio clip is normalized or not. - * - * @param aIndex index of audio clip in movie - * @param aVolume ETrue to normalize the audio clip; - * EFalse not to normalize the audio clip - */ - virtual void AudioClipSetNormalizing(TInt aIndex, TBool aNormalizing) = 0; - - /** - * Inserts a new dynamic level mark to the audio clip. The mark timing - * must be within the time boundaries of the audio clip. - * - * Note! This method should not be used at the same time with SetAudioClipVolumeGainL - * since these overrule each other; the latter one used stays valid. - * - * @param aIndex index of the audio clip - * @param aMark dynamic level mark to be inserted - */ - virtual void AudioClipInsertDynamicLevelMarkL(TInt aIndex, TVedDynamicLevelMark aMark) = 0; - - /** - * Removes the specified dynamic level mark from the specified audio clip. - * The mark index must be between 0 and number of dynamic level marks in the clip. - * - * @param aClipIndex index of the audio clip - * @param aMarkIndex index of the mark to be removed - */ - virtual void AudioClipRemoveDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex) = 0; - - /** - * Returns the number of dynamic level marks in the specified audio clip. - * - * @param aIndex index of the audio clip - */ - virtual TInt AudioClipDynamicLevelMarkCount(TInt aIndex) const = 0; - - /** - * Returns the specified dynamic level mark from the specified audio clip. - * - * @param aClipIndex index of the audio clip - * @param aMarkIndex index of the dynamic level mark - */ - virtual TVedDynamicLevelMark AudioClipDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex) = 0; - - /** - * Returns whether the audio track of this video clip is normalized or not. - * - * @param aIndex index of video clip in movie - * @return ETrue if the audio track is normalized; - * EFalse otherwise - */ - virtual TBool VideoClipNormalizing(TInt aIndex) const = 0; - - /** - * Sets whether the audio track of this video clip is normalized or not. - * - * @param aIndex index of video clip in movie - * @param aVolume ETrue to normalize the audio track; - * EFalse not to normalize the audio track - */ - virtual void VideoClipSetNormalizing(TInt aIndex, TBool aNormalizing) = 0; - - /** - * Inserts a new dynamic level mark to the video clip. The mark timing - * must be within the time boundaries of the video clip. - * - * Note! This method should not be used at the same time with SetVideoClipVolumeGainL - * since these overrule each other; the latter one used stays valid. - * - * @param aIndex index of the video clip - * @param aMark dynamic level mark to be inserted - */ - virtual void VideoClipInsertDynamicLevelMarkL(TInt aIndex, TVedDynamicLevelMark aMark) = 0; - - /** - * Removes the specified dynamic level mark from the specified video clip. - * The mark index must be between 0 and number of dynamic level marks in the clip. - * - * @param aClipIndex index of the video clip - * @param aMarkIndex index of the mark to be removed - */ - virtual void VideoClipRemoveDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex) = 0; - - /** - * Returns the number of dynamic level marks in the specified video clip. - * - * @param aIndex index of the video clip - */ - virtual TInt VideoClipDynamicLevelMarkCount(TInt aIndex) const = 0; - - /** - * Returns the specified dynamic level mark from the specified video clip. - * - * @param aClipIndex index of the video clip - * @param aMarkIndex index of the dynamic level mark - */ - virtual TVedDynamicLevelMark VideoClipDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex) = 0; - - /** - * Returns the color tone of the specified clip. - * - * @return color tone - */ - virtual TRgb VideoClipColorTone(TInt aVideoCLipIndex) const = 0; - - /** - * Sets the color tone of the specified clip. - * - * @param aColorTone color tone - */ - virtual void VideoClipSetColorTone(TInt aVideoClipIndex, TRgb aColorTone) = 0; - - /** - * Returns an estimate for movie processing time - * - * @return Processing time - */ - virtual TTimeIntervalMicroSeconds GetProcessingTimeEstimateL() = 0; - - /** - * Checks if a movie observer is registered. - * - * @param aObserver observer to be checked - * @return ETrue if the observer is registered - * EFalse otherwise - */ - virtual TBool MovieObserverIsRegistered(MVedMovieObserver* aObserver) = 0; - - /** - * Set volume gain for audio track in the given video clip. Value 0 means no gain. - * In practice calls VideoClipInsertDynamicLevelMarkL to set dynamic level mark - * to the beginning and end of the clip. - * Also the observer callback NotifyVideoClipDynamicLevelMarkInserted is called if gain - * is nonzero; if it is zero, callback NotifyVideoClipDynamicLevelMarkRemoved is called. - * - * If index is KVedClipIndexAll, the setting is applied to all video clips in the movie. - * - * Note! This method should not be used at the same time with VideoClipInsertDynamicLevelMarkL - * since these overrule each other; the latter one used stays valid. - * - * @param aClipIndex index of the clip; KVedClipIndexAll if applied for all the clips - * @param aVolumeGain Volume gain. One step equals 0.1 dedibels for positive values and - * 0.5 decibels for negative values. - * Value = 0 sets the original level (no gain) - * Value range -127...127; if exceeded, the value is saturated to max - */ - virtual void SetVideoClipVolumeGainL(TInt aClipIndex, TInt aVolumeGain) = 0; - - /** - * Get volume gain for audio track in the given video clip. - * If index is KVedClipIndexAll, the global gain set for all video clips in the movie is returned. - * - * @param aClipIndex index of the clip; KVedClipIndexAll if applied for all the clips (whole movie) - * @return Volume gain in +0.1 or -0.5 decibel steps - */ - virtual TInt GetVideoClipVolumeGainL(TInt aClipIndex) = 0; - - /** - * Set volume gain for the given audio clip. Value 0 means no gain. - * In practice calls AudioClipInsertDynamicLevelMarkL to set dynamic level mark - * to the beginning and end of the clip. - * Also the observer callback NotifyAudioClipDynamicLevelMarkInserted is called if gain - * is nonzero; if it is zero, callback NotifyAudioClipDynamicLevelMarkRemoved is called. - * - * If index is KVedClipIndexAll, the setting is applied to all audio clips in the movie. - * - * Note! This method should not be used at the same time with AudioClipInsertDynamicLevelMarkL - * since these overrule each other; the latter one used stays valid. - * - * @param aClipIndex Index of the clip; KVedClipIndexAll if applied for all the clips - * @param aVolumeGain Volume gain. One step equals 0.1 dedibels for positive values and - * 0.5 decibels for negative values. - * Value = 0 sets the original level (no gain) - * Value range -127...127; if exceeded, the value is saturated to max - */ - virtual void SetAudioClipVolumeGainL(TInt aClipIndex, TInt aVolumeGain) = 0; - - /** - * Get volume gain for the given audio clip. - * If index is KVedClipIndexAll, the global gain set for all video clips in the movie is returned. - * - * @param aClipIndex index of the clip; KVedClipIndexAll if applied for all the clips - * @return Volume gain in +0.1 or -0.5 decibel steps - */ - virtual TInt GetAudioClipVolumeGainL(TInt aClipIndex) = 0; - - /** - * Inserts a video clip from the specified file to the specified index - * in this movie. The observers are notified when the clip has been added - * or adding clip has failed. Panics with EMovieAddOperationAlreadyRunning - * if another add video or audio clip operation is already running. - * Panics with code USER-130 if the clip index is invalid. - * The file will be opened in EFileShareReadersOnly mode by default, - * and the same mode should be used by the client too if it need to open - * the file at the same time. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileHandle file handle of the clip to add - * @param aIndex index the clip should be inserted at - */ - virtual void InsertVideoClipL(RFile* aFileHandle, TInt aIndex) = 0; - - /** - * Adds the specified audio clip to this movie. The observers are notified - * when the clip has been added or adding clip has failed. Panics with - * EMovieAddOperationAlreadyRunning if another add video or - * audio clip operation is already running. - * The file will be opened in EFileShareReadersOnly mode by default, - * and the same mode should be used by the client too if it need to open - * the file at the same time. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFilehandle file handle of the clip to add - * @param aStartTime start time of the clip in movie timebase - * @param aCutInTime cut in time of the clip - * @param aCutOutTime cut out time of the clip; or - * KVedAudioClipOriginalDuration to specify - * that the original duration of the clip should be used - */ - - virtual void AddAudioClipL(RFile* aFileHandle, - TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds aCutInTime = TTimeIntervalMicroSeconds(0), - TTimeIntervalMicroSeconds aCutOutTime = KVedAudioClipOriginalDuration) = 0; - - /** - * Starts a video processing operation. This method is asynchronous and - * returns immediately. The processing will happen in the background and - * the observer will be notified about the progress of the operation. - * Processed data is written into the specified file. Panics with - * TVedPanic::EMovieEmpty if there are no clips - * in the movie. Note that calling ProcessL may cause - * changes in the maximum frame rates of generated clips. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrAccessDenied if the file access is denied - * - KErrDiskFull if the disk is full - * - KErrWrite if not all data could be written - * - KErrBadName if the filename is bad - * - KErrDirFull if the directory is full - * - * @param aObserver observer to be notified of the processing status - * @param aFileHandle handle of the file to be written - */ - - virtual void ProcessL(RFile* aFileHandle, - MVedMovieProcessingObserver& aObserver) = 0; - - - }; - -#endif // __VEDMOVIE_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditor_plat/video_editor_engine_api/inc/VedVideoClipGenerator.h --- a/videoeditor_plat/video_editor_engine_api/inc/VedVideoClipGenerator.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,331 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __VEDVIDEOCLIPGENERATOR_H__ -#define __VEDVIDEOCLIPGENERATOR_H__ - -#include -#include - -#include "VedVideoClipInfo.h" - -class CVedMovie; -class CVedVideoClip; -class CVedVideoClipGenerator; - - -/** - * Observer for notifying that video clip frame has been completed. - * - * @see CVedVideoClipGenerator - */ -class MVedVideoClipGeneratorFrameObserver - { -public: - /** - * Called to notify that a video clip frame has been completed. - * - * @param aGenerator video clip generator - * @param aError KErrNone if frame was - * completed successfully; one of the system wide - * error codes if generating frame failed - * @param aFrame pointer to frame if it was completed successfully; - * NULL if generating frame failed - */ - virtual void NotifyVideoClipGeneratorFrameCompleted(CVedVideoClipGenerator& aGenerator, - TInt aError, - CFbsBitmap* aFrame) = 0; - }; - - -/** - * Abstract base class for video clip frame generators. Frame generators - * can be used to create video clips from bitmaps generated by the application - * (for example, by drawing with GDI). - */ -class CVedVideoClipGenerator : public CBase - { -public: - - /** - * Destructor. - */ - IMPORT_C virtual ~CVedVideoClipGenerator(); - - /** - * Returns whether this generator has been inserted to a movie - * or not. - * - * @return ETrue, if this generator has been - * inserted; EFalse, otherwise - */ - IMPORT_C TBool IsInserted() const; - - - /** - * Returns the movie this generator is associated with. - * Panics with EVideoClipGeneratorNotInserted - * if this generator has not been inserted to a movie yet. - * - * @return movie - */ - IMPORT_C CVedMovie* Movie() const; - - /** - * Returns the index of the video clip this generator is - * associated with.Panics with EVideoClipGeneratorNotInserted - * if this generator has not been inserted to a movie yet. - * - * @return video clip index - */ - IMPORT_C TInt VideoClipIndex() const; - - /** - * Returns whether this generator is owned by the video clip - * it is associated with (i.e., whether the video clip is responsible - * for deleting this generator). Panics with - * EVideoClipGeneratorNotInserted if this generator - * has not been inserted to a movie yet. - * - * @return ETrue, if this generator is owned by - * the video clip; EFalse, otherwise - */ - IMPORT_C TBool IsOwnedByVideoClip() const; - - /** - * Returns the uid of the frame generator. The use of the uid is - * entirely application specific. It can be used for example to - * identify the frame generator type. The uid is not used in - * any way by the video editor engine. - * - * @return uid of the frame generator - */ - virtual TUid Uid() const = 0; - - /** - * Returns a descriptive name for the clip. - * - * @return descriptive name of the clip - */ - virtual TPtrC DescriptiveName() const = 0; - - /** - * Returns the duration of the clip in microseconds. - * - * @return duration of the clip - */ - virtual TTimeIntervalMicroSeconds Duration() const = 0; - - - /* Video frame property methods. */ - - /** - * Returns the number of video frames in this clip. Panics if the - * clip is not ready. - * - * @return number of video frames in this clip - */ - virtual TInt VideoFrameCount() const = 0; - - /** - * Returns the start time of the video frame at the specified index. - * Panics if the index is illegal or if the clip is not ready. - * - * @param aIndex index - * - * @return start time of the video frame at the specified index in microseconds - */ - virtual TTimeIntervalMicroSeconds VideoFrameStartTime(TInt aIndex) const = 0; - - /** - * Returns the end time of the video frame at the specified index. - * Panics if the index is illegal or the clip is not ready. - * - * @param aIndex index - * - * @return end time of the video frame at the specified index in microseconds - */ - virtual TTimeIntervalMicroSeconds VideoFrameEndTime(TInt aIndex) const = 0; - - /** - * Returns the duration of the video frame at the specified index. - * Panics if the index is illegal or the clip is not ready. - * - * @param aIndex index - * - * @return duration of the video frame at the specified index in microseconds - */ - virtual TTimeIntervalMicroSeconds VideoFrameDuration(TInt aIndex) const = 0; - - /** - * Returns the complexity factor of the first video frame. The complexity factor - * should be in the range between 0 to 1000. 0 means no variation at all (a - * blank frame), 1000 means a highly complex frame. - * - * @see CalculateFrameComplexityFactor - * - * @return complexity factor, range 0...1000 - */ - virtual TInt VideoFirstFrameComplexityFactor() const = 0; - - - /** - * Returns the difference factor of the video frame at the specified - * index. The difference factor describes how different the frame is - * from the previous frame. The difference factor should be in the range between - * 0 to 1000 (0 means that the frame is identical to the previous one, 1000 - * means that the frame is completely different from the previous one.) - * Panics if the index is illegal or the clip is not yet ready. - * - * @param aIndex index (starting from 1) - * - * @return difference factor, range 0...1000 - */ - virtual TInt VideoFrameDifferenceFactor(TInt aIndex) const = 0; - - /** - * Returns the video frame index at the specified time. Panics if info is not yet - * ready for reading or the time is illegal. - * - * @param aTime time - * - * @return video frame index at the specified time - */ - virtual TInt GetVideoFrameIndex(TTimeIntervalMicroSeconds aTime) const = 0; - - - /* Frame methods. */ - - /** - * Generates a bitmap of the given frame. The frame bitmap is scaled - * to the specified resolution and converted to the specified display - * mode. This method is asynchronous. The frame is generated in the - * background and the observer is notified when the frame is complete. - * This method panics if the resolution is illegal. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotSupported, if the specified combination of - * parameters is not supported - * - * @param aObserver observer to be notified when the frame is completed - * @param aIndex index of frame, or KFrameIndexBestThumb to look for - * the most suitable thumbnail frame. - * @param aResolution resolution of the desired frame bitmap, or - * NULL if the frame should be - * in the original resolution - * @param aDisplayMode desired display mode; or ENone if - * any display mode is acceptable - * @param aEnhance apply image enhancement algorithms to improve - * frame quality; note that this may considerably - * increase the processing time needed to prepare - * the frame - * @param aPriority priority of the frame generation - */ - virtual void GetFrameL(MVedVideoClipGeneratorFrameObserver& aObserver, - TInt aIndex = KFrameIndexBestThumb, - TSize* const aResolution = 0, - TDisplayMode aDisplayMode = ENone, - TBool aEnhance = EFalse, - TInt aPriority = CActive::EPriorityIdle) = 0; - - /** - * Cancels frame generation. If no frame is currently being - * generated, the function does nothing. - */ - virtual void CancelFrame() = 0; - -protected: // constructors and methods - - /** - * Constructor. - */ - IMPORT_C CVedVideoClipGenerator(); - - /** - * Reports to the base class that the duration of the generated clip has - * changed. This method should always be called when the - * settings of the generated clip change so that the duration of the - * clip is affected. - */ - IMPORT_C void ReportDurationChanged() const; - - /** - * Reports to the base class that some settings of the generated clip have - * changed but the duration of the clip has remained the same. - * This method should always be called when any settings - * of the generated clip change but the duration of the clip is not affected. - */ - IMPORT_C void ReportSettingsChanged() const; - - /** - * Reports to the base class that descriptive name of the generated - * clip has changed. This method should always be called - * when the descriptive name of the generated clip has changed but no - * other changes have occurred. - */ - IMPORT_C void ReportDescriptiveNameChanged() const; - - /** - * Calculates the complexity of a frame. This method is meant for calculating - * frame complexity factors returned by VideoFirstFrameComplexityFactor - * method. - * - * @see VideoFirstFrameComplexityFactor - * - * @param aFrame frame to analyze - * - * @return complexity factor - */ - IMPORT_C TInt CalculateFrameComplexityFactor(CFbsBitmap* aFrame) const; - -private: // methods - - /** - * Sets the video clip this generator is associated with and whether - * the clip owns this generator or not. Note that these properties can - * be set only once during the lifetime of a generator when the - * generator is inserted to a movie. Panics with - * EVideoClipGeneratorAlreadyInserted if the video clip - * has already been set. - * - * @param aVideoClip video clip - * @param aIsOwnedByVideoClip ETrue, if the clip is responsible - * for deleting this generator; EFalse, - * otherwise - */ - void SetVideoClip(CVedVideoClip& aVideoClip, TBool aIsOwnedByVideoClip); - - -private: - // Member variables - - CVedVideoClip* iVideoClip; - TBool iIsOwnedByVideoClip; - - TInt iMaximumFramerate; - - friend class CVedMovieAddClipOperation; - friend class CVideoEditorTest; - - }; - -#endif // __VEDVIDEOCLIPGENERATOR_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditor_plat/video_editor_engine_api/inc/VedVideoClipInfo.h --- a/videoeditor_plat/video_editor_engine_api/inc/VedVideoClipInfo.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,396 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __VEDVIDEOCLIPINFO_H__ -#define __VEDVIDEOCLIPINFO_H__ - -#include "VedCommon.h" - -#include - -#define KFrameIndexBestThumb (-1) // search for best possible thumbnail from video - -/* - * Forward declarations. - */ -class CFbsBitmap; -class CVedVideoClipInfo; -class CVedVideoClipGenerator; - -/** - * Observer for notifying that video clip info - * is ready for reading. - * - * @see CVedVideoClipInfo - */ -class MVedVideoClipInfoObserver - { -public: - /** - * Called to notify that video clip info is ready - * for reading. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - * @param aInfo video clip info - * @param aError KErrNone if info is ready - * for reading; one of the system wide - * error codes if reading file failed - */ - virtual void NotifyVideoClipInfoReady(CVedVideoClipInfo& aInfo, - TInt aError) = 0; - }; - - -/** - * Observer for notifying that video clip frame has been completed. - * - * @see CVedVideoClipInfo - */ -class MVedVideoClipFrameObserver - { -public: - /** - * Called to notify that video clip frame has been completed. - * - * @param aInfo video clip info - * @param aError KErrNone if frame was - * completed successfully; one of the system wide - * error codes if generating frame failed - * @param aFrame pointer to frame if it was completed successfully; - * NULL if generating frame failed - */ - virtual void NotifyVideoClipFrameCompleted(CVedVideoClipInfo& aInfo, - TInt aError, - CFbsBitmap* aFrame) = 0; - }; - -/** - * Utility class for getting information about video clip files. - */ -class CVedVideoClipInfo : public CBase - { -public: - - /* Constructors & destructor. */ - - /** - * Constructs a new CVedVideoClipInfo object to get information - * about the specified video clip file. The specified observer - * is notified when info is ready for reading. This method - * may leave if no resources are available to construct - * a new object. - * The file will be opened in EFileShareReadersOnly mode by default, - * and the same mode should be used by the client too if it need to open - * the file at the same time. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileName name of video clip file - * @param aObserver observer to notify when info is ready for reading - * - * @return pointer to a new CVedVideoClipInfo instance - */ - IMPORT_C static CVedVideoClipInfo* NewL(const TDesC& aFileName, - MVedVideoClipInfoObserver& aObserver); - - /** - * Constructs a new CVedVideoClipInfo object to get information - * about the specified video clip file. The constructed object - * is left in the cleanup stack. The specified observer - * is notified when info is ready for reading. This method - * may leave if no resources are available to construct a new - * object. - * The file will be opened in EFileShareReadersOnly mode by default, - * and the same mode should be used by the client too if it need to open - * the file at the same time. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileName name of video clip file - * @param aObserver observer to notify when info is ready for reading - * - * @return pointer to a new CVedVideoClipInfo instance - */ - IMPORT_C static CVedVideoClipInfo* NewLC(const TDesC& aFileName, - MVedVideoClipInfoObserver& aObserver); - - /* General property methods. */ - - - /** - * Returns a descriptive name for the clip. Panics if info is not yet - * ready for reading. - * - * @return descriptive name of the clip - */ - virtual TPtrC DescriptiveName() const = 0; - - /** - * Returns the file name of the clip. Panics if there is no file - * associated with this clip or info is not yet ready for reading. - * - * @return file name of the clip - */ - virtual TPtrC FileName() const = 0; - - /** - * Returns the generator of the clip. Panics if there is no video clip - * generator associated with the clip or info is not yet ready for reading. - * - * @return generator of the clip - */ - virtual CVedVideoClipGenerator* Generator() const = 0; - - /** - * Returns the class of the clip. - * - * @return class of the clip - */ - virtual TVedVideoClipClass Class() const = 0; - - /** - * Returns the video format of the clip. Panics if there is no file - * associated with this clip or info is not yet ready for reading. - * - * @return video format of the clip - */ - virtual TVedVideoFormat Format() const = 0; - - /** - * Returns the video type of the clip. Panics if there is no file - * associated with this clip or info is not yet ready for reading. - * - * @return video type of the clip - */ - virtual TVedVideoType VideoType() const = 0; - - /** - * Returns the resolution of the clip. Panics if info - * is not yet ready for reading. - * - * @return resolution of the clip - */ - virtual TSize Resolution() const = 0; - - /** - * Returns whether this video clip has an audio track or not. - * Panics if info is not yet ready for reading. - * - * @return ETrue if clip has an audio track; - * EFalse otherwise - */ - virtual TBool HasAudio() const = 0; - - /** - * Returns the audio type of the clip audio track. Panics if there is no file - * associated with this clip or info is not yet ready for reading. - * - * @return audio type of the clip audio track - */ - virtual TVedAudioType AudioType() const = 0; - - /** - * Returns the channel mode of the audio if applicable. - * - * @return channel mode - */ - virtual TVedAudioChannelMode AudioChannelMode() const = 0; - - /** - * Returns the sampling rate in kilohertz. - * - * @return sampling rate - */ - virtual TInt AudioSamplingRate() const = 0; - - /** - * Returns the duration of the clip in microseconds. Panics if info - * is not yet ready for reading. - * - * @return duration of the clip - */ - virtual TTimeIntervalMicroSeconds Duration() const = 0; - - - /* Video frame property methods. */ - - /** - * Returns the number of video frames in this clip. Panics if info - * is not yet ready for reading. - * - * @return number of video frames in this clip - */ - virtual TInt VideoFrameCount() const = 0; - - /** - * Returns the start time of the video frame at the specified index. - * Panics if info is not yet ready for reading or the index is illegal. - * - * @param aIndex index - * - * @return start time of the video frame at the specified index in microseconds - */ - virtual TTimeIntervalMicroSeconds VideoFrameStartTimeL(TInt aIndex) = 0; - - /** - * Returns the end time of the video frame at the specified index. - * Panics if info is not yet ready for reading or the index is illegal. - * - * @param aIndex index - * - * @return end time of the video frame at the specified index in microseconds - */ - virtual TTimeIntervalMicroSeconds VideoFrameEndTimeL(TInt aIndex) = 0; - - /** - * Returns the duration of the video frame at the specified index. - * Panics if info is not yet ready for reading or the index is illegal. - * - * @param aIndex index - * - * @return duration of the video frame at the specified index in microseconds - */ - virtual TTimeIntervalMicroSeconds VideoFrameDurationL(TInt aIndex) = 0; - - /** - * Returns the size of the video frame at the specified index. - * Panics if there is no file associated with this clip, or info is not - * yet ready for reading, or the index is illegal. - * - * @param aIndex index - * - * @return size of the video frame at the specified index in bytes - */ - virtual TInt VideoFrameSizeL(TInt aIndex) = 0; - - /** - * Returns whether the video frame at the specified index is an intra - * frame or not. Panics if info is not yet ready for reading or - * the index is illegal. - * - * @param aIndex index - * - * @return ETrue, if the video frame at the specified index is an - * intra frame; EFalse, otherwise - */ - virtual TBool VideoFrameIsIntraL(TInt aIndex) = 0; - - /** - * Returns the video frame index at the specified time. Panics if info is not yet - * ready for reading or the time is illegal. - * - * @param aTime time - * - * @return video frame index at the specified time - */ - virtual TInt GetVideoFrameIndexL(TTimeIntervalMicroSeconds aTime) = 0; - - - /* Frame methods. */ - - /** - * Generates a bitmap of the given frame from video clip. - * The frame bitmap is scaled to the specified resolution and converted - * to the specified display mode. This method is asynchronous. The frame - * is generated in background and the observer is notified when the frame - * is complete. This method panics if info is not yet ready for reading or - * the resolution is illegal. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotSupported, if the specified combination of - * parameters is not supported - * - * @param aObserver observer to be notified when the frame is completed - * @param aIndex index of frame, or KFrameIndexBestThumb to look for - * most suitable thumbnail frame. - * @param aResolution resolution of the desired frame bitmap, or - * NULL if the frame should be - * in the original resolution - * @param aDisplayMode desired display mode; or ENone if - * any display mode is acceptable - * @param aEnhance apply image enhancement algorithms to improve - * frame quality; note that this may considerably - * increase the processing time needed to prepare - * the frame - * @param aPriority priority of the frame generation - */ - virtual void GetFrameL(MVedVideoClipFrameObserver& aObserver, - TInt aIndex = KFrameIndexBestThumb, - TSize* const aResolution = 0, - TDisplayMode aDisplayMode = ENone, - TBool aEnhance = EFalse, - TInt aPriority = CActive::EPriorityIdle) = 0; - - /** - * Cancels frame generation. If no frame is currently being - * generated, the function does nothing. - */ - virtual void CancelFrame() = 0; - - /** - * Sets the transcode factor. - * - * @param aFactor transcode factor - */ - virtual void SetTranscodeFactor(TVedTranscodeFactor aFactor) = 0; - - /** - * Returns the transcode factor. - * - * @return transcode factor. - */ - virtual TVedTranscodeFactor TranscodeFactor() = 0; - - /** - * Returns whether video clip is MMSCompatible. - * - * @return ETrue if compatible with MMS - */ - virtual TBool IsMMSCompatible() = 0; - - IMPORT_C static CVedVideoClipInfo* NewL(RFile* aFileHandle, - MVedVideoClipInfoObserver& aObserver); - - IMPORT_C static CVedVideoClipInfo* NewLC(RFile* aFileHandle, - MVedVideoClipInfoObserver& aObserver); - - /** - * Returns the file name of the clip. Panics if there is no file - * associated with this clip or info is not yet ready for reading. - * - * @return file name of the clip - */ - virtual RFile* FileHandle() const = 0; - - }; - - - -#endif // __VEDVIDEOCLIPINFO_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditor_plat/video_editor_engine_api/video_editor_engine_api.metaxml --- a/videoeditor_plat/video_editor_engine_api/video_editor_engine_api.metaxml Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ - - - Video Editor Engine API - API for video editing, transcoding, thumbnail generation - c++ - videoeditorengine - - - - - - - - - no - no - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/bwins/aedengineu.def --- a/videoeditorengine/audioeditorengine/bwins/aedengineu.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -EXPORTS - ??1CAudClipInfo@@UAE@XZ @ 1 NONAME ; CAudClipInfo::~CAudClipInfo(void) - ??1CAudSong@@UAE@XZ @ 2 NONAME ; CAudSong::~CAudSong(void) - ?AddClipL@CAudSong@@QAEXABVTDesC16@@VTTimeIntervalMicroSeconds@@H11@Z @ 3 NONAME ; void CAudSong::AddClipL(class TDesC16 const &, class TTimeIntervalMicroSeconds, int, class TTimeIntervalMicroSeconds, class TTimeIntervalMicroSeconds) - ?AreOutputPropertiesSupported@CAudSong@@QAEHABVTAudFileProperties@@@Z @ 4 NONAME ; int CAudSong::AreOutputPropertiesSupported(class TAudFileProperties const &) - ?CancelVisualization@CAudClipInfo@@QAEXXZ @ 5 NONAME ; void CAudClipInfo::CancelVisualization(void) - ?Clip@CAudSong@@QBEPAVCAudClip@@HH@Z @ 6 NONAME ; class CAudClip * CAudSong::Clip(int, int) const - ?ClipCount@CAudSong@@QBEHH@Z @ 7 NONAME ; int CAudSong::ClipCount(int) const - ?CutInTime@CAudClip@@QBE?AVTTimeIntervalMicroSeconds@@XZ @ 8 NONAME ; class TTimeIntervalMicroSeconds CAudClip::CutInTime(void) const - ?CutOutTime@CAudClip@@QBE?AVTTimeIntervalMicroSeconds@@XZ @ 9 NONAME ; class TTimeIntervalMicroSeconds CAudClip::CutOutTime(void) const - ?DynamicLevelMark@CAudClip@@QBE?AVTAudDynamicLevelMark@@H@Z @ 10 NONAME ; class TAudDynamicLevelMark CAudClip::DynamicLevelMark(int) const - ?DynamicLevelMarkCount@CAudClip@@QBEHXZ @ 11 NONAME ; int CAudClip::DynamicLevelMarkCount(void) const - ?EditedDuration@CAudClip@@QBE?AVTTimeIntervalMicroSeconds@@XZ @ 12 NONAME ; class TTimeIntervalMicroSeconds CAudClip::EditedDuration(void) const - ?EndTime@CAudClip@@QBE?AVTTimeIntervalMicroSeconds@@XZ @ 13 NONAME ; class TTimeIntervalMicroSeconds CAudClip::EndTime(void) const - ?FileName@CAudClipInfo@@QBE?AVTPtrC16@@XZ @ 14 NONAME ; class TPtrC16 CAudClipInfo::FileName(void) const - ?GetFrameDurationMicro@CAudSong@@QAEHXZ @ 15 NONAME ; int CAudSong::GetFrameDurationMicro(void) - ?GetFrameSizeEstimateL@CAudSong@@QBEHVTTimeIntervalMicroSeconds@@0@Z @ 16 NONAME ; int CAudSong::GetFrameSizeEstimateL(class TTimeIntervalMicroSeconds, class TTimeIntervalMicroSeconds) const - ?GetMP4DecoderSpecificInfoLC@CAudSong@@QBEHAAPAVHBufC8@@H@Z @ 17 NONAME ; int CAudSong::GetMP4DecoderSpecificInfoLC(class HBufC8 * &, int) const - ?GetSizeEstimateL@CAudSong@@QBEHXZ @ 18 NONAME ; int CAudSong::GetSizeEstimateL(void) const - ?GetTimeEstimateL@CAudSong@@QAE?AVTTimeIntervalMicroSeconds@@XZ @ 19 NONAME ; class TTimeIntervalMicroSeconds CAudSong::GetTimeEstimateL(void) - ?GetTimeEstimateL@CAudSong@@QAEHAAVMAudTimeEstimateObserver@@W4TAudType@@HW4TChannelMode@@H@Z @ 20 NONAME ; int CAudSong::GetTimeEstimateL(class MAudTimeEstimateObserver &, enum TAudType, int, enum TChannelMode, int) - ?GetVisualizationL@CAudClipInfo@@QBEXAAVMAudVisualizationObserver@@HH@Z @ 21 NONAME ; void CAudClipInfo::GetVisualizationL(class MAudVisualizationObserver &, int, int) const - ?GetVolumeGain@CAudClip@@QAEHXZ @ 22 NONAME ; int CAudClip::GetVolumeGain(void) - ?IndexOnTrack@CAudClip@@QBEHXZ @ 23 NONAME ; int CAudClip::IndexOnTrack(void) const - ?Info@CAudClip@@QBEPAVCAudClipInfo@@XZ @ 24 NONAME ; class CAudClipInfo * CAudClip::Info(void) const - ?InsertDynamicLevelMarkL@CAudClip@@QAEHABVTAudDynamicLevelMark@@@Z @ 25 NONAME ; int CAudClip::InsertDynamicLevelMarkL(class TAudDynamicLevelMark const &) - ?Muting@CAudClip@@QBEHXZ @ 26 NONAME ; int CAudClip::Muting(void) const - ?NewL@CAudClipInfo@@SAPAV1@ABVTDesC16@@AAVMAudClipInfoObserver@@@Z @ 27 NONAME ; class CAudClipInfo * CAudClipInfo::NewL(class TDesC16 const &, class MAudClipInfoObserver &) - ?NewL@CAudSong@@SAPAV1@PAVRFs@@@Z @ 28 NONAME ; class CAudSong * CAudSong::NewL(class RFs *) - ?NewLC@CAudClipInfo@@SAPAV1@ABVTDesC16@@AAVMAudClipInfoObserver@@@Z @ 29 NONAME ; class CAudClipInfo * CAudClipInfo::NewLC(class TDesC16 const &, class MAudClipInfoObserver &) - ?NewLC@CAudSong@@SAPAV1@PAVRFs@@@Z @ 30 NONAME ; class CAudSong * CAudSong::NewLC(class RFs *) - ?Normalizing@CAudClip@@QBEHXZ @ 31 NONAME ; int CAudClip::Normalizing(void) const - ?OutputFileProperties@CAudSong@@QBE?AVTAudFileProperties@@XZ @ 32 NONAME ; class TAudFileProperties CAudSong::OutputFileProperties(void) const - ?Priority@CAudClip@@QBEHXZ @ 33 NONAME ; int CAudClip::Priority(void) const - ?Properties@CAudClipInfo@@QBE?AVTAudFileProperties@@XZ @ 34 NONAME ; class TAudFileProperties CAudClipInfo::Properties(void) const - ?RegisterSongObserverL@CAudSong@@QAEXPAVMAudSongObserver@@@Z @ 35 NONAME ; void CAudSong::RegisterSongObserverL(class MAudSongObserver *) - ?RemoveClip@CAudSong@@QAEXHH@Z @ 36 NONAME ; void CAudSong::RemoveClip(int, int) - ?RemoveDynamicLevelMark@CAudClip@@QAEHH@Z @ 37 NONAME ; int CAudClip::RemoveDynamicLevelMark(int) - ?Reset@CAudClip@@QAEXH@Z @ 38 NONAME ; void CAudClip::Reset(int) - ?Reset@CAudSong@@QAEXH@Z @ 39 NONAME ; void CAudSong::Reset(int) - ?SetCutInTime@CAudClip@@QAEXVTTimeIntervalMicroSeconds@@@Z @ 40 NONAME ; void CAudClip::SetCutInTime(class TTimeIntervalMicroSeconds) - ?SetCutOutTime@CAudClip@@QAEXVTTimeIntervalMicroSeconds@@@Z @ 41 NONAME ; void CAudClip::SetCutOutTime(class TTimeIntervalMicroSeconds) - ?SetDuration@CAudSong@@QAEHVTTimeIntervalMicroSeconds@@@Z @ 42 NONAME ; int CAudSong::SetDuration(class TTimeIntervalMicroSeconds) - ?SetMuting@CAudClip@@QAEXH@Z @ 43 NONAME ; void CAudClip::SetMuting(int) - ?SetNormalizing@CAudClip@@QAEXH@Z @ 44 NONAME ; void CAudClip::SetNormalizing(int) - ?SetOutputFileFormat@CAudSong@@QAEHW4TAudType@@HW4TChannelMode@@H@Z @ 45 NONAME ; int CAudSong::SetOutputFileFormat(enum TAudType, int, enum TChannelMode, int) - ?SetPriority@CAudClip@@QAEHH@Z @ 46 NONAME ; int CAudClip::SetPriority(int) - ?SetStartTime@CAudClip@@QAEXVTTimeIntervalMicroSeconds@@@Z @ 47 NONAME ; void CAudClip::SetStartTime(class TTimeIntervalMicroSeconds) - ?SetVolumeGain@CAudClip@@QAEXH@Z @ 48 NONAME ; void CAudClip::SetVolumeGain(int) - ?StartTime@CAudClip@@QBE?AVTTimeIntervalMicroSeconds@@XZ @ 49 NONAME ; class TTimeIntervalMicroSeconds CAudClip::StartTime(void) const - ?SyncCancelProcess@CAudSong@@QAEXXZ @ 50 NONAME ; void CAudSong::SyncCancelProcess(void) - ?SyncProcessFrameL@CAudSong@@QAEHAAPAVHBufC8@@AAHAAVTTimeIntervalMicroSeconds@@@Z @ 51 NONAME ; int CAudSong::SyncProcessFrameL(class HBufC8 * &, int &, class TTimeIntervalMicroSeconds &) - ?SyncStartProcessingL@CAudSong@@QAEHXZ @ 52 NONAME ; int CAudSong::SyncStartProcessingL(void) - ?TrackIndex@CAudClip@@QBEHXZ @ 53 NONAME ; int CAudClip::TrackIndex(void) const - ?UnregisterSongObserver@CAudSong@@QAEXPAVMAudSongObserver@@@Z @ 54 NONAME ; void CAudSong::UnregisterSongObserver(class MAudSongObserver *) - ?AddClipL@CAudSong@@QAEXPAVRFile@@VTTimeIntervalMicroSeconds@@H11@Z @ 55 NONAME ; void CAudSong::AddClipL(class RFile *, class TTimeIntervalMicroSeconds, int, class TTimeIntervalMicroSeconds, class TTimeIntervalMicroSeconds) - ?FileHandle@CAudClipInfo@@QBEPAVRFile@@XZ @ 56 NONAME ; class RFile * CAudClipInfo::FileHandle(void) const - ?NewL@CAudClipInfo@@SAPAV1@PAVRFile@@AAVMAudClipInfoObserver@@@Z @ 57 NONAME ; class CAudClipInfo * CAudClipInfo::NewL(class RFile *, class MAudClipInfoObserver &) - ?NewLC@CAudClipInfo@@SAPAV1@PAVRFile@@AAVMAudClipInfoObserver@@@Z @ 58 NONAME ; class CAudClipInfo * CAudClipInfo::NewLC(class RFile *, class MAudClipInfoObserver &) - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AAC/inc/AudParams.h --- a/videoeditorengine/audioeditorengine/codecs/AAC/inc/AudParams.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,88 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Generic API for audio codecs. -* -*/ - -#ifndef __AUDPARAMS_H__ -#define __AUDPARAMS_H__ - - -// INCLUDES - -#include - - -// CLASS DEFINITIONS -/* ------------------------------------------------------------------------------ - - TAudioCodecParams - - Audio codec parameters. - ------------------------------------------------------------------------------ -*/ -class TAudioCodecParams - { -public: - enum TParamsType - { - ETypeDecoder = 0, - ETypeEncoder - }; -public: - virtual TInt CodecId() const = 0; - virtual TInt Type() const = 0; - }; - - -/* ------------------------------------------------------------------------------ - - TAudioDecoderParams - - Decoding parameters. - ------------------------------------------------------------------------------ -*/ -class TAudioDecoderParams : public TAudioCodecParams - { -public: - IMPORT_C virtual TInt Type() const; - }; - - -/* ------------------------------------------------------------------------------ - - TAudioEncoderParams - - Encoding parameters. - ------------------------------------------------------------------------------ -*/ -class TAudioEncoderParams : public TAudioCodecParams - { -public: - IMPORT_C virtual TInt Type() const; - }; - - -#endif //__AUDPARAMS_H__ -//----------------------------------------------------------------------------- -// End of File -//----------------------------------------------------------------------------- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AAC/inc/ProcAACFrameHandler.h --- a/videoeditorengine/audioeditorengine/codecs/AAC/inc/ProcAACFrameHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCAACFRAMEHANDLER_H__ -#define __CPROCAACFRAMEHANDLER_H__ - -#include -#include "AudCommon.h" -#include "ProcConstants.h" -#include "ProcFrameHandler.h" - -#include "AACConstants.h" -#include "AACAPI.h" - -class CProcAACFrameHandler : public CProcFrameHandler - { - -public: - - // aGain -40(dB) - +20(dB) - virtual TBool ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain); - - // From base class - virtual TBool GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const; - virtual TBool GetNormalizingMargin(const HBufC8* aFrame, TInt8& aMargin) const; - - virtual ~CProcAACFrameHandler(); - - static CProcAACFrameHandler* NewL(TAACFrameHandlerInfo aAACInfo); - static CProcAACFrameHandler* NewLC(TAACFrameHandlerInfo aAACInfo); - - /* - * - * If there are several AAC frames in a row, their start positions and - * lengths can be parsed with this function - * - * @param aFrame input frame to be parsed - * @param aFrameStarts starting locations of each frame - * @param aFrameLengths frame lengths of each frame - */ - - TBool ParseFramesL(HBufC8* aFrame, RArray& aFrameStarts, RArray& aFrameLengths); - - /* - * GetEnhancedAACPlusParametersL - * - * Fills in aacPlus related fields in aProperties - * - * - * @param buf audio data - * @param bufLen lenght of "buf" - * @param aProperties properties to fill in - * @param aAACInfo info for AAC framehandler - * - */ - - static void GetEnhancedAACPlusParametersL(TUint8* buf, TInt bufLen, - TAudFileProperties* aProperties, - TAACFrameHandlerInfo *aAACInfo); - - /* - * CalculateNumberOfHeaderBytes returns the number of ADTS header bytes - * and the number of data blocks in a given frame - * - * @param aFrame input frame - * @param aNumBlocks (output) number of data blocks in the frame (usually 1) - * - * @return the number of ADTS header bytes - */ - - TInt CalculateNumberOfHeaderBytes(const HBufC8* aFrame, TInt& aNumBlocksInFrame) const; - -private: - - // constructL - void ConstructL(TAACFrameHandlerInfo aAACInfo); - - // c++ constructor - CProcAACFrameHandler(); - - // updates the ADTS header if the lenght has - // been changed after modifying AACPlus gain - TBool UpdateHeaderL(HBufC8* aFrame); - -private: - - // AAC decoder handle - CAACAudDec* iDecHandle; - - // stores the starting points of raw data blocks if there are - // more than one data block in AAC frame - RArray iFrameStarts; - - // lenghts of the data blocks - RArray iFrameLengths; - - // info needed for AAC decoder handle creation - TAACFrameHandlerInfo iAACInfo; - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AAC/inc/ProcADTSInFileHandler.h --- a/videoeditorengine/audioeditorengine/codecs/AAC/inc/ProcADTSInFileHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,161 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __CPROCADTSINFILEHANDLER_H__ -#define __CPROCADTSINFILEHANDLER_H__ - -#include -#include -#include "AudCommon.h" -#include "ProcConstants.h" -#include "ProcInFileHandler.h" -#include "AACConstants.h" -#include "ProcDecoder.h" - - - -class CProcADTSInFileHandler: public CProcInFileHandler - { - -public: - - static CProcADTSInFileHandler* NewL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - static CProcADTSInFileHandler* NewLC(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - - // From base class - - void GetPropertiesL(TAudFileProperties* aProperties); - - /** - * Seeks a certain audio frame for reading - * - * Possible leave codes: - * - * @param aTime time from the beginning of file in milliseconds - * - * @return ETrue if successful - * EFalse if beyond the file - */ - TBool SeekAudioFrame(TInt32 aTime); - - - /** - * Seeks a cut in audio frame for reading - * - * Possible leave codes: - * - * - * @return ETrue if successful - * - */ - TBool SeekCutInFrame(); - - /** - * - * Sets the normalizing gain - * - * @param aFrameHandler AAC frame handler - * - * @return ETrue if successful - */ - TBool SetNormalizingGainL(const CProcFrameHandler* aFrameHandler); - - /* - * Fills in aac info - * - * @param aAACInfo aac info - * - * @return ETrue if successful - */ - TBool GetInfoForFrameHandler(TAACFrameHandlerInfo& aAACInfo); - - - /** - * Generates decoder specific information for MP4/3GP files - * - * The caller is responsible for releasing aDecSpecInfo - * - * @param aBytes decoder specific info - * @param aBufferSize max size of decSpecInfo - * - * @return ETrue if info was generated - * EFalse if info was not generated (no need to release aFrame) - */ - TBool ReadAudioDecoderSpecificInfoL(HBufC8*& aBytes, TInt aBufferSize); - - - ~CProcADTSInFileHandler(); - - - - -private: - - // constructL - void ConstructL(const TDesC& aFileName, RFile* aFileHandle, CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, TChannelMode aChannelMode = EAudSingleChannel); - - virtual TBool GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime); - - // C++ constructor - CProcADTSInFileHandler(); - - // Find the first AAC frame - // There might be some stuff in the file before audio data (e.g. ID3 header) - TBool FindFirstAACFrame(); - - // calculates the frame length based of 4th, 5th and 6th byte of ADTS header - TUint CalculateAACFrameLength(TUint8 byte4, TUint8 byte5, TUint8 byte6); - - // fills in fields of aProperties based on ADTS header - TBool ReadHeaderInformation(TAudFileProperties* aProperties); - - // fills in the rest of the fields - TBool ReadOtherInformationL(TAudFileProperties* aProperties); - -private: - - // info for frame handler - TAACFrameHandlerInfo* iFrameInfo; - - // MP4 decoder specific info - HBufC8* iMP4DecSpecInfo; - - // offset of the first ADTS frame in a file - TUint32 iFirstFrame; - - // flag to indicate whether the file can be parsed - TBool iSupportedFile; - - // remainder if audio duration can't be handled accurately in TInt milliseconds, depends on sampling rate - TReal iAACFrameLenRemainderMilli; - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AAC/src/ProcAACFrameHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/AAC/src/ProcAACFrameHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,620 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "ProcAACFrameHandler.h" -#include "ProcFrameHandler.h" -#include "ProcTools.h" -#include "nok_bits.h" -#include "AACAPI.h" - -#include -#include - - -TBool CProcAACFrameHandler::ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain) - { - - if (aFrameIn == 0) - return EFalse; - - - TInt numBlocks = 1; - TInt headerBytes = CalculateNumberOfHeaderBytes(aFrameIn, numBlocks); - - // Unfortunately const casting is needed to avoid unecessary temporary arrays - // and we don't have a separate bitstream class for const objects - // Just have to make very sure not to modify const descriptors!! - TUint8* buf = const_cast(aFrameIn->Right(aFrameIn->Size()-headerBytes).Ptr()); - - uint8* gains = new (ELeave) uint8[16]; - uint32* gainPos = new (ELeave) uint32[16]; - - TInt bufLen = aFrameIn->Size()-headerBytes; - - TBitStream bs; - TBitStream bs2; - - BsInit(&bs, buf, bufLen); - BsInit(&bs2, buf, bufLen); - - for (TInt b = 0 ; b < numBlocks ; b++) - { - - TInt b_i = bs.buf_index; - iFrameStarts.Append(b_i+headerBytes); - - BsSaveBufState(&bs, &bs2); - - uint8 numberOfGains = GetAACGlobalGains(&bs, iDecHandle, 16, gains, gainPos); - - if (numberOfGains > 2) - { - // illegal frame?? - delete[] gainPos; - delete[] gains; - return KErrGeneral; - - } - - if (bs.buf_index > 0) - iFrameLengths.Append(bs.buf_index - b_i); - else - iFrameLengths.Append(bs.buf_len - b_i); - - if (headerBytes > 7) - { - bs.buf_index += 2; // crc - bs.slots_read += 2; - bs.bits_read += 16; - - } - - TInt tmpGain = aGain*500; - int16 newGain = static_cast(tmpGain/1500); - - - for (TInt a = 0 ; a < numberOfGains ; a++) - { - if (gains[a] + newGain > 255) - { - gains[a] = 255; - } - else if (gains[a] + newGain < 0) - { - gains[a] = 0; - } - else - { - gains[a] = static_cast(gains[a]+newGain); - } - } - - - if (iAACInfo.isSBR || iAACInfo.iIsParametricStereo) - { - - uint8 *data = new (ELeave) uint8[1024]; - CleanupStack::PushL(data); - TBitStream bsOut; - - BsInit(&bsOut, data, 1024); - - SetAACPlusGlobalGains(&bs2, &bsOut, iDecHandle, static_cast(-newGain), numberOfGains, gains, gainPos); - - TInt incBytes = (bsOut.bits_read >> 3) - bs2.buf_len; - iFrameLengths[iFrameLengths.Count()-1] +=incBytes; - - TInt newSize = aFrameIn->Size()+incBytes; - aFrameOut = HBufC8::NewL(newSize); - aFrameOut->Des().Append(aFrameIn->Left(headerBytes)); - aFrameOut->Des().Append(bsOut.bit_buffer, bsOut.bits_read >> 3); - - if (headerBytes != 0) UpdateHeaderL(aFrameOut); - - CleanupStack::Pop(data); - delete[] data; - data = 0; - - - } - else - { - SetAACGlobalGains(&bs2, numberOfGains, gains, gainPos); - aFrameOut = HBufC8::NewL(aFrameIn->Size()); - aFrameOut->Des().Copy(aFrameIn->Ptr(), aFrameIn->Size()); - - } - - - - // } - - } - delete[] gains; - delete[] gainPos; - - - return ETrue; - } - -TBool CProcAACFrameHandler::GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const - { - - - TInt numBlocks = 1; - TInt headerBytes = CalculateNumberOfHeaderBytes(aFrame, numBlocks); - - //TBitStream bs; - TUint8* buf = const_cast(aFrame->Right(aFrame->Size()-headerBytes).Ptr()); - //BsInit(&bs, buf, aFrame->Size()-headerBytes); - - uint8* gains = new (ELeave) uint8[16]; - CleanupStack::PushL(gains); - uint32* gainPos = new (ELeave) uint32[16]; - CleanupStack::PushL(gainPos); - - //TPtr8 frameWithoutHeader = aFrame->Right(aFrame->Size()-headerBytes)); - TInt bufLen = aFrame->Size()-headerBytes; - - TBitStream bs; - - - BsInit(&bs, buf, bufLen); - - - for (TInt b = 0 ; b < numBlocks ; b++) - { - - uint8 numberOfGains = GetAACGlobalGains(&bs, iDecHandle, 16, gains, gainPos); - - for (TInt a = 0 ; a < numberOfGains ; a++) - { - aGains.Append(gains[a]); - } - - if (headerBytes > 7) - { - bs.buf_index += 2; // crc - bs.slots_read += 2; - bs.bits_read += 16; - - } - - } - CleanupStack::Pop(); //(gainPos) - CleanupStack::Pop(); //(gains) - delete[] gains; - delete[] gainPos; - - aMaxGain = 255; - return EFalse; - - - - } - - -TBool CProcAACFrameHandler::GetNormalizingMargin(const HBufC8* aFrame, TInt8& aMargin) const - - { - - TUint8* buf = const_cast(aFrame->Ptr()); - TInt bufLen = aFrame->Size(); - - uint8* gains = new uint8[16]; - - uint32* gainPos = new uint32[16]; - - - TBitStream bs; - - BsInit(&bs, buf, bufLen); - - uint8 numberOfGains = GetAACGlobalGains(&bs, iDecHandle, 16, gains, gainPos); - - TUint8 maxGain = 0; - - for (TInt a = 0 ; a < numberOfGains ; a++) - { - if (gains[a] > maxGain) - { - maxGain = gains[a]; - } - } - delete[] gains; - delete[] gainPos; - - TInt marginInt = (255-maxGain)*6; - - if (marginInt > 127) - { - aMargin = 127; - } - else if (marginInt < 0) - { - aMargin = 0; - } - else - { - aMargin = static_cast(marginInt); - } - - return ETrue; - - - } - -CProcAACFrameHandler::~CProcAACFrameHandler() - { - - iFrameStarts.Reset(); - iFrameLengths.Reset(); - if (iDecHandle != 0) - { - - DeleteAACAudDec(iDecHandle); - } - - - } - -CProcAACFrameHandler* CProcAACFrameHandler::NewL(TAACFrameHandlerInfo aAACInfo) - { - - - CProcAACFrameHandler* self = NewLC(aAACInfo); - CleanupStack::Pop(self); - return self; - - } -CProcAACFrameHandler* CProcAACFrameHandler::NewLC(TAACFrameHandlerInfo aAACInfo) - { - - CProcAACFrameHandler* self = new (ELeave) CProcAACFrameHandler(); - CleanupStack::PushL(self); - self->ConstructL(aAACInfo); - return self; - - } - -void CProcAACFrameHandler::ConstructL(TAACFrameHandlerInfo aAACInfo) - { - - CreateAACAudDecL(iDecHandle, static_cast(aAACInfo.iNumChannels), - static_cast(aAACInfo.iNumCouplingChannels)); - - InitAACAudDec(iDecHandle, static_cast(aAACInfo.iProfileID), - static_cast(aAACInfo.iSampleRateID), - static_cast(aAACInfo.iIs960)); - - if(aAACInfo.isSBR) - { - uint8 isStereo; - - isStereo = (aAACInfo.iNumChannels > 1) ? 1 : 0; - - CreateAACPlusAudDecL(iDecHandle, static_cast(aAACInfo.iSampleRateID), isStereo, (uint8) 0); - } - iAACInfo = aAACInfo; - -} - -CProcAACFrameHandler::CProcAACFrameHandler() : iDecHandle(0) -{ - -} - -TInt CProcAACFrameHandler::CalculateNumberOfHeaderBytes(const HBufC8* aFrame, TInt& aNumBlocksInFrame) const - { - - if (aFrame->Size() < 7) return 0; - TBuf8<7> possibleHeader(aFrame->Left(7)); - - TUint8 byte2 = possibleHeader[1]; - TBuf8<8> byte2b; - ProcTools::Dec2Bin(byte2, byte2b); - TUint8 byte7 = possibleHeader[6]; - - // lets confirm that we have found a legal AAC header - if (possibleHeader[0] == 0xFF && - byte2b[0] == '1' && - byte2b[1] == '1' && - byte2b[2] == '1' && - byte2b[3] == '1' && - // byte2b[4] == '1' && - byte2b[5] == '0' && - byte2b[6] == '0') - { - - aNumBlocksInFrame = (byte7 & 0x3)+1; - - - // protection_absent -> the last bit of the second byte - if (byte2b[7] == '0') - { - return 9 + 2*(aNumBlocksInFrame-1); - } - else - { - return 7; - } - - - - - - } - else - { - // it seems like a raw data block - return 0; - - - - } - } - - - -TBool CProcAACFrameHandler::ParseFramesL(HBufC8* aFrame, RArray& aFrameStarts, RArray& aFrameLengths) -{ - if (iFrameStarts.Count() > 0) - { - for (TInt a = 0 ; a < iFrameStarts.Count() ; a++) - { - aFrameStarts.Append(iFrameStarts[a]); - aFrameLengths.Append(iFrameLengths[a]); - } - iFrameStarts.Reset(); - iFrameLengths.Reset(); - return ETrue; - } - else - { - - TInt numBlocks = 1; - TInt headerBytes = CalculateNumberOfHeaderBytes(aFrame, numBlocks); - if (headerBytes > 0) - { - //TBuf8 hB(aFrame->Left(headerBytes)); - - - } - - //TBitStream bs; - TUint8* buf = const_cast(aFrame->Right(aFrame->Size()-headerBytes).Ptr()); - //BsInit(&bs, buf, aFrame->Size()-headerBytes); - - uint8* gains = new (ELeave) uint8[16]; - CleanupStack::PushL(gains); - uint32* gainPos = new (ELeave) uint32[16]; - CleanupStack::PushL(gainPos); - - //TPtr8 frameWithoutHeader = aFrame->Right(aFrame->Size()-headerBytes)); - TInt bufLen = aFrame->Size()-headerBytes; - - TBitStream bs; - - BsInit(&bs, buf, bufLen); - - for (TInt b = 0 ; b < numBlocks ; b++) - { - - TInt b_i = bs.buf_index; - iFrameStarts.Append(b_i+headerBytes); - - uint8 numberOfGains = GetAACGlobalGains(&bs, iDecHandle, 16, gains, gainPos); - if (numberOfGains > 2) - { - CleanupStack::Pop(); // gainPos - CleanupStack::Pop(); // gains - delete[] gains; - delete[] gainPos; - return EFalse; - - } - - if (bs.buf_index > 0) - iFrameLengths.Append(bs.buf_index - b_i); - else - iFrameLengths.Append(bs.buf_len - b_i); - - if (headerBytes > 7) - { - bs.buf_index += 2; // crc - bs.slots_read += 2; - bs.bits_read += 16; - - } - - } - CleanupStack::Pop(); // gainPos - CleanupStack::Pop(); // gains - delete[] gains; - delete[] gainPos; - - - - for (TInt c = 0 ; c < iFrameStarts.Count() ; c++) - { - aFrameStarts.Append(iFrameStarts[c]); - aFrameLengths.Append(iFrameLengths[c]); - } - iFrameStarts.Reset(); - iFrameLengths.Reset(); - return ETrue; - - } - - - - -} - - - -TBool CProcAACFrameHandler::UpdateHeaderL(HBufC8* aFrame) - { - - _LIT8(KZero, "0"); - - TInt frameLength = aFrame->Size(); - - HBufC8* lenBin; - ProcTools::Dec2BinL(frameLength, lenBin); - - HBufC8* len13Bin = HBufC8::NewL(13); - TInt zerosNeeded = 13-lenBin->Size(); - - TPtr8 framePtr(aFrame->Des()); - for (TInt w = 0 ; w < zerosNeeded ; w++) - { - len13Bin->Des().Append(_L8("0")); - } - len13Bin->Des().Append(lenBin->Des()); - - if (len13Bin->Mid(0,1).Compare(KZero) == 0) - { - framePtr[3] &= 0xFD; // 1111 1101 - } - else - { - framePtr[3] |= 2; - } - - if (len13Bin->Mid(1,1).Compare(KZero) == 0) - { - framePtr[3] &= 0xFE; // 1111 1110 - - } - else - { - framePtr[3] |= 1; - } - - - TUint byte5 = 0; - ProcTools::Bin2Dec(len13Bin->Mid(2,8),byte5); - framePtr[4] = static_cast(byte5); - - if (len13Bin->Mid(10,1).Compare(KZero) == 0) - { - framePtr[5] &= 0x7F; - - } - else - { - framePtr[5] |= 0x80; - } - - if (len13Bin->Mid(11,1).Compare(KZero) == 0) - { - framePtr[5] &= 0xBF; - - } - else - { - framePtr[5] |= 0x40; - } - - if (len13Bin->Mid(12,1).Compare(KZero) == 0) - { - framePtr[5] &= 0xDF; - - } - else - { - framePtr[5] |= 0x20; - } - delete lenBin; - delete len13Bin; - return ETrue; - } - - - -void CProcAACFrameHandler:: -GetEnhancedAACPlusParametersL(TUint8* buf, TInt bufLen, - TAudFileProperties* aProperties, - TAACFrameHandlerInfo *aAACInfo) -{ - TBitStream bs; - uint8 sbrStatus; - int16 bytesInFrame; - CAACAudDec* decHandle = 0; - - //-- No SBR by default. --// - aAACInfo->isSBR = 0; - aAACInfo->iIsParametricStereo = 0; - aProperties->iAudioTypeExtension = EAudExtensionTypeNoExtension; - aProperties->iChannelModeExtension = EAudChannelModeNotRecognized; - - //-- Create AAC handle. --// - CreateAACAudDecL(decHandle, - static_cast(aAACInfo->iNumChannels), - static_cast(aAACInfo->iNumCouplingChannels)); - CleanupStack::PushL(decHandle); - - //-- Initialize AAC handle. --/ - InitAACAudDec(decHandle, - static_cast(aAACInfo->iProfileID), - static_cast(aAACInfo->iSampleRateID), - static_cast(aAACInfo->iIs960)); - - //-- Create SBR handle on top of the AAC handle. -- - sbrStatus = CreateAACPlusAudDecL(decHandle, static_cast(aAACInfo->iSampleRateID), - (uint8) ((aAACInfo->iNumChannels > 1) ? 1 : 0), - (uint8) 0); - - if(sbrStatus) - { - //-- Initialize bitstream. -- - BsInit(&bs, buf, bufLen); - - //-- Parse the AAC frame. --/ - CountAACChunkLength(&bs, decHandle, &bytesInFrame); - - //-- Were any SBR elements found? -- - if(IsAACSBREnabled(decHandle)) - { - aAACInfo->isSBR = 1; - aProperties->iAudioTypeExtension = EAudExtensionTypeEnhancedAACPlus; - - aAACInfo->iIsParametricStereo = IsAACParametricStereoEnabled(decHandle); - - if(aAACInfo->iIsParametricStereo) - { - aProperties->iChannelModeExtension = EAudParametricStereoChannel; - aProperties->iAudioTypeExtension = EAudExtensionTypeEnhancedAACPlusParametricStereo; - } - } - } - - - //-- Delete resources. --/ - CleanupStack::Pop(decHandle); - if(decHandle != 0) - { - DeleteAACAudDec(decHandle); - } - - decHandle = 0; -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AAC/src/ProcADTSInFileHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/AAC/src/ProcADTSInFileHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1028 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include -#include -#include "AudCommon.h" -#include "ProcConstants.h" -#include "ProcADTSInFileHandler.h" -//#include "mp4aud.h" -#include "mp4config.h" -#include "audconstants.h" - -#include "ProcTools.h" -#include "ProcAACFrameHandler.h" - - - -CProcADTSInFileHandler* CProcADTSInFileHandler::NewL(const TDesC& aFileName, RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate, TChannelMode aChannelMode) - { - - CProcADTSInFileHandler* self = NewLC(aFileName, aFileHandle, aClip, aReadBufferSize, aTargetSampleRate, aChannelMode); - CleanupStack::Pop(self); - return self; - - } - -CProcADTSInFileHandler* CProcADTSInFileHandler::NewLC(const TDesC& aFileName, RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, TInt aTargetSampleRate, - TChannelMode aChannelMode) - - { - - CProcADTSInFileHandler* self = new (ELeave) CProcADTSInFileHandler(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aFileHandle, aClip, aReadBufferSize, aTargetSampleRate, aChannelMode); - return self; - - } - -void CProcADTSInFileHandler::GetPropertiesL(TAudFileProperties* aProperties) - { - - if (iProperties != 0) - { - *aProperties = *iProperties; - return; - } - - aProperties->iDuration = 0; - aProperties->iSamplingRate = 0; - aProperties->iBitrate = 0; - aProperties->iChannelMode = EAudChannelModeNotRecognized; - aProperties->iFrameLen = 0; - aProperties->iFrameCount = 0; - - aProperties->iAudioType = EAudTypeUnrecognized; - aProperties->iAudioTypeExtension = EAudExtensionTypeNoExtension; - aProperties->iFileFormat = EAudFormatUnrecognized; - aProperties->iBitrateMode = EAudBitrateModeNotRecognized; - aProperties->iFrameDuration = 0; - aProperties->iNumFramesPerSample = 1; - aProperties->iChannelModeExtension = EAudChannelModeNotRecognized; - aProperties->iAACObjectType = EAudAACObjectTypeNone; - - if (!iSupportedFile) - { - User::Leave(KErrNotSupported); - return; - } - - ReadHeaderInformation(aProperties); - ReadOtherInformationL(aProperties); - - aProperties->iBitrateMode = EAudConstant; - - if (iProperties == 0) - { - iProperties = new (ELeave) TAudFileProperties; - *iProperties = *aProperties; - } - - } - - -TBool CProcADTSInFileHandler::SeekAudioFrame(TInt32 aTime) - { - - if (!iSupportedFile) - { - return EFalse; - } - - if (aTime == 0) - { - FindFirstAACFrame(); - iCurrentTimeMilliseconds = aTime; - return ETrue; - } - - else FindFirstAACFrame(); - - TBuf8<6> header; - - if(BufferedFileRead(header, 6) != 6) - { - return EFalse; - } - - if (header.Length() != 6) - { - return EFalse; - } - - TUint8 byte2 = header[1]; - TBuf8<8> byte2b; - ProcTools::Dec2Bin(byte2, byte2b); - // lets confirm that we have found a legal AAC header - if (header[0] == 0xFF && - byte2b[0] == '1' && - byte2b[1] == '1' && - byte2b[2] == '1' && - byte2b[3] == '1' && - //byte2b[4] == '1' && - byte2b[5] == '0' && - byte2b[6] == '0') - { - } - else - { - return EFalse; - } - - TUint8 byte4 = header[3]; - TUint8 byte5 = header[4]; - TUint8 byte6 = header[5]; - - TUint frameLen = CalculateAACFrameLength(byte4, byte5, byte6); - //aFrame = HBufC8::NewL(frameLen); - - TInt dur = 0; - - while (BufferedFileSetFilePos(iFilePos-6+frameLen)) - { - - dur = dur + ProcTools::MilliSeconds(iProperties->iFrameDuration); - if (dur > aTime) - { - break; - } - - if(BufferedFileRead(header, 6) != 6) - { - break; - } - - if (header.Length() != 6) - { - break; - } - - if (header[0] != 0xFF) break; - byte4 = header[3]; - byte5 = header[4]; - byte6 = header[5]; - - frameLen = CalculateAACFrameLength(byte4, byte5, byte6); - - } - - - aTime = dur; - iCurrentTimeMilliseconds = aTime; - return ETrue; - } - -TBool CProcADTSInFileHandler::SeekCutInFrame() - { - iCurrentTimeMilliseconds = iCutInTime; - return SeekAudioFrame(iCutInTime); - } - - - - -TBool CProcADTSInFileHandler::SetNormalizingGainL(const CProcFrameHandler* aFrameHandler) - { - - - HBufC8* point = 0; - TInt siz; - TInt32 tim = 0; - TInt maxGain = 0; - RArray gains; - TInt maxAverage = 0; - TInt tmpGain = 0; - TInt gainCounter = 0; - TInt timeNow = 0; - while(GetEncAudioFrameL(point, siz, tim)) - { - CleanupStack::PushL(point); - - aFrameHandler->GetGainL(point, gains, maxGain); - timeNow += tim; - - for (TInt a = 0 ; a < gains.Count() ; a++) - { - tmpGain += gains[a]; - gainCounter++; - } - gains.Reset(); - - if (timeNow > 1000) - { - if (tmpGain/gainCounter > maxAverage) - { - maxAverage = tmpGain/gainCounter; - } - - timeNow = 0; - tmpGain = 0; - gainCounter = 0; - } - - CleanupStack::PopAndDestroy(point); - - } - - // bigger value makes normalizing more efficient, but makes - // dynamic compression more likely to occur - TInt NormalizingFactor = 175; - if (iProperties->iBitrate > 20000 && iProperties->iBitrate < 40000) - { - - // 32 kBit/s - NormalizingFactor = 170; - - } - else if (iProperties->iBitrate > 80000 && iProperties->iBitrate < 110000) - { - // 96 kBit/s - NormalizingFactor = 170; - - } - - - else if (iProperties->iBitrate > 110000 && iProperties->iBitrate < 140000) - { - // 128 kBit/s - if (iProperties->iChannelMode == EAudSingleChannel) - NormalizingFactor = 160; - else - NormalizingFactor = 170; - - } - else if (iProperties->iBitrate > 150000) - { - // 256 kBit/s - if (iProperties->iChannelMode == EAudSingleChannel) - NormalizingFactor = 150; - else - NormalizingFactor = 165; - - } - else - { - - if (iProperties->iChannelMode == EAudSingleChannel) - NormalizingFactor = 170; - - } - - - TInt gainBoost = (NormalizingFactor-maxAverage)*3; - - if (gainBoost < 0) gainBoost = 0; - - iNormalizingMargin = static_cast(gainBoost); - - return ETrue; - - } - - -TBool CProcADTSInFileHandler::ReadAudioDecoderSpecificInfoL(HBufC8*& aBytes, TInt aBufferSize) - { - - if (aBufferSize < iMP4DecSpecInfo->Size()) return EFalse; - - if (iMP4DecSpecInfo != 0) - { - aBytes = HBufC8::NewL(iMP4DecSpecInfo->Size()); - aBytes->Des().Append(iMP4DecSpecInfo->Des()); - return ETrue; - } - else - { - aBytes = 0; - return EFalse; - } - - } - - -CProcADTSInFileHandler::~CProcADTSInFileHandler() - { - ResetAndCloseFile(); - - if (iSilentFrame != 0) - { - delete iSilentFrame; - } - - if (iMP4DecSpecInfo != 0) - { - delete iMP4DecSpecInfo; - - } - - - if (iFrameInfo != 0) - { - delete iFrameInfo; - - } - - delete iFrameHandler; - - delete iDecoder; - - } - - -void CProcADTSInFileHandler::ConstructL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - - - iTargetSampleRate = aTargetSampleRate; - iChannelMode = aChannelMode; - - InitAndOpenFileL(aFileName, aFileHandle, aReadBufferSize); - - if (aClip != 0) - { - iCutInTime = ProcTools::MilliSeconds(aClip->CutInTime()); - - } - - TBool frameFound = FindFirstAACFrame(); - - if (!frameFound) - { - iSupportedFile = EFalse; - return; - } - - iClip = aClip; - - TAudFileProperties prop; - iFrameInfo = new (ELeave) TAACFrameHandlerInfo; - GetPropertiesL(&prop); - - if (prop.iAudioTypeExtension != EAudExtensionTypeNoExtension) - { - // AACPlus frame duration is calculated from sampling rate - // the actual sampling rate of AAC plus is twice as high as - // the AAC part - iProperties->iFrameDuration = iProperties->iFrameDuration.Int64()/2; - - } - - // fill in aacInfo for retrieving decoder specific information - //AACStreamInfo aacInfo; - int16 frameLen = 0; - int32 sampleRate = 0; - uint8 profile = 0; - uint8 nChannels = 0; - - // generate a silent frame ------------------> - - if (iProperties->iChannelMode == EAudSingleChannel) - { - - iSilentFrame = HBufC8::NewL(KSilentMonoAACFrameLenght); - - iSilentFrame->Des().Append(KSilentMonoAACFrame, KSilentMonoAACFrameLenght); - - nChannels = 1; - } - else if (iProperties->iChannelMode == EAudStereo) - { - - iSilentFrame = HBufC8::NewL(KSilentStereoAACFrameLenght); - iSilentFrame->Des().Append(KSilentStereoAACFrame, KSilentStereoAACFrameLenght); - - nChannels = 2; - } - else - { - User::Leave(KErrNotSupported); - } - - // Check that the sample rate is supported - if( (iProperties->iSamplingRate != KAedSampleRate8kHz) && - (iProperties->iSamplingRate != KAedSampleRate11kHz) && - (iProperties->iSamplingRate != KAedSampleRate16kHz) && - (iProperties->iSamplingRate != KAedSampleRate22kHz) && - (iProperties->iSamplingRate != KAedSampleRate24kHz) && - (iProperties->iSamplingRate != KAedSampleRate32kHz) && - (iProperties->iSamplingRate != KAedSampleRate44kHz) && - (iProperties->iSamplingRate != KAedSampleRate48kHz) ) - { - User::Leave(KErrNotSupported); - } - - - - uint8 decSpecInfo[16]; - int16 nConfigBytes; - - - frameLen = 1024; - sampleRate = iProperties->iSamplingRate; - if (iFrameInfo->iProfileID == 3) - { - profile = LTP_OBJECT; - } - else if (iFrameInfo->iProfileID == 1) - { - profile = LC_OBJECT; - } - else - { - User::Leave(KErrNotSupported); - } - - //nConfigBytes = AACGetMP4ConfigInfo(&aacInfo, decSpecInfo, 16); - nConfigBytes = AACGetMP4ConfigInfo(sampleRate, profile, - nChannels, frameLen, decSpecInfo, 16); - - - if (nConfigBytes > 0) - { - - iMP4DecSpecInfo = HBufC8::NewL(nConfigBytes); - iMP4DecSpecInfo->Des().Append(decSpecInfo, nConfigBytes); - - } - - - mp4_u32 frameDurationMilli = ProcTools::MilliSeconds(iProperties->iFrameDuration); - - iSilentFrameDuration = frameDurationMilli; - - - // <------------------generate a silent frame - - // Generate a decoder -----------------------> - - iDecoder = CProcDecoder::NewL(); - - iDecodingPossible = iDecoder->InitL(*iProperties, aTargetSampleRate, aChannelMode); - - // <----------------------- Generate a decoder - - // Create a frame handler ---------------------> - - iFrameHandler = CProcAACFrameHandler::NewL(*iFrameInfo); - - if (iClip != 0 && iClip->Normalizing()) - { - SetNormalizingGainL(iFrameHandler); - } - - - } - - - - -TBool CProcADTSInFileHandler::GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime) - { - - if (!iSupportedFile) - { - return EFalse; - } - - - TBuf8<7> header; - - if(BufferedFileRead(header, 7) != 7) - { - return EFalse; - } - - if (header.Length() != 7) - { - return EFalse; - } - - if (header[0] != 0xFF) return EFalse; - TUint8 byte4 = header[3]; - TUint8 byte5 = header[4]; - TUint8 byte6 = header[5]; -// TUint8 byte7 = header[6]; - - - TInt frameLen = CalculateAACFrameLength(byte4, byte5, byte6); - aFrame = HBufC8::NewL(frameLen); - - BufferedFileSetFilePos(iFilePos-7); - TPtr8 tmpDes((TPtr8)aFrame->Des()); - - if (BufferedFileRead((TPtr8&)tmpDes, frameLen) != frameLen) - { - delete aFrame; - aFrame = 0; - return EFalse; - } - - aSize = frameLen; - aTime = ProcTools::MilliSeconds(iProperties->iFrameDuration); - - // remove ADTS header --------------------------------------------> - - TInt headerLength = 0; // because we need to remove header in case of AAC frame from .aac files - //check Header length to be removed from the frame before writting to 3gp file - TUint8* dtPtr = (TUint8*)(aFrame->Ptr()); - if((dtPtr[1]&& 0x01) == 0x00) //based on bytes decide header length to remove - { - headerLength =9; - } - else if((dtPtr[1]&& 0x01)== 0x01) - { - headerLength =7; - } - else - { - headerLength =0; - } - - aFrame->Des().Delete(0,headerLength); - aSize -= headerLength; - - // <--------------------------------------------- remove ADTS header - - iCurrentTimeMilliseconds += ProcTools::MilliSeconds(iProperties->iFrameDuration); - - - // Fix for synchronizing problem ----------------------------------> - // If the accurate frame length cannot be represented in milliseconds - // store the remainder and increase the output frame lenght by one ms - // when needed. Accuracy depends on sampling rate - - TReal accurateFrameLen = TReal(1024000)/iProperties->iSamplingRate; - - iAACFrameLenRemainderMilli += accurateFrameLen - aTime; - - if (iAACFrameLenRemainderMilli > 1) - { - aTime += 1; - iCurrentTimeMilliseconds += 1; - iAACFrameLenRemainderMilli -= 1; - } - - - // <---------------------------------- Fix for synchronizing problem - - - if (iProperties->iAudioTypeExtension == EAudExtensionTypeNoExtension) - { - - - // AACPlus is handled after decoding - - TRAPD(err, ManipulateGainL(aFrame)); - - if (err != KErrNone) - { - // something went wrong with the gain manipulation - // continue by returning the original frame - } - } - - - aSize = aFrame->Size(); - - return ETrue; - - - } - -CProcADTSInFileHandler::CProcADTSInFileHandler() : CProcInFileHandler(), iFrameInfo(0), - iSupportedFile(ETrue) - { - - - } - - -TBool CProcADTSInFileHandler::FindFirstAACFrame() - { - - TBuf8<8> byte2b; - TUint8 byte2; - TUint8 byte1; - - TBool fileEnded = EFalse; - TUint ind = 0; - TBool frameFound = EFalse; - - BufferedFileSetFilePos(0); - - while (!fileEnded) - { - if (BufferedFileReadChar(ind, byte1) == 0) - { - fileEnded = ETrue; - } - ind++; - - if (byte1 != 0xFF) continue; - - - if (BufferedFileReadChar(ind, byte2) == 0) - { - fileEnded = ETrue; - } - ind++; - ProcTools::Dec2Bin(byte2, byte2b); - - - if (byte1 == 0xFF && - byte2b[0] == '1' && - byte2b[1] == '1' && - byte2b[2] == '1' && - byte2b[3] == '1' && - //byte2b[4] == '1' && - byte2b[5] == '0' && - byte2b[6] == '0') - { - - // this looks like AAC frame header, let's confirm... - TUint8 byte3, byte4, byte5, byte6; - BufferedFileReadChar(ind, byte3); - BufferedFileReadChar(ind+1, byte4); - BufferedFileReadChar(ind+2, byte5); - BufferedFileReadChar(ind+3, byte6); - - ind++; - - TUint frameLength = CalculateAACFrameLength(byte4, byte5, byte6); - - TUint8 testByte1, testByte2, testByte3; - BufferedFileReadChar(ind+frameLength-3, testByte1); - BufferedFileReadChar(ind+frameLength-2, testByte2); - BufferedFileReadChar(ind+frameLength-1, testByte3); - - if (byte1 == testByte1 && byte2 == testByte2 - && byte3 == testByte3) - { - // this must be the header... - iFirstFrame = ind-3; - //FillInHeaderValues(byte2, byte3, byte4); - frameFound = ETrue; - break; - } - - } - - } - if (frameFound) - { - BufferedFileSetFilePos(iFirstFrame); - } - - return frameFound; - } - - -TUint CProcADTSInFileHandler::CalculateAACFrameLength(TUint8 byte4, TUint8 byte5, TUint8 byte6) - { - - TBuf8<13> headerLengthB; - TBuf8<8> byte4b, byte5b, byte6b; - ProcTools::Dec2Bin(byte4, byte4b); - ProcTools::Dec2Bin(byte5, byte5b); - ProcTools::Dec2Bin(byte6, byte6b); - - headerLengthB.Append(byte4b[6]); - headerLengthB.Append(byte4b[7]); - headerLengthB.Append(byte5b); - headerLengthB.Append(byte6b[0]); - headerLengthB.Append(byte6b[1]); - headerLengthB.Append(byte6b[2]); - - - TUint headerLength = 0; - TLex8 leks(headerLengthB); - - if (leks.Val(headerLength, EBinary) != KErrNone) - { - return 0; - } - - return headerLength; - -} - - -TBool CProcADTSInFileHandler::ReadHeaderInformation(TAudFileProperties* aProperties) - { - - TInt origFilePos = iFilePos; - - if (aProperties == 0) - return EFalse; - - TBuf8<4> header; - - if(BufferedFileRead(header, 4) != 4) - { - BufferedFileSetFilePos(origFilePos); - return EFalse; - } - - if (header.Length() != 4) - { - BufferedFileSetFilePos(origFilePos); - return EFalse; - } - - TUint8 byte2 = header[1]; - TBuf8<8> byte2b; - ProcTools::Dec2Bin(byte2, byte2b); - // lets confirm that we have found a legal AAC header - if (header[0] == 0xFF && - byte2b[0] == '1' && - byte2b[1] == '1' && - byte2b[2] == '1' && - byte2b[3] == '1' && - //byte2b[4] == '1' && - byte2b[5] == '0' && - byte2b[6] == '0') - { - // OK - aProperties->iFileFormat = EAudFormatAAC_ADTS; - // aProperties->iFrameDuration = 23000; - } - else - { - return EFalse; - } - /* - if (byte2b[4] == '1') - { - aProperties->iAudioType = EAudAAC_MPEG2; - } - else - { - aProperties->iAudioType = EAudAAC_MPEG4; - } - */ - - // NOTE: call all MPeg audio EAudAAC_MPEG4 - aProperties->iAudioType = EAudAAC_MPEG4; - - - TUint8 byte3 = header[2]; - TUint8 byte4 = header[3]; - - TBuf8<8> byte3b; - TBuf8<8> byte4b; - - ProcTools::Dec2Bin(byte2, byte2b); - ProcTools::Dec2Bin(byte3, byte3b); - ProcTools::Dec2Bin(byte4, byte4b); - - TBuf8<2> profileId(byte3b.Left(2)); - TUint proID = 0; - ProcTools::Bin2Dec(profileId, proID); - - iFrameInfo->iProfileID = static_cast(proID); - aProperties->iAACObjectType = TAudAACObjectType(iFrameInfo->iProfileID); - - - TBuf8<4> samplingRateIndexB; - samplingRateIndexB.Append(byte3b[2]); - samplingRateIndexB.Append(byte3b[3]); - samplingRateIndexB.Append(byte3b[4]); - samplingRateIndexB.Append(byte3b[5]); - - TUint srIndex = 0; - TLex8 lek(samplingRateIndexB); - - if (lek.Val(srIndex, EBinary) != KErrNone) - { - BufferedFileSetFilePos(origFilePos); - return EFalse; - } - // aac sampling rates - - const TInt KAAC_SAMPLING_RATES[16] = {96000,88200,64000,48000,44100,32000,24000 - ,22050,16000,12000,11025,8000,0,0,0,0}; - - iFrameInfo->iSampleRateID = static_cast(srIndex); - aProperties->iSamplingRate = KAAC_SAMPLING_RATES[srIndex]; - samplingRateIndexB.Delete(0, samplingRateIndexB.Length()); - - // channel configuration - - - TUint aacChannels = 0; - TBuf8<3> channelB; - channelB.Append(byte3b[7]); - channelB.Append(byte4b[0]); - channelB.Append(byte4b[1]); - - TLex8 leks2(channelB); - if (leks2.Val(aacChannels, EBinary) != KErrNone) - { - BufferedFileSetFilePos(origFilePos); - return EFalse; - } - - if (aacChannels == 1) - { - aProperties->iChannelMode = EAudSingleChannel; - } - else if (aacChannels == 2) - { - aProperties->iChannelMode = EAudStereo; - } - - iFrameInfo->iNumChannels = static_cast(aacChannels); - iFrameInfo->iNumCouplingChannels = 0; - iFrameInfo->iIs960 = 0; - - - BufferedFileSetFilePos(origFilePos); - return ETrue; - - } - - -TBool CProcADTSInFileHandler::ReadOtherInformationL(TAudFileProperties* aProperties) - { - - TInt origFilePos = iFilePos; - - FindFirstAACFrame(); - - TBuf8<7> header; - - if(BufferedFileRead(header, 7) != 7) - { - return EFalse; - } - - if (header.Length() != 7) - { - return EFalse; - } - - TUint8 byte2 = header[1]; - TBuf8<8> byte2b; - ProcTools::Dec2Bin(byte2, byte2b); - // lets confirm that we have found a legal AAC header - if (header[0] == 0xFF && - byte2b[0] == '1' && - byte2b[1] == '1' && - byte2b[2] == '1' && - byte2b[3] == '1' && - // byte2b[4] == '1' && - byte2b[5] == '0' && - byte2b[6] == '0') - { - // OK - //aProperties->iAudioType = EAudAAC; - //aProperties->iFileFormat = EAudFormatAAC_ADTS; - } - else - { - return EFalse; - } - - TUint8 byte4 = header[3]; - TUint8 byte5 = header[4]; - TUint8 byte6 = header[5]; - - aProperties->iFrameDuration = ((1024*1000)/(aProperties->iSamplingRate))*1000; - - TInt frameLen = CalculateAACFrameLength(byte4, byte5, byte6); - - - - - /*-- Allocate resources and read 1st frame. --*/ - HBufC8 *aFrame = HBufC8::NewL(frameLen); - CleanupStack::PushL(aFrame); - - TPtr8 tmpDes((TPtr8)aFrame->Des()); - - BufferedFileRead((TPtr8&)tmpDes, frameLen - 7); - - - const TInt KShortestAACFrame = 20; - - if (frameLen > KShortestAACFrame) // a silent frame? - { - - - - /* - * Get frame parameters for eAAC+ codec. It is possible that the bitstream - * is plain AAC but we don't know it before the 1st frame is parsed! - */ - - TUint8* buf = const_cast(aFrame->Right(aFrame->Size()).Ptr()); - CProcAACFrameHandler::GetEnhancedAACPlusParametersL(buf, frameLen - 7, aProperties, iFrameInfo); - - } - else - { - iFrameInfo->iIsParametricStereo = EFalse; - iFrameInfo->isSBR = EFalse; - - } - - CleanupStack::Pop(aFrame); - delete aFrame; - aFrame = 0; - - - - - - if(BufferedFileRead(header, 7) != 7) - { - return EFalse; - } - - if (header.Length() != 7) - { - return EFalse; - } - - byte4 = header[3]; - byte5 = header[4]; - byte6 = header[5]; - - TInt dur = ProcTools::MilliSeconds(aProperties->iFrameDuration); - TInt bytes = frameLen; - TInt frames = 1; - - frameLen = CalculateAACFrameLength(byte4, byte5, byte6); - - while (BufferedFileSetFilePos(iFilePos-7+frameLen)) - { - - dur += ProcTools::MilliSeconds(aProperties->iFrameDuration); - bytes += frameLen; - frames++; - - if(BufferedFileRead(header, 7) != 7) - { - break; - } - - if (header.Length() != 7) - { - break; - } - - if (header[0] != 0xFF) break; - byte4 = header[3]; - byte5 = header[4]; - byte6 = header[5]; - - frameLen = CalculateAACFrameLength(byte4, byte5, byte6); - - } - - TTimeIntervalMicroSeconds tmp((TInt64)(TInt)dur*1000); - aProperties->iDuration = tmp; - - aProperties->iFrameCount = frames; - aProperties->iFrameLen = bytes/frames; - aProperties->iBitrate = (iFilePos*1000/(dur))*8; - - - BufferedFileSetFilePos(origFilePos); - - return ETrue; - } - -TBool CProcADTSInFileHandler::GetInfoForFrameHandler(TAACFrameHandlerInfo& aAACInfo) - { - - aAACInfo = *iFrameInfo; - return ETrue; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AMR/inc/ProcAMRFrameHandler.h --- a/videoeditorengine/audioeditorengine/codecs/AMR/inc/ProcAMRFrameHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCAMRFRAMEHANDLER_H__ -#define __CPROCAMRFRAMEHANDLER_H__ - -#include -#include - -#include "AudCommon.h" -#include "ProcConstants.h" -#include "ProcFrameHandler.h" - -class CProcAMRFrameHandler : public CProcFrameHandler - { - -public: - - /* - * Symbian constructors and a destructor - */ - - static CProcAMRFrameHandler* NewL(); - static CProcAMRFrameHandler* NewLC(); - - virtual ~CProcAMRFrameHandler(); - - // From base class CProcFrameHandler - virtual TBool ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain); - virtual TBool GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const; - virtual TBool GetNormalizingMargin(const HBufC8* aFrame, TInt8& aMargin) const; - - -private: - - // constructL - void ConstructL(); - - // c++ constructor - CProcAMRFrameHandler(); - - // internal function to read AMR gains - TBool GetAMRGains(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const; - - // gets the length of the next frame based on mode myte - TInt GetNextFrameLength(const HBufC8* aFrame, TInt aPosNow); - - TBool GetGPGains(const HBufC8* aFrame, RArray& aGains) const; - - // member variables for energy calculation - mutable TReal iPreviousEnergy; - mutable TReal iPreviousRn[4]; - - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AMR/inc/ProcAMRInFileHandler.h --- a/videoeditorengine/audioeditorengine/codecs/AMR/inc/ProcAMRInFileHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __CPROCAMRINFILEHANDLER_H__ -#define __CPROCAMRINFILEHANDLER_H__ - -#include -#include -#include "AudCommon.h" -#include "ProcConstants.h" -#include "ProcInFileHandler.h" -#include "AudClip.h" - -#include "ProcDecoder.h" - - -class CProcAMRInFileHandler: public CProcInFileHandler - { - -public: - - static CProcAMRInFileHandler* NewL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - static CProcAMRInFileHandler* NewLC(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - - // From base class - - void GetPropertiesL(TAudFileProperties* aProperties); - - /** - * Seeks a certain audio frame for reading - * - * Possible leave codes: - * - * @param aFrameIndex frame index - * @param aTime time from the beginning of file in milliseconds - * - * @return ETrue if successful - * EFalse if beyond the file - */ - TBool SeekAudioFrame(TInt32 aTime); - - - /** - * Seeks a cut in audio frame for reading - * - * Possible leave codes: - * - * - * @return ETrue if successful - * - */ - TBool SeekCutInFrame(); - - virtual TBool SetNormalizingGainL(const CProcFrameHandler* aFrameHandler); - - virtual ~CProcAMRInFileHandler(); - - - - -private: - - void ConstructL(const TDesC& aFileName, RFile* aFileHandle, CAudClip* aClip, - TInt aReadBufferSize, TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - virtual TBool GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime); - - - - // durations in milliseconds - virtual TBool GetFrameInfo(TInt& aSongDuration, - TInt& aFrameAmount, - TInt& aAverageFrameDuration, - TInt& aAverageFrameSize); - - TInt iLastDRCL; - - -protected: - - CProcAMRInFileHandler(); - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AMR/src/ProcAMRFrameHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/AMR/src/ProcAMRFrameHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,895 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "ProcAMRFrameHandler.h" -#include "ProcFrameHandler.h" -#include "ProcTools.h" - -#include - - -TBool CProcAMRFrameHandler::ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain) -{ - - aFrameOut = HBufC8::NewLC(aFrameIn->Size()); - - if (aFrameIn->Size() == 1) // noData element - { - aFrameOut->Des().Append(aFrameIn[0]); - CleanupStack::Pop(); // aFrameOut - - return ETrue; - } - - - aGain = static_cast(aGain/2); - - - TInt posNow = 0; - TInt nextFrameLength = 1; - - while (nextFrameLength > 0) - { - - nextFrameLength = GetNextFrameLength(aFrameIn, posNow); - if (nextFrameLength < 1) break; - - if (nextFrameLength + posNow > aFrameIn->Size()) - { - // something wrong with the frame, return the original - aFrameOut->Des().Append(aFrameIn[0]); - CleanupStack::Pop(); // aFrameOut - return ETrue; - } - - HBufC8* tmpFrame = HBufC8::NewLC(nextFrameLength); - tmpFrame->Des().Copy(aFrameIn->Mid(posNow, nextFrameLength)); - - posNow += nextFrameLength; - - - const TUint8 ch = (*tmpFrame)[0]; - - TUint dec_mode = (enum Mode)((ch & 0x0078) >> 3); - - TInt maxGain; - - RArray gains; - GetAMRGains(tmpFrame, gains, maxGain); - - - TInt gamma10000 = KAmrGain_dB2Gamma[aGain+127]; - - TInt a = 0; - TInt old_gain, old_gain1 = 0; - TInt old_pitch, old_pitch1 = 0; - TInt new_gain, new_gain1 = 0; - TInt8 new_index = 0; - - - - switch (dec_mode){ - case 0: - - for (a = 0; a < gains.Count()-1 ; a+=4) - { - - old_gain = gains[a+1]; - new_gain = static_cast((gamma10000*old_gain)/10000); - old_pitch = gains[a]; - - old_gain1 = gains[a+3]; - new_gain1 = static_cast((gamma10000*old_gain1)/10000); - old_pitch1 = gains[a+2]; - - - new_index = ProcTools::FindNewIndex475VQ(new_gain, - old_pitch, - new_gain1, - old_pitch1); - - if (a == 0) - { - ProcTools::SetValueToShuffledFrame(tmpFrame, - new_index, - KAmrGains475_1_2, - 8); - } - else if(a == 4) - { - ProcTools::SetValueToShuffledFrame(tmpFrame, - new_index, - KAmrGains475_3_4, - 8); - } - } - - break; - case 1: - - for (a = 0; a < gains.Count()-1 ; a+=2) - { - - old_gain = gains[a+1]; - new_gain = static_cast((gamma10000*old_gain)/10000); - old_pitch = gains[a]; - - new_index = ProcTools::FindNewIndexVQ(new_gain, old_pitch, KAmrGainTable590, 128); - if (a == 0) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains515_1, 6); - else if (a == 2) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains515_2, 6); - else if (a == 4) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains515_3, 6); - else if (a == 6) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains515_4, 6); - } - - break; - case 2: - - for (a = 0; a < gains.Count()-1 ; a+=2) - { - - old_gain = gains[a+1]; - new_gain = static_cast((gamma10000*old_gain)/10000); - old_pitch = gains[a]; - - new_index = ProcTools::FindNewIndexVQ(new_gain, old_pitch, KAmrGainTable590, 128); - if (a == 0) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains590_1, 6); - else if (a == 2) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains590_2, 6); - else if (a == 4) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains590_3, 6); - else if (a == 6) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains590_4, 6); - } - - break; - case 3: - - for (a = 0; a < gains.Count()-1 ; a+=2) - { - - - old_gain = gains[a+1]; - new_gain = static_cast((gamma10000*old_gain)/10000); - old_pitch = gains[a]; - - new_index = ProcTools::FindNewIndexVQ(new_gain, old_pitch, KAmrGainTable102, 256); - if (a == 0) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains670_1, 7); - else if (a == 2) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains670_2, 7); - else if (a == 4) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains670_3, 7); - else if (a == 6) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains670_4, 7); - } - - break; - case 4: - - for (a = 0; a < gains.Count()-1 ; a+=2) - { - - old_gain = gains[a+1]; - new_gain = static_cast((gamma10000*old_gain)/10000); - old_pitch = gains[a]; - - new_index = ProcTools::FindNewIndexVQ(new_gain, old_pitch, KAmrGainTable102, 256); - if (a == 0) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains740_1, 7); - else if (a == 2) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains740_2, 7); - else if (a == 4) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains740_3, 7); - else if (a == 6) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains740_4, 7); - } - - break; - case 5: - - for (a = 0; a < gains.Count() ; a++) - { - - old_gain = gains[a]; - new_gain = static_cast((gamma10000*old_gain)/10000); - - new_index = ProcTools::FindNewIndexSQ(new_gain, KAmrGainTable122, 32); - if (a == 0) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains795_1, 5); - else if (a == 1) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains795_2, 5); - else if (a == 2) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains795_3, 5); - else if (a == 3) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains795_4, 5); - } - - break; - case 6: - - - for (a = 0; a < gains.Count()-1 ; a+=2) - { - - old_gain = gains[a+1]; - new_gain = static_cast((gamma10000*old_gain)/10000); - old_pitch = gains[a]; - - new_index = ProcTools::FindNewIndexVQ(new_gain, old_pitch, KAmrGainTable102, 256); - if (a == 0) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains102_1, 7); - else if (a == 2) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains102_2, 7); - else if (a == 4) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains102_3, 7); - else if (a == 6) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains102_4, 7); - } - - break; - - case 7: - - - for (a = 0; a < gains.Count() ; a++) - { - - old_gain = gains[a]; - new_gain = static_cast((gamma10000*old_gain)/10000); - - new_index = ProcTools::FindNewIndexSQ(new_gain, KAmrGainTable122, 32); - if (a == 0) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains122_1, 5); - else if (a == 1) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains122_2, 5); - else if (a == 2) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains122_3, 5); - else if (a == 3) ProcTools::SetValueToShuffledFrame(tmpFrame, new_index, KAmrGains122_4, 5); - } - - break; - case 8: - - break; - case 15: - - break; - default: - - break; - }; - - - gains.Reset(); - aFrameOut->Des().Append(tmpFrame->Des()); - CleanupStack::PopAndDestroy(tmpFrame); - - } - CleanupStack::Pop(); // aFrameOut - - return ETrue; - } - -TBool CProcAMRFrameHandler::GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const - { - - TBool vectorQuant = EFalse; - - const TUint8 ch = (*aFrame)[0]; - - TUint dec_mode = (enum Mode)((ch & 0x0078) >> 3); - - TBool mode475 = EFalse; - - switch (dec_mode) - { - case 0: - - mode475 = ETrue; - vectorQuant = ETrue; - break; - - case 1: - case 2: - case 3: - case 4: - case 6: - vectorQuant = ETrue; - break; - - default: - break; - }; - - - RArray amrGains; - RArray gpGains; - - TInt maxGain = 0; - - TReal b[4] = {0.68, 0.58, 0.34, 0.19}; - - - if (aFrame->Size() < 10) - - { - // SID or no data - for (TInt r = 0; r < 4 ; r++) - { - iPreviousRn[r] = 0; - - iPreviousEnergy = 0; - - - } - - aGains.Append(0); - aMaxGain = 1; - return ETrue; - } - - GetAMRGains(aFrame, amrGains, maxGain); - GetGPGains(aFrame, gpGains); - - TInt gains = 4; - if (mode475) - { - gains = 2; - } - - for (TInt subFrame = 0 ; subFrame < gains ; subFrame++) - { - - // calculate gc (fixed codebook gain) -------------------------> - - TReal currentGamma = 0; - if (vectorQuant) - { - currentGamma = (TReal)(amrGains[subFrame*2+1])/4096.0; // Q12, 2^12 = 4096 - } - else - { - currentGamma = (TReal)(amrGains[subFrame])/4096.0; - } - - TReal E = iPreviousRn[3]*b[0]+iPreviousRn[2]*b[1]+iPreviousRn[1]*b[2]+iPreviousRn[0]*b[3]; - - TReal logGamma = 0; - Math::Log(logGamma, currentGamma); - TReal R = 20 * logGamma; - - TReal gcPred = 0; //g'c - Math::Pow10(gcPred, 0.05*E); - TReal gc = gcPred*currentGamma; - - - // update previous R(n) values ---------> - for (TInt re = 0; re < 3 ; re++) - { - iPreviousRn[re] = iPreviousRn[re+1]; - } - iPreviousRn[3] = R; - // <---------- update ends - - // <---------- gc calculated - - // calculate energy from adaptive codebook -------------> - - TReal currentGp = 0; - - if (vectorQuant) - { - currentGp = (TReal)(amrGains[subFrame*2])/16384.0; // Q14 = 2^14 = 16384 - } - else - { - currentGp = (TReal)(gpGains[subFrame])/16384.0; // Q14, 2^13 = 8192 - } - - - TReal energyFromAdaptiveCB = (iPreviousEnergy*currentGp)/2; - - // <----------------------- energy from adaptive codebook calculated - - TReal totalEnergy = energyFromAdaptiveCB+(gc*45); - - iPreviousEnergy = totalEnergy; - - TReal logTotalEnergy = 0; - - if (totalEnergy < 1) totalEnergy = 1; - - Math::Log(logTotalEnergy, totalEnergy); - - if (logTotalEnergy > 3.5) - { - logTotalEnergy = 3.5; - } - - aGains.Append(logTotalEnergy*100); - - const TInt KMaxGain = 350; - - aMaxGain = KMaxGain; - - - } - - - amrGains.Reset(); - gpGains.Reset(); - return ETrue; - } - - -TBool CProcAMRFrameHandler::GetNormalizingMargin(const HBufC8* aFrame, TInt8& aMargin) const - - { - - const TUint8 ch = (*aFrame)[0]; - - TUint dec_mode = (enum Mode)((ch & 0x0078) >> 3); - RArray gains; - - TInt error = KErrNone; - TRAP(error, CleanupClosePushL(gains) ); - - if (error != KErrNone) - return EFalse; - - TInt gamma10000 = 1; - TInt largestGain = 1; - TInt a = 0; - TInt maxGain; - - switch (dec_mode) - { - case 0: - - GetAMRGains(aFrame, gains, maxGain); - - for (a = 1 ; a < gains.Count() ; a+=2) - { - if (gains[a] > largestGain) - { - largestGain = gains[a]; - } - - } - - gamma10000 = (KAmrLargestGain475*10000)/largestGain; - - break; - case 1: - case 2: - - // bitrates 515, 590 - GetAMRGains(aFrame, gains, maxGain); - - for (a = 1 ; a < gains.Count() ; a+=2) - { - if (gains[a] > largestGain) - { - largestGain = gains[a]; - } - - } - gamma10000 = (KAmrLargestGain590*10000)/largestGain; - - - break; - case 3: - case 4: - case 6: - // bitRate = 670, 740, 1020; - GetAMRGains(aFrame, gains, maxGain); - - for (a = 1 ; a < gains.Count() ; a+=2) - { - if (gains[a] > largestGain) - { - largestGain = gains[a]; - } - - } - gamma10000 = (KAmrLargestGain102*10000)/largestGain; - - break; - case 5: - case 7: - //bitRate = 795 & 12.2 - GetAMRGains(aFrame, gains, maxGain); - - - for (a = 0 ; a < gains.Count() ; a++) - { - if (gains[a] > largestGain) - { - largestGain = gains[a]; - } - - } - gamma10000 = (KAmrLargestGain122*10000)/largestGain; - - - break; - - case 8: - - case 15: - - default: - aMargin = 100; - return ETrue; - - }; - - - CleanupStack::PopAndDestroy(&gains); - - TUint8 newIndex = ProcTools::FindNewIndexSQ(gamma10000, KAmrGain_dB2Gamma, 256); - - TInt8 newGain = static_cast(newIndex-127); - - - if (newGain > 63) - { - newGain = 63; - } - else if (newGain < -63) - { - newGain = -63; - } - - aMargin = static_cast(newGain*2); - // aMargin is now in dB/2:s - return ETrue; - - - } - -CProcAMRFrameHandler::~CProcAMRFrameHandler() - { - - } - -CProcAMRFrameHandler* CProcAMRFrameHandler::NewL() - { - - - CProcAMRFrameHandler* self = NewLC(); - CleanupStack::Pop(self); - return self; - - } -CProcAMRFrameHandler* CProcAMRFrameHandler::NewLC() - { - - CProcAMRFrameHandler* self = new (ELeave) CProcAMRFrameHandler(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - - } - -void CProcAMRFrameHandler::ConstructL() - { - - - } - -CProcAMRFrameHandler::CProcAMRFrameHandler() - { - - } - -TBool CProcAMRFrameHandler::GetAMRGains(const HBufC8* aFrame, - RArray& aGains, - TInt& aMaxGain) const - - { - - - const TUint8 ch = (*aFrame)[0]; - - TUint dec_mode = (enum Mode)((ch & 0x0078) >> 3); - TInt gainIndex = 0; - - - switch (dec_mode) - { - case 0: -// bitRate = 475; - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains475_1_2, 8); - aGains.Append(KAmrGainTable475[gainIndex*4]); - aGains.Append(KAmrGainTable475[gainIndex*4+1]); - aGains.Append(KAmrGainTable475[gainIndex*4+2]); - aGains.Append(KAmrGainTable475[gainIndex*4+3]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains475_3_4, 8); - aGains.Append(KAmrGainTable475[gainIndex*4]); - aGains.Append(KAmrGainTable475[gainIndex*4+1]); - aGains.Append(KAmrGainTable475[gainIndex*4+2]); - aGains.Append(KAmrGainTable475[gainIndex*4+3]); - - break; - case 1: -// bitRate = 515; - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains515_1, 6); - aGains.Append(KAmrGainTable590[gainIndex*2]); - aGains.Append(KAmrGainTable590[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains515_2, 6); - aGains.Append(KAmrGainTable590[gainIndex*2]); - aGains.Append(KAmrGainTable590[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains515_3, 6); - aGains.Append(KAmrGainTable590[gainIndex*2]); - aGains.Append(KAmrGainTable590[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains515_4, 6); - aGains.Append(KAmrGainTable590[gainIndex*2]); - aGains.Append(KAmrGainTable590[gainIndex*2+1]); - break; - case 2: -// bitRate = 590; - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains590_1, 6); - aGains.Append(KAmrGainTable590[gainIndex*2]); - aGains.Append(KAmrGainTable590[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains590_2, 6); - aGains.Append(KAmrGainTable590[gainIndex*2]); - aGains.Append(KAmrGainTable590[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains590_3, 6); - aGains.Append(KAmrGainTable590[gainIndex*2]); - aGains.Append(KAmrGainTable590[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains590_4, 6); - aGains.Append(KAmrGainTable590[gainIndex*2]); - aGains.Append(KAmrGainTable590[gainIndex*2+1]); - - break; - case 3: -// bitRate = 670; - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains670_1, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains670_2, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains670_3, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains670_4, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - break; - case 4: -// bitRate = 740; - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains740_1, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains740_2, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains740_3, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains740_4, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - break; - case 5: -// bitRate = 795; - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains795_1, 5); - aGains.Append(KAmrGainTable122[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains795_2, 5); - aGains.Append(KAmrGainTable122[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains795_3, 5); - aGains.Append(KAmrGainTable122[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains795_4, 5); - aGains.Append(KAmrGainTable122[gainIndex]); - - break; - case 6: -// bitRate = 1020; - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains102_1, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains102_2, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains102_3, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains102_4, 7); - aGains.Append(KAmrGainTable102[gainIndex*2]); - aGains.Append(KAmrGainTable102[gainIndex*2+1]); - - break; - case 7: -// bitRate = 1220; - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains122_1, 5); - aGains.Append(KAmrGainTable122[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains122_2, 5); - aGains.Append(KAmrGainTable122[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains122_3, 5); - aGains.Append(KAmrGainTable122[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGains122_4, 5); - aGains.Append(KAmrGainTable122[gainIndex]); - - - break; - case 8: -// bitRate = 0; - break; - case 15: -// bitRate = 0; - break; - default: -// bitRate = 0; - break; - }; - - - aMaxGain = KAmrLargestGain102; - - return ETrue; - - - } - -TInt CProcAMRFrameHandler::GetNextFrameLength(const HBufC8* aFrame, TInt aPosNow) - { - - - if (aPosNow >= aFrame->Size()) return -1; - - - const TUint8 ch = (*aFrame)[aPosNow]; - - TUint dec_mode = (enum Mode)((ch & 0x0078) >> 3); - - switch (dec_mode) - { - case 0: - { - return 12+1; - } - - case 1: - { - return 13+1; - } - - case 2: - { - return 15+1; - } - - case 3: - { - return 17+1; - } - - case 4: - { - return 19+1; - } - - case 5: - { - return 20+1; - } - - case 6: - { - return 26+1; - } - - case 7: - { - return 31+1; - } - - case 8: - { - return 5+1; - } - - case 15: - { - return 0; - } - - default: - return 0+1; - - }; - - - } - - -TBool CProcAMRFrameHandler::GetGPGains(const HBufC8* aFrame, - RArray& aGains) const - - { - - - const TUint8 ch = (*aFrame)[0]; - - TUint dec_mode = (enum Mode)((ch & 0x0078) >> 3); - TInt gainIndex = 0; - - - switch (dec_mode) - { - - case 7: -// bitRate = 1220; - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGPGains122_1, 4); - aGains.Append(KAmrGPTable[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGPGains122_2, 4); - aGains.Append(KAmrGPTable[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGPGains122_3, 4); - aGains.Append(KAmrGPTable[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGPGains122_4, 4); - aGains.Append(KAmrGPTable[gainIndex]); - - - break; - - case 5: - // 7.95 - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGPGains795_1, 4); - aGains.Append(KAmrGPTable[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGPGains795_2, 4); - aGains.Append(KAmrGPTable[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGPGains795_3, 4); - aGains.Append(KAmrGPTable[gainIndex]); - - gainIndex = ProcTools::GetValueFromShuffledFrame(aFrame, KAmrGPGains795_4, 4); - aGains.Append(KAmrGPTable[gainIndex]); - break; - - - - default: -// return EFalse; - break; - }; - - - return ETrue; - - - } diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AMR/src/ProcAMRInFileHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/AMR/src/ProcAMRInFileHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,526 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "ProcAMRInFileHandler.h" -#include "ProcAMRFrameHandler.h" -#include "ProcTools.h" -#include "AudPanic.h" - - -CProcAMRInFileHandler* CProcAMRInFileHandler::NewL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - CProcAMRInFileHandler* self = NewLC(aFileName, aFileHandle, aClip, aReadBufferSize, - aTargetSampleRate, aChannelMode); - CleanupStack::Pop(self); - return self; - } - -CProcAMRInFileHandler* CProcAMRInFileHandler::NewLC(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - CProcAMRInFileHandler* self = new (ELeave) CProcAMRInFileHandler(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aFileHandle, aClip, aReadBufferSize, - aTargetSampleRate, aChannelMode); - return self; - } - -CProcAMRInFileHandler::CProcAMRInFileHandler() : CProcInFileHandler() - { - - - } - -void CProcAMRInFileHandler::GetPropertiesL(TAudFileProperties* aProperties) - { - - if (iProperties != 0) - { - *aProperties = *iProperties; - return; - } - aProperties->iAudioTypeExtension = EAudExtensionTypeNoExtension; - if (iFileOpen) - { - aProperties->iFileFormat = EAudFormatAMR; - - TInt oldPos = iFilePos; - - TInt fileSize = 0; - iFile.Size(fileSize); - - TBuf8<6> header; - //iFile.Read(0, header); - BufferedFileRead(0, header); - if (header.Compare(_L8("#!AMR\n")) == 0) - { - aProperties->iAudioType = EAudAMR; - aProperties->iSamplingRate = 8000; - aProperties->iChannelMode = EAudSingleChannel; - aProperties->iBitrateMode = EAudVariable; - - TBuf8<1> buf; - // iFile.Read(6, buf); - BufferedFileRead(6, buf); - TUint dec_mode = (enum Mode)((buf[0] & 0x0078) >> 3); - - aProperties->iBitrate = KAmrBitRates[dec_mode]; - TInt durationMilli = 0; - TInt frameAmount = 0; - TInt frameDuration = 0; - TInt frameSize = 0; - - GetFrameInfo(durationMilli, frameAmount, frameDuration, frameSize); - - TInt64 tmp = (TInt64)(TInt)durationMilli*1000; - // milliseconds->microseconds - TTimeIntervalMicroSeconds durationMicro(tmp); - aProperties->iDuration = durationMicro; - aProperties->iFrameCount = frameAmount; - - tmp = (TInt64)(TInt)frameDuration*1000; - TTimeIntervalMicroSeconds frameDurationMicro(tmp); - aProperties->iFrameDuration = frameDurationMicro; - aProperties->iFrameLen = frameSize; - - - } - BufferedFileSetFilePos(oldPos); - } - else - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - if (iProperties == 0) - { - iProperties = new (ELeave) TAudFileProperties; - *iProperties = *aProperties; - } - - - - - - } - -TBool CProcAMRInFileHandler::SeekAudioFrame(TInt32 aTime) - { - - - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - TInt fileSize = 0; - iFile.Size(fileSize); - - - TInt firstModeByte = 6; - TInt readSize = 0; - TBuf8<1> modeByte; - iCurrentTimeMilliseconds = 0; - - TUint dec_mode; - //iFile.Seek(ESeekStart, firstModeByte); - BufferedFileSetFilePos(firstModeByte); - - while(iCurrentTimeMilliseconds < aTime) - { - - //iFile.Read(modeByte, 1); - BufferedFileRead(modeByte); - if (modeByte.Size() == 0) - { - return EFalse; - } - - dec_mode = (enum Mode)((modeByte[0] & 0x0078) >> 3); - - switch (dec_mode) - { - case 0: - readSize = 12; - break; - case 1: - readSize = 13; - break; - case 2: - readSize = 15; - break; - case 3: - readSize = 17; - break; - case 4: - readSize = 19; - break; - case 5: - readSize = 20; - break; - case 6: - readSize = 26; - break; - case 7: - readSize = 31; - break; - case 8: - readSize = 5; - break; - case 15: - readSize = 0; - break; - default: - readSize = 0; - break; - }; - // read the next audio frame - //iFile.Read(audioFrame, read_size); - //if (iFile.Seek(ESeekCurrent, readSize) != KErrNone) { - // return EFalse; - //} - if (!(BufferedFileSetFilePos(BufferedFileGetFilePos()+readSize))) - { - - // EOF - return EFalse; - } - iCurrentTimeMilliseconds += 20; - } - return ETrue; - } - -TBool CProcAMRInFileHandler::SeekCutInFrame() - { - - iCurrentTimeMilliseconds = iCutInTime; - return SeekAudioFrame(iCutInTime); - } - - - - -void CProcAMRInFileHandler::ConstructL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - - - iTargetSampleRate = aTargetSampleRate; - iChannelMode = aChannelMode; - - InitAndOpenFileL(aFileName, aFileHandle, aReadBufferSize); - - - if (aClip != 0) - { - iCutInTime = ProcTools::MilliSeconds(aClip->CutInTime()); - - } - - const TInt KSilentFrameSize = 13; - - TUint8 silentFrame[KSilentFrameSize]= - { - 0x04,0x63,0x3C,0xC7,0xF0,0x03,0x04,0x39,0xFF,0xE0, - 0x00,0x00,0x00 - - }; - - - iSilentFrame = HBufC8::NewL(KSilentFrameSize); - iSilentFrame->Des().Append(silentFrame, KSilentFrameSize); - iSilentFrameDuration = 20; - - - iClip = aClip; - - TAudFileProperties prop; - GetPropertiesL(&prop); - - iDecoder = CProcDecoder::NewL(); - - iDecodingPossible = iDecoder->InitL(prop, aTargetSampleRate, aChannelMode); - - - // Generate a frame handler ---------------------> - - iFrameHandler = CProcAMRFrameHandler::NewL(); - - if (iClip != 0 && iClip->Normalizing()) - { - SetNormalizingGainL(iFrameHandler); - } - - - } - -TBool CProcAMRInFileHandler::GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime) - { - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - aFrame = NULL; - TInt readSize = 0; - TBuf8<1> modeByte; -// TBuf8<32> audioFrame; - TUint dec_mode; - - - //iFile.Read(modeByte); - BufferedFileRead(modeByte); - if (modeByte.Size() == 0) - { - return EFalse; - } - - dec_mode = (enum Mode)((modeByte[0] & 0x0078) >> 3); - - switch (dec_mode) - { - case 0: - readSize = 12; - break; - case 1: - readSize = 13; - break; - case 2: - readSize = 15; - break; - case 3: - readSize = 17; - break; - case 4: - readSize = 19; - break; - case 5: - readSize = 20; - break; - case 6: - readSize = 26; - break; - case 7: - readSize = 31; - break; - case 8: - readSize = 5; - break; - case 15: - readSize = 0; - break; - default: - readSize = 0; - break; - }; - - HBufC8* audioFrame = HBufC8::NewL(readSize+1); - - TPtr8 tmpDes((TPtr8)audioFrame->Des()); - - BufferedFileRead((TPtr8&) tmpDes, readSize); - audioFrame->Des().Insert(0, modeByte); - - aFrame = audioFrame; - - TRAPD(err, ManipulateGainL(aFrame)); - - if (err != KErrNone) - { - // something went wrong with the gain manipulation - // continue by returning the original frame - } - - - aSize = aFrame->Size(); - aTime = 20; - iCurrentTimeMilliseconds += 20; - - return ETrue; - } - - - -CProcAMRInFileHandler::~CProcAMRInFileHandler() - { - - if (iSilentFrame != 0) delete iSilentFrame; - - ResetAndCloseFile(); - - delete iDecoder; - - delete iFrameHandler; - - } - - -TBool CProcAMRInFileHandler::GetFrameInfo(TInt& aSongDuration, - TInt& aFrameAmount, - TInt& aAverageFrameDuration, - TInt& aAverageFrameSize) - { - - - - - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - TInt fileSize = 0; - iFile.Size(fileSize); - - - TInt firstModeByte = 6; - TInt frameIndex = 1; - TInt readSize = 0; - TBuf8<1> modeByte; - - TInt32 frameSizeSum = 0; - - TInt filePos = iFilePos; - - TUint dec_mode; - - BufferedFileSetFilePos(firstModeByte); - - while(frameIndex < 180000) // 1 hour - { - - BufferedFileRead(modeByte); - if (modeByte.Size() == 0) - { - break; - } - - dec_mode = (enum Mode)((modeByte[0] & 0x0078) >> 3); - - switch (dec_mode) - { - case 0: - readSize = 12; - break; - case 1: - readSize = 13; - break; - case 2: - readSize = 15; - break; - case 3: - readSize = 17; - break; - case 4: - readSize = 19; - break; - case 5: - readSize = 20; - break; - case 6: - readSize = 26; - break; - case 7: - readSize = 31; - break; - case 8: - readSize = 5; - break; - case 15: - readSize = 0; - break; - default: - readSize = 0; - break; - }; - if (!(BufferedFileSetFilePos(BufferedFileGetFilePos()+readSize))) - { - - break; // EOF - } - frameSizeSum += readSize; - aSongDuration += 20; - frameIndex++; - } - - aAverageFrameSize = frameSizeSum/frameIndex; - aFrameAmount = frameIndex; - aAverageFrameDuration = aSongDuration/aFrameAmount; - BufferedFileSetFilePos(filePos); - return ETrue; - - - } - - -TBool CProcAMRInFileHandler::SetNormalizingGainL(const CProcFrameHandler* aFrameHandler) - { - - HBufC8* point = 0; - TInt siz; - TInt32 tim = 0; - TInt8 margin = 0; - TInt minMargin = KMaxTInt; - TInt tmpGain = 0; - TInt frameCounter = 0; - while(GetEncAudioFrameL(point, siz, tim)) - - { - aFrameHandler->GetNormalizingMargin(point, margin); - tmpGain += margin; - - delete point; - point = 0; - frameCounter++; - if (frameCounter > 1) - { - tmpGain = tmpGain/3; - - if (tmpGain < minMargin) - { - minMargin = tmpGain; - } - - frameCounter = 0; - tmpGain = 0; - } - } - - iNormalizingMargin = static_cast(minMargin); - - return ETrue; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AWB/inc/AWBConstants.h --- a/videoeditorengine/audioeditorengine/codecs/AWB/inc/AWBConstants.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,334 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef AWBCONSTANTS_H -#define AWBCONSTANTS_H - - -/* size of packed frame for each mode, excluding TOC byte */ -const TInt16 KAWBPacked_size[16] = {17, 23, 32, 36, 40, 46, 50, 58, - 60, 5, 0, 0, 0, 0, 0, 0}; - -// possible bitrates of AMR wideband -const TInt KAWBBitRates[9] = {6600, 8850, 12650, 14250, - 15850, 18250, 19850, 23050, 23850}; - -// enumeration for bitrates -enum TAWBBitRate - { - TAWBBitRate6600 = 0, - TAWBBitRate8850 = 1, - TAWBBitRate12650 = 2, - TAWBBitRate14250 = 3, - TAWBBitRate15850 = 4, - TAWBBitRate18250 = 5, - TAWBBitRate19850 = 6, - TAWBBitRate23050 = 7, - TAWBBitRate23850 = 8 - }; - -// gain position in n:th subframe with 6600 kBit/s: KGainPositions[TAWBBitRate6600*4+n] - -const TInt KGainPositions[4*9] = - { - 57, 80, 103, 126, - 75, 106, 140, 171, - 93, 143, 196, 246, - 101, 159, 220, 278, - 109, 175, 244, 310, - 121, 199, 280, 358, - 129, 215, 304, 390, - 145, 247, 352, 454, - 145, 251, 360, 466 - }; - -// KAwbGaindB2Gamma[0] is gamma*10000 at -127 dB -// KAwbGaindB2Gamma[1] is gamma*10000 at -126 dB -// KAwbGaindB2Gamma[127] is gamma*10000 at 0 dB -// KAwbGaindB2Gamma[128] is gamma*10000 at 1 dB -// KAwbGaindB2Gamma[255] is gamma*10000 at 128 dB - -// Note: gamma = (10^((gain/2)/20))^(1/_2.38_) - -const TInt KAwbGain_dB2Gamma[] = - - { - -21 , -23 , -24 , -25 , -26 , -27 , -29 , -30 , -32 , -33 , -35 , -37 , -38 , -40 , -42 , -44 , -47 , -49 , -51 , -54 , -57 , -59 , -62 , -65 , -69 , -72 , -76 , -79 , -83 , -87 , -92 , -96 , -101 , -106 , -111 , -117 , -123 , -129 , -135 , -142 , -149 , -156 , -164 , -172 , -180 , -189 , -199 , -209 , -219 , -230 , -241 , -253 , -266 , -279 , -293 , -307 , -322 , -338 , -355 , -373 , -391 , -411 , -431 , -452 , -475 , -498 , -523 , -549 , -576 , -605 , -635 , -666 , -699 , -734 , -770 , -808 , -848 , -890 , -935 , -981 , -1029 , -1080 , -1134 , -1190 , -1249 , -1311 , -1376 , -1444 , -1516 , -1591 , -1670 , -1753 , -1840 , -1931 , -2026 , -2127 , -2232 , -2343 , -2459 , -2581 , -2709 , -2843 , -2984 , -3132 , -3287 , -3450 , -3621 , -3800 , -3989 , -4186 , -4394 , -4612 , -4840 , -5080 , -5332 , -5596 , -5874 , -6165 , -6470 , -6791 , -7128 , -7481 , -7852 , -8241 , -8649 , -9078 , -9528 , -10000 , -10496 , -11016 , -11562 , -12135 , -12736 , -13368 , -14030 , -14725 , -15455 , -16221 , -17025 , -17869 , -18755 , -19684 , -20660 , -21684 , -22758 , -23886 , -25070 , -26313 , -27617 , -28986 , -30422 , -31930 , -33513 , -35174 , -36917 , -38747 , -40667 , -42683 , -44798 , -47019 , -49349 , -51795 , -54362 , -57056 , -59884 , -62852 , -65967 , -69237 , -72668 , -76270 , -80050 , -84017 , -88182 , -92552 , -97139 , -101954 , -107007 , -112310 , -117877 , -123719 , -129851 , -136287 , -143042 , -150131 , -157572 , -165382 , -173578 , -182181 , -191211 , -200688 , -210634 , -221074 , -232031 , -243531 , -255601 , -268270 , -281566 , -295521 , -310168 , -325541 , -341675 , -358610 , -376383 , -395038 , -414617 , -435167 , -456735 , -479372 , -503131 , -528067 , -554240 , -581709 , -610540 , -640800 , -672560 , -705894 , -740880 , -777600 , -816140 , -856590 , -899045 , -943604 , -990372 , -1039457 , -1090976 , -1145048 , -1201799 , -1261364 , -1323880 , -1389495 , -1458363 , -1530643 , -1606506 , -1686129 , -1769698 , -1857409 , -1949467 , -2046088 , -2147498 , -2253934 , -2365645 , -2482893 , -2605952 , -2735110 , -2870669 , -3012948 , -3162278 , -3319009 , -3483508 , -3656160 , -3837369 , -4027560 , -4227177 , -4436687 , -4656582 - - - -}; - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AWB/inc/ProcAWBFrameHandler.h --- a/videoeditorengine/audioeditorengine/codecs/AWB/inc/ProcAWBFrameHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCAWBFRAMEHANDLER_H__ -#define __CPROCAWBFRAMEHANDLER_H__ - -#include -#include "AudCommon.h" -#include "ProcConstants.h" -#include "ProcFrameHandler.h" - -class CProcAWBFrameHandler : public CProcFrameHandler - { - -public: - - // aGain -40(dB) - +20(dB) - virtual TBool ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain); - - // From base class - virtual TBool GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const; - virtual TBool GetNormalizingMargin(const HBufC8* aFrame, TInt8& aMargin) const; - - virtual ~CProcAWBFrameHandler(); - - static CProcAWBFrameHandler* NewL(); - static CProcAWBFrameHandler* NewLC(); - -private: - - void ConstructL(); - CProcAWBFrameHandler(); - - TBool GetAWBGainsL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const; - -// RArray iGains; -// TInt iGainsRead; - - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AWB/inc/ProcAWBInFileHandler.h --- a/videoeditorengine/audioeditorengine/codecs/AWB/inc/ProcAWBInFileHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __CPROCAWBINFILEHANDLER_H__ -#define __CPROCAWBINFILEHANDLER_H__ - -#include -#include -#include "AudCommon.h" -#include "ProcConstants.h" -#include "ProcInFileHandler.h" - - -class CProcAWBInFileHandler: public CProcInFileHandler - { - -public: - - static CProcAWBInFileHandler* NewL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - static CProcAWBInFileHandler* NewLC(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - - // From base class - - void GetPropertiesL(TAudFileProperties* aProperties); - - /** - * Seeks a certain audio frame for reading - * - * Possible leave codes: - * - * @param aFrameIndex frame index - * @param aTime time from the beginning of file in milliseconds - * - * @return ETrue if successful - * EFalse if beyond the file - */ - TBool SeekAudioFrame(TInt32 aTime); - - - /** - * Seeks a cut in audio frame for reading - * - * Possible leave codes: - * - * - * @return ETrue if successful - * - */ - TBool SeekCutInFrame(); - - virtual TBool SetNormalizingGainL(const CProcFrameHandler* aFrameHandler); - - virtual ~CProcAWBInFileHandler(); - - - - -private: - - void ConstructL(const TDesC& aFileName, RFile* aFileHandle, CAudClip* aClip, - TInt aReadBufferSize, TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - TBool GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime); - - // durations in milliseconds - virtual TBool GetFrameInfo(TInt& aSongDuration, - TInt& aFrameAmount, - TInt& aAverageFrameDuration, - TInt& aAverageFrameSize); - - - -protected: - - CProcAWBInFileHandler(); - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AWB/inc/mime_io.h --- a/videoeditorengine/audioeditorengine/codecs/AWB/inc/mime_io.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,368 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef MIME_IO_H -#define MIME_IO_H - -//static UWord8 toc_byte[16] = {0x04, 0x0C, 0x14, 0x1C, 0x24, 0x2C, 0x34, 0x3C, - // 0x44, 0x4C, 0x54, 0x5C, 0x64, 0x6C, 0x74, 0x7C}; - -/* number of speech bits for all modes */ -//TInt unpacked_size[16] = {132, 177, 253, 285, 317, 365, 397, 461, - // 477, 35, 0, 0, 0, 0, 0, 0}; - -/* size of packed frame for each mode, excluding TOC byte */ -//TInt packed_size[16] = {17, 23, 32, 36, 40, 46, 50, 58, - // 60, 5, 0, 0, 0, 0, 0, 0}; - -/* number of unused speech bits in packed format for each mode */ -//TInt unused_size[16] = {4, 7, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0}; - -/* sorting tables for all modes */ - -const TInt sort_660[132] = { - 0, 5, 6, 7, 61, 84, 107, 130, 62, 85, - 8, 4, 37, 38, 39, 40, 58, 81, 104, 127, - 60, 83, 106, 129, 108, 131, 128, 41, 42, 80, - 126, 1, 3, 57, 103, 82, 105, 59, 2, 63, - 109, 110, 86, 19, 22, 23, 64, 87, 18, 20, - 21, 17, 13, 88, 43, 89, 65, 111, 14, 24, - 25, 26, 27, 28, 15, 16, 44, 90, 66, 112, - 9, 11, 10, 12, 67, 113, 29, 30, 31, 32, - 34, 33, 35, 36, 45, 51, 68, 74, 91, 97, - 114, 120, 46, 69, 92, 115, 52, 75, 98, 121, - 47, 70, 93, 116, 53, 76, 99, 122, 48, 71, - 94, 117, 54, 77, 100, 123, 49, 72, 95, 118, - 55, 78, 101, 124, 50, 73, 96, 119, 56, 79, - 102, 125 -}; - -const TInt sort_885[177] = { - 0, 4, 6, 7, 5, 3, 47, 48, 49, 112, - 113, 114, 75, 106, 140, 171, 80, 111, 145, 176, - 77, 108, 142, 173, 78, 109, 143, 174, 79, 110, - 144, 175, 76, 107, 141, 172, 50, 115, 51, 2, - 1, 81, 116, 146, 19, 21, 12, 17, 18, 20, - 16, 25, 13, 10, 14, 24, 23, 22, 26, 8, - 15, 52, 117, 31, 82, 147, 9, 33, 11, 83, - 148, 53, 118, 28, 27, 84, 149, 34, 35, 29, - 46, 32, 30, 54, 119, 37, 36, 39, 38, 40, - 85, 150, 41, 42, 43, 44, 45, 55, 60, 65, - 70, 86, 91, 96, 101, 120, 125, 130, 135, 151, - 156, 161, 166, 56, 87, 121, 152, 61, 92, 126, - 157, 66, 97, 131, 162, 71, 102, 136, 167, 57, - 88, 122, 153, 62, 93, 127, 158, 67, 98, 132, - 163, 72, 103, 137, 168, 58, 89, 123, 154, 63, - 94, 128, 159, 68, 99, 133, 164, 73, 104, 138, - 169, 59, 90, 124, 155, 64, 95, 129, 160, 69, - 100, 134, 165, 74, 105, 139, 170 -}; - -const TInt sort_1265[253] = { - 0, 4, 6, 93, 143, 196, 246, 7, 5, 3, - 47, 48, 49, 50, 51, 150, 151, 152, 153, 154, - 94, 144, 197, 247, 99, 149, 202, 252, 96, 146, - 199, 249, 97, 147, 200, 250, 100, 203, 98, 148, - 201, 251, 95, 145, 198, 248, 52, 2, 1, 101, - 204, 155, 19, 21, 12, 17, 18, 20, 16, 25, - 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, - 156, 31, 102, 205, 9, 33, 11, 103, 206, 54, - 157, 28, 27, 104, 207, 34, 35, 29, 46, 32, - 30, 55, 158, 37, 36, 39, 38, 40, 105, 208, - 41, 42, 43, 44, 45, 56, 106, 159, 209, 57, - 66, 75, 84, 107, 116, 125, 134, 160, 169, 178, - 187, 210, 219, 228, 237, 58, 108, 161, 211, 62, - 112, 165, 215, 67, 117, 170, 220, 71, 121, 174, - 224, 76, 126, 179, 229, 80, 130, 183, 233, 85, - 135, 188, 238, 89, 139, 192, 242, 59, 109, 162, - 212, 63, 113, 166, 216, 68, 118, 171, 221, 72, - 122, 175, 225, 77, 127, 180, 230, 81, 131, 184, - 234, 86, 136, 189, 239, 90, 140, 193, 243, 60, - 110, 163, 213, 64, 114, 167, 217, 69, 119, 172, - 222, 73, 123, 176, 226, 78, 128, 181, 231, 82, - 132, 185, 235, 87, 137, 190, 240, 91, 141, 194, - 244, 61, 111, 164, 214, 65, 115, 168, 218, 70, - 120, 173, 223, 74, 124, 177, 227, 79, 129, 182, - 232, 83, 133, 186, 236, 88, 138, 191, 241, 92, - 142, 195, 245 -}; - -const TInt sort_1425[285] = { - 0, 4, 6, 101, 159, 220, 278, 7, 5, 3, - 47, 48, 49, 50, 51, 166, 167, 168, 169, 170, - 102, 160, 221, 279, 107, 165, 226, 284, 104, 162, - 223, 281, 105, 163, 224, 282, 108, 227, 106, 164, - 225, 283, 103, 161, 222, 280, 52, 2, 1, 109, - 228, 171, 19, 21, 12, 17, 18, 20, 16, 25, - 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, - 172, 31, 110, 229, 9, 33, 11, 111, 230, 54, - 173, 28, 27, 112, 231, 34, 35, 29, 46, 32, - 30, 55, 174, 37, 36, 39, 38, 40, 113, 232, - 41, 42, 43, 44, 45, 56, 114, 175, 233, 62, - 120, 181, 239, 75, 133, 194, 252, 57, 115, 176, - 234, 63, 121, 182, 240, 70, 128, 189, 247, 76, - 134, 195, 253, 83, 141, 202, 260, 92, 150, 211, - 269, 84, 142, 203, 261, 93, 151, 212, 270, 85, - 143, 204, 262, 94, 152, 213, 271, 86, 144, 205, - 263, 95, 153, 214, 272, 64, 122, 183, 241, 77, - 135, 196, 254, 65, 123, 184, 242, 78, 136, 197, - 255, 87, 145, 206, 264, 96, 154, 215, 273, 58, - 116, 177, 235, 66, 124, 185, 243, 71, 129, 190, - 248, 79, 137, 198, 256, 88, 146, 207, 265, 97, - 155, 216, 274, 59, 117, 178, 236, 67, 125, 186, - 244, 72, 130, 191, 249, 80, 138, 199, 257, 89, - 147, 208, 266, 98, 156, 217, 275, 60, 118, 179, - 237, 68, 126, 187, 245, 73, 131, 192, 250, 81, - 139, 200, 258, 90, 148, 209, 267, 99, 157, 218, - 276, 61, 119, 180, 238, 69, 127, 188, 246, 74, - 132, 193, 251, 82, 140, 201, 259, 91, 149, 210, - 268, 100, 158, 219, 277 -}; - -const TInt sort_1585[317] = { - 0, 4, 6, 109, 175, 244, 310, 7, 5, 3, - 47, 48, 49, 50, 51, 182, 183, 184, 185, 186, - 110, 176, 245, 311, 115, 181, 250, 316, 112, 178, - 247, 313, 113, 179, 248, 314, 116, 251, 114, 180, - 249, 315, 111, 177, 246, 312, 52, 2, 1, 117, - 252, 187, 19, 21, 12, 17, 18, 20, 16, 25, - 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, - 188, 31, 118, 253, 9, 33, 11, 119, 254, 54, - 189, 28, 27, 120, 255, 34, 35, 29, 46, 32, - 30, 55, 190, 37, 36, 39, 38, 40, 121, 256, - 41, 42, 43, 44, 45, 56, 122, 191, 257, 63, - 129, 198, 264, 76, 142, 211, 277, 89, 155, 224, - 290, 102, 168, 237, 303, 57, 123, 192, 258, 70, - 136, 205, 271, 83, 149, 218, 284, 96, 162, 231, - 297, 62, 128, 197, 263, 75, 141, 210, 276, 88, - 154, 223, 289, 101, 167, 236, 302, 58, 124, 193, - 259, 71, 137, 206, 272, 84, 150, 219, 285, 97, - 163, 232, 298, 59, 125, 194, 260, 64, 130, 199, - 265, 67, 133, 202, 268, 72, 138, 207, 273, 77, - 143, 212, 278, 80, 146, 215, 281, 85, 151, 220, - 286, 90, 156, 225, 291, 93, 159, 228, 294, 98, - 164, 233, 299, 103, 169, 238, 304, 106, 172, 241, - 307, 60, 126, 195, 261, 65, 131, 200, 266, 68, - 134, 203, 269, 73, 139, 208, 274, 78, 144, 213, - 279, 81, 147, 216, 282, 86, 152, 221, 287, 91, - 157, 226, 292, 94, 160, 229, 295, 99, 165, 234, - 300, 104, 170, 239, 305, 107, 173, 242, 308, 61, - 127, 196, 262, 66, 132, 201, 267, 69, 135, 204, - 270, 74, 140, 209, 275, 79, 145, 214, 280, 82, - 148, 217, 283, 87, 153, 222, 288, 92, 158, 227, - 293, 95, 161, 230, 296, 100, 166, 235, 301, 105, - 171, 240, 306, 108, 174, 243, 309 -}; - -const TInt sort_1825[365] = { - 0, 4, 6, 121, 199, 280, 358, 7, 5, 3, - 47, 48, 49, 50, 51, 206, 207, 208, 209, 210, - 122, 200, 281, 359, 127, 205, 286, 364, 124, 202, - 283, 361, 125, 203, 284, 362, 128, 287, 126, 204, - 285, 363, 123, 201, 282, 360, 52, 2, 1, 129, - 288, 211, 19, 21, 12, 17, 18, 20, 16, 25, - 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, - 212, 31, 130, 289, 9, 33, 11, 131, 290, 54, - 213, 28, 27, 132, 291, 34, 35, 29, 46, 32, - 30, 55, 214, 37, 36, 39, 38, 40, 133, 292, - 41, 42, 43, 44, 45, 56, 134, 215, 293, 198, - 299, 136, 120, 138, 60, 279, 58, 62, 357, 139, - 140, 295, 156, 57, 219, 297, 63, 217, 137, 170, - 300, 222, 64, 106, 61, 78, 294, 92, 142, 141, - 135, 221, 296, 301, 343, 59, 298, 184, 329, 315, - 220, 216, 265, 251, 218, 237, 352, 223, 157, 86, - 171, 87, 164, 351, 111, 302, 65, 178, 115, 323, - 72, 192, 101, 179, 93, 73, 193, 151, 337, 309, - 143, 274, 69, 324, 165, 150, 97, 338, 110, 310, - 330, 273, 68, 107, 175, 245, 114, 79, 113, 189, - 246, 259, 174, 71, 185, 96, 344, 100, 322, 83, - 334, 316, 333, 252, 161, 348, 147, 82, 269, 232, - 260, 308, 353, 347, 163, 231, 306, 320, 188, 270, - 146, 177, 266, 350, 256, 85, 149, 116, 191, 160, - 238, 258, 336, 305, 255, 88, 224, 99, 339, 230, - 228, 227, 272, 242, 241, 319, 233, 311, 102, 74, - 180, 275, 66, 194, 152, 325, 172, 247, 244, 261, - 117, 158, 166, 354, 75, 144, 108, 312, 94, 186, - 303, 80, 234, 89, 195, 112, 340, 181, 345, 317, - 326, 276, 239, 167, 118, 313, 70, 355, 327, 253, - 190, 176, 271, 104, 98, 153, 103, 90, 76, 267, - 277, 248, 225, 262, 182, 84, 154, 235, 335, 168, - 331, 196, 341, 249, 162, 307, 148, 349, 263, 321, - 257, 243, 229, 356, 159, 119, 67, 187, 173, 145, - 240, 77, 304, 332, 314, 342, 109, 254, 81, 278, - 105, 91, 346, 318, 183, 250, 197, 328, 95, 155, - 169, 268, 226, 236, 264 -}; - -const TInt sort_1985[397] = { - 0, 4, 6, 129, 215, 304, 390, 7, 5, 3, - 47, 48, 49, 50, 51, 222, 223, 224, 225, 226, - 130, 216, 305, 391, 135, 221, 310, 396, 132, 218, - 307, 393, 133, 219, 308, 394, 136, 311, 134, 220, - 309, 395, 131, 217, 306, 392, 52, 2, 1, 137, - 312, 227, 19, 21, 12, 17, 18, 20, 16, 25, - 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, - 228, 31, 138, 313, 9, 33, 11, 139, 314, 54, - 229, 28, 27, 140, 315, 34, 35, 29, 46, 32, - 30, 55, 230, 37, 36, 39, 38, 40, 141, 316, - 41, 42, 43, 44, 45, 56, 142, 231, 317, 63, - 73, 92, 340, 82, 324, 149, 353, 159, 334, 165, - 338, 178, 163, 254, 77, 168, 257, 153, 343, 57, - 248, 238, 79, 252, 166, 67, 80, 201, 101, 267, - 143, 164, 341, 255, 339, 187, 376, 318, 78, 328, - 362, 115, 232, 242, 253, 290, 276, 62, 58, 158, - 68, 93, 179, 319, 148, 169, 154, 72, 385, 329, - 333, 344, 102, 83, 144, 233, 323, 124, 243, 192, - 354, 237, 64, 247, 202, 209, 150, 116, 335, 268, - 239, 299, 188, 196, 298, 94, 195, 258, 123, 363, - 384, 109, 325, 371, 170, 370, 84, 110, 295, 180, - 74, 210, 191, 106, 291, 205, 367, 381, 377, 206, - 355, 122, 119, 120, 383, 160, 105, 108, 277, 380, - 294, 284, 285, 345, 208, 269, 249, 366, 386, 300, - 297, 259, 125, 369, 197, 97, 194, 286, 211, 281, - 280, 183, 372, 87, 155, 283, 59, 348, 327, 184, - 76, 111, 330, 203, 349, 69, 98, 152, 145, 189, - 66, 320, 337, 173, 358, 251, 198, 174, 263, 262, - 126, 241, 193, 88, 388, 117, 95, 387, 112, 359, - 287, 244, 103, 272, 301, 171, 162, 234, 273, 127, - 373, 181, 292, 85, 378, 302, 121, 107, 364, 346, - 356, 212, 278, 213, 65, 382, 288, 207, 113, 175, - 99, 296, 374, 368, 199, 260, 185, 336, 331, 161, - 270, 264, 250, 240, 75, 350, 151, 60, 89, 321, - 156, 274, 360, 326, 70, 282, 167, 146, 352, 81, - 91, 389, 266, 245, 177, 235, 190, 256, 204, 342, - 128, 118, 303, 104, 379, 182, 114, 375, 200, 96, - 293, 172, 214, 365, 279, 86, 289, 351, 347, 357, - 261, 186, 176, 271, 90, 100, 147, 322, 275, 361, - 71, 332, 61, 265, 157, 246, 236 -}; - -const TInt sort_2305[461] = { - 0, 4, 6, 145, 247, 352, 454, 7, 5, 3, - 47, 48, 49, 50, 51, 254, 255, 256, 257, 258, - 146, 248, 353, 455, 151, 253, 358, 460, 148, 250, - 355, 457, 149, 251, 356, 458, 152, 359, 150, 252, - 357, 459, 147, 249, 354, 456, 52, 2, 1, 153, - 360, 259, 19, 21, 12, 17, 18, 20, 16, 25, - 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, - 260, 31, 154, 361, 9, 33, 11, 155, 362, 54, - 261, 28, 27, 156, 363, 34, 35, 29, 46, 32, - 30, 55, 262, 37, 36, 39, 38, 40, 157, 364, - 41, 42, 43, 44, 45, 56, 158, 263, 365, 181, - 192, 170, 79, 57, 399, 90, 159, 297, 377, 366, - 275, 68, 183, 388, 286, 194, 299, 92 , 70, 182, - 401, 172, 59, 91, 58, 400, 368, 161, 81, 160, - 264, 171, 80, 389, 390, 378, 379, 193, 298, 69, - 266, 265, 367, 277, 288, 276, 287, 184, 60, 195, - 82, 93, 71, 369, 402, 173, 162, 444, 300, 391, - 98, 76, 278, 61, 267, 374, 135, 411, 167, 102, - 380, 200, 87, 178, 65, 94, 204, 124, 72, 342, - 189, 305, 381, 396, 433, 301, 226, 407, 289, 237, - 113, 215, 185, 128, 309, 403, 116, 320, 196, 331, - 370, 422, 174, 64, 392, 83, 425, 219, 134, 188, - 432, 112, 427, 139, 279, 163, 436, 208, 447, 218, - 236, 229, 97, 294, 385, 230, 166, 268, 177, 443, - 225, 426, 101, 272, 138, 127, 290, 117, 347, 199, - 414, 95, 140, 240, 410, 395, 209, 129, 283, 346, - 105, 241, 437, 86, 308, 448, 203, 345, 186, 107, - 220, 415, 334, 319, 106, 313, 118, 123, 73, 207, - 421, 214, 384, 373, 438, 62, 371, 341, 75, 449, - 168, 323, 164, 242, 416, 324, 304, 197, 335, 404, - 271, 63, 191, 325, 96, 169, 231, 280, 312, 187, - 406, 84, 201, 100, 67, 382, 175, 336, 202, 330, - 269, 393, 376, 383, 293, 307, 409, 179, 285, 314, - 302, 372, 398, 190, 180, 89, 99, 103, 232, 78, - 88, 77, 136, 387, 165, 198, 394, 125, 176, 428, - 74, 375, 238, 227, 66, 273, 282, 141, 306, 412, - 114, 85, 130, 348, 119, 291, 296, 386, 233, 397, - 303, 405, 284, 445, 423, 221, 210, 205, 450, 108, - 274, 434, 216, 343, 337, 142, 243, 321, 408, 451, - 310, 292, 120, 109, 281, 439, 270, 429, 332, 295, - 418, 211, 315, 222, 326, 131, 430, 244, 327, 349, - 417, 316, 143, 338, 440, 234, 110, 212, 452, 245, - 121, 419, 350, 223, 132, 441, 328, 413, 317, 339, - 126, 104, 137, 446, 344, 239, 435, 115, 333, 206, - 322, 217, 228, 424, 453, 311, 351, 111, 442, 224, - 213, 122, 431, 340, 235, 246, 133, 144, 420, 329, - 318 -}; - -const TInt sort_2385[477] = { - 0, 4, 6, 145, 251, 360, 466, 7, 5, 3, - 47, 48, 49, 50, 51, 262, 263, 264, 265, 266, - 146, 252, 361, 467, 151, 257, 366, 472, 148, 254, - 363, 469, 149, 255, 364, 470, 156, 371, 150, 256, - 365, 471, 147, 253, 362, 468, 52, 2, 1, 157, - 372, 267, 19, 21, 12, 17, 18, 20, 16, 25, - 13, 10, 14, 24, 23, 22, 26, 8, 15, 53, - 268, 31, 152, 153, 154, 155, 258, 259, 260, 261, - 367, 368, 369, 370, 473, 474, 475, 476, 158, 373, - 9, 33, 11, 159, 374, 54, 269, 28, 27, 160, - 375, 34, 35, 29, 46, 32, 30, 55, 270, 37, - 36, 39, 38, 40, 161, 376, 41, 42, 43, 44, - 45, 56, 162, 271, 377, 185, 196, 174, 79, 57, - 411, 90, 163, 305, 389, 378, 283, 68, 187, 400, - 294, 198, 307, 92, 70, 186, 413, 176, 59, 91, - 58, 412, 380, 165, 81, 164, 272, 175, 80, 401, - 402, 390, 391, 197, 306, 69, 274, 273, 379, 285, - 296, 284, 295, 188, 60, 199, 82, 93, 71, 381, - 414, 177, 166, 456, 308, 403, 98, 76, 286, 61, - 275, 386, 135, 423, 171, 102, 392, 204, 87, 182, - 65, 94, 208, 124, 72, 350, 193, 313, 393, 408, - 445, 309, 230, 419, 297, 241, 113, 219, 189, 128, - 317, 415, 116, 328, 200, 339, 382, 434, 178, 64, - 404, 83, 437, 223, 134, 192, 444, 112, 439, 139, - 287, 167, 448, 212, 459, 222, 240, 233, 97, 302, - 397, 234, 170, 276, 181, 455, 229, 438, 101, 280, - 138, 127, 298, 117, 355, 203, 426, 95, 140, 244, - 422, 407, 213, 129, 291, 354, 105, 245, 449, 86, - 316, 460, 207, 353, 190, 107, 224, 427, 342, 327, - 106, 321, 118, 123, 73, 211, 433, 218, 396, 385, - 450, 62, 383, 349, 75, 461, 172, 331, 168, 246, - 428, 332, 312, 201, 343, 416, 279, 63, 195, 333, - 96, 173, 235, 288, 320, 191, 418, 84, 205, 100, - 67, 394, 179, 344, 206, 338, 277, 405, 388, 395, - 301, 315, 421, 183, 293, 322, 310, 384, 410, 194, - 184, 89, 99, 103, 236, 78, 88, 77, 136, 399, - 169, 202, 406, 125, 180, 440, 74, 387, 242, 231, - 66, 281, 290, 141, 314, 424, 114, 85, 130, 356, - 119, 299, 304, 398, 237, 409, 311, 417, 292, 457, - 435, 225, 214, 209, 462, 108, 282, 446, 220, 351, - 345, 142, 247, 329, 420, 463, 318, 300, 120, 109, - 289, 451, 278, 441, 340, 303, 430, 215, 323, 226, - 334, 131, 442, 248, 335, 357, 429, 324, 143, 346, - 452, 238, 110, 216, 464, 249, 121, 431, 358, 227, - 132, 453, 336, 425, 325, 347, 126, 104, 137, 458, - 352, 243, 447, 115, 341, 210, 330, 221, 232, 436, - 465, 319, 359, 111, 454, 228, 217, 122, 443, 348, - 239, 250, 133, 144, 432, 337, 326 -}; - -const TInt sort_SID[35] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34 -}; - -/* pointer table for bit sorting tables */ -//const TInt *sort_ptr[16] = { sort_660, sort_885, sort_1265, sort_1425, sort_1585, sort_1825, sort_1985, sort_2305, - // sort_2385, sort_SID, NULL, NULL, NULL, NULL, NULL, NULL}; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AWB/inc/q_gain2.h --- a/videoeditorengine/audioeditorengine/codecs/AWB/inc/q_gain2.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,229 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/*------------------------------------------------------* - * Tables for function q_gain2() * - * * - * g_pitch(Q14), g_code(Q11) * - * * - * pitch gain are ordered in table to reduce complexity * - * during quantization of gains. * - *------------------------------------------------------*/ - -#define nb_qua_gain6b 64 /* Number of quantization level */ -#define nb_qua_gain7b 128 /* Number of quantization level */ - - -const TInt t_qua_gain6b[64*2] = { - 1566, 1332, - 1577, 3557, - 3071, 6490, - 4193, 10163, - 4496, 2534, - 5019, 4488, - 5586, 15614, - 5725, 1422, - 6453, 580, - 6724, 6831, - 7657, 3527, - 8072, 2099, - 8232, 5319, - 8827, 8775, - 9740, 2868, - 9856, 1465, - 10087, 12488, - 10241, 4453, - 10859, 6618, - 11321, 3587, - 11417, 1800, - 11643, 2428, - 11718, 988, - 12312, 5093, - 12523, 8413, - 12574, 26214, - 12601, 3396, - 13172, 1623, - 13285, 2423, - 13418, 6087, - 13459, 12810, - 13656, 3607, - 14111, 4521, - 14144, 1229, - 14425, 1871, - 14431, 7234, - 14445, 2834, - 14628, 10036, - 14860, 17496, - 15161, 3629, - 15209, 5819, - 15299, 2256, - 15518, 4722, - 15663, 1060, - 15759, 7972, - 15939, 11964, - 16020, 2996, - 16086, 1707, - 16521, 4254, - 16576, 6224, - 16894, 2380, - 16906, 681, - 17213, 8406, - 17610, 3418, - 17895, 5269, - 18168, 11748, - 18230, 1575, - 18607, 32767, - 18728, 21684, - 19137, 2543, - 19422, 6577, - 19446, 4097, - 19450, 9056, - 20371, 14885}; - -const TInt t_qua_gain7b[128*2] = { - 204, 441, - 464, 1977, - 869, 1077, - 1072, 3062, - 1281, 4759, - 1647, 1539, - 1845, 7020, - 1853, 634, - 1995, 2336, - 2351, 15400, - 2661, 1165, - 2702, 3900, - 2710, 10133, - 3195, 1752, - 3498, 2624, - 3663, 849, - 3984, 5697, - 4214, 3399, - 4415, 1304, - 4695, 2056, - 5376, 4558, - 5386, 676, - 5518, 23554, - 5567, 7794, - 5644, 3061, - 5672, 1513, - 5957, 2338, - 6533, 1060, - 6804, 5998, - 6820, 1767, - 6937, 3837, - 7277, 414, - 7305, 2665, - 7466, 11304, - 7942, 794, - 8007, 1982, - 8007, 1366, - 8326, 3105, - 8336, 4810, - 8708, 7954, - 8989, 2279, - 9031, 1055, - 9247, 3568, - 9283, 1631, - 9654, 6311, - 9811, 2605, - 10120, 683, - 10143, 4179, - 10245, 1946, - 10335, 1218, - 10468, 9960, - 10651, 3000, - 10951, 1530, - 10969, 5290, - 11203, 2305, - 11325, 3562, - 11771, 6754, - 11839, 1849, - 11941, 4495, - 11954, 1298, - 11975, 15223, - 11977, 883, - 11986, 2842, - 12438, 2141, - 12593, 3665, - 12636, 8367, - 12658, 1594, - 12886, 2628, - 12984, 4942, - 13146, 1115, - 13224, 524, - 13341, 3163, - 13399, 1923, - 13549, 5961, - 13606, 1401, - 13655, 2399, - 13782, 3909, - 13868, 10923, - 14226, 1723, - 14232, 2939, - 14278, 7528, - 14439, 4598, - 14451, 984, - 14458, 2265, - 14792, 1403, - 14818, 3445, - 14899, 5709, - 15017, 15362, - 15048, 1946, - 15069, 2655, - 15405, 9591, - 15405, 4079, - 15570, 7183, - 15687, 2286, - 15691, 1624, - 15699, 3068, - 15772, 5149, - 15868, 1205, - 15970, 696, - 16249, 3584, - 16338, 1917, - 16424, 2560, - 16483, 4438, - 16529, 6410, - 16620, 11966, - 16839, 8780, - 17030, 3050, - 17033, 18325, - 17092, 1568, - 17123, 5197, - 17351, 2113, - 17374, 980, - 17566, 26214, - 17609, 3912, - 17639, 32767, - 18151, 7871, - 18197, 2516, - 18202, 5649, - 18679, 3283, - 18930, 1370, - 19271, 13757, - 19317, 4120, - 19460, 1973, - 19654, 10018, - 19764, 6792, - 19912, 5135, - 20040, 2841, - 21234, 19833}; - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AWB/src/ProcAWBFrameHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/AWB/src/ProcAWBFrameHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,419 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "ProcAWBFrameHandler.h" -#include "ProcFrameHandler.h" -#include "ProcTools.h" -#include "q_gain2.h" -#include "AWBConstants.h" - -#include -#include - - -TBool CProcAWBFrameHandler::ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain) - { - - aFrameOut = HBufC8::NewLC(aFrameIn->Size()); - aFrameOut->Des().Copy(aFrameIn->Ptr(), aFrameIn->Size()); - - aGain = static_cast(aGain/2); - - const TUint8 modeByte = (*aFrameOut)[0]; - - TUint8 toc = modeByte; - TUint8 mode = static_cast((toc >> 3) & 0x0F); - - TInt bitrate = KAWBBitRates[mode]; - - RArray gains; - CleanupClosePushL(gains); - TInt maxGain = 0; - GetAWBGainsL(aFrameOut, gains, maxGain); - - TInt gamma10000 = KAwbGain_dB2Gamma[aGain+127]; - - TInt a = 0; - TInt old_gain = 0; - TInt old_pitch = 0; - TInt new_gain = 0; - TInt8 new_index = 0; - TInt bitRateIndex = -1; - - switch (bitrate) - { - - case 23850: - case 23050: - case 19850: - case 18250: - case 15850: - case 14250: - case 12650: - { - - for (a = 0; a < gains.Count()-1 ; a+=2) - { - - old_gain = gains[a+1]; - new_gain = static_cast((gamma10000*old_gain)/10000); - old_pitch = gains[a]; - - new_index = ProcTools::FindNewIndexVQ2(new_gain, old_pitch, - t_qua_gain7b, - 2*128); - - - bitRateIndex = ProcTools::FindIndex(bitrate, KAWBBitRates, 9); - - - if (a == 0) ProcTools::SetValueToShuffledAWBFrame(new_index, - aFrameOut, - bitrate, - KGainPositions[bitRateIndex*4], 7); - else if (a == 2) ProcTools::SetValueToShuffledAWBFrame(new_index, - aFrameOut, - bitrate, - KGainPositions[bitRateIndex*4+1], 7); - else if (a == 4) ProcTools::SetValueToShuffledAWBFrame(new_index, - aFrameOut, - bitrate, - KGainPositions[bitRateIndex*4+2], 7); - else if (a == 6) ProcTools::SetValueToShuffledAWBFrame(new_index, - aFrameOut, - bitrate, - KGainPositions[bitRateIndex*4+3], 7); - - } - - - - break; - } - - case 8850: - case 6600: - { - for (a = 0; a < gains.Count()-1 ; a+=2) - { - - old_gain = gains[a+1]; - new_gain = static_cast((gamma10000*old_gain)/10000); - old_pitch = gains[a]; - - new_index = ProcTools::FindNewIndexVQ2(new_gain, old_pitch, - t_qua_gain6b, - 2*64); - - bitRateIndex = ProcTools::FindIndex(bitrate, KAWBBitRates, 9); - - - if (a == 0) ProcTools::SetValueToShuffledAWBFrame(new_index, - aFrameOut, - bitrate, - KGainPositions[bitRateIndex*4], 6); - else if (a == 2) ProcTools::SetValueToShuffledAWBFrame(new_index, - aFrameOut, - bitrate, - KGainPositions[bitRateIndex*4+1], 6); - else if (a == 4) ProcTools::SetValueToShuffledAWBFrame(new_index, - aFrameOut, - bitrate, - KGainPositions[bitRateIndex*4+2], 6); - else if (a == 6) ProcTools::SetValueToShuffledAWBFrame(new_index, - aFrameOut, - bitrate, - KGainPositions[bitRateIndex*4+3], 6); - } - - break; - } - } - - CleanupStack::PopAndDestroy(&gains); - CleanupStack::Pop(); // aFrameOut - return ETrue; - } - -TBool CProcAWBFrameHandler::GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const - { - - RArray AWBGains; - CleanupClosePushL(AWBGains); - GetAWBGainsL(aFrame, AWBGains, aMaxGain); - - for (TInt a = 0; a < AWBGains.Count() ; a++) - { - if (a%2 == 1) - { - aGains.Append(AWBGains[a]); - } - - } - - CleanupStack::PopAndDestroy(&AWBGains); - - return ETrue; - } - - -TBool CProcAWBFrameHandler::GetNormalizingMargin(const HBufC8* aFrame, TInt8& aMargin) const - - { - - RArray gains; - - TInt error = KErrNone; - TRAP( error, CleanupClosePushL(gains) ); - - if (error != KErrNone) - return EFalse; - - TInt maxGain; - - TRAPD(err, GetAWBGainsL(aFrame, gains, maxGain)); - - if (err != KErrNone) - { - return EFalse; - } - - TInt largestGain = 1; - - for (TInt a = 1 ; a < gains.Count() ; a+=2) - { - if (gains[a] > largestGain) - { - largestGain = gains[a]; - } - - } - TInt gamma10000 = (32767*10000)/largestGain; - - - CleanupStack::PopAndDestroy(&gains); - - TUint8 newIndex = ProcTools::FindNewIndexSQ(gamma10000, KAwbGain_dB2Gamma, 256); - - TInt8 newGain = static_cast(newIndex-127); - - if (newGain > 63) - { - newGain = 63; - } - else if (newGain < -63) - { - newGain = -63; - } - - aMargin = static_cast(newGain*2); - // aMargin is now in dB/2:s - return ETrue; - - } - -CProcAWBFrameHandler::~CProcAWBFrameHandler() - { - - } - -CProcAWBFrameHandler* CProcAWBFrameHandler::NewL() - { - - - CProcAWBFrameHandler* self = NewLC(); - CleanupStack::Pop(self); - return self; - - } -CProcAWBFrameHandler* CProcAWBFrameHandler::NewLC() - { - - CProcAWBFrameHandler* self = new (ELeave) CProcAWBFrameHandler(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - - } - -void CProcAWBFrameHandler::ConstructL() - { - - } - -CProcAWBFrameHandler::CProcAWBFrameHandler() - { - - } - -TBool CProcAWBFrameHandler::GetAWBGainsL(const HBufC8* aFrame, - RArray& aGains, - TInt& aMaxGain) const - - { - - const TUint8 modeByte = (*aFrame)[0]; - - TUint8 toc = modeByte; - TUint8 mode = static_cast((toc >> 3) & 0x0F); - - TInt bitrate = KAWBBitRates[mode]; - TInt cbIndex = -1; - TInt a = 0; - - switch (bitrate) - { - - case 23850: - { - - for (a = 0 ; a < 4 ; a++) - { - cbIndex = ProcTools::GetValueFromShuffledAWBFrameL(aFrame, bitrate, - KGainPositions[TAWBBitRate23850*4+a], 7); - TInt pitch = t_qua_gain7b[cbIndex*2]; - TInt gain = t_qua_gain7b[cbIndex*2+1]; - aGains.Append(pitch); - aGains.Append(gain); - } - - break; - } - - case 23050: - { - for (a = 0 ; a < 4 ; a++) - { - cbIndex = ProcTools::GetValueFromShuffledAWBFrameL(aFrame, bitrate, - KGainPositions[TAWBBitRate23050*4+a], 7); - TInt pitch = t_qua_gain7b[cbIndex*2]; - TInt gain = t_qua_gain7b[cbIndex*2+1]; - aGains.Append(pitch); - aGains.Append(gain); - } - break; - } - case 19850: - { - for (a = 0 ; a < 4 ; a++) - { - cbIndex = ProcTools::GetValueFromShuffledAWBFrameL(aFrame, bitrate, - KGainPositions[TAWBBitRate19850*4+a], 7); - TInt pitch = t_qua_gain7b[cbIndex*2]; - TInt gain = t_qua_gain7b[cbIndex*2+1]; - aGains.Append(pitch); - aGains.Append(gain); - } - break; - } - case 18250: - { - for (a = 0 ; a < 4 ; a++) - { - - cbIndex = ProcTools::GetValueFromShuffledAWBFrameL(aFrame, bitrate, - KGainPositions[TAWBBitRate18250*4+a], 7); - TInt pitch = t_qua_gain7b[cbIndex*2]; - TInt gain = t_qua_gain7b[cbIndex*2+1]; - aGains.Append(pitch); - aGains.Append(gain); - } - break; - } - case 15850: - { - for (a = 0 ; a < 4 ; a++) - { - cbIndex = ProcTools::GetValueFromShuffledAWBFrameL(aFrame, bitrate, - KGainPositions[TAWBBitRate15850*4+a], 7); - TInt pitch = t_qua_gain7b[cbIndex*2]; - TInt gain = t_qua_gain7b[cbIndex*2+1]; - aGains.Append(pitch); - aGains.Append(gain); - } - - break; - } - case 14250: - { - for (a = 0 ; a < 4 ; a++) - { - cbIndex = ProcTools::GetValueFromShuffledAWBFrameL(aFrame, bitrate, - KGainPositions[TAWBBitRate14250*4+a], 7); - TInt pitch = t_qua_gain7b[cbIndex*2]; - TInt gain = t_qua_gain7b[cbIndex*2+1]; - aGains.Append(pitch); - aGains.Append(gain); - } - - break; - } - case 12650: - { - for (a = 0 ; a < 4 ; a++) - { - cbIndex = ProcTools::GetValueFromShuffledAWBFrameL(aFrame, bitrate, - KGainPositions[TAWBBitRate12650*4+a], 7); - TInt pitch = t_qua_gain7b[cbIndex*2]; - TInt gain = t_qua_gain7b[cbIndex*2+1]; - aGains.Append(pitch); - aGains.Append(gain); - } - - break; - } - case 8850: - { - for (a = 0 ; a < 4 ; a++) - { - cbIndex = ProcTools::GetValueFromShuffledAWBFrameL(aFrame, bitrate, - KGainPositions[TAWBBitRate8850*4+a], 6); - TInt pitch = t_qua_gain6b[cbIndex*2]; - TInt gain = t_qua_gain6b[cbIndex*2+1]; - aGains.Append(pitch); - aGains.Append(gain); - } - - break; - } - case 6600: - { - for (a = 0 ; a < 4 ; a++) - { - cbIndex = ProcTools::GetValueFromShuffledAWBFrameL(aFrame, bitrate, - KGainPositions[TAWBBitRate6600*4+a], 6); - TInt pitch = t_qua_gain6b[cbIndex*2]; - TInt gain = t_qua_gain6b[cbIndex*2+1]; - aGains.Append(pitch); - aGains.Append(gain); - } - - break; - } - - } - aMaxGain = 32767; - - return ETrue; - - - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/AWB/src/ProcAWBInFileHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/AWB/src/ProcAWBInFileHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,426 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "ProcAWBInFileHandler.h" -#include "ProcAWBFrameHandler.h" - -#include "AudPanic.h" -#include "AWBConstants.h" -#include "ProcTools.h" - - -CProcAWBInFileHandler* CProcAWBInFileHandler::NewL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - CProcAWBInFileHandler* self = NewLC(aFileName, aFileHandle, aClip, - aReadBufferSize, aTargetSampleRate, aChannelMode); - CleanupStack::Pop(self); - return self; - } - -CProcAWBInFileHandler* CProcAWBInFileHandler::NewLC(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - CProcAWBInFileHandler* self = new (ELeave) CProcAWBInFileHandler(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aFileHandle, aClip, aReadBufferSize, - aTargetSampleRate, aChannelMode); - return self; - } - -CProcAWBInFileHandler::CProcAWBInFileHandler() : CProcInFileHandler() - { - - - } - -void CProcAWBInFileHandler::GetPropertiesL(TAudFileProperties* aProperties) - { - - if (iProperties != 0) - { - *aProperties = *iProperties; - return; - } - - aProperties->iAudioTypeExtension = EAudExtensionTypeNoExtension; - - if (iFileOpen) - { - aProperties->iFileFormat = EAudFormatAMRWB; - - TInt oldPos = iFilePos; - - TInt fileSize = 0; - iFile.Size(fileSize); - - TBuf8<9> header; - - BufferedFileRead(0, header); - if (header.Compare(_L8("#!AMR-WB\n")) == 0) - { - aProperties->iAudioType = EAudAMRWB; - aProperties->iSamplingRate = 16000; - aProperties->iChannelMode = EAudSingleChannel; - aProperties->iBitrateMode = EAudVariable; - - TBuf8<1> modeByte; - BufferedFileRead(9, modeByte); - - TUint8 toc = modeByte[0]; - - TUint8 mode = static_cast((toc >> 3) & 0x0F); - - aProperties->iBitrate = KAWBBitRates[mode]; - TInt durationMilli = 0; - TInt frameAmount = 0; - TInt frameDuration = 0; - TInt frameSize = 0; - - GetFrameInfo(durationMilli, frameAmount, frameDuration, frameSize); - - TInt64 tmp = (TInt64)(TInt)durationMilli*1000; - // milliseconds->microseconds - TTimeIntervalMicroSeconds durationMicro(tmp); - aProperties->iDuration = durationMicro; - aProperties->iFrameCount = frameAmount; - - tmp = (TInt64)(TInt)frameDuration*1000; - TTimeIntervalMicroSeconds frameDurationMicro(tmp); - - aProperties->iFrameDuration = frameDurationMicro; - aProperties->iFrameLen = frameSize; - - - } - BufferedFileSetFilePos(oldPos); - } - else - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - if (iProperties == 0) - { - iProperties = new (ELeave) TAudFileProperties; - *iProperties = *aProperties; - } - - - - - } - -TBool CProcAWBInFileHandler::SeekAudioFrame(TInt32 aTime) - { - - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - TInt fileSize = 0; - iFile.Size(fileSize); - - - TInt firstModeByte = 9; - TInt readSize = 0; - TBuf8<1> modeByte; - iCurrentTimeMilliseconds = 0; - - BufferedFileSetFilePos(firstModeByte); - - while(iCurrentTimeMilliseconds < aTime) - { - - //iFile.Read(modeByte, 1); - BufferedFileRead(modeByte); - if (modeByte.Size() == 0) - { - return EFalse; - } - - TUint8 toc = modeByte[0]; - TUint8 mode = static_cast((toc >> 3) & 0x0F); - - readSize = KAWBPacked_size[mode]; - - if (!(BufferedFileSetFilePos(BufferedFileGetFilePos()+readSize))) - { - - // EOF - return EFalse; - } - iCurrentTimeMilliseconds += 20; - - } - return ETrue; - - } - -TBool CProcAWBInFileHandler::SeekCutInFrame() - { - - iCurrentTimeMilliseconds = iCutInTime; - return SeekAudioFrame(iCutInTime); - } - - - -void CProcAWBInFileHandler::ConstructL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - - iTargetSampleRate = aTargetSampleRate; - iChannelMode = aChannelMode; - - - InitAndOpenFileL(aFileName, aFileHandle, aReadBufferSize); - - - iClip = aClip; - - if (aClip != 0) - { - iCutInTime = ProcTools::MilliSeconds(aClip->CutInTime()); - - } - - - TUint8 sf[18] = {0x04,0x10,0x20,0x00,0x21, - 0x1C,0x14,0xD0,0x11,0x40,0x4C,0xC1,0xA0, - 0x50,0x00,0x00,0x44,0x30}; - iSilentFrame = HBufC8::NewL(18); - iSilentFrame->Des().Append(sf,18); - iSilentFrameDuration = 20; - - - if (iClip != 0 && iClip->Normalizing()) - { - SetNormalizingGainL(iFrameHandler); - } - - TAudFileProperties prop; - GetPropertiesL(&prop); - - iDecoder = CProcDecoder::NewL(); - - iDecodingPossible = iDecoder->InitL(prop, aTargetSampleRate, aChannelMode); - - - iFrameHandler = CProcAWBFrameHandler::NewL(); - - if (iClip != 0 && iClip->Normalizing()) - { - SetNormalizingGainL(iFrameHandler); - } - - } - - - - -TBool CProcAWBInFileHandler::GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime) - { - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - aFrame = NULL; - TInt readSize = 0; - TBuf8<1> modeByte; - - BufferedFileRead(modeByte); - - if (modeByte.Size() == 0) - { - return EFalse; - } - - TUint8 toc = modeByte[0]; - TUint8 mode = static_cast((toc >> 3) & 0x0F); - - readSize = KAWBPacked_size[mode]; - - - - HBufC8* audioFrame = HBufC8::NewL(readSize+1); - - TPtr8 tmpDes((TPtr8)audioFrame->Des()); - - BufferedFileRead((TPtr8&) tmpDes, readSize); - audioFrame->Des().Insert(0, modeByte); - - aFrame = audioFrame; - - TRAPD(err, ManipulateGainL(aFrame)); - - if (err != KErrNone) - { - // something went wrong with the gain manipulation - // continue by returning the original frame - } - - - aSize = aFrame->Size(); - aTime = 20; - iCurrentTimeMilliseconds += 20; - - - return ETrue; - } - - - -CProcAWBInFileHandler::~CProcAWBInFileHandler() - { - - if (iSilentFrame != 0) delete iSilentFrame; - ResetAndCloseFile(); - - - delete iDecoder; - delete iFrameHandler; - - } - - -TBool CProcAWBInFileHandler::GetFrameInfo(TInt& aSongDuration, - TInt& aFrameAmount, - TInt& aAverageFrameDuration, - TInt& aAverageFrameSize) - { - - - - - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - TInt fileSize = 0; - iFile.Size(fileSize); - - - TInt firstModeByte = 9; - TInt frameIndex = 1; - TInt readSize = 0; - TBuf8<1> modeByte; - - TInt32 frameSizeSum = 0; - - TInt filePos = iFilePos; - - BufferedFileSetFilePos(firstModeByte); - - while(frameIndex < 180000) // 1 hour - { - - - BufferedFileRead(modeByte); - if (modeByte.Size() == 0) - { - break; - } - - TUint8 toc = modeByte[0]; - TUint8 mode = static_cast((toc >> 3) & 0x0F); - - readSize = KAWBPacked_size[mode]; - - frameSizeSum += readSize; - aSongDuration += 20; - - if (!(BufferedFileSetFilePos(BufferedFileGetFilePos()+readSize))) - { - - break; // EOF - } - - frameIndex++; - } - - aAverageFrameSize = frameSizeSum/frameIndex; - aFrameAmount = frameIndex; - aAverageFrameDuration = aSongDuration/aFrameAmount; - BufferedFileSetFilePos(filePos); - return ETrue; - - - } - - -TBool CProcAWBInFileHandler::SetNormalizingGainL(const CProcFrameHandler* aFrameHandler) - { - - HBufC8* point = 0; - TInt siz; - TInt32 tim = 0; - TInt8 margin = 0; - TInt minMargin = KMaxTInt; - TInt tmpGain = 0; - TInt frameCounter = 0; - while(GetEncAudioFrameL(point, siz, tim)) - - { - aFrameHandler->GetNormalizingMargin(point, margin); - tmpGain += margin; - - delete point; - point = 0; - frameCounter++; - if (frameCounter > 1) - { - tmpGain = tmpGain/3; - - if (tmpGain < minMargin) - { - minMargin = tmpGain; - } - - frameCounter = 0; - tmpGain = 0; - } - } - - iNormalizingMargin = static_cast(minMargin); - - return ETrue; - - } - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/MP4/inc/ProcMP4InFileHandler.h --- a/videoeditorengine/audioeditorengine/codecs/MP4/inc/ProcMP4InFileHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,198 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __CPROCMP4INFILEHANDLER_H__ -#define __CPROCMP4INFILEHANDLER_H__ - -#include -#include -#include "mp4lib.h" - -#include "AudCommon.h" -#include "ProcConstants.h" -#include "ProcInFileHandler.h" -//#include "mp4aud.h" -#include "AACConstants.h" - -#include "ProcDecoder.h" - - -class CMP4Parser; - -class CProcMP4InFileHandler: public CProcInFileHandler - { - -public: - - /* - * - * Constructors & destructor - * - */ - - static CProcMP4InFileHandler* NewL(const TDesC& aFileName, RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - static CProcMP4InFileHandler* NewLC(const TDesC& aFileName, RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - virtual ~CProcMP4InFileHandler(); - - // From base class ---------> - - void GetPropertiesL(TAudFileProperties* aProperties); - - /** - * Seeks a certain audio frame for reading - * - * Possible leave codes: - * - * @param aTime time from the beginning of file in milliseconds - * - * @return ETrue if successful - * EFalse if beyond the file - */ - TBool SeekAudioFrame(TInt32 aTime); - - - /** - * Seeks a cut in audio frame for reading - * - * Possible leave codes: - * - * - * @return ETrue if successful - * - */ - TBool SeekCutInFrame(); - - virtual TBool SetNormalizingGainL(const CProcFrameHandler* aFrameHandler); - - // <-------------------------------------- from base class - - /* - * - * Used to retrieve information for frame handler - * - * @param aBytes (output) decoder specific info - * @param aBufferSize maximum allowed aBytes - * - * @return ETrue if successful (memory reserved) - * EFalse if not successful (no memory reserved) - * - * NOTE: The caller is responsible for releasing the memory! - */ - virtual TBool ReadAudioDecoderSpecificInfoL(HBufC8*& aBytes, TInt aBufferSize); - - /* - * Reads the time scale of the MP4 file - * - * @param aTimescale timescale - * - */ - virtual TBool ReadTimeScale(mp4_u32& aTimescale); - - /* - * Reads the audio description of the MP4 file - * - * @param aAudiolength length of the clip - * @param aAudiotype type of the clip - * @param aFramespersample number of frames in sample - * @param aTimescale timescale - * @param aAveragebitrate average bitrate - * - */ - MP4Err ParseRequestAudioDescription(mp4_u32 *aAudiolength, - mp4_u32 *aAudiotype, - mp4_u8 *aFramespersample, - mp4_u32 *aTimescale, - mp4_u32 *aAveragebitrate); - - /* - * - * Returns AAC info - * @param aAACInfo AAC info - * - */ - TBool GetInfoForFrameHandler(TAACFrameHandlerInfo& aAACInfo); - - - - - - -private: - - // constructL - void ConstructL(const TDesC& aFileName, RFile* aFileHandle, CAudClip* aClip, - TInt aReadBufferSize, TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - // c++ construtor - CProcMP4InFileHandler(); - - // gets audio frame info - TBool GetAudioFrameInfoL(TInt& aFrameAmount, TInt& aAverageFrameDuration, TInt& aAverageFrameSize, - TAudFileProperties* aProperties); - - TBool GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime); - - /* - * Reads one amr frame from iReadBuffer and updates iReadBufferPos - * - * @param aOneAMRFrame amr frame in return - * - * @return ETrue if successful, the caller must release the memory - * EFalse if frame can not be read, no need to release memory - */ - TBool ReadOneAMRFrameL(HBufC8*& aOneAMRFrame); - - TBool ReadOneAWBFrameL(HBufC8*& aOneAWBFrame); - -private: - - // Handle to MP4Lib - MP4Handle iParser; - - // timestamp of a previous frame - TInt32 iLastTimeStamp; - - // information for frame handler - TAACFrameHandlerInfo* iFrameInfo; - - // read buffer - mp4_u8 *iMP4ReadBuffer; - // read buffer size - TInt iMP4ReadBufferSize; - // position of the read buffer - TInt iMP4ReadBufferPos; - - - - -protected: - - - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/MP4/inc/mp4aud.h --- a/videoeditorengine/audioeditorengine/codecs/MP4/inc/mp4aud.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,208 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - mp4aud.h - MPEG-4 Audio structures and interface methods. - - Author(s): Juha Ojanpera - Copyright (c) 2001-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef MP4AUD_H_ -#define MP4AUD_H_ - -/*-- Project Headers. --*/ -#include "nok_bits.h" -#include "chandefs.h" - -/*-- Raw bitstream constants. --*/ -//#define LEN_PC_COMM (8) - -/*-- Program configuration element --*/ -/* -#define LEN_BYTE (8) -#define LEN_TAG (4) -#define LEN_PROFILE (2) -#define LEN_SAMP_IDX (4) -#define LEN_NUM_ELE (4) -#define LEN_NUM_LFE (2) -#define LEN_NUM_DAT (3) -#define LEN_NUM_CCE (4) -#define LEN_MMIX_IDX (2) -#define LEN_PSUR_ENAB (1) -#define LEN_ELE_IS_CPE (1) -#define LEN_IND_SW_CCE (1) -#define LEN_COMMENT_BYTES (8) -*/ -/* - Purpose: MPEG-4 Audio object types. - Explanation: - */ -typedef enum AudioObjectType -{ - NULL_OBJECT = -1, - AAC_MAIN, - AAC_LC, - AAC_SSR, - AAC_LTP, - AAC_SBR, - AAC_SCALABLE, - TWINVQ, - CELP, - HVXC, - RESERVED10, - RESERVED11, - TTSI = 11, - MAIN_SYNTHETIC, - WAVETABLE_SYNTHESIS, - GENERAL_MIDI, - AUDIO_FX, - ER_AAC_LC, - RESERVED18, - ER_AAC_LTP, - ER_AAC_SCALABLE, - ER_TWINVQ, - ER_BSAC, - ER_AAC_LD, - ER_CELP, - ER_HVXC, - ER_HILN, - ER_PARAMETRIC, - RESERVED28, - RESERVED29, - RESERVED30, - RESERVED31 - -} AudioObjectType; - -/* - Purpose: Configuration information for MPEG-4 GA coder. - Explanation: - */ -typedef struct GaSpecificInfoStr -{ - /*-- Common to all object types. --*/ - BOOL FrameLengthFlag; - BOOL DependsOnCoreCoder; - int16 CoreCoderDelay; - - /*-- AAC Scalable parameters. --*/ - uint8 layerNr; - - /*-- ER BSAC parameters. --*/ - uint8 numOfSubframe; - int16 layer_length; - - /*-- ER object specific data. --*/ - BOOL aacSectionDataResilienceFlag; - BOOL aacScalefactorDataResilienceFlag; - BOOL aacSpectralDataResilienceFlag; - - /*-- Future extension flag. --*/ - BOOL extensionFlag3; - -} GaSpecificInfo; - -/* - Purpose: Configuration information for MPEG-4 audio coder. - Explanation: - */ -typedef struct AudioSpecificInfoStr -{ - AudioObjectType audioObject; /* Object type. */ - uint8 samplingFreqIdx; /* Index to sampling frequency table. */ - int32 samplingFrequency; /* Sampling frequency if not in the table. */ - uint8 channelConfiguration; /* Index to channel configuration table. */ - GaSpecificInfo gaInfo; /* Config information for GA coder. */ - - AudioObjectType extAudioObject; - int16 syncExtensionType; - int32 extSamplingFrequency; - uint8 extSamplingFreqIdx; - uint8 sbrPresentFlag; - -} AudioSpecificInfo; - -/* - Purpose: Information about the audio channel. - Explanation: - */ -typedef struct -{ - int16 num_ele; - int16 ele_is_cpe[1 << LEN_TAG]; - int16 ele_tag[1 << LEN_TAG]; - -} EleList; - -/* - Purpose: Mixing information for downmixing multichannel input - into two-channel output. - Explanation: - */ -typedef struct -{ - int16 present; - int16 ele_tag; - int16 pseudo_enab; - -} MIXdown; - -/* - Purpose: Program configuration element. - Explanation: - */ -typedef struct -{ - int16 tag; - int16 profile; - int16 sample_rate_idx; - - BOOL pce_present; - - EleList front; - EleList side; - EleList back; - EleList lfe; - EleList data; - EleList coupling; - - MIXdown mono_mix; - MIXdown stereo_mix; - MIXdown matrix_mix; - - int16 num_comment_bytes; - char comments[(1 << LEN_PC_COMM) + 1]; - -} ProgConfig; - -/* - Purpose: MPEG-4 AAC transport handle. - Explanation: - */ -typedef struct mp4AACTransportHandleStr -{ - ProgConfig progCfg; - AudioSpecificInfo audioInfo; - -} mp4AACTransportHandle; - - -/*-- Access methods. --*/ - -BOOL -ReadMP4AudioConfig(uint8 *buffer, uint32 bufLen, mp4AACTransportHandle *mp4AAC_ff); - -void -WriteMP4AudioConfig(uint8 *buffer, uint32 bufLen, mp4AACTransportHandle *mp4AAC_ff); - -#endif /*-- MP4AUD_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/MP4/src/ProcMP4InFileHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/MP4/src/ProcMP4InFileHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1365 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include -#include -#include "AudCommon.h" -#include "ProcConstants.h" -#include "AWBConstants.h" -#include "ProcMP4InFileHandler.h" -#include "mp4aud.h" -#include "ProcAACFrameHandler.h" -#include "ProcAMRFrameHandler.h" -#include "ProcAWBFrameHandler.h" -#include "audconstants.h" - - - -#include "ProcTools.h" -//#include "aacenc_interface.h" - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -// Max coded AAC frame size (768 bytes per channel) -const TUint KMaxAACFrameSize(1536); - - -CProcMP4InFileHandler* CProcMP4InFileHandler::NewL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - CProcMP4InFileHandler* self = NewLC(aFileName, aFileHandle, aClip, aReadBufferSize, - aTargetSampleRate, aChannelMode); - CleanupStack::Pop(self); - return self; - - } - -CProcMP4InFileHandler* CProcMP4InFileHandler::NewLC(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - - { - - CProcMP4InFileHandler* self = new (ELeave) CProcMP4InFileHandler(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aFileHandle, aClip, aReadBufferSize, - aTargetSampleRate, aChannelMode); - return self; - - } - -void CProcMP4InFileHandler::GetPropertiesL(TAudFileProperties* aProperties) - { - PRINT((_L("CProcMP4InFileHandler::GetPropertiesL in") )); - if (iProperties != 0) - { - *aProperties = *iProperties; - PRINT((_L("CProcMP4InFileHandler::GetPropertiesL use cached properties, out") )); - return; - } - - if (iProperties == 0) - { - iProperties = new (ELeave) TAudFileProperties; - } - - mp4_u32 audiolength = 0; - mp4_u32 audiotype = 0; - mp4_u8 framespersample = 0; - mp4_u32 timescale = 0; - mp4_u32 averagebitrate = 0; - - aProperties->iFileFormat = EAudFormatUnrecognized; - aProperties->iAudioType = EAudTypeUnrecognized; - aProperties->iDuration = 0; - aProperties->iSamplingRate = 0; - aProperties->iBitrate = 0; - aProperties->iChannelMode = EAudChannelModeNotRecognized; - aProperties->iBitrateMode = EAudBitrateModeNotRecognized; - aProperties->iAudioTypeExtension = EAudExtensionTypeNoExtension; - aProperties->iFrameLen = 0; - aProperties->iFrameDuration = 0; - aProperties->iFrameCount = 0; - aProperties->iNumFramesPerSample = 1; - aProperties->iAACObjectType = EAudAACObjectTypeNone; - - MP4Err err = MP4ParseRequestAudioDescription(iParser, - &audiolength, - &audiotype, - &framespersample, - ×cale, - &averagebitrate); - - - if (err == MP4_OK) - { - if (audiotype == MP4_TYPE_MPEG4_AUDIO) - { - - aProperties->iAudioType = EAudAAC_MPEG4; - aProperties->iBitrateMode = EAudVariable; - - } - else if (audiotype == MP4_TYPE_AMR_NB) - { - aProperties->iAudioType = EAudAMR; - aProperties->iBitrateMode = EAudVariable; - - } - else if (audiotype == MP4_TYPE_AMR_WB) - { - aProperties->iAudioType = EAudAMRWB; - aProperties->iBitrateMode = EAudVariable; - - } - aProperties->iBitrate = averagebitrate; - - // casting for PC-Lint - TInt64 ti = (TInt64)(TInt)(audiolength*1000); - TTimeIntervalMicroSeconds TTaudiolength(ti); - - aProperties->iDuration = TTaudiolength; - aProperties->iFileFormat = EAudFormatMP4; - //aProperties->iFrameLen = framespersample; - - - } - else if (err == MP4_NO_AUDIO) - { - aProperties->iAudioType = EAudNoAudio; - *iProperties = *aProperties; - return; - - //User::Leave(KErrGeneral); - } - else - { - // a special case: there may be audio track but it is empty; if type was recognized, mark as no audio - if ( (audiotype == MP4_TYPE_MPEG4_AUDIO) || (audiotype == MP4_TYPE_AMR_NB) || (audiotype == MP4_TYPE_AMR_WB)) - { - PRINT((_L("CProcMP4InFileHandler::GetPropertiesL problems with getting audio description, mark no audio since audio type was recognized"))); - aProperties->iAudioType = EAudNoAudio; - *iProperties = *aProperties; - } - PRINT((_L("CProcMP4InFileHandler::GetPropertiesL out with MP4Err %d"), err )); - return; - - } - - const TInt KMaxBufferSize = 128; - - mp4_u8 *buffer = new (ELeave) mp4_u8[KMaxBufferSize]; - CleanupStack::PushL(buffer); - - mp4_u32 decspecinfosize = 0; - - err = MP4ParseReadAudioDecoderSpecificInfo( - iParser, - buffer, - KMaxBufferSize, - &decspecinfosize); - - - mp4AACTransportHandle mp4AAC_ff; - - if (err == MP4_OK && aProperties->iAudioType == EAudAAC_MPEG4) - { - - PRINT((_L("CProcMP4InFileHandler::GetPropertiesL AAC found") )); - - TInt ret = ReadMP4AudioConfig(buffer, - decspecinfosize, - &mp4AAC_ff); - if (ret != TRUE) - { - aProperties->iFileFormat = EAudFormatUnrecognized; - aProperties->iAudioType = EAudTypeUnrecognized; - User::Leave(KErrNotSupported); - } - - // ProgConfig progCfg = mp4AAC_ff.progCfg; - AudioSpecificInfo audioInfo = mp4AAC_ff.audioInfo; - aProperties->iSamplingRate = audioInfo.samplingFrequency; - // TInt tmp = mp4AAC_ff.progCfg.coupling.num_ele; - - // Check that the sample rate is supported - if( (aProperties->iSamplingRate != KAedSampleRate8kHz) && - (aProperties->iSamplingRate != KAedSampleRate11kHz) && - (aProperties->iSamplingRate != KAedSampleRate16kHz) && - (aProperties->iSamplingRate != KAedSampleRate22kHz) && - (aProperties->iSamplingRate != KAedSampleRate24kHz) && - (aProperties->iSamplingRate != KAedSampleRate32kHz) && - (aProperties->iSamplingRate != KAedSampleRate44kHz) && - (aProperties->iSamplingRate != KAedSampleRate48kHz) ) - { - User::Leave(KErrNotSupported); - } - - if (audioInfo.channelConfiguration == 2) - { - aProperties->iChannelMode = EAudStereo; - } - else if (audioInfo.channelConfiguration == 1) - { - - aProperties->iChannelMode = EAudSingleChannel; - } - else - { - aProperties->iChannelMode = EAudChannelModeNotRecognized; - } - - if (mp4AAC_ff.audioInfo.samplingFreqIdx != - mp4AAC_ff.progCfg.sample_rate_idx) - { - aProperties->iFileFormat = EAudFormatUnrecognized; - aProperties->iAudioType = EAudTypeUnrecognized; - aProperties->iDuration = 0; - aProperties->iSamplingRate = 0; - aProperties->iBitrate = 0; - aProperties->iChannelMode = EAudChannelModeNotRecognized; - aProperties->iBitrateMode = EAudBitrateModeNotRecognized; - aProperties->iFrameLen = 0; - aProperties->iFrameDuration = 0; - aProperties->iFrameCount = 0; - aProperties->iNumFramesPerSample = 1; - CleanupStack::PopAndDestroy(buffer); - PRINT((_L("CProcMP4InFileHandler::GetPropertiesL audio not recognized, out") )); - User::Leave(KErrNotSupported); - return; - } - - - - iFrameInfo->iSampleRateID = static_cast(mp4AAC_ff.progCfg.sample_rate_idx); - iFrameInfo->iSampleRateID = static_cast(mp4AAC_ff.audioInfo.samplingFreqIdx); - - - iFrameInfo->iProfileID = static_cast(mp4AAC_ff.progCfg.profile); - - aProperties->iAACObjectType = TAudAACObjectType(iFrameInfo->iProfileID); - - if (aProperties->iChannelMode == EAudStereo) - { - iFrameInfo->iNumChannels = 2; - } - else if (aProperties->iChannelMode == EAudSingleChannel) - { - iFrameInfo->iNumChannels = 1; - } - else - { - iFrameInfo->iNumChannels = 0; - } - - - iFrameInfo->iIs960 = mp4AAC_ff.audioInfo.gaInfo.FrameLengthFlag; - - iFrameInfo->iNumCouplingChannels = 0; - - iFrameInfo->isSBR = 0; - iFrameInfo->iIsParametricStereo = 0; - - /* - * Get frame parameters for eAAC+ codec. It is possible that the bitstream - * is plain AAC but we don't know it before the 1st frame is parsed! - */ - - HBufC8* frame = 0; - TInt size = 0; - - TInt32 time = 0; - - // Set the iProperties as GetEncAudioFrameL is using it!! - *iProperties = *aProperties; - if(GetEncAudioFrameL(frame, size, time)) - { - PRINT((_L("CProcMP4InFileHandler::GetPropertiesL check AAC+ parameters") )); - - TUint8* buf = const_cast(frame->Right(frame->Size()).Ptr()); - CProcAACFrameHandler::GetEnhancedAACPlusParametersL(buf, frame->Size(), aProperties, iFrameInfo); - delete frame; - frame = 0; - } - - } - else if (err == MP4_OK && aProperties->iAudioType == EAudAMR) - { - aProperties->iChannelMode = EAudSingleChannel; - aProperties->iSamplingRate = 8000; - - } - else if (err == MP4_OK && aProperties->iAudioType == EAudAMRWB) - { - aProperties->iChannelMode = EAudSingleChannel; - aProperties->iSamplingRate = 16000; - - } - - TInt frameAmount = 0; - TInt frameSize = 0; - TInt frameDuration = 0; - - - TInt rv = ETrue; - - *iProperties = *aProperties; - rv = GetAudioFrameInfoL(frameAmount, frameDuration, frameSize, aProperties); - - if (rv) - { - aProperties->iFrameCount = frameAmount; - aProperties->iFrameLen = frameSize; - - // casting for PC-Lint - TInt64 durMicro = (TInt64) (TInt) frameDuration*1000; - aProperties->iFrameDuration = durMicro; - - } - - - - - - *iProperties = *aProperties; - - - CleanupStack::PopAndDestroy(buffer); - - PRINT((_L("CProcMP4InFileHandler::GetPropertiesL out") )); - } - - -TBool CProcMP4InFileHandler::SeekAudioFrame(TInt32 aTime) - { - - mp4_u32 position = static_cast(aTime); - mp4_u32 audioPosition = 0; - - mp4_u32 videoPosition = 0; - mp4_bool keyframe = EFalse; - - if (iMP4ReadBuffer != 0) - { - delete[] iMP4ReadBuffer; - iMP4ReadBuffer = 0; - iMP4ReadBufferPos = 0; - iMP4ReadBufferSize = 0; - } - - MP4Err err = MP4ParseSeek(iParser, - position, - &audioPosition, - &videoPosition, - keyframe); - - if (err == MP4_OK) - { - - iCurrentTimeMilliseconds = audioPosition; - iLastTimeStamp = audioPosition - I64INT(iProperties->iFrameDuration.Int64()/1000); - aTime = audioPosition; - return ETrue; - } - else - { - return EFalse; - } - } - -TBool CProcMP4InFileHandler::SeekCutInFrame() - { - - iCurrentTimeMilliseconds = iCutInTime; - return SeekAudioFrame(iCutInTime); - } - - - -TBool CProcMP4InFileHandler::SetNormalizingGainL(const CProcFrameHandler* aFrameHandler) -{ - - - if (iProperties->iAudioType == EAudAAC_MPEG4) - { - - HBufC8* point = 0; - TInt siz; - TInt32 tim = 0; - TInt maxGain = 0; - RArray gains; - TInt maxAverage = 0; - TInt tmpGain = 0; - TInt gainCounter = 0; - TInt timeNow = 0; - while(GetEncAudioFrameL(point, siz, tim)) - { - - aFrameHandler->GetGainL(point, gains, maxGain); - timeNow += tim; - - for (TInt a = 0 ; a < gains.Count() ; a++) - { - tmpGain += gains[a]; - gainCounter++; - } - gains.Reset(); - - if (timeNow > 1000) - { - if (tmpGain/gainCounter > maxAverage) - { - maxAverage = tmpGain/gainCounter; - } - - timeNow = 0; - tmpGain = 0; - gainCounter = 0; - } - - delete point; - - } - - // bigger value makes normalizing more efficient, but makes - // dynamic compression more likely to occur - TInt NormalizingFactor = 175; - if (iProperties->iBitrate > 20000 && iProperties->iBitrate < 40000) - { - - // 32 kBit/s - NormalizingFactor = 170; - - } - else if (iProperties->iBitrate > 80000 && iProperties->iBitrate < 110000) - { - // 96 kBit/s - NormalizingFactor = 170; - - } - - - else if (iProperties->iBitrate > 110000 && iProperties->iBitrate < 140000) - { - // 128 kBit/s - if (iProperties->iChannelMode == EAudSingleChannel) - NormalizingFactor = 160; - else - NormalizingFactor = 170; - - } - else if (iProperties->iBitrate > 150000) - { - // 256 kBit/s - if (iProperties->iChannelMode == EAudSingleChannel) - NormalizingFactor = 150; - else - NormalizingFactor = 165; - - } - else - { - - if (iProperties->iChannelMode == EAudSingleChannel) - NormalizingFactor = 170; - - } - - - TInt gainBoost = (NormalizingFactor-maxAverage)*3; - - if (gainBoost < 0) gainBoost = 0; - - iNormalizingMargin = static_cast(gainBoost); - - - } - - else if (iProperties->iAudioType == EAudAMR) - { - HBufC8* point = 0; - TInt siz; - TInt32 tim = 0; - TInt8 margin = 0; - TInt minMargin = KMaxTInt; - TInt tmpGain = 0; - TInt frameCounter = 0; - while(GetEncAudioFrameL(point, siz, tim)) - - { - aFrameHandler->GetNormalizingMargin(point, margin); - tmpGain += margin; - - delete point; - point = 0; - frameCounter++; - if (frameCounter > 1) - { - tmpGain = tmpGain/3; - - if (tmpGain < minMargin) - { - minMargin = tmpGain; - } - - frameCounter = 0; - tmpGain = 0; - } - } - - iNormalizingMargin = static_cast(minMargin); - } - return ETrue; - -} - -TBool CProcMP4InFileHandler::ReadAudioDecoderSpecificInfoL(HBufC8*& aBytes, TInt aBufferSize) - { - - - aBytes = HBufC8::NewL(aBufferSize); - - CleanupStack::PushL(aBytes); - - mp4_u8 *buffer = new (ELeave) mp4_u8[aBufferSize]; - mp4_u32 decspecinfosize = 0; - - MP4Err err = MP4ParseReadAudioDecoderSpecificInfo( - iParser, - buffer, - aBufferSize, - &decspecinfosize); - - if (err == MP4_OK) - { - - for (TUint a = 0 ; a < decspecinfosize ; a++) - { - aBytes->Des().Append(buffer[a]); - } - } - else - { - delete[] buffer; - buffer = 0; - CleanupStack::PopAndDestroy(aBytes); - aBytes = 0; - return EFalse;; - } - - delete[] buffer; - buffer = 0; - - CleanupStack::Pop(aBytes); - return ETrue; - - - } - - -CProcMP4InFileHandler::~CProcMP4InFileHandler() - { - if (iFileOpen) - { - MP4ParseClose(iParser); - } - if (iSilentFrame != 0) - { - delete iSilentFrame; - } - - if (iFrameInfo != 0) - { - delete iFrameInfo; - iFrameInfo = 0; - } - - if (iMP4ReadBuffer != 0) - { - delete[] iMP4ReadBuffer; - } - - delete iDecoder; - - delete iFrameHandler; - - } - - -void CProcMP4InFileHandler::ConstructL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt /*aReadBufferSize*/, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - //InitAndOpenFileL(aFileName, aCutInTime, aReadBufferSize); - - iFrameInfo = new (ELeave) TAACFrameHandlerInfo; - - - // init a raw silent frame - // in other in file handlers it is created in CProcInFileHandler - - const TInt KBitsPerSample = 16; - - TInt samplesIn20ms = ((iTargetSampleRate) * - (KBitsPerSample)/8)/50; - - if (iChannelMode == EAudStereo) - { - samplesIn20ms *= 2; - - } - if (samplesIn20ms % 2 != 0) samplesIn20ms--; - - iRawSilentFrame = HBufC8::NewL(samplesIn20ms); - - iRawSilentFrame->Des().SetLength(samplesIn20ms); - iRawSilentFrame->Des().Fill(0); - - iRawSilentFrameDuration = 20; - - - iClip = aClip; - - iTargetSampleRate = aTargetSampleRate; - iChannelMode = aChannelMode; - - if (iParser == 0) - { - - MP4Err err; - if (aFileHandle) - { - err = MP4ParseOpenFileHandle(&iParser, aFileHandle); - } - else - { - TBuf<258> temp(aFileName); - temp.ZeroTerminate(); - MP4FileName name = (MP4FileName)(temp.Ptr()); - err = MP4ParseOpen(&iParser , name); - } - - if (err == MP4_FILE_ERROR) - { - User::Leave(KErrNotFound); - } - else if (err != MP4_OK) - { - User::Leave(KErrGeneral); - } - iFileOpen = ETrue; - - } - - TAudFileProperties prop; - GetPropertiesL(&prop); - - if (prop.iAudioType == EAudAAC_MPEG4) - { - // generate a silent frame ------------------> - - if (iProperties->iChannelMode == EAudSingleChannel) - { - - iSilentFrame = HBufC8::NewL(KSilentMonoAACFrameLenght); - iSilentFrame->Des().Append(KSilentMonoAACFrame, KSilentMonoAACFrameLenght); - - } - else if (iProperties->iChannelMode == EAudStereo) - { - - iSilentFrame = HBufC8::NewL(KSilentStereoAACFrameLenght); - iSilentFrame->Des().Append(KSilentStereoAACFrame, KSilentStereoAACFrameLenght); - - - } - else - { - User::Leave(KErrNotSupported); - } - - - mp4_u32 frameDurationMilli = ProcTools::MilliSeconds(iProperties->iFrameDuration); - - - iSilentFrameDuration = frameDurationMilli; - - - - // <------------------generate a silent frame - - iFrameHandler = CProcAACFrameHandler::NewL(*iFrameInfo); - - } - else if (prop.iAudioType == EAudAMR) - { - const TInt KSilentFrameSize = 13; - - TUint8 silentFrame[KSilentFrameSize]= - { - 0x04,0x63,0x3C,0xC7,0xF0,0x03,0x04,0x39,0xFF,0xE0, - 0x00,0x00,0x00 - }; - - - iSilentFrame = HBufC8::NewL(KSilentFrameSize); - iSilentFrame->Des().Append(silentFrame, KSilentFrameSize); - iSilentFrameDuration = 20; - - - iFrameHandler = CProcAMRFrameHandler::NewL(); - - } - else if (prop.iAudioType == EAudAMRWB) - { - TUint8 sf[18] = {0x04,0x10,0x20,0x00,0x21, - 0x1C,0x14,0xD0,0x11,0x40,0x4C,0xC1,0xA0, - 0x50,0x00,0x00,0x44,0x30}; - iSilentFrame = HBufC8::NewL(18); - iSilentFrame->Des().Append(sf,18); - iSilentFrameDuration = 20; - - iFrameHandler = CProcAWBFrameHandler::NewL(); - - } - else if (prop.iAudioType == EAudNoAudio ) - { - iDecodingPossible = EFalse; - return; - } - - if (aClip != 0) - { - iCutInTime = ProcTools::MilliSeconds(aClip->CutInTime()); - - } - - iDecoder = CProcDecoder::NewL(); - - iDecodingPossible = iDecoder->InitL(*iProperties, aTargetSampleRate, aChannelMode); - - if (iClip != 0 && iClip->Normalizing()) - { - SetNormalizingGainL(iFrameHandler); - } - - - } - -CProcMP4InFileHandler::CProcMP4InFileHandler() : CProcInFileHandler(), iParser(0), - iLastTimeStamp(0), iFrameInfo(0) - { - - } - -TBool CProcMP4InFileHandler::GetAudioFrameInfoL(TInt& aFrameAmount, - TInt& aAverageFrameDuration, - TInt& aAverageFrameSize, - TAudFileProperties* aProperties) - { - - PRINT((_L("CProcMP4InFileHandler::GetAudioFrameInfoL in"))); - mp4_u32 audiolength = 0; - mp4_u32 audiotype = 0; - - mp4_u8 framespersample = 0; - mp4_u32 timescale = 0; - mp4_u32 averagebitrate = 0; - - if (aProperties->iSamplingRate == 0) return KErrNotSupported; - - MP4Err err = MP4ParseRequestAudioDescription(iParser, &audiolength, &audiotype, - &framespersample, ×cale, &averagebitrate); - - - if (aProperties->iAudioType == EAudAMR) - { - aAverageFrameDuration = 20; - - } - else if(aProperties->iAudioType == EAudAMRWB) - { - aAverageFrameDuration = 20; - - } - else if(aProperties->iAudioType == EAudAAC_MPEG4) - { - - aAverageFrameDuration = (1024*1000)/(aProperties->iSamplingRate); - - } - else - { - User::Leave(KErrNotSupported); - } - - aFrameAmount = TInt((TInt)audiolength/aAverageFrameDuration); - - mp4_u32 lastPosition = 0; - - err = MP4ParseGetLastPosition(iParser, &lastPosition); - - SeekAudioFrame(0); - - - if (err != MP4_OK) - { - return EFalse; - - } - - // ignore the first 2 frames - HBufC8* frame; - TInt size = 0; - TInt32 time = 0; - - - if(GetEncAudioFrameL(frame, size, time)) - { - - if (aProperties->iAudioType == EAudAAC_MPEG4) - { - - /* - * Read the eAAC+ parameters. Please note that the decoder specific - * configuration information does, in case of explicit signalling, - * signal the presence of SBR bitstream elements but not completely - * the configuration of the SBR. For example, parametric stereo is - * signalled only at the bitstream level (due to backwards comptibility - * reasons). - */ - - TUint8* buf = const_cast(frame->Right(frame->Size()).Ptr()); - CProcAACFrameHandler::GetEnhancedAACPlusParametersL(buf, size, aProperties, iFrameInfo); - - } - delete frame; - frame = 0; - } - - if (GetEncAudioFrameL(frame, size, time)) - { - delete frame; - frame = 0; - } - - // calculate the average of the next 100 frames - - TInt32 timeSum = 0; - TInt32 sizeSum = 0; - TInt divider = 0; - TInt maxFrameNr = 100; - if ( aFrameAmount < 100 ) - { - maxFrameNr = aFrameAmount; - } - - - for (TInt a = 0 ; a < maxFrameNr ; a++) - { - if (GetEncAudioFrameL(frame, size, time)) - { - timeSum += time; - sizeSum += size; - divider++; - delete frame; - frame = 0; - } - else - { - - if ( a > 0 ) - { - PRINT((_L("CProcMP4InFileHandler::GetAudioFrameInfoL breaking the loop since less than 100 frames in input (%d)"),a)); - break; - } - else - { - PRINT((_L("CProcMP4InFileHandler::GetAudioFrameInfoL can't get any frames from input"))); - SeekAudioFrame(lastPosition); - return EFalse; - } - } - - } - - if (divider > 0) - { - aAverageFrameDuration = static_cast(timeSum/divider); - aAverageFrameSize = static_cast(sizeSum/divider); - } - - SeekAudioFrame(lastPosition); - - PRINT((_L("CProcMP4InFileHandler::GetAudioFrameInfoL out"))); - return ETrue; - } - - -TBool CProcMP4InFileHandler::GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime) - { - PRINT((_L("CProcMP4InFileHandler::GetEncAudioFrameL in"))); - if (iParser == 0) - { - aFrame = 0; - return EFalse; - } - - mp4_u32 type = 0; - if (iProperties->iAudioType == EAudAAC_MPEG4) - type = MP4_TYPE_MPEG4_AUDIO; - else if (iProperties->iAudioType == EAudAMR) - { - type = MP4_TYPE_AMR_NB; - if (iMP4ReadBuffer != 0 && iMP4ReadBufferSize > 0 && iMP4ReadBufferPos < iMP4ReadBufferSize) - { - // we can just read a frame from in-buffer - aTime = 20; - TBool ret = ReadOneAMRFrameL(aFrame); - - if (iClip != 0 && iFrameHandler != 0) - { - TRAPD(err0, ManipulateGainL(aFrame)); - if (err0 != KErrNone) - { - // something went wrong with the gain manipulation - // continue by returning the original frame - } - - } - PRINT((_L("CProcMP4InFileHandler::GetEncAudioFrameL out from AMRNB branch"))); - return ret; - } - else - { - // if nothing more to read in the inBuffer - delete[] iMP4ReadBuffer; - iMP4ReadBuffer = 0; - iMP4ReadBufferPos = 0; - iMP4ReadBufferSize = 0; - } - - - // see if stuff left in the read buffer - } - - else if (iProperties->iAudioType == EAudAMRWB) - { - type = MP4_TYPE_AMR_WB; - - if (iMP4ReadBuffer != 0 && iMP4ReadBufferSize > 0 && iMP4ReadBufferPos < iMP4ReadBufferSize) - { - // we can just read a frame from in-buffer - aTime = 20; - TBool ret = ReadOneAWBFrameL(aFrame); - - if (iClip != 0 && iFrameHandler != 0) - { - TRAPD(err0, ManipulateGainL(aFrame)); - if (err0 != KErrNone) - { - // something went wrong with the gain manipulation - // continue by returning the original frame - } - - } - PRINT((_L("CProcMP4InFileHandler::GetEncAudioFrameL out from AMRWB branch"))); - return ret; - } - - } - - - - mp4_u32 framesize = 0; - mp4_u32 audiosize = 0; - mp4_u32 timestamp = 0; - mp4_u32 returnedframes = 0; - mp4_u32 timestamp2 = 0; - - MP4Err err =MP4ParseNextFrameSize(iParser, type, &framesize); - if (err == MP4_OK) - { - - // some error handling - if (type == MP4_TYPE_MPEG4_AUDIO && (framesize > KMaxAACFrameSize)) - { - // we got too many bytes for some reason... - delete[] iMP4ReadBuffer; - iMP4ReadBuffer = 0; - iMP4ReadBufferSize = 0; - iMP4ReadBufferPos = 0; - PRINT((_L("CProcClipInfoAO::CProcMP4InFileHandler::GetEncAudioFrameL out, too many bytes for AAC %d"), framesize )); - return EFalse; - - } - - - iMP4ReadBufferSize = framesize; - delete[] iMP4ReadBuffer; - iMP4ReadBuffer = 0; - iMP4ReadBuffer = new (ELeave) mp4_u8[framesize]; - iMP4ReadBufferPos = 0; - - err = MP4ParseReadAudioFrames(iParser, - iMP4ReadBuffer, - framesize, - &audiosize, - ×tamp, - &returnedframes, - ×tamp2); - - if (err == MP4_OK) - { - aSize = framesize; - aTime = timestamp - iLastTimeStamp; - iCurrentTimeMilliseconds = timestamp; - iLastTimeStamp = timestamp; - - if (type == MP4_TYPE_MPEG4_AUDIO) - { - aFrame = HBufC8::NewL(audiosize); - aFrame->Des().Append(iMP4ReadBuffer, audiosize); - - } - else if (type == MP4_TYPE_AMR_NB) - { - aTime = 20; - ReadOneAMRFrameL(aFrame); - } - else if (type == MP4_TYPE_AMR_WB) - { - aTime = 20; - ReadOneAWBFrameL(aFrame); - } - } - else - { - delete[] iMP4ReadBuffer; - iMP4ReadBuffer = 0; - iMP4ReadBufferSize = 0; - iMP4ReadBufferPos = 0; - PRINT((_L("CProcMP4InFileHandler::GetEncAudioFrameL out since MP4ParseReadAudioFrames failed"))); - return EFalse; - - } - - // delete if MP4AUDIO. - // AMR frames will be read from buffer as MP4 library - // might have returned more than one AMR-frames - if (type == MP4_TYPE_MPEG4_AUDIO) - { - delete[] iMP4ReadBuffer; - iMP4ReadBuffer = 0; - iMP4ReadBufferSize = 0; - iMP4ReadBufferPos = 0; - } - - } - else - { - PRINT((_L("CProcMP4InFileHandler::GetEncAudioFrameL out since MP4ParseNextFrameSize failed, error %d"),err)); - return EFalse; - - } - - TInt err2 = KErrNone; - - if (iProperties->iAudioTypeExtension == EAudExtensionTypeNoExtension) - { - - // AAC Plus is manipulated in time domain - - if (iClip != 0 && iFrameHandler != 0) - { - TRAP(err2, ManipulateGainL(aFrame)); - } - - } - - if (err2 != KErrNone) - { - // something went wrong with the gain manipulation - // continue by returning the original frame - } - aSize = aFrame->Size(); - - PRINT((_L("CProcMP4InFileHandler::GetEncAudioFrameL out successfully"))); - return ETrue; - } - - -TBool CProcMP4InFileHandler::ReadTimeScale(mp4_u32& aTimescale) - { - - mp4_u32 audiolength = 0; - mp4_u32 audiotype = 0; - mp4_u8 framespersample = 0; - mp4_u32 timescale = 0; - mp4_u32 averagebitrate = 0; - - MP4Err err = MP4ParseRequestAudioDescription(iParser, - &audiolength, - &audiotype, - &framespersample, - ×cale, - &averagebitrate); - - - - if (err == MP4_OK) - { - aTimescale = timescale; - return ETrue; - } - else - { - return EFalse; - } - - } - - -MP4Err CProcMP4InFileHandler::ParseRequestAudioDescription( - mp4_u32 *aAudiolength, - mp4_u32 *aAudiotype, - mp4_u8 *aFramespersample, - mp4_u32 *aTimescale, - mp4_u32 *aAveragebitrate) - - { - - return MP4ParseRequestAudioDescription(iParser, - aAudiolength, - aAudiotype, - aFramespersample, - aTimescale, - aAveragebitrate); - - } - - -TBool CProcMP4InFileHandler::GetInfoForFrameHandler(TAACFrameHandlerInfo& aAACInfo) - { - if (iParser == 0) - { - return EFalse; - } - - aAACInfo.iIs960 = iFrameInfo->iIs960; - aAACInfo.iIsParametricStereo = iFrameInfo->iIsParametricStereo; - aAACInfo.iNumChannels = iFrameInfo->iNumChannels; - aAACInfo.iNumCouplingChannels = iFrameInfo->iNumCouplingChannels; - aAACInfo.iProfileID = iFrameInfo->iProfileID; - aAACInfo.iSampleRateID = iFrameInfo->iSampleRateID; - aAACInfo.isSBR = iFrameInfo->isSBR; - - - mp4_u8 *buffer = 0; - - const TInt bufSize = 64; - TRAPD(nerr, buffer = new (ELeave) mp4_u8[bufSize]) - - if (nerr != KErrNone) - { - delete[] buffer; - return EFalse; - } - - - mp4_u32 decspecinfosize = 0; - - MP4Err err = MP4ParseReadAudioDecoderSpecificInfo( - iParser, - buffer, - 64, - &decspecinfosize); - - - if (err == MP4_OK) - { - - mp4AACTransportHandle mp4AAC_ff; - int16 err2 = ReadMP4AudioConfig(buffer, - decspecinfosize, - &mp4AAC_ff); - if (err2 != TRUE) - { - - delete[] buffer; - return EFalse; - - } - - aAACInfo.iSampleRateID = static_cast(mp4AAC_ff.progCfg.sample_rate_idx); - aAACInfo.iSampleRateID = static_cast(mp4AAC_ff.audioInfo.samplingFreqIdx); - - aAACInfo.iProfileID = static_cast(mp4AAC_ff.progCfg.profile); - - if (iProperties->iChannelMode == EAudStereo) - { - aAACInfo.iNumChannels = 2; - } - else if (iProperties->iChannelMode == EAudSingleChannel) - { - aAACInfo.iNumChannels = 1; - } - else - { - aAACInfo.iNumChannels = 0; - } - - - aAACInfo.iIs960 = mp4AAC_ff.audioInfo.gaInfo.FrameLengthFlag; - - aAACInfo.iNumCouplingChannels = 0; - - aAACInfo.iIsParametricStereo = 0; - aAACInfo.isSBR = 0; - - } - - else - { - - delete[] buffer; - return EFalse; - - } - - delete[] buffer; - return ETrue; - - - - } - - - - -TBool CProcMP4InFileHandler::ReadOneAMRFrameL(HBufC8*& aOneAMRFrame) - { - if (iMP4ReadBuffer == 0 || iMP4ReadBufferSize < 1 - || iMP4ReadBufferPos >= iMP4ReadBufferSize) - { - aOneAMRFrame = 0; - return EFalse; - } - - - TInt readSize = 0; - TUint8 dec_mode = (enum Mode)((iMP4ReadBuffer[iMP4ReadBufferPos] & 0x0078) >> 3); - - switch (dec_mode) - { - case 0: - readSize = 12; - break; - case 1: - readSize = 13; - break; - case 2: - readSize = 15; - break; - case 3: - readSize = 17; - break; - case 4: - readSize = 19; - break; - case 5: - readSize = 20; - break; - case 6: - readSize = 26; - break; - case 7: - readSize = 31; - break; - case 8: - readSize = 5; - break; - case 15: - readSize = 0; - break; - default: - readSize = 0; - break; - }; - - aOneAMRFrame = HBufC8::NewL(readSize+1); - -// TPtr8 tmpDes((TPtr8)aOneAMRFrame->Des()); - - TInt lastByte = iMP4ReadBufferPos + readSize; - - for (; iMP4ReadBufferPos <= lastByte ; iMP4ReadBufferPos++) - { - - aOneAMRFrame->Des().Append(iMP4ReadBuffer[iMP4ReadBufferPos]); - } -// iMP4ReadBufferPos++; - - return ETrue; - - } - -TBool CProcMP4InFileHandler::ReadOneAWBFrameL(HBufC8*& aOneAWBFrame) - { - if (iMP4ReadBuffer == 0 || iMP4ReadBufferSize < 1 - || iMP4ReadBufferPos >= iMP4ReadBufferSize) - { - aOneAWBFrame = 0; - return EFalse; - } - TUint8 toc = iMP4ReadBuffer[iMP4ReadBufferPos]; - TUint8 mode = static_cast((toc >> 3) & 0x0F); - - TInt readSize = KAWBPacked_size[mode]; - - aOneAWBFrame = HBufC8::NewL(readSize+1); - - TInt lastByte = iMP4ReadBufferPos + readSize; - - for (; iMP4ReadBufferPos <= lastByte ; iMP4ReadBufferPos++) - { - - aOneAWBFrame->Des().Append(iMP4ReadBuffer[iMP4ReadBufferPos]); - } - - return ETrue; - - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/MP4/src/mp4aud.cpp --- a/videoeditorengine/audioeditorengine/codecs/MP4/src/mp4aud.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,330 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - mp4aud.cpp - MPEG-4 Audio interface to MPEG-4 Systems layer. - - Author(s): Juha Ojanpera - Copyright (c) 2001-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- Project Headers. --*/ -#include "nok_bits.h" -#include "mp4aud.h" -#include "AACAPI.h" -const int32 sample_rates[] = { - 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, - 11025, 8000, 0, 0, 0, 0 -}; - -/* - * Reads program configuration element from the specified bitstream. - */ -static INLINE int16 -GetPCE(TBitStream *bs, ProgConfig *p, TInt *numChans) -{ - int16 i; - - p->tag = (int16) BsGetBits(bs, LEN_TAG); - p->profile = (int16) BsGetBits(bs, LEN_PROFILE); - p->sample_rate_idx = (int16) BsGetBits(bs, LEN_SAMP_IDX); - p->front.num_ele = (int16) BsGetBits(bs, LEN_NUM_ELE); - p->side.num_ele = (int16) BsGetBits(bs, LEN_NUM_ELE); - p->back.num_ele = (int16) BsGetBits(bs, LEN_NUM_ELE); - p->lfe.num_ele = (int16) BsGetBits(bs, LEN_NUM_LFE); - p->data.num_ele = (int16) BsGetBits(bs, LEN_NUM_DAT); - p->coupling.num_ele = (int16) BsGetBits(bs, LEN_NUM_CCE); - - p->mono_mix.present = (int16) BsGetBits(bs, 1); - if(p->mono_mix.present == 1) - p->mono_mix.ele_tag = (int16) BsGetBits(bs, LEN_TAG); - - p->stereo_mix.present = (int16) BsGetBits(bs, 1); - if(p->stereo_mix.present == 1) - p->stereo_mix.ele_tag = (int16) BsGetBits(bs, LEN_TAG); - - p->matrix_mix.present = (int16) BsGetBits(bs, 1); - if(p->matrix_mix.present == 1) - { - p->matrix_mix.ele_tag = (int16) BsGetBits(bs, LEN_MMIX_IDX); - p->matrix_mix.pseudo_enab = (int16) BsGetBits(bs, LEN_PSUR_ENAB); - } - - for(i = 0; i < p->front.num_ele; i++) - { - p->front.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE); - p->front.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - - *numChans += (p->front.ele_is_cpe[i] == 1) ? 2 : 1; - } - - for(i = 0; i < p->side.num_ele; i++) - { - p->side.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE); - p->side.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - - *numChans += (p->front.ele_is_cpe[i] == 1) ? 2 : 1; - } - - for(i = 0; i < p->back.num_ele; i++) - { - p->back.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE); - p->back.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - - *numChans += (p->front.ele_is_cpe[i] == 1) ? 2 : 1; - } - - for(i = 0; i < p->lfe.num_ele; i++) - { - *numChans += 1; - - p->lfe.ele_is_cpe[i] = 0; - p->lfe.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - } - - for(i = 0; i < p->data.num_ele; i++) - { - p->data.ele_is_cpe[i] = 0; - p->data.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - } - - for(i = 0; i < p->coupling.num_ele; i++) - { - p->coupling.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE); - p->coupling.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - } - - BsByteAlign(bs); - - p->num_comment_bytes = (int16) BsGetBits(bs, LEN_COMMENT_BYTES); - for(i = 0; i < p->num_comment_bytes; i++) - p->comments[i] = (uint8) BsGetBits(bs, LEN_BYTE); - p->comments[i] = 0; - - return (p->tag); -} - -/* - * Determines sampling rate index for the MPEG-4 decoder. The input sampling - * rate as specified in the audio config part is not one of the rates listed - * in the standard. - */ -static INLINE int16 -DetermineSamplingFreqIdx(int32 samplingFreq) -{ - int16 idx; - - if(samplingFreq >= 92017L) idx = 0; - else if(samplingFreq < 92017L && samplingFreq >= 75132L) idx = 1; - else if(samplingFreq < 75132L && samplingFreq >= 55426) idx = 2; - else if(samplingFreq < 55426L && samplingFreq >= 46009L) idx = 3; - else if(samplingFreq < 46009L && samplingFreq >= 37566L) idx = 4; - else if(samplingFreq < 37566L && samplingFreq >= 27713L) idx = 5; - else if(samplingFreq < 27713L && samplingFreq >= 23004L) idx = 6; - else if(samplingFreq < 23004L && samplingFreq >= 18783L) idx = 7; - else if(samplingFreq < 18783L && samplingFreq >= 13856L) idx = 8; - else if(samplingFreq < 13856L && samplingFreq >= 11502L) idx = 9; - else if(samplingFreq < 11502L && samplingFreq >= 9391L) idx = 10; - else idx = 11; - - return (idx); -} - -/* - * Reads GA decoder configuration information from the specified bitstream. - */ -static INLINE BOOL -ReadGASpecificInfo(TBitStream *bs, AudioSpecificInfo *audInfo, ProgConfig *progCfg) -{ - int16 extensionFlag; - GaSpecificInfo *gaInfo = &audInfo->gaInfo; - - gaInfo->FrameLengthFlag = (BOOL) BsGetBits(bs, 1); - gaInfo->DependsOnCoreCoder = (BOOL) BsGetBits(bs, 1); - gaInfo->CoreCoderDelay = (gaInfo->DependsOnCoreCoder) ? (int16) BsGetBits(bs, 14) : (int16)0; - extensionFlag = (int16) BsGetBits(bs, 1); - - if(audInfo->channelConfiguration == 0) - { - TInt numChans = 0; - - GetPCE(bs, progCfg, &numChans); - audInfo->channelConfiguration = (uint8) numChans; - if (audInfo->samplingFreqIdx != (uint8) progCfg->sample_rate_idx) - { - return FALSE; - } - } - - /* - * Determine the sampling rate index so that sampling rate dependent - * tables can be initialized. - */ - if(audInfo->samplingFreqIdx == 0xf && audInfo->channelConfiguration != 0) - { - audInfo->samplingFreqIdx = (uint8) DetermineSamplingFreqIdx(audInfo->samplingFrequency); - progCfg->sample_rate_idx = audInfo->samplingFreqIdx; - } - else - { - - audInfo->samplingFreqIdx = (uint8) progCfg->sample_rate_idx; - - } - - if(audInfo->audioObject == AAC_SCALABLE || audInfo->audioObject == ER_AAC_SCALABLE) - gaInfo->layerNr = (uint8) BsGetBits(bs, 3); - - if(extensionFlag) - { - if(audInfo->audioObject == ER_BSAC) - { - gaInfo->numOfSubframe = (uint8) BsGetBits(bs, 5); - gaInfo->layer_length = (uint8) BsGetBits(bs, 11); - } - - switch(audInfo->audioObject) - { - case ER_AAC_LC: - case ER_AAC_LTP: - case ER_AAC_SCALABLE: - case ER_TWINVQ: - case ER_AAC_LD: - gaInfo->aacSectionDataResilienceFlag = (BOOL) BsGetBits(bs, 1); - gaInfo->aacScalefactorDataResilienceFlag = (BOOL) BsGetBits(bs, 1); - gaInfo->aacSpectralDataResilienceFlag = (BOOL) BsGetBits(bs, 1); - break; - - default: - break; - } - - extensionFlag = (int16) BsGetBits(bs, 1); - if(extensionFlag) - { - ; - } - } - return TRUE; -} - -/* - * Reads MPEG-4 audio decoder specific configuration information. - * - * Retuns TRUE on success, FALSE otherwise. FALSE indicates that - * unsupported decoder configuration (e.g., object type) was detected. - */ -static INLINE BOOL -ReadAudioSpecificConfig(TBitStream *bs, AudioSpecificInfo *audInfo, - ProgConfig *progCfg, int32 bufLen) -{ - int16 bitsLeft; - AudioObjectType audObj; - - /*-- Read common configuration information. --*/ - audObj = audInfo->audioObject = (AudioObjectType)(BsGetBits(bs, 5) - 1); - audInfo->samplingFreqIdx = (uint8) BsGetBits(bs, 4); - audInfo->samplingFrequency = sample_rates[audInfo->samplingFreqIdx]; - if(audInfo->samplingFreqIdx == 0xf) - audInfo->samplingFrequency = (int32) BsGetBits(bs, 24); - audInfo->channelConfiguration = (uint8) BsGetBits(bs, 4); - - audInfo->extAudioObject = (AudioObjectType) 0; - audInfo->sbrPresentFlag = 0; - - if(audInfo->audioObject == AAC_SBR) - { - audInfo->extAudioObject = audInfo->audioObject; - audInfo->sbrPresentFlag = 1; - audInfo->extSamplingFreqIdx = (uint8) BsGetBits(bs, 4); - if(audInfo->extSamplingFreqIdx == 0xf) - audInfo->extSamplingFrequency = (int32) BsGetBits(bs, 24); - audObj = audInfo->audioObject = (AudioObjectType)(BsGetBits(bs, 5) - 1); - } - - /*-- Read object type specific configuration information. --*/ - switch(audInfo->audioObject) - { - case AAC_MAIN: - case AAC_LC: - case AAC_LTP: - progCfg->profile = (int16) audObj; - progCfg->sample_rate_idx = audInfo->samplingFreqIdx; - if (ReadGASpecificInfo(bs, audInfo, progCfg) == FALSE) - { - return FALSE; - } - if(audInfo->samplingFreqIdx != 0xf) - audInfo->samplingFrequency = sample_rates[audInfo->samplingFreqIdx]; - break; - - default: - audObj = NULL_OBJECT; - break; - } - - bitsLeft = (int16) ((bufLen << 3) - BsGetBitsRead(bs)); - if(audInfo->extAudioObject != AAC_SBR && bitsLeft >= 16) - { - audInfo->syncExtensionType = (int16) BsGetBits(bs, 11); - if(audInfo->syncExtensionType == 0x2b7) - { - audInfo->extAudioObject = (AudioObjectType)(BsGetBits(bs, 5) - 1); - if(audInfo->extAudioObject == AAC_SBR) - { - audInfo->sbrPresentFlag = (uint8) BsGetBits(bs, 1); - if(audInfo->sbrPresentFlag) - { - audInfo->extSamplingFreqIdx = (uint8) BsGetBits(bs, 4); - if(audInfo->extSamplingFreqIdx == 0xf) - audInfo->extSamplingFrequency = (int32) BsGetBits(bs, 24); - } - } - } - } - - return ((audObj == NULL_OBJECT) ? (BOOL) FALSE : (BOOL) TRUE); -} - -BOOL -ReadMP4AudioConfig(uint8 *buffer, uint32 bufLen, mp4AACTransportHandle *mp4AAC_ff) -{ - TBitStream bs; - BOOL retValue; - - BsInit(&bs, buffer, bufLen); - - retValue = ReadAudioSpecificConfig(&bs, &mp4AAC_ff->audioInfo, &mp4AAC_ff->progCfg, bufLen); - - return (retValue); -} - -void -WriteMP4AudioConfig(uint8 *buffer, uint32 bufLen, mp4AACTransportHandle /* *mp4AAC_ff*/) -{ - - TBitStream bs; - - BsInit(&bs, buffer, bufLen); - - /*-- Change object type to LC. --*/ - BsPutBits(&bs, 5, 2); - -} - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/WAV/inc/ProcWAVFrameHandler.h --- a/videoeditorengine/audioeditorengine/codecs/WAV/inc/ProcWAVFrameHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCWAVFRAMEHANDLER_H__ -#define __CPROCWAVFRAMEHANDLER_H__ - -#include -#include "AudCommon.h" -#include "ProcConstants.h" -#include "ProcFrameHandler.h" - -class CProcWAVFrameHandler : public CProcFrameHandler - { - -public: - - /* - * Constructors & destructor - * - */ - static CProcWAVFrameHandler* NewL(TInt aBitsPerSample); - static CProcWAVFrameHandler* NewLC(TInt aBitsPerSample); - virtual ~CProcWAVFrameHandler(); - - - // From base class ---------------> - virtual TBool ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain); - - - virtual TBool GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const; - virtual TBool GetNormalizingMargin(const HBufC8* aFrame, TInt8& aMargin) const; - - virtual TBool IsMixingAvailable() const; - virtual TBool MixL(const HBufC8* aFrame1, const HBufC8* aFrame2, HBufC8*& aMixedFrame); - //<--------------------------------- - - -private: - - // ConstructL - void ConstructL(); - - // c++ constructor - CProcWAVFrameHandler(TInt aBitsPerSample); - - // gets the highest gain - TInt GetHighestGain(const HBufC8* aFrame, TInt& aMaxGain) const; - - // bitdepth - TInt iBitsPerSample; - - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/WAV/inc/ProcWAVInFileHandler.h --- a/videoeditorengine/audioeditorengine/codecs/WAV/inc/ProcWAVInFileHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __CPROCWAVINFILEHANDLER_H__ -#define __CPROCWAVINFILEHANDLER_H__ - -#include -#include -#include "AudCommon.h" -#include "ProcConstants.h" -#include "ProcInFileHandler.h" -#include "ProcDecoder.h" - - -class CProcWAVInFileHandler: public CProcInFileHandler - { - -public: - - - /* - * Constructors & destructor - * - */ - - static CProcWAVInFileHandler* NewL(const TDesC& aFileName, RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - static CProcWAVInFileHandler* NewLC(const TDesC& aFileName, RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - virtual ~CProcWAVInFileHandler(); - - // From base class ------------------> - - void GetPropertiesL(TAudFileProperties* aProperties); - - /** - * Seeks a certain audio frame for reading - * - * Possible leave codes: - * - * @param aFrameIndex frame index - * @param aTime time from the beginning of file in milliseconds - * - * @return ETrue if successful - * EFalse if beyond the file - */ - TBool SeekAudioFrame(TInt32 aTime); - - - /** - * Seeks a cut in audio frame for reading - * - * Possible leave codes: - * - * - * @return ETrue if successful - * - */ - TBool SeekCutInFrame(); - - - virtual TBool SetNormalizingGainL(const CProcFrameHandler* aFrameHandler); - - // <-------------------------- From base class - -private: - - // number of samples in a frame - TInt iNumberofSamplesInFrame; - -private: - - // constructL - void ConstructL(const TDesC& aFileName, RFile* aFileHandle, CAudClip* aClip, - TInt aReadBufferSize, TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - TBool GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime); - - // c++ constructor - CProcWAVInFileHandler(); - -private: - - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/WAV/src/ProcWAVFrameHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/WAV/src/ProcWAVFrameHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,384 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "ProcWAVFrameHandler.h" -#include "ProcFrameHandler.h" -#include "ProcTools.h" -#include "ProcConstants.h" - -#include -#include - - -TBool CProcWAVFrameHandler::ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain) - { - TInt a = 0; - - aFrameOut = HBufC8::NewLC(aFrameIn->Size()); - - aFrameOut->Des().Copy(aFrameIn->Ptr(), aFrameIn->Size()); - - aGain = static_cast(aGain / 2); - - TPtr8 framePtr(aFrameOut->Des()); - if (iBitsPerSample == 8) - { - - TReal multiplier = 0; - TReal gaR(aGain); - TReal exp = gaR/20; - Math::Pow(multiplier, 10, exp); - - for (a = 0 ; a < aFrameOut->Length() ; a++) - { - TInt oldGain = (*aFrameOut)[a]-128; - TInt newGain = 0; - - newGain = static_cast(oldGain * multiplier); - - if (newGain > 128) - { - newGain = 128; - } - else if (newGain < -128) - { - newGain = -128; - } - - framePtr[a] = static_cast(newGain+128); - - } - } - else if (iBitsPerSample == 16) - { - - TReal multiplier = 0; - TReal gaR(aGain); - TReal exp = gaR/20; - Math::Pow(multiplier, 10, exp); - - - for (a = 0 ; a < aFrameOut->Length()-1 ; a += 2) - { - - TUint16 oldGain = static_cast((*aFrameOut)[a+1]*256 + (*aFrameOut)[a]); - - TBool negative = EFalse; - - if (oldGain > 32767) - { - oldGain = static_cast(~oldGain+1);// - 65793; - negative = ETrue; - } - - TUint16 newGain = static_cast(oldGain * multiplier); - - if (newGain > 32727) - { - newGain = 32727; - } - - - if (negative) - { - newGain = static_cast(~newGain-1);// - 65793; - - } - framePtr[a+1] = static_cast(newGain/256); - framePtr[a] = static_cast(newGain%256); - - - - } - - } - - - CleanupStack::Pop(); // aFrameOut - return ETrue; - } - -TBool CProcWAVFrameHandler::GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const - { - - TInt a = 0; - - TInt highest = 0; - - if (iBitsPerSample == 8) - { - - for (a = 0 ; a < aFrame->Length() ; a++) - { - - - if (Abs((*aFrame)[a]-128) > highest) - highest = Abs((*aFrame)[a]-128); - - } - } - else if (iBitsPerSample == 16) - { - - for (a = 0 ; a < aFrame->Length()-1 ; a += 2) - { - TInt ga = ((*aFrame)[a+1]*256 + (*aFrame)[a]); - - if (ga > 32767) ga-= 65792; - - - - if (ga > highest) highest = ga; - - - } - - } - - - aGains.Append(highest); - - if (iBitsPerSample == 8) aMaxGain = 128; - else if (iBitsPerSample == 16) aMaxGain = 32767; - - - return ETrue; - } - - -TBool CProcWAVFrameHandler::GetNormalizingMargin(const HBufC8* aFrame, TInt8& aMargin) const - - { - - - TInt maxGain = 0; - TInt highestGain = GetHighestGain(aFrame, maxGain); - - - TInt ma = ((maxGain - highestGain)*2)/5; - aMargin = static_cast(ma); - - return ETrue; - - - } - -TBool CProcWAVFrameHandler::IsMixingAvailable() const - { - return ETrue; - } -TBool CProcWAVFrameHandler::MixL(const HBufC8* aFrame1, const HBufC8* aFrame2, HBufC8*& aMixedFrame) - { - - if (aFrame1->Length() != aFrame2->Length()) - { - aMixedFrame = 0; - return EFalse; - } - - aMixedFrame = HBufC8::NewL(aFrame1->Length()); - - TInt a = 0; - TInt newGain = 0; - - if (iBitsPerSample == 8) - { - - for (a = 0 ; a < aFrame1->Length() ; a++) - { - - TInt oldGain1 = (*aFrame1)[a]-128; - TInt oldGain2 = (*aFrame2)[a]-128; - - newGain = oldGain1 + oldGain2; - - if (newGain > 128) - { - newGain = 128; - } - else if (newGain < -128) - { - newGain = -128; - } - - aMixedFrame->Des().Append(static_cast(newGain+128)); - - } - } - else if (iBitsPerSample == 16) - { - - - for (a = 0 ; a < aFrame1->Length()-1 ; a += 2) - { - - TUint16 oldGain1 = static_cast((*aFrame1)[a+1]*256 + (*aFrame1)[a]); - TUint16 oldGain2 = static_cast((*aFrame2)[a+1]*256 + (*aFrame2)[a]); - - - TBool negative1 = EFalse; - TBool negative2 = EFalse; - - if (oldGain1 > 32767) - { - //oldGain1 = ~oldGain1+1;// - 65793; - negative1 = ETrue; -// oldGain1 = oldGain1+((65536-oldGain1)/2); - - } - else - { - -// oldGain1 /= 2; - - } - - if (oldGain2 > 32767) - { - //oldGain2 = ~oldGain2+1;// - 65793; - negative2 = ETrue; -// oldGain2 = oldGain2+((65536-oldGain2)/2); - - } - else - { -// oldGain2 /= 2; - } - - - newGain = static_cast(oldGain1 + oldGain2); - - - if (negative1 && negative2) - { - if (newGain < 32767) - { - newGain = 32768; - } - } - else if (!negative1 && !negative2) - { - if (newGain > 32767) - { - newGain = 32767; - } - - } - - - aMixedFrame->Des().Append(static_cast(newGain%256)); - aMixedFrame->Des().Append(static_cast(newGain/256)); - - } - - } - - return ETrue; - - } - - - -CProcWAVFrameHandler::~CProcWAVFrameHandler() - { - - } - -CProcWAVFrameHandler* CProcWAVFrameHandler::NewL(TInt aBitsPerSample) - { - - - CProcWAVFrameHandler* self = NewLC(aBitsPerSample); - CleanupStack::Pop(self); - return self; - - } -CProcWAVFrameHandler* CProcWAVFrameHandler::NewLC(TInt aBitsPerSample) - { - - CProcWAVFrameHandler* self = new (ELeave) CProcWAVFrameHandler(aBitsPerSample); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - - } - -void CProcWAVFrameHandler::ConstructL() - { - - } - -CProcWAVFrameHandler::CProcWAVFrameHandler(TInt aBitsPerSample) : iBitsPerSample(aBitsPerSample) - { - - } - -TInt CProcWAVFrameHandler::GetHighestGain(const HBufC8* aFrame, TInt& aMaxGain) const - { - - TInt maxGain = 0; - TInt a = 0; - - if (iBitsPerSample == 8) - { - aMaxGain = 210; - - for (a = 0 ; a < aFrame->Length() ; a++) - { - - TInt gain = Abs((*aFrame)[a]-128); - if (gain > maxGain) maxGain = gain; - - } - } - else if (iBitsPerSample == 16) - { - - aMaxGain = 452; - for (a = 0 ; a < aFrame->Length()-1 ; a += 2) - { - TInt ga = ((*aFrame)[a+1]*256 + (*aFrame)[a]); - - if (ga > 32767) ga-= 65792; - - ga = Abs(ga); - - if (ga > maxGain) maxGain = ga; - - } - - } - - TReal result = 0; - TReal gai(maxGain); - - if (gai!= 0) Math::Log(result, gai); - result *= 100; - - return (TInt) result; - - - - - - } - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/WAV/src/ProcWAVInFileHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/WAV/src/ProcWAVInFileHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,473 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "ProcWAVInFileHandler.h" -#include "ProcWAVFrameHandler.h" -#include "AudPanic.h" -#include "ProcTools.h" -#include "audconstants.h" - - - -CProcWAVInFileHandler* CProcWAVInFileHandler::NewL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - CProcWAVInFileHandler* self = NewLC(aFileName, aFileHandle, aClip, - aReadBufferSize, aTargetSampleRate, aChannelMode); - CleanupStack::Pop(self); - return self; - } - -CProcWAVInFileHandler* CProcWAVInFileHandler::NewLC(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - CProcWAVInFileHandler* self = new (ELeave) CProcWAVInFileHandler(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aFileHandle, aClip, aReadBufferSize, aTargetSampleRate, aChannelMode); - return self; - } - -CProcWAVInFileHandler::CProcWAVInFileHandler() : CProcInFileHandler(), iNumberofSamplesInFrame(1) - { - - - } - -void CProcWAVInFileHandler::GetPropertiesL(TAudFileProperties* aProperties) - { - - if (iProperties != 0) - { - *aProperties = *iProperties; - return; - } - - - const TInt KFrameDurationMilli = 20; - const TInt KFramesPerSecond = 50; - - if (iFileOpen) - { - aProperties->iFileFormat = EAudFormatUnrecognized; - aProperties->iAudioType = EAudTypeUnrecognized; - aProperties->iAudioTypeExtension = EAudExtensionTypeNoExtension; - aProperties->iBitrate = 0; - aProperties->iBitrateMode = EAudBitrateModeNotRecognized; - aProperties->iChannelMode = EAudChannelModeNotRecognized; - aProperties->iDuration = 0; - aProperties->iSamplingRate = 0; - aProperties->iFrameLen = 0; - aProperties->iFrameCount = 0; - - TInt oldPos = iFilePos; - - // check the validity of WAVE header - - TBuf8<4> chunckID; - TBuf8<4> format; - TBuf8<4> fmt; - TBuf8<4> data; - - TBuf8<1> audioFormat; - - BufferedFileRead(0, chunckID); - BufferedFileRead(8, format); - BufferedFileRead(12, fmt); - BufferedFileRead(20, audioFormat); - BufferedFileRead(36, data); - - - if (chunckID.Compare(_L8("RIFF")) == 0 && - format.Compare(_L8("WAVE")) == 0 && - fmt.Compare(_L8("fmt ")) == 0 && - data.Compare(_L8("data")) == 0 && - audioFormat[0] == 0x01) - { - aProperties->iFileFormat = EAudFormatWAV; - aProperties->iAudioType = EAudWAV; - } - else - { - aProperties->iFileFormat = EAudFormatUnrecognized; - User::Leave(KErrNotSupported); - return; - - } - - TBuf8<1> numChannels; - BufferedFileRead(22, numChannels); - if (numChannels[0] == 0x01) - { - aProperties->iChannelMode = EAudSingleChannel; - } - else if (numChannels[0] == 0x02) - { - aProperties->iChannelMode = EAudStereo; - } - else - { - aProperties->iFileFormat = EAudFormatUnrecognized; - User::Leave(KErrNotSupported); - return; - } - - TBuf8<4> sr; - BufferedFileRead(24, sr); - - TBuf8<8> tmpBin; - TBuf8<8*4> srBin; - - // little endian: - for (TInt a = 3 ; a >= 0; a--) - { - ProcTools::Dec2Bin(sr[a], tmpBin); - srBin.Append(tmpBin); - } - - TUint srDec = 0; - ProcTools::Bin2Dec(srBin, srDec); - - aProperties->iSamplingRate = srDec; - - // Check that the sample rate is supported - if( (aProperties->iSamplingRate != KAedSampleRate8kHz) && - (aProperties->iSamplingRate != KAedSampleRate11kHz) && - (aProperties->iSamplingRate != KAedSampleRate16kHz) && - (aProperties->iSamplingRate != KAedSampleRate22kHz) && - (aProperties->iSamplingRate != KAedSampleRate24kHz) && - (aProperties->iSamplingRate != KAedSampleRate32kHz) && - (aProperties->iSamplingRate != KAedSampleRate44kHz) && - (aProperties->iSamplingRate != KAedSampleRate48kHz) ) - { - User::Leave(KErrNotSupported); - } - - iNumberofSamplesInFrame = srDec/(KFramesPerSecond/numChannels[0]); - if (iNumberofSamplesInFrame%2 != 0) iNumberofSamplesInFrame++; - - tmpBin.Delete(0, tmpBin.Length()); - - TBuf8<4> byteRate; - TBuf8<8*4> byteRateBin; - TUint byteRateDec = 0; - - BufferedFileRead(28, byteRate); - for (TInt b = 3 ; b >= 0; b--) - { - ProcTools::Dec2Bin(byteRate[b], tmpBin); - byteRateBin.Append(tmpBin); - } - ProcTools::Bin2Dec(byteRateBin, byteRateDec); - - aProperties->iBitrate = byteRateDec*8; - - TBuf8<1> numberOfBitsPerSample; - BufferedFileRead(34, numberOfBitsPerSample); - aProperties->iNumberOfBitsPerSample = numberOfBitsPerSample[0]; - - // other bit depths can be added later if (ever) needed - if (aProperties->iNumberOfBitsPerSample != 16 && - aProperties->iNumberOfBitsPerSample != 8) - { - aProperties->iFileFormat = EAudFormatUnrecognized; - User::Leave(KErrNotSupported); - return; - } - - if (aProperties->iNumberOfBitsPerSample == 16) - { - iNumberofSamplesInFrame *= 2; - } - - TBuf8<4> dataSize; - BufferedFileRead(40, dataSize); - - TBuf8<8*4> dataSizeBin; - TUint dataSizeDec = 0; - tmpBin.Delete(0, tmpBin.Length()); - - for (TInt c = 3 ; c >= 0; c--) - { - ProcTools::Dec2Bin(dataSize[c], tmpBin); - dataSizeBin.Append(tmpBin); - } - ProcTools::Bin2Dec(dataSizeBin, dataSizeDec); - - TTimeIntervalMicroSeconds durationMicro((TInt64)(TInt)((TReal(dataSizeDec)/byteRateDec)*1000000)); - - aProperties->iDuration = durationMicro; - aProperties->iBitrateMode = EAudConstant; - aProperties->iFrameLen = iNumberofSamplesInFrame; - - aProperties->iFrameDuration = KFrameDurationMilli*1000; - - aProperties->iFrameCount = (TInt)dataSizeDec/iNumberofSamplesInFrame; - aProperties->iNumFramesPerSample = 1; - - - - BufferedFileSetFilePos(oldPos); - } - else - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - - if (iProperties == 0) - { - iProperties = new (ELeave) TAudFileProperties; - *iProperties = *aProperties; - } - - - } - -TBool CProcWAVInFileHandler::SeekAudioFrame(TInt32 aTime) - { - - TInt frameLengthMilliSeconds = ProcTools::MilliSeconds(iProperties->iFrameDuration); - - TInt framesFromStart = aTime/frameLengthMilliSeconds; - - TInt bytesFromStart = framesFromStart*iNumberofSamplesInFrame; - - const TInt KWAVHeaderLength = 44; - - BufferedFileSetFilePos(bytesFromStart+KWAVHeaderLength); - - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - iCurrentTimeMilliseconds = aTime; - - return ETrue; - } - -TBool CProcWAVInFileHandler::SeekCutInFrame() - { - - iCurrentTimeMilliseconds = iCutInTime; - return SeekAudioFrame(iCutInTime); - } - - - -void CProcWAVInFileHandler::ConstructL(const TDesC& aFileName, - RFile* aFileHandle, - CAudClip* aClip, - TInt aReadBufferSize, - TInt aTargetSampleRate, - TChannelMode aChannelMode) - { - - - - - - iTargetSampleRate = aTargetSampleRate; - iChannelMode = aChannelMode; - - InitAndOpenFileL(aFileName, aFileHandle, aReadBufferSize); - - - if (aClip != 0) - { - iCutInTime = ProcTools::MilliSeconds(aClip->CutInTime()); - - } - - - TAudFileProperties prop; - GetPropertiesL(&prop); - - if (iProperties != 0) - { - TInt samplesIn20ms = ((iProperties->iSamplingRate) * - (iProperties->iNumberOfBitsPerSample)/8)/50; - - if (iProperties->iChannelMode == EAudStereo) - { - samplesIn20ms *= 2; - - } - if (samplesIn20ms % 2 != 0) samplesIn20ms--; - - iSilentFrame = HBufC8::NewL(samplesIn20ms); - - if (iProperties->iNumberOfBitsPerSample == 16) - { - iSilentFrame->Des().SetLength(samplesIn20ms); - iSilentFrame->Des().Fill(0); - - } - else if(iProperties->iNumberOfBitsPerSample == 8) - { - iSilentFrame->Des().SetLength(samplesIn20ms); - iSilentFrame->Des().Fill(128); - - } - iSilentFrameDuration = 20; - } - else - { - User::Leave(KErrNotSupported); - } - - iClip = aClip; - - iFrameHandler = CProcWAVFrameHandler::NewL(iProperties->iNumberOfBitsPerSample); - - // Generate a decoder -----------------------> - - iDecoder = CProcDecoder::NewL(); - - iDecodingPossible = iDecoder->InitL(*iProperties, aTargetSampleRate, aChannelMode); - - - // <----------------------- Generate a decoder - - if (iClip != 0 && iClip->Normalizing()) - { - SetNormalizingGainL(iFrameHandler); - } - - } - - -TBool CProcWAVInFileHandler::GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime) - { - - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - TInt numberOfBytesInFrame = iNumberofSamplesInFrame; - TInt bufferSize = numberOfBytesInFrame; - if (iProperties->iNumberOfBitsPerSample == 8) - { - // need to expand to 16 bits per sample since encoders and MMF sample rate converter assumes 16-bit signed input - bufferSize *= 2; - } - - - aFrame = HBufC8::NewL(bufferSize); - - TPtr8 tmpDes((TPtr8)aFrame->Des()); - - BufferedFileRead((TPtr8&)tmpDes , numberOfBytesInFrame); - - if (aFrame->Des().Length() < numberOfBytesInFrame) - { - delete aFrame; - aFrame = 0; - return EFalse; - } - aTime = ProcTools::MilliSeconds(iProperties->iFrameDuration); - iCurrentTimeMilliseconds += aTime; - - TRAPD(err, ManipulateGainL(aFrame)); - - if (err != KErrNone) - { - // something went wrong with the gain manipulation - // continue by returning the original frame - } - - if (iProperties->iNumberOfBitsPerSample == 8) - { - // need to expand to 16 bits per sample since encoders and MMF sample rate converter assumes 16-bit signed input - TUint8* buffer = const_cast(aFrame->Ptr()); - // start from the end to avoid overlapping - for ( TInt i = numberOfBytesInFrame-1; i >= 0 ; i-- ) - { - buffer[i*2+1] = TInt8(buffer[i]) - 128; // 8-bit Wav's are unsigned, 16-bit Wav's are signed - buffer[i*2] = 0; - } - tmpDes.SetLength(bufferSize); - - } - aSize = aFrame->Length(); - - - return ETrue; - - } - - - - -CProcWAVInFileHandler::~CProcWAVInFileHandler() - { - - ResetAndCloseFile(); - - if (iSilentFrame != 0) delete iSilentFrame; - - delete iFrameHandler; - - delete iDecoder; - - } - - -TBool CProcWAVInFileHandler::SetNormalizingGainL(const CProcFrameHandler* aFrameHandler) - { - - HBufC8* point = 0; - TInt siz; - TInt32 tim = 0; - TInt8 margin = 0; - TInt minMargin = KMaxTInt; - - while(GetEncAudioFrameL(point, siz, tim)) - - { - aFrameHandler->GetNormalizingMargin(point, margin); - - delete point; - point = 0; - - if (minMargin > margin) - { - minMargin = margin; - } - - } - - iNormalizingMargin = static_cast(minMargin); - - return ETrue; - - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/mp3/inc/ProcMP3FrameHandler.h --- a/videoeditorengine/audioeditorengine/codecs/mp3/inc/ProcMP3FrameHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __CPROCMP3FRAMEHANDLER_H__ -#define __CPROCMP3FRAMEHANDLER_H__ - -/*-- System Headers. --*/ -#include - -/*-- Project Headers. --*/ -#include "AudCommon.h" -#include "ProcFrameHandler.h" -#include "ProcInFileHandler.h" - -#include "MP3API.h" - -/** - * Frame handler class for accessing MP3 data elements. - * - * @author Juha Ojanperä - */ -class CProcMP3FrameHandler : public CProcFrameHandler - { -public: - - - /* - * Constructors & destructor - */ - static CProcMP3FrameHandler* NewL(); - static CProcMP3FrameHandler* NewLC(); - - ~CProcMP3FrameHandler(); - - - // From base class CProcFrameHandler ----------> - TBool ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain); - TBool GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const; - TBool GetNormalizingMargin(const HBufC8* aFrame, TInt8& aMargin) const; - TBool IsMixingAvailable() const; - // <-------------------------------------------- - - - -private: - - // ConstructL - void ConstructL(); - - // c++ constructor - CProcMP3FrameHandler(); - - // internal function for reading MP3 gains - TBool GetMP3Gains(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain, TBitStream& aBs) const; - -private: - - // a handle to MP3 editing class in MP3AACManipLib - CMp3Edit* iMp3Edit; - - // a flag to indicate whether MP3 decoder is initialized - mutable TBool decInitialized; - - // a handle to CMPAudDec - CMPAudDec *iMpAud; - TMpTransportHandle *iTHandle; - - - friend class CProcMP3InFileHandler; - - }; - -#endif /*-- __CPROCMP3FRAMEHANDLER_H__ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/mp3/inc/ProcMP3InFileHandler.h --- a/videoeditorengine/audioeditorengine/codecs/mp3/inc/ProcMP3InFileHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __CPROCMP3INFILEHANDLER_H__ -#define __CPROCMP3INFILEHANDLER_H__ - -/*-- System Headers. --*/ -#include -#include - -/*-- Project Headers. --*/ -#include "AudCommon.h" -#include "ProcFrameHandler.h" -#include "ProcInFileHandler.h" -#include "Logfile.h" - -#include "defines.h" - -#include "Mp3API.h" - -#include "ProcDecoder.h" -//#include "mpif.h" - - - -/** - * File handler class for accessing MP3 content. - * - * @author Juha Ojanperä - */ -class CProcMP3InFileHandler: public CProcInFileHandler - { -public: - - /* - * Constructors & destructor - */ - - static CProcMP3InFileHandler* NewL(const TDesC& aFileName, RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - static CProcMP3InFileHandler* NewLC(const TDesC& aFileName, RFile* aFileHandle, - CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - virtual ~CProcMP3InFileHandler(); - - - // From CProcInFileHandler -----------------> - void GetPropertiesL(TAudFileProperties* aProperties); - - TBool SeekAudioFrame(TInt32 aTime); - - TBool SeekCutInFrame(); - - virtual TBool GetDurationL(TInt32& aTime, TInt& aFrameAmount); - - virtual TBool SetNormalizingGainL(const CProcFrameHandler* aFrameHandler); - - //<----------------------------------------- - - -private: - - // constructL - void ConstructL(const TDesC& aFileName, RFile* aFileHandle, CAudClip* aClip, - TInt aReadBufferSize, TInt aTargetSampleRate = 0, - TChannelMode aChannelMode = EAudSingleChannel); - - // C++ constructor - CProcMP3InFileHandler(); - - TBool GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime); - - // gets one Mp3 frame - int16 GetMP3Frame(uint8 *dataBytes, int16 bufSize, TMpFrameState *frState, uint8 syncStatus); - - // gets bitrate - int16 GetMP3Bitrate(void); - - // check that file is valid mp3 - TBool Validate(TDes8& aDes); - - // seek for frame sync codes - TInt SeekSync(TDes8& aDes, TInt aBufPos); - - // get info for a single frame - TInt FrameInfo(const TUint8* aBuf,TInt aBufLen,TInt& aBitRate); - - // get ID3 header length - TInt ID3HeaderLength(TDes8& aDes, TInt aPosition); - -private: - - /*-- MP3 file format handle. --*/ - TMpTransportHandle *mp3FileFormat; - - /*-- Legal MP3 file? --*/ - uint8 isValidMP3; - - /*-- Input buffer; start of frame is seached from here. --*/ - uint8 *mp3HeaderBytes; - - CLogFile *mp3Log; - - /*-- Free format flag. --*/ - uint8 isFreeFormatMP3; - - - // a handle to mp3 editing class in MP3AACManipLib - CMp3Edit* iMp3Edit; - - /*-- VBR bitrate flag; ETrue indicates VBR file, EFalse constant. --*/ - uint8 isVbrMP3; - - }; - -#endif /*-- __CPROCMP3INFILEHANDLER_H__ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/mp3/src/ProcMP3FrameHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/mp3/src/ProcMP3FrameHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,217 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/*-- Project Headers. --*/ -#include "ProcMP3FrameHandler.h" -#include "ProcMP3InFileHandler.h" -#include "ProcFrameHandler.h" - -#include "MP3API.h" - - -//mixing files - - - -CProcMP3FrameHandler* -CProcMP3FrameHandler::NewL() -{ - CProcMP3FrameHandler* self = NewLC(); - CleanupStack::Pop(self); - return self; -} - -CProcMP3FrameHandler* -CProcMP3FrameHandler::NewLC() -{ - CProcMP3FrameHandler* self = new (ELeave) CProcMP3FrameHandler(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - -CProcMP3FrameHandler::~CProcMP3FrameHandler() -{ - - if (iMp3Edit != 0) delete iMp3Edit; - - if (iMpAud != 0) - { - - delete iMpAud; - } - if (iTHandle != 0) - delete iTHandle; - - -} - -CProcMP3FrameHandler::CProcMP3FrameHandler() : decInitialized(EFalse) -{ - -} - -void CProcMP3FrameHandler:: -ConstructL() -{ - - iMp3Edit = CMp3Edit::NewL(); - - iTHandle = new (ELeave) TMpTransportHandle(); - - iMp3Edit->InitTransport(iTHandle); - - iMpAud = CMPAudDec::NewL(); - iMpAud->Init(iTHandle); - - -} - -TBool CProcMP3FrameHandler:: -ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain) -{ - - aFrameOut = HBufC8::NewLC(aFrameIn->Size()); - - aFrameOut->Des().Copy(aFrameIn->Ptr(), aFrameIn->Size()); - - - RArray gains; - CleanupClosePushL(gains); - TInt aMaxGain = 0; - TBitStream bs; - GetMP3Gains(aFrameOut, gains, aMaxGain, bs); - TUint8* globalGains = new (ELeave) TUint8[gains.Count()/2]; - CleanupStack::PushL(globalGains); - TUint* globalGainPos = new (ELeave) TUint[gains.Count()/2]; - CleanupStack::PushL(globalGainPos); - - - //for (TInt a = 0 ; a < gains.Count(); a++) - for (TInt a = 0 ; a < gains.Count()/2; a++) - { - - - TInt newGain = aGain*500; - newGain = newGain/1500; - - if (gains[a]+newGain < 0) globalGains[a] = 0; - else if(gains[a]+newGain > 255) globalGains[a] = 255; - else globalGains[a] = static_cast(gains[a*2]+newGain); - globalGainPos[a] = gains[a*2+1]; - } - -//SetMPGlobalGains(BitStream *bs, uint8 numGains, uint8 *globalGain, uint32 *gainPos); - - - iMp3Edit->SetMPGlobalGains(&bs, static_cast(gains.Count()/2), globalGains, globalGainPos); - - - //delete[] globalGains; - //delete[] globalGainPos; - CleanupStack::PopAndDestroy(globalGainPos); - CleanupStack::PopAndDestroy(globalGains); - CleanupStack::PopAndDestroy(&gains); - CleanupStack::Pop(); // aFrameOut - return ETrue; - -} - -TBool CProcMP3FrameHandler:: -GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const - { - RArray gains; - TBitStream bs; - GetMP3Gains(aFrame, gains, aMaxGain, bs); - - - for (TInt a = 0 ; a < gains.Count(); a++) - { - TInt ga = gains[a]-120; - - if (ga < 0) ga = 0; - - ga = ga*ga; - ga = ga/50; - - aGains.Append(ga); - a++; - } - - gains.Reset(); - aMaxGain = 120; - return ETrue; - } - -TBool CProcMP3FrameHandler:: -GetMP3Gains(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain, TBitStream& aBs) const - { - - TInt16 readBytes, frameBytes, headerBytes = 0; - - if (!decInitialized) - { - iMp3Edit->SeekSync(iTHandle, const_cast(aFrame->Ptr()), - aFrame->Length(), &readBytes, - &frameBytes, &headerBytes, (uint8) 1); - iMpAud->Init(iTHandle); - decInitialized = ETrue; - } - - - int16 i; - uint32 globalGainPos[4]; - uint8 globalGain[4], nBufs; - TBitStream bsTmp; - - const TInt headerLength = 4; - - TUint8* buf = const_cast(aFrame->Right(aFrame->Size()-headerLength).Ptr()); - BsInit(&aBs, buf, aFrame->Size() - headerLength); - BsSaveBufState(&aBs, &bsTmp); - - //BsSaveBufState(&bsIn, &bsTmp); - - nBufs = iMp3Edit->GetMPGlobalGains(&bsTmp, iTHandle, globalGain, globalGainPos); - - for(i = 0; i < nBufs; i++) - { - TInt gg = globalGain[i]; - TInt ggp = globalGainPos[i]; - - aGains.Append(gg); - aGains.Append(ggp); - } - aMaxGain = 255; - - return (EFalse); - - } - -TBool CProcMP3FrameHandler:: -GetNormalizingMargin(const HBufC8* /*aFrame*/, TInt8& /*aMargin*/) const -{ - return (EFalse); -} - -TBool CProcMP3FrameHandler::IsMixingAvailable() const -{ - return EFalse; -} - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/codecs/mp3/src/ProcMP3InFileHandler.cpp --- a/videoeditorengine/audioeditorengine/codecs/mp3/src/ProcMP3InFileHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1463 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/*-- Project Headers. --*/ -#include "AudPanic.h" -#include "ProcTools.h" -#include "ProcMP3InFileHandler.h" -#include "mpheader.h" -#include "audconstants.h" - - -#include "ProcMP3FrameHandler.h" - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -/* - Purpose: Minimum buffer size for determining the payload size - of a free format mp3 bitstream. - Explanation: - */ -#define MIN_MP3_FREE_FORMAT_BUF_SIZE (42) - -/* - Purpose: Buffer size for searching the start of a mp3 frame. - Explanation: - */ -const int16 Kmp3BufSize = 8; - -/* - Purpose: Buffer size for determining an avarage frame size of a mp3 stream. - Explanation: - */ -const int16 Kmp3BitrateRegions = 4; - -/* - Purpose: # of frames processed from each region. - Explanation: This is used when the avarage frame size is determined. */ -const int16 Kmp3BitrateNumFrames = 125; - -/* - Purpose: Buffer size for determining if a clip is valid mp3 - Explanation: - */ -const TUint Kmp3TempBufferSize = 4096; - -// ID3v2 header's tag offset -const TUint KSizeOfTagOffset = 6; - -// The size of MP3 header, header must include bits for determining frame length -const TInt KRawMp3FrameHeaderSize = 5; - -// Bit rates in bits/sec supported by MPEG2, MPEG1 and MPEG2.5 respectively -const TInt16 cBitRateTable[3][16] = - { - {-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,0}, - {-1,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0}, - {-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,0}, - }; - -// Sampling frequencies supported by MPEG2, MPEG1 and MPEG2.5 respectively -const TUint16 cSamplingFrequencyTable[3][4] = - { - {22050,24000,16000,0}, - {44100,48000,32000,0}, - {11025,12000,8000,0}, - }; - -const TInt KRawMp3MaxFrameSize = 1441; // 320kbit/s @ 32kHz = int((144*320000/32000)+1) - -CProcMP3InFileHandler* CProcMP3InFileHandler::NewL(const TDesC& aFileName, RFile* aFileHandle, CAudClip* aClip, - TInt aReadBufferSize, TInt aTargetSampleRate, TChannelMode aChannelMode) -{ - CProcMP3InFileHandler* self = NewLC(aFileName, aFileHandle, aClip, aReadBufferSize, - aTargetSampleRate, aChannelMode); - CleanupStack::Pop(self); - - return self; -} - -CProcMP3InFileHandler* -CProcMP3InFileHandler::NewLC(const TDesC& aFileName, RFile* aFileHandle, CAudClip* aClip, - TInt aReadBufferSize, TInt aTargetSampleRate, TChannelMode aChannelMode) -{ - CProcMP3InFileHandler* self = new (ELeave) CProcMP3InFileHandler(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aFileHandle, aClip, aReadBufferSize, - aTargetSampleRate, aChannelMode); - - return self; -} - -CProcMP3InFileHandler::CProcMP3InFileHandler() : CProcInFileHandler(), mp3FileFormat(0), - isValidMP3(0), mp3HeaderBytes(0), - mp3Log(0), isFreeFormatMP3(0), isVbrMP3(0) -{ -} - - - - -TBool CProcMP3InFileHandler::GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime) - { - TBool rValue = EFalse; - - if(!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - aSize = 0; - aTime = 0; - aFrame = NULL; - - if(isValidMP3) - { - TMpFrameState frState; - int16 frameFound; - TInt bufSize; - TPtr8 mp3DataBuf(mp3HeaderBytes, Kmp3BufSize); - - /*-- Search start of next frame. --*/ - - bufSize = BufferedFileRead((TDes8&) mp3DataBuf); - if(bufSize < Kmp3BufSize) - ZERO_MEMORY(mp3HeaderBytes + bufSize, Kmp3BufSize - bufSize); - frameFound = GetMP3Frame(mp3HeaderBytes, Kmp3BufSize, &frState, 0); - - /*-- Frame found. --*/ - if(frameFound == 0) - { - TInt fLen; - - fLen = frState.frameBytes + frState.headerBytes; - fLen -= Kmp3BufSize - (frState.readBytes - frState.headerBytes); - if(fLen > 0) - { - TInt offset; - uint8 *audFrameOffsetPtr; - HBufC8 *audioFrame = HBufC8::NewL(frState.frameBytes + frState.headerBytes); - - offset = frState.readBytes - frState.headerBytes; - mp3DataBuf.Set(mp3HeaderBytes + offset, Kmp3BufSize - offset, Kmp3BufSize - offset); - - audioFrame->Des().Copy(((const TDesC8 &) mp3DataBuf)); - - audFrameOffsetPtr = (uint8 *) audioFrame->Des().Ptr(); - - TPtr8 audTmpPtr(audFrameOffsetPtr + Kmp3BufSize - offset, fLen, fLen); - - bufSize = BufferedFileRead(audTmpPtr, fLen); - - fLen = frState.frameBytes + frState.headerBytes; - audioFrame->Des().SetLength(fLen); - - aFrame = audioFrame; - aSize = fLen; - aTime = iMp3Edit->GetFrameTime(mp3FileFormat); - iCurrentTimeMilliseconds += aTime; - - TRAPD(err, ManipulateGainL(aFrame)); - - if (err != KErrNone) - { - // something went wrong with the gain manipulation - // continue by returning the original frame - } - - - rValue = ETrue; - } - } - } - - - - - return (rValue); - } - - - -CProcMP3InFileHandler::~CProcMP3InFileHandler() -{ -// if(iFileOpen) - CloseFile(); - - if (iMp3Edit != 0) - { - delete iMp3Edit; - iMp3Edit = 0; - } - - if (iFileName != 0) - { - delete iFileName; - iFileName = 0; - } - - if (iReadBuffer != 0) - { - delete iReadBuffer; - iReadBuffer = 0; - } - - if (mp3FileFormat != 0) - { - delete mp3FileFormat; - mp3FileFormat = 0; - } - - if (mp3HeaderBytes != 0) - { - delete mp3HeaderBytes; - mp3HeaderBytes = 0; - } - - if (iDecoder != 0) - { - delete iDecoder; - iDecoder = 0; - } - - if (iFrameHandler != 0) - { - delete iFrameHandler; - iFrameHandler = 0; - } - - if (iSilentFrame != 0) - { - delete iSilentFrame; - iSilentFrame = 0; - } -} - -int16 CProcMP3InFileHandler:: -GetMP3Frame(uint8 *dataBytes, int16 bufSize, TMpFrameState *frState, uint8 syncStatus) -{ - - - int16 locateFrame; - int16 seekSyncStatus = 0; - TPtr8 mp3DataBuf(dataBytes, bufSize); - - /*-- Search start of 1st frame. --*/ - locateFrame = 0; - frState->totalReadBytes = 0; - - while(locateFrame == 0) - { - if(syncStatus == 3) - seekSyncStatus = iMp3Edit->FreeMode(mp3FileFormat, dataBytes, bufSize, - &frState->readBytes, &frState->frameBytes, - &frState->headerBytes); - else - seekSyncStatus = iMp3Edit->SeekSync(mp3FileFormat, dataBytes, bufSize, - &frState->readBytes, &frState->frameBytes, - &frState->headerBytes, (uint8) syncStatus); - - /*-- Start of 1st frame found. --*/ - if(seekSyncStatus == 0 || seekSyncStatus == 3) - locateFrame = 1; - - /*-- Update data buffer, start of 1st frame not found yet. --*/ - else if(seekSyncStatus == 2) - { - if(frState->readBytes) - { - TInt tmpBufLen, tmp2; - - /*-- New data bytes to be read into buffer. --*/ - tmpBufLen = (int16) (bufSize - frState->readBytes); - - /*-- Move data that is possibly left in the buffer. --*/ - if(tmpBufLen) COPY_MEMORY(dataBytes, dataBytes + frState->readBytes, tmpBufLen); - - /*-- Prepare to read. --*/ - mp3DataBuf.Set(dataBytes + tmpBufLen, frState->readBytes, frState->readBytes); - - /*-- Update buffer. --*/ - tmp2 = BufferedFileRead((TDes8&) mp3DataBuf); - if(tmp2 < frState->readBytes) - ZERO_MEMORY(dataBytes + tmpBufLen + tmp2, frState->readBytes - tmp2); - - frState->totalReadBytes += frState->readBytes; - } - } - - /*-- Abort, start of 1st frame cannot be located. --*/ - else locateFrame = 1; - } - - return (seekSyncStatus); - - -} - -void CProcMP3InFileHandler:: -ConstructL(const TDesC& aFileName, RFile* aFileHandle, CAudClip* aClip, TInt aReadBufferSize, - TInt aTargetSampleRate, TChannelMode aChannelMode) -{ - - - iTargetSampleRate = aTargetSampleRate; - iChannelMode = aChannelMode; - - - int16 locate1stFrame; - TMpFrameState frState; - - isVbrMP3 = 0; - isValidMP3 = 0; - isFreeFormatMP3 = 0; - - //-- Initialize file format handle. -- - mp3FileFormat = (TMpTransportHandle *) new (ELeave) TMpTransportHandle[1]; - ZERO_MEMORY(mp3FileFormat, sizeof(TMpTransportHandle)); - - //-- Buffer for header search. -- - mp3HeaderBytes = new (ELeave) uint8[Kmp3BufSize]; - ZERO_MEMORY(mp3HeaderBytes, Kmp3BufSize); - - // -- Buffer for validity check -- - HBufC8* vldBuffer = (HBufC8*) HBufC8::NewLC(Kmp3TempBufferSize); - - iMp3Edit = CMp3Edit::NewL(); - - // Set the file format parameters to default values. Note that this function - // should be called only once; when searching the start of 1st frame. - // - iMp3Edit->InitTransport(mp3FileFormat); - - iClip = aClip; - - //-- Open file. --// - InitAndOpenFileL(aFileName, aFileHandle, aReadBufferSize); - - TPtr8 mp3DataBuf(mp3HeaderBytes, Kmp3BufSize); - - /*-- Read 1st bytes in. --*/ - BufferedFileSetFilePos(0); - BufferedFileRead((TDes8&) mp3DataBuf); - - - // -----------------------------------------> - - // Identify ID3v2 header: - - // more info in http://www.id3.org/ - - TInt tagLen = 0; - if (mp3DataBuf.Left(3).Compare(_L8("ID3")) == 0) - { - - const TInt KLenOffset = 6; - - BufferedFileSetFilePos(KLenOffset); - BufferedFileRead((TDes8&) mp3DataBuf); - - // ID3v2 tag found, calculate lenght: - - const TInt K2Pow7 = 128; - const TInt K2Pow14 = 16384; - const TInt K2Pow21 = 2097152; - - tagLen = K2Pow21 * mp3DataBuf[0] + - K2Pow14 * mp3DataBuf[1] + - K2Pow7 * mp3DataBuf[2] + - mp3DataBuf[3]; - - - tagLen += 10; // include ID3v2 header - - } - - // <----------------------------------------- - - BufferedFileSetFilePos(tagLen); - - TPtr8 vldDes( vldBuffer->Des() ); - - TInt bytesRead = BufferedFileRead((TDes8&) vldDes); - vldDes.SetLength(bytesRead); - - TBool result = Validate(vldDes); - - CleanupStack::PopAndDestroy(vldBuffer); - - if (!result) - { - User::Leave(KErrCorrupt); - } - - BufferedFileSetFilePos(tagLen); - bytesRead = BufferedFileRead((TDes8&) mp3DataBuf); - - /*-- Search start of 1st frame. --*/ - locate1stFrame = GetMP3Frame(mp3HeaderBytes, Kmp3BufSize, &frState, 1); - - /*-- If free format, we must determine the payload size of the frames. --*/ - if(locate1stFrame == 3) - { - int16 tmpBufLen; - uint8 tmpBuf[MIN_MP3_FREE_FORMAT_BUF_SIZE]; - - /*-- Switch to larger buffer. --*/ - tmpBufLen = (int16) (Kmp3BufSize - frState.readBytes); - COPY_MEMORY(tmpBuf, mp3HeaderBytes + frState.readBytes, tmpBufLen); - if(frState.readBytes) - { - int16 tmpBufLen2; - - tmpBufLen2 = (int16) (MIN_MP3_FREE_FORMAT_BUF_SIZE - tmpBufLen); - mp3DataBuf.Set(tmpBuf + tmpBufLen, tmpBufLen2, tmpBufLen2); - BufferedFileRead((TDes8&) mp3DataBuf); - } - - /*-- Determine the payload size. --*/ - locate1stFrame = GetMP3Frame(tmpBuf, MIN_MP3_FREE_FORMAT_BUF_SIZE, &frState, 3); - - /*-- If payload size known, then go back to the start of 1st frame. --*/ - if(locate1stFrame == 0) - { - isFreeFormatMP3 = 1; - - BufferedFileSetFilePos(0); - mp3DataBuf.Set(mp3HeaderBytes, Kmp3BufSize, Kmp3BufSize); - BufferedFileRead((TDes8&) mp3DataBuf); - - locate1stFrame = GetMP3Frame(mp3HeaderBytes, Kmp3BufSize, &frState, 0); - } - } - - if(locate1stFrame == 0) - isValidMP3 = 1; - - BufferedFileSetFilePos(0); - - TAudFileProperties prop; - GetPropertiesL(&prop); - - if (iProperties != 0) - { - - - // generate a header --------------> - - - TUint8 byte1 = 0xFF; // sync - TUint8 byte2 = 0xFB; // sync + V1,L3 (mp3), no CRC - - TBuf8<8> byte3B; - - switch (iProperties->iBitrate) - { - - case (32000): - { - byte3B.Append(_L8("0001")); - break; - } - case (40000): - { - byte3B.Append(_L8("0010")); - break; - } - case (48000): - { - byte3B.Append(_L8("0011")); - break; - } - case (56000): - { - byte3B.Append(_L8("0100")); - break; - } - case (64000): - { - byte3B.Append(_L8("0101")); - break; - } - case (80000): - { - byte3B.Append(_L8("0110")); - break; - } - case (96000): - { - byte3B.Append(_L8("0111")); - break; - } - case (112000): - { - byte3B.Append(_L8("1000")); - break; - } - case (128000): - { - byte3B.Append(_L8("1001")); - break; - } - case (160000): - { - byte3B.Append(_L8("1010")); - break; - } - case (192000): - { - byte3B.Append(_L8("1011")); - break; - } - case (224000): - { - byte3B.Append(_L8("1100")); - break; - } - case (256000): - { - byte3B.Append(_L8("1101")); - break; - } - case (320000): - { - byte3B.Append(_L8("1110")); - break; - } - default: - { - if ( iProperties->iBitrateMode == EAudVariable ) - { - // bitrate for silent frames in variable bitrate mode; use the lowest bitrate. - // However, mp3 is not an output format so this is not so relevant currently - byte3B.Append(_L8("0001")); - - } - else - { - - User::Leave(KErrGeneral); - } - break; - - } - - } - - switch (iProperties->iSamplingRate) - { - - case(44100): - { - byte3B.Append(_L8("00")); - break; - } - case(48000): - { - byte3B.Append(_L8("01")); - break; - } - case(32000): - { - byte3B.Append(_L8("10")); - break; - } - default: - { - User::Leave(KErrGeneral); - break; - } - } - - - byte3B.Append(_L8("00")); // padding + protection bits - - TBuf8<8> byte4B; - - switch (iProperties->iChannelMode) - { - - case(EAudStereo): - { - byte4B.Append(_L8("00")); - break; - } - case(EAudDualChannel): - { - byte4B.Append(_L8("10")); - break; - } - case(EAudSingleChannel): - { - byte4B.Append(_L8("11")); - break; - } - default: - { - User::Leave(KErrGeneral); - break; - } - } - - - byte4B.Append(_L8("000")); // mode extension, - // not copyrighted, - - if (iProperties->iOriginal) - { - byte4B.Append(_L8("100")); - } - else - { - byte4B.Append(_L8("000")); - } - //copy of original, no emphasis - - TInt frameLength; - if ( iProperties->iBitrateMode == EAudVariable ) - { - // Use the lowest bitrate for silent frames in variable bitrate mode. - // However, mp3 is not an output format so this is not so relevant currently - frameLength = (144*32000)/(iProperties->iSamplingRate); - } - else - { - frameLength = (144*iProperties->iBitrate)/(iProperties->iSamplingRate); - } - - iSilentFrame = HBufC8::NewL(frameLength); - - TUint byte3 = 0; - ProcTools::Bin2Dec(byte3B, byte3); - - TUint byte4 = 0; - ProcTools::Bin2Dec(byte4B, byte4); - - TPtr8 silentFramePtr(iSilentFrame->Des()); - - silentFramePtr.FillZ(frameLength); - - silentFramePtr[0] = byte1; - silentFramePtr[1] = byte2; - silentFramePtr[2] = static_cast(byte3); - silentFramePtr[3] = static_cast(byte4); - iSilentFrameDuration = ProcTools::MilliSeconds(iProperties->iFrameDuration); - - } - - if (aClip != 0) - { - iCutInTime = ProcTools::MilliSeconds(aClip->CutInTime()); - - } - - iDecoder = CProcDecoder::NewL(); - - iDecodingPossible = iDecoder->InitL(*iProperties, aTargetSampleRate, aChannelMode); - - iFrameHandler = CProcMP3FrameHandler::NewL(); - - - if (iClip != 0 && iClip->Normalizing()) - { - SetNormalizingGainL(iFrameHandler); - } - -} - -TBool CProcMP3InFileHandler::Validate(TDes8& aDes) -{ - - const TUint8* bufferPtr = aDes.Ptr(); - - TInt bufferSize = aDes.Length(); - - TInt scannedBuffer = 0; - TInt lenMetaData = 0; - TInt syncOffset = 0; - TInt bufferPosition = 0; - - if (lenMetaData == 0) - { - syncOffset = 0; - lenMetaData = ID3HeaderLength(aDes, bufferPosition); - } - - TInt bufferRemaining = bufferSize; - - while (lenMetaData > 0) - { - if (lenMetaData >= bufferRemaining) - { - // this buffer contains all metadata - syncOffset += bufferRemaining; - lenMetaData -= bufferRemaining; - return KErrCorrupt; - } - else - { - syncOffset += lenMetaData; - scannedBuffer += lenMetaData; - // be sure to check for following id3 tags - bufferRemaining = bufferSize - scannedBuffer; - bufferPosition = scannedBuffer; - lenMetaData = ID3HeaderLength(aDes, bufferPosition); - } - } - - - TInt seekOffset = 0; - bufferPosition = scannedBuffer; - - seekOffset = SeekSync(aDes, bufferPosition); - - syncOffset += seekOffset; // offset to this point from content beginning - scannedBuffer += seekOffset; // offset to this point in this buffer - - bufferPosition = scannedBuffer; - - if (seekOffset == bufferSize) - { - return EFalse; - } - - return ETrue; - - } - - -TInt CProcMP3InFileHandler::SeekSync(TDes8& aDes, TInt aBufPos) - { - const TUint bufStart = aBufPos; - - TInt bufLen = aDes.Length(); - const TUint8* buf = aDes.Ptr() + bufStart; - const TInt KMaxFrames = 3; // number of frames to check - const TInt KNotFound = bufLen; // sync not found position - - TInt i = 0; - TInt syncPos = KNotFound; - TInt maxSeek = KMaxFrames; - TInt bitRate = 0; - - const TUint8* endPtr = buf+bufLen-bufStart; - - // Seek a valid frame candidate byte by byte until a valid frame - // is found or all bytes have been checked. - while (buf < endPtr && syncPos == KNotFound) - { - TInt seekCount = 0; - const TUint8* framePtr = buf; - TInt frameBufLen = bufLen; - syncPos = i; - - // Check the validity of this frame candidate and the nearest next - // frames. If they are not OK, syncPos will be set to KNotFound. - while (framePtr < endPtr && syncPos != KNotFound && seekCount < maxSeek) - { - - TInt length = FrameInfo(framePtr, frameBufLen, bitRate); - - if (length == 0) - { - syncPos = KNotFound; - } - - if ((length > 0) && (bitRate < 0)) - { - maxSeek = 1; // free formatcase - } - framePtr += length; - frameBufLen -= length; - seekCount++; - - // consider SYNC not found if we reach end of buffer before finding 3 SYNC frames - if ((framePtr >= endPtr) && (seekCount < maxSeek)) - { - syncPos = KNotFound; - buf += (bufLen-1); // force an exit from while loop - } - - } - buf++; bufLen--; i++; - } - return syncPos; - } - -TInt CProcMP3InFileHandler::FrameInfo(const TUint8* aBuf,TInt aBufLen,TInt& aBitRate) - { - TInt length = 0; - TUint temp; - TUint lTempVal; - - TInt samplingRate = 0; - TInt id = 0; - TInt Padding = 0; - - if (aBufLen >= KRawMp3FrameHeaderSize) - { - // Extract header fields to aInfo and check their bit syntax - // (including the sync word!). If the syntax is not OK the length - // is set to zero. - - temp = 0; - temp = aBuf[0] << 24; - temp |= (aBuf[1] << 16); - temp |= (aBuf[2] << 8); - temp |= aBuf[3]; - if (((temp >> 21) & 0x7FF) != 0x7FF) - { - return length; - } - - lTempVal = (temp >> 19) & 0x03; - switch (lTempVal) - { - case 0: - id = 2; // MPEG2.5 - break; - case 1: - return length; - case 2: - id = 0; // MPEG 2 - break; - case 3: - id = 1; // MPEG 1 - break; - } - - lTempVal = (temp >> 17) & 0x03; - if (lTempVal != 1) - { - return length; - } - - lTempVal = (temp >> 12) & 0x0F; - aBitRate = cBitRateTable[id][lTempVal]*1000; - - if (aBitRate == 0) - { - return length; - } - - lTempVal = (temp >> 10) & 0x03; - if (lTempVal == 3) - { - return length; - } - else - { - samplingRate = cSamplingFrequencyTable[id][lTempVal]; - } - - Padding = (temp >> 9) & 0x01; - - lTempVal = (temp >> 6) & 0x03; - - - if (lTempVal == 3) - { - } - else - { - } - - if (aBitRate == -1) - { - // For free mode operation - length = KRawMp3MaxFrameSize; - } - - if (samplingRate > 0 && aBitRate > 0) - { - length = (144*aBitRate)/samplingRate; - - if (id != 1) - { - length >>= 1; /*for MPEG2 and MPEG2.5 */ - } - - if (Padding) - { - length++; - } - } - } - return length; - } - - -TInt CProcMP3InFileHandler::ID3HeaderLength(TDes8& aDes, TInt aPosition) - { - TInt lenMetaData; - TUint offset = aPosition; - - _LIT8 (KTagID3, "ID3"); - TPtrC8 searchBuf; - - // Set search buffer - searchBuf.Set(aDes); - - const TUint8* ptr = aDes.Ptr(); - TInt len = aDes.Length(); - searchBuf.Set(ptr+offset, len-offset); - - TInt startTagPos = searchBuf.Find (KTagID3); - if (startTagPos == KErrNotFound || startTagPos != 0) - { - lenMetaData = 0; - } - else - { - lenMetaData = searchBuf[KSizeOfTagOffset]; - lenMetaData = ((lenMetaData << 8) | (searchBuf[KSizeOfTagOffset+1] << 1)) >> 1; - lenMetaData = ((lenMetaData << 8) | (searchBuf[KSizeOfTagOffset+2] << 1)) >> 1; - lenMetaData = ((lenMetaData << 8) | (searchBuf[KSizeOfTagOffset+3] << 1)) >> 1; - lenMetaData += 10; - } - - return lenMetaData; - } - - -int16 -CProcMP3InFileHandler::GetMP3Bitrate(void) -{ - - - TMpFrameState frState; - int16 bitRate, frameFound, offsetBytes; - TPtr8 mp3DataBuf(mp3HeaderBytes, Kmp3BufSize); - - bitRate = 0; - isVbrMP3 = 0; - - /*-- Search start of 1st frame. --*/ - BufferedFileRead((TDes8&) mp3DataBuf); - frameFound = GetMP3Frame(mp3HeaderBytes, Kmp3BufSize, &frState, 0); - - /*-- How many unknown bytes at the start of the file? --*/ - offsetBytes = static_cast(frState.totalReadBytes + (frState.readBytes - frState.headerBytes)); - - /*-- Get bitrate information. --*/ - if(frameFound == 0) - { - if(isFreeFormatMP3) - bitRate = iMp3Edit->EstimateBitrate(mp3FileFormat, 0); - - /* - * Since the mp3 stream is not using free format, we must somehow - * determine the (average) bitrate. Yes, mp3 header includes - * information about the bitrate but that's valid only for - * the current frame. In case variable coding is used the bitrate - * can vary quite a lot depending on the goodness of the encoder - * and signal conditions. Also if the mp3 stream is already an edited - * version, the bitrate can change quite radicly between different portions - * of the file. At the moment we determine the avarage frame size by - * dividing the file into 'Kmp3BitrateRegions' regions of equal width - * and from each region we determine the average frame size. The 1st - * 'Kmp3BitrateNumFrames' frames are used from each region. The final - * average frame size is then averaged across each region. - * The reason why the bitrate estimation is so complicated is related - * to seeking. At the moment we jump to the desired position and in order - * to make this jump as accurate as possible we must have accurate information - * about the average frame size. The advantages of jumping is that it's fast, - * the side effect might be that we jump to incorrect position, the deviation - * is negligible with constant bitrate streams but with variable bitrate streams - * this can lead to quite large deviations, especially if the stream is using - * the full range of allowed bitrates. Fortunately, this is not the case in - * typical mp3 streams but after a series of editing we might have a - * file where bitrate changes are significant. Of course this means also that - * the quality is not so good either, so probably the user will never create - * such files due to poor sound quality... - * - * The other approach would be the loop each frame and store frame positions, - * let's say for every second. Works great, but the side effect is quite considerable - * delay, since it certainly takes some time to process 5000-10000 mp3 frames... - */ - else - { - int32 fPosOffset[Kmp3BitrateRegions]; - TInt fileSize, stepSize, nRegions, byteOffset; - - if(iFile.Size(fileSize) == KErrNone) - { - uint8 idx; - int32 nFrames; - int16 prevBitRate; - TMPEG_Header *header; - TInt ProcessingOnGoing; - - fileSize -= offsetBytes; - if(fileSize < 0) - return (0); - - header = &mp3FileFormat->header; - - /*-- Build the data region boundaries. --*/ - nRegions = 1; - stepSize = fileSize / Kmp3BitrateRegions; - byteOffset = stepSize; - fPosOffset[0] = stepSize; - TInt i = 0; - for(i = 1; i < Kmp3BitrateRegions - 1; i++) - { - byteOffset += stepSize; - if(byteOffset < fileSize) - { - nRegions++; - fPosOffset[i] = byteOffset; - } - else break; - } - - idx = 0; - nFrames = 0; - ProcessingOnGoing = 1; - mp3FileFormat->aveFrameLen = 0; - - prevBitRate = bit_rate(header); - - /*-- Process each data region and accumulate the frame size. --*/ - while(ProcessingOnGoing) - { - TInt rValue, bufSize; - - for(i = 0; i < Kmp3BitrateNumFrames; i++) - { - TInt fLen; - - nFrames++; - fLen = static_cast(frState.frameBytes + frState.headerBytes); - - frameFound = 2; - mp3FileFormat->aveFrameLen += fLen; - - /*-- Check whether bitrate changed => variable bitrate. --*/ - if(!isVbrMP3) - if(prevBitRate != bit_rate(header)) - isVbrMP3 = 1; - - /* - * Skip the payload, remember that the input buffer has 'Kmp3BufSize' - * bytes already that belong to the current mp3 frame. These bytes - * need to be compensated before jumping to the start of next frame. - */ - fLen -= static_cast(Kmp3BufSize - (frState.readBytes - frState.headerBytes)); - if(fLen < 0) fLen = 1; - rValue = BufferedFileSetFilePos(BufferedFileGetFilePos() + fLen); - - if(rValue) - { - /*-- Read new data for parsing of next frame. --*/ - bufSize = BufferedFileRead((TDes8&) mp3DataBuf); - if(bufSize < Kmp3BufSize) - ZERO_MEMORY(mp3HeaderBytes + bufSize, Kmp3BufSize - bufSize); - - frameFound = GetMP3Frame(mp3HeaderBytes, Kmp3BufSize, &frState, 0); - } - - if(frameFound != 0) - { - ProcessingOnGoing = 0; - break; - } - } - - if(ProcessingOnGoing && idx < nRegions) - { - frameFound = 2; - - /*-- Seek to start of next data region. --*/ - rValue = BufferedFileSetFilePos(fPosOffset[idx++]); - - if(rValue) - { - /*-- Read new data and search start of frame. --*/ - bufSize = BufferedFileRead((TDes8&) mp3DataBuf); - if(bufSize < Kmp3BufSize) - ZERO_MEMORY(mp3HeaderBytes + bufSize, Kmp3BufSize - bufSize); - - frameFound = GetMP3Frame(mp3HeaderBytes, Kmp3BufSize, &frState, 0); - } - - if(frameFound != 0) - ProcessingOnGoing = 0; - } - else ProcessingOnGoing = 0; - } - - if(frameFound != 0) - { - mp3FileFormat->execState.execMode = GLITCH_FREE; - mp3FileFormat->header.header = mp3FileFormat->headerOld.header; - } - - /*-- Average frame length, in bytes. --*/ - if(nFrames) - { - FLOAT tmp; - - tmp = mp3FileFormat->aveFrameLen / (FLOAT) nFrames; - mp3FileFormat->aveFrameLen = (int16) (tmp + 0.5f); - } - - /*-- This is our estimated bitrate. --*/ - bitRate = iMp3Edit->EstimateBitrate(mp3FileFormat, 1); - } - } - } - return (bitRate); - -} - -void -CProcMP3InFileHandler::GetPropertiesL(TAudFileProperties* aProperties) -{ - PRINT((_L("CProcMP3InFileHandler::GetPropertiesL in") )); - - - if (iProperties != 0) - { - *aProperties = *iProperties; - return; - } - - if(iFileOpen) - { - TInt origFilePos = iFilePos; - - aProperties->iFileFormat = EAudFormatUnrecognized; - aProperties->iAudioType = EAudTypeUnrecognized; - aProperties->iAudioTypeExtension = EAudExtensionTypeNoExtension; - aProperties->iBitrate = 0; - aProperties->iBitrateMode = EAudBitrateModeNotRecognized; - aProperties->iChannelMode = EAudChannelModeNotRecognized; - aProperties->iDuration = 0; - aProperties->iSamplingRate = 0; - aProperties->iFrameLen = 0; - aProperties->iFrameCount = 0; - - /*-- First mp3 frame found? --*/ - if(isValidMP3) - { - TMPEG_Header *header; - - header = &mp3FileFormat->header; - - /*-- Seek to start of file. --*/ - BufferedFileSetFilePos(0); - - - - if (version(header) != 1) - { - PRINT((_L("CProcMP4InFileHandler::GetPropertiesL header unsupported, leaving") )); - User::Leave(KErrNotSupported); - return; - } - - - /*-- Determine bitrate. --*/ - aProperties->iBitrate = GetMP3Bitrate(); - - - if(aProperties->iBitrate) - { - TInt fileSize; - - iFile.Size(fileSize); - - aProperties->iAudioType = EAudMP3; - aProperties->iFileFormat = EAudFormatMP3; - aProperties->iBitrateMode = (!isVbrMP3) ? EAudConstant : EAudVariable; - - /*-- Determine channel mode. --*/ - switch(mode(header)) - { - case 0: - case 1: - aProperties->iChannelMode = EAudStereo; - break; - - case 2: - aProperties->iChannelMode = EAudDualChannel; - break; - - case 3: - default: - aProperties->iChannelMode = EAudSingleChannel; - break; - } - - /*-- Estimate duration. --*/ - TInt64 tmp = (TInt64)iMp3Edit->FileLengthInMs(mp3FileFormat, fileSize) * 1000; - TTimeIntervalMicroSeconds durationMicro(tmp); - aProperties->iDuration = durationMicro; - - aProperties->iSamplingRate = frequency(header); - - // Check that the sample rate is supported - if( (aProperties->iSamplingRate != KAedSampleRate8kHz) && - (aProperties->iSamplingRate != KAedSampleRate11kHz) && - (aProperties->iSamplingRate != KAedSampleRate16kHz) && - (aProperties->iSamplingRate != KAedSampleRate22kHz) && - (aProperties->iSamplingRate != KAedSampleRate24kHz) && - (aProperties->iSamplingRate != KAedSampleRate32kHz) && - (aProperties->iSamplingRate != KAedSampleRate44kHz) && - (aProperties->iSamplingRate != KAedSampleRate48kHz) ) - { - User::Leave(KErrNotSupported); - } - - aProperties->iFrameLen = mp3FileFormat->aveFrameLen; - - // casting for PC-Lint - tmp = (TInt64) (TInt)(iMp3Edit->GetFrameTime(mp3FileFormat) * 1000); - aProperties->iFrameDuration = tmp; - aProperties->iFrameCount = ProcTools::GetTInt((aProperties->iDuration).Int64()/(aProperties->iFrameDuration).Int64()); - - if (((TUint32)header->header & 0x4) != 0) - { - - aProperties->iOriginal = ETrue; - - } - - BufferedFileSetFilePos(origFilePos); - } - } - else - { - PRINT((_L("CProcMP4InFileHandler::GetPropertiesL could not parse frames, leaving") )); - User::Leave(KErrNotSupported); - } - } - else - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - // bitrate is bytes not kilobytes - aProperties->iBitrate *= 1000; - - - if (iProperties == 0) - { - iProperties = new (ELeave) TAudFileProperties; - *iProperties = *aProperties; - - } - -} - -TBool -CProcMP3InFileHandler::SeekAudioFrame(TInt32 aTime) -{ - TBool rValue = EFalse; - - - - if(!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - if(isValidMP3) - { - int32 fPos; - - mp3FileFormat->aveFrameLen = iProperties->iFrameLen; - fPos = iMp3Edit->GetSeekOffset(mp3FileFormat, aTime); - - BufferedFileSetFilePos(fPos); - - iCurrentTimeMilliseconds = aTime; - - rValue = ETrue; - } - - - - return (rValue); -} - -TBool -CProcMP3InFileHandler::SeekCutInFrame() -{ - iCurrentTimeMilliseconds = iCutInTime; - - return SeekAudioFrame(iCutInTime); -} - - -TBool -CProcMP3InFileHandler::GetDurationL(TInt32& aTime, TInt& aFrameAmount) -{ - TBool rValue = EFalse; - - - - if(!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - aTime = 0; - aFrameAmount = 0; - - if(isValidMP3) - { - TInt filePos; - TAudFileProperties aProperties; - - filePos = iFilePos; - - GetPropertiesL(&aProperties); - - if(aProperties.iBitrate) - { - rValue = ETrue; - aTime = ProcTools::MilliSeconds(aProperties.iDuration); - aFrameAmount = aTime / iMp3Edit->GetFrameTime(mp3FileFormat); - } - - BufferedFileSetFilePos(filePos); - } - - - return (rValue); -} - - -TBool -CProcMP3InFileHandler::SetNormalizingGainL(const CProcFrameHandler* aFrameHandler) -{ - - HBufC8* point = 0; - TInt siz; - TInt32 tim = 0; - TInt maxGain = 0; - RArray gains; - TInt maxAverage = 0; - TInt tmpGain = 0; - TInt gainCounter = 0; - TInt timeNow = 0; - TBitStream bs; - - while(GetEncAudioFrameL(point, siz, tim)) - { - timeNow += tim; - ((CProcMP3FrameHandler*) aFrameHandler)->GetMP3Gains(point, gains, maxGain, bs); - - for (TInt a = 0 ; a < gains.Count() ; a = a+2) - { - tmpGain += gains[a]; - gainCounter++; - } - gains.Reset(); - - if (timeNow > 1000) - { - if (tmpGain/gainCounter > maxAverage) - { - maxAverage = tmpGain/gainCounter; - } - - timeNow = 0; - tmpGain = 0; - gainCounter = 0; - } - - delete point; - - } - - // bigger value makes normalizing more efficient, but makes - // dynamic compression more likely to occur - TInt NormalizingFactor = 179; - if (iProperties->iBitrate > 20000 && iProperties->iBitrate < 40000) - { - - // 32 kBit/s - NormalizingFactor = 187; - - } - else if (iProperties->iBitrate > 40000 && iProperties->iBitrate < 80000) - { - // 64 kBit/s - NormalizingFactor = 181; - - } - - - else if (iProperties->iBitrate > 80000 && iProperties->iBitrate < 140000) - { - // 128 kBit/s - if (iProperties->iChannelMode == EAudSingleChannel) - NormalizingFactor = 170; - else - NormalizingFactor = 179; - - } - else if (iProperties->iBitrate > 140000) - { - // 256 kBit/s - if (iProperties->iChannelMode == EAudSingleChannel) - NormalizingFactor = 155; - else - NormalizingFactor = 167; - - } - else - { - - if (iProperties->iChannelMode == EAudSingleChannel) - NormalizingFactor = 170; - - } - - - TInt gainBoost = (NormalizingFactor-maxAverage)*3; - - if (gainBoost < 0) gainBoost = 0; - - iNormalizingMargin = static_cast(gainBoost); - - SeekAudioFrame(0); - - mp3FileFormat->execState.a0_s16[0] = 0; - mp3FileFormat->execState.a0_s16[1] = 0; - mp3FileFormat->execState.a0_s16[2] = 0; - - mp3FileFormat->execState.a0_u32[0] = 0; - mp3FileFormat->execState.a0_u32[1] = 0; - mp3FileFormat->execState.a0_u32[2] = 0; - - - - - return ETrue; - - -} - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/eabi/aedengineu.def --- a/videoeditorengine/audioeditorengine/eabi/aedengineu.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -EXPORTS - _ZN12CAudClipInfo19CancelVisualizationEv @ 1 NONAME - _ZN12CAudClipInfo4NewLERK7TDesC16R20MAudClipInfoObserver @ 2 NONAME - _ZN12CAudClipInfo5NewLCERK7TDesC16R20MAudClipInfoObserver @ 3 NONAME - _ZN12CAudClipInfoD0Ev @ 4 NONAME - _ZN12CAudClipInfoD1Ev @ 5 NONAME - _ZN12CAudClipInfoD2Ev @ 6 NONAME - _ZN8CAudClip11SetPriorityEi @ 7 NONAME - _ZN8CAudClip12SetCutInTimeE25TTimeIntervalMicroSeconds @ 8 NONAME - _ZN8CAudClip12SetStartTimeE25TTimeIntervalMicroSeconds @ 9 NONAME - _ZN8CAudClip13GetVolumeGainEv @ 10 NONAME - _ZN8CAudClip13SetCutOutTimeE25TTimeIntervalMicroSeconds @ 11 NONAME - _ZN8CAudClip13SetVolumeGainEi @ 12 NONAME - _ZN8CAudClip14SetNormalizingEi @ 13 NONAME - _ZN8CAudClip22RemoveDynamicLevelMarkEi @ 14 NONAME - _ZN8CAudClip23InsertDynamicLevelMarkLERK20TAudDynamicLevelMark @ 15 NONAME - _ZN8CAudClip5ResetEi @ 16 NONAME - _ZN8CAudClip9SetMutingEi @ 17 NONAME - _ZN8CAudSong10RemoveClipEii @ 18 NONAME - _ZN8CAudSong11SetDurationE25TTimeIntervalMicroSeconds @ 19 NONAME - _ZN8CAudSong16GetTimeEstimateLER24MAudTimeEstimateObserver8TAudTypei12TChannelModei @ 20 NONAME - _ZN8CAudSong16GetTimeEstimateLEv @ 21 NONAME - _ZN8CAudSong17SyncCancelProcessEv @ 22 NONAME - _ZN8CAudSong17SyncProcessFrameLERP6HBufC8RiR25TTimeIntervalMicroSeconds @ 23 NONAME - _ZN8CAudSong19SetOutputFileFormatE8TAudTypei12TChannelModei @ 24 NONAME - _ZN8CAudSong20SyncStartProcessingLEv @ 25 NONAME - _ZN8CAudSong21GetFrameDurationMicroEv @ 26 NONAME - _ZN8CAudSong21RegisterSongObserverLEP16MAudSongObserver @ 27 NONAME - _ZN8CAudSong22UnregisterSongObserverEP16MAudSongObserver @ 28 NONAME - _ZN8CAudSong28AreOutputPropertiesSupportedERK18TAudFileProperties @ 29 NONAME - _ZN8CAudSong4NewLEP3RFs @ 30 NONAME - _ZN8CAudSong5NewLCEP3RFs @ 31 NONAME - _ZN8CAudSong5ResetEi @ 32 NONAME - _ZN8CAudSong8AddClipLERK7TDesC1625TTimeIntervalMicroSecondsiS3_S3_ @ 33 NONAME - _ZN8CAudSongD0Ev @ 34 NONAME - _ZN8CAudSongD1Ev @ 35 NONAME - _ZN8CAudSongD2Ev @ 36 NONAME - _ZNK12CAudClipInfo10PropertiesEv @ 37 NONAME - _ZNK12CAudClipInfo17GetVisualizationLER25MAudVisualizationObserverii @ 38 NONAME - _ZNK12CAudClipInfo8FileNameEv @ 39 NONAME - _ZNK8CAudClip10CutOutTimeEv @ 40 NONAME - _ZNK8CAudClip10TrackIndexEv @ 41 NONAME - _ZNK8CAudClip11NormalizingEv @ 42 NONAME - _ZNK8CAudClip12IndexOnTrackEv @ 43 NONAME - _ZNK8CAudClip14EditedDurationEv @ 44 NONAME - _ZNK8CAudClip16DynamicLevelMarkEi @ 45 NONAME - _ZNK8CAudClip21DynamicLevelMarkCountEv @ 46 NONAME - _ZNK8CAudClip4InfoEv @ 47 NONAME - _ZNK8CAudClip6MutingEv @ 48 NONAME - _ZNK8CAudClip7EndTimeEv @ 49 NONAME - _ZNK8CAudClip8PriorityEv @ 50 NONAME - _ZNK8CAudClip9CutInTimeEv @ 51 NONAME - _ZNK8CAudClip9StartTimeEv @ 52 NONAME - _ZNK8CAudSong16GetSizeEstimateLEv @ 53 NONAME - _ZNK8CAudSong20OutputFilePropertiesEv @ 54 NONAME - _ZNK8CAudSong21GetFrameSizeEstimateLE25TTimeIntervalMicroSecondsS0_ @ 55 NONAME - _ZNK8CAudSong27GetMP4DecoderSpecificInfoLCERP6HBufC8i @ 56 NONAME - _ZNK8CAudSong4ClipEii @ 57 NONAME - _ZNK8CAudSong9ClipCountEi @ 58 NONAME - _ZN12CAudClipInfo4NewLEP5RFileR20MAudClipInfoObserver @ 59 NONAME - _ZN12CAudClipInfo5NewLCEP5RFileR20MAudClipInfoObserver @ 60 NONAME - _ZN8CAudSong8AddClipLEP5RFile25TTimeIntervalMicroSecondsiS2_S2_ @ 61 NONAME - _ZNK12CAudClipInfo10FileHandleEv @ 62 NONAME - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/group/AedEngine.mmp --- a/videoeditorengine/audioeditorengine/group/AedEngine.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include - - -TARGET aedengine.dll -TARGETTYPE dll -UID 0x1000008d 0x10204BF2 - -VENDORID VID_DEFAULT -CAPABILITY CAP_GENERAL_DLL - -NOEXPORTLIBRARY - -SOURCEPATH ../src - -SOURCE AudPanic.cpp -SOURCE AudClip.cpp -SOURCE AudClipInfo.cpp -SOURCE AudSong.cpp -SOURCE AudProcessor.cpp -SOURCE ProcClipInfoAO.cpp -SOURCE ProcProcessAO.cpp -SOURCE ProcVisualizationAO.cpp -SOURCE ProcVisProcessor.cpp -SOURCE ProcInFileHandler.cpp -SOURCE ProcEncoder.cpp -SOURCE ProcDecoder.cpp -SOURCE ProcTimeEstimateAO.cpp -SOURCE RateConverter.cpp -SOURCE AudProcessorImpl.cpp -SOURCE ProcTools.cpp - -// AMR -SOURCE ProcFrameHandler.cpp -SOURCE ../codecs/AMR/src/ProcAMRFrameHandler.cpp -SOURCE ../codecs/AMR/src/ProcAMRInFileHandler.cpp - -// AAC -SOURCE ../codecs/AAC/src/ProcAACFrameHandler.cpp -SOURCE ../codecs/AAC/src/ProcADTSInFileHandler.cpp - -// MP4 -SOURCE ../codecs/MP4/src/ProcMP4InFileHandler.cpp -SOURCE ../codecs/MP4/src/mp4aud.cpp - -// MP3 -SOURCE ../codecs/mp3/src/ProcMP3InFileHandler.cpp -SOURCE ../codecs/mp3/src/ProcMP3FrameHandler.cpp - -// AMR-WB -SOURCE ../codecs/AWB/src/ProcAWBInFileHandler.cpp -SOURCE ../codecs/AWB/src/ProcAWBFrameHandler.cpp - -// WAV -SOURCE ../codecs/WAV/src/ProcWAVInFileHandler.cpp -SOURCE ../codecs/WAV/src/ProcWAVFrameHandler.cpp - -SOURCE ../util/src/Logfile.cpp - -SOURCE ../resampler/src/resampler_rate_conversion_input_driven_int16.cpp -SOURCE ../resampler/src/resampler_rate_conversion_output_driven_int16.cpp -SOURCE ../resampler/src/resampler_sinc_conv_44_to_48_int16.cpp -SOURCE ../resampler/src/resampler_sinc_conv_44_to_48_tables_economy.cpp -SOURCE ../resampler/src/resampler_sinc_conv_44_to_48_tables_premium.cpp -SOURCE ../resampler/src/resampler_sinc_conv_44_to_48_tables_standard.cpp -SOURCE ../resampler/src/resampler_sinc_conv_one_to_three_int16.cpp -SOURCE ../resampler/src/resampler_sinc_conv_one_to_three_tables_standard.cpp -SOURCE ../resampler/src/resampler_sinc_conv_one_to_two_int16.cpp -SOURCE ../resampler/src/resampler_sinc_conv_one_to_two_tables_standard.cpp -SOURCE ../resampler/src/resampler_sinc_conv_two_to_three_int16.cpp -SOURCE ../resampler/src/resampler_sinc_conv_two_to_three_tables_standard.cpp -SOURCE ../resampler/src/resampler_sinc_conv_three_to_one_int16.cpp -SOURCE ../resampler/src/resampler_sinc_conv_three_to_one_tables_standard.cpp -SOURCE ../resampler/src/resampler_sinc_conv_two_to_one_int16.cpp -SOURCE ../resampler/src/resampler_sinc_conv_two_to_one_tables_standard.cpp - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/libc -SYSTEMINCLUDE /epoc32/include/mmf/server -SYSTEMINCLUDE /epoc32/include/mmf/common - -USERINCLUDE ../inc -USERINCLUDE ../util/inc -USERINCLUDE ../resampler/inc - -USERINCLUDE ../codecs/AAC/inc -USERINCLUDE ../codecs/AMR/inc -USERINCLUDE ../codecs/AWB/inc -USERINCLUDE ../codecs/mp3/inc -USERINCLUDE ../codecs/MP4/inc -USERINCLUDE ../codecs/WAV/inc - -USERINCLUDE ../../mp3aacManipLib/inc -USERINCLUDE ../../mp3aacManipLib/AACGain/inc -USERINCLUDE ../../mp3aacManipLib/MP3Gain/inc - -LIBRARY euser.lib efsrv.lib charconv.lib hal.lib -LIBRARY estlib.lib -LIBRARY 3GPMP4Lib.lib - -LIBRARY aedmp3aaclib.lib -LIBRARY mmfserverbaseclasses.lib // Audioconverter: MMFCodec -LIBRARY ecom.lib // Audioconverter: REComSession - -// End of File - - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/group/AedEngineLib.mmp --- a/videoeditorengine/audioeditorengine/group/AedEngineLib.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include - - -TARGET aedengine.lib -TARGETTYPE IMPLIB -UID 0x1000008d 0x10204BF2 - -// End of File - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/group/bld.inf --- a/videoeditorengine/audioeditorengine/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES -AedEngine.mmp -AedEngineLib.mmp - -// End of File - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/AudClip.h --- a/videoeditorengine/audioeditorengine/inc/AudClip.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,387 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef __AUDCLIP_H__ -#define __AUDCLIP_H__ - - - -#include -#include - - -#include "AudCommon.h" -#include "AudObservers.h" - -/* -* Forward declarations. -*/ - -class CAudSong; -class CAudSongObserver; -class CAudClipInfo; -class MAudClipInfoObserver; - - -/* -* Constant definitions. -*/ - - -/** -* Individual audio clip stored as a single bitstream. -* -* @see CAudSong -*/ -class CAudClip : public CBase - { -public: - - /* Property methods. */ - - /** - * Returns an audio clip info object to get detailed information about - * the original audio clip. Note that the specified editing operations - * (for example, cutting or muting) do not - * affect the values returned by the info object. - * - * @return pointer to an audio clip info instance - */ - IMPORT_C CAudClipInfo* Info() const; - - /** - * Returns a boolean value that indicates whether this clip is normalized - * - * @return ETrue if normalized, EFalse otherwise - */ - IMPORT_C TBool Normalizing() const; - - /** - * Returns a dynamic level mark at the specified index - * If the index is illegal, the method panics with the code - * EIllegalDynamicLevelMarkIndex - * - * @return A dynamic level mark - */ - IMPORT_C TAudDynamicLevelMark DynamicLevelMark(TInt aIndex) const; - - /** - * Returns the number of dynamic level marks - * - * @return The number of dynamic level mark - */ - IMPORT_C TInt DynamicLevelMarkCount() const; - - /** - * Returns whether this clip is muted or not - * - * @return muting - */ - IMPORT_C TBool Muting() const; - - /** - * Sets the start time of this audio clip in clip timebase. - * Panics with EAudioClipIllegalStartTime if - * cut in time is illegal (negative). - * - * @param aCutInTime cut in time in microseconds in clip timebase - */ - IMPORT_C void SetStartTime(TTimeIntervalMicroSeconds aStartTime); - - /** - * Returns the start time of this audio clip in song timebase. - * - * @return start time in microseconds in song timebase - */ - IMPORT_C TTimeIntervalMicroSeconds StartTime() const; - - /** - * Returns the start time of this audio clip in song timebase. - * - * @return start time in milliseconds in song timebase - */ - TInt32 StartTimeMilliSeconds() const; - - - /** - * Returns the end time of this audio clip in song timebase. - * - * @return end time in microseconds in song timebase - */ - IMPORT_C TTimeIntervalMicroSeconds EndTime() const; - - /** - * Returns the duration of this audio clip with the specified - * editing operations applied (for example, cutting) - * - * @return duration in microseconds - */ - IMPORT_C TTimeIntervalMicroSeconds EditedDuration() const; - - /** - * Returns the priority of this audio clip - * - * @return priority - */ - IMPORT_C TInt Priority() const; - - /** - * Returns the index of this audio clip __on a track__ - * - * @return index - */ - IMPORT_C TInt IndexOnTrack() const; - - - /** - * Returns the track index of this audio clip in CAudSong - * - * @return track index - */ - IMPORT_C TInt TrackIndex() const; - - - - /* Song methods. */ - - /** - * Returns the song that this audio clip is part of. - * - * @return song - */ - IMPORT_C CAudSong* Song() const; - - /* Timing methods. */ - - /** - * Returns the cut in time of this audio clip in clip timebase. - * - * @return cut in time in microseconds in clip timebase - */ - IMPORT_C TTimeIntervalMicroSeconds CutInTime() const; - - /** - * Returns the cut in time of this audio clip in clip timebase. - * - * @return cut in time in milliseconds in clip timebase - */ - TInt32 CutInTimeMilliSeconds() const; - - /** - * Sets the cut in time of this audio clip in clip timebase. - * Panics with EAudioClipIllegalCutInTime if - * cut in time is illegal. - * - * @param aCutInTime cut in time in microseconds in clip timebase - */ - IMPORT_C void SetCutInTime(TTimeIntervalMicroSeconds aCutInTime); - - /** - * Returns the cut out time of this audio clip in clip timebase. - * - * @return cut out time in microseconds in clip timebase - */ - IMPORT_C TTimeIntervalMicroSeconds CutOutTime() const; - - /** - * Returns the cut out time of this audio clip in clip timebase. - * - * @return cut out time in milliseconds in clip timebase - */ - TInt32 CutOutTimeMilliSeconds() const; - - /** - * Sets the cut out time of this audio clip in clip timebase. - * Panics with EAudioClipIllegalCutOutTime if - * cut out time is illegal. - * - * @param aCutOutTime cut out time in microseconds in clip timebase - */ - IMPORT_C void SetCutOutTime(TTimeIntervalMicroSeconds aCutOutTime); - - /** - * Sets the priority of this audio clip - * - * @param aPriority priority, >= 0 - * - * @return ETrue if aPriority >= 0 - * EFalse if aPriority < 0, priority not set - * - */ - IMPORT_C TBool SetPriority(TInt aPriority); - - - /* Processing methods */ - - /** - * Inserts a dynamic level mark to a clip. - * If time of the given mark is illegal - * EIllegalDynamicLevelMark-panic is raised - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aMark mark to be added in clip time domain - * @return index of the mark inserted - */ - IMPORT_C TInt InsertDynamicLevelMarkL(const TAudDynamicLevelMark& aMark); - - /** - * Removes a dynamic level mark in a clip. - * Panics with code EAudioClipIllegalIndex - * if the clip index is invalid. - * - * @param aIndex index of the removed mark in this clip - * @return ETrue if mark was removed, EFalse otherwise - */ - IMPORT_C TBool RemoveDynamicLevelMark(TInt aIndex); - - /** - * Sets whether this clip is muted or not. - * - * @param aMuting ETrue to mute the audio clip; - * EFalse not to mute the audio clip - */ - IMPORT_C void SetMuting(TBool aMuted); - - /** - * Sets whether this clip is normalized - * - * @param aNormalizing ETrue if normalized - * EFalse otherwise - */ - IMPORT_C void SetNormalizing(TBool aNormalizing); - - IMPORT_C void Reset(TBool aNotify); - - /** - * Sets common volume gain for the clip. It is used to store - * the gain; the actual processing will be based on dynamic level - * marks which are set based on the gain value just before processing. - * Since global gain setting may affect the dynamic level mark, - * we need different variable to store the clip-specific gain also after the processing. - * I.e. dynamic level marks do not have effect to this value. - * - * @param aVolumeGain - */ - IMPORT_C void SetVolumeGain(TInt aVolumeGain); - - /** - * Gets common volume gain for the clip. - * Since global gain setting may affect the dynamic level mark, - * we need different variable to store the clip-specific gain also after the processing. - * - * @param aVolumeGain - */ - IMPORT_C TInt GetVolumeGain(); - - /** - * - * Compare is used by RPointerArray::Sort() - * - */ - static TInt Compare(const CAudClip &c1, const CAudClip &c2); - - -protected: - - -private: - - - - /* Constructors. */ - - static CAudClip* NewL(CAudSong* aSong, const TDesC& aFileName, - TTimeIntervalMicroSeconds aStartTime, - MAudClipInfoObserver& aObserver, TInt aTrackIndex); - - static CAudClip* NewL(CAudSong* aSong, RFile* aFileHandle, - TTimeIntervalMicroSeconds aStartTime, - MAudClipInfoObserver& aObserver, TInt aTrackIndex); - - CAudClip(CAudSong* aSong); - - void ConstructL(const TDesC& aFileName, - TTimeIntervalMicroSeconds aStartTime, - MAudClipInfoObserver& aObserver, TInt aTrackIndex); - - void ConstructL(RFile* aFileHandle, - TTimeIntervalMicroSeconds aStartTime, - MAudClipInfoObserver& aObserver, TInt aTrackIndex); - - /* Destructor. */ - - /** - * Destroys the object and releases all resources. - */ - virtual ~CAudClip(); - -private: - // Member variables - - // Song class this clip is part of. - CAudSong* iSong; - // File of the audio clip. - RFile iFile; - - - // Info class of this audio clip. - CAudClipInfo* iInfo; - - // Cut in time of this audio clip. - TTimeIntervalMicroSeconds iCutInTime; - // Cut out time of this audio clip. - TTimeIntervalMicroSeconds iCutOutTime; - // Start time of this audio clip. - TTimeIntervalMicroSeconds iStartTime; - - // Muting of this audio clip. - // If ETrue, the clip is to be muted - TBool iMute; - - // Normalizing of this audio clip. - // If ETrue, the clip is to be normalized - TBool iNormalize; - - // Priority of this audio clip. - TInt iPriority; - - // index of this clip in CAudSong - TInt iIndex; - - // track index of this clip - TInt iTrackIndex; - - TInt iVolumeGain; - - // Marks used for manual level controlling - RPointerArray iDynamicLevelMarkArray; - - friend class CAudSong; - friend class CAudSongAddClipOperation; - friend class RPointerArray; - - }; - - -#endif // __AUDCLIP_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/AudClipInfo.h --- a/videoeditorengine/audioeditorengine/inc/AudClipInfo.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,369 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __AUDCLIPINFO_H__ -#define __AUDCLIPINFO_H__ - - -#include -#include - -#include "AudCommon.h" -#include "AudObservers.h" - - - -/* -* Forward declarations. -*/ -class CAudClipInfoOperation; -class CAudProcessor; - -/** -* Utility class for getting information about audio clip files. -*/ -class CAudClipInfo : public CBase - - { - -public: - - /* Constructors & destructor. */ - - /** - * Constructs a new CAudClipInfo object to get information - * about the specified audio clip file. The specified observer - * is notified when info is ready for reading. This method - * may leave if no resources are available to construct - * a new object. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotSupported if the given file format is not supported - * or is invalid - * - * @param aFileName name of audio clip file - * @param aObserver observer to notify when info is ready for reading - * - * @return pointer to a new CAudClipInfo instance - */ - IMPORT_C static CAudClipInfo* NewL(const TDesC& aFileName, MAudClipInfoObserver& aObserver); - - /** - * Constructs a new CAudClipInfo object to get information - * about the specified audio clip file. The constructed object - * is left in the cleanup stack. The specified observer - * is notified when info is ready for reading. This method - * may leave if no resources are available to construct a new - * object. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotSupported if the given file format is not supported - * or is invalid - * - * @param aFileName name of video clip file - * @param aObserver observer to notify when info is ready for reading - * - * @return pointer to a new CAudClipInfo instance - */ - IMPORT_C static CAudClipInfo* NewLC(const TDesC& aFileName, MAudClipInfoObserver& aObserver); - - - /** - * Returns the properties of this audio file - * - * @return properties - */ - IMPORT_C TAudFileProperties Properties() const; - - /** - * Generates a visualization of the current clip. - * - * Asynchronous operation; MAudVisualizationObserver::NotifyClipVisualizationCompleted - * is called as soon as the visualization process has completed. This method leads to - * memory reservation, so once NotifyClipVisualizationCompleted has occurred, - * the caller is responsible for memory releasing. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aObserver observer to be notified when visualization is completed - * @param aSize the size of aVisualization array (time resolution). - * @param aPriority priority - * - */ - IMPORT_C void GetVisualizationL(MAudVisualizationObserver& aObserver, - TInt aSize, TInt aPriority) const; - - /** - * Cancels visualization generation. If no visualization is currently being - * generated, the function does nothing. - */ - IMPORT_C void CancelVisualization(); - - /** - * Returns the file name of the clip. Panics if info - * is not yet ready for reading. - * - * @return file name - */ - IMPORT_C TPtrC FileName() const; - - /** - * Destroys the object and releases all resources. - */ - IMPORT_C ~CAudClipInfo(); - - /** - * Constructs a new CAudClipInfo object to get information - * about the specified audio clip file. The specified observer - * is notified when info is ready for reading. This method - * may leave if no resources are available to construct - * a new object. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotSupported if the given file format is not supported - * or is invalid - * - * @param aFileHandle file handle of audio clip file - * @param aObserver observer to notify when info is ready for reading - * - * @return pointer to a new CAudClipInfo instance - */ - IMPORT_C static CAudClipInfo* NewL(RFile* aFileHandle, MAudClipInfoObserver& aObserver); - - /** - * Constructs a new CAudClipInfo object to get information - * about the specified audio clip file. The constructed object - * is left in the cleanup stack. The specified observer - * is notified when info is ready for reading. This method - * may leave if no resources are available to construct a new - * object. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotSupported if the given file format is not supported - * or is invalid - * - * @param aFileHandle file handle of audio clip file - * @param aObserver observer to notify when info is ready for reading - * - * @return pointer to a new CAudClipInfo instance - */ - IMPORT_C static CAudClipInfo* NewLC(RFile* aFileHandle, MAudClipInfoObserver& aObserver); - - /** - * Returns the file handle of the clip. Panics if info - * is not yet ready for reading. - * - * @return file name - */ - IMPORT_C RFile* FileHandle() const; - - -private: - - // C++ constructor - CAudClipInfo(); - - // ConstructL - // parameters: see NewL() - void ConstructL(const TDesC& aFileName, MAudClipInfoObserver& aObserver); - - void ConstructL(RFile* aFileHandle, MAudClipInfoObserver& aObserver); - -private: - - // properties of this clip - TAudFileProperties* iProperties; - - // file name of this clip - HBufC* iFileName; - - // file handle of this clip - RFile* iFileHandle; - - // flag to indicate whether info class is ready - TBool iInfoReady; - - // operation class - CAudClipInfoOperation* iOperation; - - // friends - friend class CAudClipInfoOperation; - friend class CAudClip; - - - }; - - - -/** - * Observer for notifying that audio clip info - * is ready for reading. - * - */ -class MProcClipInfoObserver - { -public: - /** - * Called to notify that audio clip info is ready - * for reading. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown type - * - * @param aError KErrNone if info is ready - * for reading; one of the system wide - * error codes if reading file failed - */ - virtual void NotifyClipInfoReady(TInt aError) = 0; - }; - - - -/** - * Internal class for reading information from the audio clip file. - * Implements a simple object - * to report to the audio clip info observer certain common error conditions - * that would otherwise leave. - */ -class CAudClipInfoOperation : public CBase, - public MProcClipInfoObserver, - public MAudVisualizationObserver - { - -public: - - - /* - * Constructor - * - * - * @param aInfo CAudClipInfo class that owns this object - * @param aObserver observer for callbacks - */ - - static CAudClipInfoOperation* NewL(CAudClipInfo* aInfo, - MAudClipInfoObserver& aObserver); - - /* - * Destructor - */ - ~CAudClipInfoOperation(); - - - // from base class MProcClipInfoObserver - void NotifyClipInfoReady(TInt aError); - - // from base class MAudVisualizationObserver - - void NotifySongVisualizationCompleted(const CAudSong& aSong, - TInt aError, - TInt8* aVisualization, - TInt aSize); - - void NotifyClipInfoVisualizationCompleted(const CAudClipInfo& aClipInfo, - TInt aError, - TInt8* aVisualization, - TInt aSize); - - void NotifySongVisualizationStarted(const CAudSong& aSong, - TInt aError); - - void NotifyClipInfoVisualizationStarted(const CAudClipInfo& aClipInfo, - TInt aError); - - void NotifySongVisualizationProgressed(const CAudSong& aSong, - TInt aPercentage); - - void NotifyClipInfoVisualizationProgressed(const CAudClipInfo& aClipInfo, - TInt aPercentage); - - /** - * Generates a visualization of the current clip. - * - * Asynchronous operation; MAudVisualizationObserver::NotifyClipVisualizationCompleted - * is called as soon as the visualization process has completed. This method leads to - * memory reservation, so once NotifyClipVisualizationCompleted has occurred, - * the caller is responsible for memory releasing. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aObserver observer to be notified when visualization is completed - * @param aSize the size of aVisualization array (time resolution). - * @param aPriority priority - * - */ - - void StartVisualizationL(MAudVisualizationObserver& aObserver, TInt aSize, TInt aPriority); - - /** - * Cancels visualization generation. If no visualization is currently being - * generated, the function does nothing. - */ - - void CancelVisualization(); - - /** - * Called to start getting file properties - * - * NotifyClipInfoReady is called as soon as the operation completes - */ - void StartGetPropertiesL(); - - -private: - - CAudClipInfoOperation(CAudClipInfo* aInfo, - MAudClipInfoObserver& aObserver); - void ConstructL(); - - -private: - - // info class that owns this object - CAudClipInfo* iInfo; - - // observer for clip info callbacks - MAudClipInfoObserver* iObserver; - - // observer for visualization callbacks - MAudVisualizationObserver* iVisualizationObserver; - - // processor class owned by this object - CAudProcessor* iProcessor; - - friend class CAudClipInfo; - friend class CAudClip; - - }; - - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/AudCommon.h --- a/videoeditorengine/audioeditorengine/inc/AudCommon.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,223 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Common definitions for audio. -* -*/ - - - -#ifndef __AUDCOMMON_H__ -#define __AUDCOMMON_H__ - -#include - - -const TInt KErrNoAudio = -400; -/** - * Enumeration for audio file formats. - */ -enum TAudFormat - { - EAudFormatUnrecognized = 100001, // should always be the first one - EAudFormat3GPP, - EAudFormatMP4, - EAudFormatAMR, - EAudFormatAMRWB, - EAudFormatMP3, - EAudFormatAAC_ADIF, - EAudFormatAAC_ADTS, - EAudFormatWAV, - EAudFormatLast // should always be the last one - }; - - -/** - * Enumeration for audio types (that is, codecs). - */ -enum TAudType - { - EAudTypeUnrecognized = 101001, // should always be the first one - EAudNoAudio, - EAudAMR, - EAudAMRWB, - EAudMP3, - EAudAAC_MPEG2, // EAudAAC_MPEG2 not used, all EAudAAC_MPEG is now 4 - EAudAAC_MPEG4, - EAudWAV, - EAudTypeLast // should always be the last one - }; - -/* - Purpose: MPEG-4 Audio object types. - Explanation: - */ -enum TAudAACObjectType -{ - EAudAACObjectTypeNone = -1, - EAudAACObjectTypeMain, - EAudAACObjectTypeLC, - EAudAACObjectTypeSSR, - EAudAACObjectTypeLTP, - EAudAACObjectTypeLast -}; - -/** - * Enumeration for audio extension types (AAC+) - */ -enum TAudExtensionType - { - EAudExtensionTypeNoExtension = 20000, - EAudExtensionTypeEnhancedAACPlus, - EAudExtensionTypeEnhancedAACPlusParametricStereo - - }; - -/** - * Constants for audio clip priorities. - */ -const TInt KAudClipPriorityHighest = 400; -const TInt KAudClipPriorityHigh = 300; -const TInt KAudClipPriorityNormal = 200; -const TInt KAudClipPriorityLow = 100; -const TInt KAudClipPriorityLowest = 0; - - - - - -/** - * Enumeration for channel modes - */ -enum TChannelMode - { - EAudChannelModeNotRecognized = 103001, - EAudStereo, - EAudDualChannel, - EAudSingleChannel, - EAudParametricStereoChannel - }; - -/** - * Enumeration for bitrate modes - */ -enum TBitrateMode - { - EAudBitrateModeNotRecognized = 103001, - EAudConstant, - EAudVariable - }; - -/** - * Class for storing dynamic level marks. - */ -class TAudDynamicLevelMark - { - -public: - - /** Mark time. */ - TTimeIntervalMicroSeconds iTime; - - /** Dynamic level (-63.5 ... +63.5) in dB:s - * one step represents 0.5 dB, hence values can be -127 ... +127 - */ - TInt8 iLevel; - - TAudDynamicLevelMark(TTimeIntervalMicroSeconds aTime, TInt aLevel) - { - iTime = aTime; - if ( aLevel < -127 ) - { - iLevel = -127; - } - else if (aLevel > 127 ) - { - iLevel = 127; - } - else - { - iLevel = TInt8(aLevel); - } - } - - TAudDynamicLevelMark(const TAudDynamicLevelMark& aMark) - { - iTime = aMark.iTime; - iLevel = aMark.iLevel; - } - }; - -/** - * Class for storing general properties about an audio file. - */ -class TAudFileProperties - { - -public: - - // File format - TAudFormat iFileFormat; - // Codec - TAudType iAudioType; - // Extension type - TAudExtensionType iAudioTypeExtension; - // Duration of the clip in microseconds - TTimeIntervalMicroSeconds iDuration; - // Sampling rate in Hertzes - TInt iSamplingRate; - // Bitrate in bits/s - TInt iBitrate; - // Channel mode - TChannelMode iChannelMode; - // Channel mode for extension - TChannelMode iChannelModeExtension; - // Bitrate mode (constant or variable) - TBitrateMode iBitrateMode; - // Number of bytes in a compressed frame - TInt32 iFrameLen; - // Is iFrameLen constant? - TBool iConstantFrameLength; - // Duration of decoded frame in microseconds - TTimeIntervalMicroSeconds iFrameDuration; - // Number of frames in the clip - TInt32 iFrameCount; -// TCodecMode iCodecMode; - // Number of frames in a sample (e.g. amr in mp4 has several) - TInt iNumFramesPerSample; - // Bitdepth in PCM data (usually 8, 16 or 24, only for PCM-data) - TInt iNumberOfBitsPerSample; - // Original field in MP3 fixed header - TBool iOriginal; - - // AAC object type - TAudAACObjectType iAACObjectType; - - TBool isCompatible(const TAudFileProperties /*&c2*/) const - { - - // Now that the clips can be decoded and encoded - // all the clips are "compatible" with each other - - return ETrue; - - - } - - }; - - - -#endif // __AUDCOMMON_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/AudObservers.h --- a/videoeditorengine/audioeditorengine/inc/AudObservers.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,294 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef __AUDOBSERVERS_H__ -#define __AUDOBSERVERS_H__ - - -#include -//#include "AudSong.h" -//#include "AudClip.h" -//#include "AudClipInfo.h" -#include "AudCommon.h" - -class CAudSong; -class CAudClip; -class CAudClipInfo; - -/** - * Observer for movie processing operations. - */ -class MAudSongProcessingObserver - { -public: - /** - * Called to notify that a new audio processing operation has been started. - * - * @param aSong song - */ - virtual void NotifyAudioProcessingStartedL(CAudSong& aSong) = 0; - - /** - * Called to inform about the current progress of the audio processing operation. - * - * @param aSong song - * @param aPercentage percentage of the operation completed, must be - * in range 0..100 - */ - virtual void NotifyAudioProcessingProgressed(CAudSong& aSong, TInt aPercentage) = 0; - - /** - * Called to notify that the song processing operation has been completed. - * - * @param aSong song - * @param aError error code why the operation was completed. - * KErrNone if the operation was completed - * successfully. - */ - virtual void NotifyAudioProcessingCompleted(CAudSong& aSong, TInt aError) = 0; - - }; - -/** -* Observer for audio visualization processes. -*/ -class MAudVisualizationObserver - { -public: - - /** - * Called to notify that audio _clip_ visualization process has been completed. - * The receiver is responsible for releasing the memory in - * aVisualization if aError = KErrNone - * Note: if aError != KErrNone, aVisualization = NULL and aSize = 0; - * - * @param aClipInfo audio clip info - * @param aError KErrNone if visualization was - * completed successfully; one of the system wide - * error codes if generating visualization failed - * @param aVisualization pointer to TInt8 visualization array - * @param aSize size of the visualization array - */ - virtual void NotifyClipInfoVisualizationCompleted(const CAudClipInfo& aClipInfo, - TInt aError, - TInt8* aVisualization, - TInt aSize) = 0; - - - /** - * Called to notify that audio _clip_ visualization process has been started. - * - * @param aClipInfo clip info - * @param aError KErrNone if visualization was - * started successfully; one of the system wide - * error codes if generating visualization failed - */ - virtual void NotifyClipInfoVisualizationStarted(const CAudClipInfo& aClipInfo, - TInt aError) = 0; - - - /** - * Called to inform about the current progress of the audio clip visualization. - * - * @param aClipInfo clip info - * @param aPercentage percentage of the operation completed, must be - * in range 0..100 - */ - virtual void NotifyClipInfoVisualizationProgressed(const CAudClipInfo& aClipInfo, - TInt aPercentage) = 0; - - - }; - - -/** - * Observer for song events. - *

- * Note that every change operation that is made to a song or the clips it consists of - * results in a maximum of one notification method called (that is, more than one - * notification method is never called as a result of a single change). For example, - * changing the index of a clip results in the NotifyClipIndicesChanged() - * method being called once. The NotifyClipTimingsChanged() method is not - * called even if the timings of several clips may have changed as a result. See the - * descriptions of the notification methods for more detailed information. - * - * @see CAudSong - */ -class MAudSongObserver - { -public: - - /** - * Called to notify that a new audio clip has been successfully - * added to the song. Note that the indices and the start and end times - * of the audio clips after the new clip have also changed as a result. - * Note that the transitions may also have changed. - * - * @param aSong song - * @param aClip new audio clip - * @param aIndex index of the new audio clip on a track - * @param aTrackIndex track index of the new clip - * - */ - virtual void NotifyClipAdded(CAudSong& aSong, CAudClip& aClip, TInt aIndex, TInt aTrackIndex) = 0; - - /** - * Called to notify that adding a new audio clip to the song has failed. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - KErrNotSupported if the format of the file is recognized but - * adding it to the song is not supported (e.g., it is of different codec - * or format than the other clips) - * - * @param aSong song - * @param aError one of the system wide error codes - */ - virtual void NotifyClipAddingFailed(CAudSong& aSong, TInt aError, TInt aTrackIndex) = 0; - - /** - * Called to notify that an audio clip has been removed from the song. - * Note that the indices and the start and end times of the audio clips after - * the removed clip have also changed as a result. Note that the - * transitions may also have changed. - * - * @param aSong song - * @param aIndex index of the removed clip (on a track) - * @param aTrackIndex track index - */ - virtual void NotifyClipRemoved(CAudSong& aSong, TInt aIndex, TInt aTrackIndex) = 0; - - /** - * Called to notify that the timings of the clip has changed. - * Note that the start and end times of the audio clips - * after the changed clip have also changed. - * - * @param aSong song - * @param aClip changed clip - */ - virtual void NotifyClipTimingsChanged(CAudSong& aSong, - CAudClip& aClip) = 0; - - - /** - * Called to notify that the index of the clip has changed. - * - * @param aSong song - * @param aOldIndex old index on a track - * @param aNewIndex new index on a track - * @param aTrackIndex track index - */ - virtual void NotifyClipIndicesChanged(CAudSong& aSong, TInt aOldIndex, - TInt aNewIndex, TInt aTrackIndex) = 0; - - /** - * Called to notify that the song has been reseted. - * - * @param aSong song - */ - virtual void NotifySongReseted(CAudSong& aSong) = 0; - - - /** - * Called to notify that a clip has been reseted. - * - * @param aClip clip - */ - virtual void NotifyClipReseted(CAudClip& aClip) = 0; - - - /** - * Called to notify that a new dynamic level mark has been successfully - * added to a _clip_. - * - * @param aClip clip - * @param aMark new level mark - * @param aIndex index of the new level mark - */ - virtual void NotifyDynamicLevelMarkInserted(CAudClip& aClip, - TAudDynamicLevelMark& aMark, - TInt aIndex) = 0; - - - /** - * Called to notify that a dynamic level mark has been removed from a _clip_. - * Note that indices of dynamic level marks has also changed as a result - * - * @param aClip clip - * @param aIndex index of the removed mark - */ - virtual void NotifyDynamicLevelMarkRemoved(CAudClip& aClip, TInt aIndex) = 0; - - - - }; - - - - -/** - * Observer for notifying that audio clip info - * is ready for reading. - * - * @see CAudClipInfo - */ -class MAudClipInfoObserver - { -public: - /** - * Called to notify that audio clip info is ready - * for reading. - * - * Possible error codes: - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown type - * - * @param aInfo audio clip info - * @param aError KErrNone if info is ready - * for reading; one of the system wide - * error codes if reading file failed - */ - virtual void NotifyClipInfoReady(CAudClipInfo& aInfo, - TInt aError) = 0; - }; - -class MAudTimeEstimateObserver - { -public: - /** - * Called to notify that time estimate is ready - * for reading. - * - * - * @param aTimeEstimate time estimate in microseconds - */ - - virtual void NotifyTimeEstimateReady(TInt64 aTimeEstimate) = 0; - - }; -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/AudPanic.h --- a/videoeditorengine/audioeditorengine/inc/AudPanic.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef __AUDPANIC_H__ -#define __AUDPANIC_H__ - -#include - - -class TAudPanic - { -public: - enum TCode - { - EInternal = 0, // Internal error (that is, a in the engine) - ESongEmpty, - ESongAddOperationAlreadyRunning, - ESongProcessingOperationAlreadyRunning, - ESongProcessingOperationNotRunning, - EVisualizationProcessAlreadyRunning, - EVisualizationProcessNotRunning, - EClipInfoProcessAlreadyRunning, - EAudioClipIllegalIndex, - EAudioClipIllegalCutInTime, - EAudioClipIllegalCutOutTime, - EIllegalDynamicLevelMark, - EIllegalDynamicLevelMarkIndex, - EAudioClipIllegalStartTime, - ESongObserverAlreadyRegistered, - ESongObserverNotRegistered - - - }; - -public: - static void Panic(TCode aCode); - }; - -#endif // __AUDPANIC_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/AudProcessor.h --- a/videoeditorengine/audioeditorengine/inc/AudProcessor.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef __AUDPROCESSOR_H__ -#define __AUDPROCESSOR_H__ - - -#include -#include - -#include "AudCommon.h" -#include "AudClipInfo.h" -#include "ProcClipInfoAO.h" -#include "ProcProcessAO.h" -#include "ProcVisualizationAO.h" -#include "ProcTimeEstimateAO.h" - -/* - * Forward declarations. - */ -class CAudSong; -class CAudClip; -class MProcProcessObserver; -class MProcClipInfoObserver; -class CProcClipInfoAO; -class CProcProcess; -class CProcVisualizationAO; -class CProcTimeEstimateAO; - -/** - * Audio processor. - */ -class CAudProcessor : public CBase - { -public: - - /** - * Constructors for instantiating new audio processors. - * Should reserve as little resources as possible at this point. - */ - static CAudProcessor* NewL(); - static CAudProcessor* NewLC(); - - - virtual ~CAudProcessor(); - - /** - * Starts a syncronous song processing - */ - TBool StartSyncProcessingL(const CAudSong* aSong); - - TBool ProcessSyncPieceL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration); - - /** - * Cancel song processing. - */ - void CancelProcessing(MProcProcessObserver& aObserver); - - - - /** - * Read the header from the specified audio clip file and return its properties. - * - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - * @param aFileName name of the file to read - * @param aFileHandle handle of the file to read - * @param aProperties Output parameter. Properties of the input file. - * Allocated and released by the caller - * @param aObserver Observer to be notified as soon as operation completes - */ - void GetAudFilePropertiesL(const TDesC& aFileName, RFile* aFileHandle, - TAudFileProperties* aProperties, - MProcClipInfoObserver& aObserver, TInt aPriority); - - /** - * Starts an asynchronous visualization operation for a clip. Progress - * indications are sent to an observer - * - * @param aClip Clip to be visualized - * @param aSize Lenght of the visualization array, must be positive - * @param aPriority Priority of the operation - */ - void StartGetClipVisualizationL(const CAudClipInfo* aClipInfo, TInt aSize, - MAudVisualizationObserver& aObserver, - TInt aPriority); - - /** - * Cancels a clip visualization operation. If an operation is not running - * a TAudPanic::EVisualizationProcessNotRunning is thrown - */ - void CancelClipVisualization(); - - TBool StartTimeEstimateL(const CAudSong* aSong, MAudTimeEstimateObserver& aTEObserver); - - void CancelTimeEstimate(); - - - -protected: - CAudProcessor(); - - void ConstructL(); - -private: - - // clip info active object owned by this - CProcClipInfoAO* iClipInfoAO; - - // processing object owned by this - CProcProcess* iProcessingObject; - - // visualization active object owned by this - CProcVisualizationAO* iVisualizationAO; - - // Time estimation active object owned by this - CProcTimeEstimateAO* iTimeEstimateAO; - - - - // a flag to indicate whether there is some ongoing processing - TBool iProcessing; - - friend class CProcProcess; - friend class CProcClipInfoAO; - - - }; - - -#endif // __AudProcessor_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/AudProcessorImpl.h --- a/videoeditorengine/audioeditorengine/inc/AudProcessorImpl.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,217 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CAUDPROCESSORIMPL_H__ -#define __CAUDPROCESSORIMPL_H__ - -#include -#include -#include "AudClipInfo.h" -#include "AudCommon.h" -#include "AudSong.h" -#include "ProcInFileHandler.h" - -#include "ProcFrameHandler.h" -#include "ProcWAVFrameHandler.h" - - - - -#include "ProcTools.h" - - -class MProcClipInfoObserver; - -class CAudProcessorImpl : public CBase - { - -public: - - /* - * - * Symbian constructors and a destructor - * - */ - - static CAudProcessorImpl* NewL(); - static CAudProcessorImpl* NewLC(); - - virtual ~CAudProcessorImpl(); - - - /** - * Performs all initializations needed for a song processing - * such as output file opening - * - * Can leave with one of the system wide error codes - * related to memory allocation and file opening - * - * Possible panic code - * ESongProcessingOperationAlreadyRunning - * - * - * - * @param aSong song to be processed - * @param aRawFrameSize length of raw audio frames - * @param aGetTimeEstimation ETrue if getting a time estimation - * - * @return - * - */ - void ProcessSongL(const CAudSong* aSong, TInt aRawFrameSize, - TBool aGetTimeEstimation = EFalse); - - /** - * Processes one audio frame and writes it to an output file - * - * Possible panic code - * ESongProcessingOperationNotRunning - * - * @param aProgress output parameter to indicate progress in percents - * - * - * @return ETrue if processing completed, EFalse otherwise - * - */ - TBool ProcessSyncPieceL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration, TBool& aRaw); - - - - /** - * Gets properties of an audio file - * - * Can leave with one of the error codes related to file opening - * - * @param aFileName name of the file - * @param aFileHandle file handle of the file to read - * @param aProperties pointer to audio file properties (needs to be - * allocated before calling this function) - * - */ - void GetAudFilePropertiesL(const TDesC& aFileName, RFile* aFileHandle, - TAudFileProperties* aProperties); - - /** - * - * Gets time estimate once the time estimate has been calculated - * - * If time estimation has not been processed, returns 0 - * - * @return processing time estimate in microseconds - */ - - TInt64 GetFinalTimeEstimate() const; - - -private: - - /* - * Symbian constructor - */ - void ConstructL(); - - /* - * Generates processing events for the output clip - */ - void GetProcessingEventsL(); - - /* - * Calculates a gain value on a given time - */ - TInt8 GetGainNow(const CAudClip* aClip, TInt32 aTimeMilliSeconds); - - /* - * Stops processing - */ - TBool StopProcessing(); - - /* - * Writes one frame of silence - */ - TBool WriteSilenceL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration, TBool& aRaw); - /* - * Returns the index of the clip with highest priority - */ - TBool HighestInFilePriority(TInt& aFirst, TInt& aSecond); - - /* - * Compares the two properties and returns true if decoding is required - */ - TBool IsDecodingRequired(const TAudFileProperties& prop1, const TAudFileProperties& prop2); - - /* - * C++ constructor - */ - CAudProcessorImpl(); - -private: - - // Array for all the input clips - RPointerArray iInFiles; - - // Song - const CAudSong* iSong; - - // frame handler for PCM operations such as mixing - CProcWAVFrameHandler* iWAVFrameHandler; - - // time left before the end of last clip - // (additional silence may be written after that) - TInt32 iTimeLeft; - - // index of the current processing event - TInt iCurEvent; - - // array for processing events - RPointerArray iProcessingEvents; - - // array for storing clip indexes that are currenty written - RArray iClipsWritten; - - - // song duration in milliseconds - TInt iSongDurationMilliSeconds; - - // how much has already been processed - TInt iSongProcessedMilliSeconds; - - // index of the clip that was previously processed - TInt iLastInClip1; - - // a flag to indicate if we are getting a processing time estimate - TBool iGetTimeEstimation; - - // timer for calculating time estimation - TTime iTimer; - - // a variable for time estimate - TInt64 iTimeEstimate; - - // a variable for time estimate calculation - TReal iTimeEstimateCoefficient; - - TBool iSilenceStarted; - - }; - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/AudSong.h --- a/videoeditorengine/audioeditorengine/inc/AudSong.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,692 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef __AUDSONG_H__ -#define __AUDSONG_H__ - - -#include -#include -#include - -#include "AudCommon.h" -#include "AudObservers.h" - - -// define _WRITE_OUTPUT_TO_FILE_ if you want audio engine to write its output to a file -//#define _WRITE_OUTPUT_TO_FILE_; - - -/* -* Forward declarations. -*/ - - -class MAudVisualizationObserver; -class MAudSongProcessingObserver; -class CAudSongProcessOperation; -class CAudSongVisualizationOperation; -class MAudSongObserver; -class CAudClipInfo; -class MAudClipInfoObserver; -class CAudSongAddClipOperation; -class CAudProcessor; - -// constants that represent special parameter values - -// clip end time (used when setting cutOut-times) -const TInt KClipEndTime = -1; - -// KAllTrackIndices represents all tracks in ClipCount()-function -const TInt KAllTrackIndices = -1; - -// Let audio engine to decide the bitrate -const TInt KAudBitRateDefault = -1; - - -/** -* Audio song, which consists of zero or more audio clips -* -* @see CAudClip -*/ -class CAudSong : public CBase - { -public: - /* Constructors. */ - - /** - * Constructs a new empty CAudSong object. May leave if no resources are available. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFs file server session to use to lock the audio - * clip files of the new song; or NULL to not to lock the files - * @return pointer to a new CAudSong instance - */ - IMPORT_C static CAudSong* NewL(RFs *aFs); - - /** - * Constructs a new empty CAudSong object and leaves the object in the cleanup stack. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFs file server session to use to lock the audio - * clip files of the new song; or NULL to not to lock the files - * @return pointer to a new CAudSong instance - */ - IMPORT_C static CAudSong* NewLC(RFs *aFs); - - /** - * Destroys the object and releases all resources. - */ - IMPORT_C virtual ~CAudSong(); - - - /* Property methods. */ - - /** - * Returns an estimate of the total size of this song. - * - * @return size estimate in bytes - */ - IMPORT_C TInt GetSizeEstimateL() const; - - /** - * Returns an estimate of the size of this song between the given time interval. - * - * @param aStartTime Beginning of the time interval - * @param aEndTime End of the time interval - * @return size estimate in bytes - */ - IMPORT_C TInt GetFrameSizeEstimateL(TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds aEndTime) const; - - /** - * Returns the properties of this song. - * - * @return output file properties - */ - IMPORT_C TAudFileProperties OutputFileProperties() const; - - /** - * - * Generates decoder specific info needed for MP4 - * Caller is responsible for releasing aDecSpecInfo in the case ETrue is returned - * - * @param aMaxSize maximum aDecSpecInfo size allowed - * - */ - IMPORT_C TBool GetMP4DecoderSpecificInfoLC(HBufC8*& aDecSpecInfo, TInt aMaxSize) const; - - /** - * Get processing time estimate based on trial. Asynchronous version, requires observer. - * - */ - IMPORT_C TBool GetTimeEstimateL(MAudTimeEstimateObserver& aObserver, - TAudType aAudType, - TInt aSamplingRate, - TChannelMode aChannelMode, - TInt aBitRate = -1); - - /** - * Get processing time estimate based on hardcoded constants. Synchronous version. - * - * @return estimated processing time for the song - */ - IMPORT_C TTimeIntervalMicroSeconds GetTimeEstimateL(); - - /** - * Get the frame duration in microseconds. - * - * @return frame duration in microseconds - */ - IMPORT_C TInt GetFrameDurationMicro(); - - - /* Audio clip management methods. */ - - /** - * Returns the number of audio clips in this song on a certain track. - * - * @param aTrackIndex track index - * - * @return number of audio clips on a defined track - */ - IMPORT_C TInt ClipCount(TInt aTrackIndex = 0) const; - - /** - * Returns the audio clip at the specified index. - * Panics with code EAudioClipIllegalIndex if the clip index is invalid. - * - * @param aIndex index of the clip on the certain track - * @param aTrackIndex index of the track - * - * @return clip at the specified index. - */ - IMPORT_C CAudClip* Clip(TInt aIndex, TInt aTrackIndex = 0) const; - - /** - * Adds the specified audio clip to this song. Asynchronous operation - * CAudSongObserver::NotifyClipAdded or CAudSongObserver::NotifyClipAddingFailed - * is called once the operation has completed. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotSupported if audio format is not supported - * - * @param aFileName file name of the clip to add - * @param aStartTime start time of the clip in song timebase - * @param aTrackIndex track index. Used to categorize clips. - */ - IMPORT_C void AddClipL(const TDesC& aFileName, - TTimeIntervalMicroSeconds aStartTime, TInt aTrackIndex = 0, - TTimeIntervalMicroSeconds aCutInTime = TTimeIntervalMicroSeconds(0), - TTimeIntervalMicroSeconds aCutOutTime = TTimeIntervalMicroSeconds(KClipEndTime)); - - - /** - * Removes the audio clip at the specified index from this song. - * Panics with code USER-130 if the clip index is invalid. - * - * @param aIndex index of the clip to be removed - * @param aTrackIndex track index - */ - IMPORT_C void RemoveClip(TInt aIndex, TInt aTrackIndex = 0); - - /** - * Removes all audio clips and clears all effects - * - * @param aNotify ETrue if observer should be notified - */ - IMPORT_C void Reset(TBool aNotify); - - /** - * - * Sets the duration of the output clip - * If necessary, silence is generated in the end - * - * @param aDuration output clip length in microseconds - * - * @return ETrue if a new duration was set, EFalse otherwise - * - */ - IMPORT_C TBool SetDuration(TTimeIntervalMicroSeconds aDuration); - - - /* Processing methods. */ - - - /** - * Removes a dynamic level mark in a song. - * Panics with code EAudioClipIllegalIndex - * if the clip index is invalid. - * - * @param aIndex index of the removed mark in this song - * @return ETrue if mark was removed, EFalse otherwise - */ - IMPORT_C TBool RemoveDynamicLevelMark(TInt aIndex); - - - /** - * Sets an output file format - * - * NOTE: only the following combinations are allowed: - * AMR: single channel, 8000 Hz, 12000 kbps - * - * AAC/16kHz mono/stereo - * AAC/48kHz mono/stereo - * - * @return ETrue if format was successfully changed, - * EFalse if format cannot be set - */ - IMPORT_C TBool SetOutputFileFormat(TAudType aAudType, - TInt aSamplingRate, - TChannelMode aChannelMode, - TInt aBitRate = KAudBitRateDefault); - - /** - * Checks if given properties are supported - * - * - * @param aProperties audio properties - * @return ETrue if properties are supported - * EFalse if not - */ - IMPORT_C TBool AreOutputPropertiesSupported(const TAudFileProperties& aProperties ); - - - /* - * Processing methods - */ - - /** - * Starts a synchronous audio processing operation. After calling this function - * the current song can be processed frame by frame by calling ProcessPieceL-function - * Panics with - * TAudPanic::ESongEmpty if there are no clips - * in the song. - * - */ - IMPORT_C TBool SyncStartProcessingL(); - - /** - * Processes synchronously next audio frame and passes it to the caller. - * If a processing operation has not been started, panic - * TAudPanic::ESongProcessingNotRunning is raised. - * - * Possibly leave codes: - * - KErrNoMemory if memory allocation fails - * - * NOTE: This function allocates memory and the caller is responsible for - * releasing it. - * - * @param aFrame pointer to a processed audio frame. Has to be deleted - * when not needed anymore. - * @param aDuration Duration of processed audio frame in microseconds - * after decoding - * - * @return ETrue Processing operation completed, no more frames to be processed. - * No memory allocated. - * EFalse Processing operation not completed. Last processed frame stored - * in aFrame. Memory allocated for the processed frame - * - */ - IMPORT_C TBool SyncProcessFrameL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration); - - - /** - * Cancels the processing operation. Used for only synchronous processing - * operations. If an operation is not running, - * panic TAudPanic::ESongProcessingNotRunning is raised - */ - IMPORT_C void SyncCancelProcess(); - - - /* Observer methods. */ - - /** - * Registers a song observer. Panics with panic code - * ESongObserverAlreadyRegistered if the song observer is - * already registered. - * - * @param aObserver observer that will receive the events - */ - IMPORT_C void RegisterSongObserverL(MAudSongObserver* aObserver); - - /** - * Unregisters a song observer. Panics with panic code - * ESongObserverNotRegistered if the song observer is not registered. - * - * @param aObserver observer to be unregistered - */ - IMPORT_C void UnregisterSongObserver(MAudSongObserver* aObserver); - - - /** - * Adds the specified audio clip to this song. Asynchronous operation - * CAudSongObserver::NotifyClipAdded or CAudSongObserver::NotifyClipAddingFailed - * is called once the operation has completed. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotSupported if audio format is not supported - * - * @param aFileHandle file handle of the clip to add - * @param aStartTime start time of the clip in song timebase - * @param aTrackIndex track index. Used to categorize clips. - */ - IMPORT_C void AddClipL(RFile* aFileHandle, - TTimeIntervalMicroSeconds aStartTime, TInt aTrackIndex = 0, - TTimeIntervalMicroSeconds aCutInTime = TTimeIntervalMicroSeconds(0), - TTimeIntervalMicroSeconds aCutOutTime = TTimeIntervalMicroSeconds(KClipEndTime)); - - -private: - - - // C++ constructor - CAudSong(RFs *aFs); - - // functions for keeping clip indexes and arrays up to date - void UpdateClipIndexes(); - void UpdateClipArray(); - - /** - * Returns a track domain clip index - * of the clip whose song doman index is aIndex - */ - TInt Index2IndexOnTrack(TInt aIndex); - - /* - * Returns a song domain clip index - */ - TInt FindClipIndexOnSong(const CAudClip* aClip) const; - - /* - * ConstructL - */ - - void ConstructL(); - -private: - - // Member variables - - // File server session. - RFs* iFs; - // Audio clip array. - RPointerArray iClipArray; - - // Marks used for manual level controlling - RPointerArray iDynamicLevelMarkArray; - - // Properties of the output file. - TAudFileProperties* iProperties; - - // Duration of the song - // if iSongDuration is greater than the cut out time of the last output clip, - // silence is generated in the end - TTimeIntervalMicroSeconds iSongDuration; - - // a flag to indicate whether the user has set the duration manually - // if not, the duration is the cutOutTime of the last input clip - TBool iSongDurationManuallySet; - - // Observer array of the song class. - RPointerArray iObserverArray; - - // Normalizing of this audio clip. - // If ETrue, the song as a whole is to be normalized - TBool iNormalize; - - // process operation owned by this - CAudSongProcessOperation* iProcessOperation; - - // clip adding operation owned by this - CAudSongAddClipOperation* iAddOperation; - - // song visualization operation owned by this - CAudSongVisualizationOperation* iVisualizationOperation; - - -private: - - // Notifications to fire callbacks to all registered listeners --------> - - void FireClipAdded(CAudSong* aSong, CAudClip* aClip, TInt aIndex, TInt aTrackIndex); - - void FireClipAddingFailed(CAudSong* aSong, TInt aError, TInt aTrackIndex); - - void FireClipRemoved(CAudSong* aSong, TInt aIndex, TInt aTrackIndex); - - void FireClipIndicesChanged(CAudSong* aSong, TInt aOldIndex, - TInt aNewIndex, TInt aTrackIndex); - - void FireClipTimingsChanged(CAudSong* aSong, CAudClip* aClip); - - void FireDynamicLevelMarkInserted(CAudSong& aSong, - TAudDynamicLevelMark& aMark, - TInt aIndex); - - void FireDynamicLevelMarkInserted(CAudClip& aClip, - TAudDynamicLevelMark& aMark, - TInt aIndex); - - void FireDynamicLevelMarkRemoved(CAudSong& aSong, TInt aIndex); - void FireDynamicLevelMarkRemoved(CAudClip& aClip, TInt aIndex); - void FireSongReseted(CAudSong& aSong); - void FireClipReseted(CAudClip& aClip); - - // <------------ Notifications to fire callbacks to all registered listeners - - friend class CAudSongAddClipOperation; - friend class CAudClip; - friend class CAudProcessorImpl; - - -#ifdef _WRITE_OUTPUT_TO_FILE_ - - TBool iFileOpen; - RFs iDebFs; - RFile iAudioFile; - RFile iTextFile; - - -#endif - - }; - - -// Abstract interface class to get events from audio processor - -class MProcProcessObserver - { - -public: - /** - * Called to notify that a new audio processing operation has been started. - * - */ - virtual void NotifyAudioProcessingStartedL() = 0; - - /** - * Called to inform about the current progress of the audio processing operation. - * - * @param aPercentage percentage of the operation completed, must be - * in range 0..100 - */ - virtual void NotifyAudioProcessingProgressed(TInt aPercentage) = 0; - - /** - * Called to notify that the song processing operation has been completed. - * - * @param aError error code why the operation was completed. - * KErrNone if the operation was completed - * successfully. - */ - virtual void NotifyAudioProcessingCompleted(TInt aError) = 0; - - }; - - - -/** -* Internal class for processing a song. -*/ -class CAudSongProcessOperation : public CBase, public MProcProcessObserver, public MAudTimeEstimateObserver - { - - - -public: - - - static CAudSongProcessOperation* NewL(CAudSong* aSong); - - // From MProcProcessObserver - - void NotifyAudioProcessingStartedL(); - void NotifyAudioProcessingProgressed(TInt aPercentage); - void NotifyAudioProcessingCompleted(TInt aError); - - // From // MAudTimeEstimateObserver - void NotifyTimeEstimateReady(TInt64 aTimeEstimate); - - /** - * Starts asyncronous processing a song - * - * Can leave with one of the system wide error codes - * - * Possible panic code - * ESongProcessingOperationAlreadyRunning - * - * @param aFileName output file name - * @param aObserver an observer to be notified of progress - * @param aPriority priority of audio processing operation - */ - void StartASyncProcL(const TDesC& aFileName, - MAudSongProcessingObserver& aObserver, TInt aPriority); - - - /** - * Starts syncronous song processing - * - * Can leave with one of the system wide error codes - * - * Possible panic code - * ESongProcessingOperationAlreadyRunning - * - */ - TBool StartSyncProcL(); - - - /** - * Processes synchronously next audio frame and passes it to the caller. - * If a processing operation has not been started, panic - * TAudPanic::ESongProcessingNotRunning is raised. - * - * Possibly leave codes: - * - KErrNoMemory if memory allocation fails - * - * NOTE: This function allocates memory and the caller is responsible for - * releasing it. - * - * @param aFrame pointer to a processed audio frame. Has to be deleted - * when not needed anymore. - * @param aDuration Duration of processed audio frame in microseconds - * after decoding - * - * @return ETrue Processing operation completed, no more frames to be processed. - * No memory allocated. - * EFalse Processing operation not completed. Last processed frame stored - * in aFrame. Memory allocated for the processed frame - * - */ - TBool ProcessSyncPieceL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration); - - /** - * Cancels both syncronous and and asyncronous song processing operation and deletes the output file - * - * Possible panic code - * ESongProcessingOperationNotRunning - * - */ - void Cancel(); - - TBool GetTimeEstimateL(MAudTimeEstimateObserver& aTEObserver); - - -private: - - CAudSongProcessOperation(CAudSong* aSong); - void ConstructL(); - virtual ~CAudSongProcessOperation(); - -private: - - /* - * Member Variables - */ - - // song - CAudSong *iSong; - - // song processing observer - MAudSongProcessingObserver* iObserver; - - // time estimate observer - MAudTimeEstimateObserver* iTEObserver; - - // A flag that indicates whether this song has changed since - // the last processing - TBool iChanged; - - // processor owned by this - CAudProcessor* iProcessor; - - friend class CAudSong; - - - }; - - -/** -* Internal class for adding clips. -*/ -class CAudSongAddClipOperation : public CBase, public MAudClipInfoObserver - { - -public: - - /* - * Constuctor & destructor - */ - - static CAudSongAddClipOperation* NewL(CAudSong* aSong); - - virtual ~CAudSongAddClipOperation(); - - /* - * From base class MAudClipInfoObserver - */ - virtual void NotifyClipInfoReady(CAudClipInfo& aInfo, - TInt aError); - - -private: - - /* - * ConstructL - */ - void ConstructL(); - - /* - * C++ constructor - */ - CAudSongAddClipOperation(CAudSong* aSong); - - /* - * Completes add clip operation - */ - void CompleteAddClipOperation(); - - -private: - - // song - CAudSong* iSong; - - // clip that we are trying to add - CAudClip* iClip; - - // error possible caught by callback function NotifyClipInfoReady - TInt iError; - - friend class CAudSong; - }; - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcClipInfoAO.h --- a/videoeditorengine/audioeditorengine/inc/ProcClipInfoAO.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCCLIPINFOAO_H__ -#define __CPROCCLIPINFOAO_H__ - -#include -#include "AudCommon.h" -#include "AudClipInfo.h" - -#include "AudProcessorImpl.h" - -class MProcClipInfoObserver; -class CAudProcessorImpl; - -class CProcClipInfoAO : public CActive - { - -public: - - static CProcClipInfoAO* NewL(); - - virtual ~CProcClipInfoAO(); - - /** - * - * Starts retrieving audio clip info - * - * @param aFilename filename of the input file - * @param aFileHandle file handle of the input file - * @param aObserver observer to be notified of progress - * @param aProperties properties of the input file. - * Needs to be allocated by the caller, - * and will filled in as a result of calling - * this function - * @param aPriority priority of the operation - * - */ - void StartL(const TDesC& aFilename, - RFile* aFileHandle, - MProcClipInfoObserver &aObserver, - TAudFileProperties* aProperties, - TInt aPriority); - - -protected: - virtual void RunL(); - virtual void DoCancel(); - -private: - - - - void ConstructL(); - - -private: - - CProcClipInfoAO(); - MProcClipInfoObserver* iObserver; - TAudFileProperties* iProperties; - HBufC* iFileName; - CAudProcessorImpl* iProcessorImpl; - RFile* iFileHandle; - - }; - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcConstants.h --- a/videoeditorengine/audioeditorengine/inc/ProcConstants.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,966 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __PROCCONSTANTS_H__ -#define __PROCCONSTANTS_H__ - -#include - -const TInt KAmrBitRates[] = - { - 4750, - 5150, - 5900, - 6700, - 7400, - 7950, - 10200, - 12200 - }; - -// bit locations for fixed codebook gains - -// subframe 1, bitrate 12.2 kBit/s -const TUint8 KAmrGains122_1[] = {59+8,63+8,67+8,92+8,104+8}; -// subframe 2, bitrate 12.2 kBit/s -const TUint8 KAmrGains122_2[] = {60+8,64+8,68+8,93+8,105+8}; -// subframe 3, bitrate 12.2 kBit/s -const TUint8 KAmrGains122_3[] = {61+8,65+8,69+8,94+8,106+8}; -// subframe 4, bitrate 12.2 kBit/s -const TUint8 KAmrGains122_4[] = {62+8,66+8,70+8,95+8,107+8}; - -// subframe 1, bitrate 7.95 kBit/s -const TUint8 KAmrGains795_1[] = {23+8,27+8,31+8,59+8,83+8}; -// subframe 2, bitrate 7.95 kBit/s -const TUint8 KAmrGains795_2[] = {24+8,28+8,32+8,60+8,84+8}; -// subframe 3, bitrate 7.95 kBit/s -const TUint8 KAmrGains795_3[] = {25+8,29+8,33+8,61+8,85+8}; -// subframe 4, bitrate 7.95 kBit/s -const TUint8 KAmrGains795_4[] = {26+8,30+8,34+8,62+8,86+8}; - - -// subframe 1, bitrate 10.2 kBit/s -const TUint8 KAmrGains102_1[] = {33+8,53+8,83+8,34+8,35+8,82+8,84+8}; -// subframe 2, bitrate 10.2 kBit/s -const TUint8 KAmrGains102_2[] = {36+8,54+8,86+8,37+8,38+8,85+8,87+8}; -// subframe 3, bitrate 10.2 kBit/s -const TUint8 KAmrGains102_3[] = {39+8,55+8,89+8,40+8,41+8,88+8,90+8}; -// subframe 4, bitrate 10.2 kBit/s -const TUint8 KAmrGains102_4[] = {42+8,56+8,92+8,43+8,44+8,91+8,93+8}; - - -// subframe 1, bitrate 7.4 kBit/s -const TUint8 KAmrGains740_1[] = {27+8,31+8,78+8,35+8,39+8,57+8,68+8}; -// subframe 2, bitrate 7.4 kBit/s -const TUint8 KAmrGains740_2[] = {28+8,32+8,79+8,36+8,40+8,58+8,69+8}; -// subframe 3, bitrate 7.4 kBit/s -const TUint8 KAmrGains740_3[] = {29+8,33+8,80+8,37+8,41+8,59+8,70+8}; -// subframe 4, bitrate 7.4 kBit/s -const TUint8 KAmrGains740_4[] = {30+8,34+8,81+8,38+8,42+8,60+8,71+8}; - - -// subframe 1, bitrate 6.7 kBit/s -const TUint8 KAmrGains670_1[] = {35+8,85+8,66+8,41+8,45+8,55+8,74+8}; -// subframe 2, bitrate 6.7 kBit/s -const TUint8 KAmrGains670_2[] = {36+8,84+8,67+8,42+8,46+8,56+8,75+8}; -// subframe 3, bitrate 6.7 kBit/s -const TUint8 KAmrGains670_3[] = {37+8,83+8,68+8,43+8,47+8,57+8,76+8}; -// subframe 4, bitrate 6.7 kBit/s -const TUint8 KAmrGains670_4[] = {38+8,82+8,69+8,44+8,48+8,58+8,77+8}; - - -// subframe 1, bitrate 5.9 kBit/s -const TUint8 KAmrGains590_1[] = {76+8,55+8,51+8,47+8,37+8,29+8}; -// subframe 2, bitrate 5.9 kBit/s -const TUint8 KAmrGains590_2[] = {77+8,56+8,52+8,48+8,38+8,30+8}; -// subframe 3, bitrate 5.9 kBit/s -const TUint8 KAmrGains590_3[] = {78+8,57+8,53+8,49+8,39+8,31+8}; -// subframe 4, bitrate 5.9 kBit/s -const TUint8 KAmrGains590_4[] = {79+8,58+8,54+8,50+8,40+8,32+8}; - - - -// subframe 1, bitrate 5.15 kBit/s -const TUint8 KAmrGains515_1[] = {55+8,45+8,36+8,26+8,25+8,24+8}; -// subframe 2, bitrate 5.15 kBit/s -const TUint8 KAmrGains515_2[] = {56+8,46+8,37+8,29+8,28+8,27+8}; -// subframe 3, bitrate 5.15 kBit/s -const TUint8 KAmrGains515_3[] = {57+8,47+8,38+8,32+8,31+8,30+8}; -// subframe 4, bitrate 5.15 kBit/s -const TUint8 KAmrGains515_4[] = {58+8,48+8,39+8,35+8,34+8,33+8}; - - -//subframes 1 & s, bitrate 4.75 kBit/s -const TUint8 KAmrGains475_1_2[] = {49+8,48+8,47+8,46+8,31+8,30+8,29+8,28+8}; -const TUint8 KAmrGains475_3_4[] = {43+8,42+8,41+8,40+8,35+8,34+8,33+8,32+8}; - - -// gp:s - -// subframe 1, bitrate 12.2 kBit/s -const TUint8 KAmrGPGains122_1[] = {47+8, 51+8,55+8,88+8}; -// subframe 2, bitrate 12.2 kBit/s -const TUint8 KAmrGPGains122_2[] = {48+8, 52+8,56+8,89+8}; -// subframe 3, bitrate 12.2 kBit/s -const TUint8 KAmrGPGains122_3[] = {49+8, 53+8,57+8,90+8}; -// subframe 4, bitrate 12.2 kBit/s -const TUint8 KAmrGPGains122_4[] = {50+8, 54+8,58+8,91+8}; - - -// subframe 1, bitrate 7.95 kBit/s -const TUint8 KAmrGPGains795_1[] = {35+8, 39+8, 79+8, 87+8}; -// subframe 2, bitrate 7.95 kBit/s -const TUint8 KAmrGPGains795_2[] = {36+8, 40+8, 80+8, 88+8}; -// subframe 3, bitrate 7.95 kBit/s -const TUint8 KAmrGPGains795_3[] = {37+8, 41+8, 81+8, 89+8}; -// subframe 4, bitrate 7.95 kBit/s -const TUint8 KAmrGPGains795_4[] = {38+8, 42+8, 82+8, 90+8}; - -// Gain table 12.2 kBit/s and 7.95 kBit/s, scalar quantized -const TInt KAmrGainTable122[] = - { - 159, - 206, - 268, - 349, - 419, - 482, - 554, - 637, - 733, - 842, - 969, - 1114, - 1281, - 1473, - 1694, - 1948, - 2241, - 2577, - 2963, - 3408, - 3919, - 4507, - 5183, - 5960, - 6855, - 7883, - 9065, - 10425, - 12510, - 16263, - 21142, - 27485 - }; - -#define NB_QUA_PITCH 16 - -const TInt KAmrGPTable[NB_QUA_PITCH] = -{ - 0, 3277, 6556, 8192, 9830, 11469, 12288, 13107, - 13926, 14746, 15565, 16384, 17203, 18022, 18842, 19661 -}; - - -const TInt KAmrLargestGain122 = 27485; - -// Gain table, 10.2, 6.70 and 7.40 kBit/s vector quantized - -// index = 0...127 -// KAmrGainTable[2*index] = g_pitch -// KAmrGainTable[2*index+1] = g_fac (fixed codebook gain) - -const TInt KAmrGainTable102[] = - { -//g_pit, g_fac - 577, 662, - 806, 1836, - 3109, 1052, - 4181, 1387, - 2373, 1425, - 3248, 1985, - 1827, 2320, - 941, 3314, - 2351, 2977, - 3616, 2420, - 3451, 3096, - 2955, 4301, - 1848, 4500, - 3884, 5416, - 1187, 7210, - 3083, 9000, - 7384, 883, - 5962, 1506, - 5155, 2134, - 7944, 2009, - 6507, 2250, - 7670, 2752, - 5952, 3016, - 4898, 3764, - 6989, 3588, - 8174, 3978, - 6064, 4404, - 7709, 5087, - 5523, 6021, - 7769, 7126, - 6060, 7938, - 5594, 11487, - 10581, 1356, - 9049, 1597, - 9794, 2035, - 8946, 2415, - 10296, 2584, - 9407, 2734, - 8700, 3218, - 9757, 3395, - 10177, 3892, - 9170, 4528, - 10152, 5004, - 9114, 5735, - 10500, 6266, - 10110, 7631, - 8844, 8727, - 8956, 12496, - 12924, 976, - 11435, 1755, - 12138, 2328, - 11388, 2368, - 10700, 3064, - 12332, 2861, - 11722, 3327, - 11270, 3700, - 10861, 4413, - 12082, 4533, - 11283, 5205, - 11960, 6305, - 11167, 7534, - 12128, 8329, - 10969, 10777, - 10300, 17376, - 13899, 1681, - 12580, 2045, - 13265, 2439, - 14033, 2989, - 13452, 3098, - 12396, 3658, - 13510, 3780, - 12880, 4272, - 13533, 4861, - 12667, 5457, - 13854, 6106, - 13031, 6483, - 13557, 7721, - 12957, 9311, - 13714, 11551, - 12591, 15206, - 15113, 1540, - 15072, 2333, - 14527, 2511, - 14692, 3199, - 15382, 3560, - 14133, 3960, - 15102, 4236, - 14332, 4824, - 14846, 5451, - 15306, 6083, - 14329, 6888, - 15060, 7689, - 14406, 9426, - 15387, 9741, - 14824, 14271, - 13600, 24939, - 16396, 1969, - 16817, 2832, - 15713, 2843, - 16104, 3336, - 16384, 3963, - 16940, 4579, - 15711, 4599, - 16222, 5448, - 16832, 6382, - 15745, 7141, - 16326, 7469, - 16611, 8624, - 17028, 10418, - 15905, 11817, - 16878, 14690, - 16515, 20870, - 18142, 2083, - 19401, 3178, - 17508, 3426, - 20054, 4027, - 18069, 4249, - 18952, 5066, - 17711, 5402, - 19835, 6192, - 17950, 7014, - 21318, 7877, - 17910, 9289, - 19144, 9290, - 20517, 11381, - 18075, 14485, - 19999, 17882, - 18842, 32764 - }; - -const TInt KAmrLargestGain102 = 32764; - - -// Gain table, 5.9 and 5.15 kBit/s vector quantized - -// index = 0...127 -// KAmrGainTable[2*index] = g_pitch -// KAmrGainTable[2*index+1] = g_fac -// g_pitch (Q14), -// g_fac (Q12), - -const TInt KAmrGainTable590[] = - { -//g_pit, g_fac - 10813, 28753, - 20480, 2785, - 18841, 6594, - 6225, 7413, - 17203, 10444, - 21626, 1269, - 21135, 4423, - 11304, 1556, - 19005, 12820, - 17367, 2498, - 17858, 4833, - 9994, 2498, - 17530, 7864, - 14254, 1884, - 15892, 3153, - 6717, 1802, - 18186, 20193, - 18022, 3031, - 16711, 5857, - 8847, 4014, - 15892, 8970, - 18022, 1392, - 16711, 4096, - 8192, 655, - 15237, 13926, - 14254, 3112, - 14090, 4669, - 5406, 2703, - 13434, 6553, - 12451, 901, - 12451, 2662, - 3768, 655, - 14745, 23511, - 19169, 2457, - 20152, 5079, - 6881, 4096, - 20480, 8560, - 19660, 737, - 19005, 4259, - 7864, 2088, - 11468, 12288, - 15892, 1474, - 15728, 4628, - 9175, 1433, - 16056, 7004, - 14827, 737, - 15073, 2252, - 5079, 1228, - 13271, 17326, - 16547, 2334, - 15073, 5816, - 3932, 3686, - 14254, 8601, - 16875, 778, - 15073, 3809, - 6062, 614, - 9338, 9256, - 13271, 1761, - 13271, 3522, - 2457, 1966, - 11468, 5529, - 10485, 737, - 11632, 3194, - 1474, 778 - }; - -const TInt KAmrLargestGain590 = 23511; - - -// index = 0...127 -// KAmrGainTable[4*index] = g_pitch(even frame) -// KAmrGainTable[4*index+1] = g_fac(even frame) -// KAmrGainTable[4*index+2] = g_pitch(odd frame) -// KAmrGainTable[4*index+3] = g_fac(odd frame) - - -const TInt KAmrGainTable475[] = - { -//g_pit(0), g_fac(0), g_pit(1), g_fac(1) - 812, 128, 542, 140, - 2873, 1135, 2266, 3402, - 2067, 563, 12677, 647, - 4132, 1798, 5601, 5285, - 7689, 374, 3735, 441, - 10912, 2638, 11807, 2494, - 20490, 797, 5218, 675, - 6724, 8354, 5282, 1696, - 1488, 428, 5882, 452, - 5332, 4072, 3583, 1268, - 2469, 901, 15894, 1005, - 14982, 3271, 10331, 4858, - 3635, 2021, 2596, 835, - 12360, 4892, 12206, 1704, - 13432, 1604, 9118, 2341, - 3968, 1538, 5479, 9936, - 3795, 417, 1359, 414, - 3640, 1569, 7995, 3541, - 11405, 645, 8552, 635, - 4056, 1377, 16608, 6124, - 11420, 700, 2007, 607, - 12415, 1578, 11119, 4654, - 13680, 1708, 11990, 1229, - 7996, 7297, 13231, 5715, - 2428, 1159, 2073, 1941, - 6218, 6121, 3546, 1804, - 8925, 1802, 8679, 1580, - 13935, 3576, 13313, 6237, - 6142, 1130, 5994, 1734, - 14141, 4662, 11271, 3321, - 12226, 1551, 13931, 3015, - 5081, 10464, 9444, 6706, - 1689, 683, 1436, 1306, - 7212, 3933, 4082, 2713, - 7793, 704, 15070, 802, - 6299, 5212, 4337, 5357, - 6676, 541, 6062, 626, - 13651, 3700, 11498, 2408, - 16156, 716, 12177, 751, - 8065, 11489, 6314, 2256, - 4466, 496, 7293, 523, - 10213, 3833, 8394, 3037, - 8403, 966, 14228, 1880, - 8703, 5409, 16395, 4863, - 7420, 1979, 6089, 1230, - 9371, 4398, 14558, 3363, - 13559, 2873, 13163, 1465, - 5534, 1678, 13138, 14771, - 7338, 600, 1318, 548, - 4252, 3539, 10044, 2364, - 10587, 622, 13088, 669, - 14126, 3526, 5039, 9784, - 15338, 619, 3115, 590, - 16442, 3013, 15542, 4168, - 15537, 1611, 15405, 1228, - 16023, 9299, 7534, 4976, - 1990, 1213, 11447, 1157, - 12512, 5519, 9475, 2644, - 7716, 2034, 13280, 2239, - 16011, 5093, 8066, 6761, - 10083, 1413, 5002, 2347, - 12523, 5975, 15126, 2899, - 18264, 2289, 15827, 2527, - 16265, 10254, 14651, 11319, - 1797, 337, 3115, 397, - 3510, 2928, 4592, 2670, - 7519, 628, 11415, 656, - 5946, 2435, 6544, 7367, - 8238, 829, 4000, 863, - 10032, 2492, 16057, 3551, - 18204, 1054, 6103, 1454, - 5884, 7900, 18752, 3468, - 1864, 544, 9198, 683, - 11623, 4160, 4594, 1644, - 3158, 1157, 15953, 2560, - 12349, 3733, 17420, 5260, - 6106, 2004, 2917, 1742, - 16467, 5257, 16787, 1680, - 17205, 1759, 4773, 3231, - 7386, 6035, 14342, 10012, - 4035, 442, 4194, 458, - 9214, 2242, 7427, 4217, - 12860, 801, 11186, 825, - 12648, 2084, 12956, 6554, - 9505, 996, 6629, 985, - 10537, 2502, 15289, 5006, - 12602, 2055, 15484, 1653, - 16194, 6921, 14231, 5790, - 2626, 828, 5615, 1686, - 13663, 5778, 3668, 1554, - 11313, 2633, 9770, 1459, - 14003, 4733, 15897, 6291, - 6278, 1870, 7910, 2285, - 16978, 4571, 16576, 3849, - 15248, 2311, 16023, 3244, - 14459, 17808, 11847, 2763, - 1981, 1407, 1400, 876, - 4335, 3547, 4391, 4210, - 5405, 680, 17461, 781, - 6501, 5118, 8091, 7677, - 7355, 794, 8333, 1182, - 15041, 3160, 14928, 3039, - 20421, 880, 14545, 852, - 12337, 14708, 6904, 1920, - 4225, 933, 8218, 1087, - 10659, 4084, 10082, 4533, - 2735, 840, 20657, 1081, - 16711, 5966, 15873, 4578, - 10871, 2574, 3773, 1166, - 14519, 4044, 20699, 2627, - 15219, 2734, 15274, 2186, - 6257, 3226, 13125, 19480, - 7196, 930, 2462, 1618, - 4515, 3092, 13852, 4277, - 10460, 833, 17339, 810, - 16891, 2289, 15546, 8217, - 13603, 1684, 3197, 1834, - 15948, 2820, 15812, 5327, - 17006, 2438, 16788, 1326, - 15671, 8156, 11726, 8556, - 3762, 2053, 9563, 1317, - 13561, 6790, 12227, 1936, - 8180, 3550, 13287, 1778, - 16299, 6599, 16291, 7758, - 8521, 2551, 7225, 2645, - 18269, 7489, 16885, 2248, - 17882, 2884, 17265, 3328, - 9417, 20162, 11042, 8320, - 1286, 620, 1431, 583, - 5993, 2289, 3978, 3626, - 5144, 752, 13409, 830, - 5553, 2860, 11764, 5908, - 10737, 560, 5446, 564, - 13321, 3008, 11946, 3683, - 19887, 798, 9825, 728, - 13663, 8748, 7391, 3053, - 2515, 778, 6050, 833, - 6469, 5074, 8305, 2463, - 6141, 1865, 15308, 1262, - 14408, 4547, 13663, 4515, - 3137, 2983, 2479, 1259, - 15088, 4647, 15382, 2607, - 14492, 2392, 12462, 2537, - 7539, 2949, 12909, 12060, - 5468, 684, 3141, 722, - 5081, 1274, 12732, 4200, - 15302, 681, 7819, 592, - 6534, 2021, 16478, 8737, - 13364, 882, 5397, 899, - 14656, 2178, 14741, 4227, - 14270, 1298, 13929, 2029, - 15477, 7482, 15815, 4572, - 2521, 2013, 5062, 1804, - 5159, 6582, 7130, 3597, - 10920, 1611, 11729, 1708, - 16903, 3455, 16268, 6640, - 9306, 1007, 9369, 2106, - 19182, 5037, 12441, 4269, - 15919, 1332, 15357, 3512, - 11898, 14141, 16101, 6854, - 2010, 737, 3779, 861, - 11454, 2880, 3564, 3540, - 9057, 1241, 12391, 896, - 8546, 4629, 11561, 5776, - 8129, 589, 8218, 588, - 18728, 3755, 12973, 3149, - 15729, 758, 16634, 754, - 15222, 11138, 15871, 2208, - 4673, 610, 10218, 678, - 15257, 4146, 5729, 3327, - 8377, 1670, 19862, 2321, - 15450, 5511, 14054, 5481, - 5728, 2888, 7580, 1346, - 14384, 5325, 16236, 3950, - 15118, 3744, 15306, 1435, - 14597, 4070, 12301, 15696, - 7617, 1699, 2170, 884, - 4459, 4567, 18094, 3306, - 12742, 815, 14926, 907, - 15016, 4281, 15518, 8368, - 17994, 1087, 2358, 865, - 16281, 3787, 15679, 4596, - 16356, 1534, 16584, 2210, - 16833, 9697, 15929, 4513, - 3277, 1085, 9643, 2187, - 11973, 6068, 9199, 4462, - 8955, 1629, 10289, 3062, - 16481, 5155, 15466, 7066, - 13678, 2543, 5273, 2277, - 16746, 6213, 16655, 3408, - 20304, 3363, 18688, 1985, - 14172, 12867, 15154, 15703, - 4473, 1020, 1681, 886, - 4311, 4301, 8952, 3657, - 5893, 1147, 11647, 1452, - 15886, 2227, 4582, 6644, - 6929, 1205, 6220, 799, - 12415, 3409, 15968, 3877, - 19859, 2109, 9689, 2141, - 14742, 8830, 14480, 2599, - 1817, 1238, 7771, 813, - 19079, 4410, 5554, 2064, - 3687, 2844, 17435, 2256, - 16697, 4486, 16199, 5388, - 8028, 2763, 3405, 2119, - 17426, 5477, 13698, 2786, - 19879, 2720, 9098, 3880, - 18172, 4833, 17336, 12207, - 5116, 996, 4935, 988, - 9888, 3081, 6014, 5371, - 15881, 1667, 8405, 1183, - 15087, 2366, 19777, 7002, - 11963, 1562, 7279, 1128, - 16859, 1532, 15762, 5381, - 14708, 2065, 20105, 2155, - 17158, 8245, 17911, 6318, - 5467, 1504, 4100, 2574, - 17421, 6810, 5673, 2888, - 16636, 3382, 8975, 1831, - 20159, 4737, 19550, 7294, - 6658, 2781, 11472, 3321, - 19397, 5054, 18878, 4722, - 16439, 2373, 20430, 4386, - 11353, 26526, 11593, 3068, - 2866, 1566, 5108, 1070, - 9614, 4915, 4939, 3536, - 7541, 878, 20717, 851, - 6938, 4395, 16799, 7733, - 10137, 1019, 9845, 964, - 15494, 3955, 15459, 3430, - 18863, 982, 20120, 963, - 16876, 12887, 14334, 4200, - 6599, 1220, 9222, 814, - 16942, 5134, 5661, 4898, - 5488, 1798, 20258, 3962, - 17005, 6178, 17929, 5929, - 9365, 3420, 7474, 1971, - 19537, 5177, 19003, 3006, - 16454, 3788, 16070, 2367, - 8664, 2743, 9445, 26358, - 10856, 1287, 3555, 1009, - 5606, 3622, 19453, 5512, - 12453, 797, 20634, 911, - 15427, 3066, 17037, 10275, - 18883, 2633, 3913, 1268, - 19519, 3371, 18052, 5230, - 19291, 1678, 19508, 3172, - 18072, 10754, 16625, 6845, - 3134, 2298, 10869, 2437, - 15580, 6913, 12597, 3381, - 11116, 3297, 16762, 2424, - 18853, 6715, 17171, 9887, - 12743, 2605, 8937, 3140, - 19033, 7764, 18347, 3880, - 20475, 3682, 19602, 3380, - 13044, 19373, 10526, 23124 -}; - -const TInt KAmrLargestGain475 = 26526; - - -// KAmrGaindB2Gamma[0] is gamma*10000 at -127 dB -// KAmrGaindB2Gamma[1] is gamma*10000 at -126 dB -// KAmrGaindB2Gamma[127] is gamma*10000 at 0 dB -// KAmrGaindB2Gamma[128] is gamma*10000 at 1 dB -// KAmrGaindB2Gamma[255] is gamma*10000 at 128 dB - -const TInt KAmrGain_dB2Gamma[] = - - { -53, -55, -58, -60, -62, -65, -68, -71, -74, -77, -80, -83, -87, -91, -94, -98, -103, -107, -111, -116, -121, -126, -131, -137, -143, -149, -155, -161, -168, -175, -183, -190, -198, -207, -215, -225, -234, -244, -254, -265, -276, -288, -300, -312, -325, -339, -353, -368, -384, -400, -417, -435, -453, -472, -492, -512, -534, -557, -580, -604, -630, -656, -684, -713, -743, -774, -807, -841, -876, -913, -952, -992, -1034, -1077, -1122, -1170, -1219, -1270, -1324, -1380, -1438, -1498, -1562, -1627, -1696, -1767, -1842, -1919, -2000, -2084, -2172, -2264, -2359, -2459, -2562, -2670, -2783, -2900, -3022, -3149, -3282, -3420, -3564, -3714, -3871, -4034, -4204, -4381, -4566, -4758, -4958, -5167, -5385, -5612, -5848, -6095, -6351, -6619, -6898, -7188, -7491, -7807, -8136, -8478, -8836, -9208, -9596, -10000, -10421, -10860, -11318, -11795, -12292, -12809, -13349, -13911, -14497, -15108, -15745, -16408, -17099, -17820, -18570, -19353, -20168, -21017, -21903, -22826, -23787, -24789, -25834, -26922, -28056, -29238, -30470, -31754, -33091, -34485, -35938, -37452, -39030, -40674, -42388, -44173, -46034, -47974, -49995, -52101, -54296, -56583, -58967, -61451, -64040, -66738, -69549, -72479, -75533, -78715, -82031, -85487, -89088, -92841, -96753, -100829, -105076, -109503, -114116, -118924, -123934, -129155, -134596, -140266, -146175, -152334, -158751, -165439, -172409, -179672, -187241, -195129, -203350, -211917, -220844, -230148, -239844, -249948, -260478, -271451, -282887, -294804, -307224, -320167, -333655, -347711, -362360, -377625, -393534, -410113, -427390, -445395, -464159, -483713, -504091, -525327, -547459, -570522, -594557, -619605, -645708, -672910, -701258, -730801, -761589, -793673, -827109, -861954, -898266, -936108, -975545, -1016643, -1059472, -1104106, -1150620, -1199093, -1249609, -1302253, -1357114, -1414287, -1473869, -1535960, -1600667, -1668101, -1738375, -1811609, -1887929, - }; - - - - -/* - * definition of modes for decoder - */ -enum Mode - { - MR475 = 0, - MR515, - MR59, - MR67, - MR74, - MR795, - MR102, - MR122, - MRDTX, - N_MODES /* number of (SPC) modes */ - }; - - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcDecoder.h --- a/videoeditorengine/audioeditorengine/inc/ProcDecoder.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,159 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCProcDecoder_H__ -#define __CPROCProcDecoder_H__ - -#include -#include -#include - -#include "AudCommon.h" -#include "ProcConstants.h" -#include "RateConverter.h" - -class CProcDecoder : public CBase - { - -public: - - /* - * Symbian constructors - * - */ - - static CProcDecoder* NewL(); - - static CProcDecoder* NewLC(); - - /* - * Destructor - */ - ~CProcDecoder(); - - /* - * Initialize the decoder - * - * @param aProperties properties of the input clip (in compressed domain) - * @param aTargetSamplingRate sampling rate to decode to - * @param aChannelMode channel mode to decode to - * - * @return ETrue if successful - * - */ - - TBool InitL(TAudFileProperties aProperties, TInt aTargetSamplingRate, TChannelMode aChannelMode); - - /* - * Feed the encoder - * - * @param aEncFrame encoded input frame - * @param aDecbuffer buffer for decoded output data - * - * @return ETrue if output was generated, EFalse if more data is needed - */ - - TBool FillDecBufferL(const HBufC8* aEncFrame, HBufC8*& aDecBuffer); - - - -protected: - - // constructL - void ConstructL(); - - // C++ constructor - CProcDecoder(); - - // configure AAC decoder - // configure AAC Plus decoder - void ConfigureAACPlusDecoderL(); - - // configure MP3 decoder - void ConfigureMP3DecoderL(); - - // if input buffer is too small - void ReAllocBufferL( CMMFDataBuffer* aBuffer, TInt aNewMaxSize ); - - // feed the codec - void FeedCodecL( CMMFCodec* aCodec, CMMFDataBuffer* aSourceBuffer, CMMFDataBuffer* aDestBuffer ); - - // decode - TCodecProcessResult DecodeL( CMMFCodec* aCodec, CMMFDataBuffer* aInBuffer, CMMFDataBuffer* aOutBuffer); - - // is supported dest codec? - TBool GetIsSupportedSourceCodec(); - - // set source codec - void SetSourceCodecL(); - - // is codec available? - TBool CheckIfCodecAvailableL(const TDesC8& aCodecFourCCString, const TUid& aCodecUId ); - - // update output buffer - TBool UpdateOutputBufferL(CMMFDataBuffer* aInBuffer); - - protected: - - // properties of the input data - TAudFileProperties iProperties; - - // a flag to indicate if decoding can take place - TBool iReady; - - // Input buffer for decoder. - CMMFDataBuffer* iSourceInputBuffer; - - // Input buffer for encoder (alternative output buffer for decoder). - CMMFDataBuffer* iDestInputBuffer; - - CMMFDataBuffer* iSampleRateChannelBuffer; - - // Codec used in decoding input audio to PCM16 - CMMFCodec* iSourceCodec; - - // Channel and sample rate converter - CRateConverter* iRateConverter; - - // Whether audio converter needs to do channel and/or samplerate conversion. - TBool iDoSampleRateChannelConversion; - - // Whether decoding is required (not required if input is WAV) - TBool iDoDecoding; - - // Samplerate to convert from. - TInt iFromSampleRate; - // Samplerate to convert to. - TInt iToSampleRate; - // Number of channels in input. - TInt iFromChannels; - // Number of channels in output. - TInt iToChannels; - - // a pointer to store output buffer - HBufC8* iDecBuffer; - - // decimation factor for decoder - TInt iDecimFactor; - - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcEncoder.h --- a/videoeditorengine/audioeditorengine/inc/ProcEncoder.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,152 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCENCODER_H__ -#define __CPROCENCODER_H__ - -#include -#include -#include - -#include "AudCommon.h" -#include "ProcConstants.h" - -class CProcEncoder : public CBase - { - -public: - - /* - * Symbian constructors - */ - - static CProcEncoder* NewL(); - - static CProcEncoder* NewLC(); - - /* - * Destructor - */ - ~CProcEncoder(); - - - /* - * Initializes encoder - * - * @param aAudioType target audio type, EAudAMR and EAudAAC_MPEG4 supported - * @param aTargetSamplingRate target sampling rate, 8000, 16000 supported, later 48000 - * @param aChannelMode target channel mode EAudSingleChannel supported, stereo later - * - * @return ETrue if successful, EFalse if not - * - */ - - TBool InitL(TAudType aAudioType, TInt aTargetSamplingRate, TChannelMode aChannelMode, TInt aBitrate); - - /* - * Feed the encoder - * If the encoder has enough data, output is written to aEncBuffer - * - * @param aRawFrame input for the encoder, must have the same sample rate - * and channel mode as the desired target - * @param aEncBuffer buffer for output - * @param aOutputDurationMilli duration of the output buffer in return - * - * @return ETrue if data was written to aEncBuffer, EFalse otherwise - * - */ - TBool FillEncBufferL(const TDesC8& aRawFrame, HBufC8* aEncBuffer, TInt& aOutputDurationMilli); - - /* - * Returns the destination audio type - * - * @return destination audio type - */ - TAudType DestAudType(); - -protected: - - // constructL - void ConstructL(); - - // C++ constructor - CProcEncoder(); - - // reallocates a data buffer - void ReAllocBufferL( CMMFDataBuffer* aBuffer, TInt aNewMaxSize ); - - // feed codec - void FeedCodecL( CMMFCodec* aCodec, CMMFDataBuffer* aSourceBuffer, CMMFDataBuffer* aDestBuffer ); - - // encodeL - TCodecProcessResult EncodeL( CMMFCodec* aCodec, CMMFDataBuffer* aInBuffer, CMMFDataBuffer* aOutBuffer); - - // is the destination codec supported? - TBool GetIsSupportedDestCodec(); - - // configure AMR encoder - void ConfigureAMREncoderL(); - - // configure AAC encoder - void ConfigureAACEncoderL(); - - // set destination codec - void SetDestCodecL(); - - // is codec available? - TBool CheckIfCodecAvailableL(const TDesC8& aCodecFourCCString, const TUid& aCodecUId); - -protected: - - // target audio type - TAudType iAudioType; - - // is encoder ready for processing - TBool iReady; - - // Input buffer for raw data - CMMFDataBuffer* iSourceInputBuffer; - - // Input buffer for encoder (alternative output buffer for decoder). - CMMFDataBuffer* iDestInputBuffer; - - // Codec used in decoding input audio to PCM16 - CMMFCodec* iDestCodec; - - // Samplerate to encode to. - TInt iToSampleRate; - // Number of channels in output and input - TInt iToChannels; - - // target bitrate - TInt iToBitRate; - - // output duration - TInt iOutputFrameDurationMilli; - - // sometimes more than one AMR frame are written to the output with one call - TInt iNumberOfFramesInOutputBuffer; - - // buffer for output - HBufC8* iEncBuffer; - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcFrameHandler.h --- a/videoeditorengine/audioeditorengine/inc/ProcFrameHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCFRAMEHANDLER_H__ -#define __CPROCFRAMEHANDLER_H__ - -#include -#include "AudCommon.h" -#include "ProcConstants.h" - -class CProcFrameHandler : public CBase - { - -public: - - - /** - * Manipulates the gain of a certain audio frame - * - * @param aFrameIn a frame to be modified - * @param aFrameOut a modified frame, the caller is responsible for releasing! - * @param aGain gain change. One step represents 0.5 dB, so that - * 0->no change, 10 -> +5dB and -10 -> -5dB - * @return ETrue if successful - * - * - */ - virtual TBool ManipulateGainL(const HBufC8* aFrameIn, HBufC8*& aFrameOut, TInt8 aGain) = 0; - - /** - * Retrieves the gains of a certain audio frame - * - * @param aFrame an audio frame - * @param aGains retrieved gains - * @param aMaxGain the biggest possible gain value - * @return ETrue if successful - * - * - */ - virtual TBool GetGainL(const HBufC8* aFrame, RArray& aGains, TInt& aMaxGain) const = 0; - - /** - * Calculates how many decibels this frame can be amplified - * - * @param aFrame an audio frame - * @param aMargin margin in debicels/2 -> 4 equals 2 decibels - */ - virtual TBool GetNormalizingMargin(const HBufC8* aFrame, TInt8& aMargin) const = 0; - - /** - * Tells whether mixing is available or not - * - * @return ETrue mixing is available - * @return EFalse mixing is not available - */ - virtual TBool IsMixingAvailable() const; - - /** - * Mixes two frames with each other - * - * @param aFrame1 frame 1 to be mixed - * @param aFrame2 frame 2 to be mixed - * @param aMixedFrame resulting mixed frame - * - * @return ETrue if mixing was successful. The caller is responsible for releasing memory - * EFalse if mixing was not successful. aMixedFrame = 0 and the caller - * doesn't need to release memory - */ - virtual TBool MixL(const HBufC8* aFrame1, const HBufC8* aFrame2, HBufC8*& aMixedFrame); - - - virtual ~CProcFrameHandler(); - -private: - -protected: - - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcInFileHandler.h --- a/videoeditorengine/audioeditorengine/inc/ProcInFileHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,392 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCINFILEHANDLER_H__ -#define __CPROCINFILEHANDLER_H__ - -#include -#include -#include "ProcFrameHandler.h" -#include "ProcWAVFrameHandler.h" - -#include "AudCommon.h" -#include "ProcConstants.h" -#include "AudClip.h" -#include "ProcDecoder.h" - -class CProcInFileHandler : public CBase - { - -public: - - /* - * Destructor - */ - virtual ~CProcInFileHandler(); - - - /** - * Gets properties of this input clip - * - * @param aProperties audio clip properties. Needs to be allocated by the caller - * and is filled in by this function - * - */ - virtual void GetPropertiesL(TAudFileProperties* aProperties) = 0; - - /* - * - * Is decoding required? - */ - - TBool DecodingRequired(); - - /* - * - * Returns the size of a decoded frame - */ - TInt GetDecodedFrameSize(); - - /* - * - * Sets whether decoding is required? - */ - - void SetDecodingRequired(TBool aDecodingRequired); - - /** - * Reads the next audio frame - * This function allocates memory and - * the caller is responsible for releasing it - * - * Possible leave codes: - * - * - * @param aFrame audio frame - * @param aSize size of the retrieved audio frame - * @param aTime duration of the returned frame in milliseconds - * @return ETrue if a frame was read - * EFalse if frame was not read (EOF) - */ - TBool GetAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime, TBool& aRawFrame); - - TBool GetRawAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime); - - - /** - * Sets properties of this in file handler - * - * @param aProperties audio clip properties - * - */ - - TBool SetPropertiesL(TAudFileProperties aProperties); - - /* - * Set the size of raw audio frames - * - * @param aSize audio size - * - * @return ETrue if successful, EFalse otherwise - */ - - TBool SetRawAudioFrameSize(TInt aSize); - - - /** - * Seeks a certain audio frame for reading - * - * Possible leave codes: - * - * @param aTime time from the beginning of file in milliseconds - * - * @return ETrue if successful - * EFalse if beyond the file - */ - virtual TBool SeekAudioFrame(TInt32 aTime) = 0; - - - /** - * Seeks a cut in audio frame for reading - * - * Possible leave codes: - * - * - * @return ETrue if successful - * - */ - virtual TBool SeekCutInFrame() = 0; - - - //virtual TBool GetAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime, TBool& aRawFrame) = 0; - - - /** - * Generates and returns a silent audio frame - * This function allocates memory and - * the caller is responsible for releasing it. - * The silent frame is generated according to audio - * properties of this input clip - * (e.g. sampling rate, channel configuration, bitrate etc) - * - * Possible leave codes: , at least KErrNotMemory - * - * - * @param aFrame audio frame - * @param aSize size of the silent audio frame - * @param aDuration duration of the returned silent frame in milliseconds - * @return ETrue if a frame was generated - * EFalse if frame was not generated (EOF, no need to release aFrame) - */ - virtual TBool GetSilentAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aDuration, TBool& aRawFrame); - - - - /** - * Gets the priority of this clip - * - * @return priority of this clip - * - */ - TInt Priority() const; - - /** - * Gets the current time of the frame reading - * - * @return current time in milliseconds - * - */ - TInt32 GetCurrentTimeMilliseconds(); - - /** - * Gets the normalizing margin of this clip - * - * @return normalizing margin - * - */ - TInt8 NormalizingMargin() const; - - /** - * - * Set priority of this clip - * - * @param aPriority priority >= 0 - * - * @return ETrue if priority >= 0 - * EFalse otherwise, priority not set - */ - TBool SetPriority(TInt aPriority); - - /* - * Sets the normalizing gain of this clip - * - * @param aFrameHandler frame handler - * - * @return ETrue if successful - */ - virtual TBool SetNormalizingGainL(const CProcFrameHandler* aFrameHandler) = 0; - - /** - * Gets ReadAudioDecoderSpecificInfo from file (if any) - * - * @param aBytes buffer - * @param aBufferSize maximum size of buffer - * - * @return ETrue if bytes were read (The caller must release aBytes!!) - * - * EFalse if no bytes were read (no memory releasing needed) - * - */ - - virtual TBool ReadAudioDecoderSpecificInfoL(HBufC8*& aBytes, TInt aBufferSize); - - -protected: - - // constructL - void ConstructL(const TDesC& aFileName); - - // c++ constructor - CProcInFileHandler(); - - - /** - * Reads the next raw frame - * This function allocates memory and - * the caller is responsible for releasing it - * - * Possible leave codes: - * - * - * @param aFrame audio frame - * @param aSize size of the retrieved audio frame - * @param aTime duration of the returned frame in milliseconds - * @return ETrue if a frame was read - * EFalse if frame was not read (EOF) - */ - - virtual TBool GetRawSilentAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aDuration); - - virtual TBool GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime) = 0; - - virtual TBool GetEncSilentAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aDuration); - - TBool GetOneRawAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aDuration); - - - /** - * Performs all the necessary initializations and memory allocations needed. - * Should be always called by classes inherited from CProcInFileHander - * - * @param aFileName name of the file - * @param aCutInTime cut in time in milliseconds - * @param aReadBufferSize read buffer size - * - * @return ETrue if successful - * - */ - TBool InitAndOpenFileL(const TDesC& aFileName, RFile* aFileHandle, TInt aReadBufferSize); - - - /** - * Performs all the necessary resource releasing and file closing - * - * should be called if InitAndOpenFileL has been called - * - * @return ETrue if successful - * - */ - void ResetAndCloseFile(); - - // opens a file for readind - TBool OpenFileForReadingL(); - - // closes the file if open - TBool CloseFile(); - - - // File reading methods------------------> - TInt BufferedFileRead(TDes8& aDes,TInt aLength); - TInt BufferedFileSetFilePos(TInt aPos); - TInt BufferedFileGetFilePos(); - TInt BufferedFileGetSize(); - TInt BufferedFileRead(TInt aPos,TDes8& aDes); - TInt BufferedFileRead(TDes8& aDes); - TInt BufferedFileReadChar(TInt aPos, TUint8& aChar); - // <------------------ File reading methods - - - TBool ManipulateGainL(HBufC8*& aFrameIn); - - // function for gain manipulation - TInt8 GetGainNow(); - - TBool WriteDataToInputBufferL(const TDesC8& aData); - -protected: - - // is inputfile open? - TBool iFileOpen; - - // file name - HBufC* iFileName; - - // RFile - RFile iFile; - - // file server session - RFs iFs; - - // read buffer - HBufC8* iReadBuffer; - - // size of the read buffer - TInt iReadBufferSize; - - // start offset of the read buffer - TInt iBufferStartOffset; - - // end offset of the read buffer - TInt iBufferEndOffset; - - // current file position - TInt iFilePos; - - // cut in time in milliseconds - TInt32 iCutInTime; - - // current read time in milliseconds - TInt32 iCurrentTimeMilliseconds; - - // priority of the clip - TInt iPriority; - - // normalizing margin in dB/2 - TInt8 iNormalizingMargin; - - // audio file properties - TAudFileProperties* iProperties; - - // silent frame - HBufC8* iSilentFrame; - - // duration of the silent frame - TInt32 iSilentFrameDuration; - - // raw silent frame - HBufC8* iRawSilentFrame; - - // duration of the raw silent frame - TInt iRawSilentFrameDuration; - - // if true, this object opens and closes the input file - TBool iOwnsFile; - - TInt iTargetSampleRate; - - TChannelMode iChannelMode; - - CProcFrameHandler* iFrameHandler; - - CAudClip* iClip; - - TBool iDecodingRequired; - - CProcDecoder* iDecoder; - - TBool iDecodingPossible; - - // We need a temporary storage for extra bytes - // when retrieving raw frames af equal length - HBufC8* iInputBuffer; - - TInt iRawFrameLength; - - // wav frame handler for time domain gain manipulation - CProcWAVFrameHandler* iWavFrameHandler; - - // remainder if audio duration can't be handled accurately in TInt milliseconds, depends on sampling rate - TReal iFrameLenRemainderMilli; - - // Counter for decoder errors. Try to continue after one error, but if there are more, stop decoding. - TInt iDecoderErrors; - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcOutFileHandler.h --- a/videoeditorengine/audioeditorengine/inc/ProcOutFileHandler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCOUTFILEHANDLER_H__ -#define __CPROCOUTFILEHANDLER_H__ - -#include -#include -#include "AudCommon.h" -#include "ProcConstants.h" - -class CProcOutFileHandler : public CBase - { - -public: - -/* - static CProcOutFileHandler* NewL(const TDesC& aFileName, - TInt aWriteBufferSize, - TAudFileProperties aProperties); - - static CProcOutFileHandler* NewLC(const TDesC& aFileName, - TInt aWriteBufferSize, - TAudFileProperties aProperties); -*/ - - /** - * Sets the output file properties - * - * @param aProperties properties of the output file - */ - TBool SetPropertiesL(TAudFileProperties aProperties); - - void GetPropertiesL(const TAudFileProperties*& aProperties); - - /** - * Initializes an output file - * (writes file headers etc.) - * - * @return ETrue if successful - * - */ - virtual TBool InitializeFileL(); - - /** - * Finalizes an output file - * Writes some file specific information if needed and - * closes the file - * - */ - virtual TBool FinalizeFile(); - - /** - * Writes a new audio frame to an output file - * - * @param aFrame an audio frame to be written - * @param aSize the number of bytes written - * - */ - virtual TBool WriteAudioFrameL(const HBufC8*& aFrame, TInt& aSize); - - /** - * Writes a new audio frame to an output file - * - * @param aFrame an audio frame to be written - * @param aSize the number of bytes written - * @param aDurationMilliSeconds frame duration in milliseconds - * - */ - virtual TBool WriteAudioFrameL(const HBufC8*& aFrame, TInt& aSize, TInt aDurationMilliSeconds); - - /** - * Writes silent frames to current file position - * - * @param aTime time (in milliseconds) of how much silence is to be written - */ - virtual TBool WriteSilenceL(TInt32 aTime) = 0; - virtual ~CProcOutFileHandler(); - - -private: - -protected: - - void ConstructL(const TDesC& aFileName, TInt aWriteBufferSize, TAudFileProperties aProperties); - void InitL(const TDesC& aFileName, TInt aWriteBufferSize); - TBool OpenFileForWritingL(); - TBool CloseFile(); - CProcOutFileHandler(); - - TInt BufferedFileWriteL(const TDesC8& aDes,TInt aLength); - TInt BufferedFileGetPos(); - TInt BufferedFileSetPos(TInt aPos); - - HBufC* iFileName; - - RFile iFile; - RFs iFs; - TBool iFileOpen; - - HBufC8* iWriteBuffer; - - TInt iWriteBufferSize; - - TAudFileProperties* iProperties; - - HBufC8* iSilentFrame; - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcProcessAO.h --- a/videoeditorengine/audioeditorengine/inc/ProcProcessAO.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,130 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCPROCESSAO_H__ -#define __CPROCPROCESSAO_H__ - -#include -#include "AudCommon.h" -#include "AudSong.h" - -#include "AudProcessor.h" - -#include "AudProcessorImpl.h" - -#include "ProcEncoder.h" - -class MProcProcessObserver; -class CAudProcessorImpl; -class CAudProcessor; - -class CProcProcess : public CBase - { - -public: - - /** - * - * Constructor & destructor - * - */ - static CProcProcess* NewL(); - - ~CProcProcess(); - - /** - * Starts a syncronous song processing operation - * - * @param aSong song - * - */ - TBool StartSyncProcessingL(const CAudSong* aSong, TBool aGetTimeEstimation = EFalse); - - /** - * Processes one piece syncronously - * - * @param aFrame audio frame in output - * @param aProgerss current progress (0-100) - * @param aDuration duration of aFrame - * - */ - TBool ProcessSyncPieceL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration); - - /** - * - * Gets time estimate once the time estimate has been calculated - * - * If time estimation has not been processed, returns 0 - * - * @return processing time estimate in microseconds - */ - - TInt64 GetFinalTimeEstimate() const; - - -protected: - -private: - - // constructL - void ConstructL(); - - // C++ constructor - CProcProcess(); - -private: - - // observer for callbacks - MProcProcessObserver* iObserver; - - // processorImpl owned by this - CAudProcessorImpl* iProcessorImpl; - - // song - const CAudSong* iSong; - - - // encoder - CProcEncoder* iEncoder; - - // buffer for getting data from encoder - HBufC8* iDecBuffer; - - // sometimes the encoder returns more than one AMR frame at a time - // still we need to return only one frame to the higher level - // this buffer is a temporary storage for extra AMR frames - - HBufC8* iAMRBuf; - - // progress - TInt iProgress; - - HBufC8* iAACBuf; - - // buffer for feeding the encoder - CMMFDataBuffer* iEncFeedBuffer; - - TInt64 iTimeEstimate; - - }; - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcTimeEstimateAO.h --- a/videoeditorengine/audioeditorengine/inc/ProcTimeEstimateAO.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCTIMEESTIMATEAO_H__ -#define __CPROCTIMEESTIMATEAO_H__ - -#include -#include "AudSong.h" -#include "AudCommon.h" -#include "ProcProcessAO.h" - -class CProcProcess; - - -class CProcTimeEstimateAO : public CActive - { - -public: - - static CProcTimeEstimateAO* NewL(); - - virtual ~CProcTimeEstimateAO(); - - /** - * - * Starts retrieving audio clip info - * - * @param aFilename filename of the input file - * @param aObserver observer to be notified of progress - * @param aProperties properties of the input file. - * Needs to be allocated by the caller, - * and will filled in as a result of calling - * this function - * @param aPriority priority of the operation - * - */ - TBool StartL(const CAudSong* aSong, MAudTimeEstimateObserver& aTEObserver); - void CancelTimeEstimate(); - - - -protected: - virtual void RunL(); - virtual void DoCancel(); - -private: - - void ConstructL(); - -private: - - - // C++ constructor - CProcTimeEstimateAO(); - - - // processing AC for getting frames - CProcProcess* iProcessingObject; - - // observer to notify - MAudTimeEstimateObserver* iTEObserver; - - // song - const CAudSong* iSong; - - }; - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcTools.h --- a/videoeditorengine/audioeditorengine/inc/ProcTools.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,301 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __PROCTOOLS_H__ -#define __PROCTOOLS_H__ - -#include -#include -#include "AudCommon.h" -#include "ProcConstants.h" -#include "Mp3API.h" - -class ProcTools - { - -public: - - /** - * Decimal number to binary number - */ - static TBool Dec2Bin(TUint8 aDec, TBuf8<8>& aBinary); - /** - * This version allocates memory (aBin), remember to release - */ - static TBool Dec2BinL(TUint32 aDec, HBufC8*& aBin); - - /** - * Binary number to decimal number - */ - static TBool Bin2Dec(const TDesC8& aBin, TUint& aDec); - - /** - * Decimal number in descriptor to unsigned integer - */ - static TBool Des2Dec(TDesC8& aDes, TUint& aDec); - - /** - * Decimal number in descriptor to binary descriptor - * allocates memory, the caller must release - */ - static TBool Des2BinL(const TDesC8& aDes, HBufC8*& aBin); - - /** - * Gets milliseconds(TInt) from microseconds (TTimeIntervalMicroSeconds) - * @param aMicroSeconds microseconds - * - * @return milliseconds - */ - - static TInt MilliSeconds(TTimeIntervalMicroSeconds aMicroSeconds); - - /** - * Gets microseconds (TTimeIntervalMicroSeconds) from milliseconds (TInt) - * @param aMilliSeconds milliseconds - * - * @return microiseconds - */ - - static TTimeIntervalMicroSeconds MicroSeconds(TInt aMilliSeconds); - - /** - * casts TInt64 to TInt (overflow possible, the user is resonsible!!) - * - * @param aInt64 TInt64 - * - * @return Tint - */ - - static TInt GetTInt(TInt64 aTInt64); - - - /** - * Retrieves a decimal number from a frame - * - * @param aFrame frame - * @param aBitFirst index of the first bit of the needed balue - * @param aLength number of bits in the needed value - * - * @return retrieved integer, if -1 then operation was unsuccessful - */ - static TInt GetValueFromFrame(const HBufC8* aFrame, TInt aBitFirst, TInt aLength); - - /** - * Retrieves a decimal number from a frame, whose bits are shuffled - * - * @param aFrame frame - * @param aBitRate bitrate - * @param aBitPositions bit position in a deshuffled frame - * @param aLength number of bits read - * - * @return retrieved integer - * - */ - static TInt GetValueFromShuffledAWBFrameL(const HBufC8* aFrame, TInt aBitRate, TInt aBitPosition, TInt aLength); - - static TBool SetValueToShuffledAWBFrame(TUint8 aNewValue, HBufC8* aFrame, - TInt aBitRate, TInt aBitPosition, TInt aLength); - - /** - * Retrieves a decimal number from a frame, whose bits are shuffled - * - * @param aFrame frame - * @param aBitPositions shuffling table - * @param TInt aSize length of aBitPositions - * - * @return retrieved integer, if -1 then operation was unsuccessful - * - */ - static TInt GetValueFromShuffledFrame(const HBufC8* aFrame, const TUint8 aBitPositions[], TInt aSize); - - - /** - * Writes a decimal number to a frame, whose bits are shuffled - * - * @param aFrame frame - * @param aNewValue value to be written - * @param aBitPositions bit indexes in order - * @param TInt aSize length of aBitPositions - * - * @return ETrue if successful - * - */ - static TBool SetValueToShuffledFrame(HBufC8* aFrame, TUint8 aNewValue, const TUint8 aBitPositions[], TInt aSize); - - /** - * Appends integers to a file separated by linefeeds - * Mostly for debugging purposes - * - * @param aArray array of integers to be written - * @param aFilename file name, created if doesn't exist, append otherwise - * - * @return ETrue if successful - */ - static TBool WriteValuesToFileL(const RArray& aArray, const TDesC& aFilename); - - /** - * Finds a closest match in a gain table - * used for scalar quantized gain tables - * - * @param aNewGain search key - * @param aGainTable gain table - * @param aTableSize gain table length - * - * @return index of the closest match - */ - static TUint8 FindNewIndexSQ(TInt aNewGain, const TInt aGainTable[], TInt aTableSize); - - /** - * Finds a closest match in a gain table - * used for vector quantized gain tables - * pitch: Q14. FC gain Q12 - * - * @param aNewGain search key - * @param aGainTable gain table - * @param aTableSize gain table length - * - * @return index of the closest match - */ - static TUint8 FindNewIndexVQ(TInt aNewGain, TInt aOldPitch, const TInt aGainTable[], TInt aTableSize); - - /** - * Finds a closest match in a gain table - * used for vector quantized gain tables - * pitch: Q14. FC gain Q11!! - * - * @param aNewGain search key - * @param aGainTable gain table - * @param aTableSize gain table length - * - * @return index of the closest match - */ - static TUint8 FindNewIndexVQ2(TInt aNewGain, TInt aOldPitch, const TInt aGainTable[], TInt aTableSize); - - - /** - * Finds a closest match in a gain table for 4.75 kBit/s - * - * @param aNewGain0 new gain of subframe 0 or 2 - * @param aOldPitch0 new pitch of subframe 0 or 2 - * @param aNewGain1 new gain of subframe 1 or 3 - * @param aNewGain1 new pitch of subframe 1 or 3 - * - */ - static TUint8 FindNewIndex475VQ(TInt aNewGain0, TInt aOldPitch0, TInt aNewGain1, TInt aOldPitch1); - - static TInt FindIndex(TInt aKey, const TInt aBitPositions[], TInt aTableLength); - - static TBool GenerateADTSHeaderL(TBuf8<7>& aHeader, TInt aFrameLength, TAudFileProperties aProperties); - - static TInt GetNextAMRFrameLength(const HBufC8* aFrame, TInt aPosNow); - - }; - - -/* -* -* One processing event represents a section in the output clip -* It includes the following information: -* - when the section starts (iPosition) -* - is the new section a result of a new clip (iCutIn == ETrue) -* or a result of an ending clip (iCutIn == EFalse) -* - what clips are supposed to be mixed from this processing event (iAllIndexes) -* - what is the clip starting or ending that is causing this processing event (iChangedIndex) -* -* -*/ - -class CProcessingEvent : public CBase - { - -public: - - - static CProcessingEvent* NewL(); - ~CProcessingEvent(); - /* - * Insert a new clip to this processing event - */ - void InsertIndex(TInt aIndex); - - /* - * Gets the clip index in CAudSong based on the clip index in processing event - */ - TInt GetIndex(TInt aProcessingEventIndex); - - /* - * Gets all clip indexes in this processing event - */ - TBool GetAllIndexes(RArray& aAllIndexes); - - /* - * Index count - */ - TInt IndexCount(); - - /* - * Find processing event index based on clip index - */ - TInt FindIndex(TInt aClipIndex); - - /* - * Remove processing event - */ - void RemoveIndex(TInt aProcessingEventIndex); - -public: - - //global position in milliseconds - TInt32 iPosition; - //true = cutIn, false = cutOut - TBool iCutIn; - - // there can be only one different clip in iAllIndexes in consecutive - // processing events: - // iChangedClipIndex is that index - TInt iChangedClipIndex; - - // compare starting times (used by a common ordering function) - static TInt Compare(const CProcessingEvent& c1, const CProcessingEvent& c2); - -private: - - void ConstructL(); - CProcessingEvent(); - - // indexes of all the clips that should be mixed - // after this processing events - RArray iAllIndexes; // -1 = silence - }; - - - -class AudioEngineUtilTools - { -public: - - /** - * Displays messages on a box - */ - static void AudioEngineMessageBox(const TDesC& aMessage); - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcVisProcessor.h --- a/videoeditorengine/audioeditorengine/inc/ProcVisProcessor.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __CPROCVISPROCESSOR_H__ -#define __CPROCVISPROCESSOR_H__ - -#include -#include -#include "AudClipInfo.h" -#include "AudCommon.h" -#include "AudSong.h" -#include "ProcInFileHandler.h" - -#include "ProcFrameHandler.h" - -#include "ProcTools.h" - -class CProcVisProcessor : public CBase - { - -public: - - /* - * Symbian constructors - */ - - static CProcVisProcessor* NewL(); - static CProcVisProcessor* NewLC(); - - ~CProcVisProcessor(); - - /** - * Performs all initializations needed for a clip visualization - * - * Can leave with one of the system wide error codes - * - * Possible panic code - * EVisualizationProcessAlreadyRunning - * - * @param aClip clip to be visualized - * @param aSize size of the visualization array (time resolution) - * - * @return void - * - */ - void VisualizeClipL(const CAudClipInfo* aClipInfo, TInt aSize); - - /** - * Visualizes one piece of clip - * - * Possible panic code - * EVisualizationProcessNotRunning - * - * @param aProgress output parameter to indicate progress in percents - * @return ETrue if visualization completed, EFalse otherwise - * - */ - TBool VisualizeClipPieceL(TInt &aProgress); - - /** - * Once visualization process has been completed, - * visualization array can be retrieved with this function - * NOTE: This function allocates memory and the caller - * is responsible for releasing it - * - * @param aVisualization visualization array - * @param aSize size of the visualization array - * - */ - void GetFinalVisualizationL(TInt8*& aVisualization, TInt& aSize); - - -private: - - // constructL - void ConstructL(); - - // C++ constructor - CProcVisProcessor(); - -private: - - // visualization size - TInt iVisualizationSize; - // array for visualization - TInt8* iVisualization; - // infilehandler for clip visualized - CProcInFileHandler *iInFile; - - // song - const CAudSong* iSong; - - // clip that is visualized - const CAudClipInfo* iClipInfo; - - // frame handler for getting gain - CProcFrameHandler* iFrameHandler; - - // how many percents have been written to visualization array - TInt iVisualizationWritten; - - // how many percents have been processed - TInt iVisualizationProcessed; - - // the number of frames altogether - TInt iFrameAmount; - - // how many frames have been processed - TInt iFramesProcessed; - - // current frame being processed - TInt iVisualizationPos; - - }; - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/ProcVisualizationAO.h --- a/videoeditorengine/audioeditorengine/inc/ProcVisualizationAO.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CPROCVISUALIZATIONAO_H__ -#define __CPROCVISUALIZATIONAO_H__ - -#include -#include "AudSong.h" -#include "AudObservers.h" - -#include "AudProcessorImpl.h" - -class MProcProcessObserver; -class CProcVisProcessor; - -class CProcVisualizationAO : public CActive - { - -public: - - static CProcVisualizationAO* NewL(); - - virtual ~CProcVisualizationAO(); - - /** - * Starts a clip visualization operation - * - * Can leave with one of the system wide error codes - * - * Possible panic code - * EVisualizationProcessAlreadyRunning - * - * @param aClip song to be visualized - * @param aSize size of the visualization array (time resolution) - * @param aObserver observer to be notified of progress - * - * @return void - * - */ - void StartClipVisualizationL(const CAudClipInfo* aClipInfo, TInt aSize, MAudVisualizationObserver& aObserver, TInt aPriority); - - /** - * Cancels a visualization operation - * - * Possible panic code - * EVisualizationProcessNotRunning - * - */ - void CancelVisualization(); - - /** - * Enumeration that represents the state of this object - */ - enum TVisualizationState - { - EProcGettingClipVisualization = 100, - EProcVisualizationIdle - }; - -protected: - virtual void RunL(); - virtual void DoCancel(); - -private: - - void ConstructL(); - -private: - - CProcVisualizationAO(); - - // visualization observer - MAudVisualizationObserver* iObserver; - - // visualization processor - CProcVisProcessor* iProcVisProcessor; - // visualization state - TVisualizationState iVisualizationState; - - // clipinfo visualized - const CAudClipInfo* iClipInfo; - - // visualization size - TInt iSize; - - // previous progress value sent to the observer - TInt iPreviousProgressValue; - }; - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/RateConverter.h --- a/videoeditorengine/audioeditorengine/inc/RateConverter.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __CRateConverter_H__ -#define __CRateConverter_H__ - -#include - -#include "resampler_rate_conversion_input_driven_int16.h" - -class CRateConverter : public CBase - { - -public: - - /* - * Symbian constructors - * - */ - static CRateConverter* NewL(TInt aFromSampleRate, TInt aToSampleRate, TInt aFromChannels, TInt aToChannels); - - static CRateConverter* NewLC(TInt aFromSampleRate, TInt aToSampleRate, TInt aFromChannels, TInt aToChannels); - - /* - * Destructor - */ - ~CRateConverter(); - - /* - * Initialize the rate converter - * - * @param aInputBufferSize Max size of the input buffer in number of samples - * @return ETrue if successful - * - */ - TBool InitL(TInt aInputBufferSize); - - /* - * Does rate and channel conversion for given buffer - * - * @param aInput Pointer to input buffer (16-bit samples) - * @param aOutput Pointer to output buffer (16-bit samples) - * @param aInputSampleCount Number of samples in the input buffer - * @return Number of samples in the output buffer - */ - TInt ConvertBufferL(TInt16* aInput, TInt16* aOutput, TInt aInputSampleCount); - - /* - * Returns the size of the output buffer - * - */ - TInt GetOutputBufferSize() { return iOuputBlockSize; } - - -protected: - - // constructL - void ConstructL(); - - // C++ constructor - CRateConverter(TInt aFromSampleRate, TInt aToSampleRate, TInt aFromChannels, TInt aToChannels); - -private: - - /* - * Does internal initialization - * - */ - TBool DoInitL(TInt aInputBufferSize); - - /* - * Does the actual conversion - * - */ - TInt DoConvertL(TInt16** aInput, TInt aInputSampleCount); - - /* - * Returns pointer to the output buffer - * - */ - TInt16** GetOutputBuffer() { return iOutBuffer; } - -private: - - // Another converter incase two phase converting is needed - CRateConverter* iChild; - - // The actual converter - RESAMPLER_RateConversionInputDrivenInt16* iConverter; - - // Input data for rate converter - TInt16** iInBuffer; - - // Output data from rate converter - TInt16** iOutBuffer; - - // Temp buffer used by converter - TInt8* iScratchBuffer; - - // Size of the input buffer - TInt iInputBlockSize; - - // Size of the output buffer - TInt iOuputBlockSize; - - // Number of channels used in converter - TInt iChannels; - - // Samplerate to convert from - TInt iFromSampleRate; - - // Samplerate to convert to - TInt iToSampleRate; - - // Number of channels in input - TInt iFromChannels; - - // Number of channels in output - TInt iToChannels; - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/aedproctimeestimate.h --- a/videoeditorengine/audioeditorengine/inc/aedproctimeestimate.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __AEDPROCTIME_H__ -#define __AEDPROCTIME_H__ - - -// complexity constants; to be moved to some header -const TReal KAEDMutingComplFactor = 0.02; -const TReal KAEDAMRDecComplFactor = 0.1; -const TReal KAEDAACDecComplFactor = 0.1; -const TReal KAEDAACStereoDecAddComplFactor = 0.1; -const TReal KAEDAMRWBDecComplFactor = 0.1; -const TReal KAEDMP3DecComplFactor = 0.2; -const TReal KAEDWavDecComplFactor = 0.02; -const TReal KAEDAMREncComplFactor = 0.5; -const TReal KAEDAACEncComplFactor = 0.3; -const TReal KAEDAACStereoEncAddComplFactor = 0.2; -const TReal KAEDBitstreamProcComplFactor = 0.05; -const TReal KAEDPassThroughComplFactor = 0.02; - -#endif // __AEDPROCTIME_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/inc/audconstants.h --- a/videoeditorengine/audioeditorengine/inc/audconstants.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Common internal constants for audio. -* -*/ - - - -#ifndef __AUDCONSTANTS_H__ -#define __AUDCONSTANTS_H__ - - - -// CONSTANTS - -const TInt KAedSampleRate8kHz = 8000; -const TInt KAedSampleRate11kHz = 11025; -const TInt KAedSampleRate16kHz = 16000; -const TInt KAedSampleRate22kHz = 22050; -const TInt KAedSampleRate24kHz = 24000; -const TInt KAedSampleRate32kHz = 32000; -const TInt KAedSampleRate44kHz = 44100; -const TInt KAedSampleRate48kHz = 48000; - -const TInt KAedBitRateAMR = 12200; -const TInt KAedBitRateAAC16kHz = 48000; -const TInt KAedBitRateAAC48kHz = 192000; - -const TInt KAedAACMinBitRateMultiplier = 1; // min bitrate is 1 bit per sample -const TInt KAedAACMaxBitRateMultiplier = 6; // max bitrate is 6 bits per sample - -const TInt KAedAMRFrameDuration = 20000; - -const TInt KAedSizeAACBuffer = 2048; -const TInt KAedSizeAACStereoBuffer = 4096; -const TInt KAedMaxFeedBufferSize = 4096; -const TInt KAedMaxAACFrameLengthPerChannel = 768; -const TInt KAedMaxAMRFrameLength = 32; -const TInt KAedMaxAWBFrameLength = 61; -const TInt KAedMaxMP3FrameLength = 1440; -const TInt KAedSizeAMRBuffer = 320; -const TInt KAedSizeAWBBuffer = 640; - -const TInt KAedMinAMRBitRate = 400; // voice activity detection creates at least 1 byte per frame => 50 bytes/s = 400 bits/s -const TInt KAedMaxAMRBitRate = 12200; -const TInt KAedNumSupportedAACSampleRates = 2; -const TInt KAedSupportedAACSampleRates[KAedNumSupportedAACSampleRates] = {KAedSampleRate16kHz, KAedSampleRate48kHz}; - -// Max resolution for visualization; this should cover > 30 minute clip if 5 samples per sec are requested -const TInt KAedMaxVisualizationResolution = 10000; - -// UId of the AAC CMMFCodec encoder -const TUid KAedAACEncSWCodecUid = {0x1020382F}; //KAdvancedUidCodecPCM16ToAAC -// UId of the AMR-NB CMMFCodec encoder -const TUid KAedAMRNBEncSWCodecUid = {0x101FAF68}; //KAdvancedUidCodecPCM16ToAMR - -// UId of the AAC CMMFCodec decoder -const TUid KMmfAACDecSWCodecUid = {0x101FAF81}; //KMmfUidCodecAACToPCM16 -// UId of the AMR-NB CMMFCodec decoder -const TUid KMmfAMRNBDecSWCodecUid = {0x101FAF67}; //KAdvancedUidCodecAMRToPCM16 -// UId of the eAAC+ CMMFCodec decoder -const TUid KMmfUidCodecEnhAACPlusToPCM16 = {0x10207AA9}; -// UId of the AMR-WB CMMFCodec decoder -const TUid KMmfAMRWBDecSWCodecUid = {0x101FAF5E}; -// UId of the MP3 CMMFCodec decoder -const TUid KMmfAdvancedUidCodecMP3ToPCM16 = {0x101FAF85}; - -// FourCC for the eAAC+ -const TUint32 KMMFFourCCCodeAACPlus = 0x43414520; //(' ','E','A','C') - -// Used in CProcInFileHandler::GetGainNow() to reduce positive gains -const TInt KAedPositiveGainDivider = 5; - - -#endif // __AUDCONSTANTS_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_clip.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_clip.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,149 +0,0 @@ -#ifndef __RESAMPLER_CLIP_H__ -#define __RESAMPLER_CLIP_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_common_defs.h" -#include "resampler_data_types.h" - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** @file - - @ingroup common_dsp - - Helper functions to limit output to different numerical ranges. - - The header file 'resampler_clip.h' contains helper (inline) functions for - limiting the input to a specified numerical range, or more specifically, - to a specified number of bits. These functions are especially useful in - fixed point DSP units for limiting the output range. -*/ - -/** Clip function for signed 16-bit integer range. - - This function limits its input to the range -32768 <= output <= 32767. - The implementation uses the traditional conditionals to check for - overflows.. -*/ -static FORCEINLINE int32 RESAMPLER_Clip16(int32 input) -{ - input = input < (-32768) ? (-32768) : input; - input = input > 32767 ? 32767 : input; - return input; -} - -/** Shift-and-Clip function for signed 16-bit integer range. - - This function limits its input to the range -32768 <= output <= 32767 - after first shifting the input to the right by the given number of bits. -*/ -static FORCEINLINE int32 RESAMPLER_RightShiftAndClip16(int32 input, int rightShift) -{ - input = input >> rightShift; - return RESAMPLER_Clip16(input); -} - -/** Shift-round-and-clip function for signed 16-bit integer range. - - This function limits its input to the range -32768 <= output <= 32767 - after first shifting the input to the right by the given number of bits - with rounding. -*/ -static FORCEINLINE int32 RESAMPLER_RightShiftRoundAndClip16(int32 input, int rightShift) -{ - if (rightShift > 0) - { - input += (int32)1 << (rightShift - 1); - } - input = input >> rightShift; - return RESAMPLER_Clip16(input); -} - -/** Saturated 16-bit absolute value. - - This function calculates a saturated 16-bit output value from a 16-bit - input RESAMPLER_AbsAndClip16(0x8000) => 0x7FFF. -*/ -static FORCEINLINE int16 RESAMPLER_AbsSaturate16(int16 input) -{ - return (int16)RESAMPLER_Clip16(labs((long)input)); -} - -/** Saturated addition of two 16-bit values. -*/ -static FORCEINLINE int16 RESAMPLER_AddSaturate16(int16 input1, int16 input2) -{ - return (int16)RESAMPLER_Clip16((int32)input1 + input2); -} - - -/** Saturated subtraction of two 16-bit values. -*/ -static FORCEINLINE int16 RESAMPLER_SubSaturate16(int16 input1, int16 input2) -{ - return (int16)RESAMPLER_Clip16((int32)input1 - input2); -} - -/** Saturated addition of two 32-bit values. -*/ -static FORCEINLINE int32 RESAMPLER_AddSaturate32(int32 input1, int32 input2) -{ - /* int40 is the shortest "long long" available on all - * the current platforms - */ - int40 res = input1; - res += input2; - if (res > (int40)(2147483647L)) - { - res = (int40)(2147483647L); - } - if (res < (int40)(-2147483647L - 1)) - { - res = (int40)(-2147483647L - 1); - } - return (int32)res; -} - -/** Saturated subtraction of two 32-bit values. -*/ -static FORCEINLINE int32 RESAMPLER_SubSaturate32(int32 input1, int32 input2) -{ - int40 res = input1; - res -= input2; - if (res > (int40)(2147483647L)) - { - res = (int40)(2147483647L); - } - if (res < (int40)(-2147483647L - 1)) - { - res = (int40)(-2147483647L - 1); - } - return (int32)res; -} - -#ifdef __cplusplus -} -#endif - -#endif /* __RESAMPLER_CLIP_H__ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_common_defs.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_common_defs.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -#ifndef __RESAMPLER_COMMON_DEFS_H__ -#define __RESAMPLER_COMMON_DEFS_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -/* Definitions for the FORCEINLINE macro. This is makes some of the - * optimized versions far more easy to read. - */ - -#if (!defined(__WINSCW__)) -#define FORCEINLINE __forceinline - -#else -#define FORCEINLINE inline - -#endif // __WINSCW__ - -/* Definitions for the packed struct. - */ -#if (!defined(__WINSCW__)) -#undef PACKED_RVCT -#define PACKED_RVCT __packed -#undef PACKED_GCC -#define PACKED_GCC - -#else -#undef PACKED_RVCT -#define PACKED_RVCT -#undef PACKED_GCC -#define PACKED_GCC - -#endif // __WINSCW__ - -/* Definitions for the min and max macros */ -#define EAP_MAX(a, b) (((a)>=(b)) ? (a) : (b)) -#define EAP_MIN(a, b) (((a)<(b)) ? (a) : (b)) - -#undef FLT_MAX -#define FLT_MAX 3.40282347e+38F - - -/* Handle stuff. */ - -/** Declare a handle type corresponding to type @c aType. - * - * For example, calling this macro with @c aType being @c X declares - * handle type @c XHandle. */ -/* Defining handle types this way is safer than just typedef'ing void - * pointers, because the compiler is then able to catch more kinds of - * handle misusage. */ -#define DECLARE_HANDLE_TYPE(aType) \ - struct aType##HandleTag { int m_dummy; }; \ - typedef struct aType##HandleTag* aType##Handle - -/** @return A pointer to the instance of type @c aType, and associated - * with @c aHandle. */ -#define HANDLE_TO_PINST(aType, aHandle) ((aType*)aHandle) - -/** @return A handle associated with the pointer to the instance of type - * @c aType. */ -#define PINST_TO_HANDLE(aType, pInstance) ((aType##Handle)pInstance) - -#endif /* __RESAMPLER_COMMON_DEFS_H__ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_data_types.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_data_types.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -#ifndef __RESAMPLER_DATA_TYPES_H__ -#define __RESAMPLER_DATA_TYPES_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include - -/* Disable some warnings so that code compiles cleanly with highest - * warning levels. These are all related to function inlining. - */ - - -/* Disable warnings for Windows and WINS compilations */ -#if defined(_MSC_VER) -/* unreferenced inline function has been removed */ -#pragma warning(disable: 4514) - -/* function not inlined */ -#pragma warning(disable: 4710) - -/* selected for automatic inline expansion */ -#pragma warning(disable: 4711) -#endif - -/** @ingroup types - -@file resampler_data_types.h - -A header file for sized integer types. - - -*/ - -typedef signed short int int16; -typedef signed long int int24; -typedef signed int int32; - -typedef signed long long int int40; -typedef signed long long int int48; -typedef signed long long int int64; - -typedef unsigned short int uint16; -typedef unsigned long int uint24; -typedef unsigned int uint32; - -typedef unsigned long long int uint40; -typedef unsigned long long int uint48; -typedef unsigned long long int uint64; - -#define RESAMPLER_INT16_MAX ((int16)32767) -#define RESAMPLER_INT16_MIN ((int16)(-32767 - 1)) -#define RESAMPLER_INT24_MAX (8388607) -#define RESAMPLER_INT24_MIN (-8388607 - 1) -#define RESAMPLER_INT32_MAX (2147483647) -#define RESAMPLER_INT32_MIN (-2147483647 - 1) - - -typedef enum RESAMPLER_DataType -{ - /** Sixteen-bit data type (Q15) */ - RESAMPLER_DATA_TYPE_INT16 = 0, - /** Twenty-four-bit data type (Q19) */ - RESAMPLER_DATA_TYPE_INT24, - /** Thirty-two-bit data type (Q23) */ - RESAMPLER_DATA_TYPE_INT32, - /** Thirty-two-bit data type (Q15) */ - RESAMPLER_DATA_TYPE_INT32_Q15, - /** Floating-point data type */ - RESAMPLER_DATA_TYPE_FLOAT, - /** Number of different data types */ - RESAMPLER_DATA_TYPE_COUNT -} RESAMPLER_DataType; - -/** @return A string that describes @c aType. - * - * @pre @c aType is a valid instance of @c RESAMPLER_DataType. */ -const char* RESAMPLER_DataType_AsString(RESAMPLER_DataType aType); - -/** @return The @c RESAMPLER_TestDataType that corresponds to @c pString. - * - * @pre @c pString is equal to "int16", "int24", "int32", "int32Q15", or "float. */ -RESAMPLER_DataType RESAMPLER_DataType_FromString(const char* pString); - -/** @return Whether @c aType is a valid instance of - * @c RESAMPLER_DataType. */ -int RESAMPLER_DataType_IsValid(RESAMPLER_DataType aType); - -/** @return The size, in bytes, of an element of type @c aType. - * - * @pre @c aType is a valid instance of @c RESAMPLER_DataType. */ -size_t RESAMPLER_DataType_Size(RESAMPLER_DataType aType); - -#endif /* __RESAMPLER_DATA_TYPES_H__ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_rate_conversion_input_driven_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_rate_conversion_input_driven_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,187 +0,0 @@ -#ifndef __RESAMPLER_RATE_CONVERSION_INPUT_DRIVEN_INT16_H__ -#define __RESAMPLER_RATE_CONVERSION_INPUT_DRIVEN_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/** @ingroup rate_conversion - -Base class for input-driven sampling rate conversion. - -*/ - -#include "resampler_data_types.h" -#include "resampler_rate_conversion_quality.h" - -class RESAMPLER_RateConversionInputDrivenInt16 -{ - -public: - - /** @name Construction & Destruction */ - - //@{ - - /** This method checks if the desired conversion is available. - - @param[in] inRate Input sampling rate - @param[in] outRate Output sampling rate - @param[in] channelCount Number of audio channels - */ - static bool RateSupported(float inRate, - float outRate, - int channelCount); - - /** This method creates a sampling rate converter for input-driven - operation. - - @param[in] inRate Input sampling rate - @param[in] outRate Output sampling rate - @param[in] channelCount Number of audio channels - */ - static RESAMPLER_RateConversionInputDrivenInt16 * New(float inRate, - float outRate, - int channelCount); - - /** Constructor - */ - - RESAMPLER_RateConversionInputDrivenInt16() { ; } - - /** Destructor - */ - - virtual ~RESAMPLER_RateConversionInputDrivenInt16() { ; } - - //@} - - - /** @name Object lifetime methods */ - - //@{ - - /** Initializes the converter. - - This method initializes the sampling rate converter for input-driven - operation. Calling this method twice for the same converter instance - is considered a programming error, and behaviour in that case is - undefined. - - @return true if successful false otherwise - */ - - virtual bool InitInputDriven() = 0; - - //@} - - /** @name Operation */ - - //@{ - - /** Set the quality mode for the subsequent operations */ - - virtual bool SetQualityInputDriven(int mode); - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelInputDriven(int channel); - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelInputDriven(int channel); - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the converter needs to be - able to handle in a single call to the processing functions. - - @param[in] maxInputBlockSize Maximum input blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedInputDriven(int maxInputBlockSize) const = 0; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter. The caller of this - function is responsible of allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferInputDriven(char *buffer) = 0; - - /** Get the maximum number of output samples for a given input sample count - - This method returns the maximum number of output samples the converter - can ever produce from a given number of input samples. - - @param[in] inSamples Number of input samples - @return Maximum number of output samples - */ - - virtual int MaxOutputSampleCount(int inSamples) const = 0; - - /** Run the sampling rate conversion for a block of samples - - This method runs the actual sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. The - output buffers must have space for MaxOutputSampleCount(inSamples) audio - samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] inSamples The number of input samples to process - @return Number of output samples - */ - - virtual int ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples) = 0; - - //@} - -}; - -#endif // __RESAMPLER_RATE_CONVERSION_INPUT_DRIVEN_INT16_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_rate_conversion_output_driven_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_rate_conversion_output_driven_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,202 +0,0 @@ -#ifndef __RESAMPLER_RATE_CONVERSION_OUTPUT_DRIVEN_INT16_H__ -#define __RESAMPLER_RATE_CONVERSION_OUTPUT_DRIVEN_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/** @ingroup rate_conversion - -Base class for output-driven sampling rate conversion. - -*/ - -#include "resampler_data_types.h" -#include "resampler_rate_conversion_quality.h" - - -class RESAMPLER_RateConversionOutputDrivenInt16 -{ -public: - - /** @name Construction & Destruction */ - - //@{ - - /** This method checks if the desired conversion is available. - - @param[in] inRate Input sampling rate - @param[in] outRate Output sampling rate - @param[in] channelCount Number of audio channels - */ - static bool RateSupported(float inRate, - float outRate, - int channelCount); - - /** This method creates a sampling rate converter for input-driven - operation. - - @param[in] inRate Input sampling rate - @param[in] outRate Output sampling rate - @param[in] channelCount Number of audio channels - */ - - static RESAMPLER_RateConversionOutputDrivenInt16 * New(float inRate, - float outRate, - int channelCount); - - /** Constructor - */ - - RESAMPLER_RateConversionOutputDrivenInt16() { ; } - - /** Destructor - */ - - virtual ~RESAMPLER_RateConversionOutputDrivenInt16() { ; } - - //@} - - /** @name Object lifetime methods */ - - //@{ - - /** Initializes the converter. - - This method initializes the sampling rate converter for output-driven - operation. Calling this method twice for the same converter instance - is considered a programming error, and behaviour in that case is - undefined. - - @return true if successful false otherwise - */ - - virtual bool InitOutputDriven() = 0; - - //@} - - /** @name Operation */ - - //@{ - - /** Set the quality mode for the subsequent operations */ - - virtual bool SetQualityOutputDriven(int mode); - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelOutputDriven(int channel); - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelOutputDriven(int channel); - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the converter needs to be - able to handle in a single call to the processing functions. - - @param[in] maxOutputBlockSize Maximum output blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const = 0; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter. The caller of this - function is responsible of allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferOutputDriven(char *buffer) = 0; - - - /** Get the maximum number of input samples needed. - - This method returns the maximum number of input samples needed - for a given output sample count. - - @param[in] outSamples Number of output samples - @return Maximum number of input samples - */ - - virtual int MaxInputSampleCount(int outSamples) const = 0; - - /** Get the amount of samples needed for input. - - This method returns the amount of samples needed for converter input - given the number of output samples. This method must be called before - each call to the processing methods. It is a serious error to have - \a outSamples greater than the value set with ScratchMemoryNeedOutputDriven(). - - @param[in] outSamples Amount of samples the converter produces - @return number of input samples needed - */ - - virtual int InSamplesNeeded(int outSamples) = 0; - - /** Run the sampling rate conversion for a block of samples - - This method does the sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. - The input buffers MUST contain the amount of samples returned by - a previous call to InSamplesNeeded. Output buffers must have space - for \a outSamples audio samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] outSamples The number of samples the converter produces - @return Number of output samples - */ - - virtual int ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples) = 0; - - //@} - -}; - -#endif // __RESAMPLER_RATE_CONVERSION_OUTPUT_DRIVEN_INT16_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_rate_conversion_quality.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_rate_conversion_quality.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -#ifndef __RESAMPLER_RATE_CONVERSION_QUALITY_H__ -#define __RESAMPLER_RATE_CONVERSION_QUALITY_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/** @file - - @ingroup rate_conversion - - @brief Sample rate conversion quality modes - - -$Date: 2005/01/19 13:16:12 $ -*/ - -/** Worst quality */ -#define RESAMPLER_RATE_CONVERSION_QUALITY_ECONOMY 1 -/** Normal quality */ -#define RESAMPLER_RATE_CONVERSION_QUALITY_STANDARD 2 -/** Highest quality */ -#define RESAMPLER_RATE_CONVERSION_QUALITY_PREMIUM 3 - -#endif // __RESAMPLER_RATE_CONVERSION_QUALITY_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_44_to_48_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_44_to_48_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,327 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_44_TO_48_INT16_H__ -#define __RESAMPLER_SINC_CONV_44_TO_48_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_rate_conversion_input_driven_int16.h" -#include "resampler_rate_conversion_output_driven_int16.h" - -/** @ingroup rate_conversion - - Class for upsampling 16-bit audio from 44.1 kHz to 48kHz - -*/ - -class RESAMPLER_SincConv44To48Int16 : public RESAMPLER_RateConversionInputDrivenInt16, - public RESAMPLER_RateConversionOutputDrivenInt16 -{ - friend class RESAMPLER_RateConversionInputDrivenInt16; - friend class RESAMPLER_RateConversionOutputDrivenInt16; - -public: - - /** @name Destruction */ - - //@{ - - /** Destructor - */ - - virtual ~RESAMPLER_SincConv44To48Int16(); - - //@} - - /** @name Query methods */ - - //@{ - - static bool RateSupported(float inRate, float outRate) - { return (160 * inRate == 147 * outRate); } - - //@} - - /** @name Object lifetime methods */ - - //@{ - - /** Initializes the converter. - - This method initializes the sampling rate converter for input-driven - operation. - - @return true if successful false otherwise - */ - - virtual bool InitInputDriven(); - - /** Initializes the converter. - - This method initializes the sampling rate converter. The - initialization will be successful only if 3*inRate == outRate. - - @return true if successful false otherwise - */ - - virtual bool InitOutputDriven(); - - //@} - - /** @name Output-driven operation */ - - //@{ - - /** Set the quality mode for the subsequent operations */ - - virtual bool SetQualityOutputDriven(int mode); - - /** Set the quality mode for the subsequent operations */ - - virtual bool SetQualityInputDriven(int mode); - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelInputDriven(int channel); - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelInputDriven(int channel); - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelOutputDriven(int channel); - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelOutputDriven(int channel); - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the input driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxInputBlockSize Maximum input blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedInputDriven(int maxInputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when the converter is - used in output driven mode. . The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferInputDriven(char *buffer); - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the output driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxOutputBlockSize Maximum output blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when then converter is - used in output driven mode. The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferOutputDriven(char *buffer); - - /** Get the maximum number of input samples needed. - - This method returns the maximum number of input samples needed - for a given output sample count. - - @param[in] outSamples Number of output samples - @return Maximum number of input samples - */ - - virtual int MaxInputSampleCount(int outSamples) const; - - /** Get the amount of samples needed for input. - - This method returns the amount of samples needed for converter input - given the number of output samples. This method must be called before - each call to the processing methods. It is a serious error to have - \a outSamples greater than the value set with ScratchMemoryNeedOutputDriven(). - - @param[in] outSamples Amount of samples the converter produces - @return number of input samples needed - */ - - virtual int InSamplesNeeded(int outSamples); - - /** Get the maximum number of output samples for a given input sample count - - This method returns the maximum number of output samples the converter - can ever produce from a given number of input samples. The method assumes - that the converter be used either input-driven or output-driven; the - two modes should not be mixed. - - @param[in] inSamples Number of input samples - @return Maximum number of output samples - */ - - virtual int MaxOutputSampleCount(int inSamples) const; - - /** Run the sampling rate conversion for a block of samples - - This method runs the actual sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. The - output buffers must have space for MaxOutputSampleCount(inSamples) audio - samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] inSamples The number of input samples to process - @return Number of output samples - */ - - virtual int ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples); - - /** Run the sampling rate conversion for a block of samples - - This method does the sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. - The input buffers MUST contain the amount of samples returned by - a previous call to InSamplesNeeded. Output buffers must have space - for \a outSamples audio samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] outSamples The number of samples the converter produces - @return Number of output samples - */ - - virtual int ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples); - - //@} - -private: - - /** Constructor - */ - - RESAMPLER_SincConv44To48Int16(int channelCount); - - /** Disabled copy contructor - */ - RESAMPLER_SincConv44To48Int16(const RESAMPLER_SincConv44To48Int16 &); - - /** Initializes the converter. - - This method initializes the sampling rate converter. The - initialization will be successful only if 3*inRate == outRate. - - @return true if successful false otherwise - */ - - bool Init(); - - /** Deallocate all the allocated memory - - This methods deallocates all memory previously allocated by - InitOutputDriven(). Can be used both for recovering from a memory - allocation error and in destructor. - */ - void DeInit(); - - int16 **m_memBuffers; - int16 *m_scratchBuffer; - int m_channelCount; - int m_blockSize; - bool *m_channelEnabled; - - int m_inputSamples; - - int m_index1; - int m_index2; - - int m_zeroCrossings; - const int16 *m_filterMatrix; -}; - -#endif // __RESAMPLER_SINC_CONV_44_TO_48_INT16_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_44_to_48_tables_economy.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_44_to_48_tables_economy.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_44_TO_48_TABLES_ECONOMY_H__ -#define __RESAMPLER_SINC_CONV_44_TO_48_TABLES_ECONOMY_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_data_types.h" - -#define RESAMPLER_44_TO_48_ZERO_CROSSINGS_ECONOMY 8 - -extern const int16 RESAMPLER_44_TO_48_FILTERS_ECONOMY[161 * RESAMPLER_44_TO_48_ZERO_CROSSINGS_ECONOMY]; - -#endif // __RESAMPLER_SINC_CONV_44_TO_48_TABLES_ECONOMY_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_44_to_48_tables_premium.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_44_to_48_tables_premium.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_44_TO_48_TABLES_PREMIUM_H__ -#define __RESAMPLER_SINC_CONV_44_TO_48_TABLES_PREMIUM_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_data_types.h" - -#define RESAMPLER_44_TO_48_ZERO_CROSSINGS_PREMIUM 16 - -extern const int16 RESAMPLER_44_TO_48_FILTERS_PREMIUM[161 * RESAMPLER_44_TO_48_ZERO_CROSSINGS_PREMIUM]; - -#endif // __RESAMPLER_SINC_CONV_44_TO_48_TABLES_PREMIUM_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_44_to_48_tables_standard.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_44_to_48_tables_standard.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_44_TO_48_TABLES_STANDARD_H__ -#define __RESAMPLER_SINC_CONV_44_TO_48_TABLES_STANDARD_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_data_types.h" - -#define RESAMPLER_44_TO_48_ZERO_CROSSINGS_STANDARD 12 - -extern const int16 RESAMPLER_44_TO_48_FILTERS_STANDARD[161 * RESAMPLER_44_TO_48_ZERO_CROSSINGS_STANDARD]; - -#endif // __RESAMPLER_SINC_CONV_44_TO_48_TABLES_STANDARD_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_filter_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_filter_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_FILTER_INT16_H__ -#define __RESAMPLER_SINC_CONV_FILTER_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_common_defs.h" -#include "resampler_data_types.h" - -static FORCEINLINE int32 -RESAMPLER_SincConvFilterInt16(const int16 *signalBuf, - const int16 *filterPtr1, - const int16 *filterPtr2, - int length) -{ - - int32 newSample(0); - const int16 *bufferPtr1 = signalBuf; - const int16 *bufferPtr2 = signalBuf+1; - // Calculate the filter. - // Keep newSample in s1.30 format to reduce rounding errors - for (int l = length; l >0 ; l-=4) - { - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - } - return newSample; -} - -#endif /* __RESAMPLER_SINC_CONV_FILTER_INT16_H__ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_filter_three_to_one_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_filter_three_to_one_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_FILTER_THREE_TO_ONE_INT16_H__ -#define __RESAMPLER_SINC_CONV_FILTER_THREE_TO_ONE_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_common_defs.h" -#include "resampler_data_types.h" - -static FORCEINLINE int32 -RESAMPLER_SincConvFilterThreeToOneInt16(const int16 *signalBuf, - const int16 *filterPtr, - int length) -{ - int32 newSample((int32)(*filterPtr++) * signalBuf[0]); - - const int16 *bufferPtr1 = signalBuf - 1; - const int16 *bufferPtr2 = signalBuf + 1; - for (int l = length - 1; l > 0 ; l--) - { - // Calculate the filter. - // Keep newSample in s1.30 format to reduce rounding errors - int16 coeff = *filterPtr++; - newSample += (int32)coeff * (*bufferPtr1) + (int32)coeff * (*bufferPtr2); - bufferPtr1--; - bufferPtr2++; - } - - return newSample; -} - -#endif /* __RESAMPLER_SINC_CONV_FILTER_THREE_TO_ONE_INT16_H__ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_filter_two_to_one_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_filter_two_to_one_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_FILTER_TWO_TO_ONE_INT16_H__ -#define __RESAMPLER_SINC_CONV_FILTER_TWO_TO_ONE_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_common_defs.h" -#include "resampler_data_types.h" - -static FORCEINLINE int32 -RESAMPLER_SincConvFilterTwoToOneInt16(const int16 *signalBuf, - const int16 *filterPtr, - int length) -{ - int32 newSample((int32)signalBuf[0] << 14); - - const int16 *bufferPtr1 = signalBuf - 1; - const int16 *bufferPtr2 = signalBuf + 1; - for (int l = length; l >0 ; l--) - { - // Calculate the filter. - // Keep newSample in s1.30 format to reduce rounding errors - newSample += (int32)(*filterPtr) * (*bufferPtr1) + (int32)(*filterPtr) * (*bufferPtr2); - filterPtr++; - bufferPtr1 -= 2; - bufferPtr2 += 2; - } - - return newSample; -} - - -#endif /* __RESAMPLER_SINC_CONV_FILTER_TWO_TO_ONE_INT16_H__ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_one_to_three_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_one_to_three_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,334 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_ONE_TO_THREE_INT16_H__ -#define __RESAMPLER_SINC_CONV_ONE_TO_THREE_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_rate_conversion_input_driven_int16.h" -#include "resampler_rate_conversion_output_driven_int16.h" - - -/** @ingroup rate_conversion - - Class for upsampling 16-bit audio to three times the source frequency - -*/ - -class RESAMPLER_SincConvOneToThreeInt16 : public RESAMPLER_RateConversionInputDrivenInt16, - public RESAMPLER_RateConversionOutputDrivenInt16 -{ - friend class RESAMPLER_RateConversionInputDrivenInt16; - friend class RESAMPLER_RateConversionOutputDrivenInt16; - -public: - - /** @name Destruction */ - - //@{ - - /** Destructor - */ - - virtual ~RESAMPLER_SincConvOneToThreeInt16(); - - //@} - - /** @name Query methods */ - - //@{ - - static bool RateSupported(float inRate, float outRate) - { return (3*inRate == outRate); } - - //@} - - /** @name Object lifetime methods */ - - //@{ - - /** Initializes the converter. - - This method initializes the sampling rate converter for input-driven - operation. - - @return true if successful false otherwise - */ - - virtual bool InitInputDriven(); - - /** Initializes the converter. - - This method initializes the sampling rate converter for output-driven - operation. - - @return true if successful false otherwise - */ - - virtual bool InitOutputDriven(); - - //@} - - /** @name Input-driven operation */ - - //@{ - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelInputDriven(int channel) - { EnableChannel(channel); } - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelInputDriven(int channel) - { DisableChannel(channel); } - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the output driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxOutputBlockSize Maximum output blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when then converter is - used in output driven mode. The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferOutputDriven(char *buffer); - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the input driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxInputBlockSize Maximum input blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedInputDriven(int maxInputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when the converter is - used in output driven mode. . The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferInputDriven(char *buffer); - - /** Get the maximum number of output samples for a given input sample count - - This method returns the maximum number of output samples the converter - can ever produce from a given number of input samples. The method assumes - that the converter be used either input-driven or output-driven; the - two modes should not be mixed. - - @param[in] inSamples Number of input samples - @return Maximum number of output samples - */ - - virtual int MaxOutputSampleCount(int inSamples) const; - - /** Run the sampling rate conversion for a block of samples - - This method runs the actual sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. The - output buffers must have space for MaxOutputSampleCount(inSamples) audio - samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] inSamples The number of input samples to process - @return Number of output samples - */ - - virtual int ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples); - - //@} - - /** @name Output-driven operation */ - - //@{ - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelOutputDriven(int channel) - { EnableChannel(channel); } - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelOutputDriven(int channel) - { DisableChannel(channel); } - - /** Get the maximum number of input samples needed. - - This method returns the maximum number of input samples needed - for a given output sample count. - - @param[in] outSamples Number of output samples - @return Maximum number of input samples - */ - - virtual int MaxInputSampleCount(int outSamples) const; - - /** Get the amount of samples needed for input. - - This method returns the amount of samples needed for converter input - given the number of output samples. This method must be called before - each call to the processing methods. It is a serious error to have - \a outSamples greater than the value set with ScratchMemoryNeedOutputDriven(). - - @param[in] outSamples Amount of samples the converter produces - @return number of input samples needed - */ - - virtual int InSamplesNeeded(int outSamples); - - /** Run the sampling rate conversion for a block of samples - - This method does the sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. - The input buffers MUST contain the amount of samples returned by - a previous call to InSamplesNeeded. Output buffers must have space - for \a outSamples audio samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] outSamples The number of samples the converter produces - @return Number of output samples - */ - - virtual int ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples); - - //@} - -private: - - /** Constructor - */ - RESAMPLER_SincConvOneToThreeInt16(int channelCount); - - /** Disabled copy contructor - */ - RESAMPLER_SincConvOneToThreeInt16(const RESAMPLER_SincConvOneToThreeInt16 &); - - /** Initializes the converter. - - This method initializes the sampling rate converter. The - initialization will be successful only if 3*inRate == outRate. - - @return true if successful false otherwise - */ - - bool Init(); - - /** Deallocate all the allocated memory - - This methods deallocates all memory previously allocated by - Init(). Can be used both for recovering from a memory - allocation error and in destructor. - */ - void DeInit(); - - /** Enable one of the channels */ - void EnableChannel(int channel); - - /** Disable one of the channels */ - void DisableChannel(int channel); - - int16 **m_memBuffers; - int16 *m_scratchBuffer; - - const int16 *m_filter1; - const int16 *m_filter2; - int m_channelCount; - int m_blockSize; - bool *m_channelEnabled; - - int m_inputSamples; - - int m_state; -}; - -#endif // __RESAMPLER_SINC_CONV_ONE_TO_THREE_INT16_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_one_to_three_tables_standard.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_one_to_three_tables_standard.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_ONE_TO_THREE_TABLES_STANDARD_H__ -#define __RESAMPLER_SINC_CONV_ONE_TO_THREE_TABLES_STANDARD_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "resampler_data_types.h" - - -#define RESAMPLER_ONE_TO_THREE_ZERO_CROSSINGS_STANDARD 16 - -extern const int16 RESAMPLER_ONE_TO_THREE_FILTER1_STANDARD[RESAMPLER_ONE_TO_THREE_ZERO_CROSSINGS_STANDARD]; -extern const int16 RESAMPLER_ONE_TO_THREE_FILTER2_STANDARD[RESAMPLER_ONE_TO_THREE_ZERO_CROSSINGS_STANDARD]; - -#endif // __RESAMPLER_SINC_CONV_ONE_TO_THREE_TABLES_STANDARD_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_one_to_two_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_one_to_two_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,330 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_ONE_TO_TWO_INT16_H__ -#define __RESAMPLER_SINC_CONV_ONE_TO_TWO_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_rate_conversion_input_driven_int16.h" -#include "resampler_rate_conversion_output_driven_int16.h" - - -/** @ingroup rate_conversion - - @brief Sampling rate conversion implementation for upsampling by two. - -*/ - -class RESAMPLER_SincConvOneToTwoInt16 : public RESAMPLER_RateConversionInputDrivenInt16, - public RESAMPLER_RateConversionOutputDrivenInt16 -{ - friend class RESAMPLER_RateConversionInputDrivenInt16; - friend class RESAMPLER_RateConversionOutputDrivenInt16; - -public: - - /** @name Construction & Destruction */ - - //@{ - - /** Destructor - */ - - virtual ~RESAMPLER_SincConvOneToTwoInt16(); - - //@} - - /** @name Query methods */ - - //@{ - - static bool RateSupported(float inRate, float outRate) - { return (2*inRate == outRate); } - - //@} - - /** @name Object lifetime methods */ - - //@{ - - /** Initializes the converter. - - This method initializes the sampling rate converter for input-driven - operation. - - @return true if successful false otherwise - */ - - virtual bool InitInputDriven(); - - /** Initializes the converter. - - This method initializes the sampling rate converter for output-driven - operation. - - @return true if successful false otherwise - */ - - virtual bool InitOutputDriven(); - - //@} - - /** @name Input-driven operation */ - - //@{ - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelInputDriven(int channel) - { EnableChannel(channel); } - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelInputDriven(int channel) - { DisableChannel(channel); } - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the input driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxInputBlockSize Maximum input blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedInputDriven(int maxInputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when the converter is - used in output driven mode. . The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferInputDriven(char *buffer); - - /** Get the maximum number of input samples needed. - - This method returns the maximum number of input samples needed - for a given output sample count. - - @param[in] outSamples Number of output samples - @return Maximum number of input samples - */ - - virtual int MaxInputSampleCount(int outSamples) const; - - /** Get the amount of samples needed for input. - - This method returns the amount of samples needed for converter input - given the number of output samples. This method must be called before - each call to the processing methods. It is a serious error to have - \a outSamples greater than the value set with ScratchMemoryNeedOutputDriven(). - - @param[in] outSamples Amount of samples the converter produces - @return number of input samples needed - */ - - virtual int InSamplesNeeded(int outSamples); - - /** Run the sampling rate conversion for a block of samples - - This method runs the actual sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. The - output buffers must have space for MaxOutputSampleCount(inSamples) audio - samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] inSamples The number of input samples to process - @return Number of output samples - */ - - virtual int ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples); - - //@} - - /** @name Output-driven operation */ - - //@{ - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelOutputDriven(int channel) - { EnableChannel(channel); } - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelOutputDriven(int channel) - { DisableChannel(channel); } - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the output driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxOutputBlockSize Maximum output blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when then converter is - used in output driven mode. The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferOutputDriven(char *buffer); - - /** Get the maximum number of output samples for a given input sample count - - This method returns the maximum number of output samples the converter - can ever produce from a given number of input samples. The method assumes - that the converter be used either input-driven or output-driven; the - two modes should not be mixed. - - @param[in] inSamples Number of input samples - @return Maximum number of output samples - */ - - virtual int MaxOutputSampleCount(int inSamples) const; - - /** Run the sampling rate conversion for a block of samples - - This method does the sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. - The input buffers MUST contain the amount of samples returned by - a previous call to InSamplesNeeded. Output buffers must have space - for \a outSamples audio samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] outSamples The number of samples the converter produces - @return Number of output samples - */ - - virtual int ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples); - - //@} - -private: - - /** Constructor - */ - RESAMPLER_SincConvOneToTwoInt16(int channelCount); - - /** Disabled copy contructor - */ - RESAMPLER_SincConvOneToTwoInt16(const RESAMPLER_SincConvOneToTwoInt16 &); - - /** Initializes the converter. - - This method initializes the sampling rate converter. The - initialization will be successful only if 2*inRate == outRate. - - @return true if successful false otherwise - */ - - bool Init(); - - /** Deallocate all the allocated memory - - This methods deallocates all memory previously allocated by - Init(). Can be used both for recovering from a memory - allocation error and in destructor. - */ - void DeInit(); - - /** Enable one of the channels */ - void EnableChannel(int channel); - - /** Disable one of the channels */ - void DisableChannel(int channel); - - int16 **m_memBuffers; - int16 *m_scratchBuffer; - const int16 *m_filter; - int m_channelCount; - int m_blockSize; - bool *m_channelEnabled; - - int m_state; -}; - -#endif // __RESAMPLER_SINC_CONV_ONE_TO_TWO_INT16_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_one_to_two_tables_standard.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_one_to_two_tables_standard.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_ONE_TO_TWO_TABLES_STANDARD_H__ -#define __RESAMPLER_SINC_CONV_ONE_TO_TWO_TABLES_STANDARD_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "resampler_data_types.h" - - -#define RESAMPLER_ONE_TO_TWO_ZERO_CROSSINGS_STANDARD 16 - -extern const int16 RESAMPLER_ONE_TO_TWO_FILTERS_STANDARD[RESAMPLER_ONE_TO_TWO_ZERO_CROSSINGS_STANDARD]; - -#endif // __RESAMPLER_SINC_CONV_ONE_TO_TWO_TABLES_STANDARD_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_three_to_one_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_three_to_one_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,332 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_THREE_TO_ONE_INT16_H__ -#define __RESAMPLER_SINC_CONV_THREE_TO_ONE_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_rate_conversion_input_driven_int16.h" -#include "resampler_rate_conversion_output_driven_int16.h" - -/** @ingroup rate_conversion - - Class for downsampling 16-bit audio in 3 to 1 ratio -*/ - -class RESAMPLER_SincConvThreeToOneInt16 : public RESAMPLER_RateConversionInputDrivenInt16, - public RESAMPLER_RateConversionOutputDrivenInt16 -{ - friend class RESAMPLER_RateConversionOutputDrivenInt16; - friend class RESAMPLER_RateConversionInputDrivenInt16; - -public: - - /** @name Destruction */ - - //@{ - - /** Destructor - */ - - virtual ~RESAMPLER_SincConvThreeToOneInt16(); - - //@} - - /** @name Query methods */ - - //@{ - - static bool RateSupported(float inRate, float outRate) - { return (inRate == 3*outRate ); } - - //@} - - /** @name Object lifetime methods */ - - //@{ - - /** Initializes the converter. - - This method initializes the sampling rate converter for output-driven - operation. The initialization will be successful only if - inRate == 2*outRate. - - @return true if successful false otherwise - */ - - virtual bool InitOutputDriven(); - - /** Initializes the converter. - - This method initializes the sampling rate converter for input-driven - operation. - - @return true if successful false otherwise - */ - - virtual bool InitInputDriven(); - - //@} - - /** @name Input-driven operation */ - - //@{ - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelInputDriven(int channel) - { DisableChannel(channel); } - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelInputDriven(int channel) - { EnableChannel(channel); } - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the input driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxInputBlockSize Maximum input blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedInputDriven(int maxInputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when then converter is - used in input driven mode. The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferInputDriven(char *buffer); - - /** Get the maximum number of input samples needed. - - This method returns the maximum number of input samples needed - for a given output sample count. - - @param[in] outSamples Number of output samples - @return Maximum number of input samples - */ - - virtual int MaxInputSampleCount(int outSamples) const; - - /** Get the amount of samples needed for input. - - This method returns the amount of samples needed for converter input - given the number of output samples. This method must be called before - each call to the processing methods. It is a serious error to have - \a outSamples greater than the value set with ScratchMemoryNeedOutputDriven(). - - @param[in] outSamples Amount of samples the converter produces - @return number of input samples needed - */ - - virtual int InSamplesNeeded(int outSamples); - - /** Run the sampling rate conversion for a block of samples - - This method runs the actual sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. The - output buffers must have space for MaxOutputSampleCount(inSamples) audio - samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] inSamples The number of input samples to process - @return Number of output samples - */ - - virtual int ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples); - - //@} - - /** @name Output-driven operation */ - - //@{ - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelOutputDriven(int channel) - { EnableChannel(channel); } - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelOutputDriven(int channel) - { DisableChannel(channel); } - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the output driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxOutputBlockSize Maximum output blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when then converter is - used in output driven mode. The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferOutputDriven(char *buffer); - - /** Get the maximum number of output samples for a given input sample count - - This method returns the maximum number of output samples the converter - can ever produce from a given number of input samples. The method assumes - that the converter be used either input-driven or output-driven; the - two modes should not be mixed. - - @param[in] inSamples Number of input samples - @return Maximum number of output samples - */ - - virtual int MaxOutputSampleCount(int inSamples) const; - - /** Run the sampling rate conversion for a block of samples - - This method does the sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. - The input buffers MUST contain the amount of samples returned by - a previous call to InSamplesNeeded. Output buffers must have space - for \a outSamples audio samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] outSamples The number of samples the converter produces - @return Number of output samples - */ - - virtual int ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples); - - //@} - -private: - - /** Constructor - */ - - RESAMPLER_SincConvThreeToOneInt16(int channelCount); - - /** Disabled copy contructor - */ - RESAMPLER_SincConvThreeToOneInt16(const RESAMPLER_SincConvThreeToOneInt16 &); - - /** Initializes the converter. - - This method initializes the sampling rate converter. The - initialization will be successful only if 2*inRate == outRate. - - @return true if successful false otherwise - */ - - bool Init(); - - /** Deallocate all the allocated memory - - This methods deallocates all memory previously allocated by - InitOutputDriven(). Can be used both for recovering from a memory - allocation error and in destructor. - */ - void DeInit(); - - /** Enable one of the channels */ - void EnableChannel(int channel); - - /** Disable one of the channels */ - void DisableChannel(int channel); - - int16 **m_memBuffers; - int16 *m_scratchBuffer; - int m_channelCount; - int m_blockSize; - bool *m_channelEnabled; - - int m_state; - - int m_coeffCount; - const int16 *m_filterMatrix; -}; - -#endif // __RESAMPLER_SINC_CONV_THREE_TO_ONE_INT16_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_three_to_one_tables_standard.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_three_to_one_tables_standard.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_THREE_TO_ONE_TABLES_STANDARD_H__ -#define __RESAMPLER_SINC_CONV_THREE_TO_ONE_TABLES_STANDARD_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_data_types.h" - -#define RESAMPLER_THREE_TO_ONE_COEFF_COUNT_STANDARD 57 - -extern const int16 RESAMPLER_THREE_TO_ONE_FILTERS_STANDARD[ RESAMPLER_THREE_TO_ONE_COEFF_COUNT_STANDARD ]; - - -#endif // __RESAMPLER_SINC_CONV_THREE_TO_ONE_TABLES_STANDARD_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_two_to_one_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_two_to_one_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,334 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_TWO_TO_ONE_INT16_H__ -#define __RESAMPLER_SINC_CONV_TWO_TO_ONE_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_rate_conversion_input_driven_int16.h" -#include "resampler_rate_conversion_output_driven_int16.h" - -/** @ingroup rate_conversion - - Class for downsampling 16-bit audio in 2 to 1 ratio - - Copyright (c) 2001-2006, Nokia -*/ - -class RESAMPLER_SincConvTwoToOneInt16 : public RESAMPLER_RateConversionInputDrivenInt16, - public RESAMPLER_RateConversionOutputDrivenInt16 -{ - friend class RESAMPLER_RateConversionOutputDrivenInt16; - friend class RESAMPLER_RateConversionInputDrivenInt16; - -public: - - /** @name Destruction */ - - //@{ - - /** Destructor - */ - - virtual ~RESAMPLER_SincConvTwoToOneInt16(); - - //@} - - /** @name Query methods */ - - //@{ - - static bool RateSupported(float inRate, float outRate) - { return (inRate == 2*outRate ); } - - //@} - - /** @name Object lifetime methods */ - - //@{ - - /** Initializes the converter. - - This method initializes the sampling rate converter for output-driven - operation. The initialization will be successful only if - inRate == 2*outRate. - - @return true if successful false otherwise - */ - - virtual bool InitOutputDriven(); - - /** Initializes the converter. - - This method initializes the sampling rate converter for input-driven - operation. - - @return true if successful false otherwise - */ - - virtual bool InitInputDriven(); - - //@} - - /** @name Input-driven operation */ - - //@{ - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelInputDriven(int channel) - { DisableChannel(channel); } - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelInputDriven(int channel) - { EnableChannel(channel); } - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the input driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxInputBlockSize Maximum input blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedInputDriven(int maxInputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when then converter is - used in input driven mode. The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferInputDriven(char *buffer); - - /** Get the maximum number of input samples needed. - - This method returns the maximum number of input samples needed - for a given output sample count. - - @param[in] outSamples Number of output samples - @return Maximum number of input samples - */ - - virtual int MaxInputSampleCount(int outSamples) const; - - /** Get the amount of samples needed for input. - - This method returns the amount of samples needed for converter input - given the number of output samples. This method must be called before - each call to the processing methods. It is a serious error to have - \a outSamples greater than the value set with ScratchMemoryNeedOutputDriven(). - - @param[in] outSamples Amount of samples the converter produces - @return number of input samples needed - */ - - virtual int InSamplesNeeded(int outSamples); - - /** Run the sampling rate conversion for a block of samples - - This method runs the actual sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. The - output buffers must have space for MaxOutputSampleCount(inSamples) audio - samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] inSamples The number of input samples to process - @return Number of output samples - */ - - virtual int ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples); - - //@} - - /** @name Output-driven operation */ - - //@{ - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelOutputDriven(int channel) - { EnableChannel(channel); } - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelOutputDriven(int channel) - { DisableChannel(channel); } - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the output driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxOutputBlockSize Maximum output blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when then converter is - used in output driven mode. The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferOutputDriven(char *buffer); - - /** Get the maximum number of output samples for a given input sample count - - This method returns the maximum number of output samples the converter - can ever produce from a given number of input samples. The method assumes - that the converter be used either input-driven or output-driven; the - two modes should not be mixed. - - @param[in] inSamples Number of input samples - @return Maximum number of output samples - */ - - virtual int MaxOutputSampleCount(int inSamples) const; - - /** Run the sampling rate conversion for a block of samples - - This method does the sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. - The input buffers MUST contain the amount of samples returned by - a previous call to InSamplesNeeded. Output buffers must have space - for \a outSamples audio samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] outSamples The number of samples the converter produces - @return Number of output samples - */ - - virtual int ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples); - - //@} - -private: - - /** Constructor - */ - - RESAMPLER_SincConvTwoToOneInt16(int channelCount); - - /** Disabled copy contructor - */ - RESAMPLER_SincConvTwoToOneInt16(const RESAMPLER_SincConvTwoToOneInt16 &); - - /** Initializes the converter. - - This method initializes the sampling rate converter. The - initialization will be successful only if 2*inRate == outRate. - - @return true if successful false otherwise - */ - - bool Init(); - - /** Deallocate all the allocated memory - - This methods deallocates all memory previously allocated by - InitOutputDriven(). Can be used both for recovering from a memory - allocation error and in destructor. - */ - void DeInit(); - - /** Enable one of the channels */ - void EnableChannel(int channel); - - /** Disable one of the channels */ - void DisableChannel(int channel); - - int16 **m_memBuffers; - int16 *m_scratchBuffer; - int m_channelCount; - int m_blockSize; - bool *m_channelEnabled; - - int m_state; - - int m_zeroCrossings; - const int16 *m_filterMatrix; -}; - -#endif // __RESAMPLER_SINC_CONV_TWO_TO_ONE_INT16_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_two_to_one_tables_standard.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_two_to_one_tables_standard.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_TWO_TO_ONE_TABLES_STANDARD_H__ -#define __RESAMPLER_SINC_CONV_TWO_TO_ONE_TABLES_STANDARD_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_data_types.h" - -#define RESAMPLER_TWO_TO_ONE_ZERO_CROSSINGS_STANDARD 16 - -extern const int16 RESAMPLER_TWO_TO_ONE_FILTERS_STANDARD[RESAMPLER_TWO_TO_ONE_ZERO_CROSSINGS_STANDARD]; - -#endif // __RESAMPLER_SINC_CONV_TWO_TO_ONE_TABLES_STANDARD_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_two_to_three_int16.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_two_to_three_int16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,340 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_TWO_TO_THREE_INT16_H__ -#define __RESAMPLER_SINC_CONV_TWO_TO_THREE_INT16_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_rate_conversion_input_driven_int16.h" -#include "resampler_rate_conversion_output_driven_int16.h" - -/* Define this 1 to use code */ - - - - -/** @ingroup rate_conversion - - Converter class for upsampling 16-bit audio to 3/2 - times the source frequency - - -*/ - -class RESAMPLER_SincConvTwoToThreeInt16 : public RESAMPLER_RateConversionInputDrivenInt16, - public RESAMPLER_RateConversionOutputDrivenInt16 -{ - friend class RESAMPLER_RateConversionInputDrivenInt16; - friend class RESAMPLER_RateConversionOutputDrivenInt16; - -public: - - /** @name Destruction */ - - //@{ - - /** Destructor - */ - - virtual ~RESAMPLER_SincConvTwoToThreeInt16(); - - //@} - - /** @name Query methods */ - - //@{ - - static bool RateSupported(float inRate, float outRate) - { return (3*inRate == 2*outRate); } - - //@} - - /** @name Object lifetime methods */ - - //@{ - - /** Initializes the converter. - - This method initializes the sampling rate converter for input-driven - operation. - - @return true if successful false otherwise - */ - - virtual bool InitInputDriven(); - - /** Initializes the converter. - - This method initializes the sampling rate converter for output-driven - operation. - - @return true if successful false otherwise - */ - - virtual bool InitOutputDriven(); - - //@} - - /** @name Input-driven operation */ - - //@{ - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelInputDriven(int channel) - { EnableChannel(channel); } - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelInputDriven(int channel) - { DisableChannel(channel); } - - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the input driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxInputBlockSize Maximum input blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedInputDriven(int maxInputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when the converter is - used in output driven mode. . The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferInputDriven(char *buffer); - - /** Get the maximum number of output samples for a given input sample count - - This method returns the maximum number of output samples the converter - can ever produce from a given number of input samples. The method assumes - that the converter be used either input-driven or output-driven; the - two modes should not be mixed. - - @param[in] inSamples Number of input samples - @return Maximum number of output samples - */ - - virtual int MaxOutputSampleCount(int inSamples) const; - - /** Run the sampling rate conversion for a block of samples - - This method runs the actual sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. The - output buffers must have space for MaxOutputSampleCount(inSamples) audio - samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] inSamples The number of input samples to process - @return Number of output samples - */ - - virtual int ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples); - - //@} - - /** @name Output-driven operation */ - - //@{ - - /** Enable one of the channels. - - This method is used to (re-)enable a rate conversion channel after it's - been disabled. (All channels start in the enabled mode.) This is used to - tell the algorithm that the channel must be properly processed, if the - algorithm wants to take advantage of the optimization possibilities - provided by the DisableInputDriven() method. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void EnableChannelOutputDriven(int channel) - { EnableChannel(channel); } - - /** Disable one of the channels. - - This method can be used to tell the algorithm that the output from a - specific channel will not be used in subsequent operations, and the - implementation may choose to optimize and leave the disabled channel - unprocessed. However, the caller must always provide valid pointers for - the actual processing methods for the case where it's difficult to - actually disable memory access for the specific channel in an - implementation. - - @note The channel index MUST be valid, i.e., it has to be smaller than - @c numChannels given at initialization time. - - @param[in] channel The index of the channel to be enabled. - */ - - virtual void DisableChannelOutputDriven(int channel) - { DisableChannel(channel); } - - /** Get the maximum number of input samples needed. - - This method returns the maximum number of input samples needed - for a given output sample count. - - @param[in] outSamples Number of output samples - @return Maximum number of input samples - */ - - virtual int MaxInputSampleCount(int outSamples) const; - - /** Get the amount of samples needed for input. - - This method returns the amount of samples needed for converter input - given the number of output samples. This method must be called before - each call to the processing methods. It is a serious error to have - \a outSamples greater than the value set with ScratchMemoryNeedOutputDriven(). - - @param[in] outSamples Amount of samples the converter produces - @return number of input samples needed - */ - - virtual int InSamplesNeeded(int outSamples); - /** Query the scratch memory need of the converter. - - This method queries the amount of scratch memory the output driven converter - needs to be able to handle in a single call to the processing functions. - - @param[in] maxOutputBlockSize Maximum output blocksize - @return memory need in bytes - */ - - virtual size_t ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const; - - /** Set scratch buffer for the converter - - This method sets scratch buffer needed by the converter when then converter is - used in output driven mode. The caller of this function is responsible of - allocating enough memory. - - @param[in] *buffer pointer to the allocated buffer - */ - - virtual void SetScratchBufferOutputDriven(char *buffer); - - - /** Run the sampling rate conversion for a block of samples - - This method does the sampling rate conversion. The pointer arrays - have to contain valid pointers for numChannels channel data buffers. - The input buffers MUST contain the amount of samples returned by - a previous call to InSamplesNeeded. Output buffers must have space - for \a outSamples audio samples. - - @param[out] outputBuffers Pointer to output buffer array - @param[in] inputBuffers Pointer to input buffer array - @param[in] outSamples The number of samples the converter produces - @return Number of output samples - */ - - virtual int ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples); - - //@} - -private: - - /** Constructor - */ - RESAMPLER_SincConvTwoToThreeInt16(int channelCount); - - /** Disabled copy contructor - */ - RESAMPLER_SincConvTwoToThreeInt16(const RESAMPLER_SincConvTwoToThreeInt16 &); - - /** Initializes converter. - - This method initializes the sampling rate converter. - - @return true if success false otherwise - */ - - virtual bool Init(); - - /** Deallocate all the allocated memory - - This methods deallocates all memory previously allocated by - Init(). Can be used both for recovering from a memory - allocation error and in destructor. - */ - void DeInit(); - - /** Enable one of the channels */ - void EnableChannel(int channel); - - /** Disable one of the channels */ - void DisableChannel(int channel); - - int16 **m_memBuffers; - int16 *m_scratchBuffer; - - const int16 *m_filter1; - const int16 *m_filter2; - int m_channelCount; - int m_blockSize; - bool *m_channelEnabled; - - int m_inputSamples; - - int m_state; -}; - - -#endif // __RESAMPLER_SINC_CONV_TWO_TO_THREE_INT16_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_two_to_three_tables_standard.h --- a/videoeditorengine/audioeditorengine/resampler/inc/resampler_sinc_conv_two_to_three_tables_standard.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_TWO_TO_THREE_TABLES_STANDARD_H__ -#define __RESAMPLER_SINC_CONV_TWO_TO_THREE_TABLES_STANDARD_H__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "resampler_data_types.h" - - -#define RESAMPLER_TWO_TO_THREE_ZERO_CROSSINGS_STANDARD 16 - -extern const int16 RESAMPLER_TWO_TO_THREE_FILTER1_STANDARD[RESAMPLER_TWO_TO_THREE_ZERO_CROSSINGS_STANDARD]; -extern const int16 RESAMPLER_TWO_TO_THREE_FILTER2_STANDARD[RESAMPLER_TWO_TO_THREE_ZERO_CROSSINGS_STANDARD]; - -#endif // __RESAMPLER_SINC_CONV_TWO_TO_THREE_TABLES_STANDARD_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_rate_conversion_input_driven_int16.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_rate_conversion_input_driven_int16.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,130 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_rate_conversion_input_driven_int16.h" -#include "resampler_sinc_conv_one_to_two_int16.h" -#include "resampler_sinc_conv_one_to_three_int16.h" -#include "resampler_sinc_conv_two_to_three_int16.h" -#include "resampler_sinc_conv_two_to_one_int16.h" -#include "resampler_sinc_conv_three_to_one_int16.h" -#include "resampler_sinc_conv_44_to_48_int16.h" - -bool -RESAMPLER_RateConversionInputDrivenInt16::RateSupported(float inRate, - float outRate, - int channelCount) -{ - /* Note that this is a dummy test just to get rid of some warnings. */ - if (inRate == 0 || outRate == 0 || channelCount == 0) - { - return false; - } - - if (RESAMPLER_SincConvOneToTwoInt16::RateSupported(inRate, outRate)) - { - return true; - } - - if (RESAMPLER_SincConvOneToThreeInt16::RateSupported(inRate, outRate)) - { - return true; - } - - if (RESAMPLER_SincConvTwoToThreeInt16::RateSupported(inRate, outRate)) - { - return true; - } - - if (RESAMPLER_SincConvTwoToOneInt16::RateSupported(inRate, outRate)) - { - return true; - } - - if (RESAMPLER_SincConvThreeToOneInt16::RateSupported(inRate, outRate)) - { - return true; - } - - if (RESAMPLER_SincConv44To48Int16::RateSupported(inRate, outRate)) - { - return true; - } - - return false; -} - - -RESAMPLER_RateConversionInputDrivenInt16 * -RESAMPLER_RateConversionInputDrivenInt16::New(float inRate, - float outRate, - int channelCount) -{ - RESAMPLER_RateConversionInputDrivenInt16 *converter = 0; - - /* Note that this is a dummy test just to make configuration easier. */ - if (inRate == 0 || outRate == 0 || channelCount == 0) - { - converter = 0; - } - - else if (2*inRate == outRate) - { - converter = new RESAMPLER_SincConvOneToTwoInt16(channelCount); - } - - else if (3*inRate == outRate) - { - converter = new RESAMPLER_SincConvOneToThreeInt16(channelCount); - } - - else if (3*inRate == 2*outRate) - { - converter = new RESAMPLER_SincConvTwoToThreeInt16(channelCount); - } - - else if (inRate == 2 * outRate) - { - converter = new RESAMPLER_SincConvTwoToOneInt16(channelCount); - } - - else if (inRate == 3 * outRate) - { - converter = new RESAMPLER_SincConvThreeToOneInt16(channelCount); - } - - else if (160 * inRate == 147 * outRate) - { - converter = new RESAMPLER_SincConv44To48Int16(channelCount); - } - - return converter; -} - -bool RESAMPLER_RateConversionInputDrivenInt16::SetQualityInputDriven(int /* mode */) -{ - return true; -} - -void RESAMPLER_RateConversionInputDrivenInt16::EnableChannelInputDriven(int /* channel */) -{ -} - -void RESAMPLER_RateConversionInputDrivenInt16::DisableChannelInputDriven(int /* channel */) -{ -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_rate_conversion_output_driven_int16.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_rate_conversion_output_driven_int16.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,131 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_rate_conversion_output_driven_int16.h" -#include "resampler_sinc_conv_one_to_two_int16.h" -#include "resampler_sinc_conv_one_to_three_int16.h" -#include "resampler_sinc_conv_two_to_three_int16.h" -#include "resampler_sinc_conv_44_to_48_int16.h" -#include "resampler_sinc_conv_two_to_one_int16.h" -#include "resampler_sinc_conv_three_to_one_int16.h" - -bool -RESAMPLER_RateConversionOutputDrivenInt16::RateSupported(float inRate, - float outRate, - int channelCount) -{ - /* Note that this is a dummy test just to get rid of some warnings. */ - if (inRate == 0 || outRate == 0 || channelCount == 0) - { - return false; - } - - if (RESAMPLER_SincConvOneToTwoInt16::RateSupported(inRate, outRate)) - { - return true; - } - - if (RESAMPLER_SincConvOneToThreeInt16::RateSupported(inRate, outRate)) - { - return true; - } - - if (RESAMPLER_SincConvTwoToThreeInt16::RateSupported(inRate, outRate)) - { - return true; - } - - if (RESAMPLER_SincConv44To48Int16::RateSupported(inRate, outRate)) - { - return true; - } - - if (RESAMPLER_SincConvTwoToOneInt16::RateSupported(inRate, outRate)) - { - return true; - } - - if (RESAMPLER_SincConvThreeToOneInt16::RateSupported(inRate, outRate)) - { - return true; - } - - return false; -} - - -RESAMPLER_RateConversionOutputDrivenInt16 * -RESAMPLER_RateConversionOutputDrivenInt16::New(float inRate, - float outRate, - int channelCount) -{ - RESAMPLER_RateConversionOutputDrivenInt16 *converter = 0; - - /* Note that this is a dummy test just to make configuration easier. */ - if (inRate == 0 || outRate == 0 || channelCount == 0) - { - converter = 0; - } - - else if (2*inRate == outRate) - { - converter = new RESAMPLER_SincConvOneToTwoInt16(channelCount); - } - - else if (3*inRate == outRate) - { - converter = new RESAMPLER_SincConvOneToThreeInt16(channelCount); - } - - else if (3*inRate == 2*outRate) - { - converter = new RESAMPLER_SincConvTwoToThreeInt16(channelCount); - } - - else if (160 * inRate == 147 * outRate) - { - converter = new RESAMPLER_SincConv44To48Int16(channelCount); - } - - else if (inRate == 2 * outRate) - { - converter = new RESAMPLER_SincConvTwoToOneInt16(channelCount); - } - - else if (inRate == 3 * outRate) - { - converter = new RESAMPLER_SincConvThreeToOneInt16(channelCount); - } - - return converter; -} - -bool RESAMPLER_RateConversionOutputDrivenInt16::SetQualityOutputDriven(int /* mode */) -{ - return true; -} - -void RESAMPLER_RateConversionOutputDrivenInt16::EnableChannelOutputDriven(int /* channel */) -{ -} - -void RESAMPLER_RateConversionOutputDrivenInt16::DisableChannelOutputDriven(int /* channel */) -{ -} - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_44_to_48_int16.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_44_to_48_int16.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,352 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_44_to_48_int16.h" -#include "resampler_clip.h" -#include "resampler_sinc_conv_44_to_48_tables_economy.h" -#include "resampler_sinc_conv_44_to_48_tables_standard.h" -#include "resampler_sinc_conv_44_to_48_tables_premium.h" - -#include - -#include "resampler_sinc_conv_filter_int16.h" - -/* - * The amount of zero crossings in positive or negative - * side of the sinc function. Because of filter symmetry - * the amount of filter taps used in convolution is - * zero crossings * 2. - */ -static const int LC_MAX_ZERO_CROSSINGS = RESAMPLER_44_TO_48_ZERO_CROSSINGS_PREMIUM; - -static const int LC_BUFFER_ACCESS_OUTPUT = LC_MAX_ZERO_CROSSINGS; - -/* - * The number of filters needed in 44.1 to 48 kHz sinc interpolation - * sampling rate conversion. Filter symmetry is utilized. - */ -static const int LC_FILTER_COUNT = 160; - -/* - * Calculated as 160-147. - * 147/160 is the smallest ratio of 44100/48000. - * Used as a hop increment in the filter table defined below. - */ -static const int LC_MATRIX_HOP_SIZE = 13; - -/* - * This constant is calculated as ceil(2^23/160). - * and used in InSamplesNeeded() method to - * avoid the division by 160. The result of the multiplication - * has to be shifted afterwards by 23 bits right. - */ -static const int LC_SAMPLE_COUNT_MULT = 52429; - -/** Do not remove! LC_MAX_BLOCK_SIZE used in assert! - */ -#if 0 -/* - * M_INPUT_COUNT_MULT * (6289*13+160) = 4294826393 (0xfffdd999). - * 6289 is the largest number that fits 32 bits in the - * input sample count multiplication method. - */ -static const int LC_MAX_BLOCK_SIZE = 6289; -#endif // 0 - - -RESAMPLER_SincConv44To48Int16::RESAMPLER_SincConv44To48Int16(int channelCount) : -m_memBuffers(0), -m_scratchBuffer(0), -m_channelCount(channelCount), -m_blockSize(0), -m_channelEnabled(0), -m_inputSamples(0), -m_index1(LC_FILTER_COUNT), -m_index2(0), -m_zeroCrossings(RESAMPLER_44_TO_48_ZERO_CROSSINGS_STANDARD), -m_filterMatrix(RESAMPLER_44_TO_48_FILTERS_STANDARD) -{ -} - - -RESAMPLER_SincConv44To48Int16::~RESAMPLER_SincConv44To48Int16() -{ - DeInit(); -} - -bool RESAMPLER_SincConv44To48Int16::InitInputDriven() -{ - return Init(); -} - - -bool RESAMPLER_SincConv44To48Int16::InitOutputDriven() -{ - return Init(); -} - -bool RESAMPLER_SincConv44To48Int16::Init() -{ - int i(0); - - m_memBuffers = new int16 *[m_channelCount]; - if (!m_memBuffers) - { - return false; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = 0; - } - - m_channelEnabled = new bool[m_channelCount]; - if (!m_channelEnabled) - { - DeInit(); - return false; - } - for (i = 0; i < m_channelCount; i++) - { - m_channelEnabled[i] = true; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = new int16[LC_MAX_ZERO_CROSSINGS * 2]; - if (!m_memBuffers[i]) - { - DeInit(); - return false; - } - memset(m_memBuffers[i], 0, sizeof(int16) * (LC_MAX_ZERO_CROSSINGS * 2)); - } - - return true; -} - -void -RESAMPLER_SincConv44To48Int16::DeInit() -{ - if (m_channelCount) - { - for (int i = 0; i < m_channelCount; i++) - { - delete [] m_memBuffers[i]; - } - delete [] m_memBuffers; - delete [] m_channelEnabled; - } -} - -bool -RESAMPLER_SincConv44To48Int16::SetQualityInputDriven(int mode) -{ - return SetQualityOutputDriven(mode); -} - -bool -RESAMPLER_SincConv44To48Int16::SetQualityOutputDriven(int mode) -{ - switch (mode) - { - case RESAMPLER_RATE_CONVERSION_QUALITY_ECONOMY: - m_zeroCrossings = RESAMPLER_44_TO_48_ZERO_CROSSINGS_ECONOMY; - m_filterMatrix = RESAMPLER_44_TO_48_FILTERS_ECONOMY; - break; - case RESAMPLER_RATE_CONVERSION_QUALITY_STANDARD: - m_zeroCrossings = RESAMPLER_44_TO_48_ZERO_CROSSINGS_STANDARD; - m_filterMatrix = RESAMPLER_44_TO_48_FILTERS_STANDARD; - break; - case RESAMPLER_RATE_CONVERSION_QUALITY_PREMIUM: - m_zeroCrossings = RESAMPLER_44_TO_48_ZERO_CROSSINGS_PREMIUM; - m_filterMatrix = RESAMPLER_44_TO_48_FILTERS_PREMIUM; - break; - default: - return false; - } - return true; -} - -void -RESAMPLER_SincConv44To48Int16::EnableChannelInputDriven(int channel) -{ - EnableChannelOutputDriven(channel); -} - - -void -RESAMPLER_SincConv44To48Int16::DisableChannelInputDriven(int channel) -{ - DisableChannelOutputDriven(channel); -} - - -void -RESAMPLER_SincConv44To48Int16::EnableChannelOutputDriven(int channel) -{ - m_channelEnabled[channel] = true; -} - - -void -RESAMPLER_SincConv44To48Int16::DisableChannelOutputDriven(int channel) -{ - m_channelEnabled[channel] = false; -} - -size_t -RESAMPLER_SincConv44To48Int16::ScratchMemoryNeedInputDriven(int maxInputBlockSize) const -{ - /** 6289 == LC_MAX_BLOCK_SIZE - */ - if (maxInputBlockSize > 6289 * 44100.0/48000.0) - { - return 0; - } - - return sizeof(int16) * (LC_MAX_ZERO_CROSSINGS * 2 + maxInputBlockSize); -} - -void -RESAMPLER_SincConv44To48Int16::SetScratchBufferInputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - -size_t -RESAMPLER_SincConv44To48Int16::ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const -{ - int blockSize = (int)((maxOutputBlockSize * 44100.0/48000.0) + 1); - - return ScratchMemoryNeedInputDriven(blockSize); -} - -void -RESAMPLER_SincConv44To48Int16::SetScratchBufferOutputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - - - -int -RESAMPLER_SincConv44To48Int16::MaxInputSampleCount(int outSamples) const -{ - return (int)((outSamples * (44100.0 / 48000.0)) + 1); -} - - -int -RESAMPLER_SincConv44To48Int16::InSamplesNeeded(int outSamples) -{ - m_inputSamples = outSamples - ((LC_SAMPLE_COUNT_MULT * (outSamples*13+m_index2)) >> 23); - - return m_inputSamples; -} - -int -RESAMPLER_SincConv44To48Int16::MaxOutputSampleCount(int inSamples) const -{ - return (int)(inSamples * 160.0 / 147.0 + 1.0); -} - - -int RESAMPLER_SincConv44To48Int16::ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples) -{ - int outSamples = (int)((inSamples * 160.0 + m_index2) / 147.0); - m_inputSamples = inSamples; - return ProcessToOutput(outputBuffers, inputBuffers, outSamples); -} - -int -RESAMPLER_SincConv44To48Int16::ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples) -{ - static const int FILTER_LENGTH = 2 * LC_MAX_ZERO_CROSSINGS; - int i, j; - int index1 = m_index1; - int index2 = m_index2; - - for (i = 0; i < m_channelCount; i++) - { - if (!m_channelEnabled[i]) - { - break; - } - - int16 *tempBuf = m_scratchBuffer; - int16 *outBuf = outputBuffers[i]; - index1 = m_index1; /* 160 SRC filter number */ - index2 = m_index2; /* 0 */ - - int state = 0; - - memcpy(m_scratchBuffer, - m_memBuffers[i], - FILTER_LENGTH * sizeof(int16)); - - // Read samples into memory - memcpy(tempBuf + FILTER_LENGTH, - inputBuffers[i], - m_inputSamples * sizeof(int16)); - - // Do band limited interpolation and set the result into - // every index in the output buffer. - for (j = 0; j < outSamples; j++) - { - index1 -= LC_MATRIX_HOP_SIZE; /* -13 */ - index2 += LC_MATRIX_HOP_SIZE; /* +13 */ - - if (index1 <= 0) - { - index1 += LC_FILTER_COUNT; /* +160 */ - index2 -= LC_FILTER_COUNT; /* -160 */ - state++; - } - - /*lint -e{662} */ - const int16 *filterPtr1 = m_filterMatrix + index1 * m_zeroCrossings; - const int16 *filterPtr2 = m_filterMatrix + index2 * m_zeroCrossings; - - int32 newSample = - RESAMPLER_SincConvFilterInt16(tempBuf + LC_BUFFER_ACCESS_OUTPUT - state + j, - filterPtr1, - filterPtr2, - m_zeroCrossings); - - // round and shift down - outBuf[j] = (int16)RESAMPLER_Clip16((newSample + 16384) >> 15); - } - - // Copy the newest samples to the beginning of the buffer - memcpy(m_memBuffers[i], - m_scratchBuffer + m_inputSamples, - FILTER_LENGTH * sizeof(int16)); - } - - m_index1 = index1; - m_index2 = index2; - - return outSamples; -} - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_44_to_48_int16.inl --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_44_to_48_int16.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_44_TO_48_INT16_INL__ -#define __RESAMPLER_SINC_CONV_44_TO_48_INT16_INL__/* -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_common_defs.h" -#include "resampler_data_types.h" - - -static FORCEINLINE int32 -RESAMPLER_SincConv44To48FilterInt16(const int16 *signalBuf, - const int16 *filterPtr1, - const int16 *filterPtr2, - int length) -{ - int32 newSample(0); - int k = length; - const int16 *bufferPtr1 = signalBuf; - const int16 *bufferPtr2 = signalBuf + 1; - - // Calculate the filter. - // Keep newSample in s1.30 format to reduce rounding errors - for (k = length; k > 0; k -= 4) - { - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - } - - return newSample; -} - - -#endif /* __RESAMPLER_SINC_CONV_ONE_TO_TWO_INT16_INL__ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_44_to_48_tables_economy.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_44_to_48_tables_economy.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,186 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_44_to_48_tables_economy.h" - -const int16 RESAMPLER_44_TO_48_FILTERS_ECONOMY[161 * RESAMPLER_44_TO_48_ZERO_CROSSINGS_ECONOMY] = -{ - 32767, 0, 0, 0, 0, 0, 0, 0, - 32766, -195, 86, -46, 25, -12, 6, -2, - 32759, -387, 171, -91, 49, -25, 11, -4, - 32749, -576, 255, -136, 73, -37, 16, -6, - 32733, -763, 338, -180, 97, -49, 22, -8, - 32714, -947, 421, -225, 121, -61, 27, -9, - 32690, -1128, 502, -268, 145, -73, 32, -11, - 32662, -1307, 583, -312, 168, -85, 37, -13, - 32630, -1482, 663, -354, 191, -96, 43, -15, - 32593, -1655, 742, -397, 214, -108, 48, -16, - 32552, -1825, 820, -439, 236, -119, 52, -18, - 32507, -1991, 897, -480, 258, -130, 57, -20, - 32458, -2155, 973, -521, 280, -141, 62, -21, - 32404, -2316, 1048, -561, 302, -152, 67, -23, - 32346, -2475, 1122, -601, 323, -162, 71, -24, - 32284, -2630, 1195, -640, 344, -173, 76, -26, - 32218, -2782, 1267, -679, 365, -183, 80, -27, - 32147, -2931, 1338, -717, 385, -193, 85, -29, - 32073, -3077, 1408, -755, 405, -203, 89, -30, - 31994, -3220, 1476, -792, 425, -213, 93, -31, - 31911, -3360, 1544, -828, 445, -223, 97, -33, - 31824, -3497, 1610, -864, 464, -232, 101, -34, - 31733, -3631, 1675, -899, 483, -241, 105, -35, - 31638, -3762, 1739, -934, 501, -250, 109, -36, - 31538, -3890, 1801, -968, 519, -259, 113, -38, - 31435, -4015, 1863, -1001, 537, -268, 116, -39, - 31328, -4137, 1923, -1034, 554, -276, 120, -40, - 31216, -4255, 1982, -1066, 571, -285, 123, -41, - 31101, -4371, 2040, -1097, 588, -293, 127, -42, - 30982, -4483, 2096, -1128, 604, -301, 130, -43, - 30859, -4593, 2151, -1158, 620, -308, 133, -44, - 30732, -4699, 2205, -1187, 635, -316, 136, -45, - 30602, -4802, 2257, -1216, 651, -323, 139, -46, - 30467, -4902, 2309, -1243, 665, -330, 142, -46, - 30329, -5000, 2358, -1271, 680, -337, 145, -47, - 30187, -5093, 2407, -1297, 694, -344, 147, -48, - 30041, -5184, 2454, -1323, 707, -350, 150, -49, - 29892, -5272, 2500, -1348, 720, -357, 152, -49, - 29739, -5357, 2544, -1372, 733, -363, 155, -50, - 29583, -5438, 2588, -1396, 745, -368, 157, -51, - 29423, -5517, 2629, -1419, 757, -374, 159, -51, - 29259, -5592, 2670, -1441, 769, -380, 162, -52, - 29092, -5665, 2709, -1462, 780, -385, 164, -52, - 28922, -5734, 2746, -1483, 791, -390, 166, -53, - 28748, -5801, 2782, -1502, 801, -395, 167, -53, - 28571, -5864, 2817, -1522, 811, -399, 169, -54, - 28390, -5924, 2851, -1540, 821, -404, 171, -54, - 28207, -5981, 2883, -1557, 830, -408, 172, -54, - 28020, -6036, 2913, -1574, 839, -412, 174, -55, - 27830, -6087, 2942, -1590, 847, -416, 175, -55, - 27636, -6136, 2970, -1606, 855, -419, 176, -55, - 27440, -6181, 2997, -1620, 862, -423, 178, -55, - 27241, -6224, 3022, -1634, 869, -426, 179, -56, - 27038, -6263, 3045, -1647, 876, -429, 180, -56, - 26833, -6300, 3068, -1659, 882, -432, 181, -56, - 26625, -6334, 3088, -1671, 888, -434, 181, -56, - 26414, -6365, 3108, -1682, 893, -436, 182, -56, - 26200, -6393, 3126, -1692, 898, -439, 183, -56, - 25984, -6418, 3143, -1701, 903, -440, 183, -56, - 25765, -6441, 3158, -1710, 907, -442, 184, -56, - 25543, -6460, 3172, -1717, 911, -444, 184, -56, - 25319, -6477, 3185, -1724, 915, -445, 185, -56, - 25092, -6492, 3196, -1731, 918, -446, 185, -56, - 24862, -6503, 3206, -1736, 920, -447, 185, -56, - 24630, -6512, 3214, -1741, 922, -448, 185, -56, - 24396, -6518, 3221, -1745, 924, -448, 185, -55, - 24160, -6522, 3227, -1748, 926, -449, 185, -55, - 23921, -6523, 3232, -1751, 927, -449, 185, -55, - 23680, -6521, 3235, -1753, 927, -449, 185, -55, - 23437, -6517, 3237, -1754, 928, -449, 184, -54, - 23192, -6510, 3237, -1755, 928, -448, 184, -54, - 22945, -6501, 3237, -1754, 927, -448, 183, -54, - 22696, -6489, 3235, -1754, 926, -447, 183, -54, - 22445, -6475, 3231, -1752, 925, -446, 182, -53, - 22192, -6459, 3227, -1750, 924, -445, 181, -53, - 21937, -6440, 3221, -1747, 922, -444, 181, -52, - 21681, -6419, 3214, -1743, 919, -442, 180, -52, - 21423, -6395, 3206, -1739, 917, -441, 179, -52, - 21163, -6369, 3196, -1734, 914, -439, 178, -51, - 20901, -6341, 3186, -1728, 910, -437, 177, -51, - 20639, -6311, 3174, -1722, 907, -435, 176, -50, - 20374, -6278, 3161, -1715, 903, -433, 175, -50, - 20109, -6244, 3147, -1707, 898, -430, 173, -49, - 19842, -6207, 3132, -1699, 894, -428, 172, -49, - 19574, -6168, 3115, -1690, 889, -425, 171, -48, - 19304, -6127, 3098, -1681, 883, -422, 169, -48, - 19034, -6084, 3079, -1671, 878, -419, 168, -47, - 18762, -6039, 3060, -1660, 872, -416, 166, -46, - 18490, -5992, 3039, -1649, 866, -413, 165, -46, - 18216, -5943, 3017, -1637, 859, -409, 163, -45, - 17942, -5893, 2994, -1625, 852, -406, 162, -45, - 17667, -5840, 2971, -1612, 845, -402, 160, -44, - 17391, -5786, 2946, -1599, 838, -398, 158, -43, - 17114, -5730, 2920, -1585, 830, -394, 156, -43, - 16837, -5672, 2893, -1570, 822, -390, 154, -42, - 16559, -5613, 2866, -1555, 814, -386, 152, -41, - 16280, -5551, 2837, -1540, 806, -381, 151, -41, - 16001, -5489, 2807, -1524, 797, -377, 149, -40, - 15722, -5424, 2777, -1507, 788, -372, 147, -39, - 15442, -5359, 2746, -1490, 779, -368, 144, -38, - 15162, -5291, 2714, -1473, 769, -363, 142, -38, - 14882, -5222, 2681, -1455, 759, -358, 140, -37, - 14602, -5152, 2647, -1436, 750, -353, 138, -36, - 14322, -5081, 2612, -1418, 739, -348, 136, -36, - 14041, -5008, 2577, -1398, 729, -343, 134, -35, - 13761, -4933, 2541, -1379, 719, -338, 131, -34, - 13481, -4858, 2504, -1359, 708, -332, 129, -33, - 13201, -4781, 2467, -1338, 697, -327, 127, -33, - 12921, -4703, 2428, -1318, 686, -321, 124, -32, - 12641, -4624, 2390, -1296, 674, -316, 122, -31, - 12362, -4544, 2350, -1275, 663, -310, 120, -30, - 12083, -4463, 2310, -1253, 651, -304, 117, -30, - 11804, -4381, 2269, -1231, 639, -299, 115, -29, - 11526, -4298, 2228, -1208, 627, -293, 112, -28, - 11249, -4214, 2186, -1186, 615, -287, 110, -28, - 10972, -4129, 2143, -1162, 603, -281, 108, -27, - 10696, -4043, 2100, -1139, 591, -275, 105, -26, - 10421, -3956, 2057, -1115, 578, -269, 103, -25, - 10146, -3869, 2013, -1091, 565, -263, 100, -25, - 9872, -3781, 1968, -1067, 553, -256, 98, -24, - 9600, -3692, 1923, -1043, 540, -250, 95, -23, - 9328, -3602, 1878, -1018, 527, -244, 92, -22, - 9057, -3512, 1832, -993, 513, -238, 90, -22, - 8787, -3421, 1786, -968, 500, -231, 87, -21, - 8519, -3330, 1740, -943, 487, -225, 85, -20, - 8251, -3238, 1693, -917, 474, -219, 82, -20, - 7985, -3146, 1646, -892, 460, -212, 80, -19, - 7720, -3054, 1598, -866, 447, -206, 77, -18, - 7456, -2961, 1551, -840, 433, -199, 75, -17, - 7194, -2867, 1503, -814, 419, -193, 72, -17, - 6933, -2773, 1454, -788, 406, -186, 70, -16, - 6674, -2680, 1406, -762, 392, -180, 67, -15, - 6416, -2585, 1357, -735, 378, -173, 64, -15, - 6160, -2491, 1309, -709, 364, -167, 62, -14, - 5905, -2396, 1260, -682, 350, -160, 59, -14, - 5652, -2302, 1211, -655, 337, -154, 57, -13, - 5401, -2207, 1162, -629, 323, -147, 54, -12, - 5152, -2112, 1112, -602, 309, -141, 52, -12, - 4904, -2018, 1063, -575, 295, -134, 49, -11, - 4658, -1923, 1014, -549, 281, -128, 47, -10, - 4414, -1828, 964, -522, 267, -122, 45, -10, - 4173, -1734, 915, -495, 253, -115, 42, -9, - 3933, -1639, 866, -468, 240, -109, 40, -9, - 3695, -1545, 816, -441, 226, -102, 37, -8, - 3459, -1451, 767, -415, 212, -96, 35, -8, - 3225, -1357, 718, -388, 198, -90, 33, -7, - 2994, -1263, 669, -361, 185, -83, 30, -6, - 2765, -1170, 620, -335, 171, -77, 28, -6, - 2537, -1077, 571, -308, 157, -71, 26, -5, - 2313, -985, 522, -282, 144, -65, 23, -5, - 2090, -893, 473, -256, 130, -59, 21, -4, - 1870, -801, 425, -229, 117, -53, 19, -4, - 1652, -710, 377, -203, 103, -47, 17, -3, - 1437, -619, 329, -177, 90, -41, 14, -3, - 1224, -529, 281, -152, 77, -35, 12, -2, - 1014, -439, 233, -126, 64, -29, 10, -2, - 806, -350, 186, -100, 51, -23, 8, -2, - 600, -261, 139, -75, 38, -17, 6, -1, - 398, -174, 92, -50, 25, -11, 4, -1, - 198, -86, 46, -25, 13, -6, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0 -}; - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_44_to_48_tables_premium.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_44_to_48_tables_premium.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,187 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_44_to_48_tables_premium.h" - - -const int16 RESAMPLER_44_TO_48_FILTERS_PREMIUM[161 * RESAMPLER_44_TO_48_ZERO_CROSSINGS_PREMIUM] = -{ - 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32766, -200, 95, -58, 38, -26, 17, -12, 7, -5, 3, -2, 1, 0, 0, 0, - 32759, -397, 189, -115, 76, -51, 35, -23, 15, -9, 6, -3, 2, -1, 0, 0, - 32749, -592, 283, -172, 114, -77, 52, -35, 22, -14, 8, -5, 2, -1, 0, 0, - 32734, -783, 375, -229, 151, -102, 69, -46, 30, -18, 11, -6, 3, -1, 1, 0, - 32715, -973, 467, -286, 189, -128, 86, -57, 37, -23, 14, -8, 4, -2, 1, 0, - 32691, -1159, 558, -342, 226, -153, 103, -69, 44, -27, 16, -9, 5, -2, 1, 0, - 32664, -1343, 649, -397, 262, -178, 120, -80, 51, -32, 19, -10, 5, -2, 1, 0, - 32632, -1524, 738, -452, 299, -202, 137, -91, 59, -36, 21, -12, 6, -3, 1, 0, - 32596, -1702, 826, -507, 335, -227, 153, -102, 66, -41, 24, -13, 7, -3, 1, 0, - 32556, -1877, 914, -561, 371, -251, 169, -113, 73, -45, 27, -15, 8, -3, 1, 0, - 32511, -2049, 1000, -614, 406, -275, 186, -123, 80, -49, 29, -16, 8, -4, 1, 0, - 32462, -2219, 1086, -667, 442, -299, 202, -134, 86, -54, 32, -18, 9, -4, 2, 0, - 32409, -2385, 1170, -720, 476, -322, 218, -144, 93, -58, 34, -19, 10, -4, 2, 0, - 32352, -2549, 1254, -772, 511, -346, 233, -155, 100, -62, 37, -20, 10, -5, 2, -1, - 32291, -2709, 1336, -823, 545, -369, 249, -165, 106, -66, 39, -22, 11, -5, 2, -1, - 32226, -2867, 1418, -874, 579, -392, 264, -175, 113, -70, 41, -23, 12, -5, 2, -1, - 32156, -3022, 1498, -924, 612, -414, 280, -185, 120, -74, 44, -24, 12, -6, 2, -1, - 32083, -3174, 1577, -973, 645, -437, 295, -195, 126, -78, 46, -25, 13, -6, 2, -1, - 32005, -3323, 1655, -1022, 677, -459, 310, -205, 132, -82, 48, -27, 14, -6, 2, -1, - 31923, -3468, 1732, -1070, 710, -480, 324, -215, 138, -86, 50, -28, 14, -6, 2, -1, - 31837, -3611, 1807, -1118, 741, -502, 339, -225, 145, -89, 53, -29, 15, -7, 3, -1, - 31748, -3751, 1882, -1165, 772, -523, 353, -234, 151, -93, 55, -30, 15, -7, 3, -1, - 31654, -3887, 1955, -1211, 803, -544, 367, -243, 156, -97, 57, -31, 16, -7, 3, -1, - 31556, -4021, 2026, -1256, 834, -564, 381, -252, 162, -100, 59, -32, 16, -7, 3, -1, - 31454, -4152, 2097, -1301, 863, -585, 394, -261, 168, -104, 61, -34, 17, -8, 3, -1, - 31348, -4279, 2166, -1345, 893, -605, 408, -270, 174, -107, 63, -35, 18, -8, 3, -1, - 31239, -4403, 2234, -1388, 922, -624, 421, -279, 179, -111, 65, -36, 18, -8, 3, -1, - 31125, -4525, 2301, -1430, 950, -643, 434, -287, 185, -114, 67, -37, 19, -8, 3, -1, - 31007, -4643, 2366, -1472, 978, -662, 447, -296, 190, -117, 69, -38, 19, -9, 3, -1, - 30886, -4758, 2430, -1512, 1005, -681, 459, -304, 195, -120, 71, -39, 20, -9, 3, -1, - 30761, -4870, 2493, -1552, 1032, -699, 471, -312, 200, -124, 72, -40, 20, -9, 3, -1, - 30632, -4979, 2554, -1592, 1058, -717, 483, -320, 205, -127, 74, -41, 21, -9, 3, -1, - 30499, -5084, 2614, -1630, 1084, -734, 495, -328, 210, -130, 76, -42, 21, -9, 4, -1, - 30363, -5187, 2672, -1667, 1109, -751, 506, -335, 215, -133, 78, -43, 21, -10, 4, -1, - 30223, -5286, 2729, -1704, 1134, -768, 518, -342, 220, -135, 79, -43, 22, -10, 4, -1, - 30079, -5383, 2785, -1740, 1158, -784, 529, -350, 224, -138, 81, -44, 22, -10, 4, -1, - 29932, -5476, 2839, -1775, 1181, -800, 539, -357, 229, -141, 82, -45, 23, -10, 4, -1, - 29781, -5566, 2891, -1809, 1204, -816, 550, -363, 233, -144, 84, -46, 23, -10, 4, -1, - 29627, -5653, 2942, -1842, 1226, -831, 560, -370, 237, -146, 85, -47, 23, -10, 4, -1, - 29469, -5737, 2992, -1874, 1248, -846, 570, -377, 241, -149, 87, -47, 24, -11, 4, -1, - 29307, -5818, 3040, -1905, 1269, -860, 579, -383, 245, -151, 88, -48, 24, -11, 4, -1, - 29142, -5895, 3087, -1936, 1290, -874, 589, -389, 249, -153, 89, -49, 24, -11, 4, -1, - 28974, -5970, 3132, -1965, 1310, -887, 598, -395, 253, -156, 91, -50, 25, -11, 4, -1, - 28802, -6042, 3176, -1994, 1329, -900, 607, -401, 257, -158, 92, -50, 25, -11, 4, -1, - 28627, -6110, 3218, -2022, 1348, -913, 615, -406, 260, -160, 93, -51, 25, -11, 4, -1, - 28449, -6175, 3258, -2048, 1366, -925, 623, -412, 263, -162, 94, -51, 26, -11, 4, -1, - 28267, -6238, 3298, -2074, 1383, -937, 631, -417, 267, -164, 95, -52, 26, -11, 4, -1, - 28082, -6297, 3335, -2099, 1400, -949, 639, -422, 270, -166, 96, -53, 26, -12, 4, -1, - 27895, -6353, 3371, -2123, 1416, -960, 646, -427, 273, -167, 98, -53, 26, -12, 4, -1, - 27704, -6406, 3406, -2146, 1432, -970, 653, -431, 276, -169, 98, -54, 27, -12, 4, -1, - 27509, -6456, 3439, -2168, 1447, -980, 660, -436, 278, -171, 99, -54, 27, -12, 4, -1, - 27312, -6504, 3470, -2189, 1461, -990, 667, -440, 281, -172, 100, -54, 27, -12, 4, -1, - 27112, -6548, 3500, -2209, 1475, -999, 673, -444, 284, -174, 101, -55, 27, -12, 4, -1, - 26909, -6589, 3528, -2228, 1488, -1008, 679, -448, 286, -175, 102, -55, 27, -12, 4, -1, - 26703, -6627, 3555, -2246, 1500, -1017, 684, -451, 288, -177, 103, -56, 28, -12, 4, -1, - 26495, -6662, 3580, -2263, 1512, -1025, 690, -455, 290, -178, 103, -56, 28, -12, 4, -1, - 26283, -6695, 3603, -2280, 1523, -1032, 695, -458, 292, -179, 104, -56, 28, -12, 4, -1, - 26069, -6724, 3626, -2295, 1534, -1039, 699, -461, 294, -180, 105, -57, 28, -12, 4, -1, - 25852, -6751, 3646, -2309, 1544, -1046, 704, -464, 296, -181, 105, -57, 28, -12, 4, -1, - 25632, -6774, 3665, -2322, 1553, -1052, 708, -466, 298, -182, 106, -57, 28, -12, 4, -1, - 25410, -6795, 3682, -2335, 1561, -1058, 712, -469, 299, -183, 106, -57, 28, -12, 4, -1, - 25185, -6813, 3698, -2346, 1569, -1063, 715, -471, 300, -184, 106, -58, 28, -12, 4, -1, - 24958, -6828, 3713, -2356, 1576, -1068, 718, -473, 302, -184, 107, -58, 29, -12, 4, -1, - 24729, -6840, 3725, -2366, 1583, -1073, 721, -475, 303, -185, 107, -58, 29, -12, 4, -1, - 24497, -6850, 3737, -2374, 1589, -1077, 724, -477, 304, -186, 107, -58, 29, -12, 4, -1, - 24262, -6857, 3746, -2382, 1594, -1080, 726, -478, 305, -186, 108, -58, 29, -12, 4, -1, - 24026, -6861, 3755, -2388, 1599, -1083, 728, -479, 305, -186, 108, -58, 29, -12, 4, -1, - 23787, -6862, 3761, -2394, 1603, -1086, 730, -480, 306, -187, 108, -58, 29, -12, 4, -1, - 23546, -6861, 3767, -2398, 1606, -1088, 732, -481, 306, -187, 108, -58, 29, -12, 4, -1, - 23303, -6857, 3770, -2402, 1609, -1090, 733, -482, 307, -187, 108, -58, 29, -12, 4, -1, - 23057, -6850, 3773, -2404, 1611, -1091, 734, -482, 307, -187, 108, -58, 29, -12, 4, -1, - 22810, -6841, 3773, -2406, 1612, -1092, 734, -483, 307, -187, 108, -58, 29, -12, 4, -1, - 22561, -6830, 3773, -2407, 1613, -1093, 734, -483, 307, -187, 108, -58, 29, -12, 4, -1, - 22310, -6815, 3770, -2407, 1613, -1093, 734, -483, 307, -187, 108, -58, 28, -12, 4, -1, - 22057, -6799, 3767, -2406, 1612, -1093, 734, -482, 307, -187, 108, -58, 28, -12, 4, -1, - 21803, -6779, 3762, -2404, 1611, -1092, 733, -482, 306, -187, 107, -58, 28, -12, 4, -1, - 21546, -6758, 3755, -2401, 1609, -1091, 733, -481, 306, -186, 107, -58, 28, -12, 4, -1, - 21288, -6733, 3747, -2397, 1607, -1089, 731, -480, 305, -186, 107, -57, 28, -12, 4, -1, - 21029, -6707, 3738, -2392, 1604, -1087, 730, -479, 305, -185, 107, -57, 28, -12, 4, -1, - 20767, -6678, 3727, -2386, 1600, -1085, 728, -478, 304, -185, 106, -57, 28, -12, 4, -1, - 20505, -6647, 3715, -2379, 1596, -1082, 726, -477, 303, -184, 106, -57, 28, -12, 4, -1, - 20241, -6613, 3702, -2372, 1591, -1079, 724, -475, 302, -183, 105, -56, 28, -12, 4, -1, - 19975, -6577, 3687, -2364, 1586, -1075, 721, -473, 300, -183, 105, -56, 27, -12, 4, -1, - 19708, -6539, 3671, -2354, 1580, -1071, 719, -471, 299, -182, 104, -56, 27, -12, 4, -1, - 19440, -6499, 3653, -2344, 1573, -1066, 716, -469, 298, -181, 104, -56, 27, -12, 4, -1, - 19171, -6457, 3634, -2333, 1566, -1061, 712, -467, 296, -180, 103, -55, 27, -11, 4, -1, - 18901, -6412, 3614, -2321, 1559, -1056, 709, -465, 295, -179, 103, -55, 27, -11, 4, -1, - 18629, -6365, 3593, -2309, 1550, -1051, 705, -462, 293, -178, 102, -54, 26, -11, 4, -1, - 18357, -6317, 3570, -2295, 1541, -1044, 701, -459, 291, -177, 101, -54, 26, -11, 4, -1, - 18084, -6266, 3546, -2281, 1532, -1038, 696, -456, 289, -175, 100, -54, 26, -11, 4, -1, - 17809, -6213, 3521, -2265, 1522, -1031, 692, -453, 287, -174, 100, -53, 26, -11, 4, -1, - 17534, -6159, 3494, -2249, 1511, -1024, 687, -450, 285, -173, 99, -53, 26, -11, 4, -1, - 17258, -6102, 3467, -2233, 1500, -1017, 682, -446, 283, -171, 98, -52, 25, -11, 4, -1, - 16982, -6043, 3438, -2215, 1489, -1009, 676, -443, 280, -170, 97, -52, 25, -11, 4, -1, - 16705, -5983, 3408, -2197, 1477, -1001, 671, -439, 278, -168, 96, -51, 25, -10, 4, -1, - 16427, -5921, 3377, -2178, 1464, -992, 665, -435, 275, -167, 95, -51, 24, -10, 4, -1, - 16148, -5857, 3345, -2158, 1451, -983, 659, -431, 273, -165, 94, -50, 24, -10, 3, -1, - 15869, -5791, 3311, -2137, 1437, -974, 653, -427, 270, -163, 93, -50, 24, -10, 3, -1, - 15590, -5724, 3277, -2116, 1423, -964, 646, -423, 267, -162, 92, -49, 24, -10, 3, -1, - 15311, -5655, 3242, -2094, 1408, -954, 639, -418, 264, -160, 91, -48, 23, -10, 3, -1, - 15031, -5584, 3205, -2071, 1393, -944, 632, -414, 261, -158, 90, -48, 23, -10, 3, -1, - 14750, -5512, 3167, -2048, 1378, -933, 625, -409, 258, -156, 89, -47, 23, -10, 3, -1, - 14470, -5439, 3129, -2024, 1362, -922, 618, -404, 255, -154, 88, -47, 22, -9, 3, -1, - 14190, -5363, 3089, -1999, 1345, -911, 610, -399, 252, -152, 87, -46, 22, -9, 3, -1, - 13909, -5287, 3049, -1973, 1328, -900, 602, -394, 249, -150, 85, -45, 22, -9, 3, -1, - 13629, -5208, 3007, -1947, 1311, -888, 594, -388, 245, -148, 84, -45, 21, -9, 3, -1, - 13348, -5129, 2965, -1921, 1293, -876, 586, -383, 242, -146, 83, -44, 21, -9, 3, -1, - 13068, -5048, 2922, -1893, 1275, -863, 578, -378, 238, -144, 82, -43, 21, -9, 3, -1, - 12788, -4966, 2877, -1865, 1256, -851, 569, -372, 235, -141, 80, -42, 20, -8, 3, -1, - 12508, -4883, 2832, -1837, 1237, -838, 561, -366, 231, -139, 79, -42, 20, -8, 3, -1, - 12228, -4798, 2786, -1808, 1218, -825, 552, -360, 227, -137, 78, -41, 20, -8, 3, -1, - 11949, -4712, 2740, -1778, 1198, -811, 543, -354, 223, -134, 76, -40, 19, -8, 3, -1, - 11670, -4625, 2692, -1748, 1178, -798, 534, -348, 219, -132, 75, -40, 19, -8, 3, -1, - 11392, -4537, 2644, -1717, 1157, -784, 524, -342, 215, -130, 74, -39, 18, -8, 3, 0, - 11114, -4448, 2595, -1686, 1136, -769, 515, -336, 211, -127, 72, -38, 18, -8, 2, 0, - 10837, -4358, 2545, -1655, 1115, -755, 505, -329, 207, -125, 71, -37, 18, -7, 2, 0, - 10560, -4267, 2495, -1622, 1093, -740, 495, -323, 203, -122, 69, -36, 17, -7, 2, 0, - 10285, -4175, 2444, -1590, 1072, -726, 485, -316, 199, -120, 68, -36, 17, -7, 2, 0, - 10009, -4082, 2392, -1557, 1049, -711, 475, -310, 195, -117, 66, -35, 17, -7, 2, 0, - 9735, -3989, 2339, -1523, 1027, -695, 465, -303, 190, -114, 65, -34, 16, -7, 2, 0, - 9462, -3894, 2286, -1489, 1004, -680, 454, -296, 186, -112, 63, -33, 16, -6, 2, 0, - 9189, -3799, 2233, -1455, 981, -664, 444, -289, 182, -109, 62, -32, 15, -6, 2, 0, - 8917, -3703, 2179, -1420, 958, -648, 433, -282, 177, -106, 60, -32, 15, -6, 2, 0, - 8647, -3606, 2124, -1385, 934, -632, 422, -275, 173, -104, 59, -31, 15, -6, 2, 0, - 8377, -3509, 2069, -1349, 910, -616, 412, -268, 168, -101, 57, -30, 14, -6, 2, 0, - 8109, -3411, 2013, -1313, 886, -600, 401, -261, 164, -98, 55, -29, 14, -6, 2, 0, - 7842, -3312, 1957, -1277, 862, -583, 390, -254, 159, -95, 54, -28, 13, -5, 2, 0, - 7576, -3213, 1900, -1241, 837, -567, 378, -246, 155, -93, 52, -27, 13, -5, 2, 0, - 7311, -3114, 1843, -1204, 812, -550, 367, -239, 150, -90, 51, -26, 12, -5, 2, 0, - 7048, -3014, 1786, -1167, 787, -533, 356, -231, 145, -87, 49, -26, 12, -5, 2, 0, - 6786, -2913, 1728, -1130, 762, -516, 344, -224, 140, -84, 47, -25, 12, -5, 2, 0, - 6526, -2812, 1670, -1092, 737, -499, 333, -216, 136, -81, 46, -24, 11, -5, 1, 0, - 6267, -2711, 1612, -1054, 711, -481, 321, -209, 131, -78, 44, -23, 11, -4, 1, 0, - 6009, -2610, 1553, -1016, 686, -464, 310, -201, 126, -75, 42, -22, 10, -4, 1, 0, - 5753, -2509, 1494, -978, 660, -447, 298, -194, 121, -72, 41, -21, 10, -4, 1, 0, - 5499, -2407, 1435, -939, 634, -429, 286, -186, 116, -70, 39, -20, 10, -4, 1, 0, - 5247, -2305, 1375, -901, 608, -411, 274, -178, 112, -67, 37, -19, 9, -4, 1, 0, - 4996, -2203, 1315, -862, 582, -394, 263, -171, 107, -64, 36, -19, 9, -4, 1, 0, - 4747, -2101, 1256, -823, 556, -376, 251, -163, 102, -61, 34, -18, 8, -3, 1, 0, - 4499, -1998, 1196, -784, 529, -358, 239, -155, 97, -58, 32, -17, 8, -3, 1, 0, - 4254, -1896, 1136, -745, 503, -340, 227, -147, 92, -55, 31, -16, 7, -3, 1, 0, - 4011, -1794, 1075, -705, 476, -322, 215, -139, 87, -52, 29, -15, 7, -3, 1, 0, - 3769, -1692, 1015, -666, 450, -304, 203, -132, 82, -49, 27, -14, 7, -3, 1, 0, - 3530, -1590, 955, -627, 423, -286, 191, -124, 77, -46, 26, -13, 6, -3, 1, 0, - 3292, -1488, 894, -587, 397, -268, 179, -116, 72, -43, 24, -13, 6, -2, 1, 0, - 3057, -1386, 834, -548, 370, -250, 167, -108, 68, -40, 23, -12, 5, -2, 1, 0, - 2823, -1285, 773, -508, 343, -232, 155, -100, 63, -37, 21, -11, 5, -2, 1, 0, - 2592, -1183, 713, -469, 317, -214, 143, -92, 58, -34, 19, -10, 5, -2, 1, 0, - 2363, -1082, 653, -429, 290, -196, 131, -85, 53, -31, 18, -9, 4, -2, 1, 0, - 2137, -982, 593, -390, 263, -178, 119, -77, 48, -29, 16, -8, 4, -2, 0, 0, - 1912, -881, 533, -350, 237, -160, 107, -69, 43, -26, 14, -7, 3, -1, 0, 0, - 1690, -781, 473, -311, 210, -142, 95, -61, 38, -23, 13, -7, 3, -1, 0, 0, - 1470, -682, 413, -272, 184, -124, 83, -54, 33, -20, 11, -6, 3, -1, 0, 0, - 1253, -583, 353, -232, 157, -106, 71, -46, 29, -17, 9, -5, 2, -1, 0, 0, - 1038, -484, 294, -193, 131, -88, 59, -38, 24, -14, 8, -4, 2, -1, 0, 0, - 825, -386, 234, -154, 104, -71, 47, -30, 19, -11, 6, -3, 1, -1, 0, 0, - 615, -289, 175, -116, 78, -53, 35, -23, 14, -8, 5, -2, 1, 0, 0, 0, - 407, -192, 117, -77, 52, -35, 23, -15, 9, -6, 3, -2, 1, 0, 0, 0, - 202, -96, 58, -38, 26, -18, 12, -8, 5, -3, 2, -1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_44_to_48_tables_standard.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_44_to_48_tables_standard.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,187 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_44_to_48_tables_standard.h" - - -const int16 RESAMPLER_44_TO_48_FILTERS_STANDARD[161 * RESAMPLER_44_TO_48_ZERO_CROSSINGS_STANDARD] = -{ - 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 32766, -197, 90, -51, 30, -18, 10, -5, 3, -1, 0, 0, - 32759, -391, 179, -101, 60, -35, 20, -10, 5, -2, 1, 0, - 32749, -583, 267, -151, 90, -53, 30, -16, 7, -3, 1, 0, - 32734, -772, 354, -201, 120, -70, 39, -21, 10, -4, 1, 0, - 32714, -958, 441, -250, 149, -87, 49, -26, 12, -5, 2, 0, - 32691, -1142, 527, -299, 178, -104, 59, -31, 15, -6, 2, -1, - 32663, -1322, 611, -348, 207, -121, 68, -36, 17, -7, 2, -1, - 32631, -1500, 695, -396, 235, -138, 77, -41, 19, -8, 3, -1, - 32594, -1675, 778, -443, 264, -155, 87, -45, 22, -9, 3, -1, - 32554, -1847, 861, -490, 291, -171, 96, -50, 24, -10, 3, -1, - 32509, -2017, 942, -537, 319, -187, 105, -55, 26, -11, 4, -1, - 32460, -2183, 1022, -583, 347, -203, 114, -60, 28, -12, 4, -1, - 32407, -2346, 1101, -628, 374, -219, 123, -64, 30, -13, 4, -1, - 32349, -2507, 1179, -673, 400, -235, 131, -69, 32, -13, 5, -1, - 32287, -2664, 1256, -718, 427, -250, 140, -73, 35, -14, 5, -1, - 32221, -2819, 1332, -761, 453, -265, 148, -77, 37, -15, 5, -1, - 32151, -2971, 1407, -805, 478, -280, 157, -82, 39, -16, 5, -1, - 32077, -3119, 1481, -847, 504, -295, 165, -86, 41, -17, 6, -1, - 31999, -3265, 1553, -889, 529, -310, 173, -90, 43, -17, 6, -1, - 31916, -3407, 1625, -931, 553, -324, 181, -94, 44, -18, 6, -1, - 31830, -3547, 1695, -971, 578, -338, 189, -98, 46, -19, 6, -1, - 31739, -3683, 1764, -1011, 602, -352, 197, -102, 48, -20, 7, -1, - 31645, -3817, 1832, -1051, 625, -366, 204, -106, 50, -20, 7, -2, - 31546, -3947, 1898, -1090, 648, -379, 211, -110, 52, -21, 7, -2, - 31443, -4075, 1964, -1128, 671, -392, 219, -114, 53, -22, 7, -2, - 31337, -4199, 2028, -1165, 693, -405, 226, -117, 55, -22, 7, -2, - 31226, -4320, 2091, -1202, 715, -418, 233, -121, 57, -23, 8, -2, - 31112, -4438, 2152, -1238, 736, -430, 240, -124, 58, -24, 8, -2, - 30993, -4553, 2212, -1273, 757, -442, 246, -128, 60, -24, 8, -2, - 30871, -4665, 2271, -1307, 778, -454, 253, -131, 61, -25, 8, -2, - 30745, -4773, 2329, -1341, 798, -466, 259, -134, 63, -25, 8, -2, - 30615, -4879, 2385, -1374, 817, -477, 266, -137, 64, -26, 9, -2, - 30481, -4982, 2440, -1407, 837, -488, 272, -140, 66, -27, 9, -2, - 30344, -5081, 2494, -1438, 855, -499, 277, -143, 67, -27, 9, -2, - 30203, -5177, 2546, -1469, 874, -510, 283, -146, 68, -28, 9, -2, - 30058, -5271, 2596, -1499, 891, -520, 289, -149, 69, -28, 9, -2, - 29910, -5361, 2646, -1528, 909, -530, 294, -152, 71, -29, 9, -2, - 29758, -5448, 2694, -1556, 926, -540, 300, -154, 72, -29, 9, -2, - 29602, -5532, 2740, -1584, 942, -549, 305, -157, 73, -29, 10, -2, - 29443, -5613, 2785, -1611, 958, -558, 310, -159, 74, -30, 10, -2, - 29280, -5691, 2829, -1637, 973, -567, 314, -162, 75, -30, 10, -2, - 29114, -5765, 2871, -1662, 988, -576, 319, -164, 76, -31, 10, -2, - 28945, -5837, 2912, -1686, 1003, -584, 324, -166, 77, -31, 10, -2, - 28772, -5906, 2952, -1709, 1017, -592, 328, -168, 78, -31, 10, -2, - 28595, -5971, 2990, -1732, 1030, -600, 332, -170, 79, -32, 10, -2, - 28416, -6034, 3026, -1754, 1043, -607, 336, -172, 80, -32, 10, -2, - 28233, -6093, 3061, -1775, 1056, -614, 340, -174, 81, -32, 10, -2, - 28047, -6150, 3095, -1795, 1068, -621, 343, -176, 81, -32, 10, -2, - 27858, -6203, 3127, -1815, 1079, -628, 347, -178, 82, -33, 10, -2, - 27666, -6253, 3157, -1833, 1090, -634, 350, -179, 83, -33, 10, -2, - 27470, -6301, 3187, -1851, 1101, -640, 353, -181, 83, -33, 10, -2, - 27272, -6345, 3214, -1868, 1110, -645, 356, -182, 84, -33, 11, -2, - 27071, -6387, 3241, -1883, 1120, -651, 359, -184, 84, -33, 11, -2, - 26867, -6426, 3265, -1899, 1129, -656, 362, -185, 85, -34, 11, -2, - 26659, -6461, 3289, -1913, 1137, -661, 364, -186, 85, -34, 11, -2, - 26449, -6494, 3311, -1926, 1145, -665, 366, -187, 86, -34, 11, -2, - 26237, -6524, 3331, -1939, 1153, -669, 369, -188, 86, -34, 11, -2, - 26021, -6551, 3350, -1951, 1160, -673, 371, -189, 87, -34, 11, -2, - 25803, -6576, 3368, -1962, 1166, -677, 372, -190, 87, -34, 11, -2, - 25582, -6597, 3384, -1972, 1172, -680, 374, -190, 87, -34, 11, -2, - 25359, -6616, 3398, -1981, 1177, -683, 376, -191, 87, -34, 11, -2, - 25133, -6631, 3411, -1989, 1182, -685, 377, -192, 88, -34, 11, -2, - 24904, -6645, 3423, -1997, 1187, -688, 378, -192, 88, -34, 11, -2, - 24673, -6655, 3434, -2003, 1191, -690, 379, -193, 88, -34, 11, -2, - 24440, -6663, 3442, -2009, 1194, -692, 380, -193, 88, -34, 11, -2, - 24205, -6668, 3450, -2014, 1197, -693, 381, -193, 88, -34, 11, -2, - 23967, -6670, 3456, -2018, 1199, -694, 381, -193, 88, -34, 11, -2, - 23727, -6670, 3461, -2022, 1201, -695, 381, -193, 88, -34, 11, -2, - 23485, -6667, 3464, -2024, 1203, -696, 382, -193, 88, -34, 10, -2, - 23240, -6661, 3466, -2026, 1204, -696, 382, -193, 88, -34, 10, -2, - 22994, -6653, 3466, -2027, 1204, -697, 382, -193, 88, -34, 10, -2, - 22746, -6642, 3466, -2027, 1204, -696, 381, -193, 87, -34, 10, -2, - 22496, -6629, 3463, -2027, 1204, -696, 381, -193, 87, -34, 10, -2, - 22244, -6614, 3460, -2025, 1203, -695, 380, -192, 87, -34, 10, -2, - 21990, -6596, 3455, -2023, 1201, -694, 380, -192, 87, -34, 10, -2, - 21734, -6575, 3449, -2020, 1200, -693, 379, -191, 86, -33, 10, -2, - 21477, -6553, 3441, -2016, 1197, -691, 378, -191, 86, -33, 10, -2, - 21218, -6528, 3432, -2011, 1194, -690, 377, -190, 86, -33, 10, -2, - 20957, -6500, 3422, -2006, 1191, -688, 375, -189, 85, -33, 10, -2, - 20695, -6470, 3411, -2000, 1187, -685, 374, -188, 85, -33, 10, -2, - 20431, -6438, 3398, -1993, 1183, -683, 372, -187, 84, -32, 10, -2, - 20167, -6404, 3385, -1985, 1179, -680, 371, -186, 84, -32, 10, -2, - 19900, -6368, 3369, -1977, 1174, -677, 369, -185, 83, -32, 9, -2, - 19633, -6329, 3353, -1968, 1168, -673, 367, -184, 83, -32, 9, -2, - 19364, -6289, 3336, -1958, 1162, -670, 365, -183, 82, -31, 9, -2, - 19094, -6246, 3317, -1948, 1156, -666, 362, -182, 81, -31, 9, -2, - 18823, -6201, 3297, -1937, 1149, -662, 360, -181, 81, -31, 9, -2, - 18551, -6154, 3276, -1925, 1142, -658, 358, -179, 80, -31, 9, -2, - 18278, -6106, 3254, -1912, 1135, -653, 355, -178, 79, -30, 9, -2, - 18004, -6055, 3230, -1899, 1127, -648, 352, -176, 79, -30, 9, -1, - 17729, -6002, 3206, -1885, 1118, -643, 349, -175, 78, -30, 9, -1, - 17453, -5948, 3180, -1871, 1110, -638, 346, -173, 77, -29, 9, -1, - 17177, -5891, 3154, -1855, 1100, -633, 343, -171, 76, -29, 8, -1, - 16900, -5833, 3126, -1839, 1091, -627, 340, -170, 76, -29, 8, -1, - 16622, -5773, 3098, -1823, 1081, -621, 337, -168, 75, -28, 8, -1, - 16344, -5712, 3068, -1806, 1071, -615, 333, -166, 74, -28, 8, -1, - 16066, -5649, 3037, -1788, 1060, -609, 330, -164, 73, -27, 8, -1, - 15786, -5584, 3006, -1770, 1049, -602, 326, -162, 72, -27, 8, -1, - 15507, -5517, 2973, -1751, 1038, -596, 322, -160, 71, -27, 8, -1, - 15227, -5449, 2939, -1732, 1026, -589, 319, -158, 70, -26, 8, -1, - 14947, -5380, 2905, -1712, 1015, -582, 315, -156, 69, -26, 7, -1, - 14667, -5308, 2869, -1691, 1002, -575, 311, -154, 68, -26, 7, -1, - 14387, -5236, 2833, -1670, 990, -567, 307, -152, 67, -25, 7, -1, - 14106, -5162, 2796, -1649, 977, -560, 302, -150, 66, -25, 7, -1, - 13826, -5087, 2758, -1627, 964, -552, 298, -148, 65, -24, 7, -1, - 13545, -5010, 2719, -1604, 950, -544, 294, -145, 64, -24, 7, -1, - 13265, -4932, 2679, -1581, 936, -536, 289, -143, 63, -23, 7, -1, - 12985, -4853, 2639, -1557, 922, -528, 285, -141, 62, -23, 6, -1, - 12705, -4773, 2598, -1533, 908, -520, 280, -138, 61, -23, 6, -1, - 12426, -4691, 2556, -1509, 893, -511, 275, -136, 60, -22, 6, -1, - 12147, -4608, 2513, -1484, 879, -502, 270, -134, 59, -22, 6, -1, - 11868, -4525, 2470, -1459, 863, -494, 266, -131, 57, -21, 6, -1, - 11589, -4440, 2426, -1433, 848, -485, 261, -129, 56, -21, 6, -1, - 11312, -4354, 2381, -1407, 833, -476, 256, -126, 55, -20, 6, -1, - 11034, -4267, 2336, -1380, 817, -467, 251, -124, 54, -20, 5, -1, - 10758, -4180, 2290, -1353, 801, -457, 246, -121, 53, -19, 5, -1, - 10482, -4091, 2244, -1326, 784, -448, 240, -118, 52, -19, 5, -1, - 10207, -4002, 2196, -1299, 768, -438, 235, -116, 50, -18, 5, -1, - 9932, -3911, 2149, -1271, 751, -429, 230, -113, 49, -18, 5, -1, - 9659, -3820, 2101, -1242, 735, -419, 225, -110, 48, -18, 5, -1, - 9386, -3729, 2052, -1214, 718, -409, 219, -108, 47, -17, 5, -1, - 9115, -3636, 2003, -1185, 701, -399, 214, -105, 46, -17, 5, -1, - 8844, -3543, 1953, -1156, 683, -389, 208, -102, 44, -16, 4, -1, - 8575, -3450, 1903, -1126, 666, -379, 203, -99, 43, -16, 4, -1, - 8306, -3355, 1853, -1097, 648, -369, 197, -97, 42, -15, 4, -1, - 8039, -3261, 1802, -1067, 630, -359, 192, -94, 41, -15, 4, -1, - 7773, -3166, 1751, -1037, 612, -349, 186, -91, 39, -14, 4, 0, - 7509, -3070, 1700, -1006, 594, -338, 181, -88, 38, -14, 4, 0, - 7245, -2974, 1648, -976, 576, -328, 175, -85, 37, -13, 4, 0, - 6983, -2877, 1596, -945, 558, -317, 169, -83, 36, -13, 3, 0, - 6723, -2781, 1543, -914, 540, -307, 164, -80, 34, -12, 3, 0, - 6464, -2684, 1491, -883, 521, -296, 158, -77, 33, -12, 3, 0, - 6206, -2586, 1438, -852, 503, -286, 152, -74, 32, -11, 3, 0, - 5951, -2489, 1385, -820, 484, -275, 146, -71, 31, -11, 3, 0, - 5696, -2391, 1331, -789, 466, -264, 141, -68, 29, -11, 3, 0, - 5444, -2294, 1278, -757, 447, -254, 135, -66, 28, -10, 3, 0, - 5193, -2196, 1224, -726, 428, -243, 129, -63, 27, -10, 3, 0, - 4944, -2098, 1170, -694, 409, -232, 123, -60, 26, -9, 2, 0, - 4697, -2000, 1117, -662, 390, -221, 118, -57, 24, -9, 2, 0, - 4452, -1902, 1063, -630, 372, -211, 112, -54, 23, -8, 2, 0, - 4208, -1804, 1009, -598, 353, -200, 106, -51, 22, -8, 2, 0, - 3967, -1706, 955, -566, 334, -189, 100, -49, 21, -7, 2, 0, - 3727, -1608, 901, -534, 315, -178, 95, -46, 19, -7, 2, 0, - 3490, -1511, 847, -502, 296, -168, 89, -43, 18, -6, 2, 0, - 3255, -1414, 793, -470, 277, -157, 83, -40, 17, -6, 2, 0, - 3021, -1316, 739, -438, 258, -146, 77, -37, 16, -6, 1, 0, - 2790, -1220, 685, -406, 239, -135, 72, -35, 15, -5, 1, 0, - 2561, -1123, 631, -375, 221, -125, 66, -32, 13, -5, 1, 0, - 2335, -1027, 577, -343, 202, -114, 60, -29, 12, -4, 1, 0, - 2110, -931, 524, -311, 183, -103, 55, -26, 11, -4, 1, 0, - 1888, -836, 471, -279, 164, -93, 49, -24, 10, -3, 1, 0, - 1669, -741, 417, -248, 146, -82, 43, -21, 9, -3, 1, 0, - 1451, -646, 364, -216, 127, -72, 38, -18, 8, -3, 1, 0, - 1237, -552, 311, -185, 109, -61, 32, -16, 7, -2, 1, 0, - 1024, -459, 259, -154, 90, -51, 27, -13, 5, -2, 0, 0, - 814, -366, 207, -123, 72, -41, 21, -10, 4, -1, 0, 0, - 607, -273, 154, -92, 54, -30, 16, -8, 3, -1, 0, 0, - 402, -181, 103, -61, 36, -20, 11, -5, 2, -1, 0, 0, - 200, -90, 51, -30, 18, -10, 5, -3, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_three_int16.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_three_int16.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,275 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_one_to_three_int16.h" -#include "resampler_clip.h" -#include "resampler_sinc_conv_one_to_three_tables_standard.h" - -#include - -#include "resampler_sinc_conv_one_to_three_int16.inl" - -static const int LC_ZERO_CROSSINGS = RESAMPLER_ONE_TO_THREE_ZERO_CROSSINGS_STANDARD; -static const int LC_MOD3[6] = { 0, 1, 2, 0, 1, 2 }; - - -RESAMPLER_SincConvOneToThreeInt16::RESAMPLER_SincConvOneToThreeInt16(int channelCount) : -m_memBuffers(0), -m_scratchBuffer(0), -m_filter1(RESAMPLER_ONE_TO_THREE_FILTER1_STANDARD), -m_filter2(RESAMPLER_ONE_TO_THREE_FILTER2_STANDARD), -m_channelCount(channelCount), -m_blockSize(0), -m_channelEnabled(0), -m_inputSamples(0), -m_state(2) -{ -} - - -RESAMPLER_SincConvOneToThreeInt16::~RESAMPLER_SincConvOneToThreeInt16() -{ - DeInit(); -} - - -bool RESAMPLER_SincConvOneToThreeInt16::InitInputDriven() -{ - return Init(); -} - - -bool RESAMPLER_SincConvOneToThreeInt16::InitOutputDriven() -{ - return Init(); -} - - -/* -* This function must be called before using the converter. -* This function reserves memory for ring buffers and -* prepares the ring buffer indexing. -*/ -bool RESAMPLER_SincConvOneToThreeInt16::Init() -{ - int i(0); - - m_memBuffers = new int16 *[m_channelCount]; - if (!m_memBuffers) - { - return false; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = 0; - } - - m_channelEnabled = new bool[m_channelCount]; - if (!m_channelEnabled) - { - DeInit(); - return false; - } - for (i = 0; i < m_channelCount; i++) - { - m_channelEnabled[i] = true; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = new int16[LC_ZERO_CROSSINGS * 2]; - if (!m_memBuffers[i]) - { - DeInit(); - return false; - } - memset(m_memBuffers[i], 0, sizeof(int16) * (LC_ZERO_CROSSINGS * 2)); - } - - return true; -} - - -void RESAMPLER_SincConvOneToThreeInt16::DeInit() -{ - if (m_channelCount) - { - for (int i = 0; i < m_channelCount; i++) - { - delete [] m_memBuffers[i]; - } - delete [] m_memBuffers; - delete [] m_channelEnabled; - } -} - - -void RESAMPLER_SincConvOneToThreeInt16::EnableChannel(int channel) -{ - m_channelEnabled[channel] = true; -} - - -void RESAMPLER_SincConvOneToThreeInt16::DisableChannel(int channel) -{ - m_channelEnabled[channel] = false; -} - - -int RESAMPLER_SincConvOneToThreeInt16::MaxOutputSampleCount(int inSamples) const -{ - return 3*inSamples; -} - - -int RESAMPLER_SincConvOneToThreeInt16::ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples) -{ - int outSamples(3 * inSamples); - m_inputSamples = inSamples; - return ProcessToOutput(outputBuffers, inputBuffers, outSamples); -} - - -size_t -RESAMPLER_SincConvOneToThreeInt16::ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const -{ - return ScratchMemoryNeedInputDriven((maxOutputBlockSize + 2) / 3); -} - - -void -RESAMPLER_SincConvOneToThreeInt16::SetScratchBufferOutputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - -size_t -RESAMPLER_SincConvOneToThreeInt16::ScratchMemoryNeedInputDriven(int maxInputBlockSize) const -{ - return sizeof(int16) * (LC_ZERO_CROSSINGS * 2 + maxInputBlockSize); -} - - -void -RESAMPLER_SincConvOneToThreeInt16::SetScratchBufferInputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - - -int RESAMPLER_SincConvOneToThreeInt16::MaxInputSampleCount(int outSamples) const -{ - return (outSamples + 2) / 3; -} - - -/* -* This function returns the value, which is given as -* a parameter to the nextSamplesOut() function. This -* function must be called every time before calling -* nextSamplesOut. -*/ -int RESAMPLER_SincConvOneToThreeInt16::InSamplesNeeded(int outSamples) -{ - m_inputSamples = (outSamples + LC_MOD3[4 - m_state]) / 3; - - return m_inputSamples; -} - - -int RESAMPLER_SincConvOneToThreeInt16::ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples) -{ - static const int FILTER_LENGTH = 2 * LC_ZERO_CROSSINGS; - int i, j, k; - int bufReadHead1 = LC_ZERO_CROSSINGS + 1 - (m_state != 2 ? 1 : 0); - int bufReadHead2 = LC_ZERO_CROSSINGS; - int bufReadHead3 = LC_ZERO_CROSSINGS - (m_state == 1 ? 1 : 0); - - for (i = 0; i < m_channelCount; i++) - { - if (!m_channelEnabled[i]) - { - break; - } - - int16 *tempBuf = m_scratchBuffer; - int16 *outBuf = outputBuffers[i]; - - memcpy(m_scratchBuffer, m_memBuffers[i], FILTER_LENGTH * sizeof(int16)); - - memcpy(tempBuf + FILTER_LENGTH, - inputBuffers[i], - m_inputSamples * sizeof(int16)); - - // copy samples into every third index of output buffer. - tempBuf = m_scratchBuffer + bufReadHead1; - for (j = 0, k = m_state; k < outSamples; j++, k+=3) - { - outBuf[k] = tempBuf[j]; - } - - // Do band limited interpolation and set the result into - // every third index in the output buffer. - tempBuf = m_scratchBuffer + bufReadHead2; - for (j = 0, k = LC_MOD3[m_state+1]; k < outSamples; j++, k += 3) - { - int32 newSample(0); - // Note that the filters are reversed - newSample = - RESAMPLER_SincConvOneToThreeFilterInt16(tempBuf + j + 1, - m_filter2, - m_filter1, - LC_ZERO_CROSSINGS); - // round and shift down - outBuf[k] = (int16)RESAMPLER_Clip16((newSample + 16384) >> 15); - } - - // Do band limited interpolation and set the result into - // every third index in the output buffer. - tempBuf = m_scratchBuffer + bufReadHead3; - for (j = 0, k = LC_MOD3[m_state+2]; k < outSamples; j++, k += 3) - { - int32 newSample(0); - newSample = - RESAMPLER_SincConvOneToThreeFilterInt16(tempBuf + j + 1, - m_filter1, - m_filter2, - LC_ZERO_CROSSINGS); - // round and shift down - outBuf[k] = (int16)RESAMPLER_Clip16((newSample + 16384) >> 15); - } - - // Copy the newest samples to the beginning of the buffer - memcpy(m_memBuffers[i], - m_scratchBuffer + m_inputSamples, - FILTER_LENGTH * sizeof(int16)); - } - - // Update state according to amount of output samples. - m_state = LC_MOD3[m_state + (3 - (outSamples % 3))]; - - return outSamples; -} - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_three_int16.inl --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_three_int16.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_ONE_TO_THREE_INT16_INL__ -#define __RESAMPLER_SINC_CONV_ONE_TO_THREE_INT16_INL__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_common_defs.h" -#include "resampler_data_types.h" - -static FORCEINLINE int32 -RESAMPLER_SincConvOneToThreeFilterInt16(const int16 *signalBuf, - const int16 *filterPtr1, - const int16 *filterPtr2, - int length) -{ - int32 newSample = 0; - const int16 *bufferPtr1 = signalBuf; - const int16 *bufferPtr2 = signalBuf - 1; - - (void)length; - for (int l = length; l > 0; l-=4) - { - newSample += (int32)(*filterPtr1++) * (*bufferPtr1++) + (int32)(*filterPtr2++) * (*bufferPtr2--); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1++) + (int32)(*filterPtr2++) * (*bufferPtr2--); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1++) + (int32)(*filterPtr2++) * (*bufferPtr2--); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1++) + (int32)(*filterPtr2++) * (*bufferPtr2--); - } - - return newSample; -} - - -#endif /* __RESAMPLER_SINC_CONV_ONE_TO_THREE_INT16_INL__ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_three_tables_standard.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_three_tables_standard.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_one_to_three_tables_standard.h" - -const int16 RESAMPLER_ONE_TO_THREE_FILTER1_STANDARD[RESAMPLER_ONE_TO_THREE_ZERO_CROSSINGS_STANDARD] = -{ 27074, -6676, 3701, -2471, 1782, -1332, 1013, -774, 589, -444, 329, -238, 167, -113, 71, -41 }; - -const int16 RESAMPLER_ONE_TO_THREE_FILTER2_STANDARD[RESAMPLER_ONE_TO_THREE_ZERO_CROSSINGS_STANDARD] = -{ 13500, -5297, 3194, -2203, 1612, -1215, 926, -707, 537, -403, 296, -213, 148, -97, 60, -33 }; diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_two_int16.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_two_int16.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,262 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_one_to_two_int16.h" -#include "resampler_clip.h" -#include "resampler_sinc_conv_one_to_two_tables_standard.h" - -#include - -#include "resampler_sinc_conv_one_to_two_int16.inl" - -static const int LC_ZERO_CROSSINGS = RESAMPLER_ONE_TO_TWO_ZERO_CROSSINGS_STANDARD; /* Needs to be divisible by two */ - - -RESAMPLER_SincConvOneToTwoInt16::RESAMPLER_SincConvOneToTwoInt16(int channelCount) : -m_memBuffers(0), -m_scratchBuffer(0), -m_filter(RESAMPLER_ONE_TO_TWO_FILTERS_STANDARD), -m_channelCount(channelCount), -m_blockSize(0), -m_channelEnabled(0), -m_state(0) -{ -} - - -RESAMPLER_SincConvOneToTwoInt16::~RESAMPLER_SincConvOneToTwoInt16() -{ - DeInit(); -} - - -bool RESAMPLER_SincConvOneToTwoInt16::InitInputDriven() -{ - return Init(); -} - - -bool RESAMPLER_SincConvOneToTwoInt16::InitOutputDriven() -{ - return Init(); -} - - -bool RESAMPLER_SincConvOneToTwoInt16::Init() -{ - int i(0); - - m_memBuffers = new int16 *[m_channelCount]; - if (!m_memBuffers) - { - return false; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = 0; - } - - m_channelCount = m_channelCount; - - m_channelEnabled = new bool[m_channelCount]; - if (!m_channelEnabled) - { - DeInit(); - return false; - } - for (i = 0; i < m_channelCount; i++) - { - m_channelEnabled[i] = true; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = new int16[LC_ZERO_CROSSINGS * 2]; - if (!m_memBuffers[i]) - { - DeInit(); - return false; - } - memset(m_memBuffers[i], 0, sizeof(int16) * (LC_ZERO_CROSSINGS * 2)); - } - - return true; -} - - -void RESAMPLER_SincConvOneToTwoInt16::DeInit() -{ - if (m_channelCount) - { - for (int i = 0; i < m_channelCount; i++) - { - delete [] m_memBuffers[i]; - } - delete [] m_memBuffers; - delete [] m_channelEnabled; - } -} - - -void RESAMPLER_SincConvOneToTwoInt16::EnableChannel(int channel) -{ - m_channelEnabled[channel] = true; -} - - -void RESAMPLER_SincConvOneToTwoInt16::DisableChannel(int channel) -{ - m_channelEnabled[channel] = false; -} - - -size_t -RESAMPLER_SincConvOneToTwoInt16::ScratchMemoryNeedInputDriven(int maxInputBlockSize) const -{ - return sizeof(int16) * (LC_ZERO_CROSSINGS * 2 + maxInputBlockSize); -} - - -void -RESAMPLER_SincConvOneToTwoInt16::SetScratchBufferInputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - - -int RESAMPLER_SincConvOneToTwoInt16::MaxOutputSampleCount(int inSamples) const -{ - return 2 * inSamples; -} - - -int RESAMPLER_SincConvOneToTwoInt16::ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples) -{ - int outSamples(2 * inSamples + m_state); - return ProcessToOutput(outputBuffers, inputBuffers, outSamples); -} - - -size_t -RESAMPLER_SincConvOneToTwoInt16::ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const -{ - return ScratchMemoryNeedInputDriven((maxOutputBlockSize + 1) >> 1); -} - - -void -RESAMPLER_SincConvOneToTwoInt16::SetScratchBufferOutputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - - -int RESAMPLER_SincConvOneToTwoInt16::MaxInputSampleCount(int outSamples) const -{ - return (outSamples + 1) >> 1; -} - - -int RESAMPLER_SincConvOneToTwoInt16::InSamplesNeeded(int outSamples) -{ - int inSamples( (outSamples >> 1) + (outSamples & 1) * (1 - m_state) ); - - return inSamples; -} - - -int RESAMPLER_SincConvOneToTwoInt16::ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples) -{ - static const int FILTER_LENGTH = 2 * LC_ZERO_CROSSINGS; - - int i, j, k; - int oldState = m_state; - int newState = (oldState + outSamples) & 1; - - for (i = 0; i < m_channelCount; i++) - { - if (!m_channelEnabled[i]) - { - break; - } - - int16 *tempBuf = m_scratchBuffer; - const int16 *inBuf = inputBuffers[i]; - int16 *outBuf = outputBuffers[i]; - - memcpy(m_scratchBuffer, m_memBuffers[i], FILTER_LENGTH * sizeof(int16)); - - // Read samples into the memory buffer and - // copy samples into every second index of output buffer. - for (j = 0, k = oldState; k < outSamples; j++, k+=2) - { - int16 inputSample(inBuf[j]); - tempBuf[j + FILTER_LENGTH - 1 + oldState] = inputSample; - outBuf[k] = tempBuf[j + LC_ZERO_CROSSINGS - 1 + oldState]; - } - int inSamples = j; - - // Do band-limited interpolation and set the result into - // every second index in the output buffer. -#ifdef RESAMPLER_SINC_CONV_ONE_TO_TWO_DUAL_FILTERING - for (j = 0, k = 1 - oldState; k < outSamples; j+=2, k+=4) - { - int newSample1(0); - int newSample2(0); - - RESAMPLER_SincConvOneToTwoFilterDualInt16(newSample1, - newSample2, - tempBuf + LC_ZERO_CROSSINGS + j, - m_filter, - LC_ZERO_CROSSINGS); - // Round, shift down, and clip to 16 bits - outBuf[k] = (int16)RESAMPLER_Clip16((newSample1 + 16384) >> 15); - if (k + 2 < outSamples) - { - outBuf[k+2] = (int16)RESAMPLER_Clip16((newSample2 + 16384) >> 15); - } - } -#else - for (j = 0, k = 1 - oldState; k < outSamples; j++, k+=2) - { - int32 newSample = - RESAMPLER_SincConvOneToTwoFilterInt16(tempBuf + LC_ZERO_CROSSINGS + j, - m_filter, - LC_ZERO_CROSSINGS); - // Round, shift down, and clip to 16 bits - outBuf[k] = (int16)RESAMPLER_Clip16((newSample + 16384) >> 15); - } -#endif - - // Copy the newest samples to the beginning of the buffer - memcpy(m_memBuffers[i], - tempBuf + inSamples + oldState - newState, - (FILTER_LENGTH - 1 + newState) * sizeof(int16)); - } - - // Update state according to even or odd amount of output samples. - m_state = newState; - - return outSamples; -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_two_int16.inl --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_two_int16.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_ONE_TO_TWO_INT16_INL__ -#define __RESAMPLER_SINC_CONV_ONE_TO_TWO_INT16_INL__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_common_defs.h" -#include "resampler_data_types.h" - - - -/* Note! This version assumes the number of filter coefficients is - * divisible by four. - */ -static FORCEINLINE int32 -RESAMPLER_SincConvOneToTwoFilterInt16(const int16 *signalBuf, - const int16 *coeffBuf, - int length) -{ - int32 newSample = 0; - const int16 *bufferPtr1 = signalBuf; - const int16 *bufferPtr2 = signalBuf - 1; - - (void)length; - // Calculate the filter. - // Keep newSample in s1.30 format to reduce rounding errors - for (int k = length; k>0; k-=4) - { - newSample += (int32)(*coeffBuf ) * (*bufferPtr1++); - newSample += (int32)(*coeffBuf++) * (*bufferPtr2--); - newSample += (int32)(*coeffBuf ) * (*bufferPtr1++); - newSample += (int32)(*coeffBuf++) * (*bufferPtr2--); - newSample += (int32)(*coeffBuf ) * (*bufferPtr1++); - newSample += (int32)(*coeffBuf++) * (*bufferPtr2--); - newSample += (int32)(*coeffBuf ) * (*bufferPtr1++); - newSample += (int32)(*coeffBuf++) * (*bufferPtr2--); - } - - return newSample; -} - -#endif /* __RESAMPLER_SINC_CONV_ONE_TO_TWO_INT16_INL__ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_two_tables_standard.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_one_to_two_tables_standard.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_one_to_two_tables_standard.h" - -const int16 RESAMPLER_ONE_TO_TWO_FILTERS_STANDARD[RESAMPLER_ONE_TO_TWO_ZERO_CROSSINGS_STANDARD] = -{ 20818, -6826, 3962, -2691, 1956, -1469, 1118, -854, 650, -488, 361, -260, 182, -121, 76, -43 }; - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_three_to_one_int16.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_three_to_one_int16.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,246 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_three_to_one_int16.h" -#include "resampler_clip.h" -#include "resampler_sinc_conv_three_to_one_tables_standard.h" -#include "resampler_sinc_conv_filter_three_to_one_int16.h" - - -#include - -/* - * The amount of zero crossings in positive or negative - * side of the sinc function. Because of filter symmetry - * the amount of filter taps used in convolution is - * zero crossings * 2. - */ -static const int LC_MAX_COEFF_COUNT = RESAMPLER_THREE_TO_ONE_COEFF_COUNT_STANDARD; - -static const int LC_BUFFER_ACCESS_OUTPUT = LC_MAX_COEFF_COUNT - 1; - - -RESAMPLER_SincConvThreeToOneInt16::RESAMPLER_SincConvThreeToOneInt16(int channelCount) : -m_memBuffers(0), -m_scratchBuffer(0), -m_channelCount(channelCount), -m_blockSize(0), -m_channelEnabled(0), -m_state(0), -m_coeffCount(RESAMPLER_THREE_TO_ONE_COEFF_COUNT_STANDARD), -m_filterMatrix(RESAMPLER_THREE_TO_ONE_FILTERS_STANDARD) -{ -} - - -RESAMPLER_SincConvThreeToOneInt16::~RESAMPLER_SincConvThreeToOneInt16() -{ - DeInit(); -} - -bool RESAMPLER_SincConvThreeToOneInt16::InitInputDriven() -{ - return Init(); -} - -bool RESAMPLER_SincConvThreeToOneInt16::InitOutputDriven() -{ - return Init(); -} - -bool -RESAMPLER_SincConvThreeToOneInt16::Init() -{ - int i(0); - - m_memBuffers = new int16 *[m_channelCount]; - if (!m_memBuffers) - { - return false; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = 0; - } - - m_channelEnabled = new bool[m_channelCount]; - if (!m_channelEnabled) - { - DeInit(); - return false; - } - for (i = 0; i < m_channelCount; i++) - { - m_channelEnabled[i] = true; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = new int16[LC_MAX_COEFF_COUNT * 2 - 1]; - if (!m_memBuffers[i]) - { - DeInit(); - return false; - } - memset(m_memBuffers[i], 0, sizeof(int16) * (LC_MAX_COEFF_COUNT * 2 - 1)); - } - - return true; -} - -void -RESAMPLER_SincConvThreeToOneInt16::DeInit() -{ - if (m_channelCount) - { - for (int i = 0; i < m_channelCount; i++) - { - delete [] m_memBuffers[i]; - } - delete [] m_memBuffers; - delete [] m_channelEnabled; - } -} - - -void -RESAMPLER_SincConvThreeToOneInt16::EnableChannel(int channel) -{ - m_channelEnabled[channel] = true; -} - -void -RESAMPLER_SincConvThreeToOneInt16::DisableChannel(int channel) -{ - m_channelEnabled[channel] = false; -} - -size_t -RESAMPLER_SincConvThreeToOneInt16::ScratchMemoryNeedInputDriven(int maxInputBlockSize) const -{ - return sizeof(int16) * ((LC_MAX_COEFF_COUNT * 2 - 1) + maxInputBlockSize); -} - -void -RESAMPLER_SincConvThreeToOneInt16::SetScratchBufferInputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - -size_t -RESAMPLER_SincConvThreeToOneInt16::ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const -{ - int blockSize = 3 * maxOutputBlockSize; - - return ScratchMemoryNeedInputDriven(blockSize); -} - -void -RESAMPLER_SincConvThreeToOneInt16::SetScratchBufferOutputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - - -int -RESAMPLER_SincConvThreeToOneInt16::MaxOutputSampleCount(int inSamples) const -{ - return ( inSamples + 2 ) / 3; -} - -int -RESAMPLER_SincConvThreeToOneInt16::MaxInputSampleCount(int outSamples) const -{ - return 3 * outSamples; -} - - -int -RESAMPLER_SincConvThreeToOneInt16::InSamplesNeeded(int outSamples) -{ - return 3 * outSamples; -} - - -int -RESAMPLER_SincConvThreeToOneInt16::ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples) -{ - int inSamples( 3 * outSamples ); - - return ProcessFromInput(outputBuffers, inputBuffers, inSamples); -} - -int -RESAMPLER_SincConvThreeToOneInt16::ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples) -{ - static const int FILTER_LENGTH = LC_MAX_COEFF_COUNT * 2 - 1; - int i, j; - int state = m_state; - int outSamples = (inSamples + state) / 3; - - for (i = 0; i < m_channelCount; i++) - { - if (!m_channelEnabled[i]) - { - break; - } - - int16 *tempBuf = m_scratchBuffer; - int16 *outBuf = outputBuffers[i]; - state = m_state; - - memcpy(m_scratchBuffer, - m_memBuffers[i], - FILTER_LENGTH * sizeof(int16)); - - // Read samples into memory - memcpy(tempBuf + FILTER_LENGTH, - inputBuffers[i], - inSamples * sizeof(int16)); - - tempBuf += LC_BUFFER_ACCESS_OUTPUT - state; - - for (j = 0; j < outSamples; j++) - { - int32 newSample = - RESAMPLER_SincConvFilterThreeToOneInt16(tempBuf, - m_filterMatrix, - m_coeffCount); - tempBuf += 3; - - // round and shift down - outBuf[j] = (int16)RESAMPLER_Clip16((newSample + 16384 ) >> 15); - } - - // Copy the newest samples to the beginning of the buffer - memcpy(m_memBuffers[i], - m_scratchBuffer + inSamples, - FILTER_LENGTH * sizeof(int16)); - } - - m_state = (state + inSamples) % 3; - - return outSamples; -} - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_three_to_one_tables_standard.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_three_to_one_tables_standard.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_three_to_one_tables_standard.h" - - -const int16 RESAMPLER_THREE_TO_ONE_FILTERS_STANDARD[ RESAMPLER_THREE_TO_ONE_COEFF_COUNT_STANDARD ] = -{ - 9829, 8430, 4942, 1066, -1512, -2041, -991, 441, 1173, 874, - 0, -691, -730, -214, 369, 572, 306, -147, -415, -323, - 0, 272, 293, 87, -153, -238, -128, 62, 173, 135, - 0, -112, -119, -35, 61, 93, 49, -23, -64, -49, - 0, 39, 40, 11, -19, -28, -14, 6, 17, 12, - 0, -8, -8, -2, 3, 4, 2 -}; - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_two_to_one_int16.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_two_to_one_int16.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,246 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_two_to_one_int16.h" -#include "resampler_clip.h" -#include "resampler_sinc_conv_two_to_one_tables_standard.h" -#include "resampler_sinc_conv_filter_two_to_one_int16.h" - -#include - -/* - * The amount of zero crossings in positive or negative - * side of the sinc function. Because of filter symmetry - * the amount of filter taps used in convolution is - * zero crossings * 2. - */ -static const int LC_MAX_ZERO_CROSSINGS = RESAMPLER_TWO_TO_ONE_ZERO_CROSSINGS_STANDARD; - -static const int LC_BUFFER_ACCESS_OUTPUT = 2 * LC_MAX_ZERO_CROSSINGS; - - -RESAMPLER_SincConvTwoToOneInt16::RESAMPLER_SincConvTwoToOneInt16(int channelCount) : -m_memBuffers(0), -m_scratchBuffer(0), -m_channelCount(channelCount), -m_blockSize(0), -m_channelEnabled(0), -m_state(0), -m_zeroCrossings(RESAMPLER_TWO_TO_ONE_ZERO_CROSSINGS_STANDARD), -m_filterMatrix(RESAMPLER_TWO_TO_ONE_FILTERS_STANDARD) -{ -} - - -RESAMPLER_SincConvTwoToOneInt16::~RESAMPLER_SincConvTwoToOneInt16() -{ - DeInit(); -} - -bool RESAMPLER_SincConvTwoToOneInt16::InitInputDriven() -{ - return Init(); -} - -bool RESAMPLER_SincConvTwoToOneInt16::InitOutputDriven() -{ - return Init(); -} - -bool -RESAMPLER_SincConvTwoToOneInt16::Init() -{ - int i(0); - - m_memBuffers = new int16 *[m_channelCount]; - if (!m_memBuffers) - { - return false; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = 0; - } - - m_channelEnabled = new bool[m_channelCount]; - if (!m_channelEnabled) - { - DeInit(); - return false; - } - for (i = 0; i < m_channelCount; i++) - { - m_channelEnabled[i] = true; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = new int16[LC_MAX_ZERO_CROSSINGS * 4]; - if (!m_memBuffers[i]) - { - DeInit(); - return false; - } - memset(m_memBuffers[i], 0, sizeof(int16) * (LC_MAX_ZERO_CROSSINGS * 4)); - } - - return true; -} - -void -RESAMPLER_SincConvTwoToOneInt16::DeInit() -{ - if (m_channelCount) - { - for (int i = 0; i < m_channelCount; i++) - { - delete [] m_memBuffers[i]; - } - delete [] m_memBuffers; - delete [] m_channelEnabled; - } -} - - -void -RESAMPLER_SincConvTwoToOneInt16::EnableChannel(int channel) -{ - m_channelEnabled[channel] = true; -} - -void -RESAMPLER_SincConvTwoToOneInt16::DisableChannel(int channel) -{ - m_channelEnabled[channel] = false; -} - -size_t -RESAMPLER_SincConvTwoToOneInt16::ScratchMemoryNeedInputDriven(int maxInputBlockSize) const -{ - return sizeof(int16) * (LC_MAX_ZERO_CROSSINGS * 4 + maxInputBlockSize); -} - -void -RESAMPLER_SincConvTwoToOneInt16::SetScratchBufferInputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - -size_t -RESAMPLER_SincConvTwoToOneInt16::ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const -{ - int blockSize = 2 * maxOutputBlockSize; - - return ScratchMemoryNeedInputDriven(blockSize); -} - -void -RESAMPLER_SincConvTwoToOneInt16::SetScratchBufferOutputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - - -int -RESAMPLER_SincConvTwoToOneInt16::MaxOutputSampleCount(int inSamples) const -{ - return ( inSamples + 1 ) / 2; -} - -int -RESAMPLER_SincConvTwoToOneInt16::MaxInputSampleCount(int outSamples) const -{ - return 2 * outSamples; -} - - -int -RESAMPLER_SincConvTwoToOneInt16::InSamplesNeeded(int outSamples) -{ - return 2 * outSamples; -} - - -int -RESAMPLER_SincConvTwoToOneInt16::ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples) -{ - int inSamples( 2 * outSamples ); - - return ProcessFromInput(outputBuffers, inputBuffers, inSamples); -} - - -int -RESAMPLER_SincConvTwoToOneInt16::ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples) -{ - static const int FILTER_LENGTH = 4 * LC_MAX_ZERO_CROSSINGS; - int i, j; - int state = m_state; - int outSamples = (inSamples + state) >> 1; - - for (i = 0; i < m_channelCount; i++) - { - if (!m_channelEnabled[i]) - { - break; - } - - int16 *tempBuf = m_scratchBuffer; - int16 *outBuf = outputBuffers[i]; - state = m_state; - - memcpy(m_scratchBuffer, - m_memBuffers[i], - FILTER_LENGTH * sizeof(int16)); - - // Read samples into memory - memcpy(tempBuf + FILTER_LENGTH, - inputBuffers[i], - inSamples * sizeof(int16)); - - tempBuf += LC_BUFFER_ACCESS_OUTPUT - state; - - for (j = 0; j < outSamples; j++) - { - int32 newSample = - RESAMPLER_SincConvFilterTwoToOneInt16(tempBuf, - m_filterMatrix, - m_zeroCrossings); - tempBuf += 2; - - // round and shift down - outBuf[j] = (int16)RESAMPLER_Clip16((newSample + 16384 ) >> 15); - } - - // Copy the newest samples to the beginning of the buffer - memcpy(m_memBuffers[i], - m_scratchBuffer + inSamples, - FILTER_LENGTH * sizeof(int16)); - } - - m_state = (state + inSamples) & 1; - - return outSamples; -} - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_two_to_one_tables_standard.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_two_to_one_tables_standard.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_two_to_one_tables_standard.h" - -const int16 RESAMPLER_TWO_TO_ONE_FILTERS_STANDARD[RESAMPLER_TWO_TO_ONE_ZERO_CROSSINGS_STANDARD] = -{ - 10401, -3390, 1944, -1297, 920, -669, 490, -357, 257, -180, 123, -80, 50, -28, 14, -5 -}; diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_two_to_three_int16.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_two_to_three_int16.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,278 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_two_to_three_int16.h" -#include "resampler_clip.h" -#include "resampler_sinc_conv_two_to_three_tables_standard.h" - -#include "resampler_sinc_conv_two_to_three_int16.inl" - - -#include - - -static const int LC_ZERO_CROSSINGS = RESAMPLER_TWO_TO_THREE_ZERO_CROSSINGS_STANDARD; -static const int LC_MOD3[6] = { 0, 1, 2, 0, 1, 2 }; - - -RESAMPLER_SincConvTwoToThreeInt16::RESAMPLER_SincConvTwoToThreeInt16(int channelCount) : -m_memBuffers(0), -m_scratchBuffer(0), -m_filter1(RESAMPLER_TWO_TO_THREE_FILTER1_STANDARD), -m_filter2(RESAMPLER_TWO_TO_THREE_FILTER2_STANDARD), -m_channelCount(channelCount), -m_blockSize(0), -m_channelEnabled(0), -m_inputSamples(0), -m_state(2) -{ -} - - -RESAMPLER_SincConvTwoToThreeInt16::~RESAMPLER_SincConvTwoToThreeInt16() -{ - DeInit(); -} - - -bool RESAMPLER_SincConvTwoToThreeInt16::InitInputDriven() -{ - return Init(); -} - - -bool RESAMPLER_SincConvTwoToThreeInt16::InitOutputDriven() -{ - return Init(); -} - - -/* -* This function must be called before using the converter. -* This function reserves memory for ring buffers and -* prepares the ring buffer indexing. -*/ -bool RESAMPLER_SincConvTwoToThreeInt16::Init() -{ - int i = 0; - - m_memBuffers = new int16 *[m_channelCount]; - if (!m_memBuffers) - { - return false; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = 0; - } - - m_channelCount = m_channelCount; - - m_channelEnabled = new bool[m_channelCount]; - if (!m_channelEnabled) - { - DeInit(); - return false; - } - for (i = 0; i < m_channelCount; i++) - { - m_channelEnabled[i] = true; - } - - for (i = 0; i < m_channelCount; i++) - { - m_memBuffers[i] = new int16[LC_ZERO_CROSSINGS * 2]; - if (!m_memBuffers[i]) - { - DeInit(); - return false; - } - memset(m_memBuffers[i], 0, sizeof(int16) * (LC_ZERO_CROSSINGS * 2)); - } - - return true; -} - - -void RESAMPLER_SincConvTwoToThreeInt16::DeInit() -{ - if (m_channelCount) - { - for (int i = 0; i < m_channelCount; i++) - { - delete [] m_memBuffers[i]; - } - delete [] m_memBuffers; - delete [] m_channelEnabled; - } -} - - -void RESAMPLER_SincConvTwoToThreeInt16::EnableChannel(int channel) -{ - m_channelEnabled[channel] = true; -} - - -void RESAMPLER_SincConvTwoToThreeInt16::DisableChannel(int channel) -{ - m_channelEnabled[channel] = false; -} - - -int RESAMPLER_SincConvTwoToThreeInt16::MaxOutputSampleCount(int inSamples) const -{ - return 3 * inSamples / 2 + 1; -} - - -int RESAMPLER_SincConvTwoToThreeInt16::ProcessFromInput(int16 *outputBuffers[], - int16 *inputBuffers[], - int inSamples) -{ - int outSamples( (3*inSamples + 2 - m_state) / 2 ); - m_inputSamples = inSamples; - - return ProcessToOutput(outputBuffers, inputBuffers, outSamples); -} - - -size_t -RESAMPLER_SincConvTwoToThreeInt16::ScratchMemoryNeedOutputDriven(int maxOutputBlockSize) const -{ - return ScratchMemoryNeedInputDriven((2*maxOutputBlockSize + 2) / 3); -} - - -void -RESAMPLER_SincConvTwoToThreeInt16::SetScratchBufferOutputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - -size_t -RESAMPLER_SincConvTwoToThreeInt16::ScratchMemoryNeedInputDriven(int maxInputBlockSize) const -{ - return sizeof(int16) * (LC_ZERO_CROSSINGS * 2 + maxInputBlockSize); -} - - -void -RESAMPLER_SincConvTwoToThreeInt16::SetScratchBufferInputDriven(char *buffer) -{ - m_scratchBuffer = (int16 *)buffer; -} - -int RESAMPLER_SincConvTwoToThreeInt16::MaxInputSampleCount(int outSamples) const -{ - return (2*outSamples+2)/3; -} - - -/* -* This function returns the value, which is given as -* a parameter to the nextSamplesOut() function. This -* function must be called every time before calling -* nextSamplesOut. -*/ -int RESAMPLER_SincConvTwoToThreeInt16::InSamplesNeeded(int outSamples) -{ - m_inputSamples = (2 * outSamples + m_state) / 3; - return m_inputSamples; -} - - -int RESAMPLER_SincConvTwoToThreeInt16::ProcessToOutput(int16 *outputBuffers[], - int16 *inputBuffers[], - int outSamples) -{ - static const int FILTER_LENGTH = 2 * LC_ZERO_CROSSINGS; - int i, j, k; - - int bufReadHead1 = LC_ZERO_CROSSINGS + m_state; - int bufReadHead2 = LC_ZERO_CROSSINGS + (m_state == 1 ? 1 : 0); - int bufReadHead3 = LC_ZERO_CROSSINGS + (m_state != 1 ? 1 : 0); - - for (i = 0; i < m_channelCount; i++) - { - if (!m_channelEnabled[i]) - { - break; - } - - int16 *tempBuf = m_scratchBuffer; - int16 *outBuf = outputBuffers[i]; - - memcpy(m_scratchBuffer, m_memBuffers[i], FILTER_LENGTH * sizeof(int16)); - - memcpy(tempBuf + FILTER_LENGTH, - inputBuffers[i], - m_inputSamples * sizeof(int16)); - - // copy every second sample into every third index of output buffer. - tempBuf = m_scratchBuffer + bufReadHead1; - for (j = 0, k = m_state; k < outSamples; j+=2, k+=3) - { - outBuf[k] = tempBuf[j]; - } - - // Do band limited interpolation and set the result into - // every third index in the output buffer. - tempBuf = m_scratchBuffer + bufReadHead2; - for (j = 0, k = LC_MOD3[m_state+1]; k < outSamples; j += 2, k += 3) - { - // Note that the filters are reversed - - int32 newSample = RESAMPLER_SincConvTwoToThreeFilterInt16(tempBuf + j, - m_filter2, - m_filter1, - LC_ZERO_CROSSINGS); - - // round and shift down - outBuf[k] = (int16)RESAMPLER_Clip16((newSample + 16384) >> 15); - } - - // Do band limited interpolation and set the result into - // every third index in the output buffer. - tempBuf = m_scratchBuffer + bufReadHead3; - for (j = 0, k = LC_MOD3[m_state+2]; k < outSamples; j += 2, k += 3) - { - int32 newSample = RESAMPLER_SincConvTwoToThreeFilterInt16(tempBuf + j, - m_filter1, - m_filter2, - LC_ZERO_CROSSINGS); - - // round and shift down - outBuf[k] = (int16)RESAMPLER_Clip16((newSample + 16384) >> 15); - } - - // Copy the newest samples to the beginning of the buffer - memcpy(m_memBuffers[i], - m_scratchBuffer + m_inputSamples, - FILTER_LENGTH * sizeof(int16)); - } - - // Update state according to amount of output samples. - m_state = LC_MOD3[m_state + (3 - (outSamples % 3))]; - - return outSamples; -} - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_two_to_three_int16.inl --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_two_to_three_int16.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -#ifndef __RESAMPLER_SINC_CONV_TWO_TO_THREE_INT16_INL__ -#define __RESAMPLER_SINC_CONV_TWO_TO_THREE_INT16_INL__ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_common_defs.h" -#include "resampler_data_types.h" - - -static FORCEINLINE int32 -RESAMPLER_SincConvTwoToThreeFilterInt16(const int16 *signalBuf, - const int16 *filterPtr1, - const int16 *filterPtr2, - int length) -{ - - int32 newSample(0); - const int16 *bufferPtr1 = signalBuf; - const int16 *bufferPtr2 = signalBuf+1; - // Calculate the filter. - // Keep newSample in s1.30 format to reduce rounding errors - for (int l = length; l >0 ; l-=4) - { - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - newSample += (int32)(*filterPtr1++) * (*bufferPtr1--) + (int32)(*filterPtr2++) * (*bufferPtr2++); - } - return newSample; -} - - -#endif /* __RESAMPLER_SINC_CONV_ONE_TO_TWO_INT16_INL__ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_two_to_three_tables_standard.cpp --- a/videoeditorengine/audioeditorengine/resampler/src/resampler_sinc_conv_two_to_three_tables_standard.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "resampler_sinc_conv_two_to_three_tables_standard.h" - - -const int16 RESAMPLER_TWO_TO_THREE_FILTER1_STANDARD[RESAMPLER_TWO_TO_THREE_ZERO_CROSSINGS_STANDARD] = -{ 27073, -6673, 3695, -2463, 1771, -1321, 1001, -761, 576, -431, 318, -228, 158, -105, 65, -37 }; - -const int16 RESAMPLER_TWO_TO_THREE_FILTER2_STANDARD[RESAMPLER_TWO_TO_THREE_ZERO_CROSSINGS_STANDARD] = -{ 13498, -5293, 3187, -2194, 1602, -1203, 913, -694, 524, -390, 285, -203, 139, -91, 55, -29 }; - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/Aud.cpp --- a/videoeditorengine/audioeditorengine/src/Aud.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* Copyright (C) 2004 Nokia Corporation. */ - -#include - - -EXPORT_C TInt E32Dll(TDllReason) - { - return KErrNone; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/AudClip.cpp --- a/videoeditorengine/audioeditorengine/src/AudClip.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,453 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* Copyright (c) 2003 Nokia. All rights reserved. */ - -#include "AudClip.h" -#include "AudPanic.h" - -#include "AudClipInfo.h" -#include "AudSong.h" -#include "ProcTools.h" - - -CAudClip* CAudClip::NewL(CAudSong* aSong, const TDesC& aFileName, - TTimeIntervalMicroSeconds aStartTime, - MAudClipInfoObserver& aObserver, TInt aTrackIndex) - { - - CAudClip* self = new (ELeave) CAudClip(aSong); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aStartTime, aObserver, aTrackIndex); - CleanupStack::Pop(self); - return self; - - } - -CAudClip* CAudClip::NewL(CAudSong* aSong, RFile* aFileHandle, - TTimeIntervalMicroSeconds aStartTime, - MAudClipInfoObserver& aObserver, TInt aTrackIndex) - { - - CAudClip* self = new (ELeave) CAudClip(aSong); - CleanupStack::PushL(self); - self->ConstructL(aFileHandle, aStartTime, aObserver, aTrackIndex); - CleanupStack::Pop(self); - return self; - - } - - -CAudClip::CAudClip(CAudSong* aSong) : iSong(aSong), iMute(EFalse), iNormalize(EFalse), -iPriority(KAudClipPriorityNormal) - { - - } - -EXPORT_C CAudClipInfo* CAudClip::Info() const - { - - return iInfo; - } - -EXPORT_C TBool CAudClip::Normalizing() const - { - - return iNormalize; - } - -EXPORT_C TAudDynamicLevelMark CAudClip::DynamicLevelMark(TInt aIndex) const - { - - return *iDynamicLevelMarkArray[aIndex]; - } - -EXPORT_C TInt CAudClip::DynamicLevelMarkCount() const - { - - return iDynamicLevelMarkArray.Count(); - } -EXPORT_C TBool CAudClip::Muting() const - { - return iMute; - } - -EXPORT_C void CAudClip::SetStartTime(TTimeIntervalMicroSeconds aStartTime) - { - - if (iStartTime.Int64() != aStartTime.Int64()-iCutInTime.Int64()) - { - iStartTime = aStartTime.Int64()-iCutInTime.Int64(); - } - - - TInt clipIndexOnSong = iSong->FindClipIndexOnSong(this); - TInt newIndex = 0; - TBool found = EFalse; - for (newIndex = 0 ; newIndex < iSong->ClipCount(KAllTrackIndices); newIndex++) - { - if (iSong->iClipArray[newIndex]->StartTime() > aStartTime) - { - found = ETrue; - break; - } - } - if (!found) - { - newIndex = iSong->ClipCount(KAllTrackIndices); - } - - // the order is the same - if (newIndex == clipIndexOnSong || newIndex == clipIndexOnSong+1) - { - - iSong->FireClipTimingsChanged(iSong, this); - } - else - { - - - TInt oldIndexOnTrack = iIndex; - iSong->UpdateClipArray(); - iSong->UpdateClipIndexes(); - TInt newIndexOnTrack = iIndex; - - if (oldIndexOnTrack != newIndexOnTrack) - { - iSong->FireClipIndicesChanged(iSong, oldIndexOnTrack, newIndexOnTrack, iTrackIndex); - } - else - { - iSong->FireClipTimingsChanged(iSong, this); - } - - } - - } - - - - -EXPORT_C TTimeIntervalMicroSeconds CAudClip::StartTime() const - { - - return iStartTime.Int64()+iCutInTime.Int64(); - } - - - -TInt32 CAudClip::StartTimeMilliSeconds() const - { - - return ProcTools::MilliSeconds(iStartTime); - - } - -EXPORT_C TTimeIntervalMicroSeconds CAudClip::EndTime() const - { - return TTimeIntervalMicroSeconds(iStartTime.Int64()+iCutOutTime.Int64()); - - } - - -EXPORT_C TTimeIntervalMicroSeconds CAudClip::EditedDuration() const - { - TTimeIntervalMicroSeconds edDur(iCutOutTime.Int64()-iCutInTime.Int64()); - return edDur; - - } - -EXPORT_C TInt CAudClip::Priority() const - { - return iPriority; - - } - - -EXPORT_C TInt CAudClip::IndexOnTrack() const - { - - return iIndex; - } - - - -EXPORT_C TInt CAudClip::TrackIndex() const - { - - return iTrackIndex; - } - - -EXPORT_C TTimeIntervalMicroSeconds CAudClip::CutInTime() const - { - - return iCutInTime; - } - - -TInt32 CAudClip::CutInTimeMilliSeconds() const - { - - return ProcTools::MilliSeconds(iCutInTime); - - } - -EXPORT_C void CAudClip::SetCutInTime(TTimeIntervalMicroSeconds aCutInTime) - { - - TInt64 oldCutIn = iCutInTime.Int64(); - TInt64 cutDif = aCutInTime.Int64() - oldCutIn; - - iCutInTime = aCutInTime; - iStartTime = (TTimeIntervalMicroSeconds)(iStartTime.Int64()-cutDif); - iSong->FireClipTimingsChanged(iSong, this); - } - -EXPORT_C TTimeIntervalMicroSeconds CAudClip::CutOutTime() const - { - - return iCutOutTime; - } - -TInt32 CAudClip::CutOutTimeMilliSeconds() const - { - - return ProcTools::MilliSeconds(iCutOutTime); - - - } - -EXPORT_C void CAudClip::SetCutOutTime(TTimeIntervalMicroSeconds aCutOutTime) - { - - iCutOutTime = aCutOutTime; - iSong->FireClipTimingsChanged(iSong, this); - } - - - - -EXPORT_C TBool CAudClip::SetPriority(TInt aPriority) - - { - if (aPriority < 0) return EFalse; - - iPriority = aPriority; - return ETrue; - - } - - -EXPORT_C TInt CAudClip::InsertDynamicLevelMarkL(const TAudDynamicLevelMark& aMark) - { - - if (aMark.iTime < TTimeIntervalMicroSeconds(0)) - { - TAudPanic::Panic(TAudPanic::EIllegalDynamicLevelMark); - } - - TAudDynamicLevelMark* newMark = new (ELeave) TAudDynamicLevelMark(aMark); - - TBool added = EFalse; - TInt err = KErrNone; - - // insert marks so that they are always sorted by time - TInt index = 0; - for (index = 0 ; index < iDynamicLevelMarkArray.Count() ; index++) - { - if (iDynamicLevelMarkArray[index]->iTime == newMark->iTime) - { - // replace the level - TAudDynamicLevelMark* oldMark = iDynamicLevelMarkArray[index]; - iDynamicLevelMarkArray.Remove(index); - delete oldMark; - err = iDynamicLevelMarkArray.Insert(newMark, index); - added = ETrue; - break; - } - else if (iDynamicLevelMarkArray[index]->iTime > newMark->iTime) - { - err = iDynamicLevelMarkArray.Insert(newMark, index); - added = ETrue; - break; - } - } - if (!added) - { - index = iDynamicLevelMarkArray.Count(); - err = iDynamicLevelMarkArray.Insert(newMark, index); - } - if (err != KErrNone) - { - User::Leave(err); - } - - iSong->FireDynamicLevelMarkInserted(*this, *newMark, index); - return index; - - - } - -EXPORT_C TBool CAudClip::RemoveDynamicLevelMark(TInt aIndex) - { - - if (aIndex > iDynamicLevelMarkArray.Count() || aIndex < 0) - { - TAudPanic::Panic(TAudPanic::EAudioClipIllegalIndex); - } - - TAudDynamicLevelMark* mark = iDynamicLevelMarkArray[aIndex]; - - iDynamicLevelMarkArray.Remove(aIndex); - delete mark; - - iSong->FireDynamicLevelMarkRemoved(*this, aIndex); - return ETrue; - } - -EXPORT_C void CAudClip::SetMuting(TBool aMuted) - { - - iMute = aMuted; - - } - -EXPORT_C void CAudClip::SetNormalizing(TBool aNormalizing) - { - - iNormalize = aNormalizing; - - } - -EXPORT_C void CAudClip::Reset(TBool aNotify) - { - - TInt a = 0; - - for (a = 0 ; a < iDynamicLevelMarkArray.Count() ; a++) - { - delete iDynamicLevelMarkArray[a]; - } - iDynamicLevelMarkArray.Reset(); - iCutInTime = 0; - - if (iInfo != 0) - { - iCutOutTime = iInfo->Properties().iDuration; - } - - if (aNotify) - { - iSong->FireClipReseted(*this); - } - - } - - -EXPORT_C void CAudClip::SetVolumeGain(TInt aVolumeGain) - { - iVolumeGain = aVolumeGain; - } - -EXPORT_C TInt CAudClip::GetVolumeGain() - { - return iVolumeGain; - } - -/* -EXPORT_C TBool CAudClip::operator<(const CAudClip &c2) const { - - return (this->iStartTime < c2.StartTime()); - -} - - -EXPORT_C TBool CAudClip::operator>(const CAudClip &c2) const { - - return (this->iStartTime > c2.StartTime()); - -} - -EXPORT_C TBool CAudClip::operator==(const CAudClip &c2) const { - - return (this->iStartTime == c2.StartTime()); - -} -*/ -TInt CAudClip::Compare(const CAudClip& c1, const CAudClip& c2) - { - - if (c1.iStartTime > c2.iStartTime) - { - return 1; - } - else if (c1.iStartTime < c2.iStartTime) - { - return -1; - } - else - { - return 0; - } - } - - - -void CAudClip::ConstructL(const TDesC& aFileName, - TTimeIntervalMicroSeconds aStartTime, - MAudClipInfoObserver& aObserver, TInt aTrackIndex) - { - - __ASSERT_ALWAYS(aStartTime >= TInt64(0), - TAudPanic::Panic(TAudPanic::EAudioClipIllegalStartTime)); - iStartTime = aStartTime; - iTrackIndex = aTrackIndex; - - iInfo = CAudClipInfo::NewL(aFileName, aObserver); - - } - -void CAudClip::ConstructL(RFile* aFileHandle, - TTimeIntervalMicroSeconds aStartTime, - MAudClipInfoObserver& aObserver, TInt aTrackIndex) - { - - __ASSERT_ALWAYS(aStartTime >= TInt64(0), - TAudPanic::Panic(TAudPanic::EAudioClipIllegalStartTime)); - iStartTime = aStartTime; - iTrackIndex = aTrackIndex; - - iInfo = CAudClipInfo::NewL(aFileHandle, aObserver); - - } - - -CAudClip::~CAudClip() - { - - Reset(EFalse); - if (iInfo != 0) - { - delete iInfo; - iInfo = 0; - } - - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/AudClipInfo.cpp --- a/videoeditorengine/audioeditorengine/src/AudClipInfo.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,372 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* Copyright (c) 2003, Nokia. All rights reserved */ - -#include "AudClipInfo.h" -#include "AudProcessor.h" -#include "AudPanic.h" - - - -#include -#include - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - - -EXPORT_C CAudClipInfo* CAudClipInfo::NewL(const TDesC& aFileName, - MAudClipInfoObserver& aObserver) - { - CAudClipInfo* self = NewLC(aFileName, aObserver); - CleanupStack::Pop(self); - return self; - } - - -EXPORT_C CAudClipInfo* CAudClipInfo::NewLC(const TDesC& aFileName, - MAudClipInfoObserver& aObserver) - { - CAudClipInfo* self = new (ELeave) CAudClipInfo(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aObserver); - return self; - } - -EXPORT_C CAudClipInfo* CAudClipInfo::NewL(RFile* aFileHandle, - MAudClipInfoObserver& aObserver) - { - CAudClipInfo* self = NewLC(aFileHandle, aObserver); - CleanupStack::Pop(self); - return self; - } - - -EXPORT_C CAudClipInfo* CAudClipInfo::NewLC(RFile* aFileHandle, - MAudClipInfoObserver& aObserver) - { - CAudClipInfo* self = new (ELeave) CAudClipInfo(); - CleanupStack::PushL(self); - self->ConstructL(aFileHandle, aObserver); - return self; - } - -EXPORT_C TAudFileProperties CAudClipInfo::Properties() const - { - - return *iProperties; - } - -EXPORT_C TPtrC CAudClipInfo::FileName() const - { - return *iFileName; - } - -EXPORT_C RFile* CAudClipInfo::FileHandle() const - { - return iFileHandle; - } - -EXPORT_C void CAudClipInfo::GetVisualizationL(MAudVisualizationObserver& aObserver, - TInt aSize, TInt aPriority) const - { - - - iOperation->StartVisualizationL(aObserver, aSize, aPriority); - } - -EXPORT_C void CAudClipInfo::CancelVisualization() - { - - - iOperation->CancelVisualization(); - } - -CAudClipInfo::CAudClipInfo() : iInfoReady(EFalse) - - { - } - - -void CAudClipInfo::ConstructL(const TDesC& aFileName, MAudClipInfoObserver& aObserver) - { - - iProperties = new (ELeave) TAudFileProperties(); - - iFileName = HBufC::NewL(aFileName.Length()); - *iFileName = aFileName; - iFileHandle = NULL; - - iOperation = CAudClipInfoOperation::NewL(this, aObserver); - iOperation->StartGetPropertiesL(); - - } - -void CAudClipInfo::ConstructL(RFile* aFileHandle, MAudClipInfoObserver& aObserver) - { - - iProperties = new (ELeave) TAudFileProperties(); - - iFileHandle = aFileHandle; - - iFileName = HBufC::NewL(1); - - iOperation = CAudClipInfoOperation::NewL(this, aObserver); - iOperation->StartGetPropertiesL(); - - } - - -EXPORT_C CAudClipInfo::~CAudClipInfo() - { - - PRINT((_L("CAudClipInfo::~CAudClipInfo() in"))); - if (iProperties != 0) - { - delete iProperties; - iProperties = 0; - } - PRINT((_L("CAudClipInfo::~CAudClipInfo() deleted iProperties"))); - if (iOperation) - { - delete iOperation; - iOperation = 0; - } - - PRINT((_L("CAudClipInfo::~CAudClipInfo() deleted iOperation"))); - if (iFileName != 0) - { - delete iFileName; - iFileName = 0; - } - PRINT((_L("CAudClipInfo::~CAudClipInfo() out"))); - - } - - - - -CAudClipInfoOperation* CAudClipInfoOperation::NewL(CAudClipInfo* aInfo, - MAudClipInfoObserver& aObserver) - { - CAudClipInfoOperation* self = - new (ELeave) CAudClipInfoOperation(aInfo, aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -CAudClipInfoOperation::CAudClipInfoOperation(CAudClipInfo* aInfo, - MAudClipInfoObserver& aObserver) : - iInfo(aInfo), iObserver(&aObserver) - - { - - } - - -void CAudClipInfoOperation::ConstructL() - { - - - } - - -CAudClipInfoOperation::~CAudClipInfoOperation() - { - - PRINT((_L("CAudClipInfoOperation::~CAudClipInfoOperation() in"))); - if (iProcessor != 0) - { - delete iProcessor; - iProcessor = 0; - - } - PRINT((_L("CAudClipInfoOperation::~CAudClipInfoOperation() out"))); - - } - - -void CAudClipInfoOperation::NotifyClipInfoReady(TInt aError) - { - - PRINT((_L("CAudClipInfoOperation::NotifyClipInfoReady() in"))); - - iInfo->iInfoReady = ETrue; - - if (iProcessor == 0) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - if (iProcessor != 0) - { - delete iProcessor; - iProcessor = 0; - } - - iObserver->NotifyClipInfoReady(*iInfo, aError); - - PRINT((_L("CAudClipInfoOperation::NotifyClipInfoReady() out"))); - - } - -void CAudClipInfoOperation::StartGetPropertiesL() - { - PRINT((_L("CAudClipInfoOperation::StartGetPropertiesL() in"))); - - if (iProcessor != 0) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - iProcessor = CAudProcessor::NewL(); - iProcessor->GetAudFilePropertiesL(*iInfo->iFileName, iInfo->iFileHandle, - iInfo->iProperties, *this, CActive::EPriorityStandard); - - PRINT((_L("CAudClipInfoOperation::StartGetPropertiesL() out"))); - } - -void CAudClipInfoOperation::StartVisualizationL(MAudVisualizationObserver& aObserver, TInt aSize, - TInt aPriority) - { - - if (iProcessor != 0) - { - TAudPanic::Panic(TAudPanic::EClipInfoProcessAlreadyRunning); - } - iVisualizationObserver = &aObserver; - - CAudProcessor* processor = CAudProcessor::NewLC(); - - processor->StartGetClipVisualizationL(iInfo, aSize, *this, aPriority); - - - CleanupStack::Pop(processor); - iProcessor = processor; - - } - -void CAudClipInfoOperation::CancelVisualization() - { - PRINT((_L("CAudClipInfoOperation::CancelVisualization() in"))); - - if (iProcessor == 0) - { - PRINT((_L("CAudClipInfoOperation::CancelVisualization() no visualization going on, ignore"))); - return; - } - else - { - PRINT((_L("CAudClipInfoOperation::CancelVisualization() cancel iProcessor"))); - iProcessor->CancelClipVisualization(); - - delete iProcessor; - iProcessor = 0; - - iVisualizationObserver = 0; - PRINT((_L("CAudClipInfoOperation::CancelVisualization() out"))); - } - } - -void CAudClipInfoOperation::NotifySongVisualizationCompleted(const CAudSong& /*aSong*/, - TInt /*aError*/, - TInt8* /*aVisualization*/, - TInt /*aSize*/) - { - - // should not be called - TAudPanic::Panic(TAudPanic::EInternal); - - - } - -void CAudClipInfoOperation::NotifySongVisualizationStarted(const CAudSong& /*aSong*/, - TInt /*aError*/) - { - // should not be called - TAudPanic::Panic(TAudPanic::EInternal); - - } - - -void CAudClipInfoOperation::NotifySongVisualizationProgressed(const CAudSong& /*aSong*/, - TInt /*aPercentage*/) - { - - // should not be called - TAudPanic::Panic(TAudPanic::EInternal); - - - } - -void CAudClipInfoOperation::NotifyClipInfoVisualizationCompleted(const CAudClipInfo& aClipInfo, - TInt aError, - TInt8* aVisualization, - TInt aSize) - { - PRINT((_L("CAudClipInfoOperation::NotifyClipInfoVisualizationCompleted() in"))); - if (aError != KErrNone) - { - iVisualizationObserver->NotifyClipInfoVisualizationCompleted(aClipInfo, aError, aVisualization, aSize); - PRINT((_L("CAudClipInfoOperation::NotifyClipInfoVisualizationCompleted() completed with error %d"),aError)); - } - else - { - if (iProcessor != 0) - { - delete iProcessor; - iProcessor = 0; - } - - MAudVisualizationObserver* observer = iVisualizationObserver; - iVisualizationObserver = 0; - observer->NotifyClipInfoVisualizationProgressed(aClipInfo, 100); - observer->NotifyClipInfoVisualizationCompleted(aClipInfo, aError, aVisualization, aSize); - PRINT((_L("CAudClipInfoOperation::NotifyClipInfoVisualizationCompleted() completed"))); - } - - - PRINT((_L("CAudClipInfoOperation::NotifyClipInfoVisualizationCompleted() out"))); - } - - -void CAudClipInfoOperation::NotifyClipInfoVisualizationStarted(const CAudClipInfo& aClipInfo, - TInt aError) - { - - - iVisualizationObserver->NotifyClipInfoVisualizationStarted(aClipInfo, aError); - - } - -void CAudClipInfoOperation::NotifyClipInfoVisualizationProgressed(const CAudClipInfo& aClipInfo, - TInt aPercentage) - { - - - iVisualizationObserver->NotifyClipInfoVisualizationProgressed(aClipInfo, aPercentage); - } diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/AudPanic.cpp --- a/videoeditorengine/audioeditorengine/src/AudPanic.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "AudPanic.h" - - -void TAudPanic::Panic(TCode aCode) - { - User::Panic(_L("Audio Editor Eng"), aCode); - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/AudProcessor.cpp --- a/videoeditorengine/audioeditorengine/src/AudProcessor.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,212 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "AudSong.h" -#include "AudProcessor.h" -#include "AudPanic.h" - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - - -CAudProcessor* CAudProcessor::NewL() - { - CAudProcessor* self = NewLC(); - CleanupStack::Pop(self); - return self; - } - - -CAudProcessor* CAudProcessor::NewLC() - { - CAudProcessor* self = new (ELeave) CAudProcessor; - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - - -CAudProcessor::CAudProcessor() : iProcessing(EFalse) - { - - } - - -void CAudProcessor::ConstructL() - { - iClipInfoAO = CProcClipInfoAO::NewL(); - iProcessingObject = CProcProcess::NewL(); - iVisualizationAO = CProcVisualizationAO::NewL(); - iTimeEstimateAO = CProcTimeEstimateAO::NewL(); - - - - - } - - -CAudProcessor::~CAudProcessor() - { - PRINT((_L("CAudProcessor::~CAudProcessor() in") )); - - - - if (iVisualizationAO != 0) - { - delete iVisualizationAO; - iVisualizationAO = 0; - } - PRINT((_L("CAudProcessor::~CAudProcessor() deleted iVisualizationAO") )); - - if (iProcessingObject != 0) - { - delete iProcessingObject; - iProcessingObject = 0; - } - - PRINT((_L("CAudProcessor::~CAudProcessor() deleted iProcessingObject") )); - if (iClipInfoAO != 0) - { - delete iClipInfoAO; - iClipInfoAO = 0; - } - - PRINT((_L("CAudProcessor::~CAudProcessor() deleted iClipInfoAO") )); - if (iTimeEstimateAO != 0) - { - delete iTimeEstimateAO; - iTimeEstimateAO = 0; - } - - - PRINT((_L("CAudProcessor::~CAudProcessor() out") )); - - } - - - -TBool CAudProcessor::StartSyncProcessingL(const CAudSong* aSong) - { - - if (iProcessing) - { - TAudPanic::Panic(TAudPanic::ESongProcessingOperationAlreadyRunning); - } - - - return iProcessingObject->StartSyncProcessingL(aSong); - - } - -TBool CAudProcessor::ProcessSyncPieceL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration) - { - TBool ret = iProcessingObject->ProcessSyncPieceL(aFrame, aProgress, aDuration); - - if (!ret) return EFalse; - else - { - delete iProcessingObject; - iProcessingObject = 0; - return ETrue; - } - - } - - -/** - * Cancel song processing. - */ -void CAudProcessor::CancelProcessing(MProcProcessObserver& aObserver) - { - - iProcessing = EFalse; - aObserver.NotifyAudioProcessingCompleted(KErrCancel); - } - - -void CAudProcessor::GetAudFilePropertiesL(const TDesC& aFileName, - RFile* aFileHandle, - TAudFileProperties* aProperties, - MProcClipInfoObserver& aObserver, - TInt aPriority) - { - - iClipInfoAO->StartL(aFileName, aFileHandle, aObserver, aProperties, aPriority); - } - - - -void CAudProcessor::StartGetClipVisualizationL(const CAudClipInfo* aClipInfo, TInt aSize, - MAudVisualizationObserver& aObserver, - TInt aPriority) - { - - - iVisualizationAO->StartClipVisualizationL(aClipInfo, aSize, aObserver, aPriority); - - - } - - - -void CAudProcessor::CancelClipVisualization() - { - - if (iVisualizationAO) - { - iVisualizationAO->CancelVisualization(); - } - - } - - -TBool CAudProcessor::StartTimeEstimateL(const CAudSong* aSong, MAudTimeEstimateObserver& aTEObserver) - { - - if (iTimeEstimateAO) - { - return iTimeEstimateAO->StartL(aSong, aTEObserver); - } - else - { - return EFalse; - } - - } - -void CAudProcessor::CancelTimeEstimate() - { - - if (iTimeEstimateAO) - { - iTimeEstimateAO->CancelTimeEstimate(); - } - - } - - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/AudProcessorImpl.cpp --- a/videoeditorengine/audioeditorengine/src/AudProcessorImpl.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,997 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "AudProcessorImpl.h" -#include "ProcAMRInFileHandler.h" - -#include "ProcMP4InFileHandler.h" -#include "ProcADTSInFileHandler.h" -#include "ProcMP3InFileHandler.h" -#include "ProcAWBInFileHandler.h" -#include "ProcWAVInFileHandler.h" - - -#include "ProcAMRFrameHandler.h" -#include "ProcAACFrameHandler.h" -#include "ProcMP3FrameHandler.h" -#include "ProcAWBFrameHandler.h" -#include "ProcWAVFrameHandler.h" - - - -#include "AudCommon.h" -#include "ProcTools.h" -#include "AudPanic.h" - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -const TInt KTimeEstimateTime = 2000; // 1000 ms - -CAudProcessorImpl* CAudProcessorImpl::NewL() - { - - - CAudProcessorImpl* self = new (ELeave) CAudProcessorImpl(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CAudProcessorImpl* CAudProcessorImpl::NewLC() - { - CAudProcessorImpl* self = new (ELeave) CAudProcessorImpl(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -CAudProcessorImpl::~CAudProcessorImpl() - { - - PRINT((_L("CAudProcessorImpl::~CAudProcessorImpl() in"))); - TInt a = 0; - - for (a = 0; a < iInFiles.Count() ; a++) - { - delete iInFiles[a]; - } - iInFiles.Reset(); - - PRINT((_L("CAudProcessorImpl::~CAudProcessorImpl() deleted iInFiles"))); - delete iWAVFrameHandler; - - iClipsWritten.Reset(); - - iProcessingEvents.ResetAndDestroy(); - - PRINT((_L("CAudProcessorImpl::~CAudProcessorImpl() out"))); - } - - -void CAudProcessorImpl::ConstructL() - { - - - - } - -CAudProcessorImpl::CAudProcessorImpl() : iInFiles(8), iSong(0), - iTimeLeft(0), - iCurEvent(0), - iProcessingEvents(8), - iSongDurationMilliSeconds(0), - iSongProcessedMilliSeconds(0) - - { - - - } - -void CAudProcessorImpl::ProcessSongL(const CAudSong* aSong, TInt aRawFrameSize, TBool aGetTimeEstimation) -{ - PRINT((_L("CAudProcessorImpl::ProcessSongL in"))); - - iGetTimeEstimation = aGetTimeEstimation; - - iSilenceStarted = EFalse; - - iSong = aSong; - - TInt clips = aSong->iClipArray.Count(); - - - // bitdepth always 16 - const TInt KBitDepth = 16; - - iWAVFrameHandler = CProcWAVFrameHandler::NewL(KBitDepth); - - // create inFileHandlers for each input clips---> - for (TInt a = 0 ; a < clips ; a++) - { - if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatAMR) - { - PRINT((_L("CAudProcessorImpl::ProcessSongL create AMRNB file handler"))); - CProcInFileHandler* inFileHandler = - CProcAMRInFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), - aSong->iClipArray[a]->Info()->FileHandle(), aSong->iClipArray[a], - 4096, iSong->OutputFileProperties().iSamplingRate, - iSong->OutputFileProperties().iChannelMode); - - iInFiles.Insert(inFileHandler, iInFiles.Count()); - inFileHandler->SetPropertiesL(aSong->iClipArray[a]->Info()->Properties()); - inFileHandler->SetPriority(aSong->iClipArray[a]->Priority()); - - inFileHandler->SeekCutInFrame(); - - if (IsDecodingRequired(aSong->OutputFileProperties(), - aSong->iClipArray[a]->Info()->Properties())) - { - inFileHandler->SetDecodingRequired(ETrue); - } - - - - - } - else if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatMP4) - { - PRINT((_L("CAudProcessorImpl::ProcessSongL create MP4 file handler"))); - CProcInFileHandler* inFileHandler = - CProcMP4InFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), - aSong->iClipArray[a]->Info()->FileHandle(), - aSong->iClipArray[a], - 4096, iSong->OutputFileProperties().iSamplingRate, - iSong->OutputFileProperties().iChannelMode); - - iInFiles.Insert(inFileHandler, iInFiles.Count()); - TAudFileProperties prororo; - inFileHandler->GetPropertiesL(&prororo); - inFileHandler->SetPriority(aSong->iClipArray[a]->Priority()); - inFileHandler->SeekCutInFrame(); - - if (IsDecodingRequired(aSong->OutputFileProperties(), - aSong->iClipArray[a]->Info()->Properties())) - { - inFileHandler->SetDecodingRequired(ETrue); - } - - - - } - - else if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatAAC_ADTS) - { - PRINT((_L("CAudProcessorImpl::ProcessSongL create AAC ADTS file handler"))); - CProcInFileHandler* inFileHandler = - CProcADTSInFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), - aSong->iClipArray[a]->Info()->FileHandle(), - aSong->iClipArray[a], - 8092, iSong->OutputFileProperties().iSamplingRate, - iSong->OutputFileProperties().iChannelMode); - TAudFileProperties pro; - - iInFiles.Insert(inFileHandler, iInFiles.Count()); - inFileHandler->GetPropertiesL(&pro); - inFileHandler->SetPriority(aSong->iClipArray[a]->Priority()); - inFileHandler->SeekCutInFrame(); - - if (IsDecodingRequired(aSong->OutputFileProperties(), - aSong->iClipArray[a]->Info()->Properties())) - { - inFileHandler->SetDecodingRequired(ETrue); - } - - - - } - else if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatMP3) - { - PRINT((_L("CAudProcessorImpl::ProcessSongL create MP3 file handler"))); - CProcInFileHandler* inFileHandler = - CProcMP3InFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), - aSong->iClipArray[a]->Info()->FileHandle(), - aSong->iClipArray[a], - 4096, iSong->OutputFileProperties().iSamplingRate, - iSong->OutputFileProperties().iChannelMode); - - iInFiles.Insert(inFileHandler, iInFiles.Count()); - inFileHandler->SetPropertiesL(aSong->iClipArray[a]->Info()->Properties()); - inFileHandler->SetPriority(aSong->iClipArray[a]->Priority()); - inFileHandler->SeekCutInFrame(); - - - if (IsDecodingRequired(aSong->OutputFileProperties(), - aSong->iClipArray[a]->Info()->Properties())) - { - inFileHandler->SetDecodingRequired(ETrue); - } - - } - else if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatAMRWB) - { - PRINT((_L("CAudProcessorImpl::ProcessSongL create AMRWB file handler"))); - CProcInFileHandler* inFileHandler = - CProcAWBInFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), - aSong->iClipArray[a]->Info()->FileHandle(), - aSong->iClipArray[a], - 4096, iSong->OutputFileProperties().iSamplingRate, - iSong->OutputFileProperties().iChannelMode); - - iInFiles.Insert(inFileHandler, iInFiles.Count()); - inFileHandler->SetPropertiesL(aSong->iClipArray[a]->Info()->Properties()); - inFileHandler->SetPriority(aSong->iClipArray[a]->Priority()); - inFileHandler->SeekCutInFrame(); - - if (IsDecodingRequired(aSong->OutputFileProperties(), - aSong->iClipArray[a]->Info()->Properties())) - { - inFileHandler->SetDecodingRequired(ETrue); - } - - } - else if (aSong->iClipArray[a]->Info()->Properties().iFileFormat == EAudFormatWAV) - { - PRINT((_L("CAudProcessorImpl::ProcessSongL create WAV file handler"))); - CProcInFileHandler* inFileHandler = - CProcWAVInFileHandler::NewL(aSong->iClipArray[a]->Info()->FileName(), - aSong->iClipArray[a]->Info()->FileHandle(), - aSong->iClipArray[a], - 4096, iSong->OutputFileProperties().iSamplingRate, - iSong->OutputFileProperties().iChannelMode); - - iInFiles.Insert(inFileHandler, iInFiles.Count()); - inFileHandler->SetPropertiesL(aSong->iClipArray[a]->Info()->Properties()); - inFileHandler->SetPriority(aSong->iClipArray[a]->Priority()); - inFileHandler->SeekCutInFrame(); - - if (IsDecodingRequired(aSong->OutputFileProperties(), - aSong->iClipArray[a]->Info()->Properties())) - { - inFileHandler->SetDecodingRequired(ETrue); - } - - } - - } - - - // find the biggest frame size for mixing buffer - TInt maxFrameSize = 0; - for (TInt q = 0 ; q < iInFiles.Count() ; q++) - { - iInFiles[q]->SetRawAudioFrameSize(aRawFrameSize); - - if (iInFiles[q]->GetDecodedFrameSize() > maxFrameSize) - { - maxFrameSize = iInFiles[q]->GetDecodedFrameSize(); - } - - } - - - - GetProcessingEventsL(); - iProcessingEvents[0]->GetAllIndexes(iClipsWritten); - iTimeLeft = iProcessingEvents[1]->iPosition; - iCurEvent = 0; - - - if (iGetTimeEstimation) - { - iTimer.HomeTime(); - - if (iTimeLeft >= KTimeEstimateTime) - { - iTimeEstimateCoefficient = iTimeLeft/KTimeEstimateTime; - - iTimeLeft = KTimeEstimateTime; - } - else - { - iTimeEstimateCoefficient = 1; - } - - } - - - PRINT((_L("CAudProcessorImpl::ProcessSongL out"))); - } - -TBool CAudProcessorImpl::ProcessSyncPieceL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration, TBool& aRaw) -{ - - PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL in"))); - aDuration = 0; - - if (iSongProcessedMilliSeconds > iSongDurationMilliSeconds) - { - // processing is ready - StopProcessing(); - PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL stopped processing 1, out"))); - return ETrue; - - } - - - while (iTimeLeft <= 0) - { - - iCurEvent++; - - if (iCurEvent >= iProcessingEvents.Count()-1) - { - - // do we need silence in the end? - if (iSongProcessedMilliSeconds < ProcTools::MilliSeconds(iSong->iSongDuration)) - { - - if (iGetTimeEstimation) - { - StopProcessing(); - PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL stopped processing in time estimate case, out"))); - return ETrue; - - } - - - WriteSilenceL(aFrame, aProgress, aDuration, aRaw); - return EFalse; - } - // processing is ready - StopProcessing(); - PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL stopped processing 2, out"))); - return ETrue; - } - - iClipsWritten.Reset(); - for (TInt tr = 0 ; tr < iProcessingEvents[iCurEvent]->IndexCount() ; tr++) - { - - TInt clipIndex = iProcessingEvents[iCurEvent]->GetIndex(tr); - - - if (clipIndex == -1 || !iSong->Clip(clipIndex, KAllTrackIndices)->Muting()) - { - iClipsWritten.Append(iProcessingEvents[iCurEvent]->GetIndex(tr)); - - } - - } - iTimeLeft = iProcessingEvents[iCurEvent+1]->iPosition - - iProcessingEvents[iCurEvent]->iPosition; - - if (iGetTimeEstimation) - { - - TTime timeNow; - timeNow.HomeTime(); - - // how long has it been from the previous event? - TTimeIntervalMicroSeconds msFromPrev = timeNow.MicroSecondsFrom(iTimer); - - iTimeEstimate += msFromPrev.Int64() * iTimeEstimateCoefficient; - - // set iTimer to home time - iTimer.HomeTime(); - - if (iTimeLeft > KTimeEstimateTime) - { - iTimeEstimateCoefficient = iTimeLeft/KTimeEstimateTime; - iTimeLeft = KTimeEstimateTime; - } - else - { - iTimeEstimateCoefficient = 1; - } - - } - - } - - - if (iClipsWritten.Count() == 1) - { - // if silence - WriteSilenceL(aFrame, aProgress, aDuration, aRaw); - PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL silence, out"))); - return EFalse; - - } - else if (iTimeLeft > 0) - { - - - TInt inClipIndex1 = 0; - TInt inClipIndex2 = 0; - - HighestInFilePriority(inClipIndex1, inClipIndex2); - - CAudClip* clip1 = iSong->iClipArray[iClipsWritten[inClipIndex1]]; - CAudClip* clip2 = iSong->iClipArray[iClipsWritten[inClipIndex2]]; - - CProcInFileHandler* inHandler1 = iInFiles[iClipsWritten[inClipIndex1]]; - CProcInFileHandler* inHandler2 = iInFiles[iClipsWritten[inClipIndex2]]; - - - TBool writeClip1 = ETrue; - TBool writeClip2 = ETrue; - - if (clip1 == clip2) - { - writeClip2 = EFalse; - } - if (clip1->Muting()) - { - writeClip1 = EFalse; - } - if (clip2->Muting()) - { - writeClip2 = EFalse; - } - - - HBufC8* frame1 = 0; - HBufC8* frame2 = 0; - TInt siz1 = 0; - TInt32 tim1 = 0; - TInt siz2 = 0; - TInt32 tim2 = 0; - - TBool getFrameRet1 = EFalse; - TBool getFrameRet2 = EFalse; - // If the clip is muted -> return silence - - if (!writeClip1 && !writeClip2) - { - - getFrameRet1 = inHandler1->GetSilentAudioFrameL(frame1, siz1, tim1, aRaw); - - } - - else if (!writeClip1 && writeClip2) - { - - getFrameRet2 = inHandler2->GetAudioFrameL(frame2, siz2, tim2, aRaw); - - } - else if (writeClip1 && !writeClip2) - { - - getFrameRet1 = inHandler1->GetAudioFrameL(frame1, siz1, tim1, aRaw); - - } - else - { - - TBool decodingRequired1 = inHandler1->DecodingRequired(); - TBool decodingRequired2 = inHandler2->DecodingRequired(); - - // decoding is needed due to mixing - inHandler1->SetDecodingRequired(ETrue); - inHandler2->SetDecodingRequired(ETrue); - - getFrameRet1 = inHandler1->GetAudioFrameL(frame1, siz1, tim1, aRaw); - - // fix to rel2, put frame1 to cleanup stack for the next operation - CleanupStack::PushL(frame1); - getFrameRet2 = inHandler2->GetAudioFrameL(frame2, siz2, tim2, aRaw); - CleanupStack::Pop(); // frame1, will be put to cleanupstack later-> - - - inHandler1->SetDecodingRequired(decodingRequired1); - inHandler2->SetDecodingRequired(decodingRequired2); - - } - - - if(!getFrameRet1 && !getFrameRet2) - { - // no audio frames left -> write silence - - getFrameRet1 = inHandler1->GetSilentAudioFrameL(frame1, siz1, tim1, aRaw); - - } - - if (frame1 != 0) - { - CleanupStack::PushL(frame1); - } - if (frame2 != 0) - { - CleanupStack::PushL(frame2); - } - - - if (getFrameRet1 && getFrameRet2) - { - - // mix the two frames - iWAVFrameHandler->MixL(frame1, frame2, aFrame); - CleanupStack::PopAndDestroy(frame2); - CleanupStack::PopAndDestroy(frame1); - aDuration = TUint(tim1*1000); - - } - else if (getFrameRet1 && !getFrameRet2) - { - aFrame = HBufC8::NewL(frame1->Length()); - aFrame->Des().Copy(frame1->Des()); - CleanupStack::PopAndDestroy(frame1); - aDuration = TUint(tim1*1000); - - - } - else if (!getFrameRet1 && getFrameRet2) - { - - aFrame = HBufC8::NewL(frame2->Length()); - aFrame->Des().Copy(frame2->Des()); - CleanupStack::PopAndDestroy(frame2); - aDuration = TUint(tim2*1000); - - } - else if (!getFrameRet1 && !getFrameRet2) - { - - // shouldn't get here... - - User::Leave(KErrGeneral); - } - - - iTimeLeft -= ProcTools::MilliSeconds(aDuration); - iSongProcessedMilliSeconds += ProcTools::MilliSeconds(aDuration); - - - } - - if (iSongDurationMilliSeconds > 0) - { - - // update progress - aProgress = (iSongProcessedMilliSeconds*100)/iSongDurationMilliSeconds; - - } - PRINT((_L("CAudProcessorImpl::ProcessSyncPieceL out"))); - return EFalse; - - } - - -void CAudProcessorImpl::GetAudFilePropertiesL(const TDesC& aFileName, RFile* aFileHandle, - TAudFileProperties* aProperties) - { - - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL in"))); - - - - PRINT(_L("CAudProcessorImpl::GetAudFilePropertiesL read header from file")); - - TBuf8<10> fileHeader; - - if (!aFileHandle) - { - RFs* fs = new (ELeave) RFs; - CleanupStack::PushL(fs); - User::LeaveIfError( fs->Connect() ); - - RFile file; - TInt error = file.Open(*fs, aFileName, EFileShareReadersOnly | EFileStream | EFileRead);//EFileShareAny | EFileStream | EFileRead); - if (error != KErrNone) - { - error = file.Open(*fs, aFileName, EFileShareAny | EFileStream | EFileRead); - } - if (error == KErrNone) - { - error = file.Read(fileHeader); - } - file.Close(); - fs->Close(); - CleanupStack::PopAndDestroy(fs); - User::LeaveIfError(error); - } - else - { - TInt pos = 0; - - User::LeaveIfError( aFileHandle->Seek(ESeekCurrent, pos) ); - - TInt zero = 0; - User::LeaveIfError( aFileHandle->Seek(ESeekStart, zero) ); - User::LeaveIfError( aFileHandle->Read(fileHeader) ); - - User::LeaveIfError( aFileHandle->Seek(ESeekStart, pos) ); - } - - if (fileHeader.Length() < 10 ) //AMR-WB has 9-byte header, but header-only clips are not accepted. Hence accepting only 10 and more byte clips. - { - PRINT(_L("CAudProcessorImpl::GetAudFilePropertiesL the file has less than 9 bytes, it must be invalid")); - User::Leave(KErrCorrupt); - } - - PRINT(_L("CAudProcessorImpl::GetAudFilePropertiesL interpret the header")); - - TParse fp; - TFileName name; - - if (!aFileHandle) - fp.Set(aFileName, NULL, NULL); - else - { - User::LeaveIfError( aFileHandle->FullName(name) ); - fp.Set(name, NULL, NULL); - } - - if ( fileHeader.Mid(4,4) == _L8("ftyp") ) - { - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL 3gp/mp4/m4a based on ftyp"))); - // 3gp/mp4/m4a; extension-based recognition later - CProcInFileHandler* inFileHandler = CProcMP4InFileHandler::NewL(aFileName, aFileHandle, 0, 4096); - CleanupStack::PushL(inFileHandler); - inFileHandler->GetPropertiesL(aProperties); - - CleanupStack::PopAndDestroy(inFileHandler); - } - else if (fileHeader.Mid(0,6) == _L8("#!AMR\n")) - { - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL AMR-NB based on #!AMR"))); - // AMR-NB - CProcInFileHandler* inFileHandler = CProcAMRInFileHandler::NewL(aFileName, aFileHandle, 0, 4096); - CleanupStack::PushL(inFileHandler); - - inFileHandler->GetPropertiesL(aProperties); - - CleanupStack::PopAndDestroy(inFileHandler); - - } - else if (fileHeader.Mid(0,9) == _L8("#!AMR-WB\n")) - { - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL awb based on #!AMR-WB"))); - CProcInFileHandler* inFileHandler = CProcAWBInFileHandler::NewL(aFileName, aFileHandle,0, 4096); - CleanupStack::PushL(inFileHandler); - inFileHandler->GetPropertiesL(aProperties); - - CleanupStack::PopAndDestroy(inFileHandler); - } - else if (fp.Ext().CompareF(_L(".aac")) == 0) - { - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL aac based on extension"))); - CProcInFileHandler* inFileHandler = CProcADTSInFileHandler::NewL(aFileName, aFileHandle, 0, 4096); - CleanupStack::PushL(inFileHandler); - inFileHandler->GetPropertiesL(aProperties); - - CleanupStack::PopAndDestroy(inFileHandler); - } - else if (fp.Ext().CompareF(_L(".3gp")) == 0) - { - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL 3gp based on extension"))); - - CProcInFileHandler* inFileHandler = CProcMP4InFileHandler::NewL(aFileName, aFileHandle, 0, 4096); - - CleanupStack::PushL(inFileHandler); - inFileHandler->GetPropertiesL(aProperties); - - CleanupStack::PopAndDestroy(inFileHandler); - - } - - else if (fp.Ext().CompareF(_L(".m4a")) == 0 || - fp.Ext().CompareF(_L(".mp4")) == 0) - { - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL mp4/m4a based on extension"))); - - CProcInFileHandler* inFileHandler = 0; - - inFileHandler = CProcMP4InFileHandler::NewL(aFileName, aFileHandle, 0, 4096); - CleanupStack::PushL(inFileHandler); - inFileHandler->GetPropertiesL(aProperties); - CleanupStack::PopAndDestroy(inFileHandler); - - } - else if (fp.Ext().CompareF(_L(".amr")) == 0) - { - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL AMR-NB based on extension"))); - // AMR-NB - CProcInFileHandler* inFileHandler = CProcAMRInFileHandler::NewL(aFileName, aFileHandle, 0, 4096); - CleanupStack::PushL(inFileHandler); - - inFileHandler->GetPropertiesL(aProperties); - - CleanupStack::PopAndDestroy(inFileHandler); - } - else if (fp.Ext().CompareF(_L(".awb")) == 0) - { - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL awb based on extension"))); - CProcInFileHandler* inFileHandler = CProcAWBInFileHandler::NewL(aFileName, aFileHandle, 0, 4096); - CleanupStack::PushL(inFileHandler); - inFileHandler->GetPropertiesL(aProperties); - - CleanupStack::PopAndDestroy(inFileHandler); - } - else if (fp.Ext().CompareF(_L(".mp3")) == 0) - { - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL mp3 based on extension"))); - - CProcInFileHandler* inFileHandler = CProcMP3InFileHandler::NewL(aFileName, aFileHandle, 0, 4096); - CleanupStack::PushL(inFileHandler); - inFileHandler->GetPropertiesL(aProperties); - - CleanupStack::PopAndDestroy(inFileHandler); - } - else if (fp.Ext().CompareF(_L(".wav")) == 0) - { - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL wav based on extension"))); - - CProcInFileHandler* inFileHandler = CProcWAVInFileHandler::NewL(aFileName, aFileHandle, 0, 8192); - CleanupStack::PushL(inFileHandler); - inFileHandler->GetPropertiesL(aProperties); - CleanupStack::PopAndDestroy(inFileHandler); - } - else - { - User::Leave(KErrNotSupported); - } - - PRINT((_L("CAudProcessorImpl::GetAudFilePropertiesL out"))); - } - - -TInt64 CAudProcessorImpl::GetFinalTimeEstimate() const - { - return iTimeEstimate; - } - -void CAudProcessorImpl::GetProcessingEventsL() - { - - TInt clips = iSong->iClipArray.Count(); - - CProcessingEvent* newEvent = 0; - - TInt a = 0; - - // create a new processing event from each clips cutIn and cutOut - for (a = 0 ; a < clips ; a++) - { - - - // cut in time: - newEvent = CProcessingEvent::NewL(); - newEvent->iChangedClipIndex = a; - newEvent->iCutIn = ETrue; - TInt32 startTime = iSong->iClipArray[a]->StartTimeMilliSeconds(); - TInt32 cutInTime= iSong->iClipArray[a]->CutInTimeMilliSeconds(); - newEvent->iPosition = startTime+cutInTime; - iProcessingEvents.Insert(newEvent, 0); - - // cut out time - newEvent = CProcessingEvent::NewL(); - newEvent->iChangedClipIndex = a; - newEvent->iCutIn = EFalse; - TInt32 cutOutTime= iSong->iClipArray[a]->CutOutTimeMilliSeconds(); - newEvent->iPosition = startTime+cutOutTime; - iProcessingEvents.Insert(newEvent, 0); - - } - - - - - // order processing events - TLinearOrder order(CProcessingEvent::Compare); - iProcessingEvents.Sort(order); - - // add a new processing events in the beginning to represent silence - // (there is a possibility that the first clip doesn't start from 0 ms) - newEvent = CProcessingEvent::NewL(); - newEvent->iChangedClipIndex = -1; - newEvent->InsertIndex(-1); - newEvent->iCutIn = ETrue; - newEvent->iPosition = 0; - iProcessingEvents.Insert(newEvent, 0); - - // the next for-loop adds indexes of those clips that are supposed to be mixed to - // each processing event - - for (TInt r = 1; r < iProcessingEvents.Count() ; r++) - { - - - for (TInt i = 0 ; i < iProcessingEvents[r-1]->IndexCount() ; i++) - { - iProcessingEvents[r]->InsertIndex(iProcessingEvents[r-1]->GetIndex(i)); - } - - - if (iProcessingEvents[r]->iCutIn) - { - iProcessingEvents[r]->InsertIndex(iProcessingEvents[r]->iChangedClipIndex); - } - else - { - - TInt oldIndexInArray = iProcessingEvents[r]->FindIndex(iProcessingEvents[r]->iChangedClipIndex); - - if (oldIndexInArray >= 0 && oldIndexInArray < iProcessingEvents[r]->IndexCount()) - { - iProcessingEvents[r]->RemoveIndex(oldIndexInArray); - } - - } - - } - - //iSongDurationMilliSeconds = (iSong->iSongDuration.Int64()/1000); - iSongDurationMilliSeconds = ProcTools::MilliSeconds(iSong->iSongDuration); - - //iProcessingEvents[iProcessingEvents.Count()-1]->iPosition; - - - } - - - - -TBool CAudProcessorImpl::StopProcessing() - { - - if (iGetTimeEstimation) - { - - TTime timeNow; - timeNow.HomeTime(); - - // how long has it been from the previous event? - TTimeIntervalMicroSeconds msFromPrev = timeNow.MicroSecondsFrom(iTimer); - - iTimeEstimate += msFromPrev.Int64() * iTimeEstimateCoefficient; - } - - - iProcessingEvents.ResetAndDestroy(); - iInFiles.ResetAndDestroy(); - - return ETrue; - } - -TBool CAudProcessorImpl::WriteSilenceL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration, TBool& aRaw) - { - HBufC8* silentFrame = 0; - TInt silSize = 0; - TInt32 silDur = 0; - - if (iSong->iProperties->iAudioType == EAudAAC_MPEG4 && - iSong->iProperties->iChannelMode == EAudSingleChannel) - { - - aDuration = ((1024*1000)/(iSong->iProperties->iSamplingRate))*1000; - - silDur = ProcTools::MilliSeconds(aDuration); - - aFrame = HBufC8::NewL(KSilentMonoAACFrameLenght); - aFrame->Des().Append(KSilentMonoAACFrame, KSilentMonoAACFrameLenght); - - aRaw = EFalse; - - } - else if (iSong->iProperties->iAudioType == EAudAAC_MPEG4 && - iSong->iProperties->iChannelMode == EAudStereo) - { - - aDuration = ((1024*1000)/(iSong->iProperties->iSamplingRate))*1000; - - silDur = ProcTools::MilliSeconds(aDuration); - - aFrame = HBufC8::NewL(KSilentStereoAACFrameLenght); - aFrame->Des().Append(KSilentStereoAACFrame, KSilentStereoAACFrameLenght); - - aRaw = EFalse; - - } - else - { - iInFiles[0]->GetSilentAudioFrameL(silentFrame, silSize, silDur, aRaw); - - aFrame= silentFrame; - aDuration = TUint(silDur*1000); - - } - - iSongProcessedMilliSeconds += silDur; - iTimeLeft -= silDur; - - if (iSongDurationMilliSeconds > 0) - { - aProgress = (iSongProcessedMilliSeconds*100)/iSongDurationMilliSeconds; - } - - return ETrue; - } - - -TBool CAudProcessorImpl::HighestInFilePriority(TInt& aFirst, TInt& aSecond) - { - - aFirst = 1; - aSecond = 1; - - TInt highest = 1; - - TInt secondHighest = 1; - - - for (TInt a = 1 ; a < iClipsWritten.Count() ; a++) - { - if (iInFiles[iClipsWritten[a]]->Priority() >= highest) - { - - // highest priority - aFirst = a; - highest = iInFiles[iClipsWritten[a]]->Priority(); - - } - else if (iInFiles[iClipsWritten[a]]->Priority() >= secondHighest) - { - aSecond = a; - secondHighest = iInFiles[iClipsWritten[a]]->Priority(); - } - - } - - - return ETrue; - } - -TBool CAudProcessorImpl::IsDecodingRequired(const TAudFileProperties& prop1, - const TAudFileProperties& prop2) - { - - TBool decodingNeeded = EFalse; - TAudFileProperties tmpProp1 = prop1; - TAudFileProperties tmpProp2 = prop2; - - - if (tmpProp1.iAudioType != - tmpProp2.iAudioType || - tmpProp1.iSamplingRate != - tmpProp2.iSamplingRate || - tmpProp1.iChannelMode != - tmpProp2.iChannelMode) - { - decodingNeeded = ETrue; - } - - return decodingNeeded; - - - } - - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/AudSong.cpp --- a/videoeditorengine/audioeditorengine/src/AudSong.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1438 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "AudSong.h" -#include "AudClip.h" -#include "AudPanic.h" -#include "ProcInFileHandler.h" -#include "ProcADTSInFileHandler.h" -#include "ProcAMRInFileHandler.h" -#include "ProcMP4InFileHandler.h" -#include "ProcAWBInFileHandler.h" -#include "AACConstants.h" -#include "audconstants.h" - -#include "AudProcessor.h" -#include "AACApi.h" -#include "aedproctimeestimate.h" - -#include - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -EXPORT_C CAudSong* CAudSong::NewL(RFs *aFs) - { - CAudSong* self = NewLC(aFs); - CleanupStack::Pop(self); - return self; - } - - -EXPORT_C CAudSong* CAudSong::NewLC(RFs *aFs) - { - CAudSong* self = new (ELeave) CAudSong(aFs); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -CAudSong::CAudSong(RFs *aFs) : iFs(aFs), iClipArray(32), iSongDuration(0), - iSongDurationManuallySet(EFalse), iObserverArray(16), iNormalize(EFalse) - { - } - - -void CAudSong::ConstructL() - { - iProperties = new (ELeave) TAudFileProperties(); - - iProperties->iAudioType = EAudNoAudio; - iProperties->iFileFormat = EAudFormatUnrecognized; - iProperties->iDuration = 0; - iProperties->iFrameCount = 0; - iProperties->iFrameLen = 0; - iProperties->iFrameDuration = 0; - - - iProcessOperation = CAudSongProcessOperation::NewL(this); - iAddOperation = CAudSongAddClipOperation::NewL(this); - - -#ifdef _WRITE_OUTPUT_TO_FILE_ - - - TBuf<32> fileName; - _LIT(KFn, "C:\\audioEngineOut."); - _LIT(KTextFileName, "C:\\audioEngineOut.txt"); - - fileName.Append(KFn); - - if (iProperties->iAudioType == EAudAMR) - { - fileName.Append(_L("amr")); - } - else - { - fileName.Append(_L("aac")); - } - - - User::LeaveIfError(iDebFs.Connect()); - iDebFs.Delete(fileName); - iDebFs.Delete(KTextFileName); - - iFileOpen = EFalse; - TInt err1 = iAudioFile.Create(iDebFs, fileName, EFileWrite); - - TInt err2 = iTextFile.Create(iDebFs, KTextFileName, EFileWrite); - - if (err1 == KErrNone && err2 == KErrNone) - { - iFileOpen = ETrue; - } - - if (iFileOpen && iProperties->iAudioType == EAudAMR) - { - iAudioFile.Write(_L8("#!AMR")); - } - -#endif - - - } - - -EXPORT_C CAudSong::~CAudSong() - { - - Reset(EFalse); - delete iProperties; - iProperties = 0; - delete iProcessOperation; - iProcessOperation = 0; - delete iAddOperation; - iAddOperation = 0; - - - iObserverArray.Reset(); - - -#ifdef _WRITE_OUTPUT_TO_FILE_ - iAudioFile.Close(); - iTextFile.Close(); - iDebFs.Close(); - -#endif - - } - -EXPORT_C TInt CAudSong::GetSizeEstimateL() const - { - - - // if there are no clips added yet - if (iClipArray.Count() == 0) - { - return 0; - } - - TInt durationMilli = ProcTools::MilliSeconds(iClipArray[iClipArray.Count()-1]->EndTime()); - TInt silenceDuration = ProcTools::MilliSeconds(iSongDuration) - durationMilli; - - if (silenceDuration < 0) - { - silenceDuration = 0; - } - - TInt sizeInBytes = 0; - - const TInt KBitrate = iProperties->iBitrate; - const TInt KBitsInByte = 8; - TInt KByterate = KBitrate/KBitsInByte; - - // make sure we round up - sizeInBytes = (durationMilli/1000+1)*KByterate; - - TInt frameDurationMilli = 20; // AMR - TInt silentFrameLen = 13; // AMR - - if (iProperties->iAudioType == EAudAAC_MPEG4) - { - - frameDurationMilli = ((1024*1000)/(iProperties->iSamplingRate)); - - if (iProperties->iChannelMode == EAudSingleChannel) - { - silentFrameLen = KSilentMonoAACFrameLenght; - } - else - { - silentFrameLen = KSilentStereoAACFrameLenght; - } - - } - - if (frameDurationMilli > 0) - { - TInt silentFrames = silenceDuration/frameDurationMilli; - TInt silenceSize = silentFrames*silentFrameLen; - sizeInBytes += silenceSize; - - } - - return sizeInBytes; - - } - -EXPORT_C TInt CAudSong::GetFrameSizeEstimateL(TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds aEndTime) const - { - // if there are no clips added yet - if (iClipArray.Count() == 0) - { - return 0; - } - - TInt frameDurationMicro = 20000; // AMR - - if (iProperties->iAudioType == EAudAAC_MPEG4) - { - - frameDurationMicro = ((1024*1000)/(iProperties->iSamplingRate))*1000; - } - - // just in case to prevent infinite loop - if (frameDurationMicro <= 0) - { - return 0; - } - - TInt size = 0; - - // Calculate the time of the first frame included in the time interval - TInt64 firstFrameIndex = aStartTime.Int64() / frameDurationMicro; - TInt64 currentTime = firstFrameIndex * frameDurationMicro; - - while (currentTime + frameDurationMicro <= aEndTime.Int64()) // Make sure the whole frame fits inside the time interval - { - - TBool silence = ETrue; - TInt clipIndex = 0; - TInt overLappingClips = 0; - - for (TInt a = 0 ; a < iClipArray.Count() ; a++) - { - if (!iClipArray[a]->Muting()) - { - - if ((currentTime >= iClipArray[a]->iStartTime.Int64() + iClipArray[a]->iCutInTime.Int64()) && - (currentTime < iClipArray[a]->iStartTime.Int64() + iClipArray[a]->iCutOutTime.Int64())) - - { - silence = EFalse; - clipIndex = a; - overLappingClips++; - - } - } - } - - TInt frameSize = 0; - if (silence) - { - - // if there is no audio around "aTime", just return a silent frame length - - if (iProperties->iAudioType == EAudAAC_MPEG4) - { - - if (iProperties->iChannelMode == EAudSingleChannel) - { - frameSize = KSilentMonoAACFrameLenght; - } - else - { - frameSize = KSilentStereoAACFrameLenght; - } - } - else if (iProperties->iAudioType == EAudAMR) - { - - TInt KSilentFrameLen = 13; // AMR - frameSize = KSilentFrameLen; - - } - - size +=frameSize; - currentTime += frameDurationMicro; - continue; - - } - - - - // if not silent, estimate according to bitrate if transcoding - // if no transcoding is necessary, return the frame length of the original - // input clip - - // input clip is not transcoded if the original clip has the same - // audio properties as the output clip and no mixing is needed - - TAudFileProperties clipProp = iClipArray[clipIndex]->Info()->Properties(); - - TBool clipTranscoded = EFalse; - - if (clipProp.iAudioType != - iProperties->iAudioType || - clipProp.iSamplingRate != - iProperties->iSamplingRate || - clipProp.iChannelMode != - iProperties->iChannelMode) - { - clipTranscoded = ETrue; - } - - if (overLappingClips > 1) - { - clipTranscoded = ETrue; - } - - - if (clipTranscoded) - { - const TInt KBitrate = iProperties->iBitrate; - const TInt KBitsInByte = 8; - - TInt KByterate = KBitrate/KBitsInByte; - - TInt frameDurationMilli = 20; // AMR - - if (iProperties->iAudioType == EAudAAC_MPEG4) - { - - frameDurationMilli = ((1024*1000)/(iProperties->iSamplingRate)); - - } - - frameSize = (KByterate/(1000/frameDurationMilli)+1); - - } - else - { - - frameSize = clipProp.iFrameLen; - - } - - size +=frameSize; - currentTime += frameDurationMicro; - continue; - - } - - return size; - - } - -EXPORT_C TAudFileProperties CAudSong::OutputFileProperties() const - { - - return *iProperties; - } - - -EXPORT_C TBool CAudSong::GetMP4DecoderSpecificInfoLC(HBufC8*& aDecSpecInfo, TInt aMaxSize) const - { - - if (iClipArray.Count() == 0) - { - return EFalse; - } - - if (iProperties->iAudioType == EAudAAC_MPEG4) - - { - - int16 frameLen = 1024; - int32 sampleRate = iProperties->iSamplingRate; - uint8 profile = LC_OBJECT; - uint8 nChannels = 1; - uint8 decSpecInfo[16]; - int16 nConfigBytes; - - if (iProperties->iChannelMode == EAudStereo) - { - nChannels = 2; - } - - - //nConfigBytes = AACGetMP4ConfigInfo(&aacInfo, decSpecInfo, 16); - nConfigBytes = AACGetMP4ConfigInfo(sampleRate, profile, - nChannels, frameLen, decSpecInfo, aMaxSize); - - - if (nConfigBytes > 0) - { - - aDecSpecInfo = HBufC8::NewLC(nConfigBytes); - aDecSpecInfo->Des().Append(decSpecInfo, nConfigBytes); - - } - - return ETrue; - - } - else if (iProperties->iAudioType == EAudAMR) - { - aDecSpecInfo = HBufC8::NewLC(aMaxSize); - - const TUint8 frameDecSpecInfo[] = {0x14,0x08}; //the decoder specific - const TInt frameSize = 2; //constant as maximum size of decoderspecific info is 2 - - for (TInt a = 0 ; a < frameSize ; a++) - { - aDecSpecInfo->Des().Append(frameDecSpecInfo[a]); - } - - - return ETrue; - } - - else - { - return EFalse; - } - - - } - -EXPORT_C TBool CAudSong::GetTimeEstimateL(MAudTimeEstimateObserver& aObserver, - TAudType aAudType, - TInt aSamplingRate, - TChannelMode aChannelMode, - TInt aBitRate) - { - - - if (iClipArray.Count() == 0) - { - return EFalse; - } - - if (SetOutputFileFormat(aAudType, aSamplingRate, aChannelMode, aBitRate)) - { - return iProcessOperation->GetTimeEstimateL(aObserver); - - } - else - { - return EFalse; - } - - - } - -EXPORT_C TTimeIntervalMicroSeconds CAudSong::GetTimeEstimateL() - { - TAudFileProperties prop; - TInt64 estimatedTime = TInt64(0); - TReal complexityFactor = 0.0; - TInt a; - - for (a = 0; a < iClipArray.Count() ; a++) - { - complexityFactor = 0.0; - - prop = iClipArray[a]->Info()->Properties(); - if ( iClipArray[a]->Muting() ) - { - // the clip is muted - complexityFactor = KAEDMutingComplFactor; - } - else if ( (prop.iAudioType != iProperties->iAudioType ) - || (prop.iChannelMode != iProperties->iChannelMode ) - || (prop.iSamplingRate != iProperties->iSamplingRate ) ) - { - // need transcoding - - // decoding - switch (prop.iAudioType) - { - case EAudAMR : - { - // AMR decoding - complexityFactor = KAEDAMRDecComplFactor; - } - break; - case EAudAAC_MPEG4 : - { - // AAC decoding - complexityFactor = KAEDAACDecComplFactor; - } - break; - case EAudAMRWB : - { - // AMR-WB decoding - complexityFactor = KAEDAMRWBDecComplFactor; - } - break; - case EAudMP3 : - { - // MP3 decoding - complexityFactor = KAEDMP3DecComplFactor; - } - break; - default: - { - //EAudWAV - complexityFactor = KAEDWavDecComplFactor; - } - } - if ( prop.iChannelMode == EAudStereo ) - { - complexityFactor += KAEDAACStereoDecAddComplFactor; - } - if ( prop.iSamplingRate > 8000 ) - { - complexityFactor *= prop.iSamplingRate/16000; - } - - - // encoding - if (iProperties->iAudioType == EAudAMR) - { - // AMR encoding - complexityFactor += KAEDAMREncComplFactor; - } - else - { - // AAC encoding - complexityFactor += KAEDAACEncComplFactor; - if ( iProperties->iChannelMode == EAudStereo ) - { - complexityFactor += KAEDAACStereoEncAddComplFactor; - } - complexityFactor *= iProperties->iSamplingRate/16000; - } - - - } - else if (iClipArray[a]->DynamicLevelMarkCount() > 0) - { - // need bitstream processing (level control etc) - complexityFactor = KAEDBitstreamProcComplFactor; - } - else - { - // just passing through - complexityFactor = KAEDPassThroughComplFactor; - } - - - - estimatedTime = estimatedTime + TInt64(complexityFactor * I64INT(iClipArray[a]->EditedDuration().Int64())); - } - - return estimatedTime; - } - -EXPORT_C TInt CAudSong::GetFrameDurationMicro() - { - TInt frameDurationMicro = 20000; // AMR - - if (iProperties->iAudioType == EAudAAC_MPEG4) - { - frameDurationMicro = ((1024 * 1000) / iProperties->iSamplingRate) * 1000; - } - - return frameDurationMicro; - } - - -EXPORT_C TInt CAudSong::ClipCount(TInt aTrackIndex) const - { - - - if (aTrackIndex == KAllTrackIndices) - { - return iClipArray.Count(); - - } - - TInt amount = 0; - for (TInt a = 0; a < iClipArray.Count() ; a++) - { - if (iClipArray[a]->TrackIndex() == aTrackIndex) amount++; - - } - - return amount; - - } - - -EXPORT_C CAudClip* CAudSong::Clip(TInt aIndex, TInt aTrackIndex) const - { - - if (aTrackIndex == KAllTrackIndices) - { - return iClipArray[aIndex]; - } - - - TInt index = 0; - TInt a = 0; - TBool found = EFalse; - - if (aTrackIndex == KAllTrackIndices) - { - return iClipArray[aIndex]; - } - - for (a = 0; a < iClipArray.Count() ; a++) - { - - if (iClipArray[a]->TrackIndex() == aTrackIndex) index++; - - if (index == aIndex+1) - { - found = ETrue; - break; - } - - - } - - if (found) - { - return iClipArray[a]; - } - else - { - TAudPanic::Panic(TAudPanic::EAudioClipIllegalIndex); - } - return NULL; - } - - - -EXPORT_C void CAudSong::AddClipL(const TDesC& aFileName, - TTimeIntervalMicroSeconds aStartTime, TInt aTrackIndex, - TTimeIntervalMicroSeconds aCutInTime, - TTimeIntervalMicroSeconds aCutOutTime) - { - - PRINT((_L("CAudSong::AddClipL in"))); - if (iAddOperation->iClip != 0) - { - TAudPanic::Panic(TAudPanic::ESongAddOperationAlreadyRunning); - } - if (iProcessOperation->iProcessor != 0 ) - { - TAudPanic::Panic(TAudPanic::ESongProcessingOperationAlreadyRunning); - } - - - iAddOperation->iClip = CAudClip::NewL(this, aFileName, aStartTime, *iAddOperation, aTrackIndex); - iAddOperation->iClip->iCutInTime = aCutInTime; - iAddOperation->iClip->iCutOutTime = aCutOutTime; - - PRINT((_L("CAudSong::AddClipL out"))); - - } - - -EXPORT_C void CAudSong::RemoveClip(TInt aIndex, TInt aTrackIndex) - { - PRINT((_L("CAudSong::RemoveClip in"))); - - TInt index = -1; - TInt a = 0; - TBool found = EFalse; - - for (a = 0; a < iClipArray.Count() ; a++) - { - - - if (iClipArray[a]->TrackIndex() == aTrackIndex) index++; - - if (index == aIndex) - { - found = ETrue; - break; - } - - } - - - if (found) - { - - CAudClip* clip = iClipArray[a]; - iClipArray.Remove(a); - delete clip; - UpdateClipIndexes(); - FireClipRemoved(this, aIndex, aTrackIndex); - } - else - { - TAudPanic::Panic(TAudPanic::EAudioClipIllegalIndex); - } - - PRINT((_L("CAudSong::RemoveClip out"))); - - } - - -EXPORT_C TBool CAudSong::SetOutputFileFormat(TAudType aAudType, - TInt aSamplingRate, - TChannelMode aChannelMode, - TInt aBitRate) - { - PRINT((_L("CAudSong::SetOutputFileFormat in"))); - - // allow both EAudAAC_MPEG2 and EAudAAC_MPEG4 - // as inpyt type, but consider all AAC_ MPEG as mpeg4 - - if (aAudType == EAudAAC_MPEG2) - { - aAudType = EAudAAC_MPEG4; - } - - // make sure the given parameters are correct - - if (aBitRate == KAudBitRateDefault) - { - // the defaut bitrates: - PRINT((_L("CAudSong::SetOutputFileFormat use default bitrate"))); - if (aAudType == EAudAMR) - { - aBitRate = KAedBitRateAMR; - } - else if (aAudType == EAudAAC_MPEG4) - { - if (aSamplingRate == KAedSampleRate16kHz) - { - aBitRate = KAedBitRateAAC16kHz; - } - else - { - aBitRate = KAedBitRateAAC48kHz; - } - } - } - - if (aAudType == EAudAAC_MPEG4) - { - - iProperties->iAudioType = EAudAAC_MPEG4; - iProperties->iAACObjectType = EAudAACObjectTypeLC; - - TInt channels = (aChannelMode == EAudSingleChannel) ? 1 : 2; - - // legal sampling rates are 16000 and 48000 Hz - if (aSamplingRate == KAedSampleRate16kHz) - { - if (aBitRate < KAedAACMinBitRateMultiplier * KAedSampleRate16kHz * channels || - aBitRate > KAedAACMaxBitRateMultiplier * KAedSampleRate16kHz * channels) - { - // illegal bitrate - PRINT((_L("CAudSong::SetOutputFileFormat out, unsupported bitrate given"))); - return EFalse; - } - else - { - iProperties->iSamplingRate = aSamplingRate; - iProperties->iBitrate = aBitRate; - iProperties->iChannelMode = aChannelMode; - } - } - else if (aSamplingRate == KAedSampleRate48kHz) - { - if (aBitRate < KAedAACMinBitRateMultiplier * KAedSampleRate48kHz * channels || - aBitRate > KAedAACMaxBitRateMultiplier * KAedSampleRate48kHz * channels) - { - // illegal bitrate - PRINT((_L("CAudSong::SetOutputFileFormat out, unsupported bitrate given"))); - return EFalse; - } - else - { - iProperties->iSamplingRate = aSamplingRate; - iProperties->iBitrate = aBitRate; - iProperties->iChannelMode = aChannelMode; - } - } - else - { - PRINT((_L("CAudSong::SetOutputFileFormat out, unsupported sampling rate given"))); - return EFalse; - } - - } - - - else if (aAudType == EAudAMR) - { - - iProperties->iAudioType = EAudAMR; - // for AMR the bitrate is always set to 12200 and sampling rate to 8000 - iProperties->iSamplingRate = KAedSampleRate8kHz; - iProperties->iBitrate = KAedBitRateAMR; - iProperties->iChannelMode = EAudSingleChannel; - - } - - else - { - PRINT((_L("CAudSong::SetOutputFileFormat out, unsupported output format given"))); - return EFalse; - } - - - PRINT((_L("CAudSong::SetOutputFileFormat out"))); - return ETrue; - } - -EXPORT_C TBool CAudSong::AreOutputPropertiesSupported(const TAudFileProperties& aProperties ) - { - if ( ( aProperties.iAudioType == EAudAAC_MPEG4 ) - && ((aProperties.iSamplingRate == KAedSampleRate16kHz) - || (aProperties.iSamplingRate == KAedSampleRate48kHz))) - { - return ETrue; - } - else if ( (aProperties.iAudioType == EAudAMR) - && (aProperties.iSamplingRate == KAedSampleRate8kHz)) - { - return ETrue; - } - else - { - return EFalse; - } - } - - -EXPORT_C TBool CAudSong::SyncStartProcessingL() - { - PRINT((_L("CAudSong::SyncStartProcessingL"))); - return iProcessOperation->StartSyncProcL(); - } - -EXPORT_C TBool CAudSong::SyncProcessFrameL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration) - { - PRINT((_L("CAudSong::SyncProcessFrameL in"))); - - aFrame = 0; - TBool ret = iProcessOperation->ProcessSyncPieceL(aFrame, aProgress, aDuration); - -#ifdef _WRITE_OUTPUT_TO_FILE_ - - - if (!ret) - { - - if (iFileOpen) - { - - - - TBuf8<32> mes; - mes.Append(_L8("aProgress: ")); - mes.AppendNum(aProgress); - mes.Append(_L8("aDuration: ")); - mes.AppendNum(I64INT(aDuration.Int64()/1000)); - mes.Append(_L8("\n")); - - - iTextFile.Write(mes); - - - if (iProperties->iAudioType == EAudAMR) - { - iAudioFile.Write(aFrame->Des()); - - } - else - { - TBuf8<7> adtsHeader; - - ProcTools::GenerateADTSHeaderL(adtsHeader, aFrame->Size(), *iProperties); - iAudioFile.Write(adtsHeader); - iAudioFile.Write(aFrame->Des()); - - } - - } - - } - -#endif - - PRINT((_L("CAudSong::SyncProcessFrameL out"))); - return ret; - - } - -EXPORT_C void CAudSong::SyncCancelProcess() - { - - iProcessOperation->Cancel(); - - } - - -EXPORT_C void CAudSong::Reset(TBool aNotify) - { - iSongDurationManuallySet = EFalse; - - iDynamicLevelMarkArray.ResetAndDestroy(); - iClipArray.ResetAndDestroy(); - - if (aNotify) - { - FireSongReseted(*this); - } - } - -EXPORT_C TBool CAudSong::SetDuration(TTimeIntervalMicroSeconds aDuration) - { - - if (aDuration.Int64() > 0) - { - iSongDuration = aDuration; - iSongDurationManuallySet = ETrue; - return ETrue; - } - - return EFalse; - } - - -EXPORT_C void CAudSong::RegisterSongObserverL(MAudSongObserver* aObserver) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - if (iObserverArray[i] == aObserver) - { - TAudPanic::Panic(TAudPanic::ESongObserverAlreadyRegistered); - } - } - - User::LeaveIfError(iObserverArray.Append(aObserver)); - } - - -EXPORT_C void CAudSong::UnregisterSongObserver(MAudSongObserver* aObserver) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - if (iObserverArray[i] == aObserver) - { - iObserverArray.Remove(i); - return; - } - } - - TAudPanic::Panic(TAudPanic::ESongObserverNotRegistered); - } - - -void CAudSong::UpdateClipIndexes() - { - - for (TInt i = 0; i < iClipArray.Count() ; i++) - { - - iClipArray[i]->iIndex = Index2IndexOnTrack(i); - - } - - } - -void CAudSong::UpdateClipArray() - { - - TLinearOrder order(CAudClip::Compare); - iClipArray.Sort(order); - - - } - -TInt CAudSong::Index2IndexOnTrack(TInt aIndex) - { - - if (aIndex > iClipArray.Count()) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - TInt indexOnTrack = 0; - TInt trackIndex = iClipArray[aIndex]->TrackIndex(); - - for (TInt a = 0; a < aIndex ; a++) - { - - if (iClipArray[a]->TrackIndex() == trackIndex) - { - indexOnTrack++; - } - - } - return indexOnTrack; - } - -TInt CAudSong::FindClipIndexOnSong(const CAudClip* aClip) const - { - - for (TInt index = 0 ; index < iClipArray.Count() ; index++) - { - if (iClipArray[index] == aClip) - { - return index; - } - } - - // if the clip is not in the array... - TAudPanic::Panic(TAudPanic::EInternal); - return 0; - - } - -void CAudSong::FireClipAdded(CAudSong* aSong, CAudClip* aClip, TInt aIndex, TInt aTrackIndex) - { - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyClipAdded(*aSong, *aClip, aIndex, aTrackIndex); - } - } - -void CAudSong::FireClipAddingFailed(CAudSong* aSong, TInt aError, TInt aTrackIndex) - { - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyClipAddingFailed(*aSong, aError, aTrackIndex); - } - } - -void CAudSong::FireClipRemoved(CAudSong* aSong, TInt aIndex, TInt aTrackIndex) - { - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyClipRemoved(*aSong, aIndex, aTrackIndex); - } - - } - -void CAudSong::FireClipIndicesChanged(CAudSong* aSong, TInt aOldIndex, - TInt aNewIndex, TInt aTrackIndex) - { - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyClipIndicesChanged(*aSong, aOldIndex, aNewIndex, aTrackIndex); - } - } - -void CAudSong::FireClipTimingsChanged(CAudSong* aSong, CAudClip* aClip) - { - - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyClipTimingsChanged(*aSong, *aClip); - } - - } - - -void CAudSong::FireDynamicLevelMarkInserted(CAudClip& aClip, - TAudDynamicLevelMark& aMark, - TInt aIndex) - { - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyDynamicLevelMarkInserted(aClip, aMark, aIndex); - } - - - } - -void CAudSong::FireDynamicLevelMarkRemoved(CAudClip& aClip, TInt aIndex) - { - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyDynamicLevelMarkRemoved(aClip, aIndex); - } - - } - -void CAudSong::FireSongReseted(CAudSong& aSong) - { - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifySongReseted(aSong); - } - } - -void CAudSong::FireClipReseted(CAudClip& aClip) - { - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyClipReseted(aClip); - } - } - - - -CAudSongProcessOperation* CAudSongProcessOperation::NewL(CAudSong* aSong) - { - CAudSongProcessOperation* self = - new (ELeave) CAudSongProcessOperation(aSong); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -CAudSongProcessOperation::CAudSongProcessOperation(CAudSong* aSong) -: iSong(aSong), iObserver(0), iProcessor(0) - { - - } - - -void CAudSongProcessOperation::ConstructL() - { - } - -CAudSongProcessOperation::~CAudSongProcessOperation() - { - - if (iProcessor != 0) - { - delete iProcessor; - iProcessor = 0; - - } - - } - - - -void CAudSongProcessOperation::NotifyAudioProcessingStartedL() - { - if (iObserver != 0) - iObserver->NotifyAudioProcessingStartedL(*iSong); - - } -void CAudSongProcessOperation::NotifyAudioProcessingProgressed(TInt aPercentage) - { - if (iObserver != 0) - iObserver->NotifyAudioProcessingProgressed(*iSong, aPercentage); - - } -void CAudSongProcessOperation::NotifyAudioProcessingCompleted(TInt aError) - { - - delete iProcessor; - iProcessor = 0; - - MAudSongProcessingObserver* observer = iObserver; - iObserver = 0; - if (observer != 0) - { - observer->NotifyAudioProcessingProgressed(*iSong, 100); - observer->NotifyAudioProcessingCompleted(*iSong, aError); - } - } - -void CAudSongProcessOperation::NotifyTimeEstimateReady(TInt64 aTimeEstimate) - { - - delete iProcessor; - iProcessor = 0; - - MAudTimeEstimateObserver* observer = iTEObserver; - iTEObserver = 0; - - if (observer != 0) - { - observer->NotifyTimeEstimateReady(aTimeEstimate); - } - } - - -TBool CAudSongProcessOperation::StartSyncProcL() - { - - if (iProcessor != 0) - { - User::Leave(KErrNotReady); - } - - CAudProcessor* processor = CAudProcessor::NewLC(); - TBool ret = processor->StartSyncProcessingL(iSong); - CleanupStack::Pop(processor); - iProcessor = processor; - - return ret; - - } - -TBool CAudSongProcessOperation::ProcessSyncPieceL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration) - { - TBool ret = iProcessor->ProcessSyncPieceL(aFrame, aProgress, aDuration); - if (!ret) return EFalse; - else - { - delete iProcessor; - iProcessor = 0; - return ETrue; - - } - - } - - -void CAudSongProcessOperation::Cancel() - { - - if (iProcessor == 0) - { - TAudPanic::Panic(TAudPanic::ESongProcessingOperationNotRunning); - } - else - { - iProcessor->CancelProcessing(*this); - } - } - -TBool CAudSongProcessOperation::GetTimeEstimateL(MAudTimeEstimateObserver& aTEObserver) - { - - - - if (iProcessor != 0) - { - User::Leave(KErrNotReady); - } - iTEObserver = &aTEObserver; - - CAudProcessor* processor = CAudProcessor::NewLC(); - - - TBool ret = processor->StartTimeEstimateL(iSong, *this); - CleanupStack::Pop(processor); - iProcessor = processor; - - return ret; - - } - - -CAudSongAddClipOperation* CAudSongAddClipOperation::NewL(CAudSong* aSong) - { - CAudSongAddClipOperation* self = - new (ELeave) CAudSongAddClipOperation(aSong); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -CAudSongAddClipOperation::CAudSongAddClipOperation(CAudSong* aSong) - : iSong(aSong), iClip(0) - { - } - - -void CAudSongAddClipOperation::ConstructL() - { - } - - -CAudSongAddClipOperation::~CAudSongAddClipOperation() - { - if (iClip) - { - delete iClip; - iClip = 0; - } - - } - - -void CAudSongAddClipOperation::NotifyClipInfoReady(CAudClipInfo& /*aInfo*/, - TInt aError) - { - - - iError = aError; - CompleteAddClipOperation(); - - } - - -void CAudSongAddClipOperation::CompleteAddClipOperation() - { - PRINT((_L("CAudSongAddClipOperation::CompleteAddClipOperation in"))); - - - if (iError != KErrNone) - { - TInt trackIndex = iClip->TrackIndex(); - delete iClip; - iClip = 0; - iSong->FireClipAddingFailed(iSong, iError, trackIndex); - PRINT((_L("CAudSong::CompleteAddClipOperation failed, out"))); - return; - } - else - { - - TAudFileProperties info = iClip->iInfo->Properties(); - - if (iSong->iClipArray.Count() > 0) - { - if (!(info.isCompatible(iSong->iClipArray[0]->Info()->Properties()))) - { - TInt trackIndex = iClip->TrackIndex(); - - delete iClip; - iClip = 0; - iSong->FireClipAddingFailed(iSong, KErrNotSupported, trackIndex); - PRINT((_L("CAudSong::CompleteAddClipOperation failed, out"))); - return; - } - } - - if (iClip->CutOutTime() == TTimeIntervalMicroSeconds(KClipEndTime)) - { - - iClip->iCutOutTime = info.iDuration; - } - - - TInt err = KErrNone; - - TBool added = EFalse; - - // insert clips so that they are always sorted by start time - TInt index = 0; - for (index = 0 ; index < iSong->iClipArray.Count() ; index++) - { - if (iSong->iClipArray[index]->StartTime() > iClip->StartTime()) - { - err = iSong->iClipArray.Insert(iClip, index); - added = ETrue; - break; - } - } - if (!added) - { - index = iSong->iClipArray.Count(); - err = iSong->iClipArray.Insert(iClip, index); - if (err != KErrNone) - { - TInt trackIndex = iClip->TrackIndex(); - delete iClip; - iClip = 0; - iSong->FireClipAddingFailed(iSong, KErrGeneral, trackIndex); - PRINT((_L("CAudSong::CompleteAddClipOperation failed, out"))); - return; - } - - } - iClip->iIndex = iSong->Index2IndexOnTrack(index); - - if (err != KErrNone) - { - TInt trackIndex = iClip->TrackIndex(); - - delete iClip; - iClip = 0; - iSong->FireClipAddingFailed(iSong, err, trackIndex); - } - else - { - iSong->UpdateClipIndexes(); - CAudClip* clip = iClip; - iClip = 0; - - - if (clip->EndTime() > iSong->iSongDuration) - { - iSong->iSongDuration = clip->EndTime(); - } - - - iSong->FireClipAdded(iSong, clip, clip->iIndex, clip->iTrackIndex); - - - } - } - PRINT((_L("CAudSongAddClipOperation::CompleteAddClipOperation out"))); - } - -EXPORT_C void CAudSong::AddClipL(RFile* aFileHandle, - TTimeIntervalMicroSeconds aStartTime, TInt aTrackIndex, - TTimeIntervalMicroSeconds aCutInTime, - TTimeIntervalMicroSeconds aCutOutTime) - { - - PRINT((_L("CAudSong::AddClipL in"))); - if (iAddOperation->iClip != 0) - { - TAudPanic::Panic(TAudPanic::ESongAddOperationAlreadyRunning); - } - if (iProcessOperation->iProcessor != 0 ) - { - TAudPanic::Panic(TAudPanic::ESongProcessingOperationAlreadyRunning); - } - - iAddOperation->iClip = CAudClip::NewL(this, aFileHandle, aStartTime, *iAddOperation, aTrackIndex); - iAddOperation->iClip->iCutInTime = aCutInTime; - iAddOperation->iClip->iCutOutTime = aCutOutTime; - - PRINT((_L("CAudSong::AddClipL out"))); - - } - - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/ProcClipInfoAO.cpp --- a/videoeditorengine/audioeditorengine/src/ProcClipInfoAO.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - - -#include "ProcClipInfoAO.h" - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -void CProcClipInfoAO::RunL() - { - PRINT((_L("CProcClipInfoAO::RunL in") )); - - - TRAPD(error, iProcessorImpl->GetAudFilePropertiesL(*iFileName, iFileHandle, iProperties)); - - if (error != KErrNone) - { - - delete iFileName; - iFileName = 0; - delete iProcessorImpl; - iProcessorImpl = 0; - iObserver->NotifyClipInfoReady(error); - iProperties = 0; - iObserver = 0; - PRINT((_L("CProcClipInfoAO::RunL out with error %d"), error )); - return; - } - else - { - - - delete iFileName; - iFileName = 0; - delete iProcessorImpl; - iProcessorImpl = 0; - - if (iProperties->iAudioType == EAudNoAudio) - { - MProcClipInfoObserver* observer = iObserver; - - iObserver = 0; - observer->NotifyClipInfoReady(KErrNoAudio); - PRINT((_L("CProcClipInfoAO::RunL no audio in the clip") )); - - } - else if (iProperties->iAudioType == EAudTypeUnrecognized || - iProperties->iBitrate == 0 || - iProperties->iBitrateMode == EAudBitrateModeNotRecognized || - iProperties->iFileFormat == EAudFormatUnrecognized || - iProperties->iChannelMode == EAudChannelModeNotRecognized || - iProperties->iSamplingRate == 0) - { - MProcClipInfoObserver* observer = iObserver; - - iObserver = 0; - observer->NotifyClipInfoReady(KErrNotSupported); - PRINT((_L("CProcClipInfoAO::RunL audio in the clip not supported") )); - } - else - { - MProcClipInfoObserver* observer = iObserver; - - iObserver = 0; - observer->NotifyClipInfoReady(KErrNone); - } - - } - - PRINT((_L("CProcClipInfoAO::RunL out") )); - - - } - -void CProcClipInfoAO::DoCancel() - { - - } - -CProcClipInfoAO* CProcClipInfoAO::NewL() - { - - - CProcClipInfoAO* self = new (ELeave) CProcClipInfoAO(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CProcClipInfoAO::~CProcClipInfoAO() - { - PRINT((_L("CProcClipInfoAO::~CProcClipInfoAO() in") )); - - Cancel(); - - if (iFileName) - { - delete iFileName; - iFileName = 0; - } - - if (iProcessorImpl) - { - delete iProcessorImpl; - iProcessorImpl = 0; - } - - PRINT((_L("CProcClipInfoAO::~CProcClipInfoAO() out") )); - } - - -void CProcClipInfoAO::StartL(const TDesC& aFilename, - RFile* aFileHandle, - MProcClipInfoObserver &aObserver, - TAudFileProperties* aProperties, - TInt aPriority) - { - - iObserver = &aObserver; - iProperties = aProperties; - - if (!aFileHandle) - { - iFileName = HBufC::NewL(aFilename.Length()); - *iFileName = aFilename; - iFileHandle = NULL; - } - else - { - iFileHandle = aFileHandle; - iFileName = HBufC::NewL(1); - } - - CAudProcessorImpl* processorImpl = CAudProcessorImpl::NewLC(); - - CleanupStack::Pop(processorImpl); - iProcessorImpl = processorImpl; - - SetPriority(aPriority); - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - - } - - - -void CProcClipInfoAO::ConstructL() - { - - } - -CProcClipInfoAO::CProcClipInfoAO() : CActive(0), iProperties(0), iFileName(0) - - { - - CActiveScheduler::Add(this); - - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/ProcDecoder.cpp --- a/videoeditorengine/audioeditorengine/src/ProcDecoder.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,950 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "ProcDecoder.h" -#include "audconstants.h" -#include -#include -#include -#include - - -// CONSTANTS - - - - - -// MACROS - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - - -CProcDecoder* CProcDecoder::NewL() - - { - CProcDecoder* self = NewLC(); - CleanupStack::Pop(self); - return self; - - } - - -CProcDecoder* CProcDecoder::NewLC() - - { - - CProcDecoder* self = new (ELeave) CProcDecoder(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - - } - -CProcDecoder::~CProcDecoder() - { - - delete iSourceInputBuffer; - - // Input buffer for encoder (alternative output buffer for decoder). - delete iDestInputBuffer; - - // Codec used in decoding input audio to PCM16 - delete iSourceCodec; - - delete iSampleRateChannelBuffer; - - delete iRateConverter; - - } - -TBool CProcDecoder::InitL(TAudFileProperties aProperties, TInt aTargetSamplingRate, TChannelMode aChannelMode) - { - PRINT((_L("CProcDecoder::InitL() in"))); - - if (aTargetSamplingRate == 0) - { - - // we are just adding a clip now, check if the source codec is available - iProperties = aProperties; - SetSourceCodecL(); - - return ETrue; - } - - - iDecimFactor = 0; // by default - - iDoDecoding = ETrue; - - if (aProperties.iAudioType == EAudWAV) - { - // if input is PCM, no decoding is required, but possibly sample rate conversion - iDoDecoding = EFalse; - } - - - - // set output params - iToSampleRate = aTargetSamplingRate; - iToChannels = 1; - - if (aChannelMode == EAudStereo) - { - iToChannels = 2; - } - - - //set input params - iProperties = aProperties; - - iFromSampleRate = iProperties.iSamplingRate; - - iFromChannels = 1; - - if (aProperties.iChannelMode == EAudStereo) - { - iFromChannels = 2; - } - - - iDoSampleRateChannelConversion = EFalse; - if (iFromSampleRate != iToSampleRate || iProperties.iChannelMode != aChannelMode) - { - // sample rate or channel conversion is needed - iDoSampleRateChannelConversion = ETrue; - } - - - PRINT((_L("CProcDecoder::PrepareConverterL() in"))); - - TInt destInputBufferSize = 0; - TInt sourceInputBufferSize = 0; - - // buffer sizes for input and output - if ( iProperties.iAudioType == EAudAMR ) - { - destInputBufferSize = KAedSizeAMRBuffer; - sourceInputBufferSize = KAedMaxAMRFrameLength; - - } - else if ( iProperties.iAudioType == EAudAMRWB ) - { - destInputBufferSize = KAedSizeAWBBuffer; - sourceInputBufferSize = KAedMaxAWBFrameLength; - - } - else if (iProperties.iAudioType == EAudAAC_MPEG4 && - iProperties.iAudioTypeExtension == EAudExtensionTypeNoExtension) - { - if ( aProperties.iChannelMode == EAudSingleChannel ) - { - destInputBufferSize = KAedSizeAACBuffer; - sourceInputBufferSize = KAedMaxAACFrameLengthPerChannel; - } - else - { - destInputBufferSize = KAedSizeAACStereoBuffer; - sourceInputBufferSize = 2* KAedMaxAACFrameLengthPerChannel; - } - - } - else if (iProperties.iAudioType == EAudAAC_MPEG4 && - iProperties.iAudioTypeExtension != EAudExtensionTypeNoExtension) - { - if ( iProperties.iAudioTypeExtension == EAudExtensionTypeEnhancedAACPlusParametricStereo ) - { - // output is parametric stereo (mono channel, but decoded to stereo) - destInputBufferSize = KAedSizeAACStereoBuffer*2; // 2 for eAAC+ - sourceInputBufferSize = KAedMaxAACFrameLengthPerChannel; - } - else - { - // output is normal stereo - destInputBufferSize = KAedSizeAACBuffer*2; // 2 for eAAC+ - sourceInputBufferSize = 2* KAedMaxAACFrameLengthPerChannel; - } - - - } - - else if ( iProperties.iAudioType == EAudMP3 ) - { - // mp3 can be directly decoded to mono if necessary - if (iToChannels == 1) - { - iFromChannels = 1; - } - - // check if decimation would be useful - if (iFromSampleRate == iToSampleRate * 4) - { - iFromSampleRate /= 4; - iDecimFactor = 4; - } - - if (iFromSampleRate == iToSampleRate * 2) - { - iFromSampleRate /= 2; - iDecimFactor = 2; - } - - if ((iToSampleRate == 8000) && ((iFromSampleRate == 48000) || (iFromSampleRate == 44100))) - { - iFromSampleRate /= 2; - iDecimFactor = 2; - } - - const TReal KMP3FrameDurationSec = 0.026; - - destInputBufferSize = (iFromSampleRate * KMP3FrameDurationSec + 1); - destInputBufferSize *= 2; //16 bit samples - if (iFromChannels == 2) - { - destInputBufferSize *= 2; // stereo - } - - sourceInputBufferSize = KAedMaxMP3FrameLength; - } - - else if (iProperties.iAudioType == EAudWAV) - { - // frame duration in WAV case is always 20 ms, that is 50 frames per sec - const TInt KNumberOfFramesInSecond = 50; - - destInputBufferSize = iFromSampleRate / KNumberOfFramesInSecond; // Number of samples - destInputBufferSize *= iFromChannels; - if ((destInputBufferSize % 2) != 0) destInputBufferSize++; // Must be even - destInputBufferSize *= 2; // 16-bit samples - - sourceInputBufferSize = iProperties.iFrameLen; - - TInt sourceBufferSizeAfterExpansion = sourceInputBufferSize; - if (iProperties.iNumberOfBitsPerSample == 8) - { - // 8-bit samples are expanded to 16-bit so twice as big buffer is needed - sourceBufferSizeAfterExpansion *= 2; - } - - if (sourceBufferSizeAfterExpansion > destInputBufferSize) - { - // Make sure there's no overflow - destInputBufferSize = sourceBufferSizeAfterExpansion; - } - } - - PRINT((_L("CProcDecoder::InitL() source size: %d, dest size %d"), sourceInputBufferSize, destInputBufferSize)); - - - if ( iSourceInputBuffer ) - { - delete iSourceInputBuffer; - iSourceInputBuffer = NULL; - } - // create buffer for input data - iSourceInputBuffer = CMMFDataBuffer::NewL(sourceInputBufferSize); - - - if ( iDestInputBuffer ) - { - delete iDestInputBuffer; - iDestInputBuffer = NULL; - } - - - TInt errC = KErrNone; - if (iDoDecoding) - { - SetSourceCodecL(); - - // create buffer for output data if necessary - iDestInputBuffer = CMMFDataBuffer::NewL( destInputBufferSize); - } - - - - TInt err = KErrNone; - - if (iProperties.iAudioType == EAudAAC_MPEG4) - { - // configure AAC plus decoder, used also for AAC - TRAP( err, ConfigureAACPlusDecoderL()); - - } - - else if ( iProperties.iAudioType == EAudMP3 ) - { - // configure mp3 decoder - TRAP( err, ConfigureMP3DecoderL()); - - } - if (err != KErrNone || errC != KErrNone) - { - User::Leave(KErrNotSupported); - } - - if ( iDoSampleRateChannelConversion ) - { - if (iRateConverter) - { - delete iRateConverter; - iRateConverter = NULL; - } - - iRateConverter = CRateConverter::NewL(iFromSampleRate, iToSampleRate, iFromChannels, iToChannels); - - if( !iRateConverter->InitL(destInputBufferSize / (2 * iFromChannels)) ) // 16-bit samples - { - User::Leave(KErrNotSupported); - } - - TInt sampleRateBufferSize = iRateConverter->GetOutputBufferSize() * 2 * iToChannels; // 16-bit samples - - PRINT((_L("CProcDecoder::InitL() sample rate buffer size %d"), sampleRateBufferSize)); - - if ( iSampleRateChannelBuffer ) - { - delete iSampleRateChannelBuffer; - iSampleRateChannelBuffer = NULL; - } - - // Buffer for sample rate conversion output - iSampleRateChannelBuffer = CMMFDataBuffer::NewL(sampleRateBufferSize); - } - - - iReady = ETrue; - PRINT((_L("CProcDecoder::InitL() out"))); - - - return ETrue; - } - -TBool CProcDecoder::FillDecBufferL(const HBufC8* aEncFrame, HBufC8*& aDecBuffer) - { - PRINT((_L("CProcDecoder::FillDecBufferL() in"))); - - iDecBuffer = 0; - if (iProperties.iAudioType == EAudWAV && !iDoSampleRateChannelConversion) - { - - // if we don't have to do anything for input data -> - aDecBuffer = HBufC8::NewL(aEncFrame->Size()); - aDecBuffer->Des().Append(*aEncFrame); - PRINT((_L("CProcDecoder::FillDecBufferL() out from Wav branch with ETrue"))); - return ETrue; - - } - - - if (!iReady) - { - User::Leave(KErrNotReady); - } - - if ( aEncFrame == 0 || !aEncFrame->Length() ) - { - // no data in input buffer - PRINT((_L("CProcDecoder::FillDecBufferL() no input data, out with EFalse"))); - return EFalse; - } - - if ( (TInt)(aEncFrame->Length() + iSourceInputBuffer->Position() ) > iSourceInputBuffer->Data().MaxLength() ) - { - - ReAllocBufferL( iSourceInputBuffer, aEncFrame->Length() + iSourceInputBuffer->Position() ); - } - - iSourceInputBuffer->Data().SetLength( 0 ); - iSourceInputBuffer->SetPosition( 0 ); - - iSourceInputBuffer->Data().Append( *aEncFrame ); - iSourceInputBuffer->Data().SetLength( aEncFrame->Length() ); - - PRINT((_L("CProcDecoder::FillDecBufferL(), iSourceInputBuffer length = %d"),aEncFrame->Length())); - if (iDoDecoding) - { - iDestInputBuffer->Data().SetLength(0); - iDestInputBuffer->SetPosition(0); - - } - - if ( iDoSampleRateChannelConversion ) - { - iSampleRateChannelBuffer->Data().SetLength(0); - iSampleRateChannelBuffer->SetPosition(0); - } - - - FeedCodecL( iSourceCodec, iSourceInputBuffer, iDestInputBuffer); - - if ( aDecBuffer ) - { - // in case of EDstNotFilled from decoder, you may end up looping and to avoid memory leaks, you need to - // delete the previous allocated buffer. Alternative might be to not allocate a new one in this case. - delete aDecBuffer; - aDecBuffer = NULL; - } - aDecBuffer = iDecBuffer; - - if (iDoDecoding) - { - iDestInputBuffer->Data().SetLength(0); - iDestInputBuffer->SetPosition(0); - - } - - if (iDecBuffer != 0 && iDecBuffer->Size() > 0) - { - PRINT((_L("CProcDecoder::FillDecBufferL() out with ETrue"))); - return ETrue; - - } - - PRINT((_L("CProcDecoder::FillDecBufferL() out with EFalse"))); - return EFalse; - - } - - -void CProcDecoder::ConstructL() - { - - - - } - -CProcDecoder::CProcDecoder() - { - - } - - - -void CProcDecoder::ConfigureAACPlusDecoderL() - { - - - RArray config; - - if (iProperties.iAudioTypeExtension == EAudExtensionTypeEnhancedAACPlusParametricStereo) - { - - // for sample rate and channel converter, the output from parametric stereo - // is stereo, only the AAC part is incoded as mono - iFromChannels = 2; - } - - - config.Append( iFromSampleRate); - config.Append( iFromChannels ); - - - if (iProperties.iAACObjectType == EAudAACObjectTypeLC) - { - config.Append( 1 ); // {1 - LC, 3 - LTP} - } - else if (iProperties.iAACObjectType == EAudAACObjectTypeLTP) - { - config.Append( 3 ); // {1 - LC, 3 - LTP} - } - else - { - User::Leave(KErrNotSupported); - } - - config.Append( 8192 ); //Size of PCM Samples generated by decoder - - config.Append( 1024 ); //Number of PCM Samples generated by decoder per frame - - config.Append( iFromSampleRate); //Sampling freq of AAC Code decoder - - config.Append( 0 ); // not used ?? - - - config.Append( 0 ); // down sampled mode - - config.Append( 16 ); // Sample resolution: 16-bit resolution - - - - // NOTE!: for some reason, the sample rate of the output from AACPlus decoder used - // to be a half of the proper output sampling rate. - // eAAC+ data consists of AAC band + enhancement band. The enhancement band is not included - // in the rate indicated in the header (iFromSampleRate) - // There was a workaround for the - // earlier problem not to increase the sampling rate. - // Now, with 2006 releases it seems to work, and the sampling rate need to be doubled - // for the sampling rate converter. - - if (iProperties.iAudioTypeExtension == EAudExtensionTypeEnhancedAACPlus) - { - iFromSampleRate *= 2; // for sample rate converter -> - config.Append(iFromSampleRate);// Output sampling frequency - config.Append( 5 ); //Type of extended object (5=SBR/HE AAC profile; 6=PS is present) - - } - else if (iProperties.iAudioTypeExtension == EAudExtensionTypeEnhancedAACPlusParametricStereo) - { - iFromSampleRate *= 2; // for sample rate converter -> - config.Append(iFromSampleRate);// Output sampling frequency - config.Append( 6 ); //Type of extended object (5=SBR/HE AAC profile; 6=PS is present) - } - else - { - // AAC, in&out samplerates are equal, and extended object type is 0 - config.Append(iFromSampleRate);// Output sampling frequency - config.Append( 0 ); - - } - - - TUid uid ={KUidMmfCodecAudioSettings}; // Use Uid reserved for codec configurations - TRAPD( err, iSourceCodec->ConfigureL( uid, reinterpret_cast(config))); - - if ( err != KErrNone ) - { - PRINT((_L("CProcDecoder::PrepareConverterL() error, Source codec config failed"))); - config.Close(); - User::Leave( err ); - } - config.Close(); - - } - - -void CProcDecoder::ConfigureMP3DecoderL() - { - - - RArray config; - - TInt stereoToMono = 0; - if (iToChannels == 1 || iFromChannels == 1) - { - stereoToMono = 1; - } - - config.Append( stereoToMono); // stereo to mono - config.Append( 0 ); //iLeftRight?? - config.Append( iDecimFactor ); //iDecimFactor - config.Append( 0 ); //iConcealment - config.Append( 0 ); //iSampleLength?? - config.Append( 0 ); //iSamplingFrequency - - TUid uid ={KUidMmfCodecAudioSettings}; // Use Uid reserved for codec configurations - TRAPD( err, iSourceCodec->ConfigureL( uid, reinterpret_cast(config))); - - if ( err != KErrNone ) - { - PRINT((_L("CProcDecoder::PrepareConverterL() error, Source codec config failed"))); - config.Close(); - User::Leave( err ); - } - config.Close(); - } - - -void CProcDecoder::ReAllocBufferL( CMMFDataBuffer* aBuffer, TInt aNewMaxSize ) - { - if ( aBuffer->Data().Length() ) - { - TInt position = aBuffer->Position(); - TInt length = aBuffer->Data().Length(); - HBufC8* oldData = aBuffer->Data().AllocL(); - CleanupStack::PushL( oldData ); - ((CMMFDescriptorBuffer*)aBuffer)->ReAllocBufferL( aNewMaxSize ); - aBuffer->Data().Copy( *oldData ); - CleanupStack::PopAndDestroy( oldData ); - aBuffer->Data().SetLength( length ); - aBuffer->SetPosition( position ); - } - else - { - ((CMMFDescriptorBuffer*)aBuffer)->ReAllocBufferL( aNewMaxSize ); - } - } - -void CProcDecoder::FeedCodecL( CMMFCodec* aCodec, CMMFDataBuffer* aSourceBuffer, CMMFDataBuffer* aDestBuffer ) - { - PRINT((_L("CProcDecoder::FeedCodecL() in"))); - TBool completed = EFalse; - TCodecProcessResult result; - - while ( !completed ) - { - - if (iDoDecoding) - { - // decode and check the result - result = DecodeL(aCodec, aSourceBuffer, aDestBuffer); - } - else - { - - // no need for decoding, just perform sample rate and channel conversion - result.iStatus = TCodecProcessResult::EProcessComplete; - } - - - switch ( result.iStatus ) - { - case TCodecProcessResult::EProcessIncomplete: - // Not all data from input was consumed (DecodeL updated buffer members), but output was generated - - if ( iDoSampleRateChannelConversion ) - { - if ( !iRateConverter ) - { - PRINT((_L("CProcDecoder::FeedCodecL() error, no rate converter"))); - User::Leave( KErrNotFound ); - } - - // Convert buffer size in bytes - TUint convertBufferSize = aDestBuffer->Data().Length(); - - // Number of samples in the buffer - TUint inputSamples = convertBufferSize / (2 * iFromChannels); // 16-bit samples - - PRINT((_L("CProcDecoder::FeedCodecL() converting %d samples"), inputSamples)); - - if ( convertBufferSize > ( iDestInputBuffer->Data().MaxLength() - iDestInputBuffer->Position() ) ) - { - ReAllocBufferL( iDestInputBuffer, convertBufferSize + iDestInputBuffer->Position() ); - } - - TInt outputSamples = iRateConverter->ConvertBufferL( (TInt16*) aDestBuffer->Data().Ptr(), - (TInt16*) iSampleRateChannelBuffer->Data().Ptr(), inputSamples ); - - iSampleRateChannelBuffer->Data().SetLength( outputSamples * 2 * iToChannels ); - - UpdateOutputBufferL(iSampleRateChannelBuffer); - - } - else - { - if (iDoDecoding) - { - - UpdateOutputBufferL(aDestBuffer); - } - } - - break; - - case TCodecProcessResult::EProcessComplete: - // all data from input was used and output was generated - if ( iDoSampleRateChannelConversion ) - { - if ( !iRateConverter ) - { - PRINT((_L("CProcDecoder::FeedCodecL() error, no rate converter"))); - User::Leave( KErrNotFound ); - } - - - CMMFDataBuffer* src = 0; - - if (!iDoDecoding) - { - - // if decoding was not needed, - // the input data for SR converter is in aSourceBuffer - src = aSourceBuffer; - } - else - { - // if decoding was needed, - // the input data for SR converter is in iDestBuffer - - src = iDestInputBuffer; - } - - // Convert buffer size in bytes - TUint convertBufferSize = src->Data().Length(); - - // Number of samples in the buffer - TUint inputSamples = convertBufferSize / (2 * iFromChannels); // 16-bit samples - - PRINT((_L("CProcDecoder::FeedCodecL() converting %d samples"), inputSamples)); - - if ( convertBufferSize > ( src->Data().MaxLength() - src->Position() ) ) - { - ReAllocBufferL( src, convertBufferSize + src->Position() ); - } - - TInt outputSamples = iRateConverter->ConvertBufferL( (TInt16*) src->Data().Ptr(), - (TInt16*) iSampleRateChannelBuffer->Data().Ptr(), inputSamples ); - - iSampleRateChannelBuffer->Data().SetLength( outputSamples * 2 * iToChannels ); - - UpdateOutputBufferL(iSampleRateChannelBuffer); - - } - else - { - if (iDoDecoding) - { - UpdateOutputBufferL(aDestBuffer); - } - - } - - completed = ETrue; - break; - - case TCodecProcessResult::EDstNotFilled: - // need more input data, can't fill the output yet; put it back to the empty queue - completed = ETrue; - - break; - - default: - // EEndOfData, EProcessError, EProcessIncompleteRepositionRequest, EProcessCompleteRepositionRequest - User::Leave( KErrUnknown ); - } - - } - - - PRINT((_L("CProcDecoder::FeedCodecL() out"))); - } - -TCodecProcessResult CProcDecoder::DecodeL( CMMFCodec* aCodec, CMMFDataBuffer* aInBuffer, CMMFDataBuffer* aOutBuffer) - { - PRINT((_L("CProcDecoder::DecodeL() in, input pos: %d, length: %d"), aInBuffer->Position(), aInBuffer->Data().Length() )); - TCodecProcessResult result; - - result = aCodec->ProcessL (*aInBuffer, *aOutBuffer); - - switch (result.iStatus) - { - case TCodecProcessResult::EProcessComplete: - // finished processing source data, all data in sink buffer - PRINT((_L("CProcDecoder::FeedCodecL() EProcessComplete"))); - aInBuffer->SetPosition( 0 ); - aInBuffer->Data().SetLength(0); - break; - - case TCodecProcessResult::EDstNotFilled: - // the destination is not full, we need more data. Handled in caller - PRINT((_L("CProcDecoder::FeedCodecL() EDstNotFilled"))); - aInBuffer->SetPosition( 0 ); - aInBuffer->Data().SetLength(0); - break; - - case TCodecProcessResult::EProcessIncomplete: - // the sink was filled before all the source was processed - PRINT((_L("CProcDecoder::FeedCodecL() EProcessIncomplete"))); - aOutBuffer->SetPosition( 0 ); - aInBuffer->SetPosition( aInBuffer->Position() + result.iSrcBytesProcessed ); - break; - - default: - break; - } - - PRINT((_L("CProcDecoder::DecodeL() out, %d -> %d"),result.iSrcBytesProcessed, result.iDstBytesAdded)); - PRINT((_L("CProcDecoder::DecodeL() out, input pos: %d, length: %d"), aInBuffer->Position(), aInBuffer->Data().Length() )); - return result; - } - -TBool CProcDecoder::GetIsSupportedSourceCodec() - { - - TFourCC fourCC; - TUid uID; - - if (iProperties.iAudioType == EAudAMR) - { - fourCC = TFourCC(KMMFFourCCCodeAMR); - uID = TUid(KMmfAMRNBDecSWCodecUid); - } - else if (iProperties.iAudioType == EAudAAC_MPEG4) - { - // use eAAC+ also for AAC - fourCC = TFourCC(KMMFFourCCCodeAACPlus); - uID = TUid(KMmfUidCodecEnhAACPlusToPCM16); - } - else if (iProperties.iAudioType == EAudMP3) - { - fourCC = TFourCC(KMMFFourCCCodeMP3); - uID = TUid(KMmfAdvancedUidCodecMP3ToPCM16); - } - else if (iProperties.iAudioType == EAudAMRWB) - { - fourCC = TFourCC(KMMFFourCCCodeAWB); - uID = TUid(KMmfAMRWBDecSWCodecUid); - } - else - { - //Wav, no codec - return ETrue; - } - - - - _LIT8(emptyFourCCString, " , "); - TBufC8<9> fourCCString(emptyFourCCString); - TPtr8 fourCCPtr = fourCCString.Des(); - TPtr8 fourCCPtr1(&fourCCPtr[0], 4); - TPtr8 fourCCPtr2(&fourCCPtr[5], 4 ); - - TFourCC srcFourCC(' ','P','1','6'); - fourCC.FourCC(&fourCCPtr1); - srcFourCC.FourCC(&fourCCPtr2); - - TBool found = EFalse; - TRAPD( err, found = CheckIfCodecAvailableL( fourCCPtr , uID)); - - if (err == KErrNone) - { - return found; - } - else - { - return EFalse; - } - } - - -void CProcDecoder::SetSourceCodecL() - { - PRINT((_L("CProcDecoder::SetSourceCodecL() in"))); - - if ( !GetIsSupportedSourceCodec() ) - { - PRINT((_L("CProcDecoder::SetSourceCodecL() error, unsupported codec"))); - User::Leave( KErrNotSupported ); - } - - if ( iSourceCodec ) - { - delete iSourceCodec; - iSourceCodec = NULL; - } - - TFourCC destFourCC = KMMFFourCCCodePCM16; - - if (iProperties.iAudioType == EAudAMR) - { - iSourceCodec = CMMFCodec::NewL( KMmfAMRNBDecSWCodecUid ); - - } - else if (iProperties.iAudioType == EAudAAC_MPEG4) - { - // use eAAC+ also for AAC - iSourceCodec = CMMFCodec::NewL( KMmfUidCodecEnhAACPlusToPCM16 ); - - } - else if (iProperties.iAudioType == EAudMP3) - { - iSourceCodec = CMMFCodec::NewL( KMmfAdvancedUidCodecMP3ToPCM16 ); - - } - else if (iProperties.iAudioType == EAudAMRWB) - { - iSourceCodec = CMMFCodec::NewL( KMmfAMRWBDecSWCodecUid ); - - } - else - { - // Wav, but no codec needed then - } - - iReady = EFalse; - - PRINT((_L("CProcDecoder::SetSourceCodecL() out"))); - } - - - -TBool CProcDecoder::CheckIfCodecAvailableL(const TDesC8& aCodecFourCCString, - const TUid& aCodecUId ) - { - PRINT((_L("CProcDecoder::CheckIfCodecAvailableL() in"))); - TBool found = EFalse; - - // Create a TEcomResolverParams structure. - TEComResolverParams resolverParams ; - resolverParams.SetDataType( aCodecFourCCString ) ; - resolverParams.SetWildcardMatch( EFalse ) ; - - RImplInfoPtrArray plugInArray ; // Array to return matching decoders in (place on cleanupstack _after_ ListImplementationsL() ) - - TUid UidMmfPluginInterfaceCodec = {KMmfUidPluginInterfaceCodec}; - - // ListImplementationsL leaves if it cannot find anything so trap the error and ignore it. - TRAPD( err, REComSession::ListImplementationsL(UidMmfPluginInterfaceCodec, resolverParams, plugInArray ) ) ; - CleanupResetAndDestroyPushL(plugInArray); - - - if (err == KErrNone) - { - found = EFalse; - for ( TInt i = 0; i < plugInArray.Count(); i++) - { - // there is a match, but 1st we need to ensure it is the one we have tested with, and that have compatible implementation of ConfigureL - PRINT((_L("CProcDecoder::CheckIfCodecAvailable() plugin found with Uid 0x%x"), plugInArray[i]->ImplementationUid().iUid )); - if ( plugInArray[i]->ImplementationUid() == aCodecUId ) - { - //match accepted - PRINT((_L("CProcDecoder::CheckIfCodecAvailable() plugin accepted"))); - found = ETrue; - } - } - } - else - { - PRINT((_L("CProcDecoder::CheckIfCodecAvailable() Error in ListImp.: %d"), err)); - //no match - found = EFalse; - } - - CleanupStack::PopAndDestroy(); //plugInArray - PRINT((_L("CProcDecoder::CheckIfCodecAvailableL() out"))); - return found; - } - -TBool CProcDecoder::UpdateOutputBufferL(CMMFDataBuffer* aInBuffer) - { - if (iDecBuffer == 0) - { - iDecBuffer = HBufC8::NewL(aInBuffer->BufferSize()); - iDecBuffer->Des().Append(aInBuffer->Data()); - } - else - { - iDecBuffer = iDecBuffer->ReAlloc(iDecBuffer->Size()+aInBuffer->BufferSize()); - iDecBuffer->Des().Append(aInBuffer->Data()); - } - - aInBuffer->Data().SetLength( 0 ); - aInBuffer->SetPosition( 0 ); - - return ETrue; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/ProcEncoder.cpp --- a/videoeditorengine/audioeditorengine/src/ProcEncoder.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,702 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "ProcEncoder.h" -#include "audconstants.h" -#include -#include -#include -#include -#include - - - -// MACROS - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -// ----------------------------------------------------------------------------- -// TCMRAMREncParams -// Encoding parameters structure for SW AMR codec -// ----------------------------------------------------------------------------- -// -class TVedACAMREncParams - { -public: - // encoding mode (for AMR-NB: 0=MR475,1=MR515,...,7=MR122, default 7) - TInt iMode; - // DTX flag (TRUE or default FALSE) - TInt iDTX; - }; - -CProcEncoder* CProcEncoder::NewL() - - { - CProcEncoder* self = NewLC(); - CleanupStack::Pop(self); - return self; - - } - - -CProcEncoder* CProcEncoder::NewLC() - - { - - CProcEncoder* self = new (ELeave) CProcEncoder(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - - } - -CProcEncoder::~CProcEncoder() - { - - - delete iSourceInputBuffer; - - delete iDestInputBuffer; - - delete iDestCodec; - - - } - - - - -TBool CProcEncoder::InitL(TAudType aAudioType, TInt aTargetSamplingRate, TChannelMode aChannelMode, - TInt aBitrate) - { - PRINT((_L("CProcEncoder::InitL() in"))); - - if (aAudioType == EAudAMR) - { - iOutputFrameDurationMilli = 20; - } - else if (aAudioType == EAudAAC_MPEG4) - { - iOutputFrameDurationMilli = (1024*1000)/(aTargetSamplingRate); - } - else - { - // only AMR & AAC encoding supported - PRINT((_L("CProcEncoder::InitL() out, unsupported audio type"))); - User::Leave(KErrNotSupported); - } - - iToBitRate = aBitrate; - - iAudioType = aAudioType; - - iNumberOfFramesInOutputBuffer = 0; - - iToSampleRate = aTargetSamplingRate; - - iToChannels = 1; - - if (aChannelMode == EAudStereo) - { - iToChannels = 2; - } - - - TInt destInputBufferSize = 0; - TInt sourceInputBufferSize = 0; - - // input buffer size: - // we never get longer than 64 milliseconds input - // as it is limited by the input formats - // for 16kHz AAC the frame duration is 64 ms - // - const TInt KMaxInputDurationMilli = 64; - - // multiplied by 2 as we have a bitdepth of 16 - sourceInputBufferSize = (2*aTargetSamplingRate*KMaxInputDurationMilli)/1000; - - if (aChannelMode == EAudStereo) - { - sourceInputBufferSize *= 2; - } - - if ( aAudioType == EAudAMR ) - { - - // from 64 ms input we can have maximum 4 AMR frames - destInputBufferSize = KAedMaxAMRFrameLength*4; - - - } - else if (aAudioType == EAudAAC_MPEG4) - { - - if ( aChannelMode == EAudSingleChannel ) - { - destInputBufferSize = KAedMaxAACFrameLengthPerChannel; - } - else - { - destInputBufferSize = 2 * KAedMaxAACFrameLengthPerChannel; - - } - } - - if ( iSourceInputBuffer ) - { - delete iSourceInputBuffer; - iSourceInputBuffer = NULL; - } - - iSourceInputBuffer = CMMFDataBuffer::NewL(sourceInputBufferSize*5); - - - if ( iDestInputBuffer ) - { - delete iDestInputBuffer; - iDestInputBuffer = NULL; - } - - TInt errC = KErrNone; - - if (aAudioType == EAudAMR) - { - - // shouldn't get more than 6 AMR frames at a time -> 120 ms - iDestInputBuffer = CMMFDataBuffer::NewL( destInputBufferSize); - - } - else - { - - iDestInputBuffer = CMMFDataBuffer::NewL( destInputBufferSize); - - } - - TRAP (errC,SetDestCodecL()); - - if (errC != KErrNone) - { - // initialization failed for some reason - User::Leave(KErrNotSupported); - - } - - TInt err = KErrNone; - - if ( iAudioType == EAudAAC_MPEG4 ) - { - TRAP( err, ConfigureAACEncoderL()); - - } - else if (iAudioType == EAudAMR) - { - TRAP( err, ConfigureAMREncoderL()); - } - - - if (err != KErrNone || errC != KErrNone) - { - - // initialization failed for some reason - User::Leave(KErrNotSupported); - } - - iReady = ETrue; - PRINT((_L("CProcEncoder::InitL() out"))); - - return ETrue; - } - -TBool CProcEncoder::FillEncBufferL(const TDesC8& aRawFrame, HBufC8* aEncBuffer, TInt& aOutputDurationMilli) - { - PRINT((_L("CProcEncoder::FillEncBufferL() in"))); - - aOutputDurationMilli = 0; - - - if (!iReady) - { - User::Leave(KErrNotReady); - } - - iEncBuffer = aEncBuffer; - - if (iEncBuffer->Length() == 0) - { - iNumberOfFramesInOutputBuffer = 0; - } - - if ( !aRawFrame.Length() ) - { - return EFalse; - } - - if ( (TInt)(aRawFrame.Length() + iSourceInputBuffer->Position() ) > iSourceInputBuffer->Data().MaxLength() ) - { - ReAllocBufferL( iSourceInputBuffer, aRawFrame.Length() + iSourceInputBuffer->Position() ); - - } - - - // copy the input data to MMF buffer - iSourceInputBuffer->Data().SetLength( 0 ); - iSourceInputBuffer->SetPosition( 0 ); - - iSourceInputBuffer->Data().Append( aRawFrame ); - iSourceInputBuffer->Data().SetLength( iSourceInputBuffer->Data().Length() ); - iSourceInputBuffer->SetStatus(EFull); - - iDestInputBuffer->Data().SetLength(0); - iDestInputBuffer->SetPosition(0); - - FeedCodecL( iDestCodec, iSourceInputBuffer, iDestInputBuffer); - - - - iDestInputBuffer->Data().SetLength(0); - iDestInputBuffer->SetPosition(0); - - if (iEncBuffer->Size() > 0) - { - - aOutputDurationMilli = iOutputFrameDurationMilli * iNumberOfFramesInOutputBuffer; - PRINT((_L("CProcEncoder::FillEncBufferL() out with ETrue (complete)"))); - return ETrue; - } - - PRINT((_L("CProcEncoder::FillEncBufferL() out with EFalse (incomplete)"))); - return EFalse; - } - -TAudType CProcEncoder::DestAudType() - { - return iAudioType; - } - -void CProcEncoder::ConstructL() - { - - } - -CProcEncoder::CProcEncoder() - { - - } - - -void CProcEncoder::ConfigureAMREncoderL() - { - PRINT((_L("CProcEncoder::ConfigureAMREncoderL() in"))); - - if ( (iToBitRate < KAedMinAMRBitRate) || (iToBitRate > KAedMaxAMRBitRate) ) - { - User::Leave( KErrArgument ); - } - - TVedACAMREncParams* configData = new (ELeave) TVedACAMREncParams; - CleanupStack::PushL( configData ); - - // the bitrates in the switch & if below are not magic numbers but AMR bitrates in bits per seconds and mode indices from TAmrEncParams - - switch ( iToBitRate ) - { - case 4750: - configData->iMode = 0; - configData->iDTX = EFalse; - break; - case 5150: - configData->iMode = 1; - configData->iDTX = EFalse; - break; - case 5900: - configData->iMode = 2; - configData->iDTX = EFalse; - break; - case 6700: - configData->iMode = 3; - configData->iDTX = EFalse; - break; - case 7400: - configData->iMode = 4; - configData->iDTX = EFalse; - break; - case 7950: - configData->iMode = 5; - configData->iDTX = EFalse; - break; - case 10200: - configData->iMode = 6; - configData->iDTX = EFalse; - break; - case 12200: - configData->iMode = 7; - configData->iDTX = EFalse; - break; - default : - // Interprets now the bitrate proprietarily: bitrates that are not exactly AMR bitrates - // mean that voice activity detection is used and the AMR bitrates is the given bitrate rounded upwards to the next AMR bitrate - if ( iToBitRate < 4750 ) - { - configData->iMode = 0; - configData->iDTX = ETrue; - } - else if ( iToBitRate < 5150 ) - { - configData->iMode = 1; - configData->iDTX = ETrue; - } - else if ( iToBitRate < 5900 ) - { - configData->iMode = 2; - configData->iDTX = ETrue; - } - else if ( iToBitRate < 6700 ) - { - configData->iMode = 3; - configData->iDTX = ETrue; - } - else if ( iToBitRate < 7400 ) - { - configData->iMode = 4; - configData->iDTX = ETrue; - } - else if ( iToBitRate < 7950 ) - { - configData->iMode = 5; - configData->iDTX = ETrue; - } - else if ( iToBitRate < 10200 ) - { - configData->iMode = 6; - configData->iDTX = ETrue; - } - else // must be: ( iToBitRate < 12200 ) since checked earlier - { - configData->iMode = 7; - configData->iDTX = ETrue; - } - } - - TUid uid ={KUidMmfCodecAudioSettings}; // Use Uid reserved for codec configurations - iDestCodec->ConfigureL( uid, reinterpret_cast(*configData)); - CleanupStack::PopAndDestroy( configData ); - PRINT((_L("CProcEncoder::ConfigureAMREncoderL() out"))); - } - -// ----------------------------------------------------------------------------- -// CProcEncoder::ConfigureAACEncoderL -// -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CProcEncoder::ConfigureAACEncoderL() - { - PRINT((_L("CProcEncoder::ConfigureAACEncoderL() in"))); - - TInt i = 0; - TBool iSet = EFalse; - for ( i = 0; i < KAedNumSupportedAACSampleRates; i++ ) - { - if ( iToSampleRate == KAedSupportedAACSampleRates[i] ) - { - iSet = ETrue; - } - } - if ( !iSet ) - { - // given samplerate is not supported - User::Leave( KErrNotSupported ); - } - - // AAC codec interprets the input as array of TInts, not as a class - RArray config; - config.Append (iToBitRate); //BitRate - config.Append (iToSampleRate); //SamplingRate - config.Append (0); //iToolFlags - config.Append (iToChannels); //iNumChan - - // NOTE Ali: for 48kHz stereo we might need to use ADTS as output format - // as we can get more than one frame in synchronous call! - config.Append (0); //iuseFormat 0=RAW; 1=ADTS; 2=ADIF - config.Append (0); // 0 = 1 Frame only; 1 = Full Buffer - - TUid uid ={KUidMmfCodecAudioSettings}; // Use Uid reserved for codec configurations - iDestCodec->ConfigureL( uid, reinterpret_cast(config)); - config.Close(); - PRINT((_L("CProcEncoder::ConfigureAACEncoderL() out"))); - } - - -void CProcEncoder::ReAllocBufferL( CMMFDataBuffer* aBuffer, TInt aNewMaxSize ) - { - if ( aBuffer->Data().Length() ) - { - TInt position = aBuffer->Position(); - TInt length = aBuffer->Data().Length(); - HBufC8* oldData = aBuffer->Data().AllocL(); - CleanupStack::PushL( oldData ); - ((CMMFDescriptorBuffer*)aBuffer)->ReAllocBufferL( aNewMaxSize ); - aBuffer->Data().Copy( *oldData ); - CleanupStack::PopAndDestroy( oldData ); - aBuffer->Data().SetLength( length ); - aBuffer->SetPosition( position ); - } - else - { - ((CMMFDescriptorBuffer*)aBuffer)->ReAllocBufferL( aNewMaxSize ); - } - } - -void CProcEncoder::FeedCodecL( CMMFCodec* aCodec, CMMFDataBuffer* aSourceBuffer, CMMFDataBuffer* aDestBuffer ) - { - PRINT((_L("CProcEncoder::FeedCodecL() in"))); - TBool completed = EFalse; - TCodecProcessResult result; - TInt aSrcUsed = 0; - - while ( !completed ) - { - - // encode and check the result - result = EncodeL(aCodec, aSourceBuffer, aDestBuffer); - - switch ( result.iStatus ) - { - case TCodecProcessResult::EProcessIncomplete: - // Not all data from input was consumed (EncodeL updated buffer members), but output was generated - - iEncBuffer->Des().Append(aDestBuffer->Data()); - iNumberOfFramesInOutputBuffer++; - - aDestBuffer->Data().SetLength( 0 ); - aDestBuffer->SetPosition( 0 ); - - break; - - case TCodecProcessResult::EProcessComplete: - // all data from input was used and output was generated - - iEncBuffer->Des().Append(aDestBuffer->Data()); - - iNumberOfFramesInOutputBuffer++; - - aDestBuffer->Data().SetLength( 0 ); - aDestBuffer->SetPosition( 0 ); - - //completed = ETrue; - - break; - - case TCodecProcessResult::EDstNotFilled: - // need more input data, can't fill the output yet; put it back to the empty queue - //completed = ETrue; - - break; - - default: - // EEndOfData, EProcessError, EProcessIncompleteRepositionRequest, EProcessCompleteRepositionRequest - User::Leave( KErrUnknown ); - } - - aSrcUsed += result.iSrcBytesProcessed; - if (aSrcUsed >= (STATIC_CAST(CMMFDataBuffer*, aSourceBuffer)->Data().Length())) - { - PRINT((_L("CProcEncoder::FeedCodecL() ProcessL is completed aSrcUsed[%d]"), aSrcUsed)); - completed = ETrue; - } - - - } - - PRINT((_L("CProcEncoder::FeedCodecL() out"))); - } - - -TBool CProcEncoder::GetIsSupportedDestCodec() - { - TFourCC fourCC; - TUid euid; - - if (iAudioType == EAudAMR) - { - fourCC = TFourCC(KMMFFourCCCodeAMR); - euid = KAedAMRNBEncSWCodecUid; - } - else if (iAudioType == EAudAAC_MPEG4 ) - { - fourCC = TFourCC(KMMFFourCCCodeAAC); - euid = KAedAACEncSWCodecUid; - } - - _LIT8(emptyFourCCString, " , "); - TBufC8<9> fourCCString(emptyFourCCString); - TPtr8 fourCCPtr = fourCCString.Des(); - TPtr8 fourCCPtr1(&fourCCPtr[0], 4); - TPtr8 fourCCPtr2(&fourCCPtr[5], 4 ); - - TFourCC srcFourCC(' ','P','1','6'); - srcFourCC.FourCC(&fourCCPtr1); - fourCC.FourCC(&fourCCPtr2); - - TBool found = EFalse; - TRAPD( err, found = CheckIfCodecAvailableL( fourCCPtr, euid )); - - if (err == KErrNone) - { - return found; - } - else - { - return EFalse; - } - - } - - -void CProcEncoder::SetDestCodecL() - { - PRINT((_L("CProcEncoder::SetDestCodecL() in"))); - - if ( !GetIsSupportedDestCodec() ) - { - PRINT((_L("CProcEncoder::SetDestCodecL() error, unsupported codec"))); - User::Leave( KErrNotSupported ); - } - - if ( iDestCodec ) - { - delete iDestCodec; - iDestCodec = NULL; - } - - TUid euid = TUid::Null(); - - if (iAudioType == EAudAMR) - { - euid = KAedAMRNBEncSWCodecUid; - } - else if (iAudioType == EAudAAC_MPEG4 ) - { - euid = KAedAACEncSWCodecUid; - } - - - iDestCodec = CMMFCodec::NewL (euid); - iReady = EFalse; - - PRINT((_L("CProcEncoder::SetDestCodecL() out"))); - } - - -TBool CProcEncoder::CheckIfCodecAvailableL( - const TDesC8& aCodecFourCCString, const TUid& aCodecUId ) - { - PRINT((_L("CProcEncoder::CheckIfCodecAvailableL() in"))); - TBool found = EFalse; - - // Create a TEcomResolverParams structure. - TEComResolverParams resolverParams ; - resolverParams.SetDataType( aCodecFourCCString ) ; - resolverParams.SetWildcardMatch( EFalse ) ; - - RImplInfoPtrArray plugInArray ; // Array to return matching decoders in (place on cleanupstack _after_ ListImplementationsL() ) - - TUid UidMmfPluginInterfaceCodec = {KMmfUidPluginInterfaceCodec}; - - // ListImplementationsL leaves if it cannot find anything so trap the error and ignore it. - TRAPD( err, REComSession::ListImplementationsL(UidMmfPluginInterfaceCodec, resolverParams, plugInArray ) ) ; - CleanupResetAndDestroyPushL(plugInArray); - - if (err == KErrNone) - { - found = EFalse; - for ( TInt i = 0; i < plugInArray.Count(); i++) - { - // there is a match, but 1st we need to ensure it is the one we have tested with, and that have compatible implementation of ConfigureL - PRINT((_L("CProcEncoder::CheckIfCodecAvailable() plugin found with Uid 0x%x"), plugInArray[i]->ImplementationUid().iUid )); - if ( plugInArray[i]->ImplementationUid() == aCodecUId ) - { - //match accepted - PRINT((_L("CProcEncoder::CheckIfCodecAvailable() plugin accepted"))); - found = ETrue; - } - } - } - else - { - PRINT((_L("CProcEncoder::CheckIfCodecAvailable() Error in ListImp.: %d"), err)); - //no match - found = EFalse; - } - - - CleanupStack::PopAndDestroy(); //plugInArray - PRINT((_L("CProcEncoder::CheckIfCodecAvailableL() out"))); - return found; - } - -TCodecProcessResult CProcEncoder::EncodeL( CMMFCodec* aCodec, CMMFDataBuffer* aInBuffer, CMMFDataBuffer* aOutBuffer) - { - PRINT((_L("CProcEncoder::EncodeL() in, input pos: %d, length: %d"), aInBuffer->Position(), aInBuffer->Data().Length() )); - TCodecProcessResult result; - - result = aCodec->ProcessL (*aInBuffer, *aOutBuffer); - - switch (result.iStatus) - { - case TCodecProcessResult::EProcessComplete: - // finished processing source data, all data in sink buffer - PRINT((_L("CProcEncoder::FeedCodecL() EProcessComplete"))); - aInBuffer->SetPosition( 0 ); - aInBuffer->Data().SetLength(0); - break; - - case TCodecProcessResult::EDstNotFilled: - // the destination is not full, we need more data. Handled in caller - PRINT((_L("CProcEncoder::FeedCodecL() EDstNotFilled"))); - aInBuffer->SetPosition( 0 ); - aInBuffer->Data().SetLength(0); - break; - - case TCodecProcessResult::EProcessIncomplete: - // the sink was filled before all the source was processed - PRINT((_L("CProcEncoder::FeedCodecL() EProcessIncomplete"))); - aOutBuffer->SetPosition( 0 ); - aInBuffer->SetPosition( aInBuffer->Position() + result.iSrcBytesProcessed ); - break; - - default: - break; - } - - - - PRINT((_L("CProcEncoder::EncodeL() out, %d -> %d"),result.iSrcBytesProcessed, result.iDstBytesAdded)); - PRINT((_L("CProcEncoder::EncodeL() out, input pos: %d, length: %d"), aInBuffer->Position(), aInBuffer->Data().Length() )); - return result; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/ProcFrameHandler.cpp --- a/videoeditorengine/audioeditorengine/src/ProcFrameHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "ProcFrameHandler.h" - - -CProcFrameHandler::~CProcFrameHandler() - { - - } - - - -TBool CProcFrameHandler::IsMixingAvailable() const - { - - return EFalse; - - } - -TBool CProcFrameHandler::MixL(const HBufC8* /*aFrame1*/, const HBufC8* /*aFrame2*/, HBufC8*& aMixedFrame) - { - - aMixedFrame = 0; - return EFalse; - - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/ProcInFileHandler.cpp --- a/videoeditorengine/audioeditorengine/src/ProcInFileHandler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,881 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include -#include "AudPanic.h" -#include "ProcInFileHandler.h" -#include "AudClipInfo.h" -#include "ProcTools.h" -#include "audconstants.h" - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -CProcInFileHandler::~CProcInFileHandler() - { - - if (iFileOpen && iOwnsFile) - { - iFile.Close(); - iFs.Close(); - } - - - if (iProperties != 0) - { - delete iProperties; - iProperties = 0; - } - - - delete iRawSilentFrame; - - delete iInputBuffer; - - delete iWavFrameHandler; - - } - - -TBool CProcInFileHandler::DecodingRequired() - { - return iDecodingRequired; - } - - -TInt CProcInFileHandler::GetDecodedFrameSize() - { - if (iProperties == 0) - { - return 0; - } - else - { - - // divided by 1000000/2 cause time is in - // microseconds and 16 bits are used for one sample -#ifdef EKA2 - TInt frameSize = (iProperties->iFrameDuration.Int64())*(iTargetSampleRate)/(1000000/2); -#else - TInt frameSize = (iProperties->iFrameDuration.Int64().GetTInt())*(iTargetSampleRate)/(1000000/2); -#endif - - - if (iChannelMode == EAudStereo) - { - frameSize *= 2; - } - - return frameSize; - } - - - } - - -void CProcInFileHandler::SetDecodingRequired(TBool aDecodingRequired) - { - iDecodingRequired = aDecodingRequired; - - } - -TBool CProcInFileHandler::GetAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime, TBool& aRawFrame) - { - - if (iDecodingRequired) - { - aRawFrame = ETrue; - return GetRawAudioFrameL(aFrame, aSize, aTime); - } - else - { - aRawFrame = EFalse; - return GetEncAudioFrameL(aFrame, aSize, aTime); - - } - } - - -TBool CProcInFileHandler::GetRawAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime) - { - - - while (iInputBuffer == 0 || iInputBuffer->Length() < iRawFrameLength) - { - TBool ret = GetOneRawAudioFrameL(aFrame, aSize, aTime); - if (!ret) - { - return ret; - } - - WriteDataToInputBufferL(*aFrame); - delete aFrame; - aFrame = 0; - - } - - if (iInputBuffer->Length() >= iRawFrameLength) - { - aFrame = HBufC8::NewL(iRawFrameLength); - aFrame->Des().Append(iInputBuffer->Left(iRawFrameLength)); - - - TInt bytesInSecond = iTargetSampleRate*2; - - if (iChannelMode == EAudStereo) - { - bytesInSecond *= 2; - } - - - // Fix for synchronizing problem ----------------------------------> - // If the accurate frame length cannot be represented in milliseconds - // store the remainder and increase the output frame lenght by one ms - // when needed. Accuracy depends on sampling rate - - TReal accurateFrameLen = TReal(aFrame->Length()*1000)/bytesInSecond; - aTime = TUint((aFrame->Length()*1000)/bytesInSecond); - - iFrameLenRemainderMilli += accurateFrameLen - aTime; - - if (iFrameLenRemainderMilli > 1) - { - aTime += 1; - iFrameLenRemainderMilli -= 1; - } - // <---------------------------------- Fix for synchronizing problem - - iInputBuffer->Des().Delete(0, iRawFrameLength); - - - } - - return ETrue; - - - } - - -TBool CProcInFileHandler::GetOneRawAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime) - { - - - TInt size = 0; - - TInt32 time = 0; - - HBufC8* frame = 0; - - TBool encFrameRead = GetEncAudioFrameL(frame, size, time); - - if (encFrameRead) - { - CleanupStack::PushL(frame); - } - - aTime = time; - - if (!encFrameRead) - { - return EFalse; - } - - TRAPD(err, iDecoder->FillDecBufferL(frame, aFrame)); - if (err == KErrNotFound) - { - // S60 audio decoders seem to leave with KErrNotFound if they find problems in input clips. - // However, sometimes the problem is only in one frame, e.g. the 1st frame may contain some metadata that can't be decoded, - // but decoding can continue after that. But if there are many errors, the clip is most likely unusable. - PRINT((_L("CProcInFileHandler::GetOneRawAudioFrameL() iDecoder->FillDecBufferL leaved with %d"),err)); - if ( iDecoderErrors > 0 ) - { - // several errors, leave, but change the error code to more readable - PRINT((_L("CProcInFileHandler::GetOneRawAudioFrameL() leave with %d"),KErrCorrupt)); - User::Leave(KErrCorrupt); - } - iDecoderErrors++; - } - else if (err == KErrNone) - { - // keep filling the decoder buffer; the decoder seem to leave with KErrNone if it can't get enough data, ignore the leave - } - else - { - // some other error - PRINT((_L("CProcInFileHandler::GetOneRawAudioFrameL() iDecoder->FillDecBufferL leaved with %d, leaving"),err)); - User::Leave(err); - } - - if (encFrameRead) - { - CleanupStack::PopAndDestroy(frame); - frame = 0; - - } - - while (aFrame == 0 || aFrame->Size() == 0) - { - - encFrameRead = GetEncAudioFrameL(frame, size, time); - - if (encFrameRead) - { - CleanupStack::PushL(frame); - } - else - { - return EFalse; - } - - - aTime += time; - - - - iDecoder->FillDecBufferL(frame, aFrame); - if (encFrameRead) - { - CleanupStack::PopAndDestroy(frame); - frame = 0; - } - - } - - - aSize = aFrame->Length(); - - if (iProperties->iAudioTypeExtension != EAudExtensionTypeNoExtension) - { - - // AACPlus is always decoded, therefore the gain manipulation can be done - // in time domain - - ManipulateGainL(aFrame); - aSize = aFrame->Length(); - - - } - - - return ETrue; - - } - - -TBool CProcInFileHandler::SetRawAudioFrameSize(TInt aSize) - { - - const TInt KMaxRawFrameSize = 4096; - if (aSize > 0 && aSize <= KMaxRawFrameSize) - { - iRawFrameLength = aSize; - return ETrue; - } - - return EFalse; - } - -TBool CProcInFileHandler::GetSilentAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime, TBool& aRawFrame) - { - - if (iDecodingRequired) - { - aRawFrame = ETrue; - return GetRawSilentAudioFrameL(aFrame, aSize, aTime); - - } - - else - { - aRawFrame = EFalse; - return GetEncSilentAudioFrameL(aFrame, aSize, aTime); - } - } - - - - -TBool CProcInFileHandler::GetRawSilentAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aDuration) - { - - - aFrame = HBufC8::NewL(iRawFrameLength); - aFrame->Des().Fill(0, aFrame->Des().MaxLength()); - - TInt bytesInSecond = iTargetSampleRate*2; - - if (iChannelMode == EAudStereo) - { - bytesInSecond *= 2; - } - - aDuration = TUint((aFrame->Length()*1000)/bytesInSecond); - aSize = aFrame->Length(); - - - // input buffer is created only if needed - if (iInputBuffer) - { - iInputBuffer->Des().Delete(0, iInputBuffer->Size()); - - } - return ETrue; - - } - -TBool CProcInFileHandler::GetEncSilentAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aDuration) - { - - if (iSilentFrame == 0) - { - return EFalse; - } - - aFrame = HBufC8::NewL(iSilentFrame->Size()); - aFrame->Des().Append(iSilentFrame->Des()); - - aDuration = iSilentFrameDuration; - aSize = iSilentFrame->Size(); - return ETrue; - - } - - -CProcInFileHandler::CProcInFileHandler() : iFileOpen(EFalse) - { - - - - } - -TInt32 CProcInFileHandler::GetCurrentTimeMilliseconds() - { - return iCurrentTimeMilliseconds; - - } - -// default implementation for files that do not have buffered bytes -TBool CProcInFileHandler::ReadAudioDecoderSpecificInfoL(HBufC8*& /*aBytes*/, TInt /*aBufferSize*/) - { - return EFalse; - } - -TBool CProcInFileHandler::OpenFileForReadingL() - { - - if (iFileOpen) - { - User::Leave(KErrGeneral); - } - - TInt err = iFs.Connect(); - if (err != KErrNone) - { - iFileOpen = EFalse; - User::Leave(err); - } - - err=iFile.Open(iFs, iFileName->Des(), EFileShareReadersOnly); - if (err != KErrNone) - { - err=iFile.Open(iFs, iFileName->Des(), EFileShareAny); - } - if (err != KErrNone) - { - iFileOpen = EFalse; - iFs.Close(); - User::Leave(err); - } - else - { - iFileOpen = ETrue; - return ETrue; - } - - return EFalse; - - } - -TBool CProcInFileHandler:: -SetPropertiesL(TAudFileProperties aProperties) -{ - if(iProperties == 0) - iProperties = new (ELeave) TAudFileProperties(); - - iProperties->iAudioType = aProperties.iAudioType; - iProperties->iBitrate = aProperties.iBitrate; - iProperties->iBitrateMode = aProperties.iBitrateMode; - iProperties->iChannelMode = aProperties.iChannelMode; - iProperties->iDuration = 0; - iProperties->iFileFormat = aProperties.iFileFormat; - iProperties->iSamplingRate = aProperties.iSamplingRate; - iProperties->iFrameLen = aProperties.iFrameLen; - iProperties->iFrameDuration = aProperties.iFrameDuration; - iProperties->iFrameCount = aProperties.iFrameCount; - - return (ETrue); -} - -TBool CProcInFileHandler::SetPriority(TInt aPriority) - { - if (aPriority < 0) return EFalse; - - iPriority = aPriority; - - return ETrue; - - } -TInt CProcInFileHandler::Priority() const - { - return iPriority; - - } - -TBool CProcInFileHandler::CloseFile() - { - - if (iOwnsFile) - { - iFile.Close(); - iFs.Close(); - iFileOpen = EFalse; - } - - return ETrue; - - } - - - -TBool CProcInFileHandler::InitAndOpenFileL(const TDesC& aFileName, - RFile* aFileHandle, - TInt aReadBufferSize) - { - - - iBufferStartOffset = 0; - iBufferEndOffset = 0; - iCutInTime = 0; - - if (!aFileHandle) - { - iFileName = HBufC::NewL(aFileName.Length()); - *iFileName = aFileName; - } - - iReadBufferSize = aReadBufferSize; - iReadBuffer = HBufC8::NewL(iReadBufferSize); - - const TInt KVedACSizeAMRBuffer = 320; - - // [JK]: Moved from OpenFileForReadingL - // AMR buffer is the smallest possible - // buffersize fill be increased if needed - iRawFrameLength = KVedACSizeAMRBuffer; - iInputBuffer = HBufC8::NewL(iRawFrameLength); - - if (aFileHandle) - { - iFile = *aFileHandle; - iOwnsFile = EFalse; - iFileOpen = ETrue; - return 0; - } - - TBool err = OpenFileForReadingL(); - if (!err) iFileOpen = ETrue; - - iOwnsFile = ETrue; - - return err; - - } - -void CProcInFileHandler::ResetAndCloseFile() - { - - if (iFileOpen) - { - CloseFile(); - } - if (iFileName != 0) - delete iFileName; - iFileName = 0; - if (iReadBuffer != 0) - delete iReadBuffer; - iReadBuffer = 0; - - delete iRawSilentFrame; - iRawSilentFrame = 0; - - - - } - -TInt CProcInFileHandler::BufferedFileRead(TInt aPos,TDes8& aDes) - { - TInt bufSize; - - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - TBool readingNeeded = EFalse; - - if (aPos < iBufferStartOffset || aPos + aDes.MaxSize() > iBufferEndOffset) - { - readingNeeded = ETrue; - } - - if(readingNeeded) - { - TInt fSize; - - iFile.Size(fSize); - if(aPos >= fSize) - { - aDes.SetLength(0); - return 0; - } - - TPtr8 tmpDes((TPtr8)iReadBuffer->Des()); - - iFile.Read(aPos, (TPtr8&)tmpDes, iReadBufferSize); - - iBufferStartOffset = aPos; - iBufferEndOffset = aPos+iReadBuffer->Des().Size()-1; - } - - if (iReadBuffer->Size() == 0) - { - return 0; - } - else - { - bufSize = Min(iReadBuffer->Des().Length(), aDes.MaxSize()); - aDes.Copy(iReadBuffer->Des().Mid(aPos-iBufferStartOffset, bufSize)); - iFilePos = aPos+aDes.Size(); - - return aDes.Size(); - } - } - -TInt CProcInFileHandler::BufferedFileRead(TDes8& aDes) - { - - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - return BufferedFileRead(iFilePos, aDes); - - - } - -TInt CProcInFileHandler::BufferedFileRead(TDes8& aDes,TInt aLength) - { - TInt bufSize; - - if (!iFileOpen) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - aDes.Zero(); - - TBool readingNeeded = EFalse; - - if (iFilePos < iBufferStartOffset || iFilePos + aLength-1 > iBufferEndOffset) - { - readingNeeded = ETrue; - } - - if(readingNeeded) - { - TPtr8 tmpDes((TPtr8)iReadBuffer->Des()); - - iFile.Read(iFilePos, (TPtr8&)tmpDes, iReadBufferSize); - - if (iReadBuffer->Size() == 0) return 0; - iFile.Seek(ESeekStart, iFilePos); - iBufferStartOffset = iFilePos; - iBufferEndOffset = iFilePos+iReadBuffer->Des().Size()-1; - } - bufSize = Min(iReadBuffer->Des().Length(), aLength); - aDes.Copy(iReadBuffer->Des().Mid(iFilePos-iBufferStartOffset, bufSize)); - iFilePos = iFilePos+aDes.Size(); - return aDes.Size(); - - } - -TInt CProcInFileHandler::BufferedFileReadChar(TInt aPos, TUint8& aChar) - { - - TBuf8<1> cha; - BufferedFileRead(aPos, cha); - - if (cha.Size() == 1) - { - aChar = cha[0]; - return 1; - } - else - { - return 0; - } - - } - -TBool CProcInFileHandler::BufferedFileSetFilePos(TInt aPos) - { - - - TInt fileSize = 0; - iFile.Seek(ESeekEnd, fileSize); - - iFile.Seek(ESeekStart, aPos); - - if (aPos == 0) - { - iBufferStartOffset = 0; - iBufferEndOffset = 0; - - } - - if (aPos < 0) - { - return EFalse; - } - else if (aPos > fileSize) - { - return EFalse; - } - else - { - iFilePos = aPos; - } - return ETrue; - } - -TInt CProcInFileHandler::BufferedFileGetFilePos() - { - - return iFilePos; - - } - -TInt CProcInFileHandler::BufferedFileGetSize() - { - - TInt fileSize = 0; - iFile.Size(fileSize); - - return fileSize; - - - } - - -TInt8 CProcInFileHandler::NormalizingMargin() const - { - return iNormalizingMargin; - } - -TBool CProcInFileHandler::ManipulateGainL(HBufC8*& aFrameIn) - { - - if (iClip == 0) - { - return ETrue; - } - - if (iProperties->iAudioTypeExtension != EAudExtensionTypeNoExtension) - { - - // gain manipulation with AACPlus is done in time domain - - if (iWavFrameHandler == 0) - { - - const TInt KBitDepth = 16; - iWavFrameHandler = CProcWAVFrameHandler::NewL(KBitDepth); - } - - - } - - - // check if the clip is normalized - TInt8 normalizingGain1 = iNormalizingMargin; - - // check what is the current gain according to dynamic level marks - TInt8 newGain1 = GetGainNow(); - - - // the combination of dynamic level marks + normalizing - TInt8 normalizedGain1 = 0; - if ( ((TInt)newGain1+normalizingGain1) > (TInt)KMaxTInt8) - { - normalizedGain1 = KMaxTInt8; - } - else - { - normalizedGain1 = static_cast(newGain1+normalizingGain1); - } - - - if (normalizedGain1 != 0) - { - HBufC8* frameOut = 0; - // if we need to adjust gain... - TBool manip = ETrue; - if (iProperties->iAudioTypeExtension != EAudExtensionTypeNoExtension) - { - - manip = iWavFrameHandler->ManipulateGainL(aFrameIn, frameOut, normalizedGain1); - } - else - { - manip = iFrameHandler->ManipulateGainL(aFrameIn, frameOut, normalizedGain1); - } - - - if (manip) - { - - CleanupStack::PushL(aFrameIn); - CleanupStack::PushL(frameOut); - - if (frameOut->Size() > aFrameIn->Size()) - { - // if manipulated frame was longer than the original - aFrameIn = aFrameIn->ReAllocL(frameOut->Size()); - - } - aFrameIn->Des().Delete(0, aFrameIn->Size()); - aFrameIn->Des().Copy(frameOut->Des()); - - CleanupStack::PopAndDestroy(frameOut); - CleanupStack::Pop(); // aFrameIn - } - - - } - else - { - return EFalse; - } - - return ETrue; - } - -TInt8 CProcInFileHandler::GetGainNow() - { - TInt markAmount = iClip->DynamicLevelMarkCount(); - TTimeIntervalMicroSeconds ti(0); - TAudDynamicLevelMark previous(ti,0); - //TInt32 durationMilliseconds = (aClip->Info()->Properties().iDuration.Int64()/1000).GetTInt(); - TAudDynamicLevelMark next(iClip->Info()->Properties().iDuration,0); - - for (TInt a = 0 ; a < markAmount ; a++) - { - TAudDynamicLevelMark markNow = iClip->DynamicLevelMark(a); - - if (ProcTools::MilliSeconds(markNow.iTime) > iCurrentTimeMilliseconds) - { - next = markNow; - break; - } - - previous = markNow; - - } - - TInt32 previousMilli = ProcTools::MilliSeconds(previous.iTime); - - TInt32 nextMilli = ProcTools::MilliSeconds(next.iTime); - - TInt32 timeDifference = nextMilli - previousMilli; - - TInt8 previousLevel = previous.iLevel; - TInt8 nextLevel = next.iLevel; - - // If the levels are positive then the amount of gain needs to be reduced - if (previousLevel > 0) - { - previousLevel /= KAedPositiveGainDivider; - } - if (nextLevel > 0) - { - nextLevel /= KAedPositiveGainDivider; - } - - if (timeDifference == 0) - { - return previousLevel; - } - - TInt32 fraction = ((iCurrentTimeMilliseconds-previousMilli)*100)/timeDifference; - TInt8 newGain = 0; - - TInt8 levelDifference = static_cast(Abs(nextLevel - previousLevel)); - TInt8 inc = 0; - if (fraction > 0) - { - inc = static_cast((levelDifference*fraction)/100); - } - - if (nextLevel - previousLevel >= 0) - { - newGain = static_cast(previousLevel + inc); - } - else - { - newGain = static_cast(previousLevel - inc); - } - - return newGain; - - } - -TBool CProcInFileHandler::WriteDataToInputBufferL(const TDesC8& aData) - { - - if (iInputBuffer == 0) - { - iInputBuffer = HBufC8::NewL(aData.Size()); - } - else if (iInputBuffer->Des().MaxSize() < iInputBuffer->Length() + aData.Length()) - { - iInputBuffer = iInputBuffer->ReAllocL(iInputBuffer->Length() + aData.Length()); - } - - iInputBuffer->Des().Append(aData); - - return ETrue; - - } diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/ProcProcessAO.cpp --- a/videoeditorengine/audioeditorengine/src/ProcProcessAO.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,332 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "ProcProcessAO.h" -#include "AudCommon.h" -#include "AudPanic.h" -#include "audconstants.h" - - - - -TBool CProcProcess::StartSyncProcessingL(const CAudSong* aSong, TBool aGetTimeEstimation) - { - - iSong = aSong; - - if (iEncoder != 0) - { - delete iEncoder; - iEncoder = 0; - } - iEncoder = CProcEncoder::NewL(); - iEncoder->InitL(iSong->OutputFileProperties().iAudioType, - iSong->OutputFileProperties().iSamplingRate, - iSong->OutputFileProperties().iChannelMode, - iSong->OutputFileProperties().iBitrate ); - - - if (iAMRBuf) - { - delete iAMRBuf; - iAMRBuf = 0; - - } - // buffer for extra AMR-frames - iAMRBuf = HBufC8::NewL(KAedMaxAMRFrameLength); - - if (iDecBuffer) - { - delete iDecBuffer; - iDecBuffer = 0; - - } - - iDecBuffer = HBufC8::NewL(KAedMaxFeedBufferSize); - - TInt rawFrameSize = KAedSizeAMRBuffer; - if (aSong->OutputFileProperties().iSamplingRate == KAedSampleRate8kHz) - { - rawFrameSize = KAedSizeAMRBuffer; - } - else - { - rawFrameSize = KAedSizeAACBuffer; - if ( aSong->OutputFileProperties().iChannelMode == EAudStereo ) - { - rawFrameSize *= 2; - } - } - - - CAudProcessorImpl* processorImpl = CAudProcessorImpl::NewLC(); - - processorImpl->ProcessSongL(aSong, rawFrameSize, aGetTimeEstimation); - - CleanupStack::Pop(processorImpl); - iProcessorImpl = processorImpl; - - - return ETrue; - - } - -TBool CProcProcess::ProcessSyncPieceL(HBufC8*& aFrame, TInt& aProgress, - TTimeIntervalMicroSeconds& aDuration) - { - - // first check if we have frames left from the previous encoding - - if (iAMRBuf->Length() > 0) - { - // we do have some frames left - - TInt frLen = ProcTools::GetNextAMRFrameLength(iAMRBuf, 0); - - if (frLen > iAMRBuf->Length()) - { - // something has gone wrong, we don't have a proper AMR frame in the buffer - User::Leave(KErrGeneral); - } - - aFrame = HBufC8::NewL(frLen); - aFrame->Des().Append(iAMRBuf->Left(frLen)); - iAMRBuf->Des().Delete(0, frLen); - - aDuration = KAedAMRFrameDuration; - iProgress = aProgress; - - return EFalse; - } - - iDecBuffer->Des().Delete(0, iDecBuffer->Size()); - - HBufC8* frame = 0; - - TBool rawFrame = EFalse; - - TInt outDurationMilli = 0; - - TBool ret = iProcessorImpl->ProcessSyncPieceL(frame, aProgress, aDuration, rawFrame); - iProgress = aProgress; - - if (!rawFrame) - { - - // frame already in compressed domain, no need for encoding - if (ret || frame == 0) - { - - iTimeEstimate = iProcessorImpl->GetFinalTimeEstimate(); - - aFrame = frame; - // no more frames left -> processing ready - delete iProcessorImpl; - iProcessorImpl = 0; - delete iDecBuffer; - iDecBuffer = 0; - return ETrue; - } - else - { - aFrame = frame; - return EFalse; - } - - } - else - { - // frame needs to be encoded - if (ret || frame == 0) - { - - iTimeEstimate = iProcessorImpl->GetFinalTimeEstimate(); - // no more frames left -> processing ready - delete iProcessorImpl; - iProcessorImpl = 0; - delete iDecBuffer; - iDecBuffer = 0; - return ETrue; - } - - - // feed encoder until we have something in the output buffer - - - iEncoder->FillEncBufferL(*frame, iDecBuffer, outDurationMilli); - - delete frame; - frame = 0; - - while (iDecBuffer->Size() == 0) - { - - // we need more input for encoder - - TTimeIntervalMicroSeconds dur; - ret = iProcessorImpl->ProcessSyncPieceL(frame, aProgress, dur, rawFrame); - - if (!ret) - { - - } - else - { - - // no more frames left -> processing ready - - - iTimeEstimate = iProcessorImpl->GetFinalTimeEstimate(); - delete iProcessorImpl; - iProcessorImpl = 0; - delete iDecBuffer; - iDecBuffer = 0; - return ETrue; - } - - - - iProgress = aProgress; - - if (ret) - { - - // no more frames left -> processing ready - - iTimeEstimate = iProcessorImpl->GetFinalTimeEstimate(); - delete iProcessorImpl; - iProcessorImpl = 0; - delete iDecBuffer; - iDecBuffer = 0; - return ETrue; - } - - if (!rawFrame) - { - - // we got encoded frame -> return it - aFrame = frame; - return EFalse; - } - - // we should now have a raw frame in aFrame -> feed the encoder - - aDuration = aDuration.Int64() + dur.Int64(); - - iEncoder->FillEncBufferL(*frame, iDecBuffer, outDurationMilli); - delete frame; - frame = 0; - - } - - } - - // read the encoded frame to aFrame - - TInt frameLen = 0; - if (iEncoder->DestAudType() == EAudAMR) - { - frameLen = ProcTools::GetNextAMRFrameLength(iDecBuffer, 0); - } - - if (frameLen < iDecBuffer->Length() && iEncoder->DestAudType() == EAudAMR) - { - - // we got more than one AMR frame, return the first now - // and the second when this function is called next time - aFrame = HBufC8::NewL(frameLen); - aFrame->Des().Append(iDecBuffer->Des().Left(frameLen)); - - if ( (iDecBuffer->Length() + iAMRBuf->Length() - frameLen) > iAMRBuf->Des().MaxLength()) - { - // if the temporary storage is too small, we need more space for it - iAMRBuf = iAMRBuf->ReAlloc(iDecBuffer->Length() + iAMRBuf->Length() - frameLen); - } - - iAMRBuf->Des().Append(iDecBuffer->Right(iDecBuffer->Length() - frameLen)); - - } - else - { - - aFrame = HBufC8::NewL(iDecBuffer->Size()); - aFrame->Des().Append(iDecBuffer->Des()); - - } - - iDecBuffer->Des().Delete(0, iDecBuffer->Size()); - - aDuration = outDurationMilli*1000; - - return EFalse; - - } - -TInt64 CProcProcess::GetFinalTimeEstimate() const - { - - return iTimeEstimate; - - } - - -CProcProcess* CProcProcess::NewL() - { - - - CProcProcess* self = new (ELeave) CProcProcess(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CProcProcess::~CProcProcess() - { - - if (iProcessorImpl != 0) - { - delete iProcessorImpl; - iProcessorImpl = 0; - } - - delete iEncoder; - - delete iDecBuffer; - iDecBuffer = 0; - - delete iAMRBuf; - - - } - - -void CProcProcess::ConstructL() - { - - - } - -CProcProcess::CProcProcess() : iProcessorImpl(0), iSong(0) - { - - } - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/ProcTimeEstimateAO.cpp --- a/videoeditorengine/audioeditorengine/src/ProcTimeEstimateAO.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,156 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - - -#include "ProcTimeEstimateAO.h" - - -void CProcTimeEstimateAO::RunL() - { - - HBufC8* frame = 0; - TInt progress = 0; - TTimeIntervalMicroSeconds duration; - - - TBool ret = EFalse; - TRAPD(err, ret = iProcessingObject->ProcessSyncPieceL(frame, progress, duration)); - - if (err != KErrNone) - { - // something went wrong - - delete frame; - - delete iProcessingObject; - iProcessingObject = 0; - - // notify - iTEObserver->NotifyTimeEstimateReady(0); - - } - - if (!ret) - { - - if (frame) - { - - // frame is not needed - delete frame; - frame = 0; - - } - - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - - return; - } - else - { - - TInt64 timeEstimate = iProcessingObject->GetFinalTimeEstimate(); - - - delete iProcessingObject; - iProcessingObject = 0; - - // notify - iTEObserver->NotifyTimeEstimateReady(timeEstimate); - - return; - - } - - - } - -void CProcTimeEstimateAO::DoCancel() - { - - } - -CProcTimeEstimateAO* CProcTimeEstimateAO::NewL() - { - - - CProcTimeEstimateAO* self = new (ELeave) CProcTimeEstimateAO(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CProcTimeEstimateAO::~CProcTimeEstimateAO() - { - Cancel(); - delete iProcessingObject; - - } - - -TBool CProcTimeEstimateAO::StartL(const CAudSong* aSong, MAudTimeEstimateObserver& aTEObserver) - { - - iTEObserver = &aTEObserver; - - iSong = aSong; - - delete iProcessingObject; - iProcessingObject = NULL; /* Must set to null before reallocating with NewL */ - iProcessingObject = CProcProcess::NewL(); - - iProcessingObject->StartSyncProcessingL(iSong, ETrue); - - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - - return ETrue; - - } - -void CProcTimeEstimateAO::CancelTimeEstimate() - { - - Cancel(); - delete iProcessingObject; - iProcessingObject = 0; - // notify - return; - - - } - -void CProcTimeEstimateAO::ConstructL() - { - - } - -CProcTimeEstimateAO::CProcTimeEstimateAO() : CActive(0) - { - - CActiveScheduler::Add(this); - - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/ProcTools.cpp --- a/videoeditorengine/audioeditorengine/src/ProcTools.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1043 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "ProcTools.h" -#include "AudPanic.h" - -#include "mime_io.h" - - -TBool ProcTools::Dec2Bin(TUint8 aDec, TBuf8<8>& aBinary) - { - - // clear aBinary just in case - aBinary.Delete(0, aBinary.Length()); - - aBinary.AppendNum(aDec, EBinary); - - TInt zerosNeeded = 0; - if (aBinary.Length() == 8) - { - // the MSB is one -> no padding needed - } - else - { - - zerosNeeded = 8 - aBinary.Length(); - for(TInt as = 0 ; as < zerosNeeded ; as++) - { - aBinary.AppendNum(0); - } - - for (TInt tr = 8 - 1 ; tr >= 0 ; tr--) - { - - if (tr >= zerosNeeded) - { - aBinary[tr] = aBinary[tr-zerosNeeded]; - } - else - { - aBinary[tr] = '0'; - } - - } - } - - - return ETrue; - } - -TBool ProcTools::Dec2BinL(TUint32 aDec, HBufC8*& aBin) - { - - // 32 bits, the leftmost is one - TUint32 bitMask = 0x80000000; - - TBool onlyZeros = ETrue; - for (TInt a = 32 ; a > 0 ; a--) - { - TUint32 res = bitMask & aDec; - - if (res > 0 && onlyZeros) - { - // the first one from left found - onlyZeros = EFalse; - aBin = HBufC8::NewL(a); - aBin->Des().Append('1'); - } - else if (res > 0 && !onlyZeros) - { - aBin->Des().Append('1'); - } - else if (res == 0 && !onlyZeros) - { - aBin->Des().Append('0'); - - } - bitMask >>= 1; - } - - return ETrue; - - } - -TBool ProcTools::Bin2Dec(const TDesC8& aBin, TUint& aDec) - { - - TLex8 leks(aBin); - - if (leks.Val(aDec, EBinary) != KErrNone) - { - return EFalse; - } - return ETrue; - - } - -TBool ProcTools::Des2Dec(TDesC8& aDes, TUint& aDec) - { - - TLex8 leks(aDes); - - if (leks.Val(aDec, EDecimal) != KErrNone) - { - return EFalse; - } - return ETrue; - - - } - -TBool ProcTools::Des2BinL(const TDesC8& aDes, HBufC8*& aBin) - { - - aBin = HBufC8::NewL(aDes.Length()*8); - // clear aBinary just in case - - for (TInt a = 0 ; a < aDes.Length() ; a++) - { - - TUint8 chDec = aDes[a]; - - aBin->Des().AppendNum(chDec, EBinary); - - TInt zerosNeeded = 0; - if (aBin->Des().Length() == (a+1)*8) - { - // the MSB is one -> no padding needed - } - else - { - - zerosNeeded = (a+1)*8 - aBin->Des().Length(); - for(TInt as = 0 ; as < zerosNeeded ; as++) - { - aBin->Des().Insert(a*8, _L8("0")); - //AppendNum(0); - } - - } - } - - - return ETrue; - - } - -TInt ProcTools::MilliSeconds(TTimeIntervalMicroSeconds aMicroSeconds) - { - -#ifndef EKA2 - return (aMicroSeconds.Int64()/1000).GetTInt(); -#else - return (aMicroSeconds.Int64()/1000); -#endif - - } - -TTimeIntervalMicroSeconds ProcTools::MicroSeconds(TInt aMilliSeconds) - { - - TTimeIntervalMicroSeconds mic(aMilliSeconds*1000); - return mic; - } - -TInt ProcTools::GetTInt(TInt64 aTInt64) - { - -#ifndef EKA2 - return aTInt64.GetTInt(); -#else - return aTInt64; -#endif - - } - -TInt ProcTools::GetValueFromShuffledFrame(const HBufC8* aFrame, - const TUint8 aBitPositions[], - const TInt aSize) - { - - HBufC8* inBytes = 0; - TRAPD(err, inBytes = HBufC8::NewL(aSize)); - if (err != KErrNone) - { - inBytes = 0; - return -1; - } - - - _LIT8(KZero, "0"); - _LIT8(KOne, "1"); - - - for (TInt a = 0 ; a < aSize ; a++) - { - - TUint8 mask = 0x80; // 1000 0000b - TUint byteNumber = aBitPositions[a]/8; - TUint bitNumber = aBitPositions[a]%8; - - const TUint8 byteNow = (*aFrame)[byteNumber]; - - mask >>= bitNumber; - - //TUint8 masked = byteNow & mask; - // why casting is needed, dunno? - - TUint8 masked = static_cast(byteNow & mask); - - if (masked == 0) - { - inBytes->Des().Append(KZero); - } - else - { - inBytes->Des().Append(KOne); - } - } - TUint dec = 0; - Bin2Dec(inBytes->Des(), dec); - delete inBytes; - inBytes = 0; - return dec; - - - } - - - -TInt ProcTools::GetValueFromShuffledAWBFrameL(const HBufC8* aFrame, TInt aBitRate, TInt aBitPosition, TInt aLength) - { - - HBufC8* inBytes = HBufC8::NewLC(aLength); - - - _LIT8(KZero, "0"); - _LIT8(KOne, "1"); - - const TInt* table = 0; - TInt tableSize = 0; - - switch(aBitRate) - { - case(23850): - { - table = sort_2385; - tableSize = 477; - break; - } - case(23050): - { - table = sort_2305; - tableSize = 461; - break; - } - case(19850): - { - table = sort_1985; - tableSize = 397; - break; - } - case(18250): - { - table = sort_1825; - tableSize = 365; - break; - } - case(15850): - { - table = sort_1585; - tableSize = 317; - break; - } - case(14250): - { - table = sort_1425; - tableSize = 285; - break; - } - case(12650): - { - table = sort_1265; - tableSize = 253; - break; - } - case(8850): - { - table = sort_885; - tableSize = 177; - break; - } - case(6600): - { - table = sort_660; - tableSize = 132; - break; - } - default: - { - // illegal bitrate - CleanupStack::PopAndDestroy(inBytes); - return -1; - } - - } - - - for (TInt a = 0 ; a < aLength ; a++) - { - TInt bitIndex = FindIndex(aBitPosition+a, table, tableSize)+8; - - TUint8 mask = 0x80; // 1000 0000b - TUint byteNumber = bitIndex/8; - TUint bitNumber = bitIndex%8; - - const TUint8 byteNow = (*aFrame)[byteNumber]; - - mask >>= bitNumber; - - //TUint8 masked = byteNow & mask; - // why casting is needed, dunno? - - TUint8 masked = static_cast(byteNow & mask); - - if (masked == 0) - { - inBytes->Des().Append(KZero); - } - else - { - inBytes->Des().Append(KOne); - } - } - - TUint dec = 0; - Bin2Dec(inBytes->Des(), dec); - CleanupStack::PopAndDestroy(inBytes); - - inBytes = 0; - return dec; - - } - - -TBool ProcTools::SetValueToShuffledAWBFrame(TUint8 aNewValue, HBufC8* aFrame, - TInt aBitRate, TInt aBitPosition, TInt aLength) - { - - const TInt* table = 0; - TInt tableSize = 0; - - switch(aBitRate) - { - case(23850): - { - table = sort_2385; - tableSize = 477; - - break; - } - case(23050): - { - table = sort_2305; - tableSize = 461; - - break; - } - case(19850): - { - table = sort_1985; - tableSize = 397; - - break; - } - case(18250): - { - table = sort_1825; - tableSize = 365; - - break; - } - case(15850): - { - table = sort_1585; - tableSize = 317; - - break; - } - case(14250): - { - table = sort_1425; - tableSize = 285; - - break; - } - case(12650): - { - table = sort_1265; - tableSize = 253; - - break; - } - case(8850): - { - table = sort_885; - tableSize = 177; - - break; - } - case(6600): - { - table = sort_660; - tableSize = 132; - - break; - } - default: - { - // illegal bitrate - return -1; - } - - } - - - _LIT8(KZero, "0"); - - TBuf8<8> newValueBin; - Dec2Bin(aNewValue, newValueBin); - // remove leading zeros - newValueBin.Delete(0, 8-aLength); - - - - TPtr8 framePtr(aFrame->Des()); - - for (TInt a = 0 ; a < newValueBin.Size() ; a++) - { - - TInt bitIndex = FindIndex(aBitPosition+a, table, tableSize)+8; - - TUint8 bitPositionInByte = static_cast(bitIndex%8); - TUint byteNumber = bitIndex/8; - - if (newValueBin.Mid(a,1).Compare(KZero) == 0) - { - - TUint8 mask = 0x80; // 0111 1111b - mask >>= bitPositionInByte; - mask = static_cast(~mask); - - //---> -// TUint8 oldByte = framePtr[byteNumber]; - // TUint8 newByte = oldByte & mask; - //<-- - - framePtr[byteNumber] = static_cast(framePtr[byteNumber] & mask); - - } - else - { - - TUint8 mask = 0x80; // 1000 0000b - mask >>= bitPositionInByte; - - //---> -// TUint8 oldByte = framePtr[byteNumber]; -// TUint8 newByte = oldByte & mask; - //<-- - framePtr[byteNumber] = static_cast(framePtr[byteNumber] | mask); - - } - - } - - return EFalse; - } - -TBool ProcTools::SetValueToShuffledFrame(HBufC8* aFrame, TUint8 aNewValue, - const TUint8 aBitPositions[], - TInt aSize) - { - - - _LIT8(KZero, "0"); - - TBuf8<8> newValueBin; - Dec2Bin(aNewValue, newValueBin); - newValueBin.Delete(0, 8-aSize); - - TPtr8 framePtr(aFrame->Des()); - - for (TInt a = 0 ; a < aSize ; a++) - { - - TUint8 bitPosition = static_cast(aBitPositions[a]%8); - TUint byteNumber = aBitPositions[a]/8; - - if (newValueBin.Mid(a,1).Compare(KZero) == 0) - { - - TUint8 mask = 0x80; // 0111 1111b - mask >>= bitPosition; - mask = static_cast(~mask); - - //---> -// TUint8 oldByte = framePtr[byteNumber]; - // TUint8 newByte = oldByte & mask; - //<-- - - framePtr[byteNumber] = static_cast(framePtr[byteNumber] & mask); - - } - else - { - - TUint8 mask = 0x80; // 1000 0000b - mask >>= bitPosition; - - //---> -// TUint8 oldByte = framePtr[byteNumber]; -// TUint8 newByte = oldByte & mask; - //<-- - framePtr[byteNumber] = static_cast(framePtr[byteNumber] | mask); - - } - - - - } - - return ETrue; - - } - - - -TBool ProcTools::WriteValuesToFileL(const RArray& aArray, const TDesC& aFilename) - { - - RFs fs; - User::LeaveIfError(fs.Connect()); - - RFile file; - TInt err=file.Open(fs, aFilename, EFileWrite); - - if (err==KErrNotFound) - { - err=file.Create(fs, aFilename, EFileWrite); - } - TInt nolla = 0; - file.Seek(ESeekEnd, nolla); - for (TInt a = 0; a < aArray.Count() ; a++) - { - TBuf8<8> num; - num.AppendNum(aArray[a]); - file.Write(num); - file.Write(_L8("\n")); - - - } - - file.Close(); - fs.Close(); - - return ETrue; - } - - -TUint8 ProcTools::FindNewIndexSQ(TInt aNewGain, const TInt aGainTable[], TInt aTableSize) - { - - if (aTableSize > 256) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - TUint8 tableSize = static_cast(aTableSize-1); - - TInt minimum = 0xFFFF; - TUint8 indexFound = 0; - - for (TUint a = 0 ; a <= tableSize ; a++) - { - - if (Abs(aGainTable[a]-aNewGain) < minimum) - { - minimum = Abs(aGainTable[a]-aNewGain); - indexFound = static_cast(a); - } - } - - return indexFound; - - } - -TUint8 ProcTools::FindNewIndexVQ(TInt aNewGain, TInt aOldPitch, const TInt aGainTable[], TInt aTableSize) - { - - if (aTableSize > 256) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - TUint8 tableSize = static_cast(aTableSize-1); - - - - TInt minimum = KMaxTInt; - TUint8 indexFound = 0; - - for (TUint a = 0 ; a <= tableSize ; a+=2) - { - - // gpitch: Q14 , 2^14 = 16384 - TInt distance_pitch = (100*(Abs(aGainTable[a]-aOldPitch)))/16384; - - // g_fac: Q12 , 2^12 = 4096 - TInt distance_fc = (100*Abs(aGainTable[a+1]-aNewGain))/4096; - - - TInt distance = distance_pitch*distance_pitch + distance_fc*distance_fc; - - if (distance < minimum) - { - minimum = distance; - indexFound = static_cast(a); - } - } - - return static_cast(indexFound/2); - - } - -TUint8 ProcTools::FindNewIndexVQ2(TInt aNewGain, TInt aOldPitch, const TInt aGainTable[], TInt aTableSize) - { - - if (aTableSize > 256) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - TUint8 tableSize = static_cast(aTableSize-1); - - TInt minimum = KMaxTInt; - TUint8 indexFound = 0; - - for (TUint a = 0 ; a <= tableSize ; a+=2) - { - - // gpitch: Q14 , 2^14 = 16384 - TInt distance_pitch = (100*(Abs(aGainTable[a]-aOldPitch)))/16384; - - // g_fac: Q11 , 2^11 = 2048 - TInt distance_fc = (100*Abs(aGainTable[a+1]-aNewGain))/2048; - - - TInt distance = distance_pitch*distance_pitch + distance_fc*distance_fc; - - if (distance < minimum) - { - minimum = distance; - indexFound = static_cast(a); - } - } - - return static_cast(indexFound/2); - - - - - } - - -TUint8 ProcTools::FindNewIndex475VQ(TInt aNewGain0, TInt aOldPitch0, TInt aNewGain1, TInt aOldPitch1) - { - - TInt minimum = KMaxTInt; - TInt indexFound = -1; - - TInt tableSize = 256*4; - - - for (TInt a = 0 ; a < tableSize-3 ; a+=4) - { - - // gpitch: Q14 , 2^14 = 16384 - TInt distance_pitch0 = (100*(Abs(KAmrGainTable475[a]-aOldPitch0)))/16384; - TInt distance_pitch1 = (100*(Abs(KAmrGainTable475[a+2]-aOldPitch1)))/16384; - - // g_fac: Q12 , 2^12 = 4096 - TInt distance_fc0 = (100*Abs(KAmrGainTable475[a+1]-aNewGain0))/4096; - TInt distance_fc1 = (100*Abs(KAmrGainTable475[a+3]-aNewGain1))/4096; - - TInt distance = distance_pitch0*distance_pitch0 + distance_fc0*distance_fc0 + - distance_pitch1*distance_pitch1 + distance_fc1*distance_fc1; - - if (distance < minimum) - { - minimum = distance; - indexFound = a; - } - } - - return static_cast(indexFound/4); - - } - -TInt ProcTools::FindIndex(TInt aKey, const TInt aBitPositions[], TInt aTableLength) - { - - for (TInt a = 0 ; a < aTableLength ; a++) - { - if (aBitPositions[a] == aKey) return a; - } - - return -1; - - } - -TBool ProcTools::GenerateADTSHeaderL(TBuf8<7>& aHeader, TInt aFrameLength, TAudFileProperties aProperties) - { - TUint8 byte1 = 0xFF; - - TUint8 byte2 = 0x0; - if (aProperties.iAudioType == EAudAAC_MPEG2) - { - byte2 = 0xF9; - } - else if (aProperties.iAudioType == EAudAAC_MPEG4) - { - byte2 = 0xF1; - } - else return EFalse; - TBuf8<8> byte3b(8); - TBuf8<8> byte4b(8); - TBuf8<8> byte5b(8); - TBuf8<8> byte6b(8); - TBuf8<8> byte7b(8); - - byte3b.Fill('0'); - byte4b.Fill('0'); - byte5b.Fill('0'); - byte6b.Fill('0'); - byte7b.Fill('0'); - - - const TInt KAAC_SAMPLING_RATES[16] = {96000,88200,64000,48000,44100,32000,24000, - 22050,16000,12000,11025,8000,0,0,0,0}; - - TBool srFound = EFalse; - TUint8 srIndex = 0; - for (srIndex = 0 ; srIndex < 14 ; srIndex++) - { - if (KAAC_SAMPLING_RATES[srIndex] == aProperties.iSamplingRate) - { - srFound = ETrue; - break; - } - } - - if (srFound) - { - TBuf8<8> srB; - ProcTools::Dec2Bin(srIndex, srB); - - // Sampling rate - byte3b[2] = srB[4]; - byte3b[3] = srB[5]; - byte3b[4] = srB[6]; - byte3b[5] = srB[7]; - - } - - - - // private bit - byte3b[6] = '0'; - - // channel configuration - byte3b[7] = '0'; - if (aProperties.iChannelMode == EAudStereo) - { - byte4b[0] = '1'; - byte4b[1] = '0'; - - } - else if(aProperties.iChannelMode == EAudSingleChannel) - { - byte4b[0] = '0'; - byte4b[1] = '1'; - - } - else - { - return EFalse; - } - - //original/copy & home - byte4b[2] = '0'; - byte4b[3] = '0'; - // copyright identification & start - byte4b[4] = '0'; - byte4b[5] = '0'; - - HBufC8* lenBin = 0; - if (ProcTools::Dec2BinL(aFrameLength+7, lenBin)) - { - - TInt fromRight = 0; - for(TInt i = lenBin->Size()-1 ; i >= 0 ; i--) - { - if (fromRight < 3) - { - // byte7 - byte6b[2-fromRight] = lenBin->Des()[i]; - } - else if (fromRight < 11) - { - // byte6 - byte5b[10-fromRight] = lenBin->Des()[i]; - - } - else if (fromRight < 13) - { - // byte5 - byte4b[18-fromRight] = lenBin->Des()[i]; - } - - fromRight++; - } - - delete lenBin; - } - - TInt bitInd = 0; - for (bitInd = 3 ; bitInd < 8 ; bitInd++) - { - byte6b[bitInd] = '1'; - } - for (bitInd = 0 ; bitInd < 6 ; bitInd++) - { - byte7b[bitInd] = '1'; - } - - - aHeader.Append(byte1); - aHeader.Append(byte2); - - TUint tmpByte = 0; - ProcTools::Bin2Dec(byte3b, tmpByte); - - // profile - TUint8 bitMask = aProperties.iAACObjectType; - bitMask <<= 6; - tmpByte = tmpByte | bitMask; - - aHeader.Append(static_cast(tmpByte)); - - ProcTools::Bin2Dec(byte4b, tmpByte); - aHeader.Append(static_cast(tmpByte)); - - ProcTools::Bin2Dec(byte5b, tmpByte); - aHeader.Append(static_cast(tmpByte)); - - ProcTools::Bin2Dec(byte6b, tmpByte); - aHeader.Append(static_cast(tmpByte)); - - ProcTools::Bin2Dec(byte7b, tmpByte); - aHeader.Append(static_cast(tmpByte)); - - return ETrue; - - } - -TInt ProcTools::GetNextAMRFrameLength(const HBufC8* aFrame, TInt aPosNow) - { - - - if (aPosNow >= aFrame->Size()) return -1; - - - const TUint8 ch = (*aFrame)[aPosNow]; - - TUint dec_mode = (enum Mode)((ch & 0x0078) >> 3); - - switch (dec_mode) - { - case 0: - { - return 12+1; - } - - case 1: - { - return 13+1; - } - - case 2: - { - return 15+1; - } - - case 3: - { - return 17+1; - } - - case 4: - { - return 19+1; - } - - case 5: - { - return 20+1; - } - - case 6: - { - return 26+1; - } - - case 7: - { - return 31+1; - } - - case 8: - { - return 5+1; - } - - case 15: - { - return 0+1; - } - - default: - return 0+1; - - }; - - - } - - -CProcessingEvent* CProcessingEvent::NewL() - { - CProcessingEvent* self = new (ELeave) CProcessingEvent(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - } - -void CProcessingEvent::ConstructL() - { - } - -CProcessingEvent::~CProcessingEvent() - { - iAllIndexes.Close(); - } - - -CProcessingEvent::CProcessingEvent() - { - } - -void CProcessingEvent::InsertIndex(TInt aIndex) - { - iAllIndexes.Append(aIndex); - } - -TInt CProcessingEvent::GetIndex(TInt aProcessingEventIndex) - { - return iAllIndexes[aProcessingEventIndex]; - } - -TBool CProcessingEvent::GetAllIndexes(RArray& aAllIndexes) - { - for (TInt a = 0 ; a < iAllIndexes.Count() ; a++) - { - aAllIndexes.Append(iAllIndexes[a]); - - } - return ETrue; - } - -TInt CProcessingEvent::IndexCount() - { - return iAllIndexes.Count(); - } - -TInt CProcessingEvent::FindIndex(TInt aClipIndex) - { - return iAllIndexes.Find(aClipIndex); - } - -void CProcessingEvent::RemoveIndex(TInt aProcessingEventIndex) - { - iAllIndexes.Remove(aProcessingEventIndex); - } - - -TInt CProcessingEvent::Compare(const CProcessingEvent& c1, const CProcessingEvent& c2) - { - - if (c1.iPosition > c2.iPosition) - { - return 1; - } - else if (c1.iPosition < c2.iPosition) - { - return -1; - } - else - { - return 0; - } - } - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/ProcVisProcessor.cpp --- a/videoeditorengine/audioeditorengine/src/ProcVisProcessor.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,464 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "ProcVisProcessor.h" -#include "audconstants.h" - -#include "ProcMP4InFileHandler.h" -#include "ProcADTSInFileHandler.h" -#include "ProcMP3InFileHandler.h" -#include "ProcAWBInFileHandler.h" -#include "ProcWAVInFileHandler.h" -#include "ProcAMRInFileHandler.h" - - -#include "ProcAMRFrameHandler.h" -#include "ProcAACFrameHandler.h" -#include "ProcMP3FrameHandler.h" -#include "ProcAWBFrameHandler.h" -#include "ProcWAVFrameHandler.h" - -CProcVisProcessor* CProcVisProcessor::NewL() - { - - - CProcVisProcessor* self = new (ELeave) CProcVisProcessor(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CProcVisProcessor* CProcVisProcessor::NewLC() - { - CProcVisProcessor* self = new (ELeave) CProcVisProcessor(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - - -CProcVisProcessor::~CProcVisProcessor() - { - - if (iVisualization != 0) - { - delete[] iVisualization; - } - if (iInFile != 0) - { - delete iInFile; - } - if (iFrameHandler != 0) - { - delete iFrameHandler; - } - - } - -void CProcVisProcessor::VisualizeClipL(const CAudClipInfo* aClipInfo, TInt aSize) - { - - // initialize... - iClipInfo = aClipInfo; - iVisualizationSize = aSize; - iVisualization = new (ELeave) TInt8[iVisualizationSize]; - - - if (aClipInfo->Properties().iFileFormat == EAudFormatAMR) - { - CProcInFileHandler* inFileHandler = CProcAMRInFileHandler::NewL(aClipInfo->FileName(), - aClipInfo->FileHandle(), - 0, 2048); - iInFile = inFileHandler; - iFrameHandler = CProcAMRFrameHandler::NewL(); - TAudFileProperties properties; - inFileHandler->GetPropertiesL(&properties); - inFileHandler->SetPropertiesL(properties); - iFrameAmount = properties.iFrameCount; - inFileHandler->SeekAudioFrame(0); - } - else if (aClipInfo->Properties().iFileFormat == EAudFormatAMRWB) - { - CProcInFileHandler* inFileHandler = CProcAWBInFileHandler::NewL(aClipInfo->FileName(), - aClipInfo->FileHandle(), - 0, 2048); - iInFile = inFileHandler; - iFrameHandler = CProcAWBFrameHandler::NewL(); - TAudFileProperties properties; - inFileHandler->GetPropertiesL(&properties); - inFileHandler->SetPropertiesL(properties); - iFrameAmount = properties.iFrameCount; - inFileHandler->SeekAudioFrame(0); - } - else if (aClipInfo->Properties().iFileFormat == EAudFormatMP3) - { - CProcInFileHandler* inFileHandler = CProcMP3InFileHandler::NewL(aClipInfo->FileName(), - aClipInfo->FileHandle(), - 0, 2048); - iInFile = inFileHandler; - iFrameHandler = CProcMP3FrameHandler::NewL(); - TAudFileProperties properties; - inFileHandler->GetPropertiesL(&properties); - inFileHandler->SetPropertiesL(properties); - iFrameAmount = properties.iFrameCount; - inFileHandler->SeekAudioFrame(0); - } - else if (aClipInfo->Properties().iFileFormat == EAudFormatWAV) - { - CProcInFileHandler* inFileHandler = CProcWAVInFileHandler::NewL(aClipInfo->FileName(), - aClipInfo->FileHandle(), - 0, 8192); - iInFile = inFileHandler; - TAudFileProperties properties; - inFileHandler->GetPropertiesL(&properties); - inFileHandler->SetPropertiesL(properties); - iFrameAmount = properties.iFrameCount; - inFileHandler->SeekAudioFrame(0); - iFrameHandler = CProcWAVFrameHandler::NewL(properties.iNumberOfBitsPerSample); - } - - - else if (aClipInfo->Properties().iFileFormat == EAudFormatMP4 && - aClipInfo->Properties().iAudioType == EAudAAC_MPEG4) - { - - CProcInFileHandler* inFileHandler = CProcMP4InFileHandler::NewL(aClipInfo->FileName(), - aClipInfo->FileHandle(), - 0, 8192); - - iInFile = inFileHandler; - TAudFileProperties properties; - - inFileHandler->GetPropertiesL(&properties); - - inFileHandler->SetPropertiesL(properties); - //inFileHandler->SetPropertiesL(properties); - iFrameAmount = properties.iFrameCount; - inFileHandler->SeekAudioFrame(0); - - TAACFrameHandlerInfo frameInfo; - CProcMP4InFileHandler* MP4inFileHandler = static_cast(inFileHandler); - MP4inFileHandler->GetInfoForFrameHandler(frameInfo); - - iFrameHandler = CProcAACFrameHandler::NewL(frameInfo); - - } - else if (aClipInfo->Properties().iFileFormat == EAudFormatMP4 && - (aClipInfo->Properties().iAudioType == EAudAMR)) - { - - CProcInFileHandler* inFileHandler = CProcMP4InFileHandler::NewL(aClipInfo->FileName(), - aClipInfo->FileHandle(), - 0, 8092); - - iInFile = inFileHandler; - TAudFileProperties properties; - - inFileHandler->GetPropertiesL(&properties); - - inFileHandler->SetPropertiesL(properties); - //inFileHandler->SetPropertiesL(properties); - iFrameAmount = properties.iFrameCount; - inFileHandler->SeekAudioFrame(0); - - iFrameHandler = CProcAMRFrameHandler::NewL(); - - } - else if (aClipInfo->Properties().iFileFormat == EAudFormatMP4 && - (aClipInfo->Properties().iAudioType == EAudAMRWB)) - { - - CProcInFileHandler* inFileHandler = CProcMP4InFileHandler::NewL(aClipInfo->FileName(), - aClipInfo->FileHandle(), - 0, 8092); - - iInFile = inFileHandler; - TAudFileProperties properties; - - inFileHandler->GetPropertiesL(&properties); - - inFileHandler->SetPropertiesL(properties); - //inFileHandler->SetPropertiesL(properties); - iFrameAmount = properties.iFrameCount; - inFileHandler->SeekAudioFrame(0); - - iFrameHandler = CProcAWBFrameHandler::NewL(); - - } - else if (aClipInfo->Properties().iFileFormat == EAudFormatAAC_ADTS && - aClipInfo->Properties().iAudioType == EAudAAC_MPEG4 - ) - { - - CProcInFileHandler* inFileHandler = CProcADTSInFileHandler::NewL(aClipInfo->FileName(), - aClipInfo->FileHandle(), - 0, 8092); - - - - iInFile = inFileHandler; - TAudFileProperties properties; - - inFileHandler->GetPropertiesL(&properties); - - inFileHandler->SetPropertiesL(properties); - iFrameAmount = properties.iFrameCount; - inFileHandler->SeekAudioFrame(0); - - TAACFrameHandlerInfo frameInfo; - CProcADTSInFileHandler* ADTSinFileHandler = static_cast(inFileHandler); - ADTSinFileHandler->GetInfoForFrameHandler(frameInfo); - - iFrameHandler = CProcAACFrameHandler::NewL(frameInfo); - - } - - - } - -TBool CProcVisProcessor::VisualizeClipPieceL(TInt &aProgress) - { - - if (iInFile == 0) - return ETrue; - - if (iVisualizationPos >= iVisualizationSize) - { - if (iInFile != 0) - { - delete iInFile; - iInFile = 0; - } - - if (iFrameHandler != 0) - { - delete iFrameHandler; - iFrameHandler = 0; - } - return ETrue; - } - - HBufC8* point = 0; - TInt siz; - TInt32 tim = 0; - - RArray gains; - - TAudType audType = iClipInfo->Properties().iAudioType; - - - TInt maxGain = 0; - TInt gainAmount = 0; - TInt divider = 0; - for (TInt b = 0 ; b < 2 ; b++) - { - gains.Reset(); - - - TBool decReq = iInFile->DecodingRequired(); - iInFile->SetDecodingRequired(EFalse); - TBool tmp = EFalse; - - if (!iInFile->GetAudioFrameL(point, siz, tim, tmp)) - { - iInFile->SetDecodingRequired(decReq); - - delete iInFile; - iInFile = 0; - delete iFrameHandler; - iFrameHandler = 0; - return ETrue; - - } - iInFile->SetDecodingRequired(decReq); - CleanupStack::PushL(point); - - iFramesProcessed++; - if (siz > 0) - { - - - iFrameHandler->GetGainL(point, gains, maxGain); - - if (point != NULL) - { - CleanupStack::PopAndDestroy(point); - } - - - if (audType == EAudAMR || audType == EAudAMRWB) - { - - for (TInt c = 0 ; c < gains.Count() ; c++) - { - if (gains[c] > gainAmount) - { - gainAmount = gains[c]; - } - - //gainAmount+=gains[c]; - } - } - else if (audType == EAudAAC_MPEG4) - { - for (TInt c = 0 ; c < gains.Count() ; c++) - { - if (gains[c] > gainAmount) - { - gainAmount = gains[c]; - } - - //gainAmount+=gains[c]; - } - } - else if (audType == EAudMP3) - { - for (TInt c = 0 ; c < gains.Count() ; c++) - { - - gainAmount+=gains[c]; - divider++; - } - //gainAmount /= gains.Count(); - } - else if (audType == EAudWAV) - { - for (TInt c = 0 ; c < gains.Count() ; c++) - { - - gainAmount+=gains[c]; - divider++; - } - //gainAmount /= gains.Count(); - } - - } - - else - { - CleanupStack::PopAndDestroy(point); - // silent frame - gains.Append(0); - gains.Append(0); - maxGain = 1; - } - } - - - if (audType == EAudMP3 && divider > 0) gainAmount/= divider; - if (audType == EAudWAV && divider > 0) gainAmount/= divider; - - - - iVisualizationProcessed = (iFramesProcessed*KAedMaxVisualizationResolution)/iFrameAmount; - - - while (iVisualizationWritten <= iVisualizationProcessed) - { - if (iVisualizationPos >= iVisualizationSize) - { - break; - } - - if (audType == EAudAAC_MPEG4) - { - - TReal ga(gainAmount-100); - TReal exponent= ga/36; - TReal visResult(0); - Math::Pow(visResult, 10, exponent); - - TInt16 visR = 0; - TInt err = Math::Int(visR, visResult); - - if (visR > 127) visR = 127; - - if (err == KErrNone) - { - iVisualization[iVisualizationPos] = static_cast(visR); - } - else - { - iVisualization[iVisualizationPos] = 0; - - } - - } - else - { - TInt visValue = (127*gainAmount)/maxGain; - - if (visValue < 0) - { - visValue = 0; - } - else if (visValue > KMaxTInt8) - { - visValue = KMaxTInt8; - } - - iVisualization[iVisualizationPos] = static_cast(visValue); - } - iVisualizationPos++; - iVisualizationWritten = (KAedMaxVisualizationResolution*iVisualizationPos)/iVisualizationSize; - } - - - gains.Reset(); - aProgress = iVisualizationWritten/(KAedMaxVisualizationResolution/100); // convert resolution to percentages - return EFalse; - - - } - -void CProcVisProcessor::GetFinalVisualizationL(TInt8*& aVisualization, TInt& aSize) - { - - if (iVisualization == 0) - { - User::Leave(KErrNotReady); - } - - aVisualization = new (ELeave) TInt8[iVisualizationSize]; - - for (TInt a = 0 ; a < iVisualizationSize ; a++) - { - aVisualization[a] = iVisualization[a]; - } - aSize = iVisualizationSize; - - delete[] iVisualization; - iVisualization = 0; - - } - - -void CProcVisProcessor::ConstructL() - { - - } - -CProcVisProcessor::CProcVisProcessor() - { - - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/ProcVisualizationAO.cpp --- a/videoeditorengine/audioeditorengine/src/ProcVisualizationAO.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,203 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "ProcVisualizationAO.h" -#include "ProcVisProcessor.h" -#include "AudPanic.h" - - -void CProcVisualizationAO::RunL() - { - __ASSERT_DEBUG(iProcVisProcessor != 0, TAudPanic::Panic(TAudPanic::EInternal)); - __ASSERT_DEBUG(iObserver != 0, TAudPanic::Panic(TAudPanic::EInternal)); - - if(iVisualizationState == EProcVisualizationIdle) - { - TAudPanic::Panic(TAudPanic::EInternal); - } - - else if (iVisualizationState == EProcGettingClipVisualization) - { - - TBool completed = EFalse; - TInt progress = 0; - TRAPD(err, completed = iProcVisProcessor->VisualizeClipPieceL(progress)); - - if (err != KErrNone) - { - delete iProcVisProcessor; - iProcVisProcessor = 0; - - MAudVisualizationObserver* observer = iObserver; - iObserver = 0; - iSize = 0; - iVisualizationState = EProcVisualizationIdle; - observer->NotifyClipInfoVisualizationCompleted(*iClipInfo, err, NULL, 0); - } - else if (completed) - { - TInt8* visualization = 0; - TInt size = 0; - TRAPD(err2, iProcVisProcessor->GetFinalVisualizationL(visualization, size)); - - if (err2 != KErrNone) - { - MAudVisualizationObserver* observer = iObserver; - iObserver = 0; - - if (visualization != 0) delete[] visualization; - delete iProcVisProcessor; - iProcVisProcessor = 0; - iVisualizationState = EProcVisualizationIdle; - - observer->NotifyClipInfoVisualizationCompleted(*iClipInfo, err2, 0, 0); - return; - } - - delete iProcVisProcessor; - iProcVisProcessor = 0; - - MAudVisualizationObserver* observer = iObserver; - iObserver = 0; - iSize = 0; - iVisualizationState = EProcVisualizationIdle; - - // NOTE: the upper level application is responsible for releasing "visualization" - observer->NotifyClipInfoVisualizationCompleted(*iClipInfo, KErrNone, visualization, size); - } - else - { - - // progress is sent every 1 percent - if (iPreviousProgressValue < progress) - { - iObserver->NotifyClipInfoVisualizationProgressed(*iClipInfo, progress); - iPreviousProgressValue = progress; - } - - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - } - - } - } - -void CProcVisualizationAO::DoCancel() - { - - // ref to observer should be reset before callback to avoid recursion - MAudVisualizationObserver* observer = iObserver; - iObserver = 0; - // ref to clipInfo is good to reset before callback - const CAudClipInfo* clipInfo = iClipInfo; - iClipInfo = 0; - // processor not needed and should not exist any more; a new processor will be created for next visualization - delete iProcVisProcessor; - iProcVisProcessor = 0; - - if ((observer != 0) && (iVisualizationState == EProcGettingClipVisualization)) - { - // reset state - iVisualizationState = EProcVisualizationIdle; - - // note! this callback at least at the time of writing deletes this object => no operations should be done after this call - observer->NotifyClipInfoVisualizationCompleted(*clipInfo, KErrCancel, 0, 0); - } - } - -CProcVisualizationAO* CProcVisualizationAO::NewL() - { - CProcVisualizationAO* self = new (ELeave) CProcVisualizationAO(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CProcVisualizationAO::~CProcVisualizationAO() - { - // cancel the active object; it also deletes or resets member variables - Cancel(); - } - - -void CProcVisualizationAO::ConstructL() - { - // nothing to do; iProcVisProcessor will be created when started - } - -CProcVisualizationAO::CProcVisualizationAO() : - CActive(0), - iVisualizationState(EProcVisualizationIdle) - { - - CActiveScheduler::Add(this); - - } - -void CProcVisualizationAO::StartClipVisualizationL(const CAudClipInfo* aClipInfo, TInt aSize, - MAudVisualizationObserver& aObserver, - TInt aPriority) - { - - if (iVisualizationState != EProcVisualizationIdle || iClipInfo != 0) - { - TAudPanic::Panic(TAudPanic::EVisualizationProcessAlreadyRunning); - } - - iSize = aSize; - iClipInfo = aClipInfo; - iProcVisProcessor = CProcVisProcessor::NewL(); - - iPreviousProgressValue = 0; - - - TRAPD(err, iProcVisProcessor->VisualizeClipL(aClipInfo, aSize)); - - if (err != KErrNone) - { - delete iProcVisProcessor; - iProcVisProcessor = 0; - aObserver.NotifyClipInfoVisualizationCompleted(*aClipInfo, err, 0, 0); - User::Leave(err); - } - - aObserver.NotifyClipInfoVisualizationStarted(*aClipInfo, KErrNone); - - iObserver = &aObserver; - - SetPriority(aPriority); - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - - iVisualizationState = EProcGettingClipVisualization; - - } - - - - -void CProcVisualizationAO::CancelVisualization() - { - Cancel(); - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/src/RateConverter.cpp --- a/videoeditorengine/audioeditorengine/src/RateConverter.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,503 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "RateConverter.h" - - -// CONSTANTS - - - -// MACROS - -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -// ----------------------------------------------------------------------------- -// CRateConverter::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CRateConverter* CRateConverter::NewL(TInt aFromSampleRate, TInt aToSampleRate, TInt aFromChannels, TInt aToChannels) - { - CRateConverter* self = NewLC(aFromSampleRate, aToSampleRate, aFromChannels, aToChannels); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CRateConverter::NewLC -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CRateConverter* CRateConverter::NewLC(TInt aFromSampleRate, TInt aToSampleRate, TInt aFromChannels, TInt aToChannels) - { - CRateConverter* self = new (ELeave) CRateConverter(aFromSampleRate, aToSampleRate, aFromChannels, aToChannels); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CRateConverter::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CRateConverter::ConstructL() - { - } - -// ----------------------------------------------------------------------------- -// CRateConverter::CRateConverter -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CRateConverter::CRateConverter(TInt aFromSampleRate, TInt aToSampleRate, TInt aFromChannels, TInt aToChannels) - : iFromSampleRate(aFromSampleRate), iToSampleRate(aToSampleRate), - iFromChannels(aFromChannels), iToChannels(aToChannels) - { - // Select the smaller of the two - iChannels = (iFromChannels < iToChannels) ? iFromChannels : iToChannels; - } - -// --------------------------------------------------------- -// CRateConverter::~CRateConverter -// Destructor -// --------------------------------------------------------- -// -CRateConverter::~CRateConverter() - { - if (iChild) - { - delete iChild; - iChild = NULL; - } - - if (iConverter) - { - delete iConverter; - iConverter = NULL; - } - - if (iInBuffer) - { - for (TInt i = 0; (i < iChannels) && iInBuffer[i]; i++) - { - User::Free(iInBuffer[i]); - iInBuffer[i] = NULL; - } - User::Free(iInBuffer); - iInBuffer = NULL; - } - - if (iOutBuffer) - { - for (TInt i = 0; (i < iChannels) && iOutBuffer[i]; i++) - { - User::Free(iOutBuffer[i]); - iOutBuffer[i] = NULL; - } - User::Free(iOutBuffer); - iOutBuffer = NULL; - } - - if (iScratchBuffer) - { - User::Free(iScratchBuffer); - iScratchBuffer = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CRateConverter::InitL -// Initialize the rate converter -// ----------------------------------------------------------------------------- -// -TBool CRateConverter::InitL(TInt aInputBufferSize) - { - PRINT((_L("CRateConverter::InitL() In"))); - - if (iConverter) - { - PRINT((_L("CRateConverter::InitL() Already initialized"))); - return EFalse; - } - - // Check that the input and output are either mono or stereo - if ( ((iFromChannels != 1) && (iFromChannels != 2)) || - ((iToChannels != 1) && (iToChannels != 2)) ) - { - PRINT((_L("CRateConverter::InitL() Only mono and stereo are supported for input/output"))); - return EFalse; - } - - if (iFromSampleRate == iToSampleRate) - { - // No sample rate conversion needed so do only channel conversion - iInputBlockSize = iOuputBlockSize = aInputBufferSize; - - PRINT((_L("CRateConverter::InitL() Out"))); - return ETrue; - } - - if (!DoInitL(aInputBufferSize)) - { - return EFalse; - } - - // Allocate internal input buffer - iInBuffer = (TInt16**) User::AllocL(iChannels * sizeof(TInt16*)); - - for (TInt i = 0; i < iChannels; i++) - { - iInBuffer[i] = (TInt16*) User::AllocL(iInputBlockSize * sizeof(TInt16)); - } - - PRINT((_L("CRateConverter::InitL() Out"))); - return ETrue; - } - -// ----------------------------------------------------------------------------- -// CRateConverter::DoInitL -// Does internal initialization -// ----------------------------------------------------------------------------- -// -TBool CRateConverter::DoInitL(TInt aInputBufferSize) - { - iInputBlockSize = aInputBufferSize; - - // Supported direct conversions: - // - // 16000 -> 8000: /2 - // 24000 -> 8000: /3 - // - // 8000 -> 16000: *2 - // 32000 -> 16000: /2 - // 48000 -> 16000: /3 - // - // 16000 -> 48000: *3 - // 24000 -> 48000: *2 - // 32000 -> 48000: *3/2 - // 44100 -> 48000: *i - - // Try to use direct conversion - iConverter = RESAMPLER_RateConversionInputDrivenInt16::New(iFromSampleRate, iToSampleRate, iChannels); - - if (!iConverter) - { - // Direct conversion is not possible so multi phase conversion is needed - - // Conversions are done in the following order: - // (*i means 160/147 conversion) - // - // 11025 -> 8000: *i *2 /3 (three phase) - // 22050 -> 8000: *i /3 (two phase) - // 32000 -> 8000: /2 /2 (two phase) - // 44100 -> 8000: *i /3 /2 (three phase) - // 48000 -> 8000: /3 /2 (two phase) - // - // 11025 -> 16000: *2 *2 *i /3 (four phase) - // 22050 -> 16000: *2 *i /3 (three phase) - // 24000 -> 16000: *2 /3 (two phase) - // 44100 -> 16000: *i /3 (two phase) - // - // 8000 -> 48000: *3 *2 (two phase) - // 11025 -> 48000: *2 *2 *i (three phase) - // 22050 -> 48000: *2 *i (two phase) - - // Check the last phase in the chain and make the decision where the child should convert - if( ((iToSampleRate == 8000) && ((iFromSampleRate == 11025) || (iFromSampleRate == 22050))) || - (iToSampleRate == 16000) ) - { - // Last phase is /3 so the child converter needs to do - // conversion from iFromSampleRate to iToSampleRate*3 - - // Create the child converter - iChild = CRateConverter::NewL(iFromSampleRate, iToSampleRate * 3, iChannels, iChannels); - if (!iChild->DoInitL(aInputBufferSize)) - { - return EFalse; - } - - // Update sample rates and buffer sizes - iFromSampleRate = iToSampleRate * 3; - aInputBufferSize = iChild->GetOutputBufferSize(); - - // Try to create our converter - iConverter = RESAMPLER_RateConversionInputDrivenInt16::New(iFromSampleRate, iToSampleRate, iChannels); - if (!iConverter) - { - return EFalse; - } - } - else if( (iToSampleRate == 8000) ) - { - // Last phase is /2 so the child converter needs to do - // conversion from iFromSampleRate to iToSampleRate*2 - - // Create the child converter - iChild = CRateConverter::NewL(iFromSampleRate, iToSampleRate * 2, iChannels, iChannels); - if (!iChild->DoInitL(aInputBufferSize)) - { - return EFalse; - } - - // Update sample rates and buffer sizes - iFromSampleRate = iToSampleRate * 2; - aInputBufferSize = iChild->GetOutputBufferSize(); - - // Try to create our converter - iConverter = RESAMPLER_RateConversionInputDrivenInt16::New(iFromSampleRate, iToSampleRate, iChannels); - if (!iConverter) - { - return EFalse; - } - } - else if( ((iToSampleRate == 48000) && ((iFromSampleRate == 11025) || (iFromSampleRate == 22050))) ) - { - // Last phase is *i so the child converter needs to do - // conversion from iFromSampleRate to 44100 - - // Create the child converter - iChild = CRateConverter::NewL(iFromSampleRate, 44100, iChannels, iChannels); - if (!iChild->DoInitL(aInputBufferSize)) - { - return EFalse; - } - - // Update sample rates and buffer sizes - iFromSampleRate = 44100; - aInputBufferSize = iChild->GetOutputBufferSize(); - - // Try to create our converter - iConverter = RESAMPLER_RateConversionInputDrivenInt16::New(iFromSampleRate, iToSampleRate, iChannels); - if (!iConverter) - { - return EFalse; - } - } - else if( ((iFromSampleRate == 11025) && ((iToSampleRate == 24000) || (iToSampleRate == 44100))) || - ((iFromSampleRate == 8000) && (iToSampleRate == 48000)) ) - { - // Last phase is *2 so the child converter needs to do - // conversion from iFromSampleRate to iToSampleRate/2 - - // Create the child converter - iChild = CRateConverter::NewL(iFromSampleRate, iToSampleRate / 2, iChannels, iChannels); - if (!iChild->DoInitL(aInputBufferSize)) - { - return EFalse; - } - - // Update sample rates and buffer sizes - iFromSampleRate = iToSampleRate / 2; - aInputBufferSize = iChild->GetOutputBufferSize(); - - // Try to create our converter - iConverter = RESAMPLER_RateConversionInputDrivenInt16::New(iFromSampleRate, iToSampleRate, iChannels); - if (!iConverter) - { - return EFalse; - } - } - else - { - // We don't know how to convert, probably this is an unsupported conversion - PRINT((_L("CRateConverter::DoInitL() Can not convert from %d to %d"), iFromSampleRate, iToSampleRate)); - return EFalse; - } - } - - if (!iConverter->InitInputDriven()) - { - PRINT((_L("CRateConverter::InitL() Failed to initialize converter"))); - return EFalse; - } - - // Set scratch memory buffer for converter - size_t scratchBufferSize = iConverter->ScratchMemoryNeedInputDriven(aInputBufferSize); - - if (scratchBufferSize == 0) - { - PRINT((_L("CRateConverter::InitL() Scratch buffer size is too big"))); - return EFalse; - } - - iScratchBuffer = (TInt8*) User::AllocL(scratchBufferSize); - iConverter->SetScratchBufferInputDriven((char *)iScratchBuffer); - - iOuputBlockSize = iConverter->MaxOutputSampleCount(aInputBufferSize); - - // Allocate internal output buffer - iOutBuffer = (TInt16**) User::AllocL(iChannels * sizeof(TInt16*)); - - for (TInt i = 0; i < iChannels; i++) - { - iOutBuffer[i] = (TInt16*) User::AllocL(iOuputBlockSize * sizeof(TInt16)); - } - - iConverter->SetQualityInputDriven(RESAMPLER_RATE_CONVERSION_QUALITY_STANDARD); - - PRINT((_L("CRateConverter::DoInitL() Convert %d -> %d Hz, %d -> %d channels"), iFromSampleRate, iToSampleRate, iFromChannels, iToChannels)); - - PRINT((_L("CRateConverter::DoInitL() Input buffer %d, Output buffer %d"), iInputBlockSize, iOuputBlockSize)); - - return ETrue; - } - -// ----------------------------------------------------------------------------- -// CRateConverter::ConvertBufferL -// Does rate and channel conversion for given buffer -// ----------------------------------------------------------------------------- -// -TInt CRateConverter::ConvertBufferL(TInt16* aInput, TInt16* aOutput, TInt aInputSampleCount) - { - if (iFromSampleRate == iToSampleRate) - { - // No sample rate conversion needed - if (iFromChannels == iToChannels) - { - // No channel conversion needed either so copy input directly to output - Mem::Copy(aOutput, aInput, aInputSampleCount * 2 * iFromChannels); - } - else if (iFromChannels == 2) - { - // Convert stereo to mono - for (TInt i = 0; i < aInputSampleCount; ++i) - { - // Average left and right samples - aOutput[i] = (aInput[2*i + 0] + aInput[2*i + 1]) >> 1; - } - } - else if (iToChannels == 2) - { - // Convert mono to stereo - for (TInt i = 0; i < aInputSampleCount; ++i) - { - // Duplicate left channel to right channel - aOutput[2*i + 0] = aInput[i]; - aOutput[2*i + 1] = aInput[i]; - } - } - - return aInputSampleCount; - } - - if (!iConverter) - { - PRINT((_L("CRateConverter::ConvertBufferL() Not initialized"))); - User::Leave(KErrNotReady); - } - - if (aInputSampleCount > iInputBlockSize) - { - PRINT((_L("CRateConverter::ConvertBufferL() Too many input samples"))); - User::Leave(KErrArgument); - } - - // Copy to input buffers and do channel conversion if needed - if (iChannels == 2) - { - // Both channels are stereo so copy both channels to own buffers - for (TInt i = 0; i < aInputSampleCount; ++i) - { - iInBuffer[0][i] = aInput[2*i + 0]; - iInBuffer[1][i] = aInput[2*i + 1]; - } - } - else if (iFromChannels == 2) - { - // Source is stereo so convert stereo to mono - for (TInt i = 0; i < aInputSampleCount; ++i) - { - // Average left and right samples - iInBuffer[0][i] = (aInput[2*i + 0] + aInput[2*i + 1]) >> 1; - } - } - else - { - // Source is mono so copy it directly - Mem::Copy(iInBuffer[0], aInput, aInputSampleCount * 2); - } - - TInt outputSampleCount = DoConvertL(iInBuffer, aInputSampleCount); - - // Copy to output buffers and do channel conversion if needed - if (iChannels == 2) - { - // Both channels are stereo so copy both channels to own buffers - for (TInt i = 0; i < outputSampleCount; ++i) - { - aOutput[2*i + 0] = iOutBuffer[0][i]; - aOutput[2*i + 1] = iOutBuffer[1][i]; - } - } - else if (iToChannels == 2) - { - // Ouput is stereo so convert mono to stereo - for (TInt i = 0; i < outputSampleCount; ++i) - { - // Duplicate left channel to right channel - aOutput[2*i + 0] = iOutBuffer[0][i]; - aOutput[2*i + 1] = iOutBuffer[0][i]; - } - } - else - { - // Output is mono so copy it directly - Mem::Copy(aOutput, iOutBuffer[0], outputSampleCount * 2); - } - - PRINT((_L("CRateConverter::ConvertBufferL() Output %d samples"), outputSampleCount)); - - return outputSampleCount; - } - -// ----------------------------------------------------------------------------- -// CRateConverter::DoConvertL -// Does the actual conversion -// ----------------------------------------------------------------------------- -// -TInt CRateConverter::DoConvertL(TInt16** aInput, TInt aInputSampleCount) - { - if (iChild) - { - // If we have a child then we need to do a multi phase conversion - TInt tempSampleCount = iChild->DoConvertL(aInput, aInputSampleCount); - - // Get pointer to child's output and use it as an input - TInt16** tempBuf = iChild->GetOutputBuffer(); - - return iConverter->ProcessFromInput(iOutBuffer, tempBuf, tempSampleCount); - } - else - { - // Otherwise process directly from input to output - return iConverter->ProcessFromInput(iOutBuffer, aInput, aInputSampleCount); - } - } - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/util/inc/Logfile.h --- a/videoeditorengine/audioeditorengine/util/inc/Logfile.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,277 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __LOGFILE_H__ -#define __LOGFILE_H__ - -#include -#include - -class CCnvCharacterSetConverter; - -// Link with the following libraries: EFSRV.LIB HAL.LIB CHARCONV.LIB - -/*! - @class CLogFile - - @discussion Class to generate a text file containing logging information - */ -class CLogFile : public CBase - { -public: -/*! - @function NewL - - @discussion Create a CLogFile object - @param aFileName the name of the file to create - @param aInitialiseLog if true, and the log file already exists, previous - contents will be deleted. If false, append to any existing contents - @result a pointer to the created instance of CLogFile - */ - static CLogFile* NewL(const TDesC& aFileName, TBool aInitialiseLog); - -/*! - @function NewLC - - @discussion Create a CLogFile object - @param aFileName the name of the file to create - @param aInitialiseLog if true, and the log file already exists, previous - contents will be deleted. If false, append to any existing contents - @result a pointer to the created instance of CLogFile - */ - static CLogFile* NewLC(const TDesC& aFileName, TBool aInitialiseLog); - -/*! - @function ~CLogFile - - @discussion Destroy the object and release all memory objects - */ - ~CLogFile(); - -/*! - @function Log - - @discussion Append the byte to the log file (if not a printable char, it will be logged as ascii-hex) - @param aByte the byte to log - */ - void Log(TUint8 aByte); - -/*! - @function Log - - @discussion Append the integer to the log file (logged as ascii-hex) - @param aNumber the integer to log - */ - void Log(TUint aNumber); - -/*! - @function Log - - @discussion Append text to the log file - @param aText the text to log - */ - void Log(const TDesC8& aText); - -/*! - @function Log - - @discussion Append text to the log file - @param aText the text to log - */ - void Log(const TDesC& aText); - -/*! - @function LogTime - - @discussion Append a timestamp to the log file. - Timestamps are in seconds with three decimal places (but resolution is limited to system timer tick period) - */ - void LogTime(); - -/*! - @function LogBytes - - @discussion Append the bytes to the log file (non-printable bytes will be logged as ascii-hex) - @param aBuffer the bytes to log - @param fastWrite writes data directly to file (no print out) - */ - void LogBytes(const TDesC8& aBuffer, TBool fastWrite); - -/*! - @function LogNewline - - @discussion Start a newline in the log file - */ - void LogNewline(); - -/*! - @function SetAutoFlush - - @discussion Turn AutoFlush on or off. AutoFlush will automatically flush the log file after each write - @param aOn if true turns AutoFlush on - */ - void SetAutoFlush(TBool aOn); - -/*! - @function SetAutoTimeStamp - - @discussion Turn AutoTimeStamp on or off. AutoTimeStamp will add a timestamp to the start of each new line in the log - @param aOn if true turn AutoTimeStamp on - */ - void SetAutoTimeStamp(TBool aOn); - -/*! - @function SetAutoNewline - - @discussion Turn AutoNewline on or off. AutoNewline starts a new line after each log operation - @param aOn if true turn AutoNewline on - */ - void SetAutoNewline(TBool aOn); - -/*! - @function StaticLogL - - @discussion Static option to append text to the log file - @param aFileName the file to append to - @param aText the text to append - */ - static void StaticLogL(const TDesC& aFileName, const TDesC8& aText); - -/*! - @function StaticLogL - - @discussion Static option to append text to the log file - @param aFileName the file to append to - @param aText the text to append - */ - static void StaticLogL(const TDesC& aFileName, const TDesC& aText); - - -private: -/*! - @function CLogFile - - @discussion Perform the first phase of two phase construction - */ - CLogFile(); -/*! - @function ConstructL - - @discussion Perform the second phase construction of a CLogFile object - @param aFileName the file to open - @param aInitialiseLog if true, and the log file already exists, previous - contents will be deleted. If false, append to any existing contents - */ - void ConstructL(const TDesC& aFileName, TBool aInitialiseLog); -/*! - @function LogTimeInternal - - @discussion Internal function to log time - */ - void LogTimeInternal(); -/*! - @function LogTextInternal - - @discussion Internal function to log text - @param aText the text to log - */ - void LogTextInternal(const TDesC8& aText); -/*! - @function LogByteInternal - - @discussion internal function to log a byte - @param aByte the byte to log - */ - void LogByteInternal(TUint8 aByte, TBool acsiiMode = EFalse); -/*! - @function LogIntInternal - - @discussion Internal function to log an integer - @param aNumber the integer to log - */ - void LogIntInternal(TUint aNumber); -/*! - @function StartWrite - - @discussion Perform any initial operation before the main log operation - */ - void StartWrite(); - -/*! - @function EndWrite - - @discussion Perform any tidying up operations after the main log operation - */ - void EndWrite(); - -/*! - @function Write - - @discussion Do the actual writing, and associated error checking - @param aText the text to write - */ - void Write(const TDesC8& aText); - -private: -/*! - @var iLogFile handle to the log file - */ - RFile iLogFile; - -/*! - @var iSession file server session - */ - RFs iSession; - -/*! - @var iLogMillisecsPerTick number of millisecs per system timer tick - */ - TInt iLogMillisecsPerTick; - -/*! - @var iAutoFlush flag - AutoFlush on - */ - TBool iAutoFlush; - -/*! - @var iAutoTimestamp flag - AutoTimeStamp on - */ - TBool iAutoTimestamp; - -/*! - @var iAutoNewline flag - AutoNewline on - */ - TBool iAutoNewline; - -/*! - @var iCheckNestDepth internal to check StartWrite and EndWrite have been called correctly - */ - TInt iCheckNestDepth; -/*! - @var iCharacterConverter converts between unicode and non-unicode characters - */ - CCnvCharacterSetConverter* iCharacterConverter; - -/*! - @var iConverterAvailability flag indicating if conversion is able to occur - */ - CCnvCharacterSetConverter::TAvailability iConverterAvailability; - }; - -#endif // __LOGFILE_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/util/inc/LogfilePanics.h --- a/videoeditorengine/audioeditorengine/util/inc/LogfilePanics.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __LOGFILEPANICS__ -#define __LOGFILEPANICS__ - -_LIT(KLogFilePanic, "LogFile"); - -enum TLogFilePanics - { - TLogFileWriteFailed = 1 - }; - -#endif // __TESTFRAME_PAN__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/audioeditorengine/util/src/Logfile.cpp --- a/videoeditorengine/audioeditorengine/util/src/Logfile.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,363 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include -#include "logfile.h" -#include "logfilepanics.h" - -_LIT8(KCrLf8, "\r\n"); -_LIT(KCrLf, "\r\n"); - -const TInt KAsciiStart = 0x20; -const TInt KAsciiEnd = 0x7f; -const TInt KHexCharLeft = '<'; -const TInt KHexCharRight = '>'; - -const TInt KNumberOfDecimalPlaces = 3; - -CLogFile* CLogFile::NewL(const TDesC& aFileName, TBool aInitialiseLog) - { - CLogFile* self = NewLC(aFileName, aInitialiseLog); - CleanupStack::Pop(); - return(self); - } - - -CLogFile* CLogFile::NewLC(const TDesC& aFileName, TBool aInitialiseLog) - { - CLogFile* self = new (ELeave) CLogFile(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aInitialiseLog); - return(self); - } - - -CLogFile::CLogFile() - { - // No implementation required - } - - -CLogFile::~CLogFile() - { - iLogFile.Flush(); - iLogFile.Close(); - iSession.Close(); - - delete iCharacterConverter; - iCharacterConverter = NULL; - } - - -void CLogFile::ConstructL(const TDesC& aFileName, TBool aInitialiseLog) - { - TInt period; - User::LeaveIfError(HAL::Get(HALData::ESystemTickPeriod, period)); - - iLogMillisecsPerTick = period / 1000; - - if (iLogMillisecsPerTick == 0) - { - iLogMillisecsPerTick = 1; - } - - - User::LeaveIfError(iSession.Connect()); - - if (aInitialiseLog) - { - User::LeaveIfError(iLogFile.Replace(iSession, aFileName, EFileShareExclusive)); - } - else - { - TInt err = iLogFile.Open(iSession, aFileName, EFileShareExclusive | EFileWrite); - - switch (err) - { - case KErrNone: // Opened ok, so seek to end of file - { - TInt position = 0; - User::LeaveIfError(iLogFile.Seek(ESeekEnd, position)); - } - break; - - case KErrNotFound: // File doesn't exist, so create it - User::LeaveIfError(iLogFile.Create(iSession, aFileName, EFileShareExclusive | EFileWrite)); - break; - - default: // Unexepected error - User::Leave(err); - break; - } - } - - // Create character converter - iCharacterConverter = CCnvCharacterSetConverter::NewL(); -// CCnvCharacterSetConverter::TAvailability iConverterAvailability; - iConverterAvailability = iCharacterConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifierAscii, iSession); - } - - -void CLogFile::LogTime() - { - StartWrite(); - LogTimeInternal(); - EndWrite(); - } - - -void CLogFile::Log(const TDesC8& aText) - { - StartWrite(); - LogTextInternal(aText); - EndWrite(); - } - - -void CLogFile::Log(const TDesC& aText) - { - StartWrite(); - - for (TInt i = 0; i < aText.Length(); i++) - { - if (aText.Mid(i).Find(KCrLf) == 0) - { - LogNewline(); - i++; - } - else if (iConverterAvailability == CCnvCharacterSetConverter::EAvailable) - { - // Convert character from unicode - TBuf<1> unicodeBuffer; - TBuf8<10> asciiBuffer; - - unicodeBuffer.Append(aText[i]); - TInt status = iCharacterConverter->ConvertFromUnicode(asciiBuffer, unicodeBuffer); - - if (status >= 0) - { - LogTextInternal(asciiBuffer); - } - } - else // character converter not available - { - TBuf8<1> asciiBuffer; - asciiBuffer.Append(static_cast(aText[i])); - LogTextInternal(asciiBuffer); - } - } - - EndWrite(); - } - - -void CLogFile::Log(TUint8 aByte) - { - StartWrite(); - LogByteInternal(aByte); - EndWrite(); - } - - -void CLogFile::Log(TUint aNumber) - { - StartWrite(); - LogIntInternal(aNumber); - EndWrite(); - } - - -void CLogFile::LogBytes(const TDesC8& aBuffer, TBool fastWrite) - { - StartWrite(); - - if(fastWrite) - Write(aBuffer); - else - { - for (TInt i = 0; i < aBuffer.Length(); i++) - { - LogByteInternal(aBuffer[i], ETrue); - } - } - - EndWrite(); - } - - -void CLogFile::LogTimeInternal() - { - TBuf8<50> text; - TInt timeInMillisecs = User::TickCount() * iLogMillisecsPerTick; - TInt secs = timeInMillisecs / 1000; - TInt millisecs = timeInMillisecs % 1000; - text.Num(secs); - text.Append('.'); - Write(text); - text.Num(millisecs); - - while (text.Length() < KNumberOfDecimalPlaces) - { - text.Insert(0, _L8("0")); - } - - text.Append('-'); - Write(text); - } - - -void CLogFile::LogTextInternal(const TDesC8& aText) - { - TPtrC8 tail(aText.Ptr(), aText.Length()); - - TInt newLinePosition = tail.Find(KCrLf8); - while (newLinePosition != KErrNotFound) - { - if (newLinePosition > 0) - { - Write(tail.Left(newLinePosition)); - tail.Set(aText.Ptr() + newLinePosition, tail.Length() - newLinePosition); - } - LogNewline(); - tail.Set(aText.Ptr() + KCrLf8.iTypeLength, tail.Length() - KCrLf8.iTypeLength); - - newLinePosition = tail.Find(KCrLf8); - } - - // No more newlines left so print remainder - Write(tail); - - } - - -void CLogFile::LogByteInternal(TUint8 aByte, TBool acsiiMode) - { - if ((aByte >= KAsciiStart) && (aByte < KAsciiEnd) || acsiiMode) - { - // Display as ASCII char - TBuf8<1> str; - str.Append(aByte); - Write(str); - } - else - { - // Display as hex number - TBuf8<4> str; - str.Append(KHexCharLeft); - str.AppendNum(static_cast(aByte), EHex); - str.Append(KHexCharRight); - Write(str); - } - } - - -void CLogFile::LogIntInternal(TUint aNumber) - { - // Display as ASCII char - TBuf8<20> str; - str.Append(KHexCharLeft); - str.AppendNum(aNumber/*, EHex*/); - str.Append(KHexCharRight); - Write(str); - } - - -void CLogFile::LogNewline() - { - Write(KCrLf8); - - if (iAutoTimestamp) - { - LogTimeInternal(); - } - } - - -void CLogFile::StartWrite() - { - ASSERT(iCheckNestDepth == 0); - iCheckNestDepth++; - - if (iAutoNewline) - { - LogNewline(); - } - } - - -void CLogFile::EndWrite() - { - if (iAutoFlush) - { - iLogFile.Flush(); - } - - iCheckNestDepth--; - ASSERT(iCheckNestDepth == 0); - } - -void CLogFile::Write(const TDesC8& aText) - { - - if (iLogFile.Write(aText) != KErrNone) - { - // As the framework may be trapping User::Panic we need to - // produce the panic at a lower level. - RThread().Panic(KLogFilePanic, TLogFileWriteFailed); - } - } - -void CLogFile::SetAutoFlush(TBool aOn) - { - iAutoFlush = aOn; - } - - -void CLogFile::SetAutoTimeStamp(TBool aOn) - { - iAutoTimestamp = aOn; - } - - -void CLogFile::SetAutoNewline(TBool aOn) - { - iAutoNewline = aOn; - } - - -void CLogFile::StaticLogL(const TDesC& aFileName, const TDesC8& aText) - { - CLogFile* logFile = NewLC(aFileName, EFalse); - logFile->Log(aText); - CleanupStack::Pop(logFile); - delete logFile; - } - - -void CLogFile::StaticLogL(const TDesC& aFileName, const TDesC& aText) - { - CLogFile* logFile = NewLC(aFileName, EFalse); - logFile->Log(aText); - CleanupStack::Pop(logFile); - delete logFile; - } - - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/bwins/vedavceditu.def --- a/videoeditorengine/avcedit/bwins/vedavceditu.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?NewL@CVedAVCEdit@@SAPAV1@XZ @ 1 NONAME ; class CVedAVCEdit * CVedAVCEdit::NewL(void) - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/eabi/vedavceditu.def --- a/videoeditorengine/avcedit/eabi/vedavceditu.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -EXPORTS - _ZN11CVedAVCEdit4NewLEv @ 1 NONAME - _ZTI11CVedAVCEdit @ 2 NONAME ; ## - _ZTV11CVedAVCEdit @ 3 NONAME ; ## - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/group/bld.inf --- a/videoeditorengine/avcedit/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES -vedavcedit.mmp - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/group/vedavcedit.mmp --- a/videoeditorengine/avcedit/group/vedavcedit.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* The AVC editing DLL project definition file. -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include - - -TARGET vedavcedit.dll -TARGETTYPE dll -UID 0x1000008d 0x10204C06 //KSharedLibraryUid - -VENDORID VID_DEFAULT -CAPABILITY CAP_GENERAL_DLL - -MACRO VIDEOEDITORENGINE_AVC_EDITING -#define VIDEOEDITORENGINE_AVC_EDITING - -SOURCEPATH ../src - -SOURCE vedavcedit.cpp -SOURCE vedavceditimp.cpp -SOURCE sequence.cpp -SOURCE parameterset.cpp -SOURCE bitbuffer.cpp -SOURCE vld.cpp - -#ifdef VIDEOEDITORENGINE_AVC_EDITING -SOURCE slice.cpp -SOURCE macroblock.cpp -SOURCE dpb.cpp -SOURCE motcomp.cpp -SOURCE framebuffer.cpp -SOURCE invtransform.cpp -#endif - -USERINCLUDE ../inc - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/libc - -// Symbian OS libraries -LIBRARY euser.lib -LIBRARY estlib.lib - -//EXPORTUNFROZEN - -// End of File - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/avcdapi.h --- a/videoeditorengine/avcedit/inc/avcdapi.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _AVCDECODER_H_ -#define _AVCDECODER_H_ - -//#include -#include - - -#define AVCD_ERROR -1 -#define AVCD_OK 0 -#define AVCD_OK_STREAM_NOT_DECODED 1 -#define AVCD_OK_FRAME_NOT_AVAILABLE 2 - -#define AVCD_PICTURE_TYPE_P 0 -#define AVCD_PICTURE_TYPE_I 1 - -#define AVCD_PROFILE_BASELINE 66 -#define AVCD_PROFILE_MAIN 77 -#define AVCD_PROFILE_EXTENDED 88 -#define AVCD_PROFILE_HIGH 100 -#define AVCD_PROFILE_HIGH_10 110 -#define AVCD_PROFILE_HIGH_422 122 -#define AVCD_PROFILE_HIGH_444 144 - - -typedef void avcdDecoder_t; - -avcdDecoder_t *avcdOpen(); - -void avcdClose(avcdDecoder_t *dec); - -TInt avcdParseLevel(avcdDecoder_t *dec, void *nalUnitBits, TUint* nalUnitLen, TInt& aLevel); - -TInt avcdParseResolution(avcdDecoder_t *dec, void *nalUnitBits, TUint* nalUnitLen, - TInt& aWidth, TInt& aHeight); - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - -TInt avcdParseParameterSet(avcdDecoder_t *dec, void *nalUnitBits, TUint* nalUnitLen); - -TInt avcdParseOneNal(avcdDecoder_t *dec, void *nalUnitBits, TUint* nalUnitLen); - - -void FrameIsFromEncoder(avcdDecoder_t *dec, TUint aFromEncoder); - - - -TUint8* ReturnPPSSet(avcdDecoder_t *dec, TUint aIndex, TUint* aPPSLength); - -TUint ReturnNumPPS(avcdDecoder_t *dec); - -TUint8* ReturnSPSSet(avcdDecoder_t *dec, TUint aIndex, TUint* aSPSLength); - -TUint ReturnNumSPS(avcdDecoder_t *dec); - -TBool ReturnEncodeUntilIDR(avcdDecoder_t *dec); - -TInt avcdGenerateNotCodedFrame(avcdDecoder_t *dec, void *aNalUnitBits, TUint aNalUnitLen, TUint aFrameNumber); - -TInt avcdStoreCurrentPPSId(avcdDecoder_t *dec, TUint8 *nalUnitBits, TUint aNalUnitLen); - -void avcdModifyFrameNumber(avcdDecoder_t *dec, void *aNalUnitBits, TUint aNalUnitLen, TUint aFrameNumber); - -#endif // VIDEOEDITORENGINE_AVC_EDITING - -#endif - - -#ifdef __cplusplus -} -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/biblin.h --- a/videoeditorengine/avcedit/inc/biblin.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,246 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for Bit Buffer module. -* -*/ - - -#ifndef _BIBLIN_H_ -#define _BIBLIN_H_ - -// @@ HARI AVC Added the below 8 lines -// make sure they are in the proper location etc... -#if defined(__SYMBIAN32__) -#define __EPOC__ -//#include "epoclib.h" -#else -#include -#include -//#include -#endif - -#include "nrctyp32.h" - -/* - * Defines - */ - -/* Error codes */ -/* Obsolete error codes are not used anymore and are defined only to maintain - backwards compatibility with older versions of the file. */ -#define ERR_BIB_STRUCT_ALLOC 1000 /* If a structure allocation failed */ -#define ERR_BIB_BUFFER_ALLOC 1001 /* Obsolete */ -#define ERR_BIB_FILE_READ 1002 /* Obsolete */ -#define ERR_BIB_NOT_ENOUGH_DATA 1003 /* If the number of bits requested from - the buffer is greater than the number - of bits available in the buffer */ -#define ERR_BIB_ALREADY_OPENED 1004 /* Obsolete */ -#define ERR_BIB_FILE_OPEN 1005 /* Obsolete */ -#define ERR_BIB_ALREADY_CLOSED 1006 /* Obsolete */ -#define ERR_BIB_FILE_CLOSE 1007 /* Obsolete */ -#define ERR_BIB_NUM_BITS 1008 /* Obsolete */ -#define ERR_BIB_FILE_NOT_OPEN 1009 /* Obsolete */ -#define ERR_BIB_ILLEGAL_SIZE 1010 /* Obsolete */ -#define ERR_BIB_CANNOT_REWIND 1011 /* If the number of bits requested to be - rewinded is greater than the number - of bits available in the buffer */ -#define ERR_BIB_BUFLIST 1012 /* If the internal buffer list has - been corrupted */ -#define ERR_BIB_TOO_SMALL_BUFFER 1013 /* Obsolete */ -#define ERR_BIB_FEC_RELOCK 1050 /* Obsolete */ -#define ERR_BIB_PSC_FOUND 1060 /* Obsolete */ - - -/* - * Structs and typedefs - */ - - - -/* {{-output"bibBuffer_t_info.txt" -ignore"*" -noCR}} - * The bibBuffer_t data type is a structure containing all the necessary data - * for a bit buffer instance (except for the actual data buffer). This - * structure is passed to all of the bit buffer functions. - * {{-output"bibBuffer_t_info.txt"}} - */ - -/* {{-output"bibBuffer_t.txt"}} */ - - - -enum CopyMode { - CopyNone = 0, - CopyWhole = 1, - CopyWithEdit = 2, - EditOnly = 3 -}; - -typedef struct bibEditParams_s { - - int StartByteIndex; // start byte position where data is to be written - int StartBitIndex; // start bit position where data is to be written - int curNumBits; // number of bits that need to be replaced - int newNumBits; // number of bits to be written - int newValue; // the value to be written - -} bibEditParams_t; - -typedef struct bibBufferEdit_s { - - CopyMode copyMode; - int numChanges; - bibEditParams_t *editParams; - -} bibBufferEdit_t; - - - - -typedef struct bibBuffer_s { - u_char *baseAddr; /* the start address of the buffer */ - - unsigned size; /* the size of the buffer in bytes */ - - unsigned getIndex; /* an index to the buffer where data was last got */ - - int bitIndex; /* an index to the byte pointed by getIndex + 1 */ - - u_int32 bitsLeft; /* the number of bits currently in the buffer */ - - u_int32 numBytesRead; /* the total number of bytes read */ - - int error; /* stores possible error code */ - -} bibBuffer_t; -/* {{-output"bibBuffer_t.txt"}} */ - -#ifdef DEBUG_OUTPUT -extern bibBuffer_t * buffer_global; -#endif - -/* typedefs for bibFlushBits, bibGetBits, and bibShowBits function types */ -typedef void (*bibFlushBits_t) (int, bibBuffer_t *, int *, int *, int16 *); -typedef u_int32 (*bibGetBits_t) (int, bibBuffer_t *, int *, int *, int16 *); -typedef u_int32 (*bibShowBits_t) (int, bibBuffer_t *, int *, int *, int16 *); - -/* - * External macros - */ - -/* - * bibNumberOfBitsLeft - * - * Parameters: - * bibBuffer_t *buffer input bit buffer instance - * - * Function: - * This macro returns the number of bits which are left to be read - * from the current position. - * - * Returns: - * See above. - */ - - #define bibNumberOfBitsLeft(buffer) \ - ((buffer)->bitsLeft) - -/* - * External function prototypes - */ - -bibBuffer_t *bibCreate(void *srcBuffer, unsigned srcBufferLength, - int16 *errorCode); - -void bibDelete(bibBuffer_t *buffer, int16 *errorCode); - -u_int32 bibNumberOfFlushedBits(bibBuffer_t *buffer); - -u_int32 bibNumberOfFlushedBytes(bibBuffer_t *buffer); - -u_int32 bibNumberOfRewBits(bibBuffer_t *buffer); - -void bibRewindBits(u_int32 numberOfBits, bibBuffer_t *buffer, int16 *errorCode); - -int bibCheckPSCValidity( bibBuffer_t *buffer, int syncCodeLength ); - -void bibAddMPEG4Header( bibBuffer_t *buffer, u_int8 *data, int length, int16 *errorCode ); - -void bibMarkBufferWithPSC( bibBuffer_t *buffer, int16 *error ); - -/* - * Prototypes for bibFlushBits/bibGetBits/bibShowBits - */ - -void bibFlushBitsL(int numberOfBits, bibBuffer_t *buffer); -u_int32 bibGetBitsL(int numberOfBits, bibBuffer_t *buffer); -u_int32 bibShowBitsL(int numberOfBits, bibBuffer_t *buffer); - -inline void bibFlushBits(int numberOfBits, bibBuffer_t *buffer, int *numberOfBitsGot, int * /*bitErrorIndication*/, int16 * /*errorCode*/) -{ - *numberOfBitsGot = numberOfBits; - bibFlushBitsL(numberOfBits, buffer); -} - -inline u_int32 bibGetBits(int numberOfBits, bibBuffer_t *buffer, int *numberOfBitsGot, int * /*bitErrorIndication*/, int16 * /*errorCode*/) -{ - *numberOfBitsGot = numberOfBits; - return bibGetBitsL(numberOfBits, buffer); -} - -inline u_int32 bibShowBits(int numberOfBits, bibBuffer_t *buffer, int *numberOfBitsGot, int * /*bitErrorIndication*/, int16 * /*errorCode*/) -{ - *numberOfBitsGot = numberOfBits; - return bibShowBitsL(numberOfBits, buffer); -} - -#define bibFlushBitsFromBuffer bibFlushBits -#define bibGetBitsFromBuffer bibGetBits -#define bibShowBitsFromBuffer bibShowBits - - -bibBufferEdit_t *bibBufferEditCreate(int16 *errorCode); -void bibBufEditDelete(bibBufferEdit_t *bufEdit, int16 *errorCode); - -// copy from input buffer to output buffer in various copy modes (with or without editing) -void CopyStream(bibBuffer_t *SrcBuffer,bibBuffer_t *DestBuffer,bibBufferEdit_t *bufEdit, - int ByteStart,int BitStart); -// copy from input buffer to output buffer (without editing) -void CopyBuffer(bibBuffer_t *SrcBuffer,bibBuffer_t *DestBuffer, - int ByteStart,int BitStart, int ByteEnd, int BitEnd); -// copy from BufferEdit to output buffer (no copying; rather, inserting code into output buffer) -void CopyBufferEdit(bibBuffer_t *SrcBuffer, bibBuffer_t *DestBuffer, - bibEditParams_t *edParam, int updateSrcBufferStats=1); -// insert correct IntraDC values for H.263 chrominance blocks in output buffer -void ResetH263IntraDcUV(bibBuffer_t *DestBuffer, int uValue, int vValue); -// insert correct IntraDC values for MPEG-4 chrominance blocks in output buffer -void ResetMPEG4IntraDcUV(bibBuffer_t *DestBuffer, int IntraDC_size); - - /* - SrcValue the source value from which bits are to be extacted - MaxNumBits the length in bits of the source value - StartBit the index of the starting bit form where data is to be retrieved - getBits the number of bits to be retrieved - */ -u_int32 bibGetBitsFromWordL(u_int32 SrcValue, u_int32 getBits, u_int32 *StartBit, - u_int32 MaxNumBits); -void bibForwardBits(u_int32 numberOfBits, bibBuffer_t *buffer); -void bibStuffBits(bibBuffer_t *buffer); -void bibStuffBitsMPEG4(bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, bibBufferEdit_t *bufEdit, - int *StartByteIndex, int *StartBitIndex, int updateSrcBufferStats); - - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/bitbuffer.h --- a/videoeditorengine/avcedit/inc/bitbuffer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,355 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _BITBUFFER_H_ -#define _BITBUFFER_H_ - - -#include "globals.h" -#include "nrctyp32.h" - - -#define BIB_ERR_BIT_ERROR -4 -#define BIB_INCORRECT_TRAILING_BIT -3 -#define BIB_ERR_NO_BITS -2 -#define BIB_ERROR -1 -#define BIB_OK 0 - - -typedef struct _bitbuffer_s -{ - u_int8 *data; /* point to the bit buffer. The physical buffer is allocated by the main module */ - int dataLen; - int bytePos; - int bitpos; - int32 currentBits; - int errorStatus; -} bitbuffer_s; - - -#define bibRaiseError(bitbuf, error) ((bitbuf)->errorStatus = (error)) - -#define bibGetStatus(bitbuf) (bitbuf)->errorStatus - - -bitbuffer_s *bibOpen(); - -int bibInit(bitbuffer_s *bitbuf, u_int8 *streamBytes, int length); - -int bibEnd(bitbuffer_s *bitbuf); - -void bibEndSlice(bitbuffer_s *bitbuf); - -void bibClose(bitbuffer_s *bitbuf); - -int bibGetBitFunc(bitbuffer_s *bitbuf); - -int32 bibGetBitsFunc(bitbuffer_s *bitbuf, int n); - -int32 bibShowBitsFunc(bitbuffer_s *bitbuf, int n); - -int bibSkipBitsFunc(bitbuffer_s *bitbuf, int n); - -int bibGetByte(bitbuffer_s *bitbuf, int *byteRet); - -int bibByteAlign(bitbuffer_s *bitbuf); - -int bibSkipTrailingBits(bitbuffer_s *bitbuf); - -int bibMoreRbspData(bitbuffer_s *bitbuf); - -int32 bibGetNumRemainingBits(bitbuffer_s *bitbuf); - -//int bibGetMax16bits(bitbuffer_s *bitbuf, TInt n, u_int32* retValue); -void syncBitBufferBitpos(bitbuffer_s *bitbuf); - - -/* - * - * bibGetBit - * - * Parameters: - * bitbuf Bitbuffer object - * bit Return pointer for bit - * - * Function: - * Get next bit from bitbuffer. - * - * Returns: - * - - * - */ -#define bibGetBit(bitbuf, bit) \ - if ((bitbuf)->bitpos <= 0) { \ - if ((bitbuf)->bytePos < (bitbuf)->dataLen) { \ - (bitbuf)->currentBits = (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos = 7; \ - *(bit) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & 1; \ - } \ - else { \ - (bitbuf)->errorStatus = BIB_ERR_NO_BITS; \ - *(bit) = 0; \ - } \ - } \ - else { \ - (bitbuf)->bitpos--; \ - *(bit) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & 1; \ - } - - -/* - * - * bibGetBits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer. If bitbuffer is low on bits, - * call bibGetBitsFunc to get more. - * - * NOTE: maximum of 24 bits can be fetched - * - * Returns: - * - - * - */ -#define bibGetBits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos+2 >= (bitbuf)->dataLen) \ - *(bits) = bibGetBitsFunc(bitbuf, n); \ - else { \ - do { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 8; \ - } while ((n) > (bitbuf)->bitpos); \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else { \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } - - -/* - * - * bibGetMax16bits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer. If bitbuffer is low on bits, - * call bibGetBitsFunc to get more. - * - * NOTE: maximum of 16 bits can be fetched - * - * Returns: - * - - * - */ -#define bibGetMax16bits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos+1 >= (bitbuf)->dataLen) \ - *(bits) = bibGetBitsFunc(bitbuf, n); \ - else { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 16; \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else { \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } - - -/* - * - * bibGetMax8bits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer. If bitbuffer is low on bits, - * call bibGetBitsFunc to get more. - * - * NOTE: maximum of 8 bits can be fetched - * - * Returns: - * - - * - */ -#define bibGetMax8bits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos >= (bitbuf)->dataLen) \ - *(bits) = bibGetBitsFunc(bitbuf, n); \ - else { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 8; \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else { \ - (bitbuf)->bitpos -= (n); \ - *(bits) = ((bitbuf)->currentBits >> (bitbuf)->bitpos) & ~(((u_int32)-1)<<(n)); \ - } - - -/* - * - * bibShowBits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer without advancing bitbuffer pointer. - * If bitbuffer is low on bits, call bibShowBitsFunc to get more. - * - * NOTE: maximum of 24 bits can be fetched - * - * Returns: - * - - * - */ -#define bibShowBits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos+2 >= (bitbuf)->dataLen) \ - *(bits) = bibShowBitsFunc(bitbuf, n); \ - else { \ - do { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 8; \ - } while ((n) > (bitbuf)->bitpos); \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); - - -/* - * - * bibShowMax16bits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer without advancing bitbuffer pointer. - * If bitbuffer is low on bits, call bibShowBitsFunc to get more. - * - * NOTE: maximum of 16 bits can be fetched - * - * Returns: - * - - * - */ -#define bibShowMax16bits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos+1 >= (bitbuf)->dataLen) \ - *(bits) = bibShowBitsFunc(bitbuf, n); \ - else { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 16; \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); - - -/* - * - * bibShowMax8bits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * bits Return pointer for bits - * - * Function: - * Get next n bits from bitbuffer without advancing bitbuffer pointer. - * If bitbuffer is low on bits, call bibShowBitsFunc to get more. - * - * NOTE: maximum of 8 bits can be fetched - * - * Returns: - * - - * - */ -#define bibShowMax8bits(bitbuf, n, bits) \ - if ((n) > (bitbuf)->bitpos) { \ - if ((bitbuf)->bytePos >= (bitbuf)->dataLen) \ - *(bits) = bibShowBitsFunc(bitbuf, n); \ - else { \ - (bitbuf)->currentBits = ((bitbuf)->currentBits << 8) | (bitbuf)->data[(bitbuf)->bytePos++]; \ - (bitbuf)->bitpos += 8; \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); \ - } \ - } \ - else \ - *(bits) = ((bitbuf)->currentBits >> ((bitbuf)->bitpos-(n))) & ~(((u_int32)-1)<<(n)); - - -/* - * - * bibSkipBits - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits to be skipped - * - * Function: - * Called after calling bibShowBits to skip the number of bits that - * were actually needed. If bibShowBits fetched more bits than there were - * bits in bitbuf->currentBits, calls bibSkipBitsFunc to clean up. - * - * Returns: - * - - * - */ -#define bibSkipBits(bitbuf, n) \ - (bitbuf)->bitpos -= (n); \ - if ((bitbuf)->bitpos < 0) { \ - (bitbuf)->bitpos += (n); \ - bibSkipBitsFunc(bitbuf, n); \ - } - - - -#endif /* #ifndef _BITBUFFER_H_ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/clipbuf.h --- a/videoeditorengine/avcedit/inc/clipbuf.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,184 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _CLIPBUF_H_ -#define _CLIPBUF_H_ - - -/* - * This table is used to clip values -256 ... 511 to the range of [0, 255] - */ -#ifndef AVC_MOTION_COMP_ASM -static const u_int8 clip8Buf[768] = -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, - 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159, - 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, - 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, - 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, -}; -#else -static const u_int8 clip8Buf[1536] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, - 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, - 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, - 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, - 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39, 40, - 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, - 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, - 56, 57, 57, 58, 58, 59, 59, 60, 60, 61, 61, 62, 62, 63, 63, 64, - 64, 65, 65, 66, 66, 67, 67, 68, 68, 69, 69, 70, 70, 71, 71, 72, - 72, 73, 73, 74, 74, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, - 80, 81, 81, 82, 82, 83, 83, 84, 84, 85, 85, 86, 86, 87, 87, 88, - 88, 89, 89, 90, 90, 91, 91, 92, 92, 93, 93, 94, 94, 95, 95, 96, - 96, 97, 97, 98, 98, 99, 99, 100, 100, 101, 101, 102, 102, 103, 103, 104, - 104, 105, 105, 106, 106, 107, 107, 108, 108, 109, 109, 110, 110, 111, 111, 112, - 112, 113, 113, 114, 114, 115, 115, 116, 116, 117, 117, 118, 118, 119, 119, 120, - 120, 121, 121, 122, 122, 123, 123, 124, 124, 125, 125, 126, 126, 127, 127, 128, - 128, 129, 129, 130, 130, 131, 131, 132, 132, 133, 133, 134, 134, 135, 135, 136, - 136, 137, 137, 138, 138, 139, 139, 140, 140, 141, 141, 142, 142, 143, 143, 144, - 144, 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, 150, 150, 151, 151, 152, - 152, 153, 153, 154, 154, 155, 155, 156, 156, 157, 157, 158, 158, 159, 159, 160, - 160, 161, 161, 162, 162, 163, 163, 164, 164, 165, 165, 166, 166, 167, 167, 168, - 168, 169, 169, 170, 170, 171, 171, 172, 172, 173, 173, 174, 174, 175, 175, 176, - 176, 177, 177, 178, 178, 179, 179, 180, 180, 181, 181, 182, 182, 183, 183, 184, - 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, 189, 190, 190, 191, 191, 192, - 192, 193, 193, 194, 194, 195, 195, 196, 196, 197, 197, 198, 198, 199, 199, 200, - 200, 201, 201, 202, 202, 203, 203, 204, 204, 205, 205, 206, 206, 207, 207, 208, - 208, 209, 209, 210, 210, 211, 211, 212, 212, 213, 213, 214, 214, 215, 215, 216, - 216, 217, 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, - 224, 225, 225, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, - 232, 233, 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 239, 239, 240, - 240, 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 248, - 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, 254, 255, 255, 255, - - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 -}; - -#endif - -#endif - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/dpb.h --- a/videoeditorengine/avcedit/inc/dpb.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _DPB_H_ -#define _DPB_H_ - - -#include "globals.h" -#include "nrctyp32.h" -#include "framebuffer.h" - - -#define DPB_ERR_MEM_ALLOC -3 -#define DPB_ERR_PICTURE_NOT_FOUND -2 -#define DPB_ERROR -1 -#define DPB_OK 0 - - -#define DPB_MAX_SIZE 16 - - -typedef struct _dpb_s { - int size; - frmBuf_s *buffers[DPB_MAX_SIZE]; - - int fullness; - int maxNumRefFrames; - int numShortTermPics; - int numLongTermPics; - - int maxLongTermFrameIdx; - -} dpb_s; - - - -dpb_s *dpbOpen(); - -void dpbClose(dpb_s *dpb); - -void dpbSetSize(dpb_s *dpb, int dpbSize); - -frmBuf_s *dpbGetNextOutputPic(dpb_s *dpb, int *dpbHasIDRorMMCO5); - -int dpbStorePicture(dpb_s *dpb, frmBuf_s *currPic, frmBuf_s *outputQueue[]); - -void dpbUpdatePicNums(dpb_s *dpb, int32 frameNum, int32 maxFrameNum); - -void dpbMarkAllPicsAsNonRef(dpb_s *dpb); - -void dpbMarkLowestShortTermPicAsNonRef(dpb_s *dpb); - -int dpbMarkShortTermPicAsNonRef(dpb_s *dpb, int32 picNum); - -int dpbMarkLongTermPicAsNonRef(dpb_s *dpb, int longTermPicNum); - -void dpbVerifyLongTermFrmIdx(dpb_s *dpb, int longTermFrmIdx); - -int dpbMarkShortTermPicAsLongTerm(dpb_s *dpb, int32 picNum, int longTermFrmIdx); - -void dpbSetMaxLongTermFrameIdx(dpb_s *dpb, int maxLongTermFrmIdxPlus1); - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/framebuffer.h --- a/videoeditorengine/avcedit/inc/framebuffer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,114 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _FRAMEBUFFER_H_ -#define _FRAMEBUFFER_H_ - - -#include "nrctyp32.h" -#include "globals.h" -#include "avcdapi.h" - - -#define FRM_NON_REF_PIC 0 -#define FRM_SHORT_TERM_PIC 1 -#define FRM_LONG_TERM_PIC 2 - - -typedef struct _frmBuf_s { - int constraintSet0flag; - int constraintSet1flag; - int constraintSet2flag; - int profile; - int level; - int width; - int height; - unsigned cropLeftOff; - unsigned cropRightOff; - unsigned cropTopOff; - unsigned cropBottomOff; - - int aspectRatioNum; - int aspectRatioDenom; - int overscanInfo; - int videoFormat; - int videoFullRangeFlag; - int matrixCoefficients; - int chromaSampleLocType; - int numReorderFrames; - float frameRate; - - int imgPadding; - - int qp; - int chromaQpIndexOffset; - - int32 frameNum; - int32 maxFrameNum; - int32 picNum; - int longTermFrmIdx; - int longTermPicNum; - int refType; /* non-ref, short term or long term */ - int forOutput; /* If this frame is waiting for output */ - int nonExisting; - int32 poc; - int isIDR; - int idrPicID; - int hasMMCO5; - int picType; - - int pictureStructure; - - int lossy; -/*#if defined(ERROR_CONCEALMENT) && defined(BACKCHANNEL_INFO) - unsigned char *mbLossMap; -#endif*/ - - int sceneCut; - -} frmBuf_s; - - -typedef struct _mbAttributes_s { - int *sliceMap; - int8 *mbTypeTable; - int8 *qpTable; - int8 *refIdxTable; - int *cbpTable; - int8 *ipModesUpPred; - motVec_s *motVecTable; - int8 *numCoefUpPred[3]; - int8 *filterModeTab; - int8 *alphaOffset; - int8 *betaOffset; -} mbAttributes_s; - - -frmBuf_s *frmOpen(mbAttributes_s **mbData, int width, int height); - -frmBuf_s *frmOpenRef(int width, int height); - -void frmClose(frmBuf_s *recoBuf, mbAttributes_s *mbData); - -void frmCloseRef(frmBuf_s *ref); - -frmBuf_s *frmMakeRefFrame(frmBuf_s *recoBuf, frmBuf_s *refBuf); - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/globals.h --- a/videoeditorengine/avcedit/inc/globals.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,174 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _GLOBALS_H_ -#define _GLOBALS_H_ - -#include -#include "nrctyp32.h" -//#include "rdtsc.h" - - -/* - * General defines - */ - -#ifdef __TMS320C55X__ -/* If this is defined, int is 16 bits */ -#define INT_IS_16_BITS -#endif - -// Define the debug printing -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -/* If this is defined as 1, input bitstream is encapsulated in NAL packets */ -/* and contians start code emulation prevention bytes */ -#define ENCAPSULATED_NAL_PAYLOAD 1 - -/* Minimum and maximum QP value */ -#define MIN_QP 0 -#define MAX_QP 51 - -/* If this is defined, pixel clipping will use loop-up table */ -#ifndef __TMS320C55X__ -#define USE_CLIPBUF -#endif - -#ifndef min -#define min(a, b) ((a) < (b) ? (a) : (b)) -#endif -#ifndef max -#define max(a, b) ((a) > (b) ? (a) : (b)) -#endif - -/* This macro clips value val to the range of [min, max] */ -#define clip(min, max, val) (((val)<(min))? (min):(((val)>(max))? (max):(val))) - - -/* - * Defines for assembly functions - */ - -#ifdef AVC_ARM_ASSEMBLY -#define AVC_RECO_BLOCK_ASM -#define AVC_LOOP_FILTER_ASM -#define AVC_MOTION_COMP_ASM -#endif - -#ifdef __TMS320C55X__ -#define AVC_RECO_BLOCK_ASM -#endif - - -/* - * Defines for error concealment - */ - -/*#ifndef ERROR_CONCEALMENT -#define ERROR_CONCEALMENT -#endif*/ - -#ifndef BACKCHANNEL_INFO -#define BACKCHANNEL_INFO -#endif - -/* - * Defines for slice - */ - -/* All possible slice types */ -#define SLICE_MIN 0 -#define SLICE_P 0 // P (P slice) -#define SLICE_B 1 // B (B slice) -#define SLICE_I 2 // I (I slice) -#define SLICE_SP 3 // SP (SP slice) -#define SLICE_SI 4 // SI (SI slice) -#define SLICE_P1 5 // P (P slice) -#define SLICE_B1 6 // B (B slice) -#define SLICE_I1 7 // I (I slice) -#define SLICE_SP1 8 // SP (SP slice) -#define SLICE_SI1 9 // SI (SI slice) -#define SLICE_MAX 9 - -/* Macros for testing whether slice is I slice, P slice or B slice */ -#define IS_SLICE_I(x) ((x) == SLICE_I || (x) == SLICE_I1 || (x) == SLICE_SI || (x) == SLICE_SI1) -#define IS_SLICE_P(x) ((x) == SLICE_P || (x) == SLICE_P1 || (x) == SLICE_SP || (x) == SLICE_SP1) -#define IS_SLICE_B(x) ((x) == SLICE_B || (x) == SLICE_B1) - - -/* - * Defines for macroblock - */ - -#define MBK_SIZE 16 -#define BLK_SIZE 4 -#define BLK_PER_MB (MBK_SIZE/BLK_SIZE) -#define MBK_SIZE_LOG2 4 -#define BLK_SIZE_LOG2 2 - -/* Macroblock type */ -#define MBK_INTRA 0 -#define MBK_INTER 1 - -/* Intra macroblock sub-type */ -#define MBK_INTRA_TYPE1 0 -#define MBK_INTRA_TYPE2 1 -#define MBK_INTRA_TYPE_PCM 2 - - -/* - * Defines for entropy coder - */ - -/* These 2 macros are needed even if ENABLE_CABAC is not defined */ -#define ENTROPY_CAVLC 0 -#define ENTROPY_CABAC 1 - - - -/* - * Global structures - */ - -typedef struct _motVec_s { - int16 x; - int16 y; -} motVec_s; - - -/* Chrominance QP mapping table. Has to be static on Symbian. */ -/* Chroma QP = qpChroma[Luma QP] */ -#ifndef __SYMBIAN32__ -extern const u_int8 qpChroma[52]; -#else -static const u_int8 qpChroma[52] = { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11, - 12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27, - 28,29,29,30,31,32,32,33,34,34,35,35,36,36,37,37, - 37,38,38,38,39,39,39,39 -}; -#endif - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/invtransform.h --- a/videoeditorengine/avcedit/inc/invtransform.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _INVTRANSFORM_H_ -#define _INVTRANSFORM_H_ - - -#define ITR_DEQUANT_BITS 6 -#define ITR_DEQUANT_ROUND (1<<(ITR_DEQUANT_BITS-1)) - - -void itrIDCTdequant4x4(int src[4][4], int dest[4][4], const int *dequantPtr, - int qp_per, int isDc, int dcValue); - -void itrIHadaDequant4x4(int src[4][4], int dest[4][4], int deqc); - -void itrIDCTdequant2x2(int src[2][2], int dest[2][2], int deqc); - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/macroblock.h --- a/videoeditorengine/avcedit/inc/macroblock.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _MACROBLOCK_H_ -#define _MACROBLOCK_H_ - - -#include "globals.h" -#include "framebuffer.h" -#include "bitbuffer.h" - - -#define MBK_ERROR -1 -#define MBK_OK 0 -#define MBK_PCM_FOUND 2 - - -typedef struct _macroblock_s -{ - int type; - int numSkipped; - - int intraType; - int intraMode; - int intraModeChroma; - - int interMode; - int inter8x8modes[4]; - int refNum[4]; - int numMotVecs; - - int qp, qpC; - int idxX, idxY; - int blkX, blkY; - int pixX, pixY; - - int cbpY, cbpC, cbpChromaDC; - - u_int8 predY[MBK_SIZE][MBK_SIZE]; - u_int8 predC[MBK_SIZE/2][MBK_SIZE]; - - int dcCoefY[BLK_PER_MB][BLK_PER_MB]; - int dcCoefC[2][BLK_PER_MB/2][BLK_PER_MB/2]; - - int coefY[BLK_PER_MB][BLK_PER_MB][BLK_SIZE][BLK_SIZE]; - int coefC[2][BLK_PER_MB/2][BLK_PER_MB/2][BLK_SIZE][BLK_SIZE]; - - int mbAvailBits; - - int8 numCoefLeftPred[BLK_PER_MB]; - int8 numCoefLeftPredC[2][BLK_PER_MB/2]; - - int8 ipModesLeftPred[BLK_PER_MB]; - -} macroblock_s; - - -void mbkSetInitialQP(macroblock_s *mb, int qp, int chromaQpIdx); - -TInt mbkParse(macroblock_s *mb, - TInt numRefFrames, mbAttributes_s *mbData, TInt picWidth, - TInt picType, TInt constIpred, TInt chromaQpIdx, - TInt mbIdxX, TInt mbIdxY, void *streamBuf, TInt aBitOffset); - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/motcomp.h --- a/videoeditorengine/avcedit/inc/motcomp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _MOTION_H_ -#define _MOTION_H_ - - -#include "nrctyp32.h" -#include "framebuffer.h" - - -#define MOT_NUM_MODES 7 -#define MOT_COPY 0 -#define MOT_16x16 1 -#define MOT_16x8 2 -#define MOT_8x16 3 -#define MOT_8x8 4 -#define MOT_8x4 5 -#define MOT_4x8 6 -#define MOT_4x4 7 - - -int mcpGetNumMotVecs(int interMode, int subMbTypes[4]); - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/nrctyp32.h --- a/videoeditorengine/avcedit/inc/nrctyp32.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Data type definitions. -* -*/ - - -#ifndef _NRCTYP32_H_ -#define _NRCTYP32_H_ - -typedef unsigned char Byte; -typedef unsigned char u_char; -typedef signed char int8; -typedef unsigned char u_int8; -typedef short int16; -typedef unsigned short u_int16; -typedef long int32; -typedef unsigned long u_int32; -typedef float float32; -typedef double float64; - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/parameterset.h --- a/videoeditorengine/avcedit/inc/parameterset.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,290 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _PARAMETERSET_H_ -#define _PARAMETERSET_H_ - -#include "nrctyp32.h" -#include "bitbuffer.h" -#include -#include - - -/* Parameter set error codes */ -#define PS_ERR_MEM_ALLOC -5 -#define PS_ERR_UNSUPPORTED_FEATURE -4 -#define PS_ERR_UNSUPPORTED_PROFILE -3 -#define PS_ERR_ILLEGAL_VALUE -2 -#define PS_ERROR -1 -#define PS_OK 0 - - -/* Boolean Type */ -typedef unsigned int Boolean; - -/* According to the Awaji meeting decision: */ -#define PS_MAX_NUM_OF_SPS 32 -#define PS_MAX_NUM_OF_PPS 256 - -/* Profile IDC's */ -#define PS_BASELINE_PROFILE_IDC 66 -#define PS_MAIN_PROFILE_IDC 77 -#define PS_EXTENDED_PROFILE_IDC 88 - -#define PS_MAX_CPB_CNT 32 - -#define PS_EXTENDED_SAR 255 - -/* Slice groups supported by baseline profile and extended profile */ -#define PS_MAX_NUM_SLICE_GROUPS 8 -#define PS_SLICE_GROUP_MAP_TYPE_INTERLEAVED 0 -#define PS_SLICE_GROUP_MAP_TYPE_DISPERSED 1 -#define PS_SLICE_GROUP_MAP_TYPE_FOREGROUND 2 -#define PS_SLICE_GROUP_MAP_TYPE_CHANGING_3 3 -#define PS_SLICE_GROUP_MAP_TYPE_CHANGING_4 4 -#define PS_SLICE_GROUP_MAP_TYPE_CHANGING_5 5 -#define PS_SLICE_GROUP_MAP_TYPE_EXPLICIT 6 -#define PS_BASELINE_MAX_SLICE_GROUPS 7 - - -#define PS_MAX_NUM_REF_FRAMES_IN_PIC_ORDER_CNT_CYCLE 256 - -// NOTE: Levels up to 2 are eanbled for testing purposes -// 1.2 is the max level we should support -//#define PS_MAX_SUPPORTED_LEVEL 20 // Maximum level that we support - -//WVGA task -#define PS_MAX_SUPPORTED_LEVEL 31 - - -/* - * Hypothetical reference decoder parameters - */ - -typedef struct _hrd_parameters_s -{ - unsigned cpb_cnt_minus1; // ue(v) - unsigned bit_rate_scale; // u(4) - unsigned cpb_size_scale; // u(4) - u_int32 bit_rate_value_minus1[PS_MAX_CPB_CNT]; // ue(v) - u_int32 cpb_size_value_minus1[PS_MAX_CPB_CNT]; // ue(v) - unsigned cbr_flag[PS_MAX_CPB_CNT]; // u(1) - unsigned initial_cpb_removal_delay_length_minus1; // u(5) - unsigned cpb_removal_delay_length_minus1; // u(5) - unsigned dpb_output_delay_length_minus1; // u(5) - unsigned time_offset_length; // u(5) -} hrd_parameters_s; - - -/* - * Video usability information - */ - -typedef struct _vui_parameters_s -{ - Boolean aspect_ratio_info_present_flag; // u(1) - unsigned aspect_ratio_idc; // u(8) - unsigned sar_width; // u(16) - unsigned sar_height; // u(16) - Boolean overscan_info_present_flag; // u(1) - Boolean overscan_appropriate_flag; // u(1) - Boolean video_signal_type_present_flag; // u(1) - unsigned video_format; // u(3) - Boolean video_full_range_flag; // u(1) - Boolean colour_description_present_flag; // u(1) - unsigned colour_primaries; // u(8) - unsigned transfer_characteristics; // u(8) - unsigned matrix_coefficients; // u(8) - Boolean chroma_loc_info_present_flag; // u(1) - unsigned chroma_sample_loc_type_top_field; // ue(v) - unsigned chroma_sample_loc_type_bottom_field; // ue(v) - Boolean timing_info_present_flag; // u(1) - u_int32 num_units_in_tick; // u(32) - u_int32 time_scale; // u(32) - Boolean fixed_frame_rate_flag; // u(1) - Boolean nal_hrd_parameters_present_flag; // u(1) - hrd_parameters_s nal_hrd_parameters; // hrd_paramters_s - Boolean vcl_hrd_parameters_present_flag; // u(1) - hrd_parameters_s vcl_hrd_parameters; // hrd_paramters_s - // if ((nal_hrd_parameters_present_flag || (vcl_hrd_parameters_present_flag)) - Boolean low_delay_hrd_flag; // u(1) - Boolean pic_struct_present_flag; // u(1) - Boolean bitstream_restriction_flag; // u(1) - Boolean motion_vectors_over_pic_boundaries_flag; // u(1) - unsigned max_bytes_per_pic_denom; // ue(v) - unsigned max_bits_per_mb_denom; // ue(v) - unsigned log2_max_mv_length_horizontal; // ue(v) - unsigned log2_max_mv_length_vertical; // ue(v) - unsigned num_reorder_frames; // ue(v) - unsigned max_dec_frame_buffering; // ue(v) -} vui_parameters_s; - - -/* - * Picture parameter set - */ - -typedef struct _pic_parameter_set_s -{ - unsigned pic_parameter_set_id; // ue(v) - unsigned seq_parameter_set_id; // ue(v) - Boolean entropy_coding_mode_flag; // u(1) - Boolean pic_order_present_flag; // u(1) - unsigned num_slice_groups_minus1; // ue(v) - unsigned slice_group_map_type; // ue(v) - // if( slice_group_map_type = = 0 ) - unsigned run_length_minus1[PS_MAX_NUM_SLICE_GROUPS]; // ue(v) - // else if( slice_group_map_type = = 2 ) - unsigned top_left[PS_MAX_NUM_SLICE_GROUPS]; // ue(v) - unsigned bottom_right[PS_MAX_NUM_SLICE_GROUPS]; // ue(v) - // else if( slice_group_map_type = = 3 || 4 || 5 - Boolean slice_group_change_direction_flag; // u(1) - unsigned slice_group_change_rate_minus1; // ue(v) - // else if( slice_group_map_type = = 6 ) - unsigned pic_size_in_map_units_minus1; // ue(v) - unsigned *slice_group_id; // complete MBAmap u(v) - unsigned num_ref_idx_l0_active_minus1; // ue(v) - unsigned num_ref_idx_l1_active_minus1; // ue(v) - Boolean weighted_pred_flag; // u(1) - Boolean weighted_bipred_idc; // u(2) - int pic_init_qp_minus26; // se(v) - int pic_init_qs_minus26; // se(v) - int chroma_qp_index_offset; // se(v) - Boolean deblocking_filter_parameters_present_flag; // u(1) - Boolean constrained_intra_pred_flag; // u(1) - Boolean redundant_pic_cnt_present_flag; // u(1) - - TUint8 indexChanged; // Flag for changed PPS Id (because of Id conflict in clip (can happen in e.g. merge, cut operations) - TUint newPPSId; - TUint PPSlength; - TUint8* codedPPSBuffer; - TUint encPPSId; - TUint origPPSId; -} pic_parameter_set_s; - - -/* - * Sequence parameter set - */ - -typedef struct _seq_parameter_set_s -{ - unsigned profile_idc; // u(8) - Boolean constraint_set0_flag; // u(1) - Boolean constraint_set1_flag; // u(1) - Boolean constraint_set2_flag; // u(1) - Boolean constraint_set3_flag; // u(1) - Boolean reserved_zero_4bits; // u(4) - unsigned level_idc; // u(8) - unsigned seq_parameter_set_id; // ue(v) - unsigned log2_max_frame_num_minus4; // ue(v) - unsigned pic_order_cnt_type; - // if( pic_order_cnt_type == 0 ) - unsigned log2_max_pic_order_cnt_lsb_minus4; // ue(v) - // else if( pic_order_cnt_type == 1 ) - Boolean delta_pic_order_always_zero_flag; // u(1) - int32 offset_for_non_ref_pic; // se(v) - int32 offset_for_top_to_bottom_field; // se(v) - unsigned num_ref_frames_in_pic_order_cnt_cycle; // ue(v) - // for( i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++ ) - int32 offset_for_ref_frame[PS_MAX_NUM_REF_FRAMES_IN_PIC_ORDER_CNT_CYCLE]; // se(v) - unsigned num_ref_frames; // ue(v) - Boolean gaps_in_frame_num_value_allowed_flag; // u(1) - unsigned pic_width_in_mbs_minus1; // ue(v) - unsigned pic_height_in_map_units_minus1; // ue(v) - Boolean frame_mbs_only_flag; // u(1) - // if( !frame_mbs_only_flag ) - Boolean mb_adaptive_frame_field_flag; // u(1) - Boolean direct_8x8_inference_flag; // u(1) - Boolean frame_cropping_flag; // u(1) - unsigned frame_crop_left_offset; // ue(v) - unsigned frame_crop_right_offset; // ue(v) - unsigned frame_crop_top_offset; // ue(v) - unsigned frame_crop_bottom_offset; // ue(v) - Boolean vui_parameters_present_flag; // u(1) - vui_parameters_s vui_parameters; // vui_seq_parameters_s - - TUint8 indexChanged; // Flag for changed PPS Id (because of Id conflict in clip (can happen in e.g. merge, cut operations) - TUint newSPSId; - TUint SPSlength; - TUint8* codedSPSBuffer; - TUint encSPSId; - TUint origSPSId; - TUint8 maxFrameNumChanged; - TUint origMaxFrameNum; - TUint encMaxFrameNum; - TUint8 maxPOCNumChanged; - TUint origMaxPOCNum; - TUint encMaxPOCNum; -} seq_parameter_set_s; - - - -/* - * Function prototypes - */ - - - -TInt psParseLevelFromSPS( bitbuffer_s *bitbuf, TInt& aLevel ); - -TInt AddBytesToBuffer(bitbuffer_s *aBitBuffer, TUint aNumBytes); - -int psDecodeSPS( bitbuffer_s *bitbuf, seq_parameter_set_s **spsList, - TInt& aWidth, TInt& aHeight ); - -void psCloseParametersSets(seq_parameter_set_s **spsList, - pic_parameter_set_s **ppsList); - -void psClosePPS( pic_parameter_set_s *pps ); - -void psCloseSPS( seq_parameter_set_s *sps ); - - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - -TInt psParseSPS( bitbuffer_s *bitbuf, seq_parameter_set_s **spsList, TUint aFrameFromEncoder, TBool *aEncodeUntilIDR, TUint *aNumSPS ); - -TInt psParsePPS( bitbuffer_s *bitbuf, pic_parameter_set_s **ppsList, seq_parameter_set_s **spsList, - TUint aFrameFromEncoder, TUint *aNumPPS ); - -void psGetAspectRatio(seq_parameter_set_s *sps, int *width, int *height); - -TInt GetNumTrailingBits(bitbuffer_s *aBitBuffer); - -TInt ReturnUnsignedExpGolombCodeLength(TUint aValue); - -void EncodeUnsignedExpGolombCode(bitbuffer_s *aBitBuffer, TUint aValue); - -void ShiftBitBufferBitsRight(bitbuffer_s *aBitBuffer, TInt aDiff); - -void ShiftBitBufferBitsLeft(bitbuffer_s *aBitBuffer, TInt aDiff); - -void ShiftBufferLeftByOneByte(bitbuffer_s *aBitBuffer); - -void ShiftBufferRightByOneByte(bitbuffer_s *aBitBuffer); - -void ShiftBufferRight(bitbuffer_s *aBitBuffer, TInt aDiff, TUint aTrailingBits, TUint aOldIdLength); - -void ShiftBufferLeft(bitbuffer_s *aBitBuffer, TInt aDiff, TUint aOldIdLength); - - -#endif // VIDEOEDITORENGINE_AVC_EDITING - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/sequence.h --- a/videoeditorengine/avcedit/inc/sequence.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _SEQUENCE_H_ -#define _SEQUENCE_H_ - - -#include "globals.h" -#include "framebuffer.h" -#include "slice.h" -#include "bitbuffer.h" - - -/* - * Definitions of NAL types - */ -#define NAL_TYPE_UNSPECIFIED 0 -#define NAL_TYPE_CODED_SLICE 1 -#define NAL_TYPE_CODED_SLICE_P_A 2 -#define NAL_TYPE_CODED_SLICE_P_B 3 -#define NAL_TYPE_CODED_SLICE_P_C 4 -#define NAL_TYPE_CODED_SLICE_IDR 5 -#define NAL_TYPE_SEI 6 -#define NAL_TYPE_SPS 7 -#define NAL_TYPE_PPS 8 -#define NAL_TYPE_PIC_DELIMITER 9 -#define NAL_TYPE_END_SEQ 10 -#define NAL_TYPE_END_STREAM 11 -#define NAL_TYPE_FILLER_DATA 12 - - -typedef struct _sequence_s -{ - - dpb_s *dpb; - - frmBuf_s *outputQueue[DPB_MAX_SIZE]; - int outputQueuePos; - int numQueuedOutputPics; - - bitbuffer_s *bitbuf; - - int sliceNums[PS_MAX_NUM_SLICE_GROUPS]; - - seq_parameter_set_s *spsList[PS_MAX_NUM_OF_SPS]; - pic_parameter_set_s *ppsList[PS_MAX_NUM_OF_PPS]; - - slice_s *currSlice; - slice_s *nextSlice; - - int isFirstSliceOfSeq; - int isPicBoundary; - int isCurrPicFinished; - int isDpbStorePending; - int isSeqFinished; - - unsigned int redundantPicCnt; - - int32 unusedShortTermFrameNum; - int32 prevFrameNum; - int32 prevRefFrameNum; - - /* for POC type 0 : */ - int32 pocMsb; - int32 prevPocMsb; - int32 prevPocLsb; - /* for POC type 1 : */ - int32 frameNumOffset; - int32 prevFrameNumOffset; - - /* The previous decoded picture in decoding order includes */ - /* a memory_management_control_operation equal to 5 */ - int prevPicHasMMCO5; - - mbAttributes_s *mbData; - frmBuf_s *recoBuf; - - TUint iFrameNumber; - TUint iFromEncoder; - TUint sliceDataModified; - - TBool iEncodeUntilIDR; // Encoded beginning of a clip has different SPS than the original - TBool iBitShiftInSlice; - - TUint iNumSPS; - TUint iNumPPS; - - TUint iPreviousPPSId; - - // [KW]: For testing, remove later!!! - TUint iTotalFrameNumber; - -} sequence_s; - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/slice.h --- a/videoeditorengine/avcedit/inc/slice.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _SLICE_H_ -#define _SLICE_H_ - - -#include "globals.h" -#include "nrctyp32.h" -#include "bitbuffer.h" -#include "framebuffer.h" -#include "motcomp.h" -#include "parameterset.h" -#include "dpb.h" -#include - -/* Error codes */ -#define SLICE_ERR_NON_EXISTING_PPS -5 -#define SLICE_ERR_NON_EXISTING_SPS -4 -#define SLICE_ERR_UNSUPPORTED_FEATURE -3 -#define SLICE_ERR_ILLEGAL_VALUE -2 -#define SLICE_ERROR -1 -#define SLICE_OK 0 -#define SLICE_STOP_PARSING 1 -#define SLICE_STOP_PARSING 1 - -#define MAX_SLICE_GROUP_NUM 8 -#define MAX_NUM_OF_REORDER_CMDS 17 -#define MAX_NUM_OF_MMCO_OPS 35 - - -typedef struct _sliceMMCO_s { - unsigned int memory_management_control_operation; - unsigned int difference_of_pic_nums_minus1; - unsigned int long_term_pic_num; - unsigned int long_term_frame_idx; - unsigned int max_long_term_frame_idx_plus1; -} sliceMMCO_s; - - -typedef struct _sliceRefPicListReorderCmd_s { - unsigned int reordering_of_pic_nums_idc; - unsigned int abs_diff_pic_num_minus1; - unsigned int long_term_pic_num; -} sliceRefPicListReorderCmd_s; - - - -typedef struct _slice_s { - - /* Copied from NAL deader */ - int nalType; - int nalRefIdc; - - u_int32 maxFrameNum; - - unsigned int isIDR; - unsigned int qp; - unsigned int picHasMMCO5; - - /* - * These are slice header syntax elements - */ - - unsigned int first_mb_in_slice; - unsigned int slice_type; - unsigned int pic_parameter_set_id; - unsigned int frame_num; - - unsigned int idr_pic_id; - - unsigned int pic_order_cnt_lsb; - int32 delta_pic_order_cnt_bottom; - - int32 delta_pic_order_cnt_0; - int32 delta_pic_order_cnt_1; - - unsigned int redundant_pic_cnt; - - unsigned int num_ref_idx_active_override_flag; - unsigned int num_ref_idx_l0_active_minus1; - - unsigned int ref_pic_list_reordering_flag0; - sliceRefPicListReorderCmd_s reorderCmdList[MAX_NUM_OF_REORDER_CMDS]; - -/* pred_weight_table() */ - - /* if( nal_unit_type = = 5 ) */ - unsigned int no_output_of_prior_pics_flag; - unsigned int long_term_reference_flag; - /* else */ - unsigned int adaptive_ref_pic_marking_mode_flag; - sliceMMCO_s mmcoCmdList[MAX_NUM_OF_MMCO_OPS]; - - int slice_qp_delta; - - unsigned int disable_deblocking_filter_idc; - int slice_alpha_c0_offset_div2; - int slice_beta_offset_div2; - - unsigned int slice_group_change_cycle; - - TInt bitOffset; - TUint sliceDataModified; -} slice_s; - - -slice_s *sliceOpen(); - -void sliceClose(slice_s *slice); - -TInt ParseSliceHeader(slice_s *slice, seq_parameter_set_s *spsList[], - pic_parameter_set_s *ppsList[], bitbuffer_s *bitbuf, - TUint* frameNumber, TUint aFrameFromEncoder); - -TInt sliceParseMacroblocks(slice_s *slice, frmBuf_s *recoBuf, dpb_s *dpb, - pic_parameter_set_s *pps, - mbAttributes_s *mbData, TInt sliceID, - bitbuffer_s *bitbuf, - TBool aBitShiftInSlice); - -int sliceInitRefPicList(dpb_s *dpb, frmBuf_s *refPicList[]); - -int sliceFixRefPicList(dpb_s *dpb, frmBuf_s *refPicList[], - int numRefPicActive, int numExistingRefFrames, - int width, int height); - -void EncodeUnsignedNBits(bitbuffer_s *aBitBuffer, TUint aValue, TUint aLength); - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/vedavcedit.h --- a/videoeditorengine/avcedit/inc/vedavcedit.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* A header file defining the AVC editing API. -* -* -*/ - - - -#ifndef VEDAVCEDIT_H -#define VEDAVCEDIT_H - -#include - -/** -* CVedAVCEdit abstract base class for AVC editing class -* -* @lib vedAVCEdit -* @since -*/ -class CVedAVCEdit : public CBase - { - - public: // Constants - - public: // Constructors and destructor - - /** - * Two-phased constructor. - * - */ - IMPORT_C static CVedAVCEdit* NewL(); - - /** - * Destructor. - */ - virtual ~CVedAVCEdit(); - - public: // New functions - - /* - * Add MDF specific NAL headers to input AVC frame - * - * @param aBuf Input/output buffer - * @param aFrameLen Input/output frame length - * @param aDecInfoSize Decoder specific info size - * @param aFirstFrame ETrue for first frame in sequence - */ - virtual void ProcessAVCBitStreamL(TDes8& aBuf, TInt& aFrameLen, TInt aDecInfoSize, TBool aFirstFrame) = 0; - - /* - * Calculate default value for no. of buffered frames according to - * H.264 spec Annex A - * - * @param aLevel AVC level - * @param aResolution Video resolution - */ - virtual TInt GetMaxAVCFrameBuffering(TInt aLevel, TSize aResolution) = 0; - - /* - * Get input bitstream level from SPS. Note: SPS Nal unit must be at the - * beginning of the input buffer - * - * @param aBuf Input buffer containing SPS - * @param aLevel Output: Baseline profile level - */ - virtual TInt GetLevel(TDesC8& aBuf, TInt& aLevel) = 0; - - /* - * Get input bitstream video resolution from SPS. Note: SPS Nal unit must - * be at the beginning of the input buffer - * - * @param aBuf Input buffer containing SPS - * @param aResolution Output: Resolution - */ - virtual TInt GetResolution(TDesC8& aBuf, TSize& aResolution) = 0; - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - - /* - * Convert AVC specific decoder config info to AVCDecoderConfigurationRecord -format - * - * @param aSrcBuf Source buffer containing SPS/PPS NAL units in AVC MDF buffer format - * @param aDstBuf Destination buffer for AVCDecoderConfigurationRecord - */ - virtual void ConvertAVCHeaderL(TDesC8& aSrcBuf, TDes8& aDstBuf ) = 0; - - /* - * Save SPS/PPS NAL units from AVCDecoderConfigurationRecord - * for later use - * - * @param aBuf Input buffer containing AVCDecoderConfigurationRecord - */ - virtual void SaveAVCDecoderConfigurationRecordL(TDes8& aBuf, TBool aFromEncoder) = 0; - - /* - * Update slice header information: frame number and PPS id - * - * @param aBuf Buffer containing input frame - * @param aContainsDCR ETrue if AVC decoder config. record is included - * @param aFromEncoder ETrue if frame comes from the encoder - */ - virtual TInt ParseFrame(HBufC8*& aBuf, TBool aContainsDCR, TBool aFromEncoder) = 0; - - /* - * Constructs AVCDecoderConfigurationRecord for the whole sequence, taking - * into account all input DCR's - * - * @param aDstBuf Destination buffer for AVCDecoderConfigurationRecord - * @param aLevel Level output sequence - */ - virtual void ConstructAVCDecoderConfigurationRecordL( TDes8& aDstBuf ) = 0; - - /* - * Set length of NAL size field of output sequence - * - * @param aSize Length of size field in bytes - */ - virtual void SetNALLengthSize( TInt aSize ) = 0; - - /* - * Set output level for constructing AVCDecoderConfigurationRecord - * - * @param aLevel Output level - */ - virtual void SetOutputLevel(TInt aLevel) = 0; - - /* - * Check if encoding is required until the next IDR unit - * - */ - virtual TBool EncodeUntilIDR() = 0; - - /* - * Check if NAL unit is an IDR NAL - * - * @param aNalBuf buffer containing NAL unit - */ - virtual TBool IsNALUnitIDR( TDes8& aNalBuf ) = 0; - - /* - * Store PPS id from the current slice - * - * @param aNalBuf buffer containing NAL unit - */ - virtual void StoreCurrentPPSId( TDes8& aNalBuf ) = 0; - - /* - * Generate a not coded frame - * - * @param aNalBuf buffer containing NAL unit - */ - virtual TInt GenerateNotCodedFrame( TDes8& aNalBuf, TUint aFrameNumber ) = 0; - - /* - * Modify the frame number of the NAL unit - * - * @param aNalBuf buffer containing NAL unit - */ - virtual void ModifyFrameNumber( TDes8& aNalBuf, TUint aFrameNumber ) = 0; -#endif - -}; - - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/vedavceditimp.h --- a/videoeditorengine/avcedit/inc/vedavceditimp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* A header file for implementation class of AVC editing API. -* -*/ - - - -#ifndef VEDAVCEDITIMP_H -#define VEDAVCEDITIMP_H - -// INCLUDES -#include "avcdapi.h" -#include "vedavcedit.h" - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -/** -* CTranscoder Implementation class -* @lib VEDAVCEDIT.LIB -* @since -*/ - -NONSHARABLE_CLASS(CVedAVCEditImp) : public CVedAVCEdit -{ - - public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CVedAVCEditImp* NewL(); - - /** - * Destructor. - */ - ~CVedAVCEditImp(); - - public: // Functions from CVedAVCEdit - - /** - * From CVedAVCEdit Add MDF specific NAL headers to input AVC frame - */ - void ProcessAVCBitStreamL(TDes8& aBuf, TInt& aFrameLen, TInt aDecInfoSize, TBool aFirstFrame); - - /** - * From CVedAVCEdit Calculate default value for max no. of buffered frames - */ - TInt GetMaxAVCFrameBuffering(TInt aLevel, TSize aResolution); - - /** - * From CVedAVCEdit Get input bitstream level from SPS - */ - TInt GetLevel(TDesC8& aBuf, TInt& aLevel); - - /** - * From CVedAVCEdit Get input bitstream resolution from SPS - */ - TInt GetResolution(TDesC8& aBuf, TSize& aResolution); - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - - /** - * From CVedAVCEdit Convert AVC decoder config info to AVCDecoderConfigurationRecord -format - */ - void ConvertAVCHeaderL(TDesC8& aSrcBuf, TDes8& aDstBuf ); - - /** - * From CVedAVCEdit Save SPS/PPS NAL units from AVCDecoderConfigurationRecord - */ - void SaveAVCDecoderConfigurationRecordL(TDes8& aBuf, TBool aFromEncoder); - - /** - * From CVedAVCEdit Update slice header information: frame number and PPS id - */ - TInt ParseFrame(HBufC8*& aBuf, TBool aContainsDCR, TBool aFromEncoder); - - /** - * From CVedAVCEdit Constructs AVCDecoderConfigurationRecord for the output sequence - */ - void ConstructAVCDecoderConfigurationRecordL( TDes8& aDstBuf ); - - /** - * From CVedAVCEdit Set length of NAL size field of output sequence - */ - void inline SetNALLengthSize( TInt aSize ) { iNalLengthSize = aSize; } - - /** - * From CVedAVCEdit Set output level for constructing AVCDecoderConfigurationRecord - */ - void inline SetOutputLevel(TInt aLevel) { iOutputLevel = aLevel; } - - /** - * From CVedAVCEdit Check if encoding is required until the next IDR unit - */ - TBool EncodeUntilIDR(); - - /** - * From CVedAVCEdit Check if NAL unit is an IDR NAL - */ - TBool IsNALUnitIDR( TDes8& aNalBuf ); - - /** - * From CVedAVCEdit Store PPS id from current slice - */ - void StoreCurrentPPSId( TDes8& aNalBuf ); - - /** - * From CVedAVCEdit Generate a not coded frame - */ - TInt GenerateNotCodedFrame( TDes8& aNalBuf, TUint aFrameNumber ); - - /** - * From CVedAVCEdit Modify the frame number of the NAL unit - */ - void ModifyFrameNumber( TDes8& aNalBuf, TUint aFrameNumber ); - -private: // Private methods - - /* - * Saves one SPS/PPS NAL unit for later use - * - * @param aBuf Input buffer containing AVCDecoderConfigurationRecord - */ - TInt ParseOneNAL(void *aNalUnitData, TUint* aNalUnitLength, TBool aFromEncoder); - - TInt ParseParameterSet(void *aNalUnitData, TUint* aNalUnitLength, TBool aFromEncoder); -#endif - - private: - - /** - * C++ default constructor. - */ - CVedAVCEditImp(); - - /** - * 2nd phase constructor - */ - void ConstructL(); - - private: // Data - - avcdDecoder_t* iAvcDecoder; // For parsing AVC content / for CD operations - - TInt iFrameLengthBytes; // no. of bytes used for length field - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - - TInt iNalLengthSize; // The number of bytes used to signal NAL unit's length - - TInt iOutputLevel; // output level - -#endif - -}; - - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/inc/vld.h --- a/videoeditorengine/avcedit/inc/vld.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef _VLC_H_ -#define _VLC_H_ - - -#include "bitbuffer.h" - - -#define VLD_OK 0 -#define VLD_ERROR -1 -#define VLD_ERR_MAX_CW_LEN_EXCEEDED -2 - - -typedef struct _vldMBtype_s { - int type; - int intraType; - int intraMode; - int interMode; - int inter8x8modes[4]; - int cbpY; - int cbpC; - int cbpChromaDC; -} vldMBtype_s; - - -unsigned int vldGetFLC(bitbuffer_s *bitbuf, int len); - -unsigned int vldGetUVLC(bitbuffer_s *bitbuf); - -int32 vldGetSignedUVLClong(bitbuffer_s *bitbuf); - -u_int32 vldGetUVLClong(bitbuffer_s *bitbuf); - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - -void vldInvZigZagScan4x4(int *src, int dest[BLK_SIZE][BLK_SIZE]); - -int vldGetSignedUVLC(bitbuffer_s *bitbuf); - -int getLumaBlkCbp(int cbpY); - -void setChromaCbp(int nc, int *cbpDC, int *cbp); - -unsigned int vldGetRunIndicator(bitbuffer_s *bitbuf); - -int vldGetMBtype(bitbuffer_s *bitbuf, vldMBtype_s *hdr, int picType); - -int vldGetIntraPred(bitbuffer_s *bitbuf, int8 *ipTab); - -int vldGetChromaIntraPred(bitbuffer_s *bitbuf); - -int vldGetMotVecs(bitbuffer_s *bitbuf, int interMode, int numRefFrames, - int *refNum, int predVecs[][2], int numVecs); - -int vldGetCBP(bitbuffer_s *bitbuf, int type, - int *cbpY, int *cbpChromaDC, int *cbpC); - -int vldGetDeltaqp(bitbuffer_s *bitbuf, int *delta_qp); - -int vldGetLumaDCcoeffs(bitbuffer_s *bitbuf, int coef[4][4], - int8 *numCoefUpPred, int8 *numCoefLeftPred, - int mbAvailBits); - -int vldGetLumaCoeffs(bitbuffer_s *bitbuf, int mbType, int intraType, - int *cbpY, int coef[4][4][4][4], int8 *numCoefUpPred, - int8 *numCoefLeftPred, int mbAvailBits); - -void vldGetZeroLumaCoeffs(int8 *numCoefUpPred, int8 *numCoefLeftPred); - -int vldGetChromaDCcoeffs(bitbuffer_s *bitbuf, int coef[2][2][2], int *cbpDC); - -int vldGetChromaCoeffs(bitbuffer_s *bitbuf, int coef[2][2][2][4][4], int *cbp, - int8 *numCoefUpPred, int8 *numCoefUpPredV, - int8 *numCoefLeftPred, int8 *numCoefLeftPredV, - int mbAvailBits); - -void vldGetZeroChromaCoeffs(int8 *numCoefUpPredU, int8 *numCoefUpPredV, - int8 numCoefLeftPred[2][2]); - -void vldGetAllCoeffs(int8 *numCoefUpPredY, int8 *numCoefUpPredU, - int8 *numCoefUpPredV, int8 *numCoefLeftPredY, - int8 numCoefLeftPredC[2][2]); - -int vldSetUVLC(int codeNumber, int* codeword, int* codewordLength); - -#endif // VIDEOEDITORENGINE_AVC_EDITING - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/bitbuffer.cpp --- a/videoeditorengine/avcedit/src/bitbuffer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,613 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include "globals.h" -#include "nrctyp32.h" -#include "bitbuffer.h" - -#include "parameterset.h" - - -/* - * Static functions - */ - -static int removeStartCodeEmulationBytes(bitbuffer_s *bitbuf); -static int addStartCodeEmulationBytes(bitbuffer_s *bitbuf); - - -/* - * - * bibOpen: - * - * Parameters: - * - * Function: - * Open bitbuffer - * - * Returns: - * Pointer to bitbuffer object or NULL for allocation failure. - * - */ -bitbuffer_s *bibOpen() -{ - bitbuffer_s *bitbuf; - - bitbuf = (bitbuffer_s *)User::Alloc(sizeof(bitbuffer_s)); - - if (bitbuf != NULL) - memset(bitbuf, 0, sizeof(bitbuffer_s)); - - return bitbuf; -} - - -/* - * - * bibInit: - * - * Parameters: - * bitbuf Bitbuffer object - * streamBytes Pointer to data - * length Data length in bytes - * - * Function: - * Initialize bitbuffer - * - * Returns: - * BIB_ok for ok, BIB_ERROR for error - * - */ -int bibInit(bitbuffer_s *bitbuf, u_int8 *streamBytes, int length) -{ - bitbuf->data = streamBytes; - bitbuf->dataLen = length; - bitbuf->bytePos = 0; - bitbuf->bitpos = 0; - bitbuf->errorStatus = BIB_OK; - -#if ENCAPSULATED_NAL_PAYLOAD - if (removeStartCodeEmulationBytes(bitbuf) < 0) - return BIB_ERROR; -#endif - - return BIB_OK; -} - - -/* - * - * bibClose: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Close bitbuffer - * - * Returns: - * - - * - */ -void bibClose(bitbuffer_s *bitbuf) -{ - User::Free(bitbuf); -} - - -/* - * - * removeStartCodeEmulationBytes: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Remove start code emulation bytes from the bitbuffer - * - * Returns: - * - - * - */ -static int removeStartCodeEmulationBytes(bitbuffer_s *bitbuf) -{ - TInt i; - TInt j; - TInt numZero; - TInt32 lastBytes; - - - // Skip the start code if it exists - numZero = 0; - i = 0; - while (i < bitbuf->dataLen) - { - if (bitbuf->data[i] == 0) - numZero++; - else if (numZero > 1 && bitbuf->data[i] == 1) - { - // Start code found - i++; - break; - } - else - { - // No start code found - i = 0; - break; - } - i++; - } - - // Convert EBSP to RBSP. Note that the nal head byte is kept within the buffer - lastBytes = 0xffffffff; - j = 0; - while (i < bitbuf->dataLen) - { - lastBytes = (lastBytes << 8) | bitbuf->data[i]; - if ((lastBytes & 0xffffff) != 0x000003) - { - bitbuf->data[j] = bitbuf->data[i]; - j++; - } - i++; - } - - // If bytes were removed, set as many bytes zero at the end of the buffer - if (j < bitbuf->dataLen) - { - // Prevention bytes have been removed, set the last bytes to zero - TInt removedBytes = bitbuf->dataLen - j; - for (i=0; idata[bitbuf->dataLen-1-i] = 0; - } - } - - // Adjust the bitbuffer dataLen - bitbuf->dataLen = j; - - return BIB_OK; -} - - -/* - * - * bibGetBitFunc: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Get next bit from bitbuffer. - * - * Returns: - * Next bit in bitbuffer or BIB_ERR_NO_BITS if no bits left. - * - */ -int bibGetBitFunc(bitbuffer_s *bitbuf) -{ - /* If there are no bits left in buffer return an error */ - if (bitbuf->bitpos == 0 && bitbuf->bytePos >= bitbuf->dataLen) { - bitbuf->errorStatus = BIB_ERR_NO_BITS; - return 0; - } - - /* Fill bitbuf->currentBits with bits */ - while (bitbuf->bitpos <= 24 && bitbuf->bytePos < bitbuf->dataLen) { - bitbuf->currentBits = (bitbuf->currentBits << 8) | bitbuf->data[bitbuf->bytePos++]; - bitbuf->bitpos += 8; - } - - /* Return bit */ - bitbuf->bitpos--; - return (bitbuf->currentBits >> bitbuf->bitpos) & 1; -} - - -/* - * - * bibGetBitsFunc: - * - * Parameters: - * bitbuf Bitbuffer object - * n Number of bits requested - * - * Function: - * Get next n bits from bitbuffer. - * - * NOTE: maximum of 24 bits can be fetched - * - * Returns: - * Next n bits from bitbuffer - * - */ -int32 bibGetBitsFunc(bitbuffer_s *bitbuf, int n) -{ - /* Fill bitbuf->currentBits with bits */ - while (n > bitbuf->bitpos && bitbuf->bytePos < bitbuf->dataLen) { - bitbuf->currentBits = (bitbuf->currentBits << 8) | bitbuf->data[bitbuf->bytePos++]; - bitbuf->bitpos += 8; - } - - /* If there are not enought bits there was an error */ - if (n > bitbuf->bitpos) { - bitbuf->errorStatus = BIB_ERR_NO_BITS; - return 0; - } - - /* Return bits */ - bitbuf->bitpos -= n; - return (bitbuf->currentBits >> (bitbuf->bitpos)) & ~(((u_int32)-1)<currentBits with bits */ - while (n > bitbuf->bitpos && bitbuf->bytePos < bitbuf->dataLen) { - bitbuf->currentBits = (bitbuf->currentBits << 8) | bitbuf->data[bitbuf->bytePos++]; - bitbuf->bitpos += 8; - } - - /* Check if there are enought bits in currentBits */ - if (n <= bitbuf->bitpos) - /* Return bits normally */ - return (bitbuf->currentBits >> (bitbuf->bitpos-n)) & ~(((u_int32)-1)<currentBits << (n-bitbuf->bitpos)) & ~(((u_int32)-1)<currentBits with bits */ - while (n > bitbuf->bitpos && bitbuf->bytePos < bitbuf->dataLen) { - bitbuf->currentBits = (bitbuf->currentBits << 8) | bitbuf->data[bitbuf->bytePos++]; - bitbuf->bitpos += 8; - } - - bitbuf->bitpos -= n; - - /* Check for buffer underrun */ - if (bitbuf->bitpos < 0) { - bitbuf->errorStatus = BIB_ERR_NO_BITS; - return BIB_ERR_NO_BITS; - } - - return BIB_OK; -} - - -/* - * - * bibGetByte: - * - * Parameters: - * bitbuf Bitbuffer object - * byteRet Return pointer for byte - * - * Function: - * Get next byte aligned byte from bitbuffer. - * - * Returns: - * 1 for End Of Stream, 0 otherwise - * - */ -int bibGetByte(bitbuffer_s *bitbuf, int *byteRet) -{ - if (bitbuf->bitpos >= 8) { - bitbuf->bitpos = bitbuf->bitpos & ~7; - *byteRet = (bitbuf->currentBits >> (bitbuf->bitpos - 8)) & 0xff; - bitbuf->bitpos -= 8; - } - else { - bitbuf->bitpos = 0; - - if (bitbuf->bytePos >= bitbuf->dataLen) { - return 1; - } - - *byteRet = bitbuf->data[bitbuf->bytePos++]; - } - - return 0; -} - - -/* - * - * bibByteAlign: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Set bitbuffer pointer to next byte aligned position. - * - * Returns: - * Number of bits skipped as a result of aligning. - * - */ -int bibByteAlign(bitbuffer_s *bitbuf) -{ - int bitpos = bitbuf->bitpos; - - bitbuf->bitpos = bitbuf->bitpos & ~7; - - return (bitpos - bitbuf->bitpos); -} - - -/* - * bibSkipTrailingBits: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Skip the trailing bits at the end of a NAL unit - * - * Returns: - * The number of bits being skipped or <0 for error. - */ -int bibSkipTrailingBits(bitbuffer_s *bitbuf) -{ - int ret; - int len = 0; - int bit = 0; - - bit = bibGetBitFunc(bitbuf); - len++; - - ret = bibGetStatus(bitbuf); - if (ret < 0) - return ret; - - /* First we expect to receive 1 bit */ - if (bit != 1) { - bibRaiseError(bitbuf, BIB_INCORRECT_TRAILING_BIT); - return BIB_INCORRECT_TRAILING_BIT; - } - - /* Remaining bits in current byte should be zero */ - while ( bitbuf->bitpos % 8 != 0 ) { - bibGetBit(bitbuf, &bit); - len++; - if (bit != 0) { - bibRaiseError(bitbuf, BIB_INCORRECT_TRAILING_BIT); - return BIB_INCORRECT_TRAILING_BIT; - } - } - - ret = bibGetStatus(bitbuf); - if (ret < 0) - return ret; - - return len; -} - - -/* - * bibMoreRbspData: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Check if there is more RBSP data in the bitbuffer. - * - * Returns: - * 0: no more rbsp data - * 1: more rbsp data - */ -int bibMoreRbspData(bitbuffer_s *bitbuf) -{ - int numBytesLeft; - u_int32 lastBits; - - numBytesLeft = bitbuf->dataLen - bitbuf->bytePos; - - if (numBytesLeft >= 2 || (numBytesLeft*8 + bitbuf->bitpos >= 9)) - /* If there are at least 9 bits left, it is certain to have more rbsp data */ - return 1; - - if (numBytesLeft == 0 && bitbuf->bitpos == 0) - /* Something may be wrong. Normally, there should be at least one bit left */ - return 0; - - if (numBytesLeft == 1) { - /* Insert last byte to currentBits */ - bitbuf->currentBits = (bitbuf->currentBits << 8) | bitbuf->data[bitbuf->bytePos++]; - bitbuf->bitpos += 8; - } - - /* Copy the last bits into "lastBits", then compare it with 0x1..00 */ - lastBits = bitbuf->currentBits & ~(((u_int32)-1)<bitpos); - - if (lastBits == ((u_int32)1 << (bitbuf->bitpos-1))) - return 0; - else - return 1; -} - - -/* - * bibGetNumOfRemainingBits: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Return number of bits in bitbuffer. - * - * Returns: - * Number of bits - */ -int32 bibGetNumRemainingBits(bitbuffer_s *bitbuf) -{ - return bitbuf->bitpos + 8*(bitbuf->dataLen - bitbuf->bytePos); -} - - -// syncBitBufferBitpos -// Synchronizes the input bit buffer's bit position to be between one and eight, -// modifies the byte position and current bits if required. -void syncBitBufferBitpos(bitbuffer_s *bitbuf) -{ - // To be able to edit the bitbuffer, reset the bit position to be eight at the maximum - while (bitbuf->bitpos > 8) - { - // If bit position is modified, then modify byte position and current bits accordingly - bitbuf->bitpos -= 8; - bitbuf->bytePos--; - bitbuf->currentBits >>= 8; - } -} - - -// addStartCodeEmulationBytes -// Adds start code emulation bytes to the input bit buffer. -static int addStartCodeEmulationBytes(bitbuffer_s *bitbuf) -{ - TInt i = 0; - TInt32 lastBytes; - - - // Add prevention bytes that were removed for processing - lastBytes = 0xffffffff; - while (i < bitbuf->dataLen) - { - lastBytes = (lastBytes << 8) | bitbuf->data[i]; - - if(((lastBytes & 0xffff) == 0x0000) && ((i+1) < bitbuf->dataLen) && (bitbuf->data[i+1] < 4)) - { - // Add byte(s) to the bit buffer - TInt error = AddBytesToBuffer(bitbuf, 1); - - if (error != 0) - return error; - - // Adjust data length - bitbuf->dataLen++; - - // Make room for the emulation prevention byte 0x03 to the buffer - for (TInt k=bitbuf->dataLen; k>i; k--) - { - bitbuf->data[k] = bitbuf->data[k-1]; - } - - // Add the emulation prevention byte to the buffer - bitbuf->data[i+1] = 0x03; - } - - i++; - } - return KErrNone; -} - - -// bibEnd -// Takes care of the bit buffer after the frame has been processed. -int bibEnd(bitbuffer_s *bitbuf) -{ -#if ENCAPSULATED_NAL_PAYLOAD - return addStartCodeEmulationBytes(bitbuf); -#endif -} - - -// addStartCodeEmulationBytesSlice -// Adds start code emulation bytes to the input bit buffer. -static void addStartCodeEmulationBytesSlice(bitbuffer_s *bitbuf) -{ - TInt i = 0; - TInt32 lastBytes; - - - // Add prevention bytes that were removed for processing - lastBytes = 0xffffffff; - while (i < bitbuf->dataLen) - { - lastBytes = (lastBytes << 8) | bitbuf->data[i]; - - if(((lastBytes & 0xffff) == 0x0000) && ((i+1) < bitbuf->dataLen) && (bitbuf->data[i+1] < 4)) - { - // Make room for the emulation prevention byte 0x03 to the buffer - for (TInt k=bitbuf->dataLen; k>i; k--) - { - bitbuf->data[k] = bitbuf->data[k-1]; - } - // Adjust data length - bitbuf->dataLen++; - - // Add the emulation prevention byte to the buffer - bitbuf->data[i+1] = 0x03; - } - - i++; - } -} - - -// bibEndSlice -// Takes care of the bit buffer after the frame has been processed. -void bibEndSlice(bitbuffer_s *bitbuf) -{ -#if ENCAPSULATED_NAL_PAYLOAD - addStartCodeEmulationBytesSlice(bitbuf); -#endif -} - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/dpb.cpp --- a/videoeditorengine/avcedit/src/dpb.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,574 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include "globals.h" -#include "framebuffer.h" -#include "dpb.h" - - - -/* - * - * dpbOpen: - * - * Parameters: - * - * Function: - * Allocate DPB. - * - * Returns: - * Pointer to dpb or NULL - * - */ -dpb_s *dpbOpen() -{ - dpb_s *dpb; - - dpb = (dpb_s *)User::Alloc(sizeof(dpb_s)); - - if (dpb != NULL) - memset(dpb, 0, sizeof(dpb_s)); - - return dpb; -} - - -/* - * - * dpbClose: - * - * Parameters: - * dpb DPB object - * - * Function: - * Deinitialize DPB. - * - * Returns: - * - - * - */ -void dpbClose(dpb_s *dpb) -{ - int i; - - for (i = 0; i < DPB_MAX_SIZE; i++) - frmCloseRef(dpb->buffers[i]); - - User::Free(dpb); -} - - -/* - * - * dpbSetSize: - * - * Parameters: - * dpb DPB object - * dpbSize New DPB size - * - * Function: - * Set DPB size in frames. - * - * Returns: - * - - * - */ -void dpbSetSize(dpb_s *dpb, int dpbSize) -{ - int i; - - /* If new DPB size is smaller than old, close any unneeded frame buffers */ - for (i = dpbSize; i < dpb->size; i++) { - frmCloseRef(dpb->buffers[i]); - dpb->buffers[i] = NULL; - } - - dpb->size = min(dpbSize, DPB_MAX_SIZE); -} - - -/* - * - * dpbGetNextOutputPic: - * - * Parameters: - * dpb DPB object - * dpbHasIDRorMMCO5 Set upon return if IDR picture or picture with - * MMCO5 command is found in DPB - * - * Function: - * Find next frame to output (frame with the lowest POC). - * Search is started from the last active frame in dpb and is - * stopped if all frames have been checked or IDR picture or - * picture with MMCO5 is found. - * - * Returns: - * Framebuffer with the lowest POC or 0 if DPB is empty - * - */ -frmBuf_s *dpbGetNextOutputPic(dpb_s *dpb, int *dpbHasIDRorMMCO5) -{ - frmBuf_s * tmpFrm; - int i; - - tmpFrm = 0; - - /* Find first output pic in decoding order */ - for (i = dpb->fullness-1; i >= 0; i--) { - if (dpb->buffers[i]->forOutput) { - tmpFrm = dpb->buffers[i]; - break; - } - } - - *dpbHasIDRorMMCO5 = 0; - - /* Find picture with lowest poc. Stop search if IDR or MMCO5 is found */ - for (; i >= 0; i--) { - if (dpb->buffers[i]->isIDR || dpb->buffers[i]->hasMMCO5) { - *dpbHasIDRorMMCO5 = 1; - break; - } - if (dpb->buffers[i]->forOutput && dpb->buffers[i]->poc < tmpFrm->poc) - tmpFrm = dpb->buffers[i]; - } - - return tmpFrm; -} - - -/* - * - * dpbStorePicture: - * - * Parameters: - * dpb DPB object - * currPic Current picture - * outputQueue Output queue - * - * Function: - * - Remove unused frames (non-reference, non-output frames) from the DPB. - * - If there is room in the DPB, put picture to DPB. - * - If there is no room in DPB, put pictures to output queue - * until frame is available. - * - * Returns: - * The number of pictures in output queue or negative value for error. - * - */ -int dpbStorePicture(dpb_s *dpb, frmBuf_s *currPic, frmBuf_s *outputQueue[]) -{ - frmBuf_s *tmpRemList[DPB_MAX_SIZE]; - frmBuf_s *tmpFrm; - int numFrm, numRemFrm; - int i; - int freeBufferFound; - int numOutput; - int dpbHasIDRorMMCO5; - - /* - * If the current picture is a reference picture and DPB is already full of - * reference pictures, we cannot insert current picture to DPB. Therefore, - * we force one reference picture out of DPB to make space for current - * picture. This situation can only happen with corrupted bitstreams. - */ - if (currPic->refType != FRM_NON_REF_PIC && - (dpb->numShortTermPics+dpb->numLongTermPics) == dpb->size) - { - if (dpb->numLongTermPics == dpb->size) - dpb->buffers[dpb->fullness-1]->refType = FRM_NON_REF_PIC; - else - dpbMarkLowestShortTermPicAsNonRef(dpb); - } - - /* - * Remove unused frames from dpb - */ - - numFrm = 0; - numRemFrm = 0; - for (i = 0; i < dpb->fullness; i++) { - if (dpb->buffers[i]->refType != FRM_NON_REF_PIC || dpb->buffers[i]->forOutput) { - dpb->buffers[numFrm] = dpb->buffers[i]; - numFrm++; - } - else { - /* Put unsused pics to temporary list */ - tmpRemList[numRemFrm] = dpb->buffers[i]; - numRemFrm++; - } - } - - /* Copy unused pics after active pics */ - for (i = 0; i < numRemFrm; i++) - dpb->buffers[numFrm+i] = tmpRemList[i]; - - dpb->fullness = numFrm; - - - /* - * Try to store current pic to dpb. If there is no room in dpb, we have to - * output some pictures to make room. - */ - - /* Case 1: if current pic is unused, it won't be stored in dpb */ - if (currPic->refType == FRM_NON_REF_PIC && !currPic->forOutput) { - return 0; - } - - /* Case 2: if there is space left in dpb, store current pic */ - if (dpb->fullness < dpb->size) { - - tmpFrm = dpb->buffers[dpb->fullness]; /* Unused frame */ - - tmpFrm = frmMakeRefFrame(currPic, tmpFrm); - if (tmpFrm == NULL) - return DPB_ERR_MEM_ALLOC; - - /* Move frames one position toward end of the list */ - for (i = dpb->fullness; i > 0; i--) - dpb->buffers[i] = dpb->buffers[i-1]; - - /* Always insert new frame to the beginning of the list */ - dpb->buffers[0] = tmpFrm; - dpb->fullness++; - - if (currPic->refType == FRM_SHORT_TERM_PIC) - dpb->numShortTermPics++; - else if (currPic->refType == FRM_LONG_TERM_PIC) - dpb->numLongTermPics++; - - /* Current picture is marked unused */ - currPic->forOutput = 0; - currPic->refType = FRM_NON_REF_PIC; - - /* No pictures in ouput queue */ - return 0; - } - - /* Case 3: output pictures with bumping process until there is space in dpb or - * current pic is non-reference and has lowest poc */ - freeBufferFound = 0; - numOutput = 0; - while (!freeBufferFound) { - - /* Next picture to output is a picture having smallest POC in DPB */ - tmpFrm = dpbGetNextOutputPic(dpb, &dpbHasIDRorMMCO5); - - /* Current picture is output if it is non-reference picture having */ - /* smaller POC than any of the pictures in DPB */ - if (currPic->refType == FRM_NON_REF_PIC && - (tmpFrm == 0 || (!dpbHasIDRorMMCO5 && currPic->poc < tmpFrm->poc))) - { - /* Output current picture */ - currPic->forOutput = 0; - outputQueue[numOutput] = currPic; - numOutput++; - freeBufferFound = 1; - } - else { - /* Output picture that we got from DPB */ - tmpFrm->forOutput = 0; - outputQueue[numOutput] = tmpFrm; - numOutput++; - if (tmpFrm->refType == FRM_NON_REF_PIC) - freeBufferFound = 1; - } - } - - return numOutput; -} - - -/* - * - * dpbUpdatePicNums: - * - * Parameters: - * dpb DPB object - * frameNum Current picture frame number - * maxFrameNum Maximum frame number - * - * Function: - * Compute picture numbers for all pictures in DPB. - * - * Returns: - * - - * - */ -void dpbUpdatePicNums(dpb_s *dpb, int32 frameNum, int32 maxFrameNum) -{ - int i; - frmBuf_s **refPicList; - - refPicList = dpb->buffers; - - for (i = 0; i < dpb->fullness; i++) { - if (refPicList[i]->refType == FRM_SHORT_TERM_PIC) { - /* Short term pictures */ - if (refPicList[i]->frameNum > frameNum) - refPicList[i]->picNum = refPicList[i]->frameNum - maxFrameNum; - else - refPicList[i]->picNum = refPicList[i]->frameNum; - } - else if (refPicList[i]->refType == FRM_LONG_TERM_PIC) - /* Long term pictures */ - refPicList[i]->longTermPicNum = refPicList[i]->longTermFrmIdx; - } -} - - -/* - * - * dpbMarkAllPicsAsNonRef: - * - * Parameters: - * dpb DPB object - * - * Function: - * Mark all picrures as non-reference pictures. - * - * Returns: - * - - * - */ -void dpbMarkAllPicsAsNonRef(dpb_s *dpb) -{ - int i; - - /* Mark all pictures as not used for reference */ - for (i = 0; i < dpb->fullness; i++) - dpb->buffers[i]->refType = FRM_NON_REF_PIC; - - dpb->numShortTermPics = 0; - dpb->numLongTermPics = 0; -} - - -/* - * - * dpbMarkLowestShortTermPicAsNonRef: - * - * Parameters: - * dpb DPB object - * - * Function: - * Mark short-term picture having lowest picture number as - * non-reference pictures. - * - * Returns: - * - - * - */ -void dpbMarkLowestShortTermPicAsNonRef(dpb_s *dpb) -{ - int picIdx; - int i; - - /* Find short term pic with lowest picNum */ - picIdx = -1; - for (i = dpb->fullness-1; i >= 0; i--) { - if (dpb->buffers[i]->refType == FRM_SHORT_TERM_PIC && - (picIdx < 0 || dpb->buffers[i]->picNum < dpb->buffers[picIdx]->picNum)) - picIdx = i; - } - - /* Mark short term pic with lowest picNum as not reference picture */ - if (picIdx >= 0) { - dpb->buffers[picIdx]->refType = FRM_NON_REF_PIC; - dpb->numShortTermPics--; - } -} - - -/* - * - * dpbMarkShortTermPicAsNonRef: - * - * Parameters: - * dpb DPB object - * picNum Picture number - * - * Function: - * Mark short-term picture having picture number picNum as - * non-reference picture. - * - * Returns: - * DPB_OK or DPB_ERR_PICTURE_NOT_FOUND - * - */ -int dpbMarkShortTermPicAsNonRef(dpb_s *dpb, int32 picNum) -{ - int i; - - for (i = 0; i < dpb->fullness; i++) { - if (dpb->buffers[i]->refType == FRM_SHORT_TERM_PIC && - dpb->buffers[i]->picNum == picNum) - { - dpb->buffers[i]->refType = FRM_NON_REF_PIC; - dpb->numShortTermPics--; - return DPB_OK; - } - } - - return DPB_ERR_PICTURE_NOT_FOUND; -} - - -/* - * - * dpbMarkLongTermPicAsNonRef: - * - * Parameters: - * dpb DPB object - * longTermPicNum Long-term picture number - * - * Function: - * Mark long-term picture having long-term picture number longTermPicNum - * as non-reference picture. - * - * Returns: - * DPB_OK or DPB_ERR_PICTURE_NOT_FOUND - * - */ -int dpbMarkLongTermPicAsNonRef(dpb_s *dpb, int longTermPicNum) -{ - int i; - - for (i = 0; i < dpb->fullness; i++) { - if (dpb->buffers[i]->refType == FRM_LONG_TERM_PIC && - dpb->buffers[i]->longTermPicNum == longTermPicNum) - { - dpb->buffers[i]->refType = FRM_NON_REF_PIC; - dpb->numLongTermPics--; - return DPB_OK; - } - } - - return DPB_ERR_PICTURE_NOT_FOUND; -} - - -/* - * - * dpbVerifyLongTermFrmIdx: - * - * Parameters: - * dpb DPB object - * longTermFrmIdx Long-term frame index - * - * Function: - * If there is a long-term picture having long term frame index - * longTermFrmIdx, mark that picture as non-reference picture. - * - * Returns: - * - - * - */ -void dpbVerifyLongTermFrmIdx(dpb_s *dpb, int longTermFrmIdx) -{ - int i; - - /* Check if longTermFrmIdx is already in use */ - for (i = 0; i < dpb->fullness; i++) { - if (dpb->buffers[i]->refType == FRM_LONG_TERM_PIC && - dpb->buffers[i]->longTermFrmIdx == longTermFrmIdx) - { - dpb->buffers[i]->refType = FRM_NON_REF_PIC; - dpb->numLongTermPics--; - break; - } - } -} - - -/* - * - * dpbMarkShortTermPicAsLongTerm: - * - * Parameters: - * dpb DPB object - * picNum Picture number - * longTermFrmIdx Long-term frame index - * - * Function: - * Mark short-term picture having picture number picNum as long-term - * picture having long-term frame index longTermFrmIdx. - * - * Returns: - * DPB_OK or DPB_ERR_PICTURE_NOT_FOUND - * - */ -int dpbMarkShortTermPicAsLongTerm(dpb_s *dpb, int32 picNum, int longTermFrmIdx) -{ - int i; - - /* To avoid duplicate of longTermFrmIdx */ - dpbVerifyLongTermFrmIdx(dpb, longTermFrmIdx); - - /* Mark pic with picNum as long term and assign longTermFrmIdx to it */ - for (i = 0; i < dpb->fullness; i++) { - if (dpb->buffers[i]->refType == FRM_SHORT_TERM_PIC && - dpb->buffers[i]->picNum == picNum) - { - dpb->buffers[i]->refType = FRM_LONG_TERM_PIC; - dpb->buffers[i]->longTermFrmIdx = longTermFrmIdx; - dpb->numShortTermPics--; - dpb->numLongTermPics++; - return DPB_OK; - } - } - - return DPB_ERR_PICTURE_NOT_FOUND; -} - - -/* - * - * dpbSetMaxLongTermFrameIdx: - * - * Parameters: - * dpb DPB object - * maxLongTermFrmIdxPlus1 Maximum long-term frame index plus 1 - * - * Function: - * Set maximum long-term frame index. All long-term pictures having - * bigger long-term frame index than maxLongTermFrmIdxPlus1-1 are - * marked as non-reference pictures. - * - * Returns: - * - - * - */ -void dpbSetMaxLongTermFrameIdx(dpb_s *dpb, int maxLongTermFrmIdxPlus1) -{ - int i; - - for (i = 0; i < dpb->fullness; i++) { - if (dpb->buffers[i]->refType == FRM_LONG_TERM_PIC && - dpb->buffers[i]->longTermFrmIdx > maxLongTermFrmIdxPlus1-1) - { - dpb->buffers[i]->refType = FRM_NON_REF_PIC; - dpb->numLongTermPics--; - } - } - - dpb->maxLongTermFrameIdx = maxLongTermFrmIdxPlus1 - 1; -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/framebuffer.cpp --- a/videoeditorengine/avcedit/src/framebuffer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,289 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include "globals.h" -#include "framebuffer.h" - -/* - * Static functions - */ - -static void *allocMem(int blkSize, size_t unitSize); - -static frmBuf_s *initRefFrame(frmBuf_s *recoBuf, frmBuf_s *refBuf); - - - -/* - * - * allocMem: - * - * Parameters: - * blkSize Block size - * unitSize unit size - * - * Function: - * Allocate blkSize*unitSize bytes of memory - * - * Returns: - * Pointer to allocated memory or NULL - * - */ -static void *allocMem(int blkSize, size_t unitSize) -{ - void *mem; - - if ((mem = User::Alloc(blkSize*unitSize)) == NULL) { - PRINT((_L("Cannot allocate memory for frame\n"))); - } - - return mem; -} - - -/* - * - * frmOpen: - * - * Parameters: - * mbData Macroblock state buffer - * width Width of the frame - * height Height of the frame - * - * Function: - * Allocate memory for frame buffer and macroblock state buffer. - * - * Returns: - * Pointer to allocated frame buffer or NULL - * - */ -frmBuf_s *frmOpen(mbAttributes_s **mbData, int width, int height) -{ -// int numPels = width*height; - int numBlksPerLine = width/BLK_SIZE; - int numBlocks = numBlksPerLine*height/BLK_SIZE; - int numMacroblocks = width/MBK_SIZE*height/MBK_SIZE; - frmBuf_s *recoBuf; - mbAttributes_s *mbDataTmp; - - if ((recoBuf = (frmBuf_s *)User::Alloc(sizeof(frmBuf_s))) == NULL) - return NULL; - - memset(recoBuf, 0, sizeof(frmBuf_s)); - - recoBuf->width = width; - recoBuf->height = height; - - if ((mbDataTmp = (mbAttributes_s *)User::Alloc(sizeof(mbAttributes_s))) == NULL) - return NULL; - - memset(mbDataTmp, 0, sizeof(mbAttributes_s)); - - if ((mbDataTmp->sliceMap = (int *)allocMem(numMacroblocks, sizeof(int))) == NULL) - return NULL; - if ((mbDataTmp->mbTypeTable = (int8 *)allocMem(numMacroblocks, sizeof(int8))) == NULL) - return NULL; - if ((mbDataTmp->qpTable = (int8 *)allocMem(numMacroblocks, sizeof(int8))) == NULL) - return NULL; - if ((mbDataTmp->refIdxTable = (int8 *)allocMem(numBlocks, sizeof(int8))) == NULL) - return NULL; - if ((mbDataTmp->cbpTable = (int *)allocMem(numMacroblocks, sizeof(int))) == NULL) - return NULL; - if ((mbDataTmp->motVecTable = (motVec_s *)allocMem(numBlocks, sizeof(motVec_s))) == NULL) - return NULL; - if ((mbDataTmp->ipModesUpPred = (int8 *)allocMem(numBlksPerLine, sizeof(int8))) == NULL) - return NULL; - - if ((mbDataTmp->numCoefUpPred[0] = (int8 *)allocMem(numBlksPerLine, sizeof(int8))) == NULL) - return NULL; - if ((mbDataTmp->numCoefUpPred[1] = (int8 *)allocMem(numBlksPerLine/2, sizeof(int8))) == NULL) - return NULL; - if ((mbDataTmp->numCoefUpPred[2] = (int8 *)allocMem(numBlksPerLine/2, sizeof(int8))) == NULL) - return NULL; - - if ((mbDataTmp->filterModeTab = (int8 *)allocMem(numMacroblocks, sizeof(int8))) == NULL) - return NULL; - if ((mbDataTmp->alphaOffset = (int8 *)allocMem(numMacroblocks, sizeof(int8))) == NULL) - return NULL; - if ((mbDataTmp->betaOffset = (int8 *)allocMem(numMacroblocks, sizeof(int8))) == NULL) - return NULL; - - *mbData = mbDataTmp; - - return recoBuf; -} - - -/* - * - * frmOpenRef: - * - * Parameters: - * width Width of the frame - * height Height of the frame - * - * Function: - * Allocate memory for reference frame buffer - * - * Returns: - * Pointer to Reference frame or NULL - * - */ -frmBuf_s *frmOpenRef(int width, int height) -{ -// int numPels = width*height; - frmBuf_s *ref; - - if ((ref = (frmBuf_s *)User::Alloc(sizeof(frmBuf_s))) == NULL) - return NULL; - - memset(ref, 0, sizeof(frmBuf_s)); - - ref->width = width; - ref->height = height; - ref->imgPadding = 0; - - ref->forOutput = 0; - ref->refType = FRM_NON_REF_PIC; - - return ref; -} - - -/* - * - * frmClose: - * - * Parameters: - * frame Frame - * mbData MB state buffers - * - * Function: - * Deallocate frame buffer and state array memory. - * - * Returns: - * Nothing - * - */ -void frmClose(frmBuf_s *recoBuf, mbAttributes_s *mbData) -{ - if (!recoBuf) - return; - - User::Free(mbData->sliceMap); - User::Free(mbData->mbTypeTable); - User::Free(mbData->qpTable); - User::Free(mbData->refIdxTable); - User::Free(mbData->cbpTable); - User::Free(mbData->motVecTable); - User::Free(mbData->ipModesUpPred); - User::Free(mbData->numCoefUpPred[0]); - User::Free(mbData->numCoefUpPred[1]); - User::Free(mbData->numCoefUpPred[2]); - User::Free(mbData->filterModeTab); - User::Free(mbData->alphaOffset); - User::Free(mbData->betaOffset); - User::Free(recoBuf); - User::Free(mbData); -} - - -/* - * - * frmCloseRef: - * - * Parameters: - * ref Reference frame - * - * Function: - * Deallocate reference frame buffer memory. - * - * Returns: - * Nothing - * - */ -void frmCloseRef(frmBuf_s *ref) -{ - if (!ref) - return; - - User::Free(ref); -} - - -/* - * - * initRefFrame: - * - * Parameters: - * recoBuf Reconstruction frame - * frameBuf Frame buffer to initialize - * - * Function: - * Initialize reference frame buffer refBuf using reconstructed buffer - * recoBuf. If width and height of the reference buffer do not those - * of the reconstructed buffer, reference buffer is reallocated. - * - * Returns: - * Pointer to reference frame - * - */ -static frmBuf_s *initRefFrame(frmBuf_s *recoBuf, frmBuf_s *refBuf) -{ - - /* If pic size is different, reopen with new size */ - if (!refBuf || refBuf->width != recoBuf->width || refBuf->height != recoBuf->height) { - frmCloseRef(refBuf); - if ((refBuf = frmOpenRef(recoBuf->width, recoBuf->height)) == NULL) - return NULL; - } - - /* Copy variables */ - *refBuf = *recoBuf; - - return refBuf; -} - - -/* - * - * frmMakeRefFrame: - * - * Parameters: - * recoBuf Reconstructed frame - * refBuf Reference frame - * - * Function: - * Generate reference frame refBuf using reconstructed frame recoBuf. - * Function does not copy pixel data, but it simply swaps pointers. - * - * Returns: - * Pointer to reference frame - * - */ -frmBuf_s *frmMakeRefFrame(frmBuf_s *recoBuf, frmBuf_s *refBuf) -{ - - refBuf = initRefFrame(recoBuf, refBuf); - if (refBuf == NULL) - return NULL; - - return refBuf; -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/invtransform.cpp --- a/videoeditorengine/avcedit/src/invtransform.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,199 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "globals.h" -#include "invtransform.h" - - -#ifndef AVC_RECO_BLOCK_ASM - -/* - * - * itrIDCTdequant4x4: - * - * Parameters: - * src Source values - * dest Inverse transformed values - * dequantPtr Dequant coefficients - * qp_per qp/6 - * isDc True if DC is separate - * dcValue Possible DC value - * - * Function: - * Dequantize coefficients and compute approximate 4x4 inverse DCT. - * - * Returns: - * - - */ -void itrIDCTdequant4x4(int src[4][4], int dest[4][4], const int *dequantPtr, - int qp_per, int isDc, int dcValue) -{ - int tmp[4][4]; - int A, B, C, D, E, F; - int i; - int deqc; - - /* - * a = A + B + C + (D>>1) - * b = A + (B>>1) - C - D - * c = A - (B>>1) - C + D - * d = A - B + C - (D>>1) - * => - * E = A + C - * F = B + (D>>1) - * a = E + F - * d = E - F - * E = A - C - * F = (B>>1) - D - * b = E + F - * c = E - F - */ - - A = dcValue; - - for (i = 0; i < 4; i++) { - deqc = (*dequantPtr++) << qp_per; - - if (!isDc) - A = src[i][0] * deqc; - - C = src[i][2] * deqc; - - deqc = (*dequantPtr++) << qp_per; - - B = src[i][1] * deqc; - D = src[i][3] * deqc; - - E = A + C; - F = B + (D>>1); - tmp[i][0] = E + F; - tmp[i][3] = E - F; - E = A - C; - F = (B>>1) - D; - tmp[i][1] = E + F; - tmp[i][2] = E - F; - - isDc = 0; - } - - for (i = 0; i < 4; i++) { - E = tmp[0][i] + tmp[2][i]; - F = tmp[1][i] + (tmp[3][i]>>1); - dest[0][i] = E + F; - dest[3][i] = E - F; - E = tmp[0][i] - tmp[2][i]; - F = (tmp[1][i]>>1) - tmp[3][i]; - dest[1][i] = E + F; - dest[2][i] = E - F; - } -} - -#endif - - -/* - * - * itrIHadaDequant4x4: - * - * Parameters: - * src Source values - * dest Inverse transformed values - * deqc Dequantization coefficient - * - * Function: - * Compute 4x4 inverse Hadamard transform and dequantize coefficients. - * - * Returns: - * - - * - */ -void itrIHadaDequant4x4(int src[4][4], int dest[4][4], int deqc) -{ - int tmp[4][4]; - int E; - int F; - int i; - - for (i = 0; i < 4; i++) { - E = src[i][0] + src[i][2]; - F = src[i][1] + src[i][3]; - tmp[i][0] = E + F; - tmp[i][3] = E - F; - E = src[i][0] - src[i][2]; - F = src[i][1] - src[i][3]; - tmp[i][1] = E + F; - tmp[i][2] = E - F; - } - - for (i = 0; i < 4; i++) { - E = tmp[0][i] + tmp[2][i]; - F = tmp[1][i] + tmp[3][i]; - dest[0][i] = ((E + F) * deqc + 2) >> 2; - dest[3][i] = ((E - F) * deqc + 2) >> 2; - E = tmp[0][i] - tmp[2][i]; - F = tmp[1][i] - tmp[3][i]; - dest[1][i] = ((E + F) * deqc + 2) >> 2; - dest[2][i] = ((E - F) * deqc + 2) >> 2; - } -} - - -/* - * - * itrIDCTdequant2x2: - * - * Parameters: - * src Source values - * dest Inverse transformed values - * deqc Dequantization coefficient - * - * Function: - * Compute 2x2 inverse DCT and dequantize coefficients. - * - * Returns: - * - - * - */ -void itrIDCTdequant2x2(int src[2][2], int dest[2][2], int deqc) -{ - int DDC00 = src[0][0]; - int DDC10 = src[0][1]; - int DDC01 = src[1][0]; - int DDC11 = src[1][1]; - int A, B; - - /* - * DDC(0,0) DDC(1,0) => DC0 DC1 - * DDC(0,1) DDC(1,1) DC2 DC3 - * - * DC0 = (DDC00+DDC10+DDC01+DDC11) - * DC1 = (DDC00-DDC10+DDC01-DDC11) - * DC2 = (DDC00+DDC10-DDC01-DDC11) - * DC3 = (DDC00-DDC10-DDC01+DDC11) - */ - - A = DDC00 + DDC01; - B = DDC10 + DDC11; - dest[0][0] = ((A + B) * deqc) >> 1; - dest[0][1] = ((A - B) * deqc) >> 1; - A = DDC00 - DDC01; - B = DDC10 - DDC11; - dest[1][0] = ((A + B) * deqc) >> 1; - dest[1][1] = ((A - B) * deqc) >> 1; -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/macroblock.cpp --- a/videoeditorengine/avcedit/src/macroblock.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,612 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "globals.h" -#include "bitbuffer.h" -#include "macroblock.h" -#include "motcomp.h" -#include "framebuffer.h" -#include "vld.h" -#include "parameterset.h" - -#ifdef USE_CLIPBUF -#include "clipbuf.h" -#endif - -/* - * Static functions - */ - -static int getMacroblock(macroblock_s *mb, int numRefFrames, - int8 *ipTab, int8 **numCoefUpPred, int diffVecs[][2], - int picType, int chromaQpIdx, bitbuffer_s *bitbuf); - -static int getMbAvailability(macroblock_s *mb, mbAttributes_s *mbData, - int picWidth, int constrainedIntra); - - -#ifdef USE_CLIPBUF -const u_int8 *mcpGetClip8Buf() -{ - return clip8Buf; -} -#endif - -/* - * - * getMacroblock: - * - * Parameters: - * mb Macroblock parameters - * multRef 1 -> multiple reference frames used - * ipTab Macroblock intra pred. modes - * numCoefUpPred Block coefficient counts of upper MBs - * diffVecs Macroblock delta motion vectors - * picType Picture type (intra/inter) - * chromaQpIdx Chroma QP index relative to luma QP - * bitbuf Bitbuffer handle - * - * Function: - * Get macroblock parameters from bitbuffer - * - * Returns: - * MBK_OK for no error, MBK_ERROR for error - * - */ -static int getMacroblock(macroblock_s *mb, int numRefFrames, - int8 *ipTab, int8 **numCoefUpPred, int diffVecs[][2], - int picType, int chromaQpIdx, bitbuffer_s *bitbuf) -{ - vldMBtype_s hdr; - int numVecs; - int delta_qp; - int i; - int8 *numCoefPtrY, *numCoefPtrU, *numCoefPtrV; - int retCode; - - - numCoefPtrY = &numCoefUpPred[0][mb->blkX]; - numCoefPtrU = &numCoefUpPred[1][mb->blkX>>1]; - numCoefPtrV = &numCoefUpPred[2][mb->blkX>>1]; - - /* - * Get Macroblock type - */ - - /* Check if we have to fetch run indicator */ - if (IS_SLICE_P(picType) && mb->numSkipped < 0) { - - mb->numSkipped = vldGetRunIndicator(bitbuf); - - if (bibGetStatus(bitbuf) < 0) - return MBK_ERROR; - } - - if (IS_SLICE_P(picType) && mb->numSkipped > 0) { - - /* If skipped MBs, set MB to COPY */ - mb->type = MBK_INTER; - mb->interMode = MOT_COPY; - mb->refNum[0] = 0; - mb->cbpY = mb->cbpChromaDC = mb->cbpC = 0; - mb->numSkipped -= 1; - - vldGetZeroLumaCoeffs(numCoefPtrY, mb->numCoefLeftPred); - vldGetZeroChromaCoeffs(numCoefPtrU, numCoefPtrV, mb->numCoefLeftPredC); - - return MBK_OK; - } - else { - - if (vldGetMBtype(bitbuf, &hdr, picType) < 0) { - PRINT((_L("Error: illegal MB type\n"))); - return MBK_ERROR; - } - - mb->type = hdr.type; - mb->intraType = hdr.intraType; - mb->intraMode = hdr.intraMode; - mb->interMode = hdr.interMode; - - for (i = 0; i < 4; i++) - mb->inter8x8modes[i] = hdr.inter8x8modes[i]; - - mb->cbpY = hdr.cbpY; - mb->cbpChromaDC = hdr.cbpChromaDC; - mb->cbpC = hdr.cbpC; - - mb->numSkipped -= 1; - } - - if (mb->type == MBK_INTRA && mb->intraType == MBK_INTRA_TYPE_PCM) { - vldGetAllCoeffs(numCoefPtrY, numCoefPtrU, numCoefPtrV, - mb->numCoefLeftPred, mb->numCoefLeftPredC); - return MBK_OK; - } - - /* - * 4x4 intra prediction modes - */ - if (mb->type == MBK_INTRA && mb->intraType == MBK_INTRA_TYPE1) { - - if (vldGetIntraPred(bitbuf, ipTab) < 0) { - PRINT((_L("Error: illegal intra pred\n"))); - return MBK_ERROR; - } - } - - /* - * 8x8 chroma intra prediction mode - */ - if (mb->type == MBK_INTRA) { - - mb->intraModeChroma = vldGetChromaIntraPred(bitbuf); - - if (mb->intraModeChroma < 0) { - PRINT((_L("Error: illegal chroma intra pred\n"))); - return MBK_ERROR; - } - } - - /* - * Reference frame number and motion vectors - */ - if (mb->type == MBK_INTER) { - - numVecs = mcpGetNumMotVecs(mb->interMode, mb->inter8x8modes); - mb->numMotVecs = numVecs; - - retCode = vldGetMotVecs(bitbuf, mb->interMode, numRefFrames, - mb->refNum, diffVecs, numVecs); - - if (retCode < 0) { - PRINT((_L("Error: illegal motion vectors\n"))); - return MBK_ERROR; - } - } - - /* - * Coded block pattern - */ - if (!(mb->type == MBK_INTRA && mb->intraType == MBK_INTRA_TYPE2)) { - - retCode = vldGetCBP(bitbuf, mb->type, &mb->cbpY, &mb->cbpChromaDC, &mb->cbpC); - - if (retCode < 0) { - PRINT((_L("Error: illegal CBP\n"))); - return MBK_ERROR; - } - } - - - /* Delta QP */ - if ((mb->type == MBK_INTRA && mb->intraType == MBK_INTRA_TYPE2) || - (mb->cbpY | mb->cbpChromaDC | mb->cbpC) != 0) - { - retCode = vldGetDeltaqp(bitbuf, &delta_qp); - - if (retCode < 0 || delta_qp < -(MAX_QP-MIN_QP+1)/2 || delta_qp >= (MAX_QP-MIN_QP+1)/2) { - PRINT((_L("Error: illegal delta qp\n"))); - return MBK_ERROR; - } - - if (delta_qp != 0) { - int qp = mb->qp + delta_qp; - if (qp < MIN_QP) - qp += (MAX_QP-MIN_QP+1); - if (qp > MAX_QP) - qp -= (MAX_QP-MIN_QP+1); - mb->qp = qp; - mb->qpC = qpChroma[clip(MIN_QP, MAX_QP, mb->qp + chromaQpIdx)]; - } - } - - - /* - * Get transform coefficients - */ - - /* - * Luma DC coefficients (if 16x16 intra) - */ - if (mb->type == MBK_INTRA && mb->intraType == MBK_INTRA_TYPE2) { - - retCode = vldGetLumaDCcoeffs(bitbuf, mb->dcCoefY, numCoefPtrY, - mb->numCoefLeftPred, mb->mbAvailBits); - if (retCode < 0) { - PRINT((_L("Error: illegal luma DC coefficient\n"))); - return MBK_ERROR; - } - } - - /* - * Luma AC coefficients - */ - if (mb->cbpY != 0) { - - retCode = vldGetLumaCoeffs(bitbuf, mb->type, mb->intraType, &mb->cbpY, - mb->coefY, numCoefPtrY, mb->numCoefLeftPred, - mb->mbAvailBits); - if (retCode < 0) { - PRINT((_L("Error: illegal luma AC coefficient\n"))); - return MBK_ERROR; - } - } - else - vldGetZeroLumaCoeffs(numCoefPtrY, mb->numCoefLeftPred); - - /* - * Chroma DC coefficients - */ - if (mb->cbpChromaDC != 0) { - - retCode = vldGetChromaDCcoeffs(bitbuf, mb->dcCoefC, &mb->cbpChromaDC); - - if (retCode < 0) { - PRINT((_L("Error: illegal chroma DC coefficient\n"))); - return MBK_ERROR; - } - } - - /* - * Chroma AC coefficients - */ - if (mb->cbpC != 0) { - - retCode = vldGetChromaCoeffs(bitbuf, mb->coefC, &mb->cbpC, numCoefPtrU, numCoefPtrV, - mb->numCoefLeftPredC[0], mb->numCoefLeftPredC[1], mb->mbAvailBits); - if (retCode < 0) { - PRINT((_L("Error: illegal chroma AC coefficient\n"))); - return MBK_ERROR; - } - } - else { - vldGetZeroChromaCoeffs(numCoefPtrU, numCoefPtrV, mb->numCoefLeftPredC); - } - - return MBK_OK; -} - - -/* - * - * mbkSetInitialQP: - * - * Parameters: - * mb Macroblock object - * qp Quantization parameter - * chromaQpIdx Chroma QP index relative to luma QP - * - * Function: - * Set macroblock qp. - * - * Returns: - * - - * - */ -void mbkSetInitialQP(macroblock_s *mb, int qp, int chromaQpIdx) -{ - mb->qp = qp; - mb->qpC = qpChroma[clip(MIN_QP, MAX_QP, qp + chromaQpIdx)]; - - mb->numSkipped = -1; -} - - -/* - * - * getMbAvailability: - * - * Parameters: - * mb Macroblock object - * mbData Buffers for for macroblock attributes - * picWidth Picture width - * constrainedIntra Constrained intra prediction flag - * - * Function: - * Get neighboring macroblock availability info - * - * Returns: - * Macroblock availability bits: - * bit 0 : left macroblock - * bit 1 : upper macroblock - * bit 2 : upper-right macroblock - * bit 3 : upper-left macroblock - * bit 4 : left macroblock (intra) - * bit 5 : upper macroblock (intra) - * bit 6 : upper-right macroblock (intra) - * bit 7 : upper-left macroblock (intra) - */ -static int getMbAvailability(macroblock_s *mb, mbAttributes_s *mbData, - int picWidth, int constrainedIntra) -{ - int mbsPerLine; - int mbAddr; - int currSliceIdx; - int *sliceMap; - int8 *mbTypeTable; - int mbAvailBits; - - mbsPerLine = picWidth/MBK_SIZE; - mbAddr = mb->idxY*mbsPerLine+mb->idxX; - - sliceMap = & mbData->sliceMap[mbAddr]; - currSliceIdx = sliceMap[0]; - - mbAvailBits = 0; - - /* Check availability of left macroblock */ - if (mb->idxX > 0 && sliceMap[-1] == currSliceIdx) - mbAvailBits |= 0x11; - - /* Check availability of upper, upper-left and upper-right macroblocks */ - - if (mb->idxY > 0) { - - sliceMap -= mbsPerLine; - - /* Check availability of upper macroblock */ - if (sliceMap[0] == currSliceIdx) - mbAvailBits |= 0x22; - - /* Check availability of upper-right macroblock */ - if (mb->idxX+1 < mbsPerLine && sliceMap[1] == currSliceIdx) - mbAvailBits |= 0x44; - - /* Check availability of upper-left macroblock */ - if (mb->idxX > 0 && sliceMap[-1] == currSliceIdx) - mbAvailBits |= 0x88; - } - - - /* - * Check availability of intra MB if constrained intra is enabled - */ - - if (constrainedIntra) { - - mbTypeTable = & mbData->mbTypeTable[mbAddr]; - - /* Check availability of left intra macroblock */ - if ((mbAvailBits & 0x10) && mbTypeTable[-1] != MBK_INTRA) - mbAvailBits &= ~0x10; - - /* Check availability of upper, upper-left and upper-right intra macroblocks */ - - if (mbAvailBits & (0x20|0x40|0x80)) { - - mbTypeTable -= mbsPerLine; - - /* Check availability of upper intra macroblock */ - if ((mbAvailBits & 0x20) && mbTypeTable[0] != MBK_INTRA) - mbAvailBits &= ~0x20; - - /* Check availability of upper-right intra macroblock */ - if ((mbAvailBits & 0x40) && mbTypeTable[1] != MBK_INTRA) - mbAvailBits &= ~0x40; - - /* Check availability of upper-left intra macroblock */ - if ((mbAvailBits & 0x80) && mbTypeTable[-1] != MBK_INTRA) - mbAvailBits &= ~0x80; - } - } - - return mbAvailBits; -} - - -// mbkParse -// Parses the input macroblock. If PCM coding is used then re-aligns the byte -// alignment if previous (slice header) modifications have broken the alignment. -TInt mbkParse(macroblock_s *mb, TInt numRefFrames, mbAttributes_s *mbData, - TInt picWidth, TInt picType, TInt constIpred, TInt chromaQpIdx, - TInt mbIdxX, TInt mbIdxY, void *streamBuf, TInt aBitOffset) -{ - TInt8 ipTab[BLK_PER_MB*BLK_PER_MB]; - TInt diffVecs[BLK_PER_MB*BLK_PER_MB][2]; -// TInt hasDc; -// TInt pixOffset; - TInt constrainedIntra; - TInt copyMbFlag; - TInt mbAddr; - TInt pcmMbFlag; - TInt retCode; - - mb->idxX = mbIdxX; - mb->idxY = mbIdxY; - - mb->blkX = mbIdxX*BLK_PER_MB; - mb->blkY = mbIdxY*BLK_PER_MB; - - mb->pixX = mbIdxX*MBK_SIZE; - mb->pixY = mbIdxY*MBK_SIZE; - - mbAddr = mb->idxY*(picWidth/MBK_SIZE)+mb->idxX; - - copyMbFlag = pcmMbFlag = 0; - - constrainedIntra = constIpred && !(IS_SLICE_I(picType)); - - mb->mbAvailBits = getMbAvailability(mb, mbData, picWidth, constrainedIntra); - - // Read macroblock bits - retCode = getMacroblock(mb, numRefFrames, ipTab, mbData->numCoefUpPred, diffVecs, - picType, chromaQpIdx, (bitbuffer_s *)streamBuf); - - if (retCode < 0) - return retCode; - - // Set PCM flag - if (mb->type == MBK_INTRA && mb->intraType == MBK_INTRA_TYPE_PCM) - pcmMbFlag = 1; - - - // Get intra/inter prediction - if (mb->type == MBK_INTRA) - { - mbData->mbTypeTable[mbAddr] = MBK_INTRA; - - if (pcmMbFlag) - { - bitbuffer_s* tempBitBuffer = (bitbuffer_s *)streamBuf; - - // Synchronize bitbuffer bit position to get it between 1 and 8 - syncBitBufferBitpos(tempBitBuffer); - - // To find out how much we have to shift to reach the byte alignment again, - // we have to first find out the old alignment - // oldAlignment is the place of the bitpos before the aBitOffset, i.e. it is - // the amount of zero alignment bits plus one - TInt oldAlignmentBits = tempBitBuffer->bitpos + aBitOffset - 1; - TInt shiftAmount; - - - // If Bit-wise shift, i.e. aBitOffset is zero, do nothing - // Fix the possible bit buffer byte alignment - if (aBitOffset > 0) - { - - // aBitOffset > 0 indicates a bitshift to the right - - // To counter the shift to right we have to shift left by the same amount - // unless shift is larger than the number of original alignment bits in - // which case we have to shift more to the right - - // If the computed old alignment bits value is larger than eight, - //the correct value is (computed value) % 8 - oldAlignmentBits = oldAlignmentBits % 8; - - if ( oldAlignmentBits < aBitOffset ) - { - // When the amount of shift is larger than the number of original alignment bits, - // shift right to fill up the rest of the current byte with zeros - shiftAmount = 8 - aBitOffset; - - // Here we can't shift back left since there were not enough alignment bits originally, - // thus we have to shift right by new bit position - tempBitBuffer->bitpos - - // E.g. original alignment bits 2, right shift by 4 bits: - ///////////////////////////////////////////////////////////////// - // original after bit shift byte alignment reset - // 1. byte: 2. byte: 1. byte: 2. byte: 1. byte: 2. byte: 3. byte: - // xxxxxx00 yyyyyyyy -> xxxxxxxx xx00yyyy -> xxxxxxxx xx000000 yyyyyyyy - ///////////////////////////////////////////////////////////////// - ShiftBitBufferBitsRight(tempBitBuffer, shiftAmount); - } - else - { - // In this case, the old alignment bits are more than enough - // to shift back left by the aBitOffset amount - - // E.g. original alignment bits 4, right shift by 2 bits: - ///////////////////////////////////////////////////////////////// - // original after bit shift byte alignment reset - // 1. byte: 2. byte: 1. byte: 2. byte: 1. byte: 2. byte: - // xxxx0000 yyyyyyyy -> xxxxxx00 00yyyyyy -> xxxxxx00 yyyyyyyy - ///////////////////////////////////////////////////////////////// - ShiftBitBufferBitsLeft(tempBitBuffer, aBitOffset); - } - } - else if(aBitOffset < 0) - { - // There was a bit shift to left - // Change the aBitOffset sign to positive - aBitOffset = -aBitOffset; - - // If the computed alignment bits is negative the correct value is -(computed value) - if ( oldAlignmentBits < 0 ) - { - oldAlignmentBits = -oldAlignmentBits; - } - - if ( oldAlignmentBits + aBitOffset >= 8 ) - { - // When old alignment bits plus the shift are at least 8, then - // we have to shift left by the 8 - shift to reach byte alignment. - shiftAmount = 8 - aBitOffset; - - // E.g. original alignment bits 6, left shift by 4 bits: - ///////////////////////////////////////////////////////////////// - // original after bit shift byte alignment reset - // 1. byte: 2. byte: 1. byte: 2. byte: 1. byte: 2. byte: - // xx000000 yyyyyyyy -> xxxxxx00 0000yyyy -> xxxxxx00 yyyyyyyy - ///////////////////////////////////////////////////////////////// - ShiftBitBufferBitsLeft(tempBitBuffer, shiftAmount); - } - else - { - - // Here we can just shift right by the amount of bits shifted left to reach - // the byte alignment - - // E.g. original alignment bits 2, left shift by 4 bits: - ///////////////////////////////////////////////////////////////// - // original after bit shift byte alignment reset - // 1. byte: 2. byte: 1. byte: 2. byte: 1. byte: 2. byte: - // xxxxxx00 yyyyyyyy -> xx00yyyy yyyyyyyy -> xx000000 yyyyyyyy - ///////////////////////////////////////////////////////////////// - ShiftBitBufferBitsRight(tempBitBuffer, aBitOffset); - } - } - - return MBK_PCM_FOUND; - - } - } - else - { - - mbData->mbTypeTable[mbAddr] = (TInt8)(mb->interMode+1); - - // If COPY MB, put skip motion vectors - if (mb->interMode == MOT_COPY) - { - mb->interMode = MOT_16x16; - } - - } - - - // Decode prediction error & reconstruct MB - if (!copyMbFlag && !pcmMbFlag) - { - - // If 4x4 intra mode, luma prediction error is already transformed - if (!(mb->type == MBK_INTRA && mb->intraType == MBK_INTRA_TYPE1)) - { - -// hasDc = (mb->type == MBK_INTRA && mb->intraType == MBK_INTRA_TYPE2) ? 1 : 0; - - } - -// pixOffset = ((mb->pixY*picWidth)>>2)+(mb->pixX>>1); - } - - - // Store qp and coded block pattern for current macroblock - if (pcmMbFlag) - mbData->qpTable[mbAddr] = 0; - else - mbData->qpTable[mbAddr] = (TInt8)mb->qp; - - mbData->cbpTable[mbAddr] = mb->cbpY; - - return MBK_OK; -} - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/motcomp.cpp --- a/videoeditorengine/avcedit/src/motcomp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef CHECK_MV_RANGE -#include -#endif - -#include "globals.h" -#include "motcomp.h" -#include "framebuffer.h" - -#if defined(USE_CLIPBUF) && !defined(AVC_MOTION_COMP_ASM) -#include "clipbuf.h" -#endif - - -#define ONEFOURTH1 20 -#define ONEFOURTH2 -5 -#define ONEFOURTH3 1 - - -static const int numModeMotVecs[MOT_NUM_MODES+1] = { - 0, 1, 2, 2, 4, 8, 8, 16 -}; - -static const int numModeMotVecs8x8[4] = { - 1, 2, 2, 4 -}; - -/* -static const int blockShapes[][2] = { - {4, 4}, - {4, 2}, - {2, 4}, - {2, 2} -}; - -static const int blockShapes8x8[][2] = { - {2, 2}, - {2, 1}, - {1, 2}, - {1, 1} -}; -*/ - - -#ifdef CHECK_MV_RANGE -extern int maxVerticalMvRange; -#endif - - -/* - * - * mcpGetNumMotVecs: - * - * Parameters: - * mode MB partition type (16x16, 8x16, 16x8, 8x8) - * subMbTypes Sub-MB partition types (8x8, 4x8, 8x4, 4x4) - * - * Function: - * Get the number of motion vectors that need to be decoded for given - * MB type and Sub-MB partition types. - * - * Returns: - * Number of motion vectors. - * - */ -int mcpGetNumMotVecs(int interMode, int subMbTypes[4]) -{ - int numVecs; - - if (interMode < MOT_8x8) - numVecs = numModeMotVecs[interMode]; - else { - numVecs = numModeMotVecs8x8[subMbTypes[0]]; - numVecs += numModeMotVecs8x8[subMbTypes[1]]; - numVecs += numModeMotVecs8x8[subMbTypes[2]]; - numVecs += numModeMotVecs8x8[subMbTypes[3]]; - } - - return numVecs; -} - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/parameterset.cpp --- a/videoeditorengine/avcedit/src/parameterset.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2403 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include "globals.h" -#include "vld.h" -#include "parameterset.h" - - -#define MIN_CHROMA_QP_INDEX -12 -#define MAX_CHROMA_QP_INDEX 12 -#define NUM_LEVELS 16 /* The number of AVC levels */ -#define MAX_PIC_SIZE_IN_MBS 36864 -#define MAX_PIC_WIDTH_IN_MBS 543 /* Sqrt( MAX_PIC_SIZE_IN_MBS * 8 ) */ -#define MAX_PIC_HEIGHT_IN_MBS 543 /* Sqrt( MAX_PIC_SIZE_IN_MBS * 8 ) */ - - -/* These fields are defined in Annex A of the standard */ -typedef struct _level_s -{ - int8 levelNumber; - int8 constraintSet3flag; - int32 maxMBPS; - int32 maxFS; - int32 maxDPB; - int32 maxBR; - int32 maxCPB; - int16 maxVmvR; - int8 minCR; - int8 maxMvsPer2Mb; -} level_s; - -/* Parameters for all levels */ -static const level_s levelArray[NUM_LEVELS] = { - {10, 0, 1485, 99, 152064, 64, 175, 64, 2, 32}, - {11, 1, 1485, 99, 152064, 128, 350, 64, 2, 32}, /* level 1b */ - {11, 0, 3000, 396, 345600, 192, 500, 128, 2, 32}, - {12, 0, 6000, 396, 912384, 384, 1000, 128, 2, 32}, - {13, 0, 11880, 396, 912384, 768, 2000, 128, 2, 32}, - {20, 0, 11880, 396, 912384, 2000, 2000, 128, 2, 32}, - {21, 0, 19800, 792, 1824768, 4000, 4000, 256, 2, 32}, - {22, 0, 20250, 1620, 3110400, 4000, 4000, 256, 2, 32}, - {30, 0, 40500, 1620, 3110400, 10000, 10000, 256, 2, 32}, - {31, 0, 108000, 3600, 6912000, 14000, 14000, 512, 4, 16}, - {32, 0, 216000, 5120, 7864320, 20000, 20000, 512, 4, 16}, - {40, 0, 245760, 8192, 12582912, 20000, 25000, 512, 4, 16}, - {41, 0, 245760, 8192, 12582912, 50000, 62500, 512, 2, 16}, - {42, 0, 491520, 8192, 12582912, 50000, 62500, 512, 2, 16}, - {50, 0, 589824, 22080, 42393600, 135000, 135000, 512, 2, 16}, - {51, 0, 983040, 36864, 70778880, 240000, 240000, 512, 2, 16} -}; - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - -struct aspectRatio_s -{ - int width; - int height; -}; - -static const struct aspectRatio_s aspectRatioArr[13] = -{ - { 1, 1}, - { 12, 11}, - { 10, 11}, - { 16, 11}, - { 40, 33}, - { 24, 11}, - { 20, 11}, - { 32, 11}, - { 80, 33}, - { 18, 11}, - { 15, 11}, - { 64, 33}, - {160, 99} -}; -#endif // VIDEOEDITORENGINE_AVC_EDITING - -/* - * AVC syntax functions as specified in specification - */ - -/* Return fixed length code */ -static int u_n(bitbuffer_s *bitbuf, int len, unsigned int *val) -{ - *val = vldGetFLC(bitbuf, len); - - if (bibGetStatus(bitbuf) < 0) - return PS_ERROR; - - return PS_OK; -} - -/* Return unsigned UVLC code */ -static int ue_v(bitbuffer_s *bitbuf, unsigned int *val, unsigned int maxVal) -{ - *val = vldGetUVLC(bitbuf); - - if (bibGetStatus(bitbuf) < 0) - return PS_ERROR; - - if (*val > maxVal) - return PS_ERR_ILLEGAL_VALUE; - - return PS_OK; -} - -/* Return long signed UVLC code */ -static int se_v_long(bitbuffer_s *bitbuf, int32 *val) -{ - *val = vldGetSignedUVLClong(bitbuf); - - if (bibGetStatus(bitbuf) < 0) - return PS_ERROR; - - return PS_OK; -} - -/* Return long unsigned UVLC code */ -static int ue_v_long(bitbuffer_s *bitbuf, u_int32 *val, u_int32 maxVal) -{ - *val = vldGetUVLClong(bitbuf); - - if (bibGetStatus(bitbuf) < 0) - return PS_ERROR; - - if (*val > maxVal) - return PS_ERR_ILLEGAL_VALUE; - - return PS_OK; -} - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - -/* Return signed UVLC code */ -static int se_v(bitbuffer_s *bitbuf, int *val, int minVal, int maxVal) -{ - *val = vldGetSignedUVLC(bitbuf); - - if (bibGetStatus(bitbuf) < 0) - return PS_ERROR; - - if (*val < minVal || *val > maxVal) - return PS_ERR_ILLEGAL_VALUE; - - return PS_OK; -} - -#endif // VIDEOEDITORENGINE_AVC_EDITING - - -/* - * getLevel: - * - * Parameters: - * levelNumber - * constraintSet3flag - * - * Function: - * Return parameters for level based on level number. - * - * Return: - * Pointer to level or 0 if level does not exist - */ -static const level_s *getLevel(int levelNumber, int constraintSet3flag) -{ - int i; - - for (i = 0; i < NUM_LEVELS; i++) { - if (levelArray[i].levelNumber == levelNumber && - levelArray[i].constraintSet3flag == constraintSet3flag) - return &levelArray[i]; - } - - PRINT((_L("Unknown level: %i.\n"), levelNumber)); - return 0; -} - -/* - * - * getHrdParameters: - * - * Parameters: - * bitbuf The bitbuffer object - * hrd the pointer for returning HRD parameters - * - * Function: - * decode the HRD Parameters - * - * Returns: - * PS_OK: Hrd parameters decoded succesfully - * <0: Fail - */ -static int getHrdParameters(bitbuffer_s *bitbuf, hrd_parameters_s *hrd) -{ - unsigned int i; - int retCode; - - if ((retCode = ue_v(bitbuf, &hrd->cpb_cnt_minus1, 31)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 4, &hrd->bit_rate_scale)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 4, &hrd->cpb_size_scale)) < 0) - return retCode; - - for (i = 0; i <= hrd->cpb_cnt_minus1; i++) { - /* bit_rate_value_minus1 must be in range of 0 to 2^32-2 */ - if ((retCode = ue_v_long(bitbuf, &hrd->bit_rate_value_minus1[i], (u_int32)4294967294U)) < 0) - return retCode; - - /* cpb_size_value_minus1 must be in range of 0 to 2^32-2 */ - if ((retCode = ue_v_long(bitbuf, &hrd->cpb_size_value_minus1[i], (u_int32)4294967294U)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 1, &hrd->cbr_flag[i])) < 0) - return retCode; - } - - if ((retCode = u_n(bitbuf, 5, &hrd->initial_cpb_removal_delay_length_minus1)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 5, &hrd->cpb_removal_delay_length_minus1)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 5, &hrd->dpb_output_delay_length_minus1)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 5, &hrd->time_offset_length)) < 0) - return retCode; - - return PS_OK; -} - - - -/* - * - * getVUI: - * - * Parameters: - * bitbuf The bitbuffer object - * vui the pointer for returning VUI parameters - * - * Function: - * decode the VUI Parameters - * - * Returns: - * PS_OK: VUI parameters decoded succesfully - * <0: Fail - */ -static int getVUI(bitbuffer_s *bitbuf, vui_parameters_s *vui) -{ - unsigned tempWordHi, tempWordLo; - int retCode; - - if ((retCode = u_n(bitbuf, 1, &vui->aspect_ratio_info_present_flag)) < 0) - return retCode; - - if (vui->aspect_ratio_info_present_flag) { - if ((retCode = u_n(bitbuf, 8, &vui->aspect_ratio_idc)) < 0) - return retCode; - if (vui->aspect_ratio_idc == PS_EXTENDED_SAR) { - if ((retCode = u_n(bitbuf, 16, &vui->sar_width)) < 0) - return retCode; - if ((retCode = u_n(bitbuf, 16, &vui->sar_height)) < 0) - return retCode; - } - } - - if ((retCode = u_n(bitbuf, 1, &vui->overscan_info_present_flag)) < 0) - return retCode; - - if (vui->overscan_info_present_flag) { - if ((retCode = u_n(bitbuf, 1, &vui->overscan_appropriate_flag)) < 0) - return retCode; - } - - if ((retCode = u_n(bitbuf, 1, &vui->video_signal_type_present_flag)) < 0) - return retCode; - - if (vui->video_signal_type_present_flag) { - if ((retCode = u_n(bitbuf, 3, &vui->video_format)) < 0) - return retCode; - if ((retCode = u_n(bitbuf, 1, &vui->video_full_range_flag)) < 0) - return retCode; - if ((retCode = u_n(bitbuf, 1, &vui->colour_description_present_flag)) < 0) - return retCode; - if (vui->colour_description_present_flag) { - if ((retCode = u_n(bitbuf, 8, &vui->colour_primaries)) < 0) - return retCode; - if ((retCode = u_n(bitbuf, 8, &vui->transfer_characteristics)) < 0) - return retCode; - if ((retCode = u_n(bitbuf, 8, &vui->matrix_coefficients)) < 0) - return retCode; - } - } - - if ((retCode = u_n(bitbuf, 1, &vui->chroma_loc_info_present_flag)) < 0) - return retCode; - - if (vui->chroma_loc_info_present_flag) { - if ((retCode = ue_v(bitbuf, &vui->chroma_sample_loc_type_top_field, 5)) < 0) - return retCode; - if ((retCode = ue_v(bitbuf, &vui->chroma_sample_loc_type_bottom_field, 5)) < 0) - return retCode; - } - - if ((retCode = u_n(bitbuf, 1, &vui->timing_info_present_flag)) < 0) - return retCode; - - if (vui->timing_info_present_flag) { - if ((retCode = u_n(bitbuf, 16, &tempWordHi)) < 0) - return retCode; - if ((retCode = u_n(bitbuf, 16, &tempWordLo)) < 0) - return retCode; - vui->num_units_in_tick = (((u_int32)tempWordHi) << 16) | ((u_int32)tempWordLo); - - if ((retCode = u_n(bitbuf, 16, &tempWordHi)) < 0) - return retCode; - if ((retCode = u_n(bitbuf, 16, &tempWordLo)) < 0) - return retCode; - vui->time_scale = (((u_int32)tempWordHi) << 16) | ((u_int32)tempWordLo); - - if ((retCode = u_n(bitbuf, 1, &vui->fixed_frame_rate_flag)) < 0) - return retCode; - } - - if ((retCode = u_n(bitbuf, 1, &vui->nal_hrd_parameters_present_flag)) < 0) - return retCode; - - if (vui->nal_hrd_parameters_present_flag) { - if ((retCode = getHrdParameters(bitbuf, &vui->nal_hrd_parameters)) < 0) - return retCode; - } - - if ((retCode = u_n(bitbuf, 1, &vui->vcl_hrd_parameters_present_flag)) < 0) - return retCode; - - if (vui->vcl_hrd_parameters_present_flag) { - if ((retCode = getHrdParameters(bitbuf, &vui->vcl_hrd_parameters)) < 0) - return retCode; - } - - if (vui->nal_hrd_parameters_present_flag || vui->vcl_hrd_parameters_present_flag) { - if ((retCode = u_n(bitbuf, 1, &vui->low_delay_hrd_flag)) < 0) - return retCode; - } - - if ((retCode = u_n(bitbuf, 1, &vui->pic_struct_present_flag)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 1, &vui->bitstream_restriction_flag)) < 0) - return retCode; - - if (vui->bitstream_restriction_flag) { - if ((retCode = u_n(bitbuf, 1, &vui->motion_vectors_over_pic_boundaries_flag)) < 0) - return retCode; - if ((retCode = ue_v(bitbuf, &vui->max_bytes_per_pic_denom, 16)) < 0) - return retCode; - if ((retCode = ue_v(bitbuf, &vui->max_bits_per_mb_denom, 16)) < 0) - return retCode; - if ((retCode = ue_v(bitbuf, &vui->log2_max_mv_length_horizontal, 16)) < 0) - return retCode; - if ((retCode = ue_v(bitbuf, &vui->log2_max_mv_length_vertical, 16)) < 0) - return retCode; - if ((retCode = ue_v(bitbuf, &vui->num_reorder_frames, 16)) < 0) - return retCode; - if ((retCode = ue_v(bitbuf, &vui->max_dec_frame_buffering, 16)) < 0) - return retCode; - } - - return PS_OK; -} - - -/* - * - * setVUIdefaults: - * - * Parameters: - * vui Pointer to VUI parameters - * - * Function: - * Set VUI parameters to their default values when default value is non-zero. - * - * Returns: - * - - */ -static void setVUIdefaults(seq_parameter_set_s *sps) -{ - vui_parameters_s *vui; - const level_s *level; - int MaxDpbSize; - - vui = &sps->vui_parameters; - - vui->video_format = 5; - vui->colour_primaries = 2; - vui->transfer_characteristics = 2; - vui->matrix_coefficients = 2; - vui->motion_vectors_over_pic_boundaries_flag = 1; - vui->max_bytes_per_pic_denom = 2; - vui->max_bits_per_mb_denom = 1; - vui->log2_max_mv_length_horizontal = 16; - vui->log2_max_mv_length_vertical = 16; - - level = getLevel(sps->level_idc, sps->constraint_set3_flag); - MaxDpbSize = level->maxDPB / - ((sps->pic_width_in_mbs_minus1+1) * (sps->pic_height_in_map_units_minus1+1) * 384); - MaxDpbSize = clip(1, 16, MaxDpbSize); - - vui->max_dec_frame_buffering = MaxDpbSize; - vui->num_reorder_frames = vui->max_dec_frame_buffering; -} - -/* - * - * psDecodeSPS: - * - * Parameters: - * bitbuf Bitbuffer object - * spsList The list for SPS's, the newly decoded SPS will be stored into the list - * - * Function: - * Decode the SPS, and store it into the SPS list - * - * Returns: - * PS_OK: SPS decoded succesfully - * <0: Fail - */ -int psDecodeSPS( bitbuffer_s *bitbuf, seq_parameter_set_s **spsList, - TInt& aWidth, TInt& aHeight ) -{ - seq_parameter_set_s *sps; - unsigned int i; - int retCode; - - unsigned profile_idc; // u(8) - Boolean constraint_set0_flag; // u(1) - Boolean constraint_set1_flag; // u(1) - Boolean constraint_set2_flag; // u(1) - Boolean constraint_set3_flag; // u(1) - Boolean reserved_zero_4bits; // u(4) - unsigned level_idc; // u(8) - unsigned seq_parameter_set_id; // ue(v) - - - /* - * Parse sequence parameter set syntax until sps id - */ - - if ((retCode = u_n(bitbuf, 8, &profile_idc)) < 0) - return retCode; - - /* If constraint_set0_flag == 1, stream is Baseline Profile compliant */ - if ((retCode = u_n(bitbuf, 1, &constraint_set0_flag)) < 0) - return retCode; - - /* If constraint_set1_flag == 1, stream is Main Profile compliant */ - if ((retCode = u_n(bitbuf, 1, &constraint_set1_flag)) < 0) - return retCode; - - /* If constraint_set2_flag == 1, stream is Extended Profile compliant */ - if ((retCode = u_n(bitbuf, 1, &constraint_set2_flag)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 1, &constraint_set3_flag)) < 0) - return retCode; - - /* If CABAC is not defined we support only baseline compliant streams */ -#ifndef ENABLE_CABAC - if (profile_idc != PS_BASELINE_PROFILE_IDC && constraint_set0_flag == 0) - return PS_ERR_UNSUPPORTED_PROFILE; -#else - if (profile_idc != PS_BASELINE_PROFILE_IDC && constraint_set0_flag == 0 && - profile_idc != PS_MAIN_PROFILE_IDC && constraint_set1_flag == 0) - return PS_ERR_UNSUPPORTED_PROFILE; -#endif - - /* We don't care what is in these bits */ - if ((retCode = u_n(bitbuf, 4, &reserved_zero_4bits)) < 0) - return retCode; - - /* Fetch level */ - if ((retCode = u_n(bitbuf, 8, &level_idc)) < 0) - return retCode; - - /* Find level in the list of legal levels */ - for (i = 0; i < NUM_LEVELS; i++) { - if ((int)level_idc == levelArray[i].levelNumber) - break; - } - - /* If level was not found in the list, return with error */ - if (i == NUM_LEVELS) - return PS_ERR_ILLEGAL_VALUE; - - /* Get sequence parameter set id */ - if ((retCode = ue_v(bitbuf, &seq_parameter_set_id, PS_MAX_NUM_OF_SPS-1)) < 0) - return retCode; - - - /* - * Allocate memory for SPS - */ - - /* Pointer to sequence parameter set structure */ - sps = spsList[seq_parameter_set_id]; - - /* allocate mem for SPS, if it has not been allocated already */ - if (!sps) { - sps = (seq_parameter_set_s *) User::Alloc(sizeof(seq_parameter_set_s)); - if (sps == 0) { - return PS_ERR_MEM_ALLOC; - } - memset( sps, 0, sizeof(seq_parameter_set_s)); - spsList[seq_parameter_set_id] = sps; - } - - - /* Copy temporary variables to sequence parameter set structure */ - sps->profile_idc = profile_idc; - sps->constraint_set0_flag = constraint_set0_flag; - sps->constraint_set1_flag = constraint_set1_flag; - sps->constraint_set2_flag = constraint_set2_flag; - sps->constraint_set3_flag = constraint_set3_flag; - sps->reserved_zero_4bits = reserved_zero_4bits; - sps->level_idc = level_idc; - sps->seq_parameter_set_id = seq_parameter_set_id; - - - /* - * Parse rest of the sequence parameter set syntax - */ - - /* This defines how many bits there are in frame_num syntax element */ - if ((retCode = ue_v(bitbuf, &sps->log2_max_frame_num_minus4, 12)) < 0) - return retCode; - - /* Fetch POC type */ - if ((retCode = ue_v(bitbuf, &sps->pic_order_cnt_type, 2)) < 0) - return retCode; - - if (sps->pic_order_cnt_type == 0) { - if ((retCode = ue_v(bitbuf, &sps->log2_max_pic_order_cnt_lsb_minus4, 12)) < 0) - return retCode; - } - else if (sps->pic_order_cnt_type == 1) { - if ((retCode = u_n(bitbuf, 1, &sps->delta_pic_order_always_zero_flag)) < 0) - return retCode; - - if ((retCode = se_v_long(bitbuf, &sps->offset_for_non_ref_pic)) < 0) - return retCode; - - if ((retCode = se_v_long(bitbuf, &sps->offset_for_top_to_bottom_field)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->num_ref_frames_in_pic_order_cnt_cycle, 255)) < 0) - return retCode; - - for (i = 0; i < sps->num_ref_frames_in_pic_order_cnt_cycle; i++) { - if ((retCode = se_v_long(bitbuf, &sps->offset_for_ref_frame[i])) < 0) - return retCode; - } - } - - if ((retCode = ue_v(bitbuf, &sps->num_ref_frames, 16)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 1, &sps->gaps_in_frame_num_value_allowed_flag)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->pic_width_in_mbs_minus1, MAX_PIC_WIDTH_IN_MBS-1)) < 0) - return retCode; - - aWidth = (sps->pic_width_in_mbs_minus1 + 1) * 16; - - if ((retCode = ue_v(bitbuf, &sps->pic_height_in_map_units_minus1, MAX_PIC_WIDTH_IN_MBS-1)) < 0) - return retCode; - - aHeight = (sps->pic_height_in_map_units_minus1 + 1) * 16; - - if ((retCode = u_n(bitbuf, 1, &sps->frame_mbs_only_flag)) < 0) - return retCode; - - if (!sps->frame_mbs_only_flag) { - // u_n(bitbuf, 1, &sps->mb_adaptive_frame_field_flag); - return PS_ERR_UNSUPPORTED_FEATURE; - } - - if ((retCode = u_n(bitbuf, 1, &sps->direct_8x8_inference_flag)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 1, &sps->frame_cropping_flag)) < 0) - return retCode; - - /* Fetch cropping window */ - if (sps->frame_cropping_flag) { - if ((retCode = ue_v(bitbuf, &sps->frame_crop_left_offset, 8*(sps->pic_width_in_mbs_minus1+1)-1)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->frame_crop_right_offset, 8*(sps->pic_width_in_mbs_minus1+1)-sps->frame_crop_left_offset-1)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->frame_crop_top_offset, 8*(sps->pic_height_in_map_units_minus1+1)-1)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->frame_crop_bottom_offset, 8*(sps->pic_height_in_map_units_minus1+1)-sps->frame_crop_top_offset-1)) < 0) - return retCode; - - TInt cropUnitX = 2; - TInt cropUnitY = 2 * ( 2 - sps->frame_mbs_only_flag ); - - TInt leftBorder = cropUnitX * sps->frame_crop_left_offset; - TInt rightBorder = aWidth - ( cropUnitX * sps->frame_crop_right_offset ); - - aWidth = rightBorder - leftBorder; - - TInt topBorder = cropUnitY * sps->frame_crop_top_offset; - TInt bottomBorder = ( 16 * (sps->pic_height_in_map_units_minus1 + 1) ) - - cropUnitY * sps->frame_crop_bottom_offset; - - aHeight = bottomBorder - topBorder; - - } - - if ((retCode = u_n(bitbuf, 1, &sps->vui_parameters_present_flag)) < 0) - return retCode; - - setVUIdefaults(sps); - - if (sps->vui_parameters_present_flag) { - if ((retCode = getVUI(bitbuf, &sps->vui_parameters)) < 0) - return retCode; - } - - if (bibSkipTrailingBits(bitbuf) < 0) - return PS_ERROR; - - return PS_OK; -} - -/* - * - * psCloseParametersSets: - * - * Parameters: - * spsList The sequence parameter set list - * ppsList The picture parameter set list - * - * Fucntion: - * Free all parameter sets - * - * Returns: - * - - */ -void psCloseParametersSets(seq_parameter_set_s **spsList, - pic_parameter_set_s **ppsList) -{ - int i; - - for (i = 0; i < PS_MAX_NUM_OF_SPS; i++) { - psCloseSPS(spsList[i]); - spsList[i] = 0; - } - - for (i = 0; i < PS_MAX_NUM_OF_PPS; i++) { - psClosePPS(ppsList[i]); - ppsList[i] = 0; - } -} - -/* - * - * psClosePPS: - * - * Parameters: - * pps the picture parameter set to be freed - * - * Function: - * free the picture parameter set - * - * Returns: - * - - */ -void psClosePPS( pic_parameter_set_s *pps ) -{ - if (pps == 0) - return; - - // [KW]: Added - if (pps->codedPPSBuffer) - User::Free(pps->codedPPSBuffer); - - - if (pps->slice_group_id) - User::Free(pps->slice_group_id); -// nccFree(pps->slice_group_id); - -// nccFree(pps); - User::Free(pps); -} - - -/* - * - * psCloseSPS: - * - * Parameters: - * sps the sequence parameter set to be freed - * - * Fucntion: - * free the sequence parameter set - * - * Returns: - * - - */ -void psCloseSPS( seq_parameter_set_s *sps ) -{ - if (sps == 0) - return; - - // [KW]: Added - if (sps->codedSPSBuffer) - User::Free(sps->codedSPSBuffer); - -// nccFree(sps); - User::Free(sps); -} - - -// psParseLevelFromSPS -// Returns the baseline profile level from SPS -TInt psParseLevelFromSPS( bitbuffer_s *bitbuf, TInt& aLevel ) -{ - TInt retCode; - TUint profile_idc; // u(8) - Boolean constraint_set0_flag; // u(1) - Boolean constraint_set1_flag; // u(1) - Boolean constraint_set2_flag; // u(1) - Boolean constraint_set3_flag; // u(1) - Boolean reserved_zero_4bits; // u(4) - TUint level_idc; // u(8) - - // Parse sequence parameter set syntax until sps id - if ((retCode = u_n(bitbuf, 8, &profile_idc)) < 0) - return retCode; - - // If constraint_set0_flag == 1, stream is Baseline Profile compliant - if ((retCode = u_n(bitbuf, 1, &constraint_set0_flag)) < 0) - return retCode; - - // If constraint_set1_flag == 1, stream is Main Profile compliant - if ((retCode = u_n(bitbuf, 1, &constraint_set1_flag)) < 0) - return retCode; - - // If constraint_set2_flag == 1, stream is Extended Profile compliant - if ((retCode = u_n(bitbuf, 1, &constraint_set2_flag)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 1, &constraint_set3_flag)) < 0) - return retCode; - - // If CABAC is not defined we support only baseline compliant streams - if (profile_idc != PS_BASELINE_PROFILE_IDC && constraint_set0_flag == 0) - return PS_ERR_UNSUPPORTED_PROFILE; - - // We don't care what is in these bits - if ((retCode = u_n(bitbuf, 4, &reserved_zero_4bits)) < 0) - return retCode; - - // Fetch level - if ((retCode = u_n(bitbuf, 8, &level_idc)) < 0) - return retCode; - - aLevel = level_idc; - - if ( level_idc == 11 && constraint_set3_flag == 1 ) - aLevel = 101; // level 1b - - return KErrNone; -} - - -// AddBytesToBuffer -// Adds aNumBytes bytes to bit buffer aBitBuffer, reallocates the bit buffer data if necessary. -TInt AddBytesToBuffer(bitbuffer_s *aBitBuffer, TUint aNumBytes) -{ - TInt i; - - // Reallocate the bitbuffer data - aBitBuffer->data = (TUint8 *) User::ReAlloc(aBitBuffer->data, (aBitBuffer->dataLen+aNumBytes)); - - if (aBitBuffer->data == 0) - return KErrNoMemory; - - // Set the new bytes as zeros - for (i=aBitBuffer->dataLen; idataLen+aNumBytes; i++) - { - aBitBuffer->data[i] = 0; - } - - return KErrNone; -} - - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - - -/* - * - * psGetAspectRatio: - * - * Parameters: - * sps Sequence parameter set - * width Horizontal size of the sample aspect ratio - * height Vertical size of the sample aspect ratio - * - * Function: - * Return sample aspect ratio in width and height - * - * Returns: - * - - */ -void psGetAspectRatio(seq_parameter_set_s *sps, int *width, int *height) -{ - vui_parameters_s *vui; - - vui = &sps->vui_parameters; - - *width = 0; - *height = 0; - - if (sps->vui_parameters_present_flag && - vui->aspect_ratio_info_present_flag && - vui->aspect_ratio_idc != 0 && - (vui->aspect_ratio_idc <= 13 || vui->aspect_ratio_idc == 255)) - { - if (vui->aspect_ratio_idc == 255) { - /* Extended_SAR */ - if (vui->sar_width != 0 && vui->sar_height != 0) { - *width = vui->sar_width; - *height = vui->sar_height; - } - } - else { - *width = aspectRatioArr[vui->aspect_ratio_idc-1].width; - *height = aspectRatioArr[vui->aspect_ratio_idc-1].height; - } - } - -} - - -// CompareSPSSets -// Compares two SPS input sets to see if we can use one for both clips, if exact match is not required -// then some parameters maybe be different in the two sets. -TInt CompareSPSSets( seq_parameter_set_s *aSPSSet1, seq_parameter_set_s *aSPSSet2, TBool aExactMatch ) -{ - TUint i; - - // Different maxFrameNum & maxPOCLsb can be handled by modifying the slice header, thus do not return EFalse - if ( aExactMatch ) - { - // If exact match is required, return false for different max frame number value - if ( aSPSSet1->log2_max_frame_num_minus4 != aSPSSet2->log2_max_frame_num_minus4 ) - return EFalse; - } - - if ( aSPSSet1->pic_order_cnt_type != aSPSSet2->pic_order_cnt_type ) - { - return EFalse; - } - else - { - if (aSPSSet1->pic_order_cnt_type == 0) - { - // Different maxFrameNum & maxPOCLsb can be handled by modifying the slice header, thus do not return EFalse - if ( aExactMatch ) - { - // If exact match is required, return false for different max POCLSB number value - if ( aSPSSet1->log2_max_pic_order_cnt_lsb_minus4 != aSPSSet2->log2_max_pic_order_cnt_lsb_minus4 ) - return EFalse; - } - - } - else if (aSPSSet1->pic_order_cnt_type == 1) - { - if ( aSPSSet1->delta_pic_order_always_zero_flag != aSPSSet2->delta_pic_order_always_zero_flag || - aSPSSet1->offset_for_non_ref_pic != aSPSSet2->offset_for_non_ref_pic || - aSPSSet1->num_ref_frames_in_pic_order_cnt_cycle != aSPSSet2->num_ref_frames_in_pic_order_cnt_cycle ) - { - return EFalse; - } - - for (i = 0; i < aSPSSet1->num_ref_frames_in_pic_order_cnt_cycle; i++) - { - if ( aSPSSet1->offset_for_ref_frame[i] != aSPSSet2->offset_for_ref_frame[i] ) - { - return EFalse; - } - } - } - } - - if ( aSPSSet1->num_ref_frames != aSPSSet2->num_ref_frames ) - { - return EFalse; - } - - // Direct 8x8 inference flag is not used in baseline, ignore - - return ETrue; -} - - -// IsSPSSupported -// Checks if the input SPS contains supported values. Returns KErrNotSupported if -// unsupported parameters are found. -TInt IsSPSSupported( seq_parameter_set_s *aSPS ) -{ - - // Only Baseline profile supported at the moment - if ( aSPS->profile_idc != PS_BASELINE_PROFILE_IDC ) - { - return KErrNotSupported; - } - - // Check if maximum supported level is exceeded - if ( aSPS->level_idc > PS_MAX_SUPPORTED_LEVEL ) - { - return KErrNotSupported; - } - - // For now more than one reference frames are not supported - if ( aSPS->num_ref_frames > 1 ) - { - return KErrNotSupported; - } - - // Coded fields are not supported - if ( !aSPS->frame_mbs_only_flag ) - { - return KErrNotSupported; - } - - if ( aSPS->vui_parameters_present_flag ) - { - if ( aSPS->vui_parameters.num_reorder_frames != 0 && aSPS->pic_order_cnt_type != 2) - { - // Since we can't be sure how many input frames we have to buffer before getting - // an output picture, return KErrNotSupported - return KErrNotSupported; - } - } - else - { - if ( aSPS->pic_order_cnt_type != 2) - { - // Since we can't be sure how many input frames we have to buffer before getting - // an output picture, return KErrNotSupported - return KErrNotSupported; - } - } - - return KErrNone; -} - - -// IsPPSSupported -// Checks if the input PPS contains supported values. Returns KErrNotSupported if -// unsupported parameters are found. -TInt IsPPSSupported( pic_parameter_set_s *aPPS ) -{ - - // For baseline, both prediction values shall be zero - if( aPPS->weighted_pred_flag != 0 || aPPS->weighted_bipred_idc != 0) - { - return KErrNotSupported; - } - - // For baseline, entropy coding mode shall be zero - if ( aPPS->entropy_coding_mode_flag != 0 ) - { - return KErrNotSupported; - } - - if ( aPPS->num_slice_groups_minus1 > PS_BASELINE_MAX_SLICE_GROUPS ) - { - return KErrNotSupported; - } - - return KErrNone; -} - - -// psParseSPS -// Parses the input SPS set. Modifies the SPS id if a conflicting id is found -// and stores the modified data to codedSPSBuffer for later use. -TInt psParseSPS( bitbuffer_s *bitbuf, seq_parameter_set_s **spsList, TUint aFrameFromEncoder, TBool *aEncodeUntilIDR, TUint *aNumSPS ) -{ - seq_parameter_set_s *sps; - TUint i; - TInt retCode; - TUint bitPosit = 0; - TUint bytePosit = 0; - TUint profile_idc; // u(8) - Boolean constraint_set0_flag; // u(1) - Boolean constraint_set1_flag; // u(1) - Boolean constraint_set2_flag; // u(1) - Boolean constraint_set3_flag; // u(1) - Boolean reserved_zero_4bits; // u(4) - TUint level_idc; // u(8) - TUint seq_parameter_set_id; // ue(v) - TUint newSPSId = 0; - TUint possibleIdConflict = 0; - TUint useOneSPS = 0; - - - if (!aFrameFromEncoder) - { - // Reset the encode until IDR flag if this SPS is not from the encoder. - *aEncodeUntilIDR = EFalse; - } - - // Parse sequence parameter set syntax until sps id - if ((retCode = u_n(bitbuf, 8, &profile_idc)) < 0) - return retCode; - - // If constraint_set0_flag == 1, stream is Baseline Profile compliant - if ((retCode = u_n(bitbuf, 1, &constraint_set0_flag)) < 0) - return retCode; - - // If constraint_set1_flag == 1, stream is Main Profile compliant - if ((retCode = u_n(bitbuf, 1, &constraint_set1_flag)) < 0) - return retCode; - - // If constraint_set2_flag == 1, stream is Extended Profile compliant - if ((retCode = u_n(bitbuf, 1, &constraint_set2_flag)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 1, &constraint_set3_flag)) < 0) - return retCode; - - // If CABAC is not defined we support only baseline compliant streams - if (profile_idc != PS_BASELINE_PROFILE_IDC && constraint_set0_flag == 0) - return PS_ERR_UNSUPPORTED_PROFILE; - - // We don't care what is in these bits - if ((retCode = u_n(bitbuf, 4, &reserved_zero_4bits)) < 0) - return retCode; - - // Fetch level - if ((retCode = u_n(bitbuf, 8, &level_idc)) < 0) - return retCode; - - // Find level in the list of legal levels - for (i = 0; i < NUM_LEVELS; i++) - { - if ((int)level_idc == levelArray[i].levelNumber) - break; - } - - // If level was not found in the list, return with error - if (i == NUM_LEVELS) - return PS_ERR_ILLEGAL_VALUE; - - // Get sequence parameter set id - if ((retCode = ue_v(bitbuf, &seq_parameter_set_id, PS_MAX_NUM_OF_SPS-1)) < 0) - return retCode; - - // Pointer to sequence parameter set structure - sps = spsList[seq_parameter_set_id]; - - // Allocate memory for SPS, if it has not been allocated already - if (!sps) - { - sps = (seq_parameter_set_s *) User::Alloc(sizeof(seq_parameter_set_s)); - - if (sps == 0) - { - PRINT((_L("Error while allocating memory for SPS.\n"))); - return PS_ERR_MEM_ALLOC; - } - - memset( sps, 0, sizeof(seq_parameter_set_s)); - spsList[seq_parameter_set_id] = sps; - - sps->seq_parameter_set_id = seq_parameter_set_id; - (*aNumSPS)++; - } - else - { - // There might be a conflicting Id with an existing SPS set - // Give the new SPS set the next free SPS Id - possibleIdConflict = 1; - newSPSId = 0; - useOneSPS = 1; - - // Search for the first free SPS id - while (spsList[newSPSId]) - { - newSPSId++; - } - - // And allocate memory for the SPS - sps = (seq_parameter_set_s *) User::Alloc(sizeof(seq_parameter_set_s)); - - if (sps == 0) - { - PRINT((_L("Error while allocating memory for SPS.\n"))); - return PS_ERR_MEM_ALLOC; - } - - memset( sps, 0, sizeof(seq_parameter_set_s)); - - sps->seq_parameter_set_id = newSPSId; - - // Store the position of the bit buffer - bitPosit = bitbuf->bitpos; - bytePosit = bitbuf->bytePos; - } - - - // Copy temporary variables to sequence parameter set structure - sps->profile_idc = profile_idc; - sps->constraint_set0_flag = constraint_set0_flag; - sps->constraint_set1_flag = constraint_set1_flag; - sps->constraint_set2_flag = constraint_set2_flag; - sps->constraint_set3_flag = constraint_set3_flag; - sps->reserved_zero_4bits = reserved_zero_4bits; - sps->level_idc = level_idc; - - // Initialize - sps->maxFrameNumChanged = 0; - sps->maxPOCNumChanged = 0; - - // This defines how many bits there are in frame_num syntax element - if ((retCode = ue_v(bitbuf, &sps->log2_max_frame_num_minus4, 12)) < 0) - return retCode; - - // Fetch POC type - if ((retCode = ue_v(bitbuf, &sps->pic_order_cnt_type, 2)) < 0) - return retCode; - - if (sps->pic_order_cnt_type == 0) - { - if ((retCode = ue_v(bitbuf, &sps->log2_max_pic_order_cnt_lsb_minus4, 12)) < 0) - return retCode; - } - else if (sps->pic_order_cnt_type == 1) - { - if ((retCode = u_n(bitbuf, 1, &sps->delta_pic_order_always_zero_flag)) < 0) - return retCode; - - if ((retCode = se_v_long(bitbuf, &sps->offset_for_non_ref_pic)) < 0) - return retCode; - - if ((retCode = se_v_long(bitbuf, &sps->offset_for_top_to_bottom_field)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->num_ref_frames_in_pic_order_cnt_cycle, 255)) < 0) - return retCode; - - for (i = 0; i < sps->num_ref_frames_in_pic_order_cnt_cycle; i++) - { - if ((retCode = se_v_long(bitbuf, &sps->offset_for_ref_frame[i])) < 0) - return retCode; - } - } - - if ((retCode = ue_v(bitbuf, &sps->num_ref_frames, 16)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 1, &sps->gaps_in_frame_num_value_allowed_flag)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->pic_width_in_mbs_minus1, MAX_PIC_WIDTH_IN_MBS-1)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->pic_height_in_map_units_minus1, MAX_PIC_WIDTH_IN_MBS-1)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 1, &sps->frame_mbs_only_flag)) < 0) - return retCode; - - if (!sps->frame_mbs_only_flag) - { - return PS_ERR_UNSUPPORTED_FEATURE; - } - - if ((retCode = u_n(bitbuf, 1, &sps->direct_8x8_inference_flag)) < 0) - return retCode; - - if ((retCode = u_n(bitbuf, 1, &sps->frame_cropping_flag)) < 0) - return retCode; - - // Fetch cropping window - if (sps->frame_cropping_flag) - { - if ((retCode = ue_v(bitbuf, &sps->frame_crop_left_offset, 8*(sps->pic_width_in_mbs_minus1+1)-1)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->frame_crop_right_offset, 8*(sps->pic_width_in_mbs_minus1+1)-sps->frame_crop_left_offset-1)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->frame_crop_top_offset, 8*(sps->pic_height_in_map_units_minus1+1)-1)) < 0) - return retCode; - - if ((retCode = ue_v(bitbuf, &sps->frame_crop_bottom_offset, 8*(sps->pic_height_in_map_units_minus1+1)-sps->frame_crop_top_offset-1)) < 0) - return retCode; - } - - if ((retCode = u_n(bitbuf, 1, &sps->vui_parameters_present_flag)) < 0) - return retCode; - - setVUIdefaults(sps); - - if (sps->vui_parameters_present_flag) - { - if ((retCode = getVUI(bitbuf, &sps->vui_parameters)) < 0) - return retCode; - } - - if (bibSkipTrailingBits(bitbuf) < 0) - return PS_ERROR; - - // Store the size of the SPS set - sps->SPSlength = bitbuf->bytePos; - - syncBitBufferBitpos(bitbuf); - - // If we had a possible conflict, compare the SPS sets with the same id to see if only one SPS set can be used. - if (possibleIdConflict) - { - // Check if one SPS can be used instead of two separate ones - useOneSPS = CompareSPSSets(spsList[seq_parameter_set_id],sps,EFalse); - - if (!useOneSPS) - { - TUint trailingBits = GetNumTrailingBits(bitbuf); - TInt diff = 0; - TUint oldSPSId = seq_parameter_set_id; - TUint oldIdLength = ReturnUnsignedExpGolombCodeLength(oldSPSId); - TUint newIdLength = ReturnUnsignedExpGolombCodeLength(newSPSId); - TUint storeSPS = 1; - - for (i=0; i PS_MAX_NUM_OF_SPS ) - { - // We have reached maximum number of SPS, return an error - return PS_ERROR; - } - - (*aNumSPS)++; - - // Set indexChanged to true and give the new index to old SPS, so that (new) PPS can refer to the new SPS - spsList[seq_parameter_set_id]->indexChanged = 1; - spsList[seq_parameter_set_id]->newSPSId = newSPSId; // The new Id - - if (aFrameFromEncoder) - { - spsList[seq_parameter_set_id]->encSPSId = newSPSId; // The new Id - - // Store information that there are different SPS in use, we have to encode until an IDR NAL unit. - *aEncodeUntilIDR = ETrue; - } - else - spsList[seq_parameter_set_id]->origSPSId = newSPSId; // The new Id - - - // Store the new SPS at the new index and modify SPS id, - // unless we are using a previously stored SPS - if(storeSPS) - { - spsList[newSPSId] = sps; - - // Restore the bit buffer position at the SPS Id - bitbuf->bitpos = bitPosit; - bitbuf->bytePos = bytePosit; - - if(trailingBits > 8) - { - trailingBits = 8; - } - - if ( oldIdLength == newIdLength ) - { - // Just encode the new Id on top of the old Id - bitbuf->bitpos += oldIdLength; - if (bitbuf->bitpos > 8) - { - // Go to the right byte and bit position - bitbuf->bytePos -= bitbuf->bitpos / 8; - bitbuf->bitpos = bitbuf->bitpos % 8; - } - - EncodeUnsignedExpGolombCode(bitbuf, newSPSId); - } - else if ( oldIdLength < newIdLength ) - { - diff = newIdLength - oldIdLength; - - // Adjust the SPS length - if (diff >= 8) - { - // Add as many extra bytes as is required - sps->SPSlength += (diff / 8); - } - - if ( trailingBits < (diff % 8) ) - { - // Add one byte since there aren't enough trailing bits for the extra bits - sps->SPSlength += 1; - } - - ShiftBufferRight(bitbuf, diff, trailingBits, oldIdLength); - - // After shifting, encode the new value to the bit buffer - EncodeUnsignedExpGolombCode(bitbuf, newSPSId); - } - else - { - // New id's length is smaller than old id's length - diff = oldIdLength - newIdLength; - - if (diff >= 8) - { - // Adjust the SPS length - sps->SPSlength -= (diff / 8); - } - - ShiftBufferLeft(bitbuf, diff, oldIdLength); - - // After shifting, encode the new value to the bit buffer - EncodeUnsignedExpGolombCode(bitbuf, newSPSId); - } - } - } - else // Use one SPS for both - { - // Reset indexChanged to false - spsList[seq_parameter_set_id]->indexChanged = 0; - - // Check if the frame numbering or POC numbering has to be changed - if (spsList[seq_parameter_set_id]->log2_max_frame_num_minus4 != sps->log2_max_frame_num_minus4) - { - spsList[seq_parameter_set_id]->maxFrameNumChanged = 1; - - if (aFrameFromEncoder) - spsList[seq_parameter_set_id]->encMaxFrameNum = sps->log2_max_frame_num_minus4; - else - spsList[seq_parameter_set_id]->origMaxFrameNum = sps->log2_max_frame_num_minus4; - } - else - { - // Reset the value in case it was changed for another clip earlier - spsList[seq_parameter_set_id]->maxFrameNumChanged = 0; - } - - if (spsList[seq_parameter_set_id]->log2_max_pic_order_cnt_lsb_minus4 != sps->log2_max_pic_order_cnt_lsb_minus4) - { - spsList[seq_parameter_set_id]->maxPOCNumChanged = 1; - - if (aFrameFromEncoder) - spsList[seq_parameter_set_id]->encMaxPOCNum = sps->log2_max_pic_order_cnt_lsb_minus4; - else - spsList[seq_parameter_set_id]->origMaxPOCNum = sps->log2_max_pic_order_cnt_lsb_minus4; - } - else - { - // Reset the value in case it was changed for another clip earlier - spsList[seq_parameter_set_id]->maxPOCNumChanged = 0; - } - } - } - - if ( IsSPSSupported(sps) == KErrNotSupported ) - return KErrNotSupported; - - - // Store the buffer containing the SPS set in order to later pass it to the 3gpmp4library - // If we use the same sps for both, don't allocate, otherwise allocate - if ( !useOneSPS ) - { - - // Store the buffer containing the SPS set in order to later pass it to the 3gpmp4library - sps->codedSPSBuffer = (TUint8*) User::Alloc(sps->SPSlength); - - if (sps->codedSPSBuffer == 0) - return PS_ERR_MEM_ALLOC; - - for (i=0; iSPSlength; i++) - { - sps->codedSPSBuffer[i] = bitbuf->data[i]; - } - } - else if (possibleIdConflict) - { - // Free the SPS since we will use only one which has been already allocated earlier - User::Free(sps); - } - - - return PS_OK; -} - - -// ComparePPSSets -// Compares two input PPS sets to see if a single PPS set could be used for both. -// Returns ETrue if the sets are similar enough, EFalse otherwise. -TInt ComparePPSSets( pic_parameter_set_s *aPPSSet1, pic_parameter_set_s *aPPSSet2 ) -{ - TUint i; - - // This is the most likely parameter to differ, thus check it first - if ( aPPSSet1->pic_init_qp_minus26 != aPPSSet2->pic_init_qp_minus26 || - aPPSSet1->pic_init_qs_minus26 != aPPSSet2->pic_init_qs_minus26 ) - { - return EFalse; - } - - if ( aPPSSet1->entropy_coding_mode_flag != aPPSSet2->entropy_coding_mode_flag ) - { - return EFalse; - } - - if ( aPPSSet1->pic_order_present_flag != aPPSSet2->pic_order_present_flag ) - { - return EFalse; - } - - if ( aPPSSet1->num_slice_groups_minus1 != aPPSSet2->num_slice_groups_minus1 ) - { - return EFalse; - } - else - { - if ( aPPSSet1->num_slice_groups_minus1 > 0 ) - { - if ( aPPSSet1->slice_group_map_type != aPPSSet2->slice_group_map_type ) - { - return EFalse; - } - - switch ( aPPSSet1->slice_group_map_type ) - { - - case PS_SLICE_GROUP_MAP_TYPE_INTERLEAVED: - for (i = 0; i <= aPPSSet1->num_slice_groups_minus1; i++) - { - if ( aPPSSet1->run_length_minus1[i] != aPPSSet2->run_length_minus1[i] ) - { - return EFalse; - } - } - break; - - case PS_SLICE_GROUP_MAP_TYPE_DISPERSED: - break; - - case PS_SLICE_GROUP_MAP_TYPE_FOREGROUND: - for (i = 0; i < aPPSSet1->num_slice_groups_minus1; i++) - { - if ( aPPSSet1->top_left[i] != aPPSSet2->top_left[i] || - aPPSSet1->bottom_right[i] != aPPSSet2->bottom_right[i] ) - { - return EFalse; - } - } - break; - - case PS_SLICE_GROUP_MAP_TYPE_CHANGING_3: - case PS_SLICE_GROUP_MAP_TYPE_CHANGING_4: - case PS_SLICE_GROUP_MAP_TYPE_CHANGING_5: - if ( aPPSSet1->slice_group_change_direction_flag != aPPSSet2->slice_group_change_direction_flag || - aPPSSet1->slice_group_change_rate_minus1 != aPPSSet2->slice_group_change_rate_minus1 ) - { - return EFalse; - } - break; - - case PS_SLICE_GROUP_MAP_TYPE_EXPLICIT: - if ( aPPSSet1->pic_size_in_map_units_minus1 != aPPSSet2->pic_size_in_map_units_minus1 ) - { - return EFalse; - } - - for( i = 0; i <= aPPSSet1->pic_size_in_map_units_minus1; i++ ) - { - if ( aPPSSet1->slice_group_id[i] != aPPSSet2->slice_group_id[i] ) - { - return EFalse; - } - } - - break; - - default: - // Cannnot happen - break; - } - } - } - - if ( aPPSSet1->num_ref_idx_l0_active_minus1 != aPPSSet2->num_ref_idx_l0_active_minus1 || - aPPSSet1->num_ref_idx_l1_active_minus1 != aPPSSet2->num_ref_idx_l1_active_minus1 ) - { - return EFalse; - } - - if ( aPPSSet1->weighted_pred_flag != aPPSSet2->weighted_pred_flag || - aPPSSet1->weighted_bipred_idc != aPPSSet2->weighted_bipred_idc ) - { - return EFalse; - } - - if ( aPPSSet1->chroma_qp_index_offset != aPPSSet2->chroma_qp_index_offset ) - { - return EFalse; - } - - if ( aPPSSet1->deblocking_filter_parameters_present_flag != aPPSSet2->deblocking_filter_parameters_present_flag ) - { - return EFalse; - } - - if ( aPPSSet1->constrained_intra_pred_flag != aPPSSet2->constrained_intra_pred_flag ) - { - return EFalse; - } - - if ( aPPSSet1->redundant_pic_cnt_present_flag != aPPSSet2->redundant_pic_cnt_present_flag ) - { - return EFalse; - } - - return ETrue; -} - - -// GetNumTrailingBits -// Returns the number of trailing (zero) bits in the input bit buffer. -TInt GetNumTrailingBits(bitbuffer_s *aBitBuffer) -{ - TInt i; - TUint bit = 0; - - for (i=0; i<8; i++) - { - // Get the i'th bit from the end - bit = (aBitBuffer->data[aBitBuffer->dataLen - 1] & (1 << i)) >> i; - if (bit) - { - return (i); // Return the number of trailing bits here - } - } - - // Return 9 for cases when there are one or more zero byte at the end - return (9); -} - - -// ReturnUnsignedExpGolombCodeLength -// Returns the amount of bits required for encoding the input aValue with unsigned Exp-Golomb codes. -TInt ReturnUnsignedExpGolombCodeLength(TUint aValue) -{ - TUint codeNumLength; - - codeNumLength = 0; - - aValue++; - - while ( aValue > 1 ) - { - aValue >>= 1; - codeNumLength++; - } - - // The required code length is codeNumLength*2+1 - return ((codeNumLength << 1) + 1); -} - - -// EncodeUnsignedExpGolombCode -// Encodes the input aValue to the bit buffer with unsigned Exp-Golomb codes. -void EncodeUnsignedExpGolombCode(bitbuffer_s *aBitBuffer, TUint aValue) -{ - TUint codeLength; - TUint tempValue = aValue; - TInt i; - TUint8 byteValue; - - // First, compute the required code length - codeLength = ReturnUnsignedExpGolombCodeLength(aValue); - - // The Exp-Golomb coded value is the same as value+1 with the prefix zero bits, - // thus it can be simply coded by coding value+1 with the number of bits computed - // by the above function. - aValue++; - - // Then write the bits to the bit buffer one bit at a time - for (i=codeLength-1; i>=0; i--) - { - tempValue = (aValue & (1 << i)) >> i; - - // Zero out the bitpos bit - byteValue = aBitBuffer->data[aBitBuffer->bytePos-1] & ~(1<<(aBitBuffer->bitpos-1)); - - // Add the bit from the value to be coded and store the result back to bit buffer - byteValue |= tempValue << (aBitBuffer->bitpos-1); - aBitBuffer->data[aBitBuffer->bytePos-1] = byteValue; - aBitBuffer->bitpos--; - - if(aBitBuffer->bitpos == 0) - { - aBitBuffer->bytePos++; - aBitBuffer->bitpos = 8; - } - } - - // Update the currentBits value - aBitBuffer->currentBits = aBitBuffer->data[aBitBuffer->bytePos-1]; -} - - -// ShiftBitBufferBitsRight -// This function shifts bits right by aDiff in the aBitBuffer, note that if -// the shift is more than 8 bits, full bytes should be shifted before calling this function. -// The gap between unmodified and shofted part of the buffer is filled with zero bits -void ShiftBitBufferBitsRight(bitbuffer_s *aBitBuffer, TInt aDiff) -{ - TUint8 byteValue; - TUint8 tempValue; - TUint8 bitMask; - TInt i; - - // Start from the end, shift bits in each byte until the current byte - for (i=aBitBuffer->dataLen-1; i>=aBitBuffer->bytePos; i--) - { - bitMask = (1 << aDiff) - 1; // The aDiff lowest bits - - // Shift the bits in this byte right by aDiff - byteValue = aBitBuffer->data[i]; - byteValue >>= aDiff; - - // The aDiff lowest bits from the next byte (to the left) - tempValue = aBitBuffer->data[i-1] & bitMask; - - tempValue <<= (8 - aDiff); - aBitBuffer->data[i] = byteValue | tempValue; - } - - // Take care of the first byte separately - bitMask = (1 << aBitBuffer->bitpos) - 1; // The bitPos lowest bits - byteValue = aBitBuffer->data[aBitBuffer->bytePos-1] & bitMask; - byteValue >>= aDiff; // Shift right by aDiff bits - - bitMask = 255 << (aBitBuffer->bitpos); // Mask the 8-bitPos upper bits - - // Write the shifted value back to bit buffer - aBitBuffer->data[aBitBuffer->bytePos-1] = (bitMask & aBitBuffer->data[aBitBuffer->bytePos-1]) | byteValue; - - // Update the currentBits value - aBitBuffer->currentBits = aBitBuffer->data[aBitBuffer->bytePos-1]; -} - - -// ShiftBitBufferBitsLeft -// This function shifts bits left by aDiff in the aBitBuffer, note that if -// the shift is more than 8 bits, full bytes should be shifted before calling this function. -void ShiftBitBufferBitsLeft(bitbuffer_s *aBitBuffer, TInt aDiff) -{ - TUint8 byteValue; - TUint8 tempValue; - TUint8 bitMask; - TInt i; - - - // Take care of the first byte separately - if ( aBitBuffer->bitpos > aDiff ) - { - bitMask = (1 << aBitBuffer->bitpos) - 1; // The aBitBuf->bitpos lowest bits - byteValue = aBitBuffer->currentBits & bitMask; - - // Shift the byteValue left by aDiff - byteValue <<= aDiff; - // Take only the bitpos lowest bits from this value - byteValue &= bitMask; - - bitMask = 255 << (aBitBuffer->bitpos); // Mask the 8-bitPos upper bits, i.e. the bits to the left from the start of the shift - byteValue = byteValue | (aBitBuffer->currentBits & bitMask); - aBitBuffer->data[aBitBuffer->bytePos-1] = byteValue; - - bitMask = 255 << (8 - aDiff); // Mask the aDiff upper bits - byteValue = aBitBuffer->data[aBitBuffer->bytePos] & bitMask; - byteValue >>= (8 - aDiff); - - // "Add" the aDiff bits from the next byte (msb) to this byte (lsb) - aBitBuffer->data[aBitBuffer->bytePos-1] |= byteValue; - } - else - { - bitMask = 255 << (aBitBuffer->bitpos); // Mask the 8-bitPos upper bits, i.e. the bits to the left from the start of the shift - aBitBuffer->data[aBitBuffer->bytePos-1] = aBitBuffer->currentBits & bitMask; - - bitMask = (1 << (8-aDiff+aBitBuffer->bitpos)) - 1; // The 8-diff+aBitBuf->bitpos lowest bits - tempValue = aBitBuffer->data[aBitBuffer->bytePos] & bitMask; - - // Shift tempValue right by 8 - diff bits, resulting in bitpos lowest bits - tempValue >>= (8 - aDiff); - - aBitBuffer->data[aBitBuffer->bytePos-1] |= tempValue; - } - - - // Start from the current byte, shift bits in each byte until the end - for (i=aBitBuffer->bytePos; i<(aBitBuffer->dataLen-1); i++) - { - - bitMask = 255 << (8 - aDiff); // Mask the 8-aDiff upper bits - byteValue = aBitBuffer->data[i+1] & bitMask; - byteValue >>= (8 - aDiff); - - tempValue = aBitBuffer->data[i]; - tempValue <<= aDiff; - - aBitBuffer->data[i] = byteValue | tempValue; - } - - // Take care of the last byte separately, just shift to the left - aBitBuffer->data[aBitBuffer->dataLen-1] <<= aDiff; - - // Update the currentBits value - aBitBuffer->currentBits = aBitBuffer->data[aBitBuffer->bytePos-1]; -} - - -// ShiftBufferLeftByOneByte -// Shifts the bytes left in the bit buffer by one position starting from the current byte position. -void ShiftBufferLeftByOneByte(bitbuffer_s *aBitBuffer) -{ - TInt i; - TUint8 byteValue; - TUint8 bitMask; - - - // For the current byte, take 8-bitpos upper bits from this byte and bitpos lowest bits from the next - // byte (this is ok since we are shift at least 8 bits when this function is called) - bitMask = 255 << (aBitBuffer->bitpos); // Mask the 8-bitPos upper bits - aBitBuffer->data[aBitBuffer->bytePos] &= bitMask; - - bitMask = (1 << aBitBuffer->bitpos) - 1; // The aBitBuf->bitpos lowest bits - byteValue = aBitBuffer->data[aBitBuffer->bytePos+1] & bitMask; - aBitBuffer->data[aBitBuffer->bytePos] |= byteValue; - - // Start from the next byte position, and go through the whole buffer - for (i=aBitBuffer->bytePos+1; i<(aBitBuffer->dataLen-1); i++) - { - // Copy the next byte to here - aBitBuffer->data[i] = aBitBuffer->data[i+1]; - } - - // Adjust the bit buffer length - aBitBuffer->dataLen--; -} - - -// ShiftBufferRightByOneByte -// Shifts the bytes right in the bit buffer by one position starting from the current byte position. -void ShiftBufferRightByOneByte(bitbuffer_s *aBitBuffer) -{ - TInt i; - - // Start from the last byte position, and go through the whole buffer until the current byte position - // Note: also the current byte can be shifted, since the bits that should not be shifted from that byte - // will be written over by the new value coded later, thus no error will be there. - for (i=aBitBuffer->dataLen-1; i>=aBitBuffer->bytePos; i--) - { - // Copy the next byte to here - aBitBuffer->data[i] = aBitBuffer->data[i-1]; - } -} - - -// ShiftBufferRight -// Shifts bits right in the input bit buffer by aDiff value, the bit buffer length is modified if required. -void ShiftBufferRight(bitbuffer_s *aBitBuffer, TInt aDiff, TUint aTrailingBits, TUint aOldIdLength) -{ - TInt i; - - if ( aDiff >= 8 ) - { - TUint bytesToShift = aDiff / 8; - - // Add byte(s) to the bit buffer - aBitBuffer->dataLen += bytesToShift; - - // Shift full bytes to right - for (i=0; idataLen += 1; - } - - if (aDiff != 0) - { - // Shift the bits in the bit buffer to the right - ShiftBitBufferBitsRight(aBitBuffer, aDiff); - } - - // Adjust the bitbuffer bitpos value - aBitBuffer->bitpos += aOldIdLength; - if ( aBitBuffer->bitpos > 8 ) - { - aBitBuffer->bitpos -= 8; - aBitBuffer->bytePos--; - } -} - - -// ShiftBufferLeft -// Shifts bits left in the input bit buffer by aDiff value. -void ShiftBufferLeft(bitbuffer_s *aBitBuffer, TInt aDiff, TUint aOldIdLength) -{ - TInt i; - - if (aDiff >= 8) - { - // Shift full bytes to the left before shifting bits - TUint bytesToShift = aDiff / 8; - - // First, adjust the byte position to be correct - aBitBuffer->bytePos -= bytesToShift; - - for (i=0; ibitpos += aOldIdLength; - if ( aBitBuffer->bitpos > 8 ) - { - aBitBuffer->bitpos -= 8; - aBitBuffer->bytePos--; - - aBitBuffer->currentBits = aBitBuffer->data[aBitBuffer->bytePos-1]; - } - - if ( aDiff != 0 ) - { - // Shift the bits in the bit buffer to the left - ShiftBitBufferBitsLeft(aBitBuffer, aDiff); - } - -} - - -// psParsePPS -// Parses the input PPS set, the PPS and SPS id's are modified if necessary -// and the modified data is stored in codedPPSBuffer. -TInt psParsePPS( bitbuffer_s *bitbuf, pic_parameter_set_s **ppsList, seq_parameter_set_s **spsList, - TUint aFrameFromEncoder, TUint *aNumPPS ) -{ - pic_parameter_set_s *pps; - TUint i, tmp; - TInt len; - TUint pic_parameter_set_id; - TInt retCode; - TUint pic_size_in_map_units_minus1; - TUint newPPSId = 0; - TUint possibleIdConflict = 0; - TUint modifySPSId = 0; - TUint bitPosit = 0; - TUint bytePosit = 0; - TInt bitSPSPosit = 0; - TUint byteSPSPosit = 0; - TUint useOnePPS = 0; - - // Parse pps id - if ((retCode = ue_v(bitbuf, &pic_parameter_set_id, PS_MAX_NUM_OF_PPS-1)) < 0) - return retCode; - - // Allocate memory for pps if not already allocated - pps = ppsList[pic_parameter_set_id]; - - if (!pps) - { - pps = (pic_parameter_set_s *) User::Alloc(sizeof(pic_parameter_set_s)); - - if (pps == 0) - { - PRINT((_L("Error while allocating memory for PPS.\n"))); - return PS_ERR_MEM_ALLOC; - } - - memset( pps, 0, sizeof(pic_parameter_set_s)); - ppsList[pic_parameter_set_id] = pps; - - (*aNumPPS)++; - } - else - { - // There might be a conflicting Id with an existing PPS set - // Give the new SPS set the next free PPS Id - possibleIdConflict = 1; - useOnePPS = 1; - newPPSId = 0; - - while (ppsList[newPPSId]) - { - newPPSId++; - } - - // Allocate memory for the PPS - pps = (pic_parameter_set_s *) User::Alloc(sizeof(pic_parameter_set_s)); - - if (pps == 0) - { - PRINT((_L("Error while allocating memory for PPS.\n"))); - return PS_ERR_MEM_ALLOC; - } - - memset( pps, 0, sizeof(pic_parameter_set_s)); - pps->pic_parameter_set_id = newPPSId; - - // Store the position of the bit buffer - bitPosit = bitbuf->bitpos; - bytePosit = bitbuf->bytePos; - } - - - // Parse the rest of the picture parameter set syntax - if ((retCode = ue_v( bitbuf, &pps->seq_parameter_set_id, PS_MAX_NUM_OF_SPS-1)) < 0) - return retCode; - - // Check if the Id of the SPS that this PPS refers to has changed (and that - // the frame originated form the encoder) - if( spsList[pps->seq_parameter_set_id]->indexChanged) - { - if ( !aFrameFromEncoder ) - { - if (pps->seq_parameter_set_id != spsList[pps->seq_parameter_set_id]->origSPSId) - { - // Indicate a changed SPS Id, perform the change at the end (when we know the size of the PPS set) - modifySPSId = ETrue; - - // Store the position of the bit buffer - bitSPSPosit = bitbuf->bitpos; - byteSPSPosit = bitbuf->bytePos; - } - } - else - { - // Indicate a changed SPS Id, perform the change at the end (when we know the size of the PPS set) - modifySPSId = ETrue; - - // Store the position of the bit buffer - bitSPSPosit = bitbuf->bitpos; - byteSPSPosit = bitbuf->bytePos; - } - } - - // Fetch entropy coding mode. Mode is 0 for CAVLC and 1 for CABAC - if ((retCode = u_n( bitbuf, 1, &pps->entropy_coding_mode_flag)) < 0) - return retCode; - - // If this flag is 1, POC related syntax elements are present in slice header - if ((retCode = u_n( bitbuf, 1, &pps->pic_order_present_flag)) < 0) - return retCode; - - // Fetch the number of slice groups minus 1 - if ((retCode = ue_v( bitbuf, &pps->num_slice_groups_minus1, PS_MAX_NUM_SLICE_GROUPS-1)) < 0) - return retCode; - - if(pps->num_slice_groups_minus1 > 0 ) - { - - if ((retCode = ue_v( bitbuf, &pps->slice_group_map_type, 6)) < 0) - return retCode; - - switch (pps->slice_group_map_type) - { - - case PS_SLICE_GROUP_MAP_TYPE_INTERLEAVED: - for (i = 0; i <= pps->num_slice_groups_minus1; i++) - { - if ((retCode = ue_v( bitbuf, &pps->run_length_minus1[i], MAX_PIC_SIZE_IN_MBS-1 )) < 0) - return retCode; - } - break; - - case PS_SLICE_GROUP_MAP_TYPE_DISPERSED: - break; - - case PS_SLICE_GROUP_MAP_TYPE_FOREGROUND: - for (i = 0; i < pps->num_slice_groups_minus1; i++) - { - // Fetch MB address of the top-left corner - if ((retCode = ue_v( bitbuf, &pps->top_left[i], MAX_PIC_SIZE_IN_MBS-1)) < 0) - return retCode; - // Fetch MB address of the bottom-right corner (top-left address must - // be smaller than or equal to bottom-right address) - if ((retCode = ue_v( bitbuf, &pps->bottom_right[i], MAX_PIC_SIZE_IN_MBS-1)) < 0) - return retCode; - - if (pps->top_left[i] > pps->bottom_right[i]) - return PS_ERR_ILLEGAL_VALUE; - } - break; - - case PS_SLICE_GROUP_MAP_TYPE_CHANGING_3: - case PS_SLICE_GROUP_MAP_TYPE_CHANGING_4: - case PS_SLICE_GROUP_MAP_TYPE_CHANGING_5: - if ((retCode = u_n( bitbuf, 1, &pps->slice_group_change_direction_flag)) < 0) - return retCode; - if ((retCode = ue_v( bitbuf, &pps->slice_group_change_rate_minus1, MAX_PIC_SIZE_IN_MBS-1)) < 0) - return retCode; - break; - - case PS_SLICE_GROUP_MAP_TYPE_EXPLICIT: - - if ((retCode = ue_v( bitbuf, &pic_size_in_map_units_minus1, MAX_PIC_SIZE_IN_MBS-1 )) < 0) - return retCode; - - // Allocate array for slice group ids if not already allocated - if (pic_size_in_map_units_minus1 != pps->pic_size_in_map_units_minus1) - { - User::Free(pps->slice_group_id); - - pps->slice_group_id = (unsigned int *)User::Alloc( (pic_size_in_map_units_minus1+1) * sizeof(int)); - - if (pps->slice_group_id == 0) - return PS_ERR_MEM_ALLOC; - - pps->pic_size_in_map_units_minus1 = pic_size_in_map_units_minus1; - } - - // Calculate len = ceil( Log2( num_slice_groups_minus1 + 1 ) ) - tmp = pps->num_slice_groups_minus1 + 1; - tmp = tmp >> 1; - for( len = 0; len < 16 && tmp != 0; len++ ) - tmp >>= 1; - - if ( (((unsigned)1)<num_slice_groups_minus1 + 1) ) - len++; - - for( i = 0; i <= pps->pic_size_in_map_units_minus1; i++ ) - { - if ((retCode = u_n( bitbuf, len, &pps->slice_group_id[i])) < 0) - return retCode; - } - - break; - - default: - // Cannnot happen - break; - } - } - - if ((retCode = ue_v( bitbuf, &pps->num_ref_idx_l0_active_minus1, 31 )) < 0) - return retCode; - - if ((retCode = ue_v( bitbuf, &pps->num_ref_idx_l1_active_minus1, 31 )) < 0) - return retCode; - - if ((retCode = u_n( bitbuf, 1, &pps->weighted_pred_flag)) < 0) - return retCode; - - if ((retCode = u_n( bitbuf, 2, &pps->weighted_bipred_idc)) < 0) - return retCode; - - if (pps->weighted_bipred_idc > 2) - return PS_ERR_ILLEGAL_VALUE; - - if ((retCode = se_v( bitbuf, &pps->pic_init_qp_minus26, -26, 25 )) < 0) - return retCode; - - if ((retCode = se_v( bitbuf, &pps->pic_init_qs_minus26, -26, 25 )) < 0) - return retCode; - - if ((retCode = se_v( bitbuf, &pps->chroma_qp_index_offset, -12, 12 )) < 0) - return retCode; - - pps->chroma_qp_index_offset = clip(MIN_CHROMA_QP_INDEX, MAX_CHROMA_QP_INDEX, pps->chroma_qp_index_offset); - - if ((retCode = u_n( bitbuf, 1, &pps->deblocking_filter_parameters_present_flag )) < 0) - return retCode; - - if ((retCode = u_n( bitbuf, 1, &pps->constrained_intra_pred_flag )) < 0) - return retCode; - - if ((retCode = u_n( bitbuf, 1, &pps->redundant_pic_cnt_present_flag )) < 0) - return retCode; - - if (bibSkipTrailingBits(bitbuf) < 0) - return PS_ERROR; - - // Store the size of the PPS set - pps->PPSlength = bitbuf->bytePos; - - syncBitBufferBitpos(bitbuf); - - // If we had a possible conflict, compare the PPS sets with the same id to see if only one PPS set can be used. - if (possibleIdConflict) - { - useOnePPS = ComparePPSSets(ppsList[pic_parameter_set_id],pps); - - if (!useOnePPS) - { - TUint trailingBits = GetNumTrailingBits(bitbuf); - TInt diff = 0; - TUint oldPPSId = pic_parameter_set_id; - TUint oldIdLength = ReturnUnsignedExpGolombCodeLength(oldPPSId); - TUint newIdLength = ReturnUnsignedExpGolombCodeLength(newPPSId); - - for (i=0; iseq_parameter_set_id]->newSPSId != ppsList[i]->seq_parameter_set_id) - useOnePPS = 0; - else - { - // We can use this previously generated PPSId here also - newPPSId = i; - break; - } - } - else - { - if (pps->seq_parameter_set_id != ppsList[i]->seq_parameter_set_id) - useOnePPS = 0; - else - { - // We can use this previously generated PPSId here also - newPPSId = i; - break; - } - } - } - } - - if ( newPPSId > PS_MAX_NUM_OF_PPS ) - { - // We have reached maximum number of PPS, return an error - return PS_ERROR; - } - - (*aNumPPS)++; - - // Set indexChanged to true and give the new index to old PPS, so that (new) slices can refer to the new PPS - ppsList[pic_parameter_set_id]->indexChanged = 1; - ppsList[pic_parameter_set_id]->newPPSId = newPPSId; // The new Id - - if (aFrameFromEncoder) - ppsList[pic_parameter_set_id]->encPPSId = newPPSId; // The new Id - else - ppsList[pic_parameter_set_id]->origPPSId = newPPSId; // The new Id - - // Store the new PPS at the new index, unless we are using a previously stored PPS - if (!ppsList[newPPSId]) - ppsList[newPPSId] = pps; - - // Restore the bit buffer position at the PPS Id - bitbuf->bitpos = bitPosit; - bitbuf->bytePos = bytePosit; - - if(trailingBits > 8) - { - trailingBits = 8; - } - - if ( oldIdLength == newIdLength ) - { - // Just encode the new Id on top of the old Id - bitbuf->bitpos += oldIdLength; - if (bitbuf->bitpos > 8) - { - // Go to the right byte and bit position - bitbuf->bytePos -= bitbuf->bitpos / 8; - bitbuf->bitpos = bitbuf->bitpos % 8; - } - - EncodeUnsignedExpGolombCode(bitbuf, newPPSId); - } - else if ( oldIdLength < newIdLength ) - { - diff = newIdLength - oldIdLength; - - // Adjust the PPS length - if (diff >= 8) - { - // Add as many extra bytes as is required - pps->PPSlength += (diff / 8); - } - - if ( trailingBits < (diff % 8) ) - { - // Add one byte since there aren't enough trailing bits for the extra bits - pps->PPSlength += 1; - } - - ShiftBufferRight(bitbuf, diff, trailingBits, oldIdLength); - - // After shifting, encode the new value to the bit buffer - EncodeUnsignedExpGolombCode(bitbuf, newPPSId); - } - else - { - // New id's length is smaller than old id's length - diff = oldIdLength - newIdLength; - - if (diff >= 8) - { - // Adjust the PPS length - pps->PPSlength -= (diff / 8); - } - - ShiftBufferLeft(bitbuf, diff, oldIdLength); - - // After shifting, encode the new value to the bit buffer - EncodeUnsignedExpGolombCode(bitbuf, newPPSId); - } - - // Store the position of the bit buffer for possible SPS id modification - // The right bit position is the current minus the size of the SPS id length - bitSPSPosit = bitbuf->bitpos - ReturnUnsignedExpGolombCodeLength(pps->seq_parameter_set_id); - byteSPSPosit = bitbuf->bytePos; - - if(bitSPSPosit < 1) - { - byteSPSPosit++; - bitSPSPosit += 8; - } - } - else - { - // In case the index was changed for some earlier PPS, - // reset the index changed value back to zero - ppsList[pic_parameter_set_id]->indexChanged = 0; - } - } - - if ( modifySPSId ) - { - TUint trailingBits = GetNumTrailingBits(bitbuf); - TInt diff = 0; - - TUint oldSPSId = pps->seq_parameter_set_id; - TUint newSPSId = spsList[pps->seq_parameter_set_id]->newSPSId; - - TUint oldIdLength = ReturnUnsignedExpGolombCodeLength(oldSPSId); - TUint newIdLength = ReturnUnsignedExpGolombCodeLength(newSPSId); - - - // Restore the bit buffer position at the SPS Id - bitbuf->bitpos = bitSPSPosit; - bitbuf->bytePos = byteSPSPosit; - - if(trailingBits > 8) - { - trailingBits = 8; - } - - if ( oldIdLength == newIdLength ) - { - // Just encode the new Id on top of the old Id - bitbuf->bitpos += oldIdLength; - if(bitbuf->bitpos > 8) - { - // Go to the right byte and bit position - bitbuf->bytePos -= bitbuf->bitpos / 8; - bitbuf->bitpos = bitbuf->bitpos % 8; - } - - EncodeUnsignedExpGolombCode(bitbuf, newSPSId); - } - else if ( oldIdLength < newIdLength ) - { - diff = newIdLength - oldIdLength; - - // Adjust the PPS length - if (diff >= 8) - { - // Add as many extra bytes as is required - pps->PPSlength += (diff / 8); - } - - if ( trailingBits < (diff % 8) ) - { - // Add one byte since there aren't enough trailing bits for the extra bits - pps->PPSlength += 1; - } - - ShiftBufferRight(bitbuf, diff, trailingBits, oldIdLength); - - // After shifting, encode the new value to the bit buffer - EncodeUnsignedExpGolombCode(bitbuf, newSPSId); - - } - else - { - // New id's length is smaller than old id's length - diff = oldIdLength - newIdLength; - - if (diff >= 8) - { - // Adjust the PPS length - pps->PPSlength -= (diff / 8); - } - - ShiftBufferLeft(bitbuf, diff, oldIdLength); - - // After shifting, encode the new value to the bit buffer - EncodeUnsignedExpGolombCode(bitbuf, newSPSId); - } - - // Modify the SPS id in the pps - pps->seq_parameter_set_id = newSPSId; - } - - if ( IsPPSSupported(pps) == KErrNotSupported ) - return KErrNotSupported; - - - // Allocate memory for the encoded PPS data in case we have a new PPS (i.e. a new original PPS or a PPS with a new index) - if ( !useOnePPS ) - { - // Store the buffer containing the PPS set in order to later pass it to the 3gpmp4library - pps->codedPPSBuffer = (TUint8*) User::Alloc(pps->PPSlength); - - if (pps->codedPPSBuffer == 0) - return PS_ERR_MEM_ALLOC; - - for (i=0; iPPSlength; i++) - { - pps->codedPPSBuffer[i] = bitbuf->data[i]; - } - } - else if (possibleIdConflict) - { - // In case of conflicting id and one PPS, free the PPS allocated here - User::Free(pps); - } - - return PS_OK; -} - -#endif // VIDEOEDITORENGINE_AVC_EDITING - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/sequence.cpp --- a/videoeditorengine/avcedit/src/sequence.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2074 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "globals.h" -#include "bitbuffer.h" -#include "vld.h" -#include "framebuffer.h" -#include "avcdapi.h" -#include "parameterset.h" -#include "dpb.h" -#include "sequence.h" - - -#define SEQ_OK 0 -#define SEQ_ERROR -1 -#define SEQ_ERR_MEM -2 -#define SEQ_ERR_GAPS_IN_FRAME_NUM -3 -#define SEQ_ERR_DPB_CORRUPTED -4 - -// Definitions of SEI types -#define SEI_TYPE_SCENE_INFO 9 - - -#ifdef CHECK_MV_RANGE -int maxVerticalMvRange; -#endif - - -void GenerateEmptyFrame(sequence_s *seq, bitbuffer_s *bitbuf, TUint aFrameNumber); - - - -/* - * setLower4Bits: - * - * Parameters: - * value the destination to store the 4 bits - * bits the 4 bits to be copied - * - * Function: - * Assign the value to the lowest 4 bits - * - * Return: - * - - */ -#define setLower4Bits(value, bits) (value) = ((value) & ~0xF) | ((bits)) - - -/* - * - * avcdOpen: - * - * Parameters: - * - - * - * Function: - * Open AVC decoder. - * - * Returns: - * Pointer to initialized avcdDecoder_t object - */ -avcdDecoder_t *avcdOpen() -{ - sequence_s *seq; - - - // Allocate sequence object - if ((seq = (sequence_s *)User::Alloc(sizeof(sequence_s))) == NULL) - return NULL; - - memset(seq, 0, sizeof(sequence_s)); - - // Open bitbuffer - if ((seq->bitbuf = bibOpen()) == NULL) - return NULL; - - seq->isFirstSliceOfSeq = 1; - seq->unusedShortTermFrameNum = -1; - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - // Open slices - if ((seq->currSlice = sliceOpen()) == NULL) - return NULL; - - if ((seq->nextSlice = sliceOpen()) == NULL) - return NULL; - - // Open dpb - if ((seq->dpb = dpbOpen()) == NULL) - return NULL; - - seq->iFrameNumber = 0; - seq->iFromEncoder = 0; - seq->iEncodeUntilIDR = 0; - seq->iBitShiftInSlice = 0; - seq->iPreviousPPSId = 0; - seq->iNumSPS = 0; - seq->iNumPPS = 0; - - seq->iTotalFrameNumber = 0; - -#endif // VIDEOEDITORENGINE_AVC_EDITING - - return seq; -} - - -/* - * - * avcdClose: - * - * Parameters: - * seq Sequence object - * - * Function: - * Close sequence. - * - * Returns: - * - - */ -void avcdClose(avcdDecoder_t *dec) -{ - sequence_s *seq = (sequence_s *)dec; - - /* Close bitbuffer */ - bibClose(seq->bitbuf); - - /* Close parameter sets */ - psCloseParametersSets(seq->spsList, seq->ppsList); - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - /* Close current frame */ - frmClose(seq->recoBuf, seq->mbData); - - /* Close decoded picture buffer */ - dpbClose(seq->dpb); - - /* Close slices */ - sliceClose(seq->currSlice); - sliceClose(seq->nextSlice); - -#endif // VIDEOEDITORENGINE_AVC_EDITING - - User::Free(seq); -} - - -/* - * - * initSPSParsing - * - * Parameters: - * dec Sequence object - * nauUnitBits Buffer containing SPS NAL unit - * nalUnitLen Length of buffer - * - * Function: - * Initialises bit buffer for parsing, checks - * nal_unit_type - * - * Returns: - * KErrNone for no error, negative value for error - */ -TInt initSPSParsing(avcdDecoder_t *dec, void *nalUnitBits, TUint* nalUnitLen) -{ - sequence_s *seq = (sequence_s *)dec; - - TInt nalHeaderByte; - TInt nalType; - TUint nalUnitLength = *nalUnitLen; - - // tempData allocation - TUint8* tempData = (TUint8*) User::Alloc(nalUnitLength); - - if (!tempData) - return KErrNoMemory; - - Mem::Copy(tempData, nalUnitBits, nalUnitLength); - - if (bibInit(seq->bitbuf, tempData, nalUnitLength) < 0) - { - User::Free(seq->bitbuf->data); - return AVCD_ERROR; - } - - if (bibGetByte(seq->bitbuf, &nalHeaderByte)) - { - User::Free(seq->bitbuf->data); - return AVCD_ERROR; - } - - // Decode NAL unit type - nalType = nalHeaderByte & 0x1F; - - if (nalType != NAL_TYPE_SPS) - { - User::Free(seq->bitbuf->data); - return AVCD_ERROR; - } - - return KErrNone; -} - -/* - * - * avcdParseLevel - * - * Parameters: - * dec Sequence object - * nauUnitBits Buffer containing SPS NAL unit - * nalUnitLen Length of buffer - * aLevel [output]Parsed level - * - * Function: - * Parses AVC level from SPS - * - * Returns: - * KErrNone for no error, negative value for error - */ -TInt avcdParseLevel(avcdDecoder_t *dec, void *nalUnitBits, TUint* nalUnitLen, TInt& aLevel) -{ - - TInt error = initSPSParsing(dec, nalUnitBits, nalUnitLen); - - if (error < 0) - return AVCD_ERROR; - - sequence_s *seq = (sequence_s *)dec; - - error = psParseLevelFromSPS(seq->bitbuf, aLevel); - - User::Free(seq->bitbuf->data); - - if (error < 0) - return AVCD_ERROR; - - return KErrNone; - -} - -/* - * - * avcdParseResolution - * - * Parameters: - * dec Sequence object - * nauUnitBits Buffer containing SPS NAL unit - * nalUnitLen Length of buffer - * aResolution [output]Parsed resolution - * - * Function: - * Parses resolution from SPS - * - * Returns: - * KErrNone for no error, negative value for error - */ -TInt avcdParseResolution(avcdDecoder_t *dec, void *nalUnitBits, TUint* nalUnitLen, - TInt& aWidth, TInt& aHeight) -{ - - TInt error = initSPSParsing(dec, nalUnitBits, nalUnitLen); - - if (error < 0) - return AVCD_ERROR; - - sequence_s *seq = (sequence_s *)dec; - - error = psDecodeSPS(seq->bitbuf, seq->spsList, aWidth, aHeight); - - User::Free(seq->bitbuf->data); - - if (error < 0) - return AVCD_ERROR; - - return KErrNone; - -} - - - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - -/* - * - * slidingWindowDecRefPicMarking: - * - * Parameters: - * seq Sequence object - * - * Function: - * Sliding window decoded reference picture marking. Reference pictures - * in dpb are marked based on first in first out principle. - * - * Returns: - * SEQ_OK for no error, negative value for error - */ -static int slidingWindowDecRefPicMarking(sequence_s *seq) -{ - dpb_s *dpb; - int numRefPics; - - dpb = seq->dpb; - - numRefPics = dpb->numShortTermPics + dpb->numLongTermPics; - - /* If dpb contains maximum number of reference pitures allowed, short */ - /* term reference picture with lowest picture number is removed. */ - if (numRefPics == dpb->maxNumRefFrames) { - if (dpb->numShortTermPics == 0) { - PRINT((_L("numShortTerm must be greater than zero\n"))); - return SEQ_ERR_DPB_CORRUPTED; - } - - dpbMarkLowestShortTermPicAsNonRef(dpb); - } - - return SEQ_OK; -} - - -/* - * - * adaptiveDecRefPicMarking: - * - * Parameters: - * seq Sequence object - * - * Function: - * Adaptive decoded reference picture marking. Reference pictures in dpb - * are marked based on memory management command operations that were - * decoded in slice header earlier. - * - * Returns: - * SEQ_OK for no error, SEQ_ERR_DPB_CORRUPTED for error in DPB - */ -static int adaptiveDecRefPicMarking(sequence_s *seq) -{ - dpb_s *dpb; - sliceMMCO_s *mmcoCmdList; - int32 currPicNum, picNumX; - int i; - - dpb = seq->dpb; - currPicNum = seq->currSlice->frame_num; - mmcoCmdList = seq->currSlice->mmcoCmdList; - - i = 0; - do { - switch (mmcoCmdList[i].memory_management_control_operation) { - case 1: - picNumX = currPicNum - (mmcoCmdList[i].difference_of_pic_nums_minus1 + 1); - if (dpbMarkShortTermPicAsNonRef(dpb, picNumX) < 0) - return SEQ_ERR_DPB_CORRUPTED; - break; - case 2: - if (dpbMarkLongTermPicAsNonRef(dpb, mmcoCmdList[i].long_term_pic_num) < 0) - return SEQ_ERR_DPB_CORRUPTED; - break; - case 3: - picNumX = currPicNum - (mmcoCmdList[i].difference_of_pic_nums_minus1 + 1); - if (dpbMarkShortTermPicAsLongTerm(dpb, picNumX, mmcoCmdList[i].long_term_frame_idx) < 0) - return SEQ_ERR_DPB_CORRUPTED; - break; - case 4: - dpbSetMaxLongTermFrameIdx(dpb, mmcoCmdList[i].max_long_term_frame_idx_plus1); - break; - case 5: - dpbMarkAllPicsAsNonRef(dpb); - dpb->maxLongTermFrameIdx = -1; - break; - case 6: - /* To avoid duplicate of longTermFrmIdx */ - dpbVerifyLongTermFrmIdx(dpb, mmcoCmdList[i].long_term_frame_idx); - - seq->recoBuf->refType = FRM_LONG_TERM_PIC; - seq->recoBuf->longTermFrmIdx = mmcoCmdList[i].long_term_frame_idx; - break; - } - i++; - } while (mmcoCmdList[i].memory_management_control_operation != 0 && i < MAX_NUM_OF_MMCO_OPS); - - return SEQ_OK; -} - - -/* - * - * decRefPicMarking: - * - * Parameters: - * seq Sequence object - * - * Function: - * Decoded reference picture marking. Reference pictures in dpb are marked - * differently depending on whether current picture is IDR picture or not - * and whether it is reference picture or non-reference picture. - * If current picture is non-IDR reference picture, reference pictures are - * marked with either sliding window marking process or adaptive marking - * process depending on the adaptiveRefPicMarkingModeFlag flag. - * - * Returns: - * - - */ -static int decRefPicMarking(sequence_s *seq) -{ - slice_s *slice; - frmBuf_s *recoBuf; - - slice = seq->currSlice; - recoBuf = seq->recoBuf; - - recoBuf->refType = FRM_SHORT_TERM_PIC; - recoBuf->frameNum = slice->frame_num; - recoBuf->hasMMCO5 = slice->picHasMMCO5; - recoBuf->isIDR = slice->isIDR; - - if (slice->isIDR) { - recoBuf->idrPicID = slice->idr_pic_id; - - /* All reference frames are marked as non-reference frames */ - dpbMarkAllPicsAsNonRef(seq->dpb); - - /* Set reference type for current picture */ - if (!slice->long_term_reference_flag) { - seq->dpb->maxLongTermFrameIdx = -1; - } - else { - recoBuf->refType = FRM_LONG_TERM_PIC; - recoBuf->longTermFrmIdx = 0; - seq->dpb->maxLongTermFrameIdx = 0; - } - } - else if (slice->nalRefIdc != 0) { - if (!slice->adaptive_ref_pic_marking_mode_flag) - return slidingWindowDecRefPicMarking(seq); - else - return adaptiveDecRefPicMarking(seq); - } - else - recoBuf->refType = FRM_NON_REF_PIC; - - return SEQ_OK; -} - - -/* - * - * buildSliceGroups: - * - * Parameters: - * seq Sequence object - * slice Slice object - * sps Sequence parameter set - * pps Picture parameter set - * - * Function: - * Build slice group map. Syntax elements for slice groups are - * in active picture parameter set. - * - * Returns: - * - - * - */ -static void buildSliceGroups(sequence_s* seq, slice_s *slice, - seq_parameter_set_s *sps, pic_parameter_set_s *pps) -{ - int xTopLeft, yTopLeft; - int xBottomRight, yBottomRight; - int x, y; - int leftBound, topBound; - int rightBound, bottomBound; - int xDir, yDir; - int mapUnitsInSliceGroup0; - int mapUnitVacant; - int sizeOfUpperLeftGroup; - int iGroup, picSizeInMapUnits; - int picWidthInMbs, picHeightInMapUnits; - int i, j, k; - int *sliceMap; - - sliceMap = seq->mbData->sliceMap; - - picWidthInMbs = sps->pic_width_in_mbs_minus1+1; - picHeightInMapUnits = sps->pic_height_in_map_units_minus1+1; - - picSizeInMapUnits = picWidthInMbs * picHeightInMapUnits; - - if (pps->num_slice_groups_minus1 == 0) { - /* Only one slice group */ - for (i = 0; i < picSizeInMapUnits; i++) - sliceMap[i] = 0; - } - else { - /* There are more than one slice groups in this picture */ - - switch (pps->slice_group_map_type) { - - case PS_SLICE_GROUP_MAP_TYPE_INTERLEAVED: - i = 0; - do { - for (iGroup = 0; iGroup <= (int)pps->num_slice_groups_minus1 && i < picSizeInMapUnits; - i += pps->run_length_minus1[iGroup++] + 1) - { - for (j = 0; j <= (int)pps->run_length_minus1[iGroup] && i+j < picSizeInMapUnits; j++) - sliceMap[i+j] = iGroup; /* Only the group number */ - } - } while (i < picSizeInMapUnits); - break; - - case PS_SLICE_GROUP_MAP_TYPE_DISPERSED: - for ( i = 0; i < picSizeInMapUnits; i++ ) - sliceMap[i] = ( ( i % picWidthInMbs ) + - ( ( ( i / picWidthInMbs ) * ( pps->num_slice_groups_minus1 + 1 ) ) / 2 ) ) - % ( pps->num_slice_groups_minus1 + 1 ); - break; - - case PS_SLICE_GROUP_MAP_TYPE_FOREGROUND: - for (i = 0; i < picSizeInMapUnits; i++) - setLower4Bits(sliceMap[i], pps->num_slice_groups_minus1); - for (iGroup = pps->num_slice_groups_minus1 - 1; iGroup >= 0; iGroup--) { - yTopLeft = pps->top_left[iGroup] / picWidthInMbs; - xTopLeft = pps->top_left[iGroup] % picWidthInMbs; - yBottomRight = pps->bottom_right[iGroup] / picWidthInMbs; - xBottomRight = pps->bottom_right[iGroup] % picWidthInMbs; - for (y = yTopLeft; y <= yBottomRight; y++) - for (x = xTopLeft; x <= xBottomRight; x++) - sliceMap[y * picWidthInMbs + x] = iGroup; - } - break; - - case PS_SLICE_GROUP_MAP_TYPE_CHANGING_3: - /* mapUnitsInSliceGroup0 */ - mapUnitsInSliceGroup0 = min((int)(slice->slice_group_change_cycle * (pps->slice_group_change_rate_minus1+1)), picSizeInMapUnits); - - for (i = 0; i < picSizeInMapUnits; i++) - sliceMap[i] = 1; // mapUnitToSliceGroupMap[ i ] = 1; - - x = (picWidthInMbs - pps->slice_group_change_direction_flag) / 2; - y = (picHeightInMapUnits - pps->slice_group_change_direction_flag ) / 2; - // ( leftBound, topBound ) = ( x, y ) - leftBound = x; - topBound = y; - // ( rightBound, bottomBound ) = ( x, y ) - rightBound = x; - bottomBound = y; - // ( xDir, yDir ) = ( slice_group_change_direction_flag - 1, slice_group_change_direction_flag ) - xDir = pps->slice_group_change_direction_flag - 1; - yDir = pps->slice_group_change_direction_flag; - for (i = 0; i < mapUnitsInSliceGroup0; i += mapUnitVacant) { - mapUnitVacant = ( (sliceMap[y * picWidthInMbs + x] & 0xF) == 1); - if (mapUnitVacant) - setLower4Bits(sliceMap[y * picWidthInMbs + x], 0); - if (xDir == -1 && x == leftBound) { - leftBound = max(leftBound - 1, 0); - x = leftBound; - //( xDir, yDir ) = ( 0, 2 * slice_group_change_direction_flag - 1 ) - xDir = 0; - yDir = 2 * pps->slice_group_change_direction_flag - 1; - } - else if (xDir == 1 && x == rightBound) { - rightBound = min(rightBound + 1, picWidthInMbs - 1); - x = rightBound; - //( xDir, yDir ) = ( 0, 1 - 2 * slice_group_change_direction_flag ) - xDir = 0; - yDir = 1 - 2 * pps->slice_group_change_direction_flag; - } - else if (yDir == -1 && y == topBound) { - topBound = max(topBound - 1, 0); - y = topBound; - //( xDir, yDir ) = ( 1 - 2 * slice_group_change_direction_flag, 0 ) - xDir = 1 - 2 * pps->slice_group_change_direction_flag; - yDir = 0; - } - else if (yDir == 1 && y == bottomBound) { - bottomBound = min(bottomBound + 1, picHeightInMapUnits - 1); - y = bottomBound; - //( xDir, yDir ) = ( 2 * slice_group_change_direction_flag - 1, 0 ) - xDir = 2 * pps->slice_group_change_direction_flag - 1; - yDir = 0; - } - else { - //( x, y ) = ( x + xDir, y + yDir ) - x = x + xDir; - y = y + yDir; - } - } - break; - - case PS_SLICE_GROUP_MAP_TYPE_CHANGING_4: - /* mapUnitsInSliceGroup0 */ - mapUnitsInSliceGroup0 = min((int)(slice->slice_group_change_cycle * (pps->slice_group_change_rate_minus1+1)), picSizeInMapUnits); - - sizeOfUpperLeftGroup = ( pps->slice_group_change_direction_flag ? - ( picSizeInMapUnits - mapUnitsInSliceGroup0 ) : mapUnitsInSliceGroup0 ); - - for( i = 0; i < picSizeInMapUnits; i++ ) - if( i < sizeOfUpperLeftGroup ) - sliceMap[ i ] = pps->slice_group_change_direction_flag; - else - sliceMap[ i ] = 1 - pps->slice_group_change_direction_flag; - break; - - case PS_SLICE_GROUP_MAP_TYPE_CHANGING_5: - /* mapUnitsInSliceGroup0 */ - mapUnitsInSliceGroup0 = min((int)(slice->slice_group_change_cycle * (pps->slice_group_change_rate_minus1+1)), picSizeInMapUnits); - - sizeOfUpperLeftGroup = ( pps->slice_group_change_direction_flag ? - ( picSizeInMapUnits - mapUnitsInSliceGroup0 ) : mapUnitsInSliceGroup0 ); - - k = 0; - for( j = 0; j < picWidthInMbs; j++ ) - for( i = 0; i < picHeightInMapUnits; i++ ) - if( k++ < sizeOfUpperLeftGroup ) - sliceMap[ i * picWidthInMbs + j ] = pps->slice_group_change_direction_flag; - else - sliceMap[ i * picWidthInMbs + j ] = 1 - pps->slice_group_change_direction_flag; - break; - - case PS_SLICE_GROUP_MAP_TYPE_EXPLICIT: - for (i = 0; i < picSizeInMapUnits; i++) - sliceMap[i] = pps->slice_group_id[i]; - break; - - default: - break; - } - } - -} - - -/* - * - * isPicBoundary: - * - * Parameters: - * seq Sequence object - * - * Function: - * Check if current slice and next slice belong to different pictures. - * - * Returns: - * 1: slices belong to different pictures (picture boundary detected) - * 0: slices belong to the same picture - * - */ -static int isPicBoundary(sequence_s *seq) -{ - slice_s *currSlice, *nextSlice; - seq_parameter_set_s *prevSps, *currSps; - - currSlice = seq->currSlice; - nextSlice = seq->nextSlice; - - /* frame_num differs in value. */ - if (currSlice->frame_num != nextSlice->frame_num) - return 1; - - /* nal_ref_idc differs in value with one of the nal_ref_idc values being equal to 0. */ - if ((currSlice->nalRefIdc != nextSlice->nalRefIdc) && - (currSlice->nalRefIdc == 0 || nextSlice->nalRefIdc == 0)) - return 1; - - /* nal_unit_type is equal to 5 for one coded slice NAL unit and */ - /* is not equal to 5 in the other coded slice NAL unit */ - if ((currSlice->nalType == NAL_TYPE_CODED_SLICE_IDR || nextSlice->nalType == NAL_TYPE_CODED_SLICE_IDR) && - (currSlice->nalType != nextSlice->nalType)) - return 1; - - /* nal_unit_type is equal to 5 for both and idr_pic_id differs in value. */ - if (currSlice->nalType == NAL_TYPE_CODED_SLICE_IDR && - nextSlice->nalType == NAL_TYPE_CODED_SLICE_IDR && - (currSlice->idr_pic_id != nextSlice->idr_pic_id)) - return 1; - - prevSps = seq->spsList[seq->ppsList[currSlice->pic_parameter_set_id]->seq_parameter_set_id]; - currSps = seq->spsList[seq->ppsList[nextSlice->pic_parameter_set_id]->seq_parameter_set_id]; - - /* pic_order_cnt_type is equal to 0 for both and */ - /* either pic_order_cnt_lsb differs in value, or delta_pic_order_cnt_bottom differs in value. */ - if ((prevSps->pic_order_cnt_type == 0 && currSps->pic_order_cnt_type == 0) && - ((currSlice->pic_order_cnt_lsb != nextSlice->pic_order_cnt_lsb) || - (currSlice->delta_pic_order_cnt_bottom != nextSlice->delta_pic_order_cnt_bottom))) - return 1; - - /* pic_order_cnt_type is equal to 1 for both and */ - /* either delta_pic_order_cnt[ 0 ] differs in value, or delta_pic_order_cnt[ 1 ] differs in value. */ - if ((prevSps->pic_order_cnt_type == 1 && currSps->pic_order_cnt_type == 1) && - ((currSlice->delta_pic_order_cnt_0 != nextSlice->delta_pic_order_cnt_0) || - (currSlice->delta_pic_order_cnt_1 != nextSlice->delta_pic_order_cnt_1))) - return 1; - - return 0; -} - - -/* - * - * decodePictureOrderCount: - * - * Parameters: - * seq Sequence object - * slice Slice object - * sps Sequence parameter set - * - * Function: - * Decode picture order count using syntax elements in slice object. - * - * Returns: - * poc - * - */ -static int decodePictureOrderCount(sequence_s* seq, slice_s *slice, - seq_parameter_set_s *sps) -{ - int i; - int32 maxPocLsb; - int32 expectedPicOrderCnt, picOrderCntCycleCnt = 0; - int32 expectedDeltaPerPicOrderCntCycle, frameNumInPicOrderCntCycle = 0, absFrameNum; - int32 tempPicOrderCnt; - int32 poc = 0; - - /* POC */ - if (sps->pic_order_cnt_type == 0) { - /* Reset prevPocMsb, prevPocLsb if needed */ - if (slice->isIDR || seq->prevPicHasMMCO5) { - seq->prevPocMsb = seq->prevPocLsb = 0; - } - /* PicOrderCntMsb is derived: */ - maxPocLsb = (u_int32)1 << (sps->log2_max_pic_order_cnt_lsb_minus4 + 4); - if ( (int32)slice->pic_order_cnt_lsb < seq->prevPocLsb && (seq->prevPocLsb - (int32)slice->pic_order_cnt_lsb ) >= (maxPocLsb / 2) ) - seq->pocMsb = seq->prevPocMsb + maxPocLsb; - else if ( (int32)slice->pic_order_cnt_lsb > seq->prevPocLsb && ((int32)slice->pic_order_cnt_lsb - seq->prevPocLsb) > (maxPocLsb / 2) ) - seq->pocMsb = seq->prevPocMsb - maxPocLsb; - else - seq->pocMsb = seq->prevPocMsb; - /* poc */ - poc = seq->pocMsb + slice->pic_order_cnt_lsb; - } - - else if (sps->pic_order_cnt_type == 1) { - /* Reset prevFrameNumOffset if needed */ - if (!slice->isIDR && seq->prevPicHasMMCO5) /* : prevPicHasMMCO5 has not been tested. */ - seq->prevFrameNumOffset = 0; - - /* frameNumOffset is derived as follows: */ - if (slice->isIDR) - seq->frameNumOffset = 0; - else if (seq->prevFrameNum > (int32)slice->frame_num) - seq->frameNumOffset = seq->prevFrameNumOffset + slice->maxFrameNum; - else - seq->frameNumOffset = seq->prevFrameNumOffset; - - /* absFrameNum is derived as follows: */ - if (sps->num_ref_frames_in_pic_order_cnt_cycle != 0) - absFrameNum = seq->frameNumOffset + slice->frame_num; - else - absFrameNum = 0; - if (slice->nalRefIdc == 0 && absFrameNum > 0) - absFrameNum = absFrameNum - 1; - - /* When absFrameNum > 0, picOrderCntCycleCnt and frameNumInPicOrderCntCycle are derived as follows */ - if (absFrameNum > 0) { - picOrderCntCycleCnt = (absFrameNum - 1) / sps->num_ref_frames_in_pic_order_cnt_cycle; - frameNumInPicOrderCntCycle = (absFrameNum - 1) % sps->num_ref_frames_in_pic_order_cnt_cycle; - } - - /* expectedDeltaPerPicOrderCntCycle */ - expectedDeltaPerPicOrderCntCycle = 0; - for (i = 0; i < (int)sps->num_ref_frames_in_pic_order_cnt_cycle; i++) - expectedDeltaPerPicOrderCntCycle += sps->offset_for_ref_frame[i]; - - /* expectedPicOrderCnt */ - if (absFrameNum > 0) { - expectedPicOrderCnt = picOrderCntCycleCnt * expectedDeltaPerPicOrderCntCycle; - for (i = 0; i <= frameNumInPicOrderCntCycle; i++) - expectedPicOrderCnt = expectedPicOrderCnt + sps->offset_for_ref_frame[i]; - } - else - expectedPicOrderCnt = 0; - if (slice->nalRefIdc == 0) - expectedPicOrderCnt = expectedPicOrderCnt + sps->offset_for_non_ref_pic; - - /* poc */ - poc = expectedPicOrderCnt + slice->delta_pic_order_cnt_0; - } - - else if (sps->pic_order_cnt_type == 2) { - /* prevFrameNumOffset is derived as follows */ - if (!slice->isIDR && seq->prevPicHasMMCO5) - seq->prevFrameNumOffset = 0; - - /* FrameNumOffset is derived as follows. */ - if (slice->isIDR) - seq->frameNumOffset = 0; - else if (seq->prevFrameNum > (int32)slice->frame_num) - seq->frameNumOffset = seq->prevFrameNumOffset + slice->maxFrameNum; - else - seq->frameNumOffset = seq->prevFrameNumOffset; - - /* tempPicOrderCnt is derived as follows */ - if (slice->isIDR) - tempPicOrderCnt = 0; - else if (slice->nalRefIdc == 0) - tempPicOrderCnt = 2 * (seq->frameNumOffset + slice->frame_num) - 1; - else - tempPicOrderCnt = 2 * (seq->frameNumOffset + slice->frame_num); - - /* poc */ - poc = tempPicOrderCnt; - } - - return poc; -} - - -/* - * - * getOutputPic: - * - * Parameters: - * seq Sequence object - * - * Function: - * Get one output picture. Pictures are output from output queue and - * if queue is empty pictures are ouput from dpb. Ouput from dpb can only - * happen if sequence is finished (i.e there are not more bits to decode). - * - * Returns: - * 1: output picture is available - * 0: output picture is not available - */ -static int getOutputPic(sequence_s *seq) -{ - frmBuf_s *srcBuf; - seq_parameter_set_s *sps; - - /* If no slices have been decoded, there are no pictures available */ - if (seq->isFirstSliceOfSeq) - return 0; - - /* Check if there are pictures in output queue */ - if (seq->numQueuedOutputPics == 0) - { - - /* Get active sequence parameter set */ - sps = seq->spsList[seq->ppsList[seq->currSlice->pic_parameter_set_id]->seq_parameter_set_id]; - - /* - * There are no queued pictures, but we can still output a picture if - * at least one of the following conditions is true: - * - we have decoded all NAL units - * - num_reorder_frames in VUI parameters is zero - * - POC type is 2 - */ - if (seq->isSeqFinished || - sps->vui_parameters.num_reorder_frames == 0 || - sps->pic_order_cnt_type == 2) - { - int dummy; - - /* Check if there are pictures in dpb */ - srcBuf = dpbGetNextOutputPic(seq->dpb, &dummy); - if (!srcBuf) - return 0; /* There were no pictures to output */ - } - else - return 0; /* None of the conditions were true */ - } - else - { - /* Take next picture from queue. */ - srcBuf = seq->outputQueue[seq->outputQueuePos]; - - seq->numQueuedOutputPics--; - if (seq->numQueuedOutputPics == 0) - seq->outputQueuePos = 0; - else - seq->outputQueuePos++; - } - - srcBuf->forOutput = 0; - - return 1; -} - - -/* - * - * finishCurrentPic: - * - * Parameters: - * seq Sequence object - * - * Function: - * Finish decoding of current picture. Call loopfilter for the picture - * and try to store picture in dpb. Function also updates variables - * for previous decoded frame and previous decoded reference frame. - * - * Returns: - * 0 : no frames were output - * >0 : the number of frames output - * <0 : error - */ -static int finishCurrentPic(sequence_s *seq) -{ - slice_s *slice; - frmBuf_s *currPic; - int numOutput; - int retVal; - - slice = seq->currSlice; - currPic = seq->recoBuf; - - if ((retVal = decRefPicMarking(seq)) < 0) - return retVal; - - /* After the decoding of the current picture and the processing of the */ - /* memory management control operations a picture including */ - /* a memory_management_control_operation equal to 5 shall be inferred */ - /* to have had frame_num equal to 0 for all subsequent use in the decoding */ - /* process. */ - if (slice->picHasMMCO5) - currPic->frameNum = slice->frame_num = 0; - - /* Try to store current picture to dpb */ - numOutput = dpbStorePicture(seq->dpb, currPic, seq->outputQueue); - /* If numOutput != 0, picture was not stored */ - - if (numOutput != 0) - { - - /* numOutput != 0 implies that pictures were output from dpb */ - seq->outputQueuePos = 0; - seq->numQueuedOutputPics = numOutput; - - /* Picture was not stored so we have to store it later */ - seq->isDpbStorePending = 1; - } - else - seq->isDpbStorePending = 0; - - seq->prevFrameNum = slice->frame_num; - seq->prevFrameNumOffset = seq->frameNumOffset; - - seq->prevPicHasMMCO5 = slice->picHasMMCO5; - - /* prevRefFrameNum, prevPocLsb and prevPocMsb for latest reference picture */ - if (slice->nalRefIdc != 0) - { - seq->prevRefFrameNum = slice->frame_num; - seq->prevPocLsb = slice->pic_order_cnt_lsb; - seq->prevPocMsb = seq->pocMsb; - } - - seq->isCurrPicFinished = 1; - - return numOutput; -} - - -/* - * - * generateNonExistingFrames: - * - * Parameters: - * seq Sequence object - * - * Function: - * Generate non-existing frame for each unused frame number between - * two closest existing frames in decoding order. Generated frames - * are stored to dpb in finishCurrentPic function. - * - * Returns: - * 0 : no frames were output - * >0 : the number of frames output - * <0 : error - */ -static int generateNonExistingFrames(sequence_s *seq) -{ - slice_s *slice; - frmBuf_s *currPic; - int32 nextFrameNum; - int numOutput; - - slice = seq->currSlice; - currPic = seq->recoBuf; - - slice->picHasMMCO5 = 0; - slice->isIDR = 0; - slice->adaptive_ref_pic_marking_mode_flag = 0; - slice->nalType = NAL_TYPE_CODED_SLICE; - slice->nalRefIdc = 1; - - currPic->forOutput = 0; - currPic->nonExisting = 1; - - do { - slice->frame_num = seq->unusedShortTermFrameNum; - - dpbUpdatePicNums(seq->dpb, slice->frame_num, slice->maxFrameNum); - - numOutput = finishCurrentPic(seq); - - nextFrameNum = (seq->unusedShortTermFrameNum + 1) % seq->nextSlice->maxFrameNum; - - if (nextFrameNum == (int)seq->nextSlice->frame_num) - seq->unusedShortTermFrameNum = -1; - else - seq->unusedShortTermFrameNum = nextFrameNum; - - } while (numOutput == 0 && seq->unusedShortTermFrameNum >= 0); - - return numOutput; -} - - -/* - * - * initializeCurrentPicture: - * - * Parameters: - * seq Sequence object - * sps Active sequence parameter set - * pps Active picture parameter set - * width Picture width - * height Picture height - * - * Function: - * Current frame and dpb are initialized according to active - * parameter sets. - * - * Returns: - * SEQ_OK for no error, negative value for error - */ -static int initializeCurrentPicture(sequence_s *seq, seq_parameter_set_s *sps, - pic_parameter_set_s *pps, - int width, int height) - -{ - frmBuf_s *currPic; - slice_s *slice; - int i; - -#ifdef CHECK_MV_RANGE - if (sps->level_idc <= 10) - maxVerticalMvRange = 64; - else if (sps->level_idc <= 20) - maxVerticalMvRange = 128; - else if (sps->level_idc <= 30) - maxVerticalMvRange = 256; - else - maxVerticalMvRange = 512; -#endif - - currPic = seq->recoBuf; - slice = seq->currSlice; - - /* - * (Re)initialize frame buffer for current picture if picture size has changed - */ - - if (!currPic || width != currPic->width || height != currPic->height) { - frmClose(currPic, seq->mbData); - if ((currPic = frmOpen(&seq->mbData, width, height)) == NULL) - return SEQ_ERR_MEM; - seq->recoBuf = currPic; - } - - for (i = 0; i < MAX_SLICE_GROUP_NUM; i++) - seq->sliceNums[i] = 0; - - /* Build slice group map */ - buildSliceGroups(seq, slice, sps, pps); - - /* Parameter from SPS */ - currPic->constraintSet0flag = sps->constraint_set0_flag; - currPic->constraintSet1flag = sps->constraint_set1_flag; - currPic->constraintSet2flag = sps->constraint_set2_flag; - currPic->profile = sps->profile_idc; - currPic->level = sps->level_idc; - currPic->maxFrameNum = slice->maxFrameNum; - - /* Parameter from PPS */ - currPic->qp = pps->pic_init_qp_minus26 + 26; - - /* By default picture will be output */ - currPic->forOutput = 1; - currPic->nonExisting = 0; - currPic->picType = slice->slice_type; - currPic->isIDR = slice->isIDR; - - psGetAspectRatio(sps, &currPic->aspectRatioNum, &currPic->aspectRatioDenom); - currPic->overscanInfo = sps->vui_parameters.overscan_appropriate_flag; - currPic->videoFormat = sps->vui_parameters.video_format; - currPic->videoFullRangeFlag = sps->vui_parameters.video_full_range_flag; - currPic->matrixCoefficients = sps->vui_parameters.matrix_coefficients; - currPic->chromaSampleLocType = sps->vui_parameters.chroma_sample_loc_type_top_field; - currPic->numReorderFrames = sps->vui_parameters.num_reorder_frames; - - if (sps->frame_cropping_flag) { - currPic->cropLeftOff = sps->frame_crop_left_offset; - currPic->cropRightOff = sps->frame_crop_right_offset; - currPic->cropTopOff = sps->frame_crop_top_offset; - currPic->cropBottomOff = sps->frame_crop_bottom_offset; - } - else { - currPic->cropLeftOff = 0; - currPic->cropRightOff = 0; - currPic->cropTopOff = 0; - currPic->cropBottomOff = 0; - } - - if (sps->vui_parameters_present_flag && - sps->vui_parameters.timing_info_present_flag && - sps->vui_parameters.num_units_in_tick != 0) - currPic->frameRate = (float)(0.5 * (float)sps->vui_parameters.time_scale/(float)sps->vui_parameters.num_units_in_tick); - else - currPic->frameRate = 0.0; - - /* Get poc for current picture */ - currPic->poc = decodePictureOrderCount(seq, slice, sps); - - /* Set chroma qp index offset */ - currPic->chromaQpIndexOffset = pps->chroma_qp_index_offset; - - currPic->pictureStructure = 0; - - currPic->lossy = 0; - seq->isCurrPicFinished = 0; - seq->redundantPicCnt = slice->redundant_pic_cnt; - - return SEQ_OK; -} - -// parseSliceData -// Reads and parses slice data -static TInt parseSliceData(sequence_s *seq) -{ - slice_s *slice; - pic_parameter_set_s *pps; - seq_parameter_set_s *sps; - TInt width, height; - TInt sliceGroupNum, sliceID; - TInt retCode; - - // New slice becomes current slice - slice = seq->nextSlice; - seq->nextSlice = seq->currSlice; - seq->currSlice = slice; - - // Get current parameter sets - pps = seq->ppsList[slice->pic_parameter_set_id]; - sps = seq->spsList[pps->seq_parameter_set_id]; - - // Get picture size - width = (sps->pic_width_in_mbs_minus1+1)*16; - height = (sps->pic_height_in_map_units_minus1+1)*16; - - // If this is the first slice of a picture, initialize picture - if (seq->isFirstSliceOfSeq || seq->isPicBoundary) - { - - if (slice->isIDR || seq->isFirstSliceOfSeq) - { - - // Set dpb according to level - dpbSetSize(seq->dpb, sps->vui_parameters.max_dec_frame_buffering); - - seq->dpb->maxNumRefFrames = sps->num_ref_frames; - } - - retCode = initializeCurrentPicture(seq, sps, pps, width, height); - - if (retCode < 0) - return retCode; - } - else - { - if (IS_SLICE_P(slice->slice_type)) - // If there is a P-slice in the picture, mark picture as P-picture - seq->recoBuf->picType = slice->slice_type; - } - - // Compute picture numbers for all reference frames - if (!slice->isIDR) - dpbUpdatePicNums(seq->dpb, slice->frame_num, slice->maxFrameNum); - - // Get slice group number if there are more than 1 slice groups - if (pps->num_slice_groups_minus1 == 0) - sliceGroupNum = 0; - else - sliceGroupNum = seq->mbData->sliceMap[slice->first_mb_in_slice] & 0xF; - - // Increment slice number for current slice group (slice numbers start from 1) - seq->sliceNums[sliceGroupNum]++; - - // sliceID for current slice - sliceID = seq->sliceNums[sliceGroupNum]*16 | sliceGroupNum; - - - // Parse the macroblocks in the slice - retCode = sliceParseMacroblocks(slice, seq->recoBuf, seq->dpb, - pps, seq->mbData, sliceID, seq->bitbuf, - seq->iBitShiftInSlice); - - // Update sequence variables - seq->isFirstSliceOfSeq = 0; - seq->isPicBoundary = 0; - - if (retCode < 0) - return SEQ_ERROR; - else - return SEQ_OK; -} - - -// parseSlice -// Parses the slice header and calls parseSliceData to parse the slice data if necessary -static TInt parseSlice(sequence_s *seq, int nalType, int nalRefIdc) -{ - slice_s *slice; - TInt nextFrameNum; - TInt numOutput; - TInt retCode; - - - slice = seq->nextSlice; - - slice->nalType = nalType; - slice->nalRefIdc = nalRefIdc; - slice->isIDR = (nalType == NAL_TYPE_CODED_SLICE_IDR); - - slice->sliceDataModified = 0; - - // Reset the bit shift flag - seq->iBitShiftInSlice = EFalse; - - // Parse the slice header - retCode = ParseSliceHeader(slice, seq->spsList, seq->ppsList, seq->bitbuf, &seq->iFrameNumber, seq->iFromEncoder); - - if (slice->sliceDataModified) - seq->sliceDataModified = 1; - - if ( retCode != SLICE_STOP_PARSING ) - seq->iBitShiftInSlice = ETrue; - - if (retCode < 0) - return SEQ_ERROR; - - // Check if next slice belongs to next picture - if (seq->isFirstSliceOfSeq) - seq->isPicBoundary = 0; - else - seq->isPicBoundary = isPicBoundary(seq); - - if (!seq->isPicBoundary) - { - // There is no picture boundary. Decode new slice if redundant - // picture count is same as in previous slice - if (seq->isFirstSliceOfSeq || slice->redundant_pic_cnt == seq->redundantPicCnt) - return parseSliceData(seq); - else - return SEQ_OK; - } - else - { - // Picture boundary reached or all MBs of current picture were decoded. - if (!seq->isCurrPicFinished) - { - // Finish decoding of current picture - numOutput = finishCurrentPic(seq); - - // numOutput is the number of pictures in output queue - // If numOutput < 0, error occured - if (numOutput < 0) - return numOutput; - } - else - numOutput = 0; - - // Compute expected next frame number - nextFrameNum = (seq->prevRefFrameNum + 1) % slice->maxFrameNum; - - // Check if there is a gap in frame numbers - if (!slice->isIDR && (TInt)slice->frame_num != seq->prevRefFrameNum && - (TInt)slice->frame_num != nextFrameNum) - { - // Start filling in gaps in frame numbers - seq->unusedShortTermFrameNum = nextFrameNum; - - // If dpb was not full (i.e. we did not have to output any pictures), - // we can generate non-existing frames. - if (numOutput == 0) - numOutput = generateNonExistingFrames(seq); - } - - if (numOutput == 0) - { - // If there are no pictures in output queue we can decode next slice - return parseSliceData(seq); - } - else - { - // Don't decode slice since it belongs to next picture - return SEQ_OK; - } - } -} - - -// avcdParseParameterSet -// Parses SPS / PPS parameter sets from the input NAL unit -TInt avcdParseParameterSet(avcdDecoder_t *dec, void *nalUnitBits, TUint* nalUnitLen) -{ - sequence_s *seq = (sequence_s *)dec; - TInt nalHeaderByte; - TInt nalType; -// TInt nalRefIdc; - TInt retCode; - TUint nalUnitLength = *nalUnitLen; - - - PRINT((_L("Sequence::avcdParseParameterSet() in, frame # %d, total # %d"), seq->iFrameNumber, seq->iTotalFrameNumber)); - - // Check for end of stream - if (nalUnitBits == 0 || nalUnitLen == 0) - { - return AVCD_OK; - } - - // Allocate memory for the bitbuffer data, add 10 to nal length in case SPS/PPS sets are modified - seq->bitbuf->data = (TUint8*) User::Alloc(nalUnitLength+10); - - if (seq->bitbuf->data == 0) - return KErrNoMemory; - - Mem::FillZ(seq->bitbuf->data, (nalUnitLength+10)*sizeof(TUint8) ); - - TUint8* tpD = (TUint8*)nalUnitBits; - - Mem::Copy(seq->bitbuf->data, tpD, nalUnitLength*sizeof(TUint8)); - - // Initialize bitbuffer and get first byte containing NAL type and NAL ref idc - if (bibInit(seq->bitbuf, seq->bitbuf->data, nalUnitLength) < 0) - { - User::Free(seq->bitbuf->data); - - return AVCD_ERROR; - } - - if (bibGetByte(seq->bitbuf, &nalHeaderByte)) - { - User::Free(seq->bitbuf->data); - - return AVCD_ERROR; - } - - // Decode NAL unit type and reference indicator - nalType = nalHeaderByte & 0x1F; -// nalRefIdc = (nalHeaderByte & 0x60) >> 5; - - // Decode NAL unit data - switch (nalType) - { - case NAL_TYPE_SPS: // 7 - retCode = psParseSPS(seq->bitbuf, seq->spsList, seq->iFromEncoder, &seq->iEncodeUntilIDR, &seq->iNumSPS); - if ( retCode == KErrNotSupported) - { - User::Free(seq->bitbuf->data); - - return KErrNotSupported; - } - else if (retCode < 0) - { - User::Free(seq->bitbuf->data); - - return AVCD_ERROR; - } - break; - case NAL_TYPE_PPS: // 8 - retCode = psParsePPS(seq->bitbuf, seq->ppsList, seq->spsList, seq->iFromEncoder, &seq->iNumPPS); - if (retCode == KErrNotSupported) - { - User::Free(seq->bitbuf->data); - - return KErrNotSupported; - } - else if (retCode < 0) - { - User::Free(seq->bitbuf->data); - - return AVCD_ERROR; - } - break; - default: - PRINT((_L("Not a parameter set NAL type: (%i)\n"), nalType)); - break; - } - - // Take care of emulation prevention bytes - int error = bibEnd(seq->bitbuf); - - // Free the bitbuffer data - User::Free(seq->bitbuf->data); - - if (error != 0) - return error; - - return AVCD_OK; -} - - -// avcdParseOneNal -// Parses one input NAL unit -TInt avcdParseOneNal(avcdDecoder_t *dec, void *nalUnitBits, TUint* nalUnitLen) -{ - sequence_s *seq = (sequence_s *)dec; - TInt nalHeaderByte; - TInt nalType; - TInt nalRefIdc; - TInt retCode; - TUint nalUnitLength = *nalUnitLen; - - PRINT((_L("Sequence::avcdParseOneNal() in, frame # %d, total # %d"), seq->iFrameNumber, seq->iTotalFrameNumber)); - - /* - * The following conditions are tested to see what is the current decoder state - * and to act upon that state: - * - * - Check if picture can be output from output queue without further decoding. - * - Check if dpb store is pending (i.e current picture was not be - * stored to dpb during previous call because dpb was full). - * - Check any non-existing frames should be generated (i.e there were gaps in - * frame number). If non-existing frame(s) were generated, check output - * queue again. - * - Check for end of stream. If end of stream was reached then current picture - * is finished if not yet finished. Check again whether picture can be output - * from either output queue or dpb (check is internal to getOutputPic(...)). - * - Check if slice decode is pending (i.e only header of the latest slice was - * decoded during previous call and we now need to decode slice data) and if - * so, decode slice data. - * - Check any lost frames being recovered (i.e there were ref frames lost) - * If lost frames were rescued, check output queue again. - */ - - // We can return immediately if there are queued output pics - if (seq->numQueuedOutputPics > 0) - { - // "Flush" all output pictures - while (seq->numQueuedOutputPics > 0) - { - getOutputPic(seq); - } - } - - // Is current picture waiting to be moved to DPB? - if (seq->isDpbStorePending) - { - if (dpbStorePicture(seq->dpb, seq->recoBuf, seq->outputQueue) != 0) - { - PRINT((_L("Error: dpb store failed\n"))); - return AVCD_ERROR; - } - - seq->isDpbStorePending = 0; - } - - // Check for end of stream - if (nalUnitBits == 0 || nalUnitLen == 0) - { - if (!seq->isSeqFinished && !seq->isCurrPicFinished && seq->recoBuf != NULL) - { - if (finishCurrentPic(seq) < 0) - return AVCD_ERROR; - } - - seq->isSeqFinished = 1; - - getOutputPic(seq); - return AVCD_OK; - } - - // Reset the sliceDataModified flag - seq->sliceDataModified = 0; - - // Initialize bitbuffer and get first byte containing NAL type and NAL ref idc - if (bibInit(seq->bitbuf, (TUint8 *)nalUnitBits, nalUnitLength) < 0) - return AVCD_ERROR; - - if (bibGetByte(seq->bitbuf, &nalHeaderByte)) - return AVCD_ERROR; - - // Decode NAL unit type and reference indicator - nalType = nalHeaderByte & 0x1F; - nalRefIdc = (nalHeaderByte & 0x60) >> 5; - - // Decode NAL unit data - switch (nalType) - { - case NAL_TYPE_CODED_SLICE: // 1 - parseSlice(seq, nalType, nalRefIdc); - seq->iTotalFrameNumber++; - break; - case NAL_TYPE_CODED_SLICE_P_A: // 2 - case NAL_TYPE_CODED_SLICE_P_B: // 3 - case NAL_TYPE_CODED_SLICE_P_C: // 4 - PRINT((_L("Slice data partition NAL type (%i) not supported.\n"), nalType)); - break; - case NAL_TYPE_CODED_SLICE_IDR: // 5 - parseSlice(seq, nalType, nalRefIdc); - seq->iTotalFrameNumber++; - break; - case NAL_TYPE_SEI: // 6 - PRINT((_L("SEI NAL unit (6) skipped.\n"))); - break; - case NAL_TYPE_SPS: // 7 - retCode = psParseSPS(seq->bitbuf, seq->spsList, seq->iFromEncoder, &seq->iEncodeUntilIDR, &seq->iNumSPS); - if ( retCode == KErrNotSupported) - return KErrNotSupported; - else if (retCode < 0) - return AVCD_ERROR; - break; - case NAL_TYPE_PPS: // 8 - retCode = psParsePPS(seq->bitbuf, seq->ppsList, seq->spsList, seq->iFromEncoder, &seq->iNumPPS); - if (retCode == KErrNotSupported) - return KErrNotSupported; - else if (retCode < 0) - return AVCD_ERROR; - break; - case NAL_TYPE_PIC_DELIMITER: // 9 - PRINT((_L("Picture Delimiter NAL unit (9) skipped.\n"))); - break; - case NAL_TYPE_END_SEQ: // 10 - PRINT((_L("End of Sequence NAL unit (10) skipped.\n"))); - break; - case NAL_TYPE_END_STREAM: // 11 - PRINT((_L("End of Stream NAL unit (11) skipped.\n"))); - break; - case NAL_TYPE_FILLER_DATA: // 12 - PRINT((_L("Filler Data NAL unit (12) skipped.\n"))); - break; - default: - // Unspecied NAL types 0 and 24-31 - if (nalType == 0 || (nalType >= 24 && nalType <= 31)) - { - PRINT((_L("Unspecified NAL type: (%i)\n"), nalType)); - } - // Reserved NAL types 13-23 - else - { - PRINT((_L("Reserved NAL type (%i)\n"), nalType)); - } - break; - } - - - // Check the output queue once again - if (getOutputPic(seq)) - { - // If current slice has not been parsed yet, parse it not - if (seq->isPicBoundary) - { - parseSliceData(seq); - getOutputPic(seq); - } - } - - // Take care of emulation prevention bytes - bibEndSlice(seq->bitbuf); - - // If slice data was modified, copy the modified data back to the nal data buffer - if (seq->sliceDataModified) - { - // If buffer length has been modified, change nalUnitLen - if (seq->bitbuf->dataLen != nalUnitLength) - { - (*nalUnitLen) = seq->bitbuf->dataLen; - } - } - - return AVCD_OK; -} - - -// FrameIsFromEncoder -// Stores information about the origin of next frame (if it is generated by the encoder) -void FrameIsFromEncoder(avcdDecoder_t *dec, TUint aFromEncoder) -{ - sequence_s *seq = (sequence_s *)dec; - - seq->iFromEncoder = aFromEncoder; -} - - -// ReturnPPSSet -// This function returns the aIndex'th PPS set stored -TUint8* ReturnPPSSet(avcdDecoder_t *dec, TUint aIndex, TUint* aPPSLength) -{ - TUint i=0; - TUint j; - sequence_s *seq = (sequence_s *)dec; - - for (j=0; jppsList[j]) - { - if ( i == aIndex ) - { - *aPPSLength = seq->ppsList[j]->PPSlength; - return seq->ppsList[j]->codedPPSBuffer; - } - - i++; - } - } - - // No PPS set found with that index - return NULL; -} - - -// ReturnNumPPS -// Returns the number of PPS units stored -TUint ReturnNumPPS(avcdDecoder_t *dec) -{ - TUint i=0; - TUint j; - sequence_s *seq = (sequence_s *)dec; - - for (j=0; jppsList[j]) - { - i++; - } - } - - return i; -} - - -// ReturnSPSSet -// This function returns the aIndex'th PPS set stored -TUint8* ReturnSPSSet(avcdDecoder_t *dec, TUint aIndex, TUint* aSPSLength) -{ - TUint i=0; - TUint j; - sequence_s *seq = (sequence_s *)dec; - - for (j=0; jspsList[j]) - { - if ( i == aIndex ) - { - *aSPSLength = seq->spsList[j]->SPSlength; - return seq->spsList[j]->codedSPSBuffer; - } - - i++; - } - - } - - // No SPS set found with that index - return NULL; -} - - -// ReturnNumSPS -// Returns the number of SPS units stored -TUint ReturnNumSPS(avcdDecoder_t *dec) -{ - TUint i=0; - TUint j; - sequence_s *seq = (sequence_s *)dec; - - for (j=0; jspsList[j]) - { - i++; - } - } - - return i; -} - - -// ReturnEncodeUntilIDR -// Returns information whether frames should be encoded until the next IDR -TBool ReturnEncodeUntilIDR(avcdDecoder_t *dec) -{ - sequence_s *seq = (sequence_s *)dec; - - return (seq->iEncodeUntilIDR); -} - - -// EncodeZeroValueWithVariableLength -// Encodes zero (which is encoded with a single one bit) to the bitbuffer -void EncodeZeroValueWithVariableLength(bitbuffer_s *aBitBuffer) -{ - // If bit position is zero, move to next byte - if(aBitBuffer->bitpos == 0) - { - // Get the next byte - aBitBuffer->currentBits = aBitBuffer->data[aBitBuffer->bytePos]; - aBitBuffer->bytePos++; - aBitBuffer->bitpos = 8; - } - - // Change the bitpos bit's value to one - aBitBuffer->data[aBitBuffer->bytePos-1] |= 1 << (aBitBuffer->bitpos-1); - aBitBuffer->bitpos--; - - if(aBitBuffer->bitpos == 0) - { - // Get the next byte - aBitBuffer->currentBits = aBitBuffer->data[aBitBuffer->bytePos]; - aBitBuffer->bytePos++; - aBitBuffer->bitpos = 8; - } - - // Make sure the bit buffer currentBits is up-to-date - aBitBuffer->currentBits = aBitBuffer->data[aBitBuffer->bytePos-1]; -} - - -// GenerateEmptyFrame -// Generates an empty frame (a not coded frame) by generating the slice header and slice body -// Slice body contains only a value to skip all the macroblocks in the slice. -void GenerateEmptyFrame(sequence_s *seq, bitbuffer_s *bitbuf, TUint aFrameNumber) -{ - seq_parameter_set_s *sps; - pic_parameter_set_s *pps; - TUint8 bitMask; - TUint picSizeInMapUnits; - TUint ppsId; - - - pps = seq->ppsList[seq->iPreviousPPSId]; - - if (pps->indexChanged) - { - // Since we generate empty frames for original clips only, - // find out what is the original PPS id - ppsId = pps->origPPSId; - - pps = seq->ppsList[ppsId]; - } - - sps = seq->spsList[pps->seq_parameter_set_id]; - - // Compute the number of macroblocks - picSizeInMapUnits = (sps->pic_width_in_mbs_minus1+1) * (sps->pic_height_in_map_units_minus1+1); - - // Generate the not coded frame - // Set the first byte as zero - bitbuf->bytePos = 0; - bitbuf->data[bitbuf->bytePos] = 0; - bitbuf->bitpos = 8; - - // Generate the NAL header, with nal type as 1 and nal_ref_idc as 1 - bitbuf->data[0] = 0x21; - bitbuf->bytePos = 1; - - // Set the first_mb_in_slice & slice_type to be zero (coded as 1), advance bitpos by two - bitbuf->data[bitbuf->bytePos] = 0xc0; // First two bits == 1 - bitbuf->bitpos -= 2; - bitbuf->bytePos = 2; - - // Encode the PPS index - EncodeUnsignedExpGolombCode(bitbuf, 0); - - // Encode the new frame number here - // If the max frame num was changed use original value since empty clips are generated for original clips - if (sps->maxFrameNumChanged) - EncodeUnsignedNBits(bitbuf, aFrameNumber, sps->origMaxFrameNum+4); - else - EncodeUnsignedNBits(bitbuf, aFrameNumber, sps->log2_max_frame_num_minus4+4); - - // POC parameters - if (sps->pic_order_cnt_type == 0) - { - // For now encode the POC as the frame number - // If the max frame num was changed use original value since empty clips are generated - // for original clips - if (sps->maxPOCNumChanged) - EncodeUnsignedNBits(bitbuf, aFrameNumber, sps->origMaxPOCNum+4); - else - EncodeUnsignedNBits(bitbuf, aFrameNumber, sps->log2_max_pic_order_cnt_lsb_minus4+4); - } - else if (sps->pic_order_cnt_type == 1) - { - if (!sps->delta_pic_order_always_zero_flag) - { - EncodeZeroValueWithVariableLength(bitbuf); - if (pps->pic_order_present_flag) - { - EncodeZeroValueWithVariableLength(bitbuf); - } - } - } - - // Redundant picture count - if (pps->redundant_pic_cnt_present_flag) - { - EncodeZeroValueWithVariableLength(bitbuf); - } - - // Encode num_ref_idx_active:override_flag with zero value - EncodeUnsignedNBits(bitbuf, 0, 1); - - // Encode reference picture list reordering with single zero value - EncodeUnsignedNBits(bitbuf, 0, 1); - - // Since nal_ref_idc == 1, encode zero value for decoded reference picture marking - EncodeUnsignedNBits(bitbuf, 0, 1); - - // Encode slice_qp_delta with zero value - EncodeZeroValueWithVariableLength(bitbuf); - - if (pps->deblocking_filter_parameters_present_flag == 1) - { - // Encode value of 1 which is 010, i.e. two with three bits - EncodeUnsignedNBits(bitbuf, 2, 3); - } - - if (pps->num_slice_groups_minus1 > 0 && pps->slice_group_map_type >= 3 && - pps->slice_group_map_type <= 5) - { - TUint temp, temp2, len1; - - // len = Ceil( Log2( PicSizeInMapUnits / SliceGroupChangeRate + 1 ) ) - // PicSizeInMapUnits / SliceGroupChangeRate - temp = picSizeInMapUnits / (pps->slice_group_change_rate_minus1+1); - - // Calculate Log2 - temp2 = (temp + 1) >> 1; - for (len1 = 0; len1 < 16 && temp2 != 0; len1++) - temp2 >>= 1; - - // Calculate Ceil - if ( (((unsigned)1) << len1) < (temp + 1) ) - len1++; - - // Encode zero value with len1 bits - EncodeUnsignedNBits(bitbuf, 0, len1); - } - - // Now encode the slice data - // Encode the mb_skip_run to indicate all macroblocks to be skipped - // For example in CIF we have 22x18 = 396 macroblocks - // 396 = 00000000 1 10001101 - EncodeUnsignedExpGolombCode(bitbuf, picSizeInMapUnits); - - // Take care of the trailing bits, i.e. encode the rest of the bits in this byte to zero - bitMask = 1 << (bitbuf->bitpos - 1); - bitbuf->data[bitbuf->bytePos-1] = bitbuf->data[bitbuf->bytePos-1] | bitMask; - - bitbuf->bitpos--; - if(bitbuf->bitpos != 0) - { - bitMask = 255 << (bitbuf->bitpos); // Mask the 8-bitPos upper bits - bitbuf->data[bitbuf->bytePos-1] = bitbuf->data[bitbuf->bytePos-1] & bitMask; - } - - bitbuf->dataLen = bitbuf->bytePos; -} - - -// avcdGenerateNotCodedFrame -// Generates an empty frame -TInt avcdGenerateNotCodedFrame(avcdDecoder_t *dec, void *aNalUnitBits, TUint aNalUnitLen, TUint aFrameNumber) -{ - sequence_s *seq = (sequence_s *)dec; - - // Initialize bitbuffer - if (bibInit(seq->bitbuf, (TUint8 *)aNalUnitBits, aNalUnitLen) < 0) - return AVCD_ERROR; - - GenerateEmptyFrame(seq, seq->bitbuf, aFrameNumber); - - return (seq->bitbuf->dataLen); -} - - -// avcdStoreCurrentPPSId -// Stores the value of PPS Id from the input NAL unit (if that unit is a coded slice). -// The Id value is used in the generation of an empty frame. -TInt avcdStoreCurrentPPSId(avcdDecoder_t *dec, TUint8 *nalUnitBits, TUint aNalUnitLen) -{ - sequence_s *seq = (sequence_s *)dec; - TInt nalHeaderByte; - TInt nalType; -// TInt nalRefIdc; -// TUint temp; - - // Initialize bitbuffer and get first byte containing NAL type and NAL ref idc - if (bibInit(seq->bitbuf, nalUnitBits, aNalUnitLen) < 0) - return AVCD_ERROR; - - if (bibGetByte(seq->bitbuf, &nalHeaderByte)) - return AVCD_ERROR; - - // Decode NAL unit type and reference indicator - nalType = nalHeaderByte & 0x1F; -// nalRefIdc = (nalHeaderByte & 0x60) >> 5; - - // Decode NAL unit data - if (nalType == NAL_TYPE_CODED_SLICE || nalType == NAL_TYPE_CODED_SLICE_IDR) - { - // Parse the slice haeder until the PPS id - // First macroblock in slice -// temp = vldGetUVLC(seq->bitbuf); - - // Slice type -// temp = vldGetUVLC(seq->bitbuf); - - // PPS id - seq->iPreviousPPSId = vldGetUVLC(seq->bitbuf); - } - - return AVCD_OK; -} - - -// ue_v -// Returns unsigned UVLC code from the bitbuffer -static int ue_v(bitbuffer_s *bitbuf, unsigned int *val, unsigned int maxVal) -{ - *val = vldGetUVLC(bitbuf); - - if (bibGetStatus(bitbuf) < 0) - return SLICE_ERROR; - - if (*val > maxVal) - return SLICE_ERR_ILLEGAL_VALUE; - - return SLICE_OK; -} - - -// ModifyFrameNumber -// Modifies the frame numbering from the input bit buffer. The bit buffer must be positioned -// at the start of the slice header when this function is called. -void ModifyFrameNumber(sequence_s *seq, bitbuffer_s *bitbuf, TUint aFrameNumber, TInt aNalType) -{ - seq_parameter_set_s *sps; - pic_parameter_set_s *pps; - TUint tempValue; - TUint firstMbInSlice; - TUint ppsId; -// TInt spsId; - - - // First macroblock in slice - ue_v(bitbuf, &firstMbInSlice, 65535); - - // Slice type - ue_v(bitbuf, &tempValue, SLICE_MAX); - - // PPS id - ue_v(bitbuf, &ppsId, PS_MAX_NUM_OF_PPS-1); - - pps = seq->ppsList[ppsId]; - - if (pps->indexChanged) - { - // Since we generate empty frames for original clips only, - // find out what is the original PPS id - ppsId = pps->origPPSId; - - pps = seq->ppsList[ppsId]; - } - -/* - if (pps == NULL) - { - // Use zero for SPS id - spsId = 0; - } - else - { - spsId = pps->seq_parameter_set_id; - } -*/ - - syncBitBufferBitpos(bitbuf); - - sps = seq->spsList[pps->seq_parameter_set_id]; - - if (sps == NULL) - { - PRINT((_L("Error: referring to non-existing SPS.\n"))); - return; - } - - if (sps->maxFrameNumChanged) - { - // Encode the new frame number here - EncodeUnsignedNBits(bitbuf, aFrameNumber, sps->origMaxFrameNum+4); - } - else - { - // Encode the new frame number here - EncodeUnsignedNBits(bitbuf, aFrameNumber, sps->log2_max_frame_num_minus4+4); - } - - // IDR picture - if (aNalType == NAL_TYPE_CODED_SLICE_IDR) - { - ue_v(bitbuf, &tempValue, 65535); - } - - syncBitBufferBitpos(bitbuf); - - // POC parameters - if (sps->pic_order_cnt_type == 0) - { - if (sps->maxPOCNumChanged) - { - // For now encode the POC as the frame number - EncodeUnsignedNBits(bitbuf, aFrameNumber, sps->origMaxPOCNum+4); - } - else - { - // For now encode the POC as the frame number - EncodeUnsignedNBits(bitbuf, aFrameNumber, sps->log2_max_pic_order_cnt_lsb_minus4+4); - } - } -} - - -// avcdModifyFrameNumber -// Modifies the input NAL unit's frame numbering -void avcdModifyFrameNumber(avcdDecoder_t *dec, void *aNalUnitBits, TUint aNalUnitLen, TUint aFrameNumber) -{ - sequence_s *seq = (sequence_s *)dec; - TInt nalHeaderByte; - TInt nalType; - - // Initialize bitbuffer - bibInit(seq->bitbuf, (TUint8 *)aNalUnitBits, aNalUnitLen); - - // Read the nalHeaderByte - bibGetByte(seq->bitbuf, &nalHeaderByte); - - nalType = nalHeaderByte & 0x1F; - - if (nalType == NAL_TYPE_CODED_SLICE || nalType == NAL_TYPE_CODED_SLICE_IDR) - ModifyFrameNumber(seq, seq->bitbuf, aFrameNumber, nalType); -} - - -#endif // VIDEOEDITORENGINE_AVC_EDITING diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/slice.cpp --- a/videoeditorengine/avcedit/src/slice.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1124 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include -#include "globals.h" -#include "bitbuffer.h" -#include "vld.h" -#include "macroblock.h" -#include "parameterset.h" -#include "framebuffer.h" -#include "dpb.h" -#include "slice.h" -#include "sequence.h" - - -#define MIN_ALPHA_BETA_OFFSET -6 -#define MAX_ALPHA_BETA_OFFSET 6 - -/* - * AVC syntax functions as specified in specification - */ - - -/* - * Static functions - */ - -static int getRefPicListReorderingCmds(slice_s *slice, unsigned int numRefFrames, - bitbuffer_s *bitbuf); - -static int getDecRefPicMarkingCmds(slice_s *slice, unsigned int numRefFrames, - bitbuffer_s *bitbuf); - -static int refPicListReordering(slice_s *slice, dpb_s *dpb, - frmBuf_s *refPicList[], int numRefPicActive, - sliceRefPicListReorderCmd_s reorderCmdList[]); - - - -/* - * AVC syntax functions as specified in specification - */ - -/* Return fixed length code */ -static int u_n(bitbuffer_s *bitbuf, int len, unsigned int *val) -{ - *val = vldGetFLC(bitbuf, len); - - if (bibGetStatus(bitbuf) < 0) - return SLICE_ERROR; - - return SLICE_OK; -} - -/* Return unsigned UVLC code */ -static int ue_v(bitbuffer_s *bitbuf, unsigned int *val, unsigned int maxVal) -{ - *val = vldGetUVLC(bitbuf); - - if (bibGetStatus(bitbuf) < 0) - return SLICE_ERROR; - - if (*val > maxVal) - return SLICE_ERR_ILLEGAL_VALUE; - - return SLICE_OK; -} - -/* Return signed UVLC code */ -static int se_v(bitbuffer_s *bitbuf, int *val, int minVal, int maxVal) -{ - *val = vldGetSignedUVLC(bitbuf); - - if (bibGetStatus(bitbuf) < 0) - return SLICE_ERROR; - - if (*val < minVal || *val > maxVal) - return SLICE_ERR_ILLEGAL_VALUE; - - return SLICE_OK; -} - -/* Return long signed UVLC code */ -static int se_v_long(bitbuffer_s *bitbuf, int32 *val) -{ - *val = vldGetSignedUVLClong(bitbuf); - - if (bibGetStatus(bitbuf) < 0) - return SLICE_ERROR; - - return SLICE_OK; -} - - -/* - * - * sliceOpen: - * - * Parameters: - * - * Function: - * Allocate and initialize a slice. - * - * Returns: - * Pointer to slice - * - */ -slice_s *sliceOpen() -{ - slice_s *slice; - - slice = (slice_s *)User::Alloc(sizeof(slice_s)); - - if (slice != NULL) - memset(slice, 0, sizeof(slice_s)); - - return slice; -} - - -/* - * - * sliceClose: - * - * Parameters: - * slice Slice object - * - * Function: - * Deallocate slice - * - * Returns: - * Nothing - * - */ -void sliceClose(slice_s *slice) -{ - User::Free(slice); -} - - -/* - * getRefPicListReorderingCmds: - * - * Parameters: - * slice Slice object - * bitbuf Bitbuffer object - * numRefFrames Number of reference frames in used - * - * Function: - * Parse and store the ref pic reordering commands - * - * Return: - * The number of bits being parsed - */ -static int getRefPicListReorderingCmds(slice_s *slice, unsigned int numRefFrames, - bitbuffer_s *bitbuf) -{ - int i; - unsigned int reordering_of_pic_nums_idc; - int retCode; - - if (!IS_SLICE_I(slice->slice_type)) { - - if ((retCode = u_n(bitbuf, 1, &slice->ref_pic_list_reordering_flag0)) < 0) - return retCode; - - if (slice->ref_pic_list_reordering_flag0) { - - i = 0; - do { - /* Get command */ - if ((retCode = ue_v(bitbuf, &reordering_of_pic_nums_idc, 3)) < 0) - return retCode; - - slice->reorderCmdList[i].reordering_of_pic_nums_idc = reordering_of_pic_nums_idc; - - /* Get command parameters */ - if (reordering_of_pic_nums_idc == 0 || reordering_of_pic_nums_idc == 1) { - unsigned int maxDiff = slice->maxFrameNum/2-1; - if (reordering_of_pic_nums_idc == 1) - maxDiff = maxDiff - 1; - if ((retCode = ue_v(bitbuf, &slice->reorderCmdList[i].abs_diff_pic_num_minus1, maxDiff)) < 0) - return retCode; - } - else if (reordering_of_pic_nums_idc == 2) { - /* longTermPicNum be in the range of 0 to num_ref_frames, inclusive. */ - if ((retCode = ue_v(bitbuf, &slice->reorderCmdList[i].long_term_pic_num, numRefFrames)) < 0) - return retCode; - } - - i++; - } while (reordering_of_pic_nums_idc != 3 && i < MAX_NUM_OF_REORDER_CMDS); - } - } - - return SLICE_OK; -} - - -/* - * getDecRefPicMarkingCmds: - * - * Parameters: - * slice Slice object - * bitbuf Bitbuffer object - * numRefFrames Number of reference frames in used - * - * Function: - * Parse and store the MMCO commands - * - * Return: - * The number of bits being parsed - */ -static int getDecRefPicMarkingCmds(slice_s *slice, unsigned int numRefFrames, - bitbuffer_s *bitbuf) -{ - int i; - unsigned int mmco; - int retCode; - - /* MMCO commands can exist only in slice header of a reference picture */ - if (slice->nalRefIdc != 0) { - if (slice->isIDR) { - if ((retCode = u_n(bitbuf, 1, &slice->no_output_of_prior_pics_flag)) < 0) - return retCode; - if ((retCode = u_n(bitbuf, 1, &slice->long_term_reference_flag)) < 0) - return retCode; - } - else { - if ((retCode = u_n(bitbuf, 1, &slice->adaptive_ref_pic_marking_mode_flag)) < 0) - return retCode; - - if (slice->adaptive_ref_pic_marking_mode_flag) { - - i = 0; - do { - /* Get MMCO command */ - if ((retCode = ue_v(bitbuf, &mmco, 6)) < 0) - return retCode; - - slice->mmcoCmdList[i].memory_management_control_operation = mmco; - - /* Get command parameter (if any) */ - if (mmco == 1 || mmco == 3) { - if ((retCode = ue_v(bitbuf, &slice->mmcoCmdList[i].difference_of_pic_nums_minus1, 65535)) < 0) - return retCode; - } - if (mmco == 2) { - if ((retCode = ue_v(bitbuf, &slice->mmcoCmdList[i].long_term_pic_num, numRefFrames)) < 0) - return retCode; - } - if (mmco == 3 || mmco == 6) { - if ((retCode = ue_v(bitbuf, &slice->mmcoCmdList[i].long_term_frame_idx, numRefFrames)) < 0) - return retCode; - } - if (mmco == 4) { - if ((retCode = ue_v(bitbuf, &slice->mmcoCmdList[i].max_long_term_frame_idx_plus1, numRefFrames)) < 0) - return retCode; - } - if (mmco == 5) { - slice->picHasMMCO5 = 1; - } - - i++; - } while (mmco != 0 && i < MAX_NUM_OF_MMCO_OPS); - } - } - } - else - slice->adaptive_ref_pic_marking_mode_flag = 0; - - return 1; -} - - -/* - * sliceInitRefPicList: - * - * Parameters: - * dpb DPB buffer - * refPicList Reference picture list (output) - * - * Fucntion: - * Initialize reference picture list. - * - * Return: - * Number of reference frames in the list - */ -int sliceInitRefPicList(dpb_s *dpb, frmBuf_s *refPicList[]) -{ - int numRef, numShort; - frmBuf_s *refTmp; - int i, j; - - /* - * Select the reference pictures from the DPB - */ - j = 0; - /* Put short term pictures first in the list */ - for (i = 0; i < dpb->fullness; i++) { - if (dpb->buffers[i]->refType == FRM_SHORT_TERM_PIC) - refPicList[j++] = dpb->buffers[i]; - } - numShort = j; - /* Put long term pictures after the short term pictures */ - for (i = 0; i < dpb->fullness; i++) { - if (dpb->buffers[i]->refType == FRM_LONG_TERM_PIC) - refPicList[j++] = dpb->buffers[i]; - } - numRef = j; - /* numLong = numRef - numShort; */ - - /* - * Initialisation process for reference picture lists - */ - /* Sort short term pictures in the order of descending picNum */ - for (i = 0; i < numShort; i++) { - for (j = i+1; j < numShort; j++) { - if (refPicList[i]->picNum < refPicList[j]->picNum) { - /* exchange refPicList[i] and refPicList[j] */ - refTmp = refPicList[i]; - refPicList[i] = refPicList[j]; - refPicList[j] = refTmp; - } - } - } - /* Sort long term pictures in the order of ascending longTermPicNum */ - for (i = numShort; i < numRef; i++) { - for (j = i+1; j < numRef; j++) { - if (refPicList[i]->longTermPicNum > refPicList[j]->longTermPicNum) { - /* exchange refPicList[i] and refPicList[j] */ - refTmp = refPicList[i]; - refPicList[i] = refPicList[j]; - refPicList[j] = refTmp; - } - } - } - - return numRef; -} - - -/* - * sliceFixRefPicList: - * - * Parameters: - * dpb DPB buffer - * refPicList Reference picture list (output) - * numRefPicActive Number of active reference frames - * numExistingRefFrames Number of reference frames in refPicList - * - * Fucntion: - * If numExistingRefFrames < numRefPicActive, try to fill up the - * reference frame list - * - * Return: - * 0 for no pictures exist in reference frame list - * 1 for pictures exist in reference frame list - */ -int sliceFixRefPicList(dpb_s *dpb, frmBuf_s *refPicList[], - int numRefPicActive, int numExistingRefFrames, - int width, int height) -{ - int i; - - if (numExistingRefFrames == 0) { - /* Try to find any picture in DPB, even non-reference frame */ - for (i = 0; i < dpb->size; i++) { - if (dpb->buffers[i] != NULL && dpb->buffers[i]->width == width && dpb->buffers[i]->height == height) - break; - } - - if (i < dpb->size) { - refPicList[0] = dpb->buffers[i]; - numExistingRefFrames = 1; - } - else - return 0; - } - - /* Duplicate last extry of the reference frame list so that list becomes full */ - for (i = numExistingRefFrames; i < numRefPicActive; i++) - refPicList[i] = refPicList[numExistingRefFrames-1]; - - return 1; -} - -/* - * refPicListReordering: - * - * Parameters: - * slice Current slice object - * dpb DPB buffer - * refPicList Reference picture list (modified by this function) - * numRefPicActive Number of active reference frames - * reorderCmdList Reordering command list - * - * Fucntion: - * Reorder the reference picture list for current slice - * - * Return: - * SLICE_OK for no error and negative value for error - */ -static int refPicListReordering(slice_s *slice, dpb_s *dpb, - frmBuf_s *refPicList[], int numRefPicActive, - sliceRefPicListReorderCmd_s reorderCmdList[]) -{ - int i; - int reordering_of_pic_nums_idc, longTermPicNum; - int32 absDiffPicNum; - int refIdx; - int32 currPicNum, picNumPred, picNumNoWrap; - int32 maxPicNum, picNum; - int cmdNum; - int cIdx, nIdx; - - /* - * 3. Reordering process for reference picture list - */ - - maxPicNum = slice->maxFrameNum; /* for frame coding only */ - currPicNum = slice->frame_num; - picNumPred = currPicNum; - refIdx = 0; - cmdNum = 0; - - do { - reordering_of_pic_nums_idc = reorderCmdList[cmdNum].reordering_of_pic_nums_idc; - - if (reordering_of_pic_nums_idc == 0 || reordering_of_pic_nums_idc == 1) { - - /* - * reorder short-term ref pic -subclause 8.2.4.3.1 - */ - - absDiffPicNum = reorderCmdList[cmdNum].abs_diff_pic_num_minus1 + 1; - - /* Derive picNumNoWrap */ - if (reordering_of_pic_nums_idc == 0) { - if (picNumPred - absDiffPicNum < 0) - picNumNoWrap = picNumPred - absDiffPicNum + maxPicNum; - else - picNumNoWrap = picNumPred - absDiffPicNum; - } - else { /* reordering_of_pic_nums_idc == 1 */ - if (picNumPred + absDiffPicNum >= maxPicNum) - picNumNoWrap = picNumPred + absDiffPicNum - maxPicNum; - else - picNumNoWrap = picNumPred + absDiffPicNum; - } - - /* Derive picNum */ - if (picNumNoWrap > currPicNum) - picNum = picNumNoWrap - maxPicNum; - else - picNum = picNumNoWrap; - - /* Find short term picture with picture number picNum */ - for (i = 0; i < dpb->fullness; i++) { - if (!dpb->buffers[i]->nonExisting && - dpb->buffers[i]->refType == FRM_SHORT_TERM_PIC && - dpb->buffers[i]->picNum == picNum) - break; - } - - /* If picNum was not found */ - if (i == dpb->fullness) { - PRINT((_L("The short term ref pic(%d) is not found!\n"), picNum)); - return SLICE_ERR_ILLEGAL_VALUE; - } - - /* Shift remaining pictures later in the list */ - for (cIdx = numRefPicActive; cIdx > refIdx; cIdx--) - refPicList[cIdx] = refPicList[cIdx - 1]; - - /* Place picture with number picNum into the index position refIdx */ - refPicList[refIdx++] = dpb->buffers[i]; - - /* Remove duplicate of the inserted picture */ - nIdx = refIdx; - for (cIdx = refIdx; cIdx <= numRefPicActive; cIdx++) - if (refPicList[cIdx]->refType == FRM_LONG_TERM_PIC || refPicList[cIdx]->picNum != picNum) - refPicList[nIdx++] = refPicList[cIdx]; - - picNumPred = picNumNoWrap; - } - - else if (reordering_of_pic_nums_idc == 2) { - - /* - * reorder long-term ref pic -subclause 8.2.4.3.2 - */ - - /* Get long-term picture number */ - longTermPicNum = reorderCmdList[cmdNum].long_term_pic_num; - - /* Find long-term picture with picture number longTermPicNum */ - for (i = 0; i < dpb->fullness; i++) - if (dpb->buffers[i]->refType == FRM_LONG_TERM_PIC && - dpb->buffers[i]->longTermPicNum == longTermPicNum) - break; - - if (i == dpb->fullness) { - // something wrong ! - PRINT((_L("The long term ref pic(%d) is not found!\n"), longTermPicNum)); - return SLICE_ERR_ILLEGAL_VALUE; - } - - /* Shift remaining pictures later in the list */ - for (cIdx = numRefPicActive; cIdx > refIdx; cIdx--) - refPicList[cIdx] = refPicList[cIdx - 1]; - - /* Place picture with number longTermPicNum into the index position refIdx */ - refPicList[refIdx++] = dpb->buffers[i]; - - /* Remove duplicate of the inserted picture */ - nIdx = refIdx; - for (cIdx = refIdx; cIdx <= numRefPicActive; cIdx++) - if (refPicList[cIdx]->refType == FRM_SHORT_TERM_PIC || - refPicList[cIdx]->longTermPicNum != longTermPicNum) - { - refPicList[nIdx++] = refPicList[cIdx]; - } - } - - cmdNum++; - - } while (reordering_of_pic_nums_idc != 3 && cmdNum < MAX_NUM_OF_REORDER_CMDS); - - - refPicList[numRefPicActive] = 0; - - return SLICE_OK; -} - - -// sliceParseMacroblocks -// Parses the macroblocks one by one in the input slice. -TInt sliceParseMacroblocks(slice_s *slice, frmBuf_s *recoBuf, dpb_s *dpb, - pic_parameter_set_s *pps, - mbAttributes_s *mbData, TInt sliceID, - bitbuffer_s *bitbuf, - TBool aBitShiftInSlice) -{ - frmBuf_s *refPicList0[DPB_MAX_SIZE+1]; - macroblock_s mb; - TInt numRefFrames; - TInt numExistingRefFrames; -// TInt refFramesExist; - TInt mbIdxY; - TInt mbIdxX; - TInt mbksPerLine; - TInt mbksPerCol; - TInt picSizeInMbs; - TInt currMbAddr; - TInt sliceGroupNum; - void *stream; - TInt retCode; - - // Choose number of reference frames and build reference picture list - numRefFrames = 0; -// refFramesExist = 0; - if (!IS_SLICE_I(slice->slice_type)) - { - if (slice->num_ref_idx_active_override_flag) - numRefFrames = slice->num_ref_idx_l0_active_minus1 + 1; - else - numRefFrames = pps->num_ref_idx_l0_active_minus1 + 1; - - numExistingRefFrames = sliceInitRefPicList(dpb, refPicList0); - - if (numExistingRefFrames < numRefFrames) - { -// refFramesExist = sliceFixRefPicList(dpb, refPicList0, numRefFrames, numExistingRefFrames, -// recoBuf->width, recoBuf->height); - } - else -// refFramesExist = 1; - - if (slice->ref_pic_list_reordering_flag0 && numExistingRefFrames > 0) - { - retCode = refPicListReordering(slice, dpb, refPicList0, numRefFrames, slice->reorderCmdList); - - if (retCode < 0) - return retCode; - } - } - - mbksPerLine = recoBuf->width/MBK_SIZE; - mbksPerCol = recoBuf->height/MBK_SIZE; - picSizeInMbs = mbksPerLine*mbksPerCol; - - currMbAddr = slice->first_mb_in_slice; - sliceGroupNum = sliceID & 0xF; - - mbIdxY = currMbAddr / mbksPerLine; - mbIdxX = currMbAddr - mbIdxY*mbksPerLine; - - mbkSetInitialQP(&mb, slice->qp, pps->chroma_qp_index_offset); - - stream = bitbuf; - - // Loop until all macroblocks in current slice have been decoded - // If there has been a bitshift in the slice, we must go through - // the macroblocks to see if any PCM coded MB are used. - if(aBitShiftInSlice) - { - - do - { - - // Store slice ID for current macroblock - mbData->sliceMap[currMbAddr] = sliceID; - - // Store loopfilter mode - mbData->filterModeTab[currMbAddr] = (int8) slice->disable_deblocking_filter_idc; - mbData->alphaOffset[currMbAddr] = (int8) (slice->slice_alpha_c0_offset_div2*2); - mbData->betaOffset[currMbAddr] = (int8) (slice->slice_beta_offset_div2*2); - - retCode = mbkParse(&mb, numRefFrames, - mbData, recoBuf->width, - slice->slice_type, pps->constrained_intra_pred_flag, - pps->chroma_qp_index_offset, - mbIdxX, mbIdxY, stream, slice->bitOffset); - - if (retCode == MBK_PCM_FOUND) - { - // We can stop parsing this slice - // Check later if this is the case also if we have slices in more than one NAL (is it even possible?)!!! - return SLICE_OK; - } - - if (retCode < 0) - return SLICE_ERROR; - - // If end of slice data has been reached and there are no - // skipped macroblocks left, stop decoding slice. - if (!bibMoreRbspData(bitbuf) && mb.numSkipped <= 0) - break; - - // Find next mb address in the current slice group - do - { - // Next mb address - currMbAddr++; - - // If end of frame was reached, stop search - if (currMbAddr == picSizeInMbs) - break; - - // Update mb location - mbIdxX++; - if (mbIdxX == mbksPerLine) - { - mbIdxX = 0; - mbIdxY++; - } - - } while ((mbData->sliceMap[currMbAddr] & 0xF) != sliceGroupNum); - - // If end of frame was reached, stop decoding slice - } while (currMbAddr < picSizeInMbs); - } - - return SLICE_OK; -} - - -// EncodeUnsignedNBits -// Encodes the input aValue to the bit buffer with aLength bits. -void EncodeUnsignedNBits(bitbuffer_s *aBitBuffer, TUint aValue, TUint aLength) -{ - TUint tempValue; - TInt i; - TUint8 byteValue; - - if(aBitBuffer->bitpos == 0) - { - // Get the next byte - aBitBuffer->currentBits = aBitBuffer->data[aBitBuffer->bytePos]; - aBitBuffer->bytePos++; - aBitBuffer->bitpos = 8; - } - - // Write aValue bit by bit to the bit buffer - for (i=aLength-1; i>=0; i--) - { - // Get the ith bit from aValue - tempValue = (aValue & (1 << i)) >> i; - - // Zero out the bitpos bit - byteValue = aBitBuffer->data[aBitBuffer->bytePos-1] & ~(1<<(aBitBuffer->bitpos-1)); - byteValue |= tempValue << (aBitBuffer->bitpos-1); - - aBitBuffer->data[aBitBuffer->bytePos-1] = byteValue; - aBitBuffer->bitpos--; - - if(aBitBuffer->bitpos == 0) - { - // Get the next byte - aBitBuffer->currentBits = aBitBuffer->data[aBitBuffer->bytePos]; - - aBitBuffer->bytePos++; - aBitBuffer->bitpos = 8; - } - } - - // Make sure the bit buffer currentBits is up-to-date - aBitBuffer->currentBits = aBitBuffer->data[aBitBuffer->bytePos-1]; -} - - -// ParseSliceHeader -// Parses the input slice header. PPS Id, frame numbering and POC LSB are modified if required. -TInt ParseSliceHeader(slice_s *slice, seq_parameter_set_s *spsList[], - pic_parameter_set_s *ppsList[], bitbuffer_s *bitbuf, - TUint* aFrameNumber, TUint aFrameFromEncoder) -{ - seq_parameter_set_s *sps; - pic_parameter_set_s *pps; - TUint picSizeInMapUnits; - TUint temp, temp2; - TInt sliceQp, len1; - TInt retCode; - TInt shiftedBits = 0; - - - slice->picHasMMCO5 = 0; - - // Initialize the bit offset to zero - slice->bitOffset = 0; - - // First macroblock in slice - if ((retCode = ue_v(bitbuf, &slice->first_mb_in_slice, 65535)) < 0) - return retCode; - - // Slice type - if ((retCode = ue_v(bitbuf, &slice->slice_type, SLICE_MAX)) < 0) - return retCode; - - // PPS id - if ((retCode = ue_v(bitbuf, &slice->pic_parameter_set_id, PS_MAX_NUM_OF_PPS-1)) < 0) - return retCode; - - pps = ppsList[slice->pic_parameter_set_id]; - - if (pps == NULL) - { - PRINT((_L("Error: referring to non-existing PPS.\n"))); - return SLICE_ERR_NON_EXISTING_PPS; - } - - syncBitBufferBitpos(bitbuf); - - // If the index has been changed the new index must be coded instead of - // the old one to the slice header - if (pps->indexChanged) - { - // We have to encode the new PPS Id to the bitbuffer - TUint oldPPSId = slice->pic_parameter_set_id; - TUint newPPSId; - - if ( aFrameFromEncoder ) - newPPSId = pps->encPPSId; - else - newPPSId = pps->origPPSId; - - TUint trailingBits = GetNumTrailingBits(bitbuf); - TInt diff = 0; - - TUint oldIdLength = ReturnUnsignedExpGolombCodeLength(oldPPSId); - TUint newIdLength = ReturnUnsignedExpGolombCodeLength(newPPSId); - - // Signal that the slice data has been modified - slice->sliceDataModified = 1; - - // Get the new pps - pps = ppsList[newPPSId]; - - if(trailingBits > 8) - { - trailingBits = 8; - } - - if ( oldIdLength == newIdLength ) - { - // Just encode the new Id on top of the old Id - bitbuf->bitpos += oldIdLength; - - if(bitbuf->bitpos > 8) - { - // Go to the right byte and bit position - bitbuf->bytePos -= bitbuf->bitpos / 8; - bitbuf->bitpos = bitbuf->bitpos % 8; - } - - EncodeUnsignedExpGolombCode(bitbuf, newPPSId); - } - else if ( oldIdLength < newIdLength ) - { - diff = newIdLength - oldIdLength; - - // Positive bit offset indicates bit-wise shift to right - slice->bitOffset = (diff % 8); - - ShiftBufferRight(bitbuf, diff, trailingBits, oldIdLength); - - // After shifting, encode the new value to the bit buffer - EncodeUnsignedExpGolombCode(bitbuf, newPPSId); - } - else - { - // New id's length is smaller than old id's length - diff = oldIdLength - newIdLength; - - // Negative bit offset indicates bit-wise shift to left - slice->bitOffset = -(diff % 8); - - ShiftBufferLeft(bitbuf, diff, oldIdLength); - - // After shifting, encode the new value to the bit buffer - EncodeUnsignedExpGolombCode(bitbuf, newPPSId); - } - - shiftedBits = diff; - } - - sps = spsList[pps->seq_parameter_set_id]; - - if (sps == NULL) - { - PRINT((_L("Error: referring to non-existing SPS.\n"))); - return SLICE_ERR_NON_EXISTING_SPS; - } - - picSizeInMapUnits = (sps->pic_width_in_mbs_minus1+1) * (sps->pic_height_in_map_units_minus1+1); - - if (slice->first_mb_in_slice >= picSizeInMapUnits) - return SLICE_ERR_ILLEGAL_VALUE; - - // Maximum frame number - slice->maxFrameNum = (TUint)1 << (sps->log2_max_frame_num_minus4+4); - - // IDR type NAL unit shall have frame number as zero - if ( slice->nalType == NAL_TYPE_CODED_SLICE_IDR ) - { - // Reset frame number for an IDR slice - *aFrameNumber = 0; - } - else if ( *aFrameNumber == (slice->maxFrameNum - 1 ) ) - { - // Reset frame number if maximum frame number has been reached - *aFrameNumber = 0; - } - else if( !slice->first_mb_in_slice ) - { - (*aFrameNumber)++; // Increment frame number only if this is the first mb in slice - } - - - if (sps->maxFrameNumChanged) - { - // Frame number field size - TUint oldFrameNum; - TUint newFrameNum = sps->log2_max_frame_num_minus4+4; - - if ( aFrameFromEncoder ) - oldFrameNum = sps->encMaxFrameNum+4; - else - oldFrameNum = sps->origMaxFrameNum+4; - - TUint trailingBits = GetNumTrailingBits(bitbuf); - TInt diff = 0; - - // Signal that the slice data has been modified - slice->sliceDataModified = 1; - - if(trailingBits > 8) - { - trailingBits = 8; - } - - // If the size of the frame number field has changed then shift bits in the buffer - if ( oldFrameNum < newFrameNum ) - { - diff = newFrameNum - oldFrameNum; - - // Positive bit offset indicates bit-wise shift to right - slice->bitOffset += (diff % 8); - - ShiftBufferRight(bitbuf, diff, trailingBits, 0); - } - else if ( oldFrameNum > newFrameNum ) - { - // New id's length is smaller than old id's length - diff = oldFrameNum - newFrameNum; - - // Negative bit offset indicates bit-wise shift to left - slice->bitOffset -= (diff % 8); - - ShiftBufferLeft(bitbuf, diff, 0); - } - - shiftedBits += diff; - } - - // Encode the new frame number here - EncodeUnsignedNBits(bitbuf, *aFrameNumber, sps->log2_max_frame_num_minus4+4); - - slice->frame_num = *aFrameNumber; - - // IDR picture - if (slice->isIDR) - { - if ((retCode = ue_v(bitbuf, &slice->idr_pic_id, 65535)) < 0) - return retCode; - } - - syncBitBufferBitpos(bitbuf); - - // POC parameters - if (sps->pic_order_cnt_type == 0) - { - if (sps->maxPOCNumChanged) - { - // POC lsb number - TUint oldPOCNum; - TUint newPOCNum = sps->log2_max_pic_order_cnt_lsb_minus4+4; - - if ( aFrameFromEncoder ) - oldPOCNum = sps->encMaxPOCNum+4; - else - oldPOCNum = sps->origMaxPOCNum+4; - - TUint trailingBits = GetNumTrailingBits(bitbuf); - TInt diff = 0; - - // Signal that the slice data has been modified - slice->sliceDataModified = 1; - - if (trailingBits > 8) - { - trailingBits = 8; - } - - // If the size of the POC lsb field has changed then shift bits in the buffer - if ( oldPOCNum < newPOCNum ) - { - diff = newPOCNum - oldPOCNum; - - // Positive bit offset indicates bit-wise shift to right - slice->bitOffset += (diff % 8); - - ShiftBufferRight(bitbuf, diff, trailingBits, 0); - - } - else if ( oldPOCNum > newPOCNum ) - { - // New id's length is smaller than old id's length - diff = oldPOCNum - newPOCNum; - - // Negative bit offset indicates bit-wise shift to left - slice->bitOffset -= (diff % 8); - - ShiftBufferLeft(bitbuf, diff, 0); - - } - - shiftedBits += diff; - } - - // For now encode the POC as the frame number - EncodeUnsignedNBits(bitbuf, *aFrameNumber, sps->log2_max_pic_order_cnt_lsb_minus4+4); - - slice->delta_pic_order_cnt_bottom = 0; - - if (pps->pic_order_present_flag) - { // && !field_pic_flag - if ((retCode = se_v_long(bitbuf, &slice->delta_pic_order_cnt_bottom)) < 0) - return retCode; - } - } - else if (sps->pic_order_cnt_type == 1) - { - slice->delta_pic_order_cnt_0 = 0; - slice->delta_pic_order_cnt_1 = 0; - // Read delta_pic_order_cnt[ 0 ] and delta_pic_order_cnt[ 1 ] - if (!sps->delta_pic_order_always_zero_flag) - { - // delta_pic_order_cnt[ 0 ] - if ((retCode = se_v_long(bitbuf, &slice->delta_pic_order_cnt_0)) < 0) - return retCode; - if (pps->pic_order_present_flag) - { // delta_pic_order_cnt[ 1 ] - if ((retCode = se_v_long(bitbuf, &slice->delta_pic_order_cnt_1)) < 0) - return retCode; - } - } - } - - // If we don't have to do any bit shifting (left or right) with the slice header, - // we can just stop parsing the header and return. - if (shiftedBits == 0) - { - return SLICE_STOP_PARSING; - } - - // Redundant picture count - if (pps->redundant_pic_cnt_present_flag) - { - if ((retCode = ue_v(bitbuf, &slice->redundant_pic_cnt, 127)) < 0) - return retCode; - } - else - slice->redundant_pic_cnt = 0; - - // Reference picture management - if (IS_SLICE_P(slice->slice_type)) - { - if ((retCode = u_n(bitbuf, 1, &slice->num_ref_idx_active_override_flag)) < 0) - return retCode; - if (slice->num_ref_idx_active_override_flag) - { - if ((retCode = ue_v(bitbuf, &slice->num_ref_idx_l0_active_minus1, DPB_MAX_SIZE-1)) < 0) - return retCode; - } - } - - // Reordering the reference picture list - retCode = getRefPicListReorderingCmds(slice, sps->num_ref_frames, bitbuf); - - if (retCode < 0) - return retCode; - - // Read the MMCO commands, but not do the operations until all the slices in current picture are decoded - if (slice->nalRefIdc) - { - retCode = getDecRefPicMarkingCmds(slice, sps->num_ref_frames, bitbuf); - if (retCode < 0) - return retCode; - } - - // Slice quant - if ((retCode = se_v(bitbuf, &slice->slice_qp_delta, -MAX_QP, MAX_QP)) < 0) - return retCode; - - sliceQp = pps->pic_init_qp_minus26 + 26 + slice->slice_qp_delta; - if (sliceQp < MIN_QP || sliceQp > MAX_QP) - { - PRINT((_L("Error: illegal slice quant.\n"))); - return SLICE_ERR_ILLEGAL_VALUE; - } - - slice->qp = sliceQp; - - // Deblocking filter - slice->disable_deblocking_filter_idc = 0; - slice->slice_alpha_c0_offset_div2 = 0; - slice->slice_beta_offset_div2 = 0; - - if (pps->deblocking_filter_parameters_present_flag == 1) - { - - if ((retCode = ue_v(bitbuf, &slice->disable_deblocking_filter_idc, 2)) < 0) - return retCode; - - if (slice->disable_deblocking_filter_idc != 1) - { - if ((retCode = se_v(bitbuf, &slice->slice_alpha_c0_offset_div2, MIN_ALPHA_BETA_OFFSET, MAX_ALPHA_BETA_OFFSET)) < 0) - return retCode; - if ((retCode = se_v(bitbuf, &slice->slice_beta_offset_div2, MIN_ALPHA_BETA_OFFSET, MAX_ALPHA_BETA_OFFSET)) < 0) - return retCode; - } - } - - // Read slice_group_change_cycle - if (pps->num_slice_groups_minus1 > 0 && pps->slice_group_map_type >= 3 && - pps->slice_group_map_type <= 5) - { - // len = Ceil( Log2( PicSizeInMapUnits / SliceGroupChangeRate + 1 ) ) - // PicSizeInMapUnits / SliceGroupChangeRate - temp = picSizeInMapUnits / (pps->slice_group_change_rate_minus1+1); - - // Calculate Log2 - temp2 = (temp + 1) >> 1; - for (len1 = 0; len1 < 16 && temp2 != 0; len1++) - temp2 >>= 1; - - // Calculate Ceil - if ( (((unsigned)1) << len1) < (temp + 1) ) - len1++; - - if ((retCode = u_n(bitbuf, len1, &slice->slice_group_change_cycle)) < 0) - return retCode; - - // Ceil( PicSizeInMapUnits/SliceGroupChangeRate ) - if (temp * (pps->slice_group_change_rate_minus1+1) != picSizeInMapUnits) - temp++; - - // The value of slice_group_change_cycle shall be in the range of - // 0 to Ceil( PicSizeInMapUnits/SliceGroupChangeRate ), inclusive. - if (slice->slice_group_change_cycle > temp) - return SLICE_ERR_ILLEGAL_VALUE; - } - - return SLICE_OK; -} - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/vedavcedit.cpp --- a/videoeditorengine/avcedit/src/vedavcedit.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* API class for avc editing module. -* -*/ - - - -// INCLUDE FILES -#include "vedavcedit.h" -#include "vedavceditimp.h" - - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CTRTranscoder::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -EXPORT_C CVedAVCEdit* CVedAVCEdit::NewL() - { - CVedAVCEditImp* self = CVedAVCEditImp::NewL(); - return self; - } - - -// --------------------------------------------------------- -// CTRTranscoder::~CTRTranscoder() -// Destructor -// --------------------------------------------------------- -// -CVedAVCEdit::~CVedAVCEdit() - { - } - - - -#ifndef EKA2 - -// ----------------------------------------------------------------------------- -// E32Dll DLL Entry point -// ----------------------------------------------------------------------------- -// -GLDEF_C TInt E32Dll(TDllReason /*aReason*/) - { - return(KErrNone); - } - -#endif - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/vedavceditimp.cpp --- a/videoeditorengine/avcedit/src/vedavceditimp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1005 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation class for AVC editing operations. -* -*/ - - -#include -#include - -#include "biblin.h" -#include "bitbuffer.h" -#include "vld.h" -#include "vedavceditimp.h" - -// Debug print macro -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -// An assertion macro wrapper to clean up the code a bit -#define VPASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CVedAVCEdit"), -10000)) - -// ================= MEMBER FUNCTIONS ======================= - -// Two-phased constructor -CVedAVCEditImp* CVedAVCEditImp::NewL() -{ - CVedAVCEditImp* self = new (ELeave) CVedAVCEditImp(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - return self; -} - -// C++ default constructor -CVedAVCEditImp::CVedAVCEditImp() - { - } - -// Symbian OS default constructor can leave -void CVedAVCEditImp::ConstructL() - { - - iAvcDecoder = avcdOpen(); - - if (!iAvcDecoder) - { - User::Leave(KErrNoMemory); - } - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - iNalLengthSize = 4; - iOutputLevel = 10; -#endif - - } - -// Destructor -CVedAVCEditImp::~CVedAVCEditImp() - { - avcdClose(iAvcDecoder); - } - - -// ---------------------------------------------------------7 -// AVCEditParser::ProcessAVCBitStream -// Process one input AVC frame, i.e., convert to MDF NAL unit -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVedAVCEditImp::ProcessAVCBitStreamL(TDes8& aBuf, TInt& aFrameLen, TInt aDecInfoSize, TBool aFirstFrame) - { - - TUint8* dataBuffer = (TUint8*)(aBuf.Ptr()); - - // Calculate NAL header start offset - TInt offset = (((aFrameLen - 1) / 4) + 1) * 4; // Align at 32-bit boundrary - TInt numNALUnits = 0; - - if (aFirstFrame) // There are several NAL units: decoder info and the frame - { - // how many bytes used for length - iFrameLengthBytes = ( dataBuffer[4] & 0x3 ) + 1; - - // Index where to read configuration data - TInt index = 5; // Skip version and length information - - TInt numOfSPS = dataBuffer[index] & 0x1f; - index++; - - // Loop all SPS units - for (TInt i = 0; i < numOfSPS; ++i) - { - TInt SPSSize = (dataBuffer[index] << 8) + dataBuffer[index + 1]; - index += 2; - - // Set NAL start offset - dataBuffer[offset + 0] = TUint8(index & 0xff); - dataBuffer[offset + 1] = TUint8((index >> 8) & 0xff); - dataBuffer[offset + 2] = TUint8((index >> 16) & 0xff); - dataBuffer[offset + 3] = TUint8((index >> 24) & 0xff); - - // Set NAL size - dataBuffer[offset + 4] = TUint8(SPSSize & 0xff); - dataBuffer[offset + 5] = TUint8((SPSSize >> 8) & 0xff); - dataBuffer[offset + 6] = TUint8((SPSSize >> 16) & 0xff); - dataBuffer[offset + 7] = TUint8((SPSSize >> 24) & 0xff); - - offset += 8; - index += SPSSize; - numNALUnits++; - } - - TInt numOfPPS = dataBuffer[index]; - index++; - - // Loop all PPS units - for (TInt i = 0; i < numOfPPS; ++i) - { - TInt PPSSize = (dataBuffer[index] << 8) + dataBuffer[index + 1]; - index += 2; - - // Set NAL start offset - dataBuffer[offset + 0] = TUint8(index & 0xff); - dataBuffer[offset + 1] = TUint8((index >> 8) & 0xff); - dataBuffer[offset + 2] = TUint8((index >> 16) & 0xff); - dataBuffer[offset + 3] = TUint8((index >> 24) & 0xff); - - // Set NAL size - dataBuffer[offset + 4] = TUint8(PPSSize & 0xff); - dataBuffer[offset + 5] = TUint8((PPSSize >> 8) & 0xff); - dataBuffer[offset + 6] = TUint8((PPSSize >> 16) & 0xff); - dataBuffer[offset + 7] = TUint8((PPSSize >> 24) & 0xff); - - offset += 8; - index += PPSSize; - numNALUnits++; - } - - TInt totalFrameSize = aFrameLen; - TInt currentProcessed = aDecInfoSize + 4; // skip DCR & length - TUint8* frameLenPtr = const_cast(aBuf.Ptr()) + aDecInfoSize; - - TInt frameSize = 0; - - // loop all slice NAL units - while (currentProcessed < totalFrameSize) - { - - // Set the NAL start offset - dataBuffer[offset + 0] = TUint8(currentProcessed & 0xff); - dataBuffer[offset + 1] = TUint8((currentProcessed >> 8) & 0xff); - dataBuffer[offset + 2] = TUint8((currentProcessed >> 16) & 0xff); - dataBuffer[offset + 3] = TUint8((currentProcessed >> 24) & 0xff); - - frameSize = (frameLenPtr[0] << 24) + (frameLenPtr[1] << 16) + - (frameLenPtr[2] << 8) + frameLenPtr[3]; - - // Set the NAL size - dataBuffer[offset + 4] = TUint8(frameSize & 0xff); - dataBuffer[offset + 5] = TUint8((frameSize >> 8) & 0xff); - dataBuffer[offset + 6] = TUint8((frameSize >> 16) & 0xff); - dataBuffer[offset + 7] = TUint8((frameSize >> 24) & 0xff); - - frameLenPtr += (4 + frameSize); - currentProcessed += (4 + frameSize); - offset += 8; - numNALUnits++; - - } - - // Set Number of NAL units - dataBuffer[offset + 0] = TUint8(numNALUnits & 0xff); - dataBuffer[offset + 1] = TUint8((numNALUnits >> 8) & 0xff); - dataBuffer[offset + 2] = TUint8((numNALUnits >> 16) & 0xff); - dataBuffer[offset + 3] = TUint8((numNALUnits >> 24) & 0xff); - - aFrameLen = offset + 4; - } - else - { // process just the frame - - TInt totalFrameSize = aFrameLen; - TInt currentProcessed = 4; // skip length - TUint8* frameLenPtr = const_cast(aBuf.Ptr()); - - TInt frameSize = 0; - - // loop all slice NAL units - while (currentProcessed < totalFrameSize) - { - // Set the NAL start offset - dataBuffer[offset + 0] = TUint8(currentProcessed & 0xff); - dataBuffer[offset + 1] = TUint8((currentProcessed >> 8) & 0xff); - dataBuffer[offset + 2] = TUint8((currentProcessed >> 16) & 0xff); - dataBuffer[offset + 3] = TUint8((currentProcessed >> 24) & 0xff); - - frameSize = (frameLenPtr[0] << 24) + (frameLenPtr[1] << 16) + - (frameLenPtr[2] << 8) + frameLenPtr[3]; - - // Set the NAL size - dataBuffer[offset + 4] = TUint8(frameSize & 0xff); - dataBuffer[offset + 5] = TUint8((frameSize >> 8) & 0xff); - dataBuffer[offset + 6] = TUint8((frameSize >> 16) & 0xff); - dataBuffer[offset + 7] = TUint8((frameSize >> 24) & 0xff); - - frameLenPtr += (4 + frameSize); - currentProcessed += (4 + frameSize); - offset += 8; - numNALUnits++; - } - - // Number of NAL units - dataBuffer[offset + 0] = TUint8(numNALUnits & 0xff); - dataBuffer[offset + 1] = TUint8((numNALUnits >> 8) & 0xff); - dataBuffer[offset + 2] = TUint8((numNALUnits >> 16) & 0xff); - dataBuffer[offset + 3] = TUint8((numNALUnits >> 24) & 0xff); - - aFrameLen = offset + 4; - } - //iDataLength = iCurrentFrameLength; - } - -// --------------------------------------------------------- -// CVedAVCEditImp::GetMaxAVCFrameBuffering -// Calculate maximum amount of buffered AVC frames -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVedAVCEditImp::GetMaxAVCFrameBuffering(TInt aLevel, TSize aResolution) - { - - TReal maxDPB = 0.0; - switch (aLevel) - { - case 11: - maxDPB = 337.5; - break; - - case 12: - maxDPB = 891.0; - break; - - case 10: - case 101: - default: - maxDPB = 148.5; - break; - } - - TInt mbWidth = aResolution.iWidth / 16; - TInt mbHeight = aResolution.iHeight / 16; - - TInt maxDPBSize = TInt( ( TReal(1024.0) * maxDPB ) / ( TReal(mbWidth*mbHeight*384.0) ) ); - - maxDPBSize = min(maxDPBSize, 16); - - return maxDPBSize; - } - -// --------------------------------------------------------- -// CVedAVCEditImp::GetLevel -// Get input bitstream level from SPS -// --------------------------------------------------------- -// -TInt CVedAVCEditImp::GetLevel(TDesC8& aBuf, TInt& aLevel) - { - TUint8* buffer = (TUint8*)(aBuf.Ptr()); - - TInt index = 5; // Skip version and length information - -#ifdef _DEBUG - TInt numOfSPS = buffer[index] & 0x1f; - VPASSERT(numOfSPS == 1); -#endif - - index++; - - TUint SPSSize = (buffer[index] << 8) + buffer[index + 1]; - index += 2; - - TInt error = avcdParseLevel(iAvcDecoder, (void*)&buffer[index], &SPSSize, aLevel); - - if (error != KErrNone) - return error; - - return KErrNone; - } - - -// --------------------------------------------------------- -// CVedAVCEditImp::GetResolution -// Get input bitstream resolution from SPS -// --------------------------------------------------------- -// -TInt CVedAVCEditImp::GetResolution(TDesC8& aBuf, TSize& aResolution) -{ - - TUint8* buffer = (TUint8*)(aBuf.Ptr()); - - TInt index = 5; // Skip version and length information - -#ifdef _DEBUG - TInt numOfSPS = buffer[index] & 0x1f; - VPASSERT(numOfSPS == 1); -#endif - - index++; - - TUint SPSSize = (buffer[index] << 8) + buffer[index + 1]; - index += 2; - - TInt error = avcdParseResolution(iAvcDecoder, (void*)&buffer[index], &SPSSize, - aResolution.iWidth, aResolution.iHeight); - - if (error != KErrNone) - return error; - - return KErrNone; -} - - - -#ifdef VIDEOEDITORENGINE_AVC_EDITING -// --------------------------------------------------------- -// AVCEditParser::SaveAVCDecoderConfigurationRecordL -// Saves SPS/PPS Nal units from AVCDecoderConfigurationRecord -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVedAVCEditImp::SaveAVCDecoderConfigurationRecordL(TDes8& aBuf, TBool aFromEncoder) - { - - TUint8* buffer = (TUint8*)(aBuf.Ptr()); - - TInt index = 5; // Skip version and length information - - TInt numOfSPS = buffer[index] & 0x1f; - index++; - - // Loop all SPS units - for (TInt i = 0; i < numOfSPS; ++i) - { - TUint SPSSize = (buffer[index] << 8) + buffer[index + 1]; - index += 2; - - // feed NAL for saving to ParseParameterSet() - User::LeaveIfError( ParseParameterSet( (void*)&buffer[index], &SPSSize, aFromEncoder ) ); - index += SPSSize; - - } - - TInt numOfPPS = buffer[index]; - index++; - - // Loop all PPS units - for (TInt i = 0; i < numOfPPS; ++i) - { - TUint PPSSize = (buffer[index] << 8) + buffer[index + 1]; - index += 2; - - // feed NAL for saving to ParseParameterSet() - User::LeaveIfError( ParseParameterSet( (void*)&buffer[index], &PPSSize, aFromEncoder ) ); - index += PPSSize; - - } - - } - -// --------------------------------------------------------- -// CVedAVCEditImp::ConvertAVCHeader -// Convert AVC specific decoder config info to -// AVCDecoderConfigurationRecord -format -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVedAVCEditImp::ConvertAVCHeaderL( TDesC8& aSrcBuf, TDes8& aDstBuf ) - { - - TUint8* inputPtr = (TUint8*)(aSrcBuf.Ptr()); - TUint8* outputPtr = (TUint8*)(aDstBuf.Ptr()); - TUint8* spsPtr; - TUint8* ppsPtr; - - TUint numSPS = 0; - TUint numPPS = 0; - - TUint totalSPSLength = 0; - TUint totalPPSLength = 0; - - TUint headerLength = aSrcBuf.Length(); - TUint endIndex = headerLength; - - TInt nalType = 0; - TUint nalLength; - TUint nalIndex; - TUint nalOffset; - - // Allocate memory for the temporary buffers - HBufC8* temp1 = (HBufC8*) HBufC8::NewLC(1000); - HBufC8* temp2 = (HBufC8*) HBufC8::NewLC(5000); - - spsPtr = const_cast( temp1->Des().Ptr() ); - ppsPtr = const_cast( temp2->Des().Ptr() ); - - TUint numNalUnits = inputPtr[endIndex-4] + (inputPtr[endIndex-3]<<8) + (inputPtr[endIndex-2]<<16) + (inputPtr[endIndex-1]<<24); - - // Move endIndex to point to the first NAL unit's offset information - endIndex = headerLength - numNalUnits*8 - 4; - - nalIndex = 0; - - TUint8* copyPtr = inputPtr; - - while (nalIndex < numNalUnits) - { - nalIndex++; - - TInt tmp1 = inputPtr[endIndex++]; - TInt tmp2 = inputPtr[endIndex++]<<8; - TInt tmp3 = inputPtr[endIndex++]<<16; - TInt tmp4 = inputPtr[endIndex++]<<24; - - nalOffset = tmp1 + tmp2 + tmp3 + tmp4; - - tmp1 = inputPtr[endIndex++]; - tmp2 = inputPtr[endIndex++]<<8; - tmp3 = inputPtr[endIndex++]<<16; - tmp4 = inputPtr[endIndex++]<<24; - - nalLength = tmp1 + tmp2 + tmp3 + tmp4; - - nalType = inputPtr[nalOffset] & 0x1F; - - if(nalType == 7) - { - numSPS++; - - // First store the SPS unit length with two bytes - spsPtr[totalSPSLength] = (nalLength >> 8) & 0xFF; - spsPtr[totalSPSLength+1] = nalLength & 0xFF; - - // Copy the SPS unit to the buffer - Mem::Copy(&spsPtr[totalSPSLength+2], copyPtr , nalLength); - - totalSPSLength += nalLength + 2; // Two more for the size - } - else if(nalType == 8) - { - numPPS++; - - // First store the SPS unit length with two bytes - ppsPtr[totalPPSLength] = (nalLength >> 8) & 0xFF; - ppsPtr[totalPPSLength+1] = nalLength & 0xFF; - - // Copy the SPS unit to the buffer - Mem::Copy(&ppsPtr[totalPPSLength+2], copyPtr , nalLength); - - totalPPSLength += nalLength + 2; // Two more for the size - } - else - { - // [KW]: Check later if this is an error!!! - } - - copyPtr += nalLength; - } - - // When the header has been parsed, form the AVCDecoderConfigurationRecord - outputPtr[0] = 0x01; // configurationVersion - outputPtr[1] = 0x42; // Profile indicator - // Profile compatibility, i.e. all 4 constrain set flags + reserved 4 zero bits - outputPtr[2] = 0x80; // Bitstream obeys all baseline constraints - if ( iOutputLevel == 101 ) - { - // For level 1b, the 4th bit shall be == 1, otherwise it must be zero - outputPtr[2] |= 0x10; - } - else - { - outputPtr[2] &= 0xEF; - } - - outputPtr[3] = (iOutputLevel == 101) ? 11 : iOutputLevel; // level - - outputPtr[4] = 0x03; // lengthSizeMinusOne - outputPtr[4] |= 0x0FC; // 6 reserved bits (all 1) - - outputPtr[5] = numSPS; - outputPtr[5] |= 0xE0; // 3 reserved bits (all 1) - - TInt len = 6; - - // Copy the SPS unit(s) to the buffer - Mem::Copy(&outputPtr[6], spsPtr , totalSPSLength); - - len += totalSPSLength; - - outputPtr[6+totalSPSLength] = numPPS; - - len += 1; - - // Copy the PPS unit(s) to the buffer - Mem::Copy(&outputPtr[6+totalSPSLength+1], ppsPtr , totalPPSLength); - - len += totalPPSLength; - - aDstBuf.SetLength(len); - - CleanupStack::Pop(2); - - // Free the temporary buffers - delete temp1; - delete temp2; -} - - -// --------------------------------------------------------- -// CVedAVCEditImp::ParseOneNAL -// Saves one SPS/PPS NAL unit for later use -// --------------------------------------------------------- -// -TInt CVedAVCEditImp::ParseParameterSet(void *aNalUnitData, TUint* aNalUnitLength, TBool aFromEncoder) - { - TInt retCode; - - // Pass the information about the frame origin to the decoder - FrameIsFromEncoder(iAvcDecoder, aFromEncoder); - // Just call the decoder's parser function - retCode = avcdParseParameterSet(iAvcDecoder, aNalUnitData, aNalUnitLength); - - return retCode; - } - -TInt CVedAVCEditImp::ParseOneNAL(void *aNalUnitData, TUint* aNalUnitLength, TBool aFromEncoder) - { - TInt retCode; - - // Pass the information about the frame origin to the decoder - FrameIsFromEncoder(iAvcDecoder, aFromEncoder); - // Just call the decoder's parser function - retCode = avcdParseOneNal(iAvcDecoder, aNalUnitData, aNalUnitLength); - - return retCode; - } - -// --------------------------------------------------------- -// CVedAVCEditImp::ParseFrame -// Update slice header information -// --------------------------------------------------------- -// -TInt CVedAVCEditImp::ParseFrame(HBufC8*& aBuf, TBool aContainsDCR, TBool aFromEncoder) -{ - TUint nalSize; - TUint nalOrigSize = 0; - TUint nalLengthSize = 0; -// TInt nalType; -// TInt nalRefIdc; - TInt skip = 0; - TUint bufferLength = aBuf->Length(); - TPtr8 bufferPtr(aBuf->Des()); - TUint8* srcPtr = (TUint8*)(bufferPtr.Ptr()); - - TInt error; - HBufC8* temp1 = 0; - TRAP( error, temp1 = (HBufC8*) HBufC8::NewL(10) ); - - if (error != KErrNone) - return error; - - TPtr8 tempPtr(temp1->Des()); -// TUint tmpLength1; -// TUint tmpLength2; - TUint8* tempData1; - - tempPtr.Append(5); - - // Jump over the AVC decoder information if it's included - if(aContainsDCR) - { - // skip 4 bytes for - // configVersion, profile, profile compatibility and Level - skip += 4; - - // skip 1 byte for lengthSizeMinusOne - skip += 1; - - // skip 1 byte for number of sequence parameter sets - TInt numOfSSP = 0x1F & srcPtr[skip]; - skip += 1; - - for (TInt i = 0; i < numOfSSP; i++) - { - TInt sspSize = srcPtr[skip]*256 + srcPtr[skip+1]; - skip += 2; - skip += sspSize; - } - - TInt numOfPSP = srcPtr[skip]; - skip += 1; - - for (TInt i = 0; i < numOfPSP; i++) - { - TInt pspSize = srcPtr[skip]*256 + srcPtr[skip+1]; - skip += 2; - skip += pspSize; - } - } - - while (skip < bufferLength) - { - - TInt retVal = 0; - - nalLengthSize = iNalLengthSize; - switch (nalLengthSize) - { - case 1: - nalOrigSize = nalSize = srcPtr[skip]; - skip += 1; - break; - case 2: - nalOrigSize = nalSize = (srcPtr[skip] << 8) + srcPtr[skip+1]; - skip += 2; - break; - case 4: - nalOrigSize = nalSize = (srcPtr[skip] << 24) + (srcPtr[skip+1] << 16) + - (srcPtr[skip+2] << 8) + srcPtr[skip+3]; - - skip += 4; - break; - } - -// nalType = srcPtr[skip] & 0x1F; -// nalRefIdc = srcPtr[skip] & 0x60; - - // [KW]: Alloc memory here instead of sequence.cpp - tempData1 = (TUint8*) User::Alloc(nalOrigSize+100); - - if (tempData1 == 0) - { - User::Free(temp1); - return KErrNoMemory; - } - - Mem::Copy(tempData1, &srcPtr[skip], nalOrigSize*sizeof(TUint8)); - - Mem::FillZ(&tempData1[nalOrigSize], 100*sizeof(TUint8)); - - // Call ParseOneNaL function - retVal = ParseOneNAL(tempData1, &nalSize, aFromEncoder); - - if (retVal != KErrNone) - { - User::Free(tempData1); - User::Free(temp1); - return retVal; - } - - // Copy data back to the srcPtr - Mem::Copy(&srcPtr[skip],tempData1,nalOrigSize*sizeof(TUint8)); - -// tmpLength1 = aBuf->Length(); - if(nalSize > nalOrigSize) - { - TUint diff = nalSize - nalOrigSize; - - for (TInt i=0; i bufferPtr.MaxLength()) - { - // extend buffer size - TUint newSize = bufferPtr.Length() + 1; - - // round up to the next full kilobyte - newSize = (newSize + 1023) & (~1023); - TRAP(error, (aBuf = aBuf->ReAllocL(newSize)) ); - - if (error != KErrNone) - { - User::Free(tempData1); - User::Free(temp1); - return error; - } - - bufferPtr.Set(aBuf->Des()); - } - - bufferPtr.Insert(skip+nalOrigSize+i,tempPtr); -// tmpLength1 = aBuf->Length(); - } - bufferLength += diff; - } - else if(nalSize < nalOrigSize) - { - TUint diff = nalOrigSize - nalSize; - - // Delete diff bytes from the buffer - bufferPtr.Delete(skip+nalOrigSize-diff,diff); - - bufferLength -= diff; - } - - // Update the NAL unit's size information in the buffer - srcPtr[skip-4] = TUint8((nalSize >> 24) & 0xff); - srcPtr[skip-3] = TUint8((nalSize >> 16) & 0xff); - srcPtr[skip-2] = TUint8((nalSize >> 8) & 0xff); - srcPtr[skip-1] = TUint8(nalSize & 0xff); - - // Free the temporary data - User::Free(tempData1); - - skip += nalSize; - } - - User::Free(temp1); - - return KErrNone; -} - -// --------------------------------------------------------- -// CVedAVCEditImp::ConstructAVCDecoderConfigurationRecordL -// Constructs AVCDecoderConfigurationRecord for output -// --------------------------------------------------------- -// -void CVedAVCEditImp::ConstructAVCDecoderConfigurationRecordL( TDes8& aDstBuf ) - { - - TUint8* outputPtr = (TUint8*)(aDstBuf.Ptr()); - TUint8* spsPtr; - TUint8* ppsPtr; - - TUint numSPS = 0; - TUint numPPS = 0; - - TUint totalSPSLength = 0; - TUint totalPPSLength = 0; - - TInt i; - TUint spsLength; - TUint ppsLength; - TInt len = 6; - TUint8* copyPtr; - - - // Allocate memory for the temporary buffers - HBufC8* temp1 = (HBufC8*) HBufC8::NewLC(1000); - HBufC8* temp2 = (HBufC8*) HBufC8::NewLC(5000); - - spsPtr = const_cast( temp1->Des().Ptr() ); - ppsPtr = const_cast( temp2->Des().Ptr() ); - - numSPS = ReturnNumSPS(iAvcDecoder); - numPPS = ReturnNumPPS(iAvcDecoder); - - for (i=0; i> 8) & 0xFF; - spsPtr[totalSPSLength+1] = spsLength & 0xFF; - - // Copy the SPS unit to the buffer - Mem::Copy(&spsPtr[totalSPSLength+2], copyPtr , spsLength); - - totalSPSLength += spsLength + 2; // Two more for the size - } - - - for (i=0; i> 8) & 0xFF; - ppsPtr[totalPPSLength+1] = ppsLength & 0xFF; - - // Copy the PPS unit to the buffer - Mem::Copy(&ppsPtr[totalPPSLength+2], copyPtr , ppsLength); - - totalPPSLength += ppsLength + 2; // Two more for the size - } - - - - // When the header has been parsed, form the AVCDecoderConfigurationRecord - outputPtr[0] = 0x01; - outputPtr[1] = 0x42; // Profile indicator, baseline profile - - // Profile compatibility, i.e. all 4 constrain set flags + reserved 4 zero bits - outputPtr[2] = 0x80; // Bitstream obeys all baseline constraints - if ( iOutputLevel == 101 ) - { - // For level 1b, the 4th bit shall be == 1, otherwise it must be zero - outputPtr[2] |= 0x10; - } - else - { - outputPtr[2] &= 0xEF; - } - - outputPtr[3] = (iOutputLevel == 101) ? 11 : iOutputLevel; // level - outputPtr[4] = 0x03; // lengthSizeMinusOne - outputPtr[5] = numSPS; - - - // Copy the SPS unit(s) to the buffer - Mem::Copy(&outputPtr[6], spsPtr , totalSPSLength); - - len += totalSPSLength; - - outputPtr[6+totalSPSLength] = numPPS; - - len += 1; - - // Copy the PPS unit(s) to the buffer - Mem::Copy(&outputPtr[6+totalSPSLength+1], ppsPtr , totalPPSLength); - - len += totalPPSLength; - - aDstBuf.SetLength(len); - - CleanupStack::Pop(2); - // Free the temporary buffers - delete temp1; - delete temp2; - } - - -// --------------------------------------------------------- -// CVedAVCEditImp::EncodeUntilIDR -// Returns whether frames have to be encoded until next IDR frame -// --------------------------------------------------------- -// -TBool CVedAVCEditImp::EncodeUntilIDR() -{ - if (iAvcDecoder) - { - return (ReturnEncodeUntilIDR(iAvcDecoder)); - } - else - { - return EFalse; - } -} - - -// --------------------------------------------------------- -// CVedAVCEditImp::IsNALUnitIDR -// Returns whether passed frame is an IDR frame -// --------------------------------------------------------- -// -TBool CVedAVCEditImp::IsNALUnitIDR( TDes8& aNalBuf ) -{ - TUint8* bufferPtr = (TUint8*)(aNalBuf.Ptr()); - - // skip 4 bytes of length information - if((bufferPtr[4] & 0x1F) == 5) - return ETrue; - else - return EFalse; -} - -// --------------------------------------------------------- -// CVedAVCEditImp::StoreCurrentPPSId -// Stores the PPS id of passed frame for later use -// --------------------------------------------------------- -// -void CVedAVCEditImp::StoreCurrentPPSId( TDes8& aNalBuf ) -{ - TUint8* bufferPtr = (TUint8*)(aNalBuf.Ptr()); - TUint bufferLength = aNalBuf.Length(); - - switch (iNalLengthSize) - { - case 1: - bufferLength = bufferPtr[0]; - bufferPtr += 1; - break; - case 2: - bufferLength = (bufferPtr[0] << 8) + bufferPtr[1]; - bufferPtr += 2; - break; - case 4: - bufferLength = (bufferPtr[0] << 24) + (bufferPtr[1] << 16) + - (bufferPtr[2] << 8) + bufferPtr[3]; - - bufferPtr += 4; - break; - } - avcdStoreCurrentPPSId(iAvcDecoder, bufferPtr, bufferLength); -} - -// --------------------------------------------------------- -// CVedAVCEditImp::GenerateNotCodedFrame -// Generates a not coded (empty) frame -// --------------------------------------------------------- -// -TInt CVedAVCEditImp::GenerateNotCodedFrame( TDes8& aNalBuf, TUint aFrameNumber ) -{ - TUint8* bufferPtr = (TUint8*)(aNalBuf.Ptr()); - TUint bufferLength = aNalBuf.Length(); - TInt frameLength = 0; - - frameLength = avcdGenerateNotCodedFrame(iAvcDecoder, bufferPtr, bufferLength, aFrameNumber); - - if(frameLength > 0) - { - TInt i; - - // Make room for iNalLengthSize bytes of length information to the start - for (i=frameLength-1; i>=0; i--) - { - bufferPtr[i+iNalLengthSize] = bufferPtr[i]; - } - - // Add the NAL size information to the buffer - switch (iNalLengthSize) - { - case 1: - bufferPtr[0] = TUint8(frameLength & 0xff); - frameLength++; - break; - case 2: - bufferPtr[0] = TUint8((frameLength >> 8) & 0xff); - bufferPtr[1] = TUint8(frameLength & 0xff); - frameLength += 2; - break; - case 4: - bufferPtr[0] = TUint8((frameLength >> 24) & 0xff); - bufferPtr[1] = TUint8((frameLength >> 16) & 0xff); - bufferPtr[2] = TUint8((frameLength >> 8) & 0xff); - bufferPtr[3] = TUint8(frameLength & 0xff); - frameLength += 4; - break; - } - - return frameLength; - } - else - return 0; -} - -// --------------------------------------------------------- -// CVedAVCEditImp::ModifyFrameNumber -// Modifies the frame number of input NAL unit -// --------------------------------------------------------- -// -void CVedAVCEditImp::ModifyFrameNumber( TDes8& aNalBuf, TUint aFrameNumber ) -{ - TUint8* bufferPtr = (TUint8*)(aNalBuf.Ptr()); - TUint bufferLength = aNalBuf.Length(); - - switch (iNalLengthSize) - { - case 1: - bufferLength = bufferPtr[0]; - bufferPtr += 1; - break; - case 2: - bufferLength = (bufferPtr[0] << 8) + bufferPtr[1]; - bufferPtr += 2; - break; - case 4: - bufferLength = (bufferPtr[0] << 24) + (bufferPtr[1] << 16) + - (bufferPtr[2] << 8) + bufferPtr[3]; - - bufferPtr += 4; - break; - } - - if (bufferPtr[0]==0x01 && bufferPtr[1]==0x42) - return; - - avcdModifyFrameNumber(iAvcDecoder, bufferPtr, bufferLength, aFrameNumber); -} - -#endif - -// End of file - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/avcedit/src/vld.cpp --- a/videoeditorengine/avcedit/src/vld.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1796 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//#include "epoclib.h" -#include "globals.h" -#include "bitbuffer.h" -#include "vld.h" - - -#define VLD_MAX_CW_LEN 33 -#define VLD_MAX_LONG_CW_LEN 65 - -#define VLD_MAX_UVLC_CODE_NUM 65535 /* 2^16-1 */ -#define VLD_MAX_LONG_UVLC_CODE_NUM 4294967295U /* 2^32-1 */ - -#define VLD_NUM_MB_CODES_INTRA (1+4*3*2+1) /* 1 4x4, 24 16x16, 1 PCM */ -#define VLD_NUM_MB_CODES_INTER (5+1+4*3*2+1) /* 5 inter, 1 4x4, 24 16x16, 1 PCM */ - -#define VLD_MAX_SUB_MB_MODE 3 - -#define VLD_MAX_IPR_CHROMA_MODE 3 - -#define VLD_MAX_CBP_CODE 47 -#define VLD_MAX_DELTA_QP_CODE 52 - - -#ifdef VIDEOEDITORENGINE_AVC_EDITING -/* - * Static tables for VLD decoder - */ - - -/* gives CBP value from codeword number, both for intra and inter */ -static const int8 code2cbp[VLD_MAX_CBP_CODE+1][2] = { - {47, 0},{31,16},{15, 1},{ 0, 2},{23, 4},{27, 8},{29,32},{30, 3},{ 7, 5},{11,10},{13,12},{14,15}, - {39,47},{43, 7},{45,11},{46,13},{16,14},{ 3, 6},{ 5, 9},{10,31},{12,35},{19,37},{21,42},{26,44}, - {28,33},{35,34},{37,36},{42,40},{44,39},{ 1,43},{ 2,45},{ 4,46},{ 8,17},{17,18},{18,20},{20,24}, - {24,19},{ 6,21},{ 9,26},{22,28},{25,23},{32,27},{33,29},{34,30},{36,22},{40,25},{38,38},{41,41} -}; - -static const int numRefIndices[5] = { - 0, 1, 2, 2, 4 -}; - -/* Look-up table for determining the number of leading zero bits in a 7-bit bumber */ -static const int8 numLeadZerosTab[128] = { - 7,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -}; - - -/* - * Structure of the code is XXYYYYZZ, where XX is the length of the code - * minus (number of leading zero bits plus 1), YYYY is totalCoef-1 and - * ZZ is numTrailingOnes. Code xx000010 means that there are no coefficients. - * 0 is illegal. - */ -static const u_int8 numCoefTrailTab[3][16][8] = { - { - { 2, 2, 2, 2, 2, 2, 2, 2}, { 1, 1, 1, 1, 1, 1, 1, 1}, - { 6, 6, 6, 6, 6, 6, 6, 6}, {133,133,128,128, 75, 75, 75, 75}, - {147,147,138,138, 79, 79, 79, 79}, {151,151,142,142,137,137,132,132}, - {155,155,146,146,141,141,136,136}, {159,159,150,150,145,145,140,140}, - {163,163,154,154,149,149,144,144}, {220,226,221,216,231,222,217,212}, - {239,234,229,228,235,230,225,224}, {247,242,237,236,243,238,233,232}, - {255,250,249,244,251,246,245,240}, {188,188,190,190,189,189,184,184}, - { 49, 49, 49, 49, 49, 49, 49, 49}, { 0, 0, 0, 0, 0, 0, 0, 0} - }, - { - { 65, 65, 65, 65, 66, 66, 66, 66}, {143,143,139,139, 70, 70, 70, 70}, - {215,202,201,192,147,147,133,133}, {155,155,142,142,141,141,132,132}, - {159,159,146,146,145,145,136,136}, {144,144,150,150,149,149,140,140}, - {163,163,154,154,153,153,148,148}, {235,226,225,220,231,222,221,216}, - {232,234,233,228,239,230,229,224}, {247,242,241,240,243,238,237,236}, - {249,248,250,245,182,182,180,180}, {191,191,190,190,189,189,188,188}, - { 59, 59, 59, 59, 59, 59, 59, 59}, { 0, 0, 0, 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0} - }, - { - {219,215,211,207,203,198,193,194}, {209,210,205,206,201,223,202,197}, - {200,218,217,196,227,214,213,192}, {216,212,226,208,231,222,221,204}, - {239,234,229,224,235,230,225,220}, {236,242,237,232,243,238,233,228}, - {249,244,247,246,245,240,177,177}, {189,189,184,184,187,187,186,186}, - {127,127,127,127,126,126,126,126}, { 60, 60, 60, 60, 60, 60, 60, 60}, - { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0}, - { 0, 0, 0, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 0} - } -}; - - -/* - * The structure of the code is XXXYYYXX where XXX is the length of the code - * minus 1, YYY is total number of non-zero coefficients and XX is - * the number of trailing ones. - */ -static const u_int8 numCoefTrailTabChroma[8][4] = { - { 5, 5, 5, 5}, - { 32, 32, 32, 32}, - { 74, 74, 74, 74}, - {168,175,169,164}, - {176,176,172,172}, - {206,206,205,205}, - {242,242,241,241}, - {211,211,211,211} -}; - - -/* Offsets for 15 Huffman tables in totalZerosTab */ -static const int totalZerosTabOffset[15] = { - 0, 40, 72, 104, 136, 168, - 184, 200, 216, 232, 248, 264, 280, - 288, 296 -}; - -/* - * The meaning of the code in the table is the following: - * If (code > 0xc0) then (code - 0xc0) is an offset to the next position - * in the Huffman tree - * Otherwise, code structure is XXXXYYYY where XXXX is the length of the code - * and YYYY is the number of zero coefficients. - */ -static const u_int8 totalZerosTab[304] = { - 0xC8, 0xD0, 0x32, 0x31, 0x10, 0x10, 0x10, 0x10, /* totalCoef==1 */ - 0xD8, 0xE0, 0x68, 0x67, 0x56, 0x56, 0x55, 0x55, /* prefix 000 */ - 0x44, 0x44, 0x44, 0x44, 0x43, 0x43, 0x43, 0x43, /* prefix 001 */ - 0x00, 0x9f, 0x9e, 0x9d, 0x8c, 0x8c, 0x8b, 0x8b, /* prefix 000000 */ - 0x7a, 0x7a, 0x7a, 0x7a, 0x79, 0x79, 0x79, 0x79, /* prefix 000001 */ - 0xC8, 0xD0, 0xD8, 0x34, 0x33, 0x32, 0x31, 0x30, /* totalCoef==2 */ - 0x6e, 0x6d, 0x6c, 0x6b, 0x5a, 0x5a, 0x59, 0x59, /* prefix 000 */ - 0x48, 0x48, 0x48, 0x48, 0x47, 0x47, 0x47, 0x47, /* prefix 001 */ - 0x46, 0x46, 0x46, 0x46, 0x45, 0x45, 0x45, 0x45, /* prefix 010 */ - 0xC8, 0xD0, 0xD8, 0x37, 0x36, 0x33, 0x32, 0x31, /* totalCoef==3 */ - 0x6d, 0x6b, 0x5c, 0x5c, 0x5a, 0x5a, 0x59, 0x59, /* prefix 000 */ - 0x48, 0x48, 0x48, 0x48, 0x45, 0x45, 0x45, 0x45, /* prefix 001 */ - 0x44, 0x44, 0x44, 0x44, 0x40, 0x40, 0x40, 0x40, /* prefix 010 */ - 0xC8, 0xD0, 0xD8, 0x38, 0x36, 0x35, 0x34, 0x31, /* totalCoef==4 */ - 0x5c, 0x5c, 0x5b, 0x5b, 0x5a, 0x5a, 0x50, 0x50, /* prefix 000 */ - 0x49, 0x49, 0x49, 0x49, 0x47, 0x47, 0x47, 0x47, /* prefix 001 */ - 0x43, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, /* prefix 010 */ - 0xC8, 0xD0, 0xD8, 0x37, 0x36, 0x35, 0x34, 0x33, /* totalCoef==5 */ - 0x5b, 0x5b, 0x59, 0x59, 0x4a, 0x4a, 0x4a, 0x4a, /* prefix 000 */ - 0x48, 0x48, 0x48, 0x48, 0x42, 0x42, 0x42, 0x42, /* prefix 001 */ - 0x41, 0x41, 0x41, 0x41, 0x40, 0x40, 0x40, 0x40, /* prefix 010 */ - 0xC8, 0x39, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, /* totalCoef==6 */ - 0x6a, 0x60, 0x51, 0x51, 0x48, 0x48, 0x48, 0x48, /* prefix 000 */ - 0xC8, 0x38, 0x36, 0x34, 0x33, 0x32, 0x25, 0x25, /* totalCoef==7 */ - 0x69, 0x60, 0x51, 0x51, 0x47, 0x47, 0x47, 0x47, /* prefix 000 */ - 0xC8, 0x37, 0x36, 0x33, 0x25, 0x25, 0x24, 0x24, /* totalCoef==8 */ - 0x68, 0x60, 0x52, 0x52, 0x41, 0x41, 0x41, 0x41, /* prefix 000 */ - 0xC8, 0x35, 0x26, 0x26, 0x24, 0x24, 0x23, 0x23, /* totalCoef==9 */ - 0x61, 0x60, 0x57, 0x57, 0x42, 0x42, 0x42, 0x42, /* prefix 000 */ - 0xC8, 0x32, 0x25, 0x25, 0x24, 0x24, 0x23, 0x23, /* totalCoef==10 */ - 0x51, 0x51, 0x50, 0x50, 0x46, 0x46, 0x46, 0x46, /* prefix 000 */ - 0xC8, 0x32, 0x33, 0x35, 0x14, 0x14, 0x14, 0x14, /* totalCoef==11 */ - 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, /* prefix 000 */ - 0xC8, 0x34, 0x22, 0x22, 0x13, 0x13, 0x13, 0x13, /* totalCoef==12 */ - 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, /* prefix 000 */ - 0x30, 0x31, 0x23, 0x23, 0x12, 0x12, 0x12, 0x12, /* totalCoef==13 */ - 0x20, 0x20, 0x21, 0x21, 0x12, 0x12, 0x12, 0x12, /* totalCoef==14 */ - 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, /* totalCoef==15 */ -}; - - -/* - * The structure of the code is XXXXYYYY where XXXX is the length of the code - * and YYYY is the number of zero coefficients. - */ -static const u_int8 totalZerosTabChroma[3][8] = { - {0x33, 0x32, 0x21, 0x21, 0x10, 0x10, 0x10, 0x10}, - {0x22, 0x22, 0x21, 0x21, 0x10, 0x10, 0x10, 0x10}, - {0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10} -}; - - -/* - * The structure of the code is XXXXYYYY where XXXX is the length of the code - * and YYYY is run length. - */ -static const u_int8 runBeforeTab[7][8] = { - {0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10}, - {0x22, 0x22, 0x21, 0x21, 0x10, 0x10, 0x10, 0x10}, - {0x23, 0x23, 0x22, 0x22, 0x21, 0x21, 0x20, 0x20}, - {0x34, 0x33, 0x22, 0x22, 0x21, 0x21, 0x20, 0x20}, - {0x35, 0x34, 0x33, 0x32, 0x21, 0x21, 0x20, 0x20}, - {0x31, 0x32, 0x34, 0x33, 0x36, 0x35, 0x20, 0x20}, - {0x00, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30}, -}; - - - -/* - * Static function prototypes - */ - -static int getCoefLevelVLC0(bitbuffer_s *bitbuf); - -static int getCoefLevelVLCN(bitbuffer_s *bitbuf, int tabNum); - -static int get4x4coefs(bitbuffer_s *bitbuf, int coef[4][4], - int blkIdxX, int blkIdxY, int8 *numCoefUpPred, - int8 *numCoefLeftPred, int mbAvailbits, int dcSkip); - -static int get2x2coefsCDC(bitbuffer_s *bitbuf, int coef[4], int *numCoef); - -#endif // VIDEOEDITORENGINE_AVC_EDITING - -/* - * Functions begin here - */ - -/* - * - * vldGetFLC: - * - * Parameters: - * bitbuf Bitbuffer object - * len Length of the code - * - * Function: - * Get Fixed Length Code (max length 16 bits). - * - * Returns: - * Code - * - */ -unsigned int vldGetFLC(bitbuffer_s *bitbuf, int len) -{ - u_int32 code; - - bibGetMax16bits(bitbuf, len, &code); - - return (unsigned int)code; -} - -/* - * - * vldGetUVLC: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Decode an UVLC codeword, UVLC codeword is of the form: - * code codeword - * 0 1 - * 1 010 - * 2 011 - * 3 00100 - * 4 00101 - * 5 00110 - * 6 00111 - * 7 0001000 - * 8 0001001 - * ... ... - * - * Returns: - * Codenumber in the range [0, 65535] - * - */ -#if 1 -unsigned int vldGetUVLC(bitbuffer_s *bitbuf) -{ - u_int32 c; - int prefixLen; - int bit; - - bibGetBit(bitbuf, &bit); - - if (bit == 1) - return 0; - - prefixLen = 0; - - do { - bibGetBit(bitbuf, &bit); - prefixLen += 1; - - /* Maximum prefix length is VLD_MAX_CW_LEN/2 */ - if (prefixLen == VLD_MAX_CW_LEN/2) { - bibGetMax16bits(bitbuf, VLD_MAX_CW_LEN/2, &c); - if (bit != 1 || c != 0) { - /* We encoutered overlong codeword or we encoutered too big code */ - bibRaiseError(bitbuf, BIB_ERR_BIT_ERROR); - return 0; - } - else - return VLD_MAX_UVLC_CODE_NUM; /* Otherwise, return maximum 16-bit code number */ - } - - } while (bit == 0); - - bibGetMax16bits(bitbuf, prefixLen, &c); - - return (unsigned int)(c + (1<= 0x0100) { - prefixLen = numLeadZerosTab[bits>>9]; - len = 2*prefixLen+1; - bibSkipBits(bitbuf, len); - return (unsigned int)((bits >> (16-len)) - 1); - } - else { - if (bits >= 0x0001) - prefixLen = 8 + numLeadZerosTab[bits>>1]; - else - prefixLen = 16; - - bibSkipBits(bitbuf, prefixLen); - bibGetBits(bitbuf, prefixLen+1, &bits); - return (unsigned int)(bits - 1); - } -} -#endif - -/* - * - * vldGetSignedUVLClong: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Decode an UVLC codeword and produce signed 32-bit integer - * - * Returns: - * Code in the range [-2^31, 2^31-1] - * - */ -int32 vldGetSignedUVLClong(bitbuffer_s *bitbuf) -{ - u_int32 codeNum; - int32 code; - - codeNum = vldGetUVLClong(bitbuf); - - /* Decode magnitude */ - code = (int32)((codeNum >> 1) + (codeNum & 1)); - - /* Decode sign */ - if ((codeNum & 1) == 0) - code = -code; - - return code; -} - -/* - * - * vldGetUVLClong: - * - * Parameters: - * bitbuf Bitbuffer object - * code Return pointer for code - * - * Function: - * Decode long UVLC codeword. - * - * Returns: - * Codenumber in the range [0, 2^32-1] - * - */ -u_int32 vldGetUVLClong(bitbuffer_s *bitbuf) -{ - u_int32 c, cLo; - int prefixLen, len0; - int bits; - - prefixLen = -1; - - do { - bibGetBit(bitbuf, &bits); - prefixLen += 1; - - /* Is codeword too long? */ - if (prefixLen > VLD_MAX_LONG_CW_LEN/2) { - bibRaiseError(bitbuf, BIB_ERR_BIT_ERROR); - return 0; - } - - } while (bits == 0); - - len0 = min(24, prefixLen); - bibGetBits(bitbuf, len0, &c); - - if (prefixLen > 24) { - /* We have to read bits in two pieces because bibGetBits can only fetch */ - /* max. 24 bits */ - bibGetMax16bits(bitbuf, prefixLen-24, &cLo); - c = (c << (prefixLen-24)) | cLo; /* Combine two pieces */ - - if (prefixLen == VLD_MAX_LONG_CW_LEN/2) { - /* Is codeword too big? */ - if (c != 0) { - bibRaiseError(bitbuf, BIB_ERR_BIT_ERROR); - return 0; - } - else - return (u_int32)VLD_MAX_LONG_UVLC_CODE_NUM; /* Otherwise, return maximum 32-bit code number */ - } - } - - return (c + (1<>1); - - /* Decode sign */ - if ((codeNum & 1) == 0) - code = -code; - - return code; -} - -/* - * - * setChromaCbp: - * - * Parameters: - * nc If 0, all CBP are zero - * cbpDC Coded Bit Pattern for chroma DC - * cbp Coded Bit Pattern for chroma AC - * - * Function: - * Set chroma DC and AC CBP values - * nc = 0: No coefficients - * nc = 1: Only nonzero DC coefficients - * nc = 2: Nonzero AC and DC coefficients - * - * Returns: - * - - */ -void setChromaCbp(int nc, int *cbpDC, int *cbp) -{ - if (nc == 0) - *cbpDC = *cbp = 0; - else if (nc == 1) - *cbpDC = 3, *cbp = 0; - else - *cbpDC = 3, *cbp = (1<<2*BLK_PER_MB/2*BLK_PER_MB/2)-1; -} - - -/* - * - * getLumaBlkCbp: - * - * Parameters: - * cbpY CBP for 8x8 blocks - * - * Function: - * Convert Codec Block Pattern of 8x8 blocks to Codec Block Pattern for - * 4x4 blocks. If 8x8 block has nonzero coefficients then all 4x4 blocks - * within that 8x8 block are marked nonzero. - * - * Returns: - * CBP for 4x4 blocks - * - */ -int getLumaBlkCbp(int cbpY) -{ - int cbp; - - cbp = (cbpY & (1<<0)) == 0 ? 0 : 0x0033; - cbp |= (cbpY & (1<<1)) == 0 ? 0 : 0x00cc; - cbp |= (cbpY & (1<<2)) == 0 ? 0 : 0x3300; - cbp |= (cbpY & (1<<3)) == 0 ? 0 : 0xcc00; - - return cbp; -} - - -/* - * - * vldGetRunIndicator: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Get the amount of copy macroblocks. - * - * Returns: - * The number of copy MBs - * - */ -unsigned int vldGetRunIndicator(bitbuffer_s *bitbuf) -{ - return vldGetUVLC(bitbuf); -} - - -/* - * - * vldGetMBtype: - * - * Parameters: - * bitbuf Bitbuffer object - * hdr Return pointer for MB params - * picType Type of current picture (intra/inter) - * - * Function: - * Get macroblock type. If MB is 16x16 intra then form cbp. Subblock - * mode are also fetched if main mode is 8x8 inter. - * - * Returns: - * VLD_OK for no error and VLD_ERROR for error. - * - */ -int vldGetMBtype(bitbuffer_s *bitbuf, vldMBtype_s *hdr, int picType) -{ - unsigned int code; - int nc; - int i; - - /* Get macroblock mode */ - code = vldGetUVLC(bitbuf); - - if (IS_SLICE_I(picType)) { - /* INTRA macroblock in INTRA slice */ - if (code >= VLD_NUM_MB_CODES_INTRA) - return VLD_ERROR; - - hdr->type = MBK_INTRA; - } - else { - if (code >= VLD_NUM_MB_CODES_INTER) - return VLD_ERROR; - - if (code >= 5) { - /* INTRA macroblock in INTER slice */ - hdr->type = MBK_INTRA; - code -= 5; - } - else { - /* INTER macroblock in INTER slice */ - hdr->type = MBK_INTER; - hdr->interMode = code+1; - - if (hdr->interMode >= 4) { - - /* - * Get sub-macroblock mode modes - */ - - for (i = 0; i < 4; i++) { - code = vldGetUVLC(bitbuf); - - if (code > VLD_MAX_SUB_MB_MODE) - return VLD_ERROR; - - hdr->inter8x8modes[i] = code; - } - - } - - if (bibGetStatus(bitbuf) < 0) - return VLD_ERROR; - - return VLD_OK; - } - } - - if (bibGetStatus(bitbuf) < 0) - return VLD_ERROR; - - /* - * This is INTRA macroblock, find out INTRA type - */ - - if (code == 0) - hdr->intraType = MBK_INTRA_TYPE1; - else if (code != VLD_NUM_MB_CODES_INTRA-1) { - /* 16x16 INTRA - compose cbp value */ - hdr->intraType = MBK_INTRA_TYPE2; - code -= 1; - hdr->intraMode = code & 3; - code >>= 2; - if (code < 3) { - nc = code; - hdr->cbpY = 0; - } - else { - nc = code-3; - hdr->cbpY = 0xffff; - } - setChromaCbp(nc, &hdr->cbpChromaDC, &hdr->cbpC); - } - else { - hdr->intraType = MBK_INTRA_TYPE_PCM; - hdr->cbpY = 0xffff; - hdr->cbpC = 0xff; - hdr->cbpChromaDC = 0x3; - } - - - return VLD_OK; -} - - -/* - * - * vldGetIntraPred: - * - * Parameters: - * bitbuf Bitbuffer object - * ipTab Return pointer for intra pred. modes - * - * Function: - * Get 4x4 intra prediction modes. First a one bit flag is read. If flag - * is 1, mode is predicted from neighborin blocks. If flag is 0, - * additional 3 bit mode code is read. Process is repeated for 16 blocks. - * - * Returns: - * VLD_OK for no error and VLD_ERROR for error. - * - */ -int vldGetIntraPred(bitbuffer_s *bitbuf, int8 *ipTab) -{ - int i, j, k, l; - int bit; - int modeCode; - - for (j = 0; j < BLK_PER_MB; j+=2) { - for (i = 0; i < BLK_PER_MB; i+=2) { - for (k = 0; k < 2; k++) { - for (l = 0; l < 2; l++) { - bibGetBit(bitbuf, &bit); /* Read flag */ - if (bit == 1) /* If 1, predict from neighbors */ - ipTab[(j+k)*4+i+l] = -1; - else { /* If 0, read mode code */ - bibGetMax8bits(bitbuf, 3, &modeCode); - ipTab[(j+k)*4+i+l] = (int8)modeCode; - } - } - } - } - } - - /* Check if error occured */ - if (bibGetStatus(bitbuf) < 0) - return VLD_ERROR; - else - return VLD_OK; -} - - -/* - * - * vldGetChromaIntraPred: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Get chroma intra prediction mode. - * - * Returns: - * Prediction mode. - * - */ -int vldGetChromaIntraPred(bitbuffer_s *bitbuf) -{ - unsigned int mode; - - mode = vldGetUVLC(bitbuf); - - if (bibGetStatus(bitbuf) < 0 || mode > VLD_MAX_IPR_CHROMA_MODE) - return VLD_ERROR; - - return (int)mode; -} - - -/* - * - * vldGetMotVecs: - * - * Parameters: - * bitbuf Bitbuffer object - * interMode Motion mode (16x16, 8x16, ...) - * hasRef Flag for multiple ref. frames - * refNum Return pointer for ref. indices - * predVecs Return pointer for delta vectors - * numVecs Number of vectors to read - * - * Function: - * Get reference indices and delta motion vectors for MB - * - * Returns: - * VLD_OK for no error and VLD_ERROR for error - * - */ -int vldGetMotVecs(bitbuffer_s *bitbuf, int interMode, int numRefFrames, - int *refNum, int predVecs[][2], int numVecs) -{ - int i, j; - int code; - int refIdx; - - if (numRefFrames > 1 && interMode < 5) { - if (numRefFrames == 2) { - for (i = 0; i < numRefIndices[interMode]; i++) { - bibGetBit(bitbuf, &refIdx); - refNum[i] = 1 - refIdx; - } - } - else { - for (i = 0; i < numRefIndices[interMode]; i++) { - if ((refNum[i] = (int)vldGetUVLC(bitbuf)) >= numRefFrames) - return VLD_ERROR; - } - } - } - else - refNum[0] = 0; - - for(j = 0; j < numVecs; j++) { - for(i = 0; i < 2; i++) { - code = vldGetUVLC(bitbuf); - predVecs[j][i] = (code+1)>>1; - if ((code & 1) == 0) - predVecs[j][i] = -predVecs[j][i]; - } - } - - if (bibGetStatus(bitbuf) < 0) - return VLD_ERROR; - else - return VLD_OK; -} - - -/* - * - * vldGetCBP: - * - * Parameters: - * bitbuf Bitbuffer object - * mbType Macroblock type (intra/inter) - * cbpY Return pointer for luma CBP - * cbpChromaDC Return pointer for chroma DC CBP - * cbpC Return pointer for chroma CBP - * - * Function: - * Get Coded Block Patterns for both luma and chroma - * - * Returns: - * VLD_OK for no error and VLD_ERROR for error - * - */ -int vldGetCBP(bitbuffer_s *bitbuf, int mbType, - int *cbpY, int *cbpChromaDC, int *cbpC) -{ - unsigned int code; - int cbp; - - code = vldGetUVLC(bitbuf); - - if (bibGetStatus(bitbuf) < 0 || code > VLD_MAX_CBP_CODE) - return VLD_ERROR; - - if (mbType == MBK_INTRA) - cbp = code2cbp[code][0]; - else - cbp = code2cbp[code][1]; - - *cbpY = getLumaBlkCbp(cbp%16); - setChromaCbp(cbp>>4, cbpChromaDC, cbpC); - - return VLD_OK; -} - - -/* - * - * vldGetDeltaqp: - * - * Parameters: - * bitbuf Bitbuffer object - * delta_qp Return pointer for delta QP - * - * Function: - * Get macroblock delta QP - * - * Returns: - * VLD_OK for no error and VLD_ERROR for error - * - */ -int vldGetDeltaqp(bitbuffer_s *bitbuf, int *delta_qp) -{ - unsigned int code; - - code = vldGetUVLC(bitbuf); - - if (bibGetStatus(bitbuf) < 0 || code > VLD_MAX_DELTA_QP_CODE) - return VLD_ERROR; - - *delta_qp = (code+1)>>1; - - if ((code & 1) == 0) - *delta_qp = -(*delta_qp); - - return VLD_OK; -} - - -/* - * - * getCoefLevelVLC0: - * - * Parameters: - * bitbuf Bitbuffer object - * - * Function: - * Get CAVLC coefficient level for VLC0 code format - * - * Returns: - * Coefficient level - * - */ -static int getCoefLevelVLC0(bitbuffer_s *bitbuf) -{ - int numLeadingZeroBits; - u_int32 bits; - int len; - int coef; - - bibShowMax16bits(bitbuf, 16, &bits); - - if (bits > 0x0003) { - if (bits > 0x00ff) - numLeadingZeroBits = numLeadZerosTab[(int)(bits>>(16-7))]; - else - numLeadingZeroBits = 7 + numLeadZerosTab[(int)(bits>>(16-7-7))]; - - coef = (numLeadingZeroBits >> 1) + 1; - if (numLeadingZeroBits & 1) - coef = -coef; - - len = numLeadingZeroBits + 1; - bibSkipBits(bitbuf, len); - } - else if (bits > 0x0001) { - bibGetBits(bitbuf, 19, &bits); - coef = 8 + (((int)bits & 15) >> 1); - if (bits & 1) - coef = -coef; - } - else if (bits == 0x0001) { - bibSkipBits(bitbuf, 16); - bibGetMax16bits(bitbuf, 12, &bits); - coef = 16 + ((int)bits >> 1); - if (bits & 1) - coef = -coef; - } - else { - bibRaiseError(bitbuf, BIB_ERR_BIT_ERROR); - coef = 0; - } - - return coef; -} - -/* - * - * getCoefLevelVLCN: - * - * Parameters: - * bitbuf Bitbuffer object - * tabNum VLC table number to be used - * - * Function: - * Get CAVLC coefficient level for VLC1-6 code format - * - * Returns: - * Coefficient level - * - */ -static int getCoefLevelVLCN(bitbuffer_s *bitbuf, int tabNum) -{ - int numLeadingZeroBits; - u_int32 bits; - int len; - int coef; - - bibShowBits(bitbuf, 21, &bits); - - if (bits > 0x00003f) { - if (bits > 0x001fff) - numLeadingZeroBits = numLeadZerosTab[(int)(bits>>(21-7))]; - else - numLeadingZeroBits = 7 + numLeadZerosTab[(int)(bits>>(21-7-7))]; - - len = numLeadingZeroBits + 1 + tabNum; - bits = (bits >> (21 - len)) & ((1 << tabNum) - 1); - coef = (int)((numLeadingZeroBits << (tabNum - 1)) + (bits >> 1) + 1); - if (bits & 1) - coef = -coef; - - bibSkipBits(bitbuf, len); - } - else if (bits > 0x00001f) { - bibSkipBits(bitbuf, 16); - bibGetMax16bits(bitbuf, 12, &bits); - coef = (15 << (tabNum - 1)) + ((int)bits >> 1) + 1; - if (bits & 1) - coef = -coef; - } - else { - bibRaiseError(bitbuf, BIB_ERR_BIT_ERROR); - coef = 0; - } - - return coef; -} - - -/* - * - * get4x4coefs: - * - * Parameters: - * bitbuf Bitbuffer object - * coef Return pointer for 4x4 coefficients - * blkIdxX Horizontal block pos. within MB - * blkIdxY Vertical block pos. within MB - * numCoefUpPred Block coefficients counts of upper block - * numCoefLeftPred Block coefficients counts of left block - * mbAvailBits Macroblock availability flags - * dcSkip if 1, there's no DC coefficient - * - * Function: - * Decode coefficients for 4x4 block. - * - * Returns: - * VLD_OK for no error, VLD_ERROR for error - * - */ -static int get4x4coefs(bitbuffer_s *bitbuf, int coef[4][4], - int blkIdxX, int blkIdxY, int8 *numCoefUpPred, - int8 *numCoefLeftPred, int mbAvailBits, int dcSkip) -{ - int numCoefPred; - int tabNum; - u_int32 bits; - int code; - int numTrailingOnes; - int numLeadingZeroBits; - int totalCoef; - int numBits; - u_int32 flc; - int tmpLevel[16]; - int level; - int numBigCoef; - u_int32 signs; - int s; - int i; - const u_int8 *totalZerosPtr; - int offset; - int totalZeros; - int zerosLeft; - int run; - int coefPos; - int coefNum; - - static const int vlcNumTab[8] = { - 0, 0, 1, 1, 2, 2, 2, 2 - }; - - static const unsigned int incVlc[7] = { - 0,3,6,12,24,48,32768 /* maximum vlc = 6 */ - }; - - static const int zigZagPos[16] = { - 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15 - }; - - /* - * Decode number of coefficients and number of trailing ones - */ - - /* Predict number of coefficients from neighboring blocks */ - if (blkIdxX || (mbAvailBits & 1)) { - numCoefPred = numCoefLeftPred[0]; - if (blkIdxY || (mbAvailBits & 2)) - numCoefPred = (numCoefPred + numCoefUpPred[0] + 1) >> 1; - } - else - numCoefPred = (blkIdxY || (mbAvailBits & 2)) ? numCoefUpPred[0] : 0; - - /* Select variable length code or fixed length decoding */ - if (numCoefPred < 8) { - - /* Use variable length code */ - - /* Select table number based on the prediction */ - tabNum = vlcNumTab[numCoefPred]; - - bibShowBits(bitbuf, 18, &bits); - - /* Compute number of leading zeros using look-up table */ - if (bits >= 0x00400) - numLeadingZeroBits = numLeadZerosTab[(int)(bits>>(18-7))]; - else - numLeadingZeroBits = 7 + numLeadZerosTab[(int)(bits>>(18-7-7))]; - - /* Shift excess bits away */ - bits >>= 18-4-numLeadingZeroBits; - - /* numTrailingOnes, totalCoef and length of the codeword are codec in one code */ - code = numCoefTrailTab[tabNum][numLeadingZeroBits][(int)bits&7]; - - /* Total number of bits in codeword is sum of the number of leading zero bits, */ - /* 1 one bit and the number of bits in postfix. We know the number of leading zero */ - /* bits. Postfix length is extracted from 2 highest bits of code. */ - numBits = numLeadingZeroBits + 1 + (code >> 6); - - bibSkipBits(bitbuf, numBits); - - if ((code & 0x3f) == 2) { - /* All coefficients are zero */ - numCoefUpPred[0] = numCoefLeftPred[0] = 0; - return VLD_OK; - } - else { - /* 2 lowest bits contains number of trailing ones */ - numTrailingOnes = code & 3; - /* 4 middle bits contain total number of coefficients minus 1 */ - totalCoef = ((code >> 2) & 15) + 1; - } - } - else { - - /* Use fixed length code */ - - bibGetMax8bits(bitbuf, 6, &flc); - - if (flc != 3) { - /* 2 lowest bits contains number of trailing ones */ - numTrailingOnes = (int)flc & 0x03; - /* high bits contain total number of coefficients minus 1 */ - totalCoef = ((int)flc >> 2) + 1; - if (totalCoef < numTrailingOnes) - return VLD_ERROR; - } - else { - /* All coefficients are zero */ - numCoefUpPred[0] = numCoefLeftPred[0] = 0; - return VLD_OK; - } - } - - numCoefUpPred[0] = numCoefLeftPred[0] = (int8) totalCoef; - - - /* - * Decode signs for trailing ones and store trailing ones in tmpLevel. - */ - - numBigCoef = totalCoef - numTrailingOnes; - - if (numTrailingOnes != 0) { - - /* Get signs for trailing ones. There can be maximum of 3 of them */ - bibGetMax8bits(bitbuf, numTrailingOnes, &signs); - - for (i = numTrailingOnes-1; i >= 0; i--) { - s = ((int)signs >> i) & 1; - tmpLevel[numBigCoef+i] = 1 - 2*s; - } - } - - if (numBigCoef != 0) { - - /* - * Decode first "big" level - */ - - if (totalCoef > 10 && numTrailingOnes < 3) - level = getCoefLevelVLCN(bitbuf, 1); - else - level = getCoefLevelVLC0(bitbuf); - - if (numTrailingOnes < 3) - level += (level > 0) ? 1 : -1; - - tmpLevel[numBigCoef-1] = level; - - tabNum = (Abs((int32)level) > 3) ? 2 : 1; - - /* - * Decode rest of the "big" levels - */ - - for (i = numBigCoef - 2; i >= 0; i--) { - - level = getCoefLevelVLCN(bitbuf, tabNum); - - tmpLevel[i] = level; - - /* update VLC table number */ - if (Abs((int32)level) > (int32)incVlc[tabNum]) - tabNum++; - } - - } - - /* - * Get total number of zero coefficients - */ - - if (totalCoef < 16-dcSkip) { - - bibShowMax16bits(bitbuf, 9, &bits); - - totalZerosPtr = &totalZerosTab[totalZerosTabOffset[totalCoef-1]]; - code = totalZerosPtr[(int)bits>>6]; - - if (code > 0xc0) { - offset = code - 0xc0; - code = totalZerosPtr[offset+(((int)bits>>3)&7)]; - if (code > 0xc0) { - offset = code - 0xc0; - code = totalZerosPtr[offset+((int)bits&7)]; - } - } - - totalZeros = code & 15; - - numBits = code >> 4; - bibSkipBits(bitbuf, numBits); - } - else - totalZeros = 0; - - if (dcSkip + totalCoef + totalZeros > 16) - return VLD_ERROR; - - /* All coefficients are initially zero */ - for (i = 0; i < 4; i++) { - coef[i][0] = 0; - coef[i][1] = 0; - coef[i][2] = 0; - coef[i][3] = 0; - } - - /* - * Get run of zeros before each coefficient and store coeffs. in tmpCoef - */ - - zerosLeft = totalZeros; - coefPos = dcSkip + totalCoef + totalZeros - 1; - coefNum = totalCoef - 1; - - while (zerosLeft > 0 && coefNum > 0) { - - coef[0][zigZagPos[coefPos]] = tmpLevel[coefNum]; - - // select VLC for runbefore - tabNum = zerosLeft <= 7 ? zerosLeft-1 : 6; - - bibShowMax8bits(bitbuf, 3, &bits); - - if (tabNum == 6 && bits == 0) { - bibShowMax16bits(bitbuf, 11, &bits); - if (bits == 0) - return VLD_ERROR; - numLeadingZeroBits = numLeadZerosTab[(int)bits>>1]; - run = 7 + numLeadingZeroBits; - if (run > zerosLeft) - return VLD_ERROR; - numBits = 4 + numLeadingZeroBits; - } - else { - code = runBeforeTab[tabNum][(int)bits]; - run = code & 15; - numBits = code >> 4; - } - - bibSkipBits(bitbuf, numBits); - - zerosLeft -= run; - coefPos -= run + 1; - coefNum--; - } - - do { - coef[0][zigZagPos[coefPos]] = tmpLevel[coefNum]; - coefPos--; - coefNum--; - } while (coefNum >= 0); - - return VLD_OK; -} - - -/* - * - * get2x2coefsCDC: - * - * Parameters: - * bitbuf Bitbuffer object - * coef Return pointer for 2x2 coefficients - * numCoef Return pointer number of nonzero cefficients - * - * Function: - * Decode coefficients for 2x2 DC block. - * - * Returns: - * VLD_OK for no error, VLD_ERROR for error - * - */ -static int get2x2coefsCDC(bitbuffer_s *bitbuf, int coef[4], int *numCoef) -{ - int tabNum; - u_int32 bits; - int code; - int numTrailingOnes; - int numLeadingZeroBits; - int totalCoef; - int numBits; - int tmpLevel[4]; - int level; - int numBigCoef; - u_int32 signs; - int s; - int i; - int totalZeros; - int zerosLeft; - int run; - int coefPos; - int coefNum; - - static const unsigned int incVlc[7] = { - 0,3,6,12,24,48,32768 /* maximum vlc = 6 */ - }; - - - /* - * Decode number of coefficients and number of trailing ones - */ - - bibShowMax16bits(bitbuf, 10, &bits); - - /* Compute number of leading zeros using look-up table */ - numLeadingZeroBits = numLeadZerosTab[(int)bits>>(10-7)]; - - /* Shift excess bits away */ - bits >>= 10-3-numLeadingZeroBits; - - /* Fetch numTrailingOnes and totalCoef */ - code = numCoefTrailTabChroma[numLeadingZeroBits][(int)bits&3]; - - numTrailingOnes = code & 3; - totalCoef = (code >> 2) & 7; - - numBits = (code >> 5) + 1; - - bibSkipBits(bitbuf, numBits); - - *numCoef = totalCoef; - - if (totalCoef == 0) - return VLD_OK; - - - /* - * Decode signs for trailing ones - */ - - numBigCoef = totalCoef - numTrailingOnes; - - if (numTrailingOnes != 0) { - - /* Get signs for trailing ones. There can be maximum of 3 of them */ - bibGetMax8bits(bitbuf, numTrailingOnes, &signs); - - for (i = numTrailingOnes-1; i >= 0; i--) { - s = ((int)signs >> i) & 1; - tmpLevel[numBigCoef+i] = 1 - 2*s; - } - } - - if (numBigCoef != 0) { - - /* - * Decode first level - */ - - level = getCoefLevelVLC0(bitbuf); - - if (numTrailingOnes < 3) - level += (level > 0) ? 1 : -1; - - tmpLevel[numBigCoef-1] = level; - - tabNum = (Abs((int32)level) > 3) ? 2 : 1; - - /* - * Decode rest of the levels - */ - - for (i = numBigCoef - 2; i >= 0; i--) { - - level = getCoefLevelVLCN(bitbuf, tabNum); - - tmpLevel[i] = level; - - /* update VLC table number */ - if (Abs((int32)level) > (int32)incVlc[tabNum]) - tabNum++; - } - - } - - /* - * Get total zeros - */ - - if (totalCoef < 4) { - bibShowMax8bits(bitbuf, 3, &bits); - code = totalZerosTabChroma[totalCoef-1][(int)bits]; - totalZeros = code & 15; - numBits = code >> 4; - bibSkipBits(bitbuf, numBits); - } - else - totalZeros = 0; - - /* All coefficients are initially zero */ - coef[0] = 0; - coef[1] = 0; - coef[2] = 0; - coef[3] = 0; - - /* - * Get run before each coefficient - */ - - zerosLeft = totalZeros; - coefPos = totalCoef + totalZeros - 1; - coefNum = totalCoef - 1; - - while (zerosLeft > 0 && coefNum > 0) { - - coef[coefPos] = tmpLevel[coefNum]; - - bibShowMax8bits(bitbuf, 3, &bits); - - code = runBeforeTab[zerosLeft-1][(int)bits]; - run = code & 15; - numBits = code >> 4; - - bibSkipBits(bitbuf, numBits); - - zerosLeft -= run; - coefPos -= run + 1; - coefNum--; - } - - do { - coef[coefPos] = tmpLevel[coefNum]; - coefPos--; - coefNum--; - } while (coefNum >= 0); - - - return VLD_OK; -} - - -/* - * - * vldGetLumaDCcoeffs: - * - * Parameters: - * bitbuf Bitbuffer object - * coef Return pointer for 4x4 coefficients - * numCoefUpPred Block coefficients counts of upper block - * numCoefLeftPred Block coefficient counts of blocks to the left - * mbAvailBits Macroblock availability flags - * - * Function: - * Decode coefficients for 4x4 luma DC block. - * - * Returns: - * VLD_OK for no error, negative value for error - * - */ -int vldGetLumaDCcoeffs(bitbuffer_s *bitbuf, int coef[4][4], - int8 *numCoefUpPred, int8 *numCoefLeftPred, - int mbAvailBits) -{ - int j; - int8 numCoef = *numCoefUpPred; - int8 numCoefLP = *numCoefLeftPred; - int retCode; - - retCode = get4x4coefs(bitbuf, coef, 0, 0, &numCoef, &numCoefLP, mbAvailBits, 0); - - if (retCode < 0) - return retCode; - - if (numCoef == 0) { - for (j = 0; j < 4; j++) { - coef[j][0] = 0; - coef[j][1] = 0; - coef[j][2] = 0; - coef[j][3] = 0; - } - } - - if (bibGetStatus(bitbuf) < 0) - return VLD_ERROR; - else - return VLD_OK; -} - - -/* - * - * vldGetLumaCoeffs: - * - * Parameters: - * bitbuf Bitbuffer object - * mbType Macroblock type (intra/inter) - * intraType Intra type (16x16 or 4x4 intra pred) - * cbpY Return pointer coded block pattern - * coef Return pointer for 16x4x4 coefficients - * numCoefUpPred Block coefficients counts of upper block - * numCoefLeftPred Block coefficient counts of blocks to the left - * mbAvailBits Macroblock availability flags - * - * Function: - * Decode coefficients for 16 4x4 luma blocks. - * - * Returns: - * VLD_OK for no error, negative value for error - * - */ -int vldGetLumaCoeffs(bitbuffer_s *bitbuf, int mbType, int intraType, - int *cbpY, int coef[4][4][4][4], int8 *numCoefUpPred, - int8 *numCoefLeftPred, int mbAvailBits) -{ - int bx, by; - int blkIdxX, blkIdxY; - int i, j; - int cbp, cbpTemp; - int dcSkip; - int retCode; - - dcSkip = mbType == MBK_INTRA && intraType == MBK_INTRA_TYPE2 ? 1 : 0; - - cbp = cbpTemp = *cbpY; - - for (by = 0; by < 4; by+=2) { - for (bx = 0; bx < 4; bx+=2) { - - /* Check if any of the blocks in the current 8x8 block is codec */ - if ((cbpTemp & 33) != 0) { - for (j = 0; j < 2; j++) { - for (i = 0; i < 2; i++) { - - blkIdxX = bx + i; - blkIdxY = by + j; - - retCode = get4x4coefs(bitbuf, coef[blkIdxY][blkIdxX], blkIdxX, blkIdxY, - &numCoefUpPred[blkIdxX], &numCoefLeftPred[blkIdxY], - mbAvailBits, dcSkip); - - if (retCode < 0) - return retCode; - - if (numCoefUpPred[blkIdxX] == 0) - cbp &= ~(1<<(blkIdxY*BLK_PER_MB+blkIdxX)); - } - - } - } - else { - numCoefUpPred[bx] = 0; - numCoefUpPred[bx+1] = 0; - numCoefLeftPred[by] = 0; - numCoefLeftPred[by+1] = 0; - } - - cbpTemp >>= 2; - } - cbpTemp >>= 4; - } - - *cbpY = cbp; - - if (bibGetStatus(bitbuf) < 0) - return VLD_ERROR; - else - return VLD_OK; -} - - -/* - * - * vldGetChromaDCcoeffs: - * - * Parameters: - * bitbuf Bitbuffer object - * coef Return pointer for 2x2x2 coefficients - * cbpYDC Return pointer chroma DC coded block pattern - * - * Function: - * Decode coefficients for 2 2x2 chroma DC blocks. - * - * Returns: - * VLD_OK for no error, negative value for error - * - */ -int vldGetChromaDCcoeffs(bitbuffer_s *bitbuf, int coef[2][2][2], int *cbpDC) -{ - int comp; - int numCoef; - int retCode; - - for (comp = 0; comp < 2; comp++) { - - retCode = get2x2coefsCDC(bitbuf, &coef[comp][0][0], &numCoef); - - if (retCode < 0) - return retCode; - - if (numCoef == 0) - *cbpDC &= ~(1< 65535) - return 1; - - c = codeNumber+1; - bits = 0; - - do - { - c >>= 1; - bits++; - } - while (c); - - *codeword = codeNumber + 1; - *codewordLength = (bits << 1) - 1; - - return 0; -} - -#endif //VIDEOEDITORENGINE_AVC_EDITING diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/cenrep/keys_videoeditorengine.xls Binary file videoeditorengine/cenrep/keys_videoeditorengine.xls has changed diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/conf/videoeditorengine.confml Binary file videoeditorengine/conf/videoeditorengine.confml has changed diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/conf/videoeditorengine_10204C07.crml Binary file videoeditorengine/conf/videoeditorengine_10204C07.crml has changed diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/data/VideoEditorEngine.pkg --- a/videoeditorengine/data/VideoEditorEngine.pkg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -; -; Copyright (c) 2010 Ixonos Plc. -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of the "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - Initial contribution -; -; Contributors: -; Ixonos Plc -; -; Description: -; -; Languages -&EN - -; Header -#{"Video Editor Engine"}, (0x10204bf4), 1, 0, 0, TYPE=SA - -; Localised Vendor name -%{"Nokia"} - -; Unique Vendor name -:"Nokia" - -;Engine dll's -; ----------- -""-"z:\sys\bin\aedmp3aaclib.dll" -""-"z:\sys\bin\aedengine.dll" -""-"z:\sys\bin\vedtranscoder.dll" -""-"z:\sys\bin\vedh263d.dll" -""-"z:\sys\bin\vedengine.dll" -""-"z:\sys\bin\vedavcedit.dll" - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/data/VideoEditorEngineStub.sis Binary file videoeditorengine/data/VideoEditorEngineStub.sis has changed diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/data/VideoEditorEngine_stub.SIS Binary file videoeditorengine/data/VideoEditorEngine_stub.SIS has changed diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/data/VideoEditorEngine_stub.pkg --- a/videoeditorengine/data/VideoEditorEngine_stub.pkg Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -; -; Copyright (c) 2010 Ixonos Plc. -; All rights reserved. -; This component and the accompanying materials are made available -; under the terms of the "Eclipse Public License v1.0" -; which accompanies this distribution, and is available -; at the URL "http://www.eclipse.org/legal/epl-v10.html". -; -; Initial Contributors: -; Nokia Corporation - Initial contribution -; -; Contributors: -; Ixonos Plc -; -; Description: -; -; Languages -&EN - -; Header -#{"Video Editor Engine"}, (0x10204bf4), 1, 0, 0, TYPE=SA - -; Localised Vendor name -%{"Nokia"} - -; Unique Vendor name -:"Nokia" - -;Engine dll's -; ----------- -""-"z:\sys\bin\aedmp3aaclib.dll" -""-"z:\sys\bin\aedengine.dll" -""-"z:\sys\bin\vedtranscoder.dll" -""-"z:\sys\bin\vedh263d.dll" -""-"z:\sys\bin\vedengine.dll" -""-"z:\sys\bin\vedavcedit.dll" - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/data/buildsis.bat --- a/videoeditorengine/data/buildsis.bat Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -rem -rem Copyright (c) 2010 Ixonos Plc. -rem All rights reserved. -rem This component and the accompanying materials are made available -rem under the terms of the "Eclipse Public License v1.0" -rem which accompanies this distribution, and is available -rem at the URL "http://www.eclipse.org/legal/epl-v10.html". -rem -rem Initial Contributors: -rem Nokia Corporation - Initial contribution -rem -rem Contributors: -rem Ixonos Plc -rem -rem Description: -rem - -makesis -s VideoEditorEngine.pkg VideoEditorEngineStub.sis \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/group/bld.inf --- a/videoeditorengine/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include - -PRJ_PLATFORMS -DEFAULT - -// ROM build files -PRJ_MMPFILES - -#include "../audioeditorengine/group/bld.inf" -#include "../avcedit/group/bld.inf" -#include "../h263decoder/group/bld.inf" -#include "../mp3aacManipLib/group/bld.inf" -#include "../vedtranscoder/group/bld.inf" -#include "../vedengine/group/bld.inf" - -// Exported files -PRJ_EXPORTS -../conf/videoeditorengine.confml MW_LAYER_CONFML(videoeditorengine.confml) -../conf/videoeditorengine_10204C07.crml MW_LAYER_CRML(videoeditorengine_10204C07.crml) - -//sis stubb -../data/VideoEditorEngineStub.sis /epoc32/data/z/system/install/VideoEditorEngineStub.sis - -// Export iby -../rom/VideoEditorEngine.iby CORE_MW_LAYER_IBY_EXPORT_PATH(VideoEditorEngine.iby) - -PRJ_TESTMMPFILES - -// End of File - - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/bwins/vedh263du.def --- a/videoeditorengine/h263decoder/bwins/vedh263du.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -EXPORTS - ?NewL@CVedH263Dec@@SAPAV1@VTSize@@H@Z @ 1 NONAME ; class CVedH263Dec * CVedH263Dec::NewL(class TSize, int) - ?BitstreamMode@CVedVolReader@@QBE?AW4TVedVideoBitstreamMode@@XZ @ 2 NONAME ; public: enum TVedVideoBitstreamMode __thiscall CVedVolReader::BitstreamMode(void)const - ?Height@CVedVolReader@@QBEHXZ @ 3 NONAME ; public: int __thiscall CVedVolReader::Height(void)const - ?NewL@CVedVolReader@@SAPAV1@XZ @ 4 NONAME ; public: static class CVedVolReader * __cdecl CVedVolReader::NewL(void) - ?ParseVolHeaderL@CVedVolReader@@QAEHAAVTDesC8@@@Z @ 5 NONAME ; public: int __thiscall CVedVolReader::ParseVolHeaderL(class TDesC8 &) - ?TimeIncrementResolution@CVedVolReader@@QBEHXZ @ 6 NONAME ; public: int __thiscall CVedVolReader::TimeIncrementResolution(void)const - ?Width@CVedVolReader@@QBEHXZ @ 7 NONAME ; public: int __thiscall CVedVolReader::Width(void)const - ?HeaderSize@CVedVolReader@@QBEHXZ @ 8 NONAME ; int CVedVolReader::HeaderSize(void) const - ?ProfileLevelId@CVedVolReader@@QBEHXZ @ 9 NONAME ; int CVedVolReader::ProfileLevelId(void) const - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/eabi/vedh263du.def --- a/videoeditorengine/h263decoder/eabi/vedh263du.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -EXPORTS - _ZN11CVedH263Dec4NewLE5TSizei @ 1 NONAME - _ZN13CVedVolReader15ParseVolHeaderLER6TDesC8 @ 2 NONAME - _ZN13CVedVolReader4NewLEv @ 3 NONAME - _ZNK13CVedVolReader13BitstreamModeEv @ 4 NONAME - _ZNK13CVedVolReader23TimeIncrementResolutionEv @ 5 NONAME - _ZNK13CVedVolReader5WidthEv @ 6 NONAME - _ZNK13CVedVolReader6HeightEv @ 7 NONAME - _ZTI13CVedVolReader @ 8 NONAME ; ## - _ZTV13CVedVolReader @ 9 NONAME ; ## - _ZNK13CVedVolReader10HeaderSizeEv @ 10 NONAME - _ZNK13CVedVolReader14ProfileLevelIdEv @ 11 NONAME - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/group/bld.inf --- a/videoeditorengine/h263decoder/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES -vedh263d.mmp -vedh263dLib.mmp diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/group/vedh263d.mmp --- a/videoeditorengine/h263decoder/group/vedh263d.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include - - -NOEXPORTLIBRARY - -TARGET vedh263d.dll -TARGETTYPE dll -UID 0x1000008d 0x10204bf5 - -VENDORID VID_DEFAULT -CAPABILITY CAP_GENERAL_DLL - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -USERINCLUDE ../inc -USERINCLUDE ../../../videoeditor_plat/video_editor_engine_api/inc - -LIBRARY euser.lib - -SOURCEPATH ../src - -SOURCE vedh263dimp.cpp -SOURCE VedVolReader.cpp -SOURCE MPEG4Transcoder.cpp -SOURCE h263dntc.cpp -SOURCE vdefrt.cpp -SOURCE vdeimb.cpp -SOURCE vdeims.cpp -SOURCE vdemain.cpp -SOURCE vdeti.cpp -SOURCE vdeti_mpeg.cpp -SOURCE block.cpp -SOURCE core.cpp -SOURCE decblock.cpp -SOURCE decgob.cpp -SOURCE decmb.cpp -SOURCE decmbdct.cpp -SOURCE decmbs.cpp -SOURCE decpich.cpp -SOURCE idctiforepoc.cpp -SOURCE sync.cpp -SOURCE vdcmvc.cpp -SOURCE viddemux.cpp -SOURCE biblin.cpp -SOURCE dlist.cpp -SOURCE list.cpp -SOURCE rendri.cpp -SOURCE epoclib.cpp -SOURCE decmbdct_mpeg.cpp -SOURCE decmbs_dp_mpeg.cpp -SOURCE core_mpeg.cpp -SOURCE sync_mpeg.cpp -SOURCE vdcaic.cpp -SOURCE decpich_mpeg.cpp -SOURCE decvp_mpeg.cpp -SOURCE viddemux_mpeg.cpp -SOURCE vlb.cpp -SOURCE bma.cpp - -// End of File - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/group/vedh263dLib.mmp --- a/videoeditorengine/h263decoder/group/vedh263dLib.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -TARGET vedh263d.lib -TARGETTYPE IMPLIB -UID 0x1000008d 0x10204bf5 - -// End of File - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/Common.h --- a/videoeditorengine/h263decoder/inc/Common.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for definitions and common structures for -* compressed domain transcoding. -* -*/ - - -#ifndef INCLUDE_COMMON -#define INCLUDE_COMMON - -/* - * Includes - */ -# include "epoclib.h" - -/* - * Defines - */ - -/* General */ -#define E_SUCCESS 0 -#define E_FAILURE (-1) -#define NULL 0 - -/* Data */ -#define MB_SIZE 16 -#define BLOCK_SIZE 8 -#define LOG_BLOCK_WIDTH 3 -#define BLOCK_COEFF_SIZE 64 - -/* Bit stream formating */ -#define MOTION_MARKER 0x1F001 -#define DC_MARKER 0x6B001 -#define DC_MARKER_LENGTH 19 -#define MOTION_MARKER_LENGTH 17 - -/* Codes */ -#define VISUAL_OBJECT_SEQUENCE_START_CODE 0x1B0 -#define VISUAL_OBJECT_SEQUENCE_END_CODE 0x1B1 -#define VIDEO_OBJECT_START_CODE 0x0100 -#define VIDEO_OBJECT_LAYER_START_CODE 0x120 -#define USER_DATA_START_CODE 0x1B2 -#define GROUP_OF_VOP_START_CODE 0x1B3 -#define VISUAL_OBJECT_START_CODE 0x1B5 -#define VOP_START_CODE 0x1B6 -#define PROFILE_LEVEL 0x3 -#define VISUAL_OBJECT 0x1 -#define SIMPLE_OBJECT 0x1 -#define ASPECT_RATIO_INFO 0x1 -#define CHROMA_FORMAT 0x1 -#define RECTANGULAR 0x0 -#define MARKER_BIT 1 -#define SHORT_VIDEO_START_MARKER 0x20 -#define SHORT_VIDEO_END_MARKER 0x3F -#define GOB_RESYNC_MARKER 0x01 - -/* Quantization */ -#define MAX_SAT_VAL_SVH 127 -#define MIN_SAT_VAL_SVH -127 -#define FIXED_PT_BITS 16 - -/* Variable length encoding */ -#define NOT_VALID 65535 -#define ESCAPE_CODE_VLC 0x03 -#define ESCAPE_CODE_LENGTH_VLC 7 - -/* Constant multipliers */ -#define TAN_PI_BY_8 27145 -#define TAN_PI_BY_16 13036 -#define TAN_3PI_BY_16 43789 -#define COS_PI_BY_4 46340 -#define COS_PI_BY_8 60546 -#define COS_PI_BY_16 64276 -#define COS_3PI_BY_16 54490 - -/* Shift amount and corresponding rounding constants for DCT */ -#define DCT_PRECISION 16 -#define DCT_ROUND 0 /*32768*/ /* 2^(DCT_PRECISION - 1) */ -#define DCT_KEPT_PRECISION 1 -#define DCT_PRECISION_PLUS_KEPT 19 /* DCT_PRECISION + 2 + DCT_KEPT_PRECISION */ -#define DCT_ROUND_PLUS_KEPT 0 /*262144*/ /* 2^(DCT_PRECISION_PLUS_KEPT - 1) */ - - -/* Macros */ -#define ABS(x) ((x) >= 0 ? (x) :-(x)) - -/* - * Enumerations - */ -enum { - INTRA, - INTER -}; - -enum { - ONEMV, - FOURMV -}; - -enum { - I_VOP, - P_VOP -}; - -enum { - H263, - MPEG4 -}; - -enum { - OFF, - ON -}; - -enum { - CODE_FOUND, - CODE_NOT_FOUND -}; - - -/* - * Structs and typedefs - */ -typedef unsigned char tBool; -/* Typedef for 8 bit pixel */ -typedef u_int8 tPixel; - -/* Macroblock position in yuv frame data */ -typedef struct{ - tPixel *yFrame; - u_int32 yFrameWidth; - tPixel *uFrame; - u_int32 uFrameWidth; - tPixel *vFrame; - u_int32 vFrameWidth; -} tMBPosInYUVFrame; - -/* Motion vector information */ -typedef struct{ - int16 mvx; - int16 mvy; - u_int32 SAD; -} tMotionVector; - -/* Macroblock information */ -typedef struct -{ - int16 MV[4][2]; - u_int32 SAD; - int16 QuantScale; - int16 CodedBlockPattern; - int16 dQuant; - int16 SkippedMB; -} tMBInfo; - -/* Macroblock position */ -typedef struct{ - u_int32 x; - u_int32 y; - int32 LeftBound; - int32 RightBound; - int32 TopBound; - int32 BottomBound; -} tMBPosition; - -/* Macroblock data (16x16 Y, 8x8 UV) */ -typedef struct{ - int16 Data[384]; -} tMacroblockData; - -#endif /* INCLUDE_COMMON */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/MPEG4Transcoder.h --- a/videoeditorengine/h263decoder/inc/MPEG4Transcoder.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,366 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definition for CMPEG4Transcoder, a class for MPEG4 transcoder -* working at video packet level or MB level. -* -*/ - - - -#ifndef __VMPEG4TRANSCODER_H__ -#define __VMPEG4TRANSCODER_H__ - - -/* - * Includes (header files are copied from core_mpeg.cpp) - */ -#include - -#include -#include "h263dConfig.h" -#include "vdc263.h" -#include "core.h" -#include "debug.h" -#include "decblock.h" /* for dblFree and dblLoad */ -#include "decvp_mpeg.h" -#include "h263dapi.h" /* for H263D_BC_MUX_MODE_SEPARATE_CHANNEL and H263D_ERD_ */ -#include "vdeimb.h" -#include "viddemux.h" -#include "vdxint.h" -#include "vde.h" -#include "vdemain.h" -#include "biblin.h" -#include "mpegcons.h" -#include "h263dmai.h" -#include "decpich.h" -#include "decmbdct.h" -#include "common.h" -#include "sync.h" -#include "vdcaic.h" -#include "zigzag.h" -#include "debug.h" - -#ifndef VDTASSERT -// An assertion macro wrapper to clean up the code a bit -#define VDTASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CMPEG4Transcoder"), EInternalAssertionFailure)) -#endif - - - -/* Get information about video bitstream */ -int vdtGetVideoBitstreamInfo(bibBuffer_t *inBuffer, vdeDecodeParamters_t *aInfoOut, int *aByteIndex, int *aBitIndex); - -/* Finds the error resilience bit in MPEG-4 VOL and change it, if necessary, to make it Regular Resynchronization mode */ -TBool vdtChangeVosHeaderRegResyncL(TPtrC8& aInputBuffer, TUint aBufferSize); - - -#define DefaultTimeIncResolution 3000/1001 - -// unify error codes -#define TX_OK H263D_OK -#define TX_ERR H263D_ERROR - -/* -* CopyEditVop -* -* -* Parameters: -* hInstance instance handle -* -* Function: -* This function copies the VOP header with edited time stamps of the VOP. -* -* Params -* @param hInstance is handle instance itself -* @param aNrBytesToSkip number of bytes to jump over in the beginning of output buffer (e.g. MPEG4 VOS header) -* @param inBuffer is the input buffer -* @param aDecoderInfo structure with decode params -*/ - -int CopyEditVop(vdeHInstance_t hInstance, int aNrOfBytesToSkip, bibBuffer_t * inBuffer, vdeDecodeParamters_t *aDecoderInfo); - - - - -/* -* CopyEditVideoPacket -* -* -* Parameters: -* -* Function: -* This function copies the video packet with edited time stamps, if HEC is enabled -* -* Returns: -* Success or failure -*/ -int CopyEditVideoPacket(bibBuffer_t* inBuffer, - bibBuffer_t* outBuffer, - bibBufferEdit_t* aBufEdit, - vdcInstance_t * vdcTemp, - vdeDecodeParamters_t *aDecoderInfo, - vdxVopHeader_t* vopheader, - int* aSncCode, - int* startByteIndex, - int* startBitIndex); - - - - - -/* - * Classes - */ - -/* General transcoding class - * contains all necessary transcoding information - * accessible from various points in the decoder module - */ -class CMPEG4Transcoder : public CBase -{ -public: - - static CMPEG4Transcoder* NewL (const vdeInstance_t *aVDEInstance, bibBuffer_t *aInBuffer, bibBuffer_t *aOutBuffer); - - /* Destructor */ - ~CMPEG4Transcoder(); - - /* Indicates whether we need to do MPEG4 bitstream transcoding */ - int SetTranscoding(vdeDecodeParamters_t *aDecoderInfo); - - /* Copy the VOP Header to output buffer */ - void VOPHeaderEnded(int aStartByteIndex, int aStartBitIndex, - int aQuant, int aPicType, int aFrameNum, int aVOPNotCoded); - /* One VOP ended */ - void VOPEnded(); - /* Record the position before one video packet is processed */ - void BeginOneVideoPacket(dvpVPInParam_t *aVPin); - /* Record the position before the content of the video packet is processed (called after retreiving the video packet) */ - void AfterVideoPacketHeader(dvpVPInOutParam_t *aVPInfo); - /* Called after one video packet's contents are retrieved */ - void OneVPEnded(); - /* Add one IMB instance for I macroblock */ - void OneIMBDataStartedDataPartitioned(vdxIMBListItem_t *aMBInstance, dlst_t *aMBList, int aCurrMBNumInVP, int aMBNum); - /* Add one PMB instance for P macroblock */ - void OnePMBDataStartedDataPartitioned(vdxPMBListItem_t *aMBInstance, dlst_t *aMBList, int aCurrMBNumInVP, int aMBNum); - /* Records the position of vop_time_increment_resolution bit */ - void MPEG4TimerResolution(int aStartByteIndex, int aStartBitIndex); - /* Creates a new H263 macroblock */ - int ConstructH263MBData(dmdPParam_t *aParam, int aNewMCBPCLen, int aNewMCBPC); - /* Transcode one H263 MB to one MPEG4 MB */ - void H263ToMPEG4MBData(int aNewMCBPCLen, int aNewMCBPC); - /* fills the reconstructed DCAC values for INTRA block */ - void AddOneBlockDCACrecon(int aIndex, int *aDCAC); - /* Record MB parameters before the content of the MB is processed (called after retreiving the MB layer) */ - void AfterMBLayer(int aUpdatedQp); - /* returns first frame QP */ - inline int GetRefQP() { return iRefQuant; } - - - /* returns 1 if we need the decoded frame */ - int NeedDecodedYUVFrame(); - /* Record the position before one MB is processed */ - void BeginOneMB(int aMBNum); - /* Record the position before one block in MB is processed */ - void BeginOneBlock(int aIndex); - /* Start one IMB (called after the MB header is read) */ - void OneIMBDataStarted(vdxIMBListItem_t *aMBInstance); - /* Start one PMB (called after the MB header is read) */ - void OnePMBDataStarted(vdxPMBListItem_t *aMBInstance); - /* Input one block data to current MB */ - void AddOneBlockDataToMB(int aBlockIndex, int *aBlockData); - /* Indicates if escape vlc coding is used in one block */ - void H263EscapeCoding(int aIndex, int fEscapeCodeUsed); - /* Records the position of resnc_marker_disable bit */ - void ErrorResilienceInfo(vdxVolHeader_t *header, int aByte, int aBit); - /* Constructs the VOS header */ - void ConstructVOSHeader(int aMPEG4, vdeDecodeParamters_t *aDecoderInfo); - /* Called after one H263 GOB or slice header is parsed */ - void H263GOBSliceHeaderEnded(vdxGOBHeader_t *aH263GOBHeader, vdxSliceHeader_t *aH263SliceHeader); - /* Called after one H263 picture header is parsed */ - int H263PictureHeaderEnded(dphOutParam_t *aH263PicHeader, dphInOutParam_t *aInfo); - /* Called before one H.63 GOB or slice header is parsed */ - void H263GOBSliceHeaderBegin(); - /* Called after one H263 GOB or Slice ends */ - void H263OneGOBSliceEnded(int nextExpectedMBNum); - /* Called after one GOB (slice) that has GOB header (except the first GOB) ends */ - void H263OneGOBSliceWithHeaderEnded(); - /* Transcodes one macroblock (may include dequantization, requantization, and re-encoding) */ - int TranscodingOneMB(dmdPParam_t *aParam); - -private: - /* Constructors */ - CMPEG4Transcoder(const vdeInstance_t *aVDEInstance, bibBuffer_t *aInBuffer, bibBuffer_t *aOutBuffer); - - /*Constructl to allocate necessary resources*/ - void ConstructL(); - - // main functions to perform transcoding for one macroblock - /* Transcode MB - rearranges data partitioned bitstream data to regular */ - void ConstructRegularMPEG4MBData(int aNewMCBPCLen, int aNewMCBPC); - /* Resets the DCs for U/V blocks in intra MB */ - void ResetMPEG4IntraDcUV(); - /* Recontruct IMB partitions for color effect when we are not doing format transcoding */ - void ReconstructIMBPartitions(); - /* Recontruct PMB partitions for color effect when we are not doing format transcoding */ - void ReconstructPMBPartitions(); - /* Evaluate Chrominance DC Scaler from QP for MPEG4 */ - int GetMpeg4DcScalerUV(int aQP); - /* Evaluate IntraDC Coefficients for U,V blocks for MPEG4 */ - void GetMPEG4IntraDcCoeffUV(TInt aValue, TInt& aSize, TInt& aSizeCode, - TInt& aSizeCodeLength, TInt& aValueCode, TInt& aValueCodeLength); - - - -private: - - /* Output data buffer */ - bibBuffer_t *iOutBuffer; - /* Operation modes */ - TVedVideoBitstreamMode iBitStreamMode; - - /* - When we do mode translation for MPEG4, the target mode may be MPEG4Resyn or H263 - but for H263, when we do mode translation, the target mode is always MPG4Resyn - */ - -/* Member variables */ - - /* Indicates the direction for MPEG4 mode translation */ - int iTargetFormat; - - /* Input data buffer */ - bibBuffer_t *iInBuffer; - - /* Indicates if we need to do transcoding for current MB */ - int iDoTranscoding; - - /* Indicates if we need to do MPEG4 bitstream conversion */ - int iDoModeTranscoding; - - /* Special Effect (Black and White) paramter */ - int iColorEffect; - - /* color tone U,V value parameter */ - TInt iColorToneU; - TInt iColorToneV; - - /* Information we know about this frame and MB */ - - /* current VOP coding type */ - int iVopCodingType; - - /* number of MBs in one VOP */ - int iNumMBsInOneVOP; - - /* indicates if stuffing bits have been used */ - int8 iStuffingBitsUsed; - - - /* Only valid with resync_marker - Information includes: - MB number, quant_scale, StartByteIndex, StartBitIndex ... - */ - /* Contains CurMBNum, quant, frame number, etc */ - dvpVPInOutParam_t *iCurVPInOut; - /* Contains picture type, etc */ - dvpVPInParam_t *iCurVPIn; - /* VOL header */ - vdxVolHeader_t iVOLHeader; - - /* position pointers at different levels */ - int iVPStartByteIndex, iVPStartBitIndex; - int iVPHeaderEndByteIndex, iVPHeaderEndBitIndex; - int iTimeResolutionByteIndex, iTimeResolutionBitIndex; - /* Array to store the DCT data */ - int iDCTBlockData[BLOCK_COEFF_SIZE * 6]; /* YUV components */ - int **iH263DCData; /* Intra DC matrix for H263 -> MPEG4 transcoding */ - - dlst_t *iMBList; - tMBInfo* h263mbi; /* one frame MB information for MPEG4 to H263 transcoding */ - int iPreQuant; /* last QUANT, used in MPEG4 to H263 transcoding */ - - /* used for color toning for MPEG4 */ - u_char *iMBType; /* array indicating MB type for all MBs in VOP */ - int iRefQuant; /* reference QP derived from 1st VOP of MPEG4 */ - int iCurQuant; /* current QP */ - int iDcScaler; /* DC Scaler for iRefQuant */ - - - int *iH263MBVPNum; /* matrix recording the video packet number for each MB */ - - int iShortHeaderEndByteIndex , iShortHeaderEndBitIndex; - - /* iMBStartByteIndex, iMBStartBitIndex also record the postion - right after the VP header when video packet is used - */ - int iMBStartByteIndex, iMBStartBitIndex; - - /* Positions of each block data including INTRA DC if it exists - except for data partioning, in which it only indicates the ACs or DCTs - */ - int iBlockStartByteIndex[6], iBlockStartBitIndex[6]; - int iBlockEndByteIndex[6], iBlockEndBitIndex[6]; - int iErrorResilienceStartByteIndex, iErrorResilienceStartBitIndex; - - /*Added for Time Res 30000 */ - int iOutputMpeg4TimeIncResolution; - - /* Processing data member */ - const vdeInstance_t *iVDEInstance; - - /* Instance for current processing MB */ - vdxIMBListItem_t *iCurIMBinstance; - vdxPMBListItem_t *iCurPMBinstance; - - /* Temporary edit buffer */ - bibBufferEdit_t bufEdit; - - /* Current and last processed MB */ - int iCurMBNum; - - /* Last output MB number */ - int iLastMBNum; - - /* current MB number in current video packet */ - int iCurMBNumInVP; - - /* MB coding type: INTRA or INTER */ - int iMBCodingType; - - /* Specific members only for H.263! */ - int iGOBSliceStartByteIndex; - int iGOBSliceStartBitIndex; - int iGOBSliceHeaderEndByteIndex; - int iGOBSliceHeaderEndBitIndex; - - /* Index of video packet in MPEG4 */ - int iVideoPacketNumInMPEG4; - /* Number of MBs in picture width */ - int iMBsinWidth; - /* Number of MBs in one GOB */ - int iNumMBsInGOB; - /* Indicates if its the first frame */ - unsigned char fFirstFrameInH263; - /* Indicates if escape vlc coding is used */ - int iEscapeCodeUsed[6]; - -}; - - - -#endif /* __VMPEG4TRANSCODER_H__ */ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/VedVolReader.h --- a/videoeditorengine/h263decoder/inc/VedVolReader.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,221 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for VOL header parser. -* -*/ - - - -#ifndef __VEDVOLREADER_H__ -#define __VEDVOLREADER_H__ - - -// INCLUDES -#include -#include -#include - - - - - -// DATA TYPES - -/** - * Structure for the Video Object Layer header data - */ -struct TVolHeader - { - TInt iProfileLevelId; // Indicates the Level Id (0,1,2,3,4,8 or 9) of the Simple - // Profile the Video Object conforms to - TInt iVoPriority; // Priority assigned to the Video Object - // a value between 1(lowest)-7(highest). - // If not in the bitstream, set to zero - - TInt iVoId; // id of the Video Object - TInt iVolId; // id of the Video Object Layer - TInt iRandomAccessibleVol;// set to 1 if all the VOPs in the stream are I-VOP. - TInt iPixelAspectRatio; // see MPEG-4 visual spec. pp. 71 - - TInt iTimeIncrementResolution; - // Resolution to interpret the time_increment - // fields in the VOP headers - - TInt iLumWidth; // Frame width of the Y component in pixels - TInt iLumHeight; // Frame height of the Y component in pixels - - TUint8 iErrorResDisable; // Flag ON if no resynchronization markers are - // used inside frames. - // When OFF it doesn't mean they ARE used. - TUint8 iDataPartitioned; // Flag indicating if data partitioning inside - // a VP is used or not. - TUint8 iReversibleVlc; // flag indicating the usage of reversible - // VLC codes - - // the following parameters concern the input video signal, - // see MPEG-4 visual spec. pp. 66-70, and "Note" in viddemux_mpeg.c - // Not used in the current implementatnion. - TInt iVideoFormat; - TInt iVideoRange; - TInt iColourPrimaries; - TInt iTransferCharacteristics; - TInt iMatrixCoefficients; - - // the following parameters are used in the Video Buffering Verifier - // (Annex D) to monitor the input bit buffer, complexity, memory buffer - // used in the decoding process. The conformance of a stream can be checked - // using these parameters. - // Not used in the current implementatnion. - TUint32 iBitRate; - TUint32 iVbvBufferSize; - TUint32 iVbvOccupancy; - - HBufC8* iUserData; // User Data if available - }; - - - -// CLASS DECLARATION - -/** - * A class for parsing the Video Object Layer header - */ -class CVedVolReader : public CBase - { -public: - - /** - * Two-phased constructor. - */ - IMPORT_C static CVedVolReader* NewL(); - - /** - * Destructor. - */ - virtual ~CVedVolReader(); - - /** - * Parses given Video Object Layer header - * @param aData Buffer from where to parse the header - * @return error code - */ - IMPORT_C TInt ParseVolHeaderL(TDesC8& aData); - - /** - * Returns the time increment resolution that was read from the VOL header - * @return time increment resolution - */ - IMPORT_C TInt TimeIncrementResolution() const; - - /** - * Returns the width of the video that was read from the VOL header - * @return width - */ - IMPORT_C TInt Width() const; - - /** - * Returns the height of the video that was read from the VOL header - * @return height - */ - IMPORT_C TInt Height() const; - - /** - * Returns the Level Id of the Simple Profile the Video Object conforms to - * @return profile level Id - */ - IMPORT_C TInt ProfileLevelId() const; - - /** - * Returns the bitstream mode of the video - * @return bitstream mode - */ - IMPORT_C TVedVideoBitstreamMode BitstreamMode() const; - - /** - * Returns the size of the VOL header - * @return size of the header - */ - IMPORT_C TInt HeaderSize() const; - -private: - - /** - * Structure for internal buffer of the header sequence - */ - struct TSeqHeaderBuffer - { - TDesC8& iData; // The actual data of the buffer - TInt iGetIndex; // Index of getting from the buffer - TInt iBitInOctet; // Bit index in the buffer - - TSeqHeaderBuffer(TDesC8& aData, TInt aGetIndex, TInt aBitInOctet) : - iData(aData), iGetIndex(aGetIndex), iBitInOctet(aBitInOctet) {} - }; - - /** - * C++ default constructor. - */ - CVedVolReader(); - - /** - * By default Symbian OS constructor is private. - */ - void ConstructL(); - - /** - * Reads requested bits from given buffer - * @param aBuffer Buffer from where to read the bits - * @param aNumBits Amount of bits to read - * @param aFlush Discard the bits that were read - * @return The bits that were read - */ - TUint32 ReadSeqHeaderBits(TSeqHeaderBuffer& aBuffer, TInt aNumBits, TBool aFlush); - - /** - * Reads user data from given buffer - * @param aBuffer Buffer from where to read the user data - */ - void ReadUserDataL(TSeqHeaderBuffer& aBuffer); - - /** - * Checks what is the bit stream mode the video - * @param aErd Flag error resilience disable used - * @param aDp Flag data partitioned used - * @param aRvlc Flag reversible vlc used - * @return The bit stream mode - */ - TVedVideoBitstreamMode CheckBitstreamMode(TUint8 aErd, TUint8 aDp, TUint8 aRvlc); - -private: - - // Member variables - - static const TInt KMaxUserDataLength; // The maximum allocated memory for - // user data (UD). Only this much of the UD - // from the bitstream is stored - - static const TUint8 KMsbMask[8]; // Mask for extracting the needed bits - static const TUint8 KLsbMask[9]; - - TVolHeader iHeader; // For storing the header data - - TVedVideoBitstreamMode iBitstreamMode; - TInt iHeaderSize; - - }; - -#endif // __VEDVOLREADER_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/biblin.h --- a/videoeditorengine/h263decoder/inc/biblin.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,230 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for Bit Buffer module. -* -*/ - - -#ifndef _BIBLIN_H_ -#define _BIBLIN_H_ - -#include "epoclib.h" - -/* - * Defines - */ - -/* Error codes */ -/* Obsolete error codes are not used anymore and are defined only to maintain - backwards compatibility with older versions of the file. */ -#define ERR_BIB_STRUCT_ALLOC 1000 /* If a structure allocation failed */ -#define ERR_BIB_BUFFER_ALLOC 1001 /* Obsolete */ -#define ERR_BIB_FILE_READ 1002 /* Obsolete */ -#define ERR_BIB_NOT_ENOUGH_DATA 1003 /* If the number of bits requested from - the buffer is greater than the number - of bits available in the buffer */ -#define ERR_BIB_ALREADY_OPENED 1004 /* Obsolete */ -#define ERR_BIB_FILE_OPEN 1005 /* Obsolete */ -#define ERR_BIB_ALREADY_CLOSED 1006 /* Obsolete */ -#define ERR_BIB_FILE_CLOSE 1007 /* Obsolete */ -#define ERR_BIB_NUM_BITS 1008 /* Obsolete */ -#define ERR_BIB_FILE_NOT_OPEN 1009 /* Obsolete */ -#define ERR_BIB_ILLEGAL_SIZE 1010 /* Obsolete */ -#define ERR_BIB_CANNOT_REWIND 1011 /* If the number of bits requested to be - rewinded is greater than the number - of bits available in the buffer */ -#define ERR_BIB_BUFLIST 1012 /* If the internal buffer list has - been corrupted */ -#define ERR_BIB_TOO_SMALL_BUFFER 1013 /* Obsolete */ -#define ERR_BIB_FEC_RELOCK 1050 /* Obsolete */ -#define ERR_BIB_PSC_FOUND 1060 /* Obsolete */ - - -/* - * Structs and typedefs - */ - - - -/* {{-output"bibBuffer_t_info.txt" -ignore"*" -noCR}} - * The bibBuffer_t data type is a structure containing all the necessary data - * for a bit buffer instance (except for the actual data buffer). This - * structure is passed to all of the bit buffer functions. - * {{-output"bibBuffer_t_info.txt"}} - */ - -/* {{-output"bibBuffer_t.txt"}} */ - - - -enum CopyMode { - CopyNone = 0, - CopyWhole = 1, - CopyWithEdit = 2, - EditOnly = 3 -}; - -typedef struct bibEditParams_s { - - int StartByteIndex; // start byte position where data is to be written - int StartBitIndex; // start bit position where data is to be written - int curNumBits; // number of bits that need to be replaced - int newNumBits; // number of bits to be written - int newValue; // the value to be written - -} bibEditParams_t; - -typedef struct bibBufferEdit_s { - - CopyMode copyMode; - int numChanges; - bibEditParams_t *editParams; - -} bibBufferEdit_t; - - - - -typedef struct bibBuffer_s { - u_char *baseAddr; /* the start address of the buffer */ - - unsigned size; /* the size of the buffer in bytes */ - - unsigned getIndex; /* an index to the buffer where data was last got */ - - int bitIndex; /* an index to the byte pointed by getIndex + 1 */ - - u_int32 bitsLeft; /* the number of bits currently in the buffer */ - - u_int32 numBytesRead; /* the total number of bytes read */ - - int error; /* stores possible error code */ - -} bibBuffer_t; -/* {{-output"bibBuffer_t.txt"}} */ - -#ifdef DEBUG_OUTPUT -extern bibBuffer_t * buffer_global; -#endif - -/* typedefs for bibFlushBits, bibGetBits, and bibShowBits function types */ -typedef void (*bibFlushBits_t) (int, bibBuffer_t *, int *, int *, int16 *); -typedef u_int32 (*bibGetBits_t) (int, bibBuffer_t *, int *, int *, int16 *); -typedef u_int32 (*bibShowBits_t) (int, bibBuffer_t *, int *, int *, int16 *); - -/* - * External macros - */ - -/* - * bibNumberOfBitsLeft - * - * Parameters: - * bibBuffer_t *buffer input bit buffer instance - * - * Function: - * This macro returns the number of bits which are left to be read - * from the current position. - * - * Returns: - * See above. - */ - - #define bibNumberOfBitsLeft(buffer) \ - ((buffer)->bitsLeft) - -/* - * External function prototypes - */ - -bibBuffer_t *bibCreate(void *srcBuffer, unsigned srcBufferLength, - int16 *errorCode); - -void bibDelete(bibBuffer_t *buffer, int16 *errorCode); - -u_int32 bibNumberOfFlushedBits(bibBuffer_t *buffer); - -u_int32 bibNumberOfFlushedBytes(bibBuffer_t *buffer); - -u_int32 bibNumberOfRewBits(bibBuffer_t *buffer); - -void bibRewindBits(u_int32 numberOfBits, bibBuffer_t *buffer, int16 *errorCode); - - -/* - * Prototypes for bibFlushBits/bibGetBits/bibShowBits - */ - -void bibFlushBits(int numberOfBits, bibBuffer_t *buffer); -u_int32 bibGetBits(int numberOfBits, bibBuffer_t *buffer); -u_int32 bibShowBits(int numberOfBits, bibBuffer_t *buffer); - -inline void bibFlushBits(int numberOfBits, bibBuffer_t *buffer, int *numberOfBitsGot, int * /*bitErrorIndication*/, int16 * /*errorCode*/) -{ - *numberOfBitsGot = numberOfBits; - bibFlushBits(numberOfBits, buffer); -} - -inline u_int32 bibGetBits(int numberOfBits, bibBuffer_t *buffer, int *numberOfBitsGot, int * /*bitErrorIndication*/, int16 * /*errorCode*/) -{ - *numberOfBitsGot = numberOfBits; - return bibGetBits(numberOfBits, buffer); -} - -inline u_int32 bibShowBits(int numberOfBits, bibBuffer_t *buffer, int *numberOfBitsGot, int * /*bitErrorIndication*/, int16 * /*errorCode*/) -{ - *numberOfBitsGot = numberOfBits; - return bibShowBits(numberOfBits, buffer); -} - -#define bibFlushBitsFromBuffer bibFlushBits -#define bibGetBitsFromBuffer bibGetBits -#define bibShowBitsFromBuffer bibShowBits - - -bibBufferEdit_t *bibBufferEditCreate(int16 *errorCode); -void bibBufEditDelete(bibBufferEdit_t *bufEdit, int16 *errorCode); - -// copy from input buffer to output buffer in various copy modes (with or without editing) -void CopyStream(bibBuffer_t *SrcBuffer,bibBuffer_t *DestBuffer,bibBufferEdit_t *bufEdit, - int ByteStart,int BitStart); -// copy from input buffer to output buffer (without editing) -void CopyBuffer(bibBuffer_t *SrcBuffer,bibBuffer_t *DestBuffer, - int ByteStart,int BitStart, int ByteEnd, int BitEnd); -// copy from BufferEdit to output buffer (no copying; rather, inserting code into output buffer) -void CopyBufferEdit(bibBuffer_t *SrcBuffer, bibBuffer_t *DestBuffer, - bibEditParams_t *edParam, int updateSrcBufferStats=1); -// insert correct IntraDC values for H.263 chrominance blocks in output buffer -void ResetH263IntraDcUV(bibBuffer_t *DestBuffer, int uValue, int vValue); -// insert correct IntraDC values for MPEG-4 chrominance blocks in output buffer -void ResetMPEG4IntraDcUV(bibBuffer_t *DestBuffer, int IntraDC_size); - - /* - SrcValue the source value from which bits are to be extacted - MaxNumBits the length in bits of the source value - StartBit the index of the starting bit form where data is to be retrieved - getBits the number of bits to be retrieved - */ -u_int32 bibGetBitsFromWord(u_int32 SrcValue, u_int32 getBits, u_int32 *StartBit, - u_int32 MaxNumBits); -void bibForwardBits(u_int32 numberOfBits, bibBuffer_t *buffer); -void bibStuffBits(bibBuffer_t *buffer); -void bibStuffBitsMPEG4(bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, bibBufferEdit_t *bufEdit, - int *StartByteIndex, int *StartBitIndex, int updateSrcBufferStats); - - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/blkfunc.h --- a/videoeditorengine/h263decoder/inc/blkfunc.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,143 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for block handling functions. -* -*/ - - - -#ifndef __BLKFUNC_H -#define __BLKFUNC_H - -#include "epoclib.h" - -// General-purpose clip tables for signed and unsigned chars. -// Both of these tables range from -2048 to +2047. - -extern const u_char unsignedCharClip[]; -extern const char signedCharClip[]; // MH - -/* - * - * blcAddBlock - * - * Parameters: - * block block array - * frame_p pointer to present frame in the place, - * where the block is added - * xSize X size of the frame. - * mbPlace flag that indicates the place for the current - * macroblock inside the macroblock row: - * -1 beginning of row - * 0 middle of row - * 1 end of row - * fourMVs 1 if Advanced Prediction Mode is used, otherwise 0 - * prevDiffBlock if fourMVs == 1 and mbPlace <= 0 the difference - * block is stored to prevDiffBlock for later use - * - * Function: - * This function sums the given block into block being currently decoded in - * present frame. Parameters are the table consisting a block, a pointer to - * the frame at the correct place and the width of the frame. - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -void __cdecl blcAddBlockAsm(int *block, u_char *frame_p, int xSize, - int mbPlace, u_char fourMVs, int *prevDiffBlock); - -/* - * - * blcMixBlocks - * - * Parameters: - * dest Destination pointer - * src Source pointer - * yn Y size of the block - * xn X size of the block (0-16) - * ydiff X line length of the destination block - * sydiff X line length of the source block - * - * Function: - * This function replaces all the pixels in the destination block with - * an average calculated from the corresponding source and destination - * block pixels. - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -void __cdecl blcMixBlocks( u_char *dest, u_char *src, int yn, int xn, - int ydiff, int sydiff ); - -/* - * - * blcMixOverlapped - * - * Parameters: - * blkBuf Source blocks: - * 64b whole, 32b left, 32b right, 32b up, 32b down - * dest Destination pointer - * ddelta Delta for destination lines - * - * Function: - * Calculates weighted averages of several macroblock pieces - see - * function blcOverlappedMC in block.c for more detailed description. - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -void __cdecl blcMixOverlapped( u_char *blkBuf, u_char *dest, int ddelta ); - -/* - * - * blcInvQuant - * - * Parameters: - * block Block pointer - * quant Quantization value - * count Number of values to process - * - * Function: - * Does inverse quantization for a block for idct. - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -void __cdecl blcInvQuant( int *block, int quant, int count ); - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/block.h --- a/videoeditorengine/h263decoder/inc/block.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Block handling. -* -*/ - - -#ifndef _BLOCK_H_ -#define _BLOCK_H_ - -#include "epoclib.h" -#include "vdcmvc.h" - -/* - * Definitions - */ - - - -/* - * Structs and typedefs - */ - -/* {{-output"blcDiffMB_t_info.txt" -ignore"*" -noCR}} - blcDiffMB_t is used as a temporary storage for the previous difference - (INTER) macroblock. This storage is needed for the Advanced Prediction - mode because the previous prediction macroblock cannot be constructed - until the motion vectors of the current macroblock have been fetched - from the bitstream. (The previous difference macroblock cannot be stored - directly to the current frame either, because the difference block data - is signed and the frame data is unsigned.) - {{-output"blcDiffMB_t_info.txt"}} */ - -/* {{-output"blcDiffMB_t.txt"}} */ -typedef struct { - int block[4][64]; /* luminance blocks for P frame */ - int cbpy; /* coded block pattern for luminance */ -} blcDiffMB_t; -/* {{-output"blcDiffMB_t.txt"}} */ - - -/* {{-output"BLC_COPY_PREDICTION_MB_PARAM_info.txt" -ignore"*" -noCR}} - This C preprocessor definition is used to store the parameters needed - for the blcCopyPredictionMB function (and therefore also for - the blcCopyPredictionMBParam_t data type). These parameters may also be used - in other modules than the Block Tools and in other data structures than - blcCopyPredictionMBParam_t. When these parameters are introduced with this - preprocessor definition in the other data structures, one does not need - the "extra" reference step which would be needed if the parameters - would have been introduced directly and only in - the blcCopyPredictionMBParam_t structure. For example, if otherStructA - has been typedefd as {BLC_COPY_PREDICTION_MB_PARAM} and otherStructB as - {blcCopyPredictionMBParam_t predPar;}, to access e.g. refY one has to use - either otherStructA.refY or otherStructB.predPar.refY. - {{-output"BLC_COPY_PREDICTION_MB_PARAM_info.txt"}} */ - -/* {{-output"BLC_COPY_PREDICTION_MB_PARAM.txt"}} */ -#define BLC_COPY_PREDICTION_MB_PARAM \ - u_char *refY; /* Reference frame */ \ - u_char *refU; \ - u_char *refV; \ -\ - u_char *currYMBInFrame; /* Pointer to current macroblock in frame */ \ - u_char *currUBlkInFrame; \ - u_char *currVBlkInFrame; \ -\ - int uvBlkXCoord; /* X coord of MB in chrominance pixels */ \ - int uvBlkYCoord; /* Y coord of MB (top-left corner) in */ \ - /* chrominance pixels */ \ -\ - int uvWidth; /* Width of the picture in chro pixels */ \ - int uvHeight; /* Height of the picture in chro pixels */ \ -\ - mvcData_t *mvcData; /* Motion Vector Count module instance data */ \ -\ - int *mvx; /* Array of 4 x-components of motion vectors */ \ - int *mvy; /* Array of 4 y-components of motion vectors */ \ - /* If not in 4-MVs-mode, only the first entry */ \ - /* of the both arrays is used. */ \ -\ - int mbPlace; /* Indicates the place of the current */ \ - /* macroblock inside the macroblock row: */ \ - /* -1 beginning of row */ \ - /* 0 middle of row */ \ - /* 1 end of row */ \ - /* If Annex K is in use */ \ - /* -1 beginning of row or slice */ \ - /* 0 middle of slice */ \ - /* 1 end of row(if not the beginning of */ \ - /* the slice) or slice */ \ - /* 2 end of row and the beginning of slice */ \ -\ - int fAdvancedPrediction; /* Non-zero if Advanced Prediction is used */ \ -\ - int fMVsOverPictureBoundaries; \ - /* Non-zero if MVs are allowed to point */ \ - /* outside picture boundaries */ \ -\ - blcDiffMB_t *diffMB; /* Prediction error for the previous MB */ \ -\ - int rcontrol; /* RCONTROL (section 6.1.2 of H.263) */ \ -\ - int fourMVs; /* Flag to indicate if there is four motion - vectors per macroblock */ -/* {{-output"BLC_COPY_PREDICTION_MB_PARAM.txt"}} */ - - -/* {{-output"blcCopyPredictionMBParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass parameters into the blcCopyPredictionMB - function. - {{-output"blcCopyPredictionMBParam_t_info.txt"}} */ - -/* {{-output"blcCopyPredictionMBParam_t.txt"}} */ -typedef struct { - BLC_COPY_PREDICTION_MB_PARAM -} blcCopyPredictionMBParam_t; -/* {{-output"blcCopyPredictionMBParam_t.txt"}} */ - - - - -/* - * Function prototypes - */ - -void blcAddBlock(int *block, - u_char HUGE *frame_p, - int xSize, - int mbPlace, u_char fourMVs, int *prevDiffBlock); - -void blcBlockToFrame(int *block, - u_char HUGE *frame_p, - int xSize); - -int blcCopyPredictionMB(blcCopyPredictionMBParam_t *param); - - - -#endif - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/core.h --- a/videoeditorengine/h263decoder/inc/core.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,265 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Internal header for the core module of the Video Decoder Core. -* -*/ - - -#ifndef _CORE_H_ -#define _CORE_H_ - -#include "vdcmvc.h" -#include "vdcaic.h" -#include "vdeims.h" -#include "viddemux.h" - -#include "biblin.h" - - -/* - * Defines - */ - -#define vdcMalloc malloc -#define vdcCalloc calloc -#define vdcRealloc realloc -#define vdcDealloc free - -#ifndef vdcAssert -#define vdcAssert(exp) assert(exp); -#endif - - -/* - * Structs and typedefs - */ - -/* {{-output"vdcPictureParam_t_info.txt" -ignore"*" -noCR}} - vdcPictureParam_t is used to store the attributes for one picture. - {{-output"vdcPictureParam_t_info.txt"}} */ - -/* {{-output"vdcPictureParam_t.txt"}} */ -typedef struct { - int tr; /* the TR field or a combination of ETR and TR - if ETR is used */ - - int trd; /* Difference between present and previous tr */ - - int prevTR; /* TR of the previous frame */ - - /* The following three fields correspond to the flags in the PTYPE field */ - int fSplitScreenIndicator; - int fDocumentCameraIndicator; - int fFullPictureFreezeRelease; - - int pictureType; /* Picture type is one of the following: - VDX_PIC_TYPE_I INTRA - VDX_PIC_TYPE_P INTER - VDX_PIC_TYPE_PB PB (Annex G) - VDX_PIC_TYPE_IPB Improved PB - VDX_PIC_TYPE_B B (Annex O) - VDX_PIC_TYPE_EI EI (Annex O) - VDX_PIC_TYPE_EP EP (Annex O) */ - - int fPLUSPTYPE; /* 0 = no PLUSPTYPE, 1 = PLUSPTYPE exists */ - - int cpm; /* The CPM field */ - int psbi; /* The PSBI field, valid only if cpm == 1 */ - - /* The following two fields are relevant if picture type indicates - a PB frame */ - int trb; /* The TRB field */ - int dbquant; /* The DBQUANT field */ - - int lumWidth; /* the width and height of the luminance */ - int lumHeight; /* image to display (divisible with 4) */ - - int lumMemWidth; /* the width and height of the luminance */ - int lumMemHeight; /* image in memory (divisible with 16) */ - - /* The following six fields are relevant only if fSS is off */ - int numGOBs; /* Number of GOBs in picture */ - int fLastGOBSizeDifferent; /* Flag indicating different size of last GOB */ - int numMBsInGOB; /* Number of macroblocks in other GOBs than - the last one */ - int numMBsInLastGOB; /* Number of macroblocks in last GOB */ - int numMBLinesInGOB; /* Number of macroblock lines in one GOB */ - int numMBsInMBLine; /* Number of macroblocks in macroblock line */ - - /* The following six fields are relevant only if fSS is on */ - int mbaFieldWidth; /* MBA Field width */ - int mbaMaxValue; /* MBA maximum value. See Table K.2/H.263 */ - int swiFieldWidth; /* SWI Field width */ - int swiMaxValue; /* SWI maximum value. See Table K.3/H.263 */ - - int fUMV; /* Unrestricted Motion Vector Mode */ - int fSAC; /* Syntax-based Arithmetic Coding Mode */ - int fAP; /* Advanced Prediction Mode */ - - int fRPR; /* Reference Picture Resampling Mode */ - int fRRU; /* Reduced-Resolution Update Mode */ - int rtype; /* Rounding type (RTYPE) */ - - int elnum; /* Enhancement layer number */ - - int fCustomSourceFormat; /* Flag indicating if custom source format - is used */ - - int fAIC; /* Advanced INTRA Coding Mode */ - int fDF; /* Deblocking Filter Mode */ - int fSS; /* Slice Structured Mode */ - int fRPS; /* Reference Picture Selection Mode, - Note: always valid and therefore should be - the same as instance->fRPS after decoding - the first picture header. */ - int fISD; /* Independent Segment Decoding Mode */ - int fAIV; /* Alternate INTER VLC Mode */ - int fMQ; /* Modified Quantization Mode */ - - /* Picture Clock Frequence (PCF) fields */ - int fCustomPCF; /* 0 = CIF PCF, 1 = custom PCF */ - int pcfRate; /* PCF = pcfRate / pcfScale Hz */ - int pcfScale; - - /* The following field is relevant only if fUMV is on with fPLUSPTYPE */ - int fUMVLimited; /* 0 = motion vector range is not limited, - 1 = motion vector range is limited - according to Annex D */ - - int fMVsOverPictureBoundaries; - /* 0 = prediction over picture boundaries is - disallowed, - 1 = prediction over picture boundaries is - allowed */ - - /* The MPEG-4 Video Object Layer (VOL) parameters */ -/*** MPEG-4 REVISION ***/ - - int vo_id; /* VO Id */ - int vol_id; /* VO Id */ - - u_char error_res_disable; /* VOL disable error resilence mode */ - u_char reversible_vlc; /* VOL reversible VLCs */ - u_char data_partitioned; /* VOL data partitioning */ - - int time_increment_resolution; /* resolution of the time increment - in the VOP header */ - - /* The in H.263 not existing MPEG-4 Video Object Plane (VOP) parameters */ - - int mod_time_base; /* VOP modulo time base (absolute) */ - int time_base_incr; /* time base increment of the current VOP - (used in HEC of Video Packet Header, - when time_base_incr of the VOP is - retransmitted */ - int time_inc; /* VOP time increment - (relative to last mod_time_base) */ - int intra_dc_vlc_thr; - int fcode_forward; - u_char fixed_vop_rate; /* fixed vop rate indication, added for transcoding */ -/*** End MPEG-4 REVISION ***/ - -} vdcPictureParam_t; -/* {{-output"vdcPictureParam_t.txt"}} */ - - -/* {{-output"vdcInstance_t_info.txt" -ignore"*" -noCR}} - vdcInstance_t holds the instance data for a Video Decoder Core instance. - This structure is used to keep track of the internal state of - a VDC instance. - {{-output"vdcInstance_t_info.txt"}} */ - -/* {{-output"vdcInstance_t.txt"}} */ -typedef struct { - vdeImsItem_t *currFrame; /* Current P/I frame (image store item) */ - vdeImsItem_t *bFrame; /* Current B frame (of PB, image store item) */ - /* NULL pointer indicates that the frames are - not valid. */ - - vdcPictureParam_t pictureParam; - /* Picture parameters for the current picture */ - - int32 frameNum; /* Frame number */ - int32 frameNumForBFrame; /* Frame number for B frame */ - - int gfid; /* GOB Frame ID */ - vdxPictureHeader_t *prevPicHeader; /* Header of the previous picture */ - int fPrevPicHeaderReliable; /* if header is not 100% reliable, it is better not to compare it with the next header */ - - mvcData_t mvcData; /* Storage for motion vector data */ - -/*** MPEG-4 REVISION ***/ - - aicData_t aicData; /* Storage AC/DC reconstruction*/ - - char *user_data; /* User Data */ - int user_data_length; - -/*** End MPEG-4 REVISION ***/ - - u_int32 nOfDecodedFrames; /* Counter for (partially) successfully decoded frames */ - u_char fIntraGot; /* non-zero = INTRA frame has been decoded */ - u_char fEOS; /* 1 if EOS has been reached, 0 otherwise */ - - int fRPS; /* Reference Picture Selection in use? - At first, set to zero in vdcOpen. - Then, modified according to the bitstream. */ - - int rpsMode; /* both/either/neither ACK and/or/nor NACK, - VDX_RPS_MODE_XXX */ - - int fIgnoreRPSBufferUpdate;/* 0 = segment buffering in FIFO mode as normally - 1 = decoded pictures are not put into - reference segment buffers */ - - int numAnnexNScalabilityLayers; - /* -1 = no frames decoded yet, - 0 = Nokia-proprietary Annex N scalability - layers not in use, - 2.. = number of scalability layers */ - - int fGFIDShouldChange; /* 1, if GFID should change, 0 otherwise */ - - vdeIms_t *imageStore; /* Pointer to image store */ - - void *hParent; /* typeless handle to vdeInstance_t */ - - u_int32 snapshotStartCallback; /* function pointer to a function informing w - the beginning of a snapshot */ - - u_int32 snapshotEndCallback; /* function pointer to a function informing - the end of a snapshot */ - - int snapshotStatus; /* snapshot transmission status */ - - u_int32 reportPictureSizeCallback; /* callback function for informing - frame size */ - -} vdcInstance_t; -/* {{-output"vdcInstance_t.txt"}} */ - - -/* - * Function prototypes - */ - -VDC_INLINE int VDC_MIN(int a, int b) {return a < b ? a : b;} -VDC_INLINE int VDC_MAX(int a, int b) {return a > b ? a : b;} - - -#endif - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/debug.h --- a/videoeditorengine/h263decoder/inc/debug.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,180 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* A header for debug output functions. -* -*/ - - -#ifndef _DEBUG_H_ -#define _DEBUG_H_ - -#if defined(DEB_FILE) || defined(DEB_STDOUT) || defined(DEB_DEBUGGER) - /* Debug output wanted */ - - #include - #include "nrctypes.h" - - #ifdef DEBUG_OUTPUT - #include "biblin.h" - #endif - - #ifdef __cplusplus - extern "C" { - #endif - - /* - * Function prototypes - */ - - int debFree(void); - int debLoad(const char *fileName); - - #ifdef DEB_PERF - #define deb(dummy) 0 - #define debp(dummy) 0 - #define debPrintf(dummy) 0 - #define deb0p(format) 0 - #define deb1p(format, p1) 0 - #define deb2p(format, p1, p2) 0 - #define deb3p(format, p1, p2, p3) 0 - #define deb4p(format, p1, p2, p3, p4) 0 - #define deb5p(format, p1, p2, p3, p4, p5) 0 - #define deb0f(stream, format) 0 - #define deb1f(stream, format, p1) 0 - #define deb2f(stream, format, p1, p2) 0 - #define deb3f(stream, format, p1, p2, p3) 0 - #define deb4f(stream, format, p1, p2, p3, p4) 0 - #define deb5f(stream, format, p1, p2, p3, p4, p5) 0 - - #ifdef DEB_STDOUT - #define debPerf printf - #else - int debPerf(const char *format, ...); - #endif - - #else - #ifdef DEB_STDOUT - #define deb printf - #else - #ifdef DEBUG_OUTPUT - int deb_core(const char *format, ...); - #define deb deb_core("%08lu: ", bibNumberOfFlushedBits(buffer_global)), deb_core - #else - int deb(const char *format, ...); - #endif - #endif - - #define debp deb - - #ifdef DEB_FILELINE - #define debPrintf deb("%s, line %d. ", __FILE__, __LINE__), deb - #else - #define debPrintf deb - #endif - - #define deb0p debPrintf - #define deb1p debPrintf - #define deb2p debPrintf - #define deb3p debPrintf - #define deb4p debPrintf - #define deb5p debPrintf - - /* Internal defines to enable DEB_FILELINE */ - #ifdef DEB_STDOUT - #define deb0ff(stream, format) fprintf(stream, format) - #define deb1ff(stream, format, p1) fprintf(stream, format, p1) - #define deb2ff(stream, format, p1, p2) fprintf(stream, format, p1, p2) - #define deb3ff(stream, format, p1, p2, p3) fprintf(stream, format, p1, p2, p3) - #define deb4ff(stream, format, p1, p2, p3, p4) fprintf(stream, format, p1, p2, p3, p4) - #define deb5ff(stream, format, p1, p2, p3, p4, p5) fprintf(stream, format, p1, p2, p3, p4, p5) - #else - #define deb0ff(stream, format) deb(format) - #define deb1ff(stream, format, p1) deb(format, p1) - #define deb2ff(stream, format, p1, p2) deb(format, p1, p2) - #define deb3ff(stream, format, p1, p2, p3) deb(format, p1, p2, p3) - #define deb4ff(stream, format, p1, p2, p3, p4) deb(format, p1, p2, p3, p4) - #define deb5ff(stream, format, p1, p2, p3, p4, p5) deb(format, p1, p2, p3, p4, p5) - #endif - - #ifdef DEB_FILELINE - #define deb0f(stream, format) \ - deb2ff(stream, "%s, line %d. ", __FILE__, __LINE__), \ - deb0ff(stream, format) - - #define deb1f(stream, format, p1) \ - deb2ff(stream, "%s, line %d. ", __FILE__, __LINE__), \ - deb1ff(stream, format, p1) - - #define deb2f(stream, format, p1, p2) \ - deb2ff(stream, "%s, line %d. ", __FILE__, __LINE__), \ - deb2ff(stream, format, p1, p2) - - #define deb3f(stream, format, p1, p2, p3) \ - deb2ff(stream, "%s, line %d. ", __FILE__, __LINE__), \ - deb3ff(stream, format, p1, p2, p3) - - #define deb4f(stream, format, p1, p2, p3, p4) \ - deb2ff(stream, "%s, line %d. ", __FILE__, __LINE__), \ - deb4ff(stream, format, p1, p2, p3, p4) - - #define deb5f(stream, format, p1, p2, p3, p4, p5) \ - deb2ff(stream, "%s, line %d. ", __FILE__, __LINE__), \ - deb4ff(stream, format, p1, p2, p3, p4, p5) - - #else - #define deb0f(stream, format) deb0ff(stream, format) - #define deb1f(stream, format, p1) deb1ff(stream, format, p1) - #define deb2f(stream, format, p1, p2) deb2ff(stream, format, p1, p2) - #define deb3f(stream, format, p1, p2, p3) deb3ff(stream, format, p1, p2, p3) - #define deb4f(stream, format, p1, p2, p3, p4) deb4ff(stream, format, p1, p2, p3, p4) - #define deb5f(stream, format, p1, p2, p3, p4, p5) deb5ff(stream, format, p1, p2, p3, p4, p5) - #endif - - #define debPerf deb - #endif - - #ifdef __cplusplus - }; - #endif - -#else /* no debug output wanted */ - - #define deb(dummy) - #define debp(dummy) - #define debPrintf(dummy) - #define deb0p(format) - #define deb1p(format, p1) - #define deb2p(format, p1, p2) - #define deb3p(format, p1, p2, p3) - #define deb4p(format, p1, p2, p3, p4) - #define deb5p(format, p1, p2, p3, p4, p5) - #define deb0f(stream, format) - #define deb1f(stream, format, p1) - #define deb2f(stream, format, p1, p2) - #define deb3f(stream, format, p1, p2, p3) - #define deb4f(stream, format, p1, p2, p3, p4) - #define deb5f(stream, format, p1, p2, p3, p4, p5) - #define debPerf(dummy) - #define debFree() - #define debLoad(dummy) - -#endif - - #define debLogOutput(a,b,c) - -#endif /* !defined(_DEBUG_H_) */ - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/decblock.h --- a/videoeditorengine/h263decoder/inc/decblock.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for block layer decoding module. -* -*/ - - -#ifndef _DECBLOCK_H_ -#define _DECBLOCK_H_ - -#include "h263dext.h" - -/* - * Defines - */ - -// unify error codes -#define DBL_OK H263D_OK -#define DBL_ERR H263D_ERROR - - -/* - * Function prototypes - */ - -int dblFree(void); - -int dblLoad(void); - -void dblIdctAndDequant(int *block, int quant, int skip); - -void dblIdct(int *block); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/decgob.h --- a/videoeditorengine/h263decoder/inc/decgob.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for GOB segment decoding module. -* -*/ - - -#ifndef _DECGOB_H_ -#define _DECGOB_H_ - -#include "core.h" -#include "vdcmvc.h" -#include "vdeims.h" -#include "MPEG4Transcoder.h" -class CMPEG4Transcoder; -/* - * Defines - */ - -// unify error codes -#define DGOB_OK_BUT_BIT_ERROR H263D_OK_BUT_BIT_ERROR /* Bit errors detected */ -#define DGOB_OK H263D_OK -#define DGOB_ERR H263D_ERROR - -/* - * Structs and typedefs - */ - -/* {{-output"dgobGOBSegmentInParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dgobGetAndDecodeGOBSegment and dgobGetAndDecodeGOBSegmentContents - functions. - {{-output"dgobGOBSegmentInParam_t_info.txt"}} */ - -/* {{-output"dgobGOBSegmentInParam_t.txt"}} */ -typedef struct { - int numStuffBits; /* Number of stuffing bits before GBSC */ - - vdcPictureParam_t *pictParam; /* Picture attributes */ - - bibBuffer_t *inBuffer; /* Bit Buffer instance */ - - - bibBuffer_t *outBuffer; /* output Bit Buffer instance */ - bibBufferEdit_t *bufEdit; - int iColorEffect; - TBool iGetDecodedFrame; - - - int fGFIDShouldChange; /* If non-zero, the gfid parameter passed in - the dgobGOBSegmentInOutParam_t structure - should be different from the value got - from the bitstream. Otherwise, the values - should be equal. */ - -} dgobGOBSegmentInParam_t; -/* {{-output"dgobGOBSegmentInParam_t.txt"}} */ - - - -/* {{-output"dgobGOBSegmentInOutParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dgobGetAndDecodeGOBSegment and dgobGetAndDecodeGOBSegmentContents - functions. The functions may modify the parameters (or the structures - pointed by the parameters). - {{-output"dgobGOBSegmentInOutParam_t_info.txt"}} */ - -/* {{-output"dgobGOBSegmentInOutParam_t.txt"}} */ -typedef struct { - int prevGNWithHeader; /* GN of the latest decoded GOB with header */ - - int prevGN; /* GN of the latest decoded GOB */ - - int gfid; /* GFID of the latest GOB header, - specify -1 if this is the 1st GOB of - the sequence */ - - u_char *fCodedMBs; /* array for coded macroblock flags in - scan-order, 1 = coded, 0 = not coded */ - - int numOfCodedMBs; /* number of coded macroblocks */ - - int *quantParams; /* array of quantization parameters for - macroblocks in scan-order */ - - mvcData_t *mvcData; /* Motion Vector Count module instance data */ - - vdeIms_t *imageStore; /* VDE Image Store instance data */ - - int trp; /* Temporal Reference for Prediction, - -1 if not indicated in the bitstream */ - - int rtr; /* Real TR of the referenced image */ - - u_char *refY; /* Reference frame */ - u_char *refU; - u_char *refV; - - u_char *currPY; /* Current P (or I) frame */ - u_char *currPU; - u_char *currPV; - - int StartByteIndex; - int StartBitIndex; - - -} dgobGOBSegmentInOutParam_t; -/* {{-output"dgobGOBSegmentInOutParam_t.txt"}} */ - - -/* {{-output"dgobGOBCheckParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dgobCheckNextGob function. - {{-output"dgobGOBCheckParam_t_info.txt"}} */ - -/* {{-output"dgobGOBCheckParam_t.txt"}} */ -typedef struct { - bibBuffer_t *inBuffer; /* Bit Buffer instance */ - - bibBuffer_t *outBuffer; /* Out Bit Buffer instance data */ - int StartByteIndex; - int StartBitIndex; - - vdcPictureParam_t *pictParam; /* Picture attributes */ - int numStuffBits; /* Number of stuffing bits before GBSC */ - int prevGN; /* GN of the latest GOB */ - int gfid; /* GFID of the frame */ -} dgobCheckParam_t; -/* {{-output"dgobGOBCheckParam_t.txt"}} */ - - -/* - * Functions prototypes - */ - -int dgobGetAndDecodeGOBSegment( - const dgobGOBSegmentInParam_t *inParam, - dgobGOBSegmentInOutParam_t *inOutParam, CMPEG4Transcoder *hTranscoder); - -int dgobGetAndDecodeGOBSegmentContents( - const dgobGOBSegmentInParam_t *inParam, - int fGetNewReferenceFrame, - int quant, - dgobGOBSegmentInOutParam_t *inOutParam, CMPEG4Transcoder *hTranscoder); - -int dgobCheckNextGob( - dgobCheckParam_t *param , CMPEG4Transcoder *hTranscoder); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/decmb.h --- a/videoeditorengine/h263decoder/inc/decmb.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,232 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for macroblock decoding functions. -* -*/ - - - -#ifndef _DECMB_H_ -#define _DECMB_H_ - -/* - * Includes - */ - -#include "epoclib.h" - -#include "biblin.h" - -#include "block.h" -#include "core.h" -#include "vdcmvc.h" - - -/* - * Defines - */ - -// unify error codes -#define DMB_BIT_ERR H263D_OK_BUT_BIT_ERROR -#define DMB_OK H263D_OK -#define DMB_ERR H263D_ERROR - - -/* - * Structs and typedefs - */ - -/* {{-output"dmbIFrameMBInParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dmbGetAndDecodeIFrameMB function. - {{-output"dmbIFrameMBInParam_t_info.txt"}} */ - -/* {{-output"dmbIFrameMBInParam_t.txt"}} */ -typedef struct { - bibBuffer_t *inBuffer; /* Bit Buffer instance data */ - - - bibBuffer_t *outBuffer; /* Out Bit Buffer instance data */ - bibBufferEdit_t *bufEdit; - int iColorEffect; - TBool iGetDecodedFrame; //Do we need to get decoded data. - int StartByteIndex; - int StartBitIndex; - - - int xPosInMBs; /* Horizontal position of the macroblock - (in macroblocks), - 0 .. (numMBsInMBLine - 1) */ - - int yPosInMBs; /* Vertical position of the macroblock, - (in macroblocks), 0 .. */ - - vdcPictureParam_t *pictParam; /* Picture attributes */ - - int fGOBHeaderPresent; /* 1 if GOB header present */ - - int numMBsInSegment; /* Number of MBs in either GOB or Slice Segment */ - int sliceStartMB; /* MB address of starting MB of the slice */ - - -} dmbIFrameMBInParam_t; -/* {{-output"dmbIFrameMBInParam_t.txt"}} */ - - -/* {{-output"dmbIFrameMBInOutParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dmbGetAndDecodeIFrameMB function. The function may also modify - these parameters (or the structures pointed by the parameters). - {{-output"dmbIFrameMBInOutParam_t_info.txt"}} */ - -/* {{-output"dmbIFrameMBInOutParam_t.txt"}} */ -typedef struct { - u_char *fCodedMBs; /* Array for coded macroblock flags in - scan-order, 1 = coded, 0 = not coded */ - - int numOfCodedMBs; /* Number of coded macroblocks */ - -/*** MPEG-4 REVISION ***/ - int currMBNum; /* current MB number */ - int currMBNumInVP; /* current MB in VP */ - - aicData_t *aicData; /* MPEG-4 Advanced Intra Coding module - instance data */ -/*** End MPEG-4 REVISION ***/ - - int quant; /* Current quantizer */ - - u_char *yMBInFrame; /* Pointer to the top-left corner of - the current macroblock in a frame */ - u_char *uBlockInFrame; - u_char *vBlockInFrame; - - int StartByteIndex; - int StartBitIndex; - -} dmbIFrameMBInOutParam_t; -/* {{-output"dmbIFrameMBInOutParam_t.txt"}} */ - - -/* {{-output"dmbPFrameMBInParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dmbGetAndDecodePFrameMB function. - {{-output"dmbPFrameMBInParam_t_info.txt"}} */ - -/* {{-output"dmbPFrameMBInParam_t.txt"}} */ -typedef struct { - bibBuffer_t *inBuffer; /* Bit Buffer instance data */ - - bibBuffer_t *outBuffer; /* Out Bit Buffer instance data */ - bibBufferEdit_t *bufEdit; - int iColorEffect; - TBool iGetDecodedFrame; - int StartByteIndex; - int StartBitIndex; - - - int xPosInMBs; /* Horizontal position of the macroblock - (in macroblocks), - 0 .. (numMBsInMBLine - 1) */ - - int yPosInMBs; /* Vertical position of the macroblock, - (in macroblocks), 0 .. */ - - vdcPictureParam_t *pictParam; /* Picture attributes */ - - int fGOBHeaderPresent; /* Non-zero indicates that the GOB header - is present in the GOB to which the current - macroblock belongs */ - - u_char *refY; /* Reference frame */ - u_char *refU; - u_char *refV; - - u_char *currPY; /* Current P (or I) frame */ - u_char *currPU; - u_char *currPV; - - - int numMBsInSegment; /* Number of MBs in either GOB or Slice Segment */ - int sliceStartMB; /* MB address of starting MB of the slice */ - - int mbOnRightOfBorder; - int mbOnOfBottomBorder; - int mbOnLeftOfBorder; - -} dmbPFrameMBInParam_t; -/* {{-output"dmbPFrameMBInParam_t.txt"}} */ - - -/* {{-output"dmbPFrameMBInOutParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dmbGetAndDecodePFrameMB function. The function may also modify - these parameters (or the structures pointed by the parameters). - {{-output"dmbPFrameMBInOutParam_t_info.txt"}} */ - -/* {{-output"dmbPFrameMBInOutParam_t.txt"}} */ -typedef struct { - - - bibBuffer_t *outBuffer; /* Out Bit Buffer instance data */ - int StartByteIndex; - int StartBitIndex; - - - u_char *fCodedMBs; /* Array for coded macroblock flags in - scan-order, 1 = coded, 0 = not coded */ - - int numOfCodedMBs; /* Number of coded macroblocks */ - -/*** MPEG-4 REVISION ***/ - int currMBNum; /* current MB number */ - int currMBNumInVP; /* current MB in VP */ - - aicData_t *aicData; /* Advanced Intra Coding module instance data */ -/*** End MPEG-4 REVISION ***/ - - int quant; /* Current quantizer */ - - u_char *yMBInFrame; /* Pointer to the top-left corner of - the current macroblock in a frame */ - u_char *uBlockInFrame; - u_char *vBlockInFrame; - - mvcData_t *mvcData; /* Motion Vector Count module instance data */ - - blcDiffMB_t *diffMB; /* Storage for the previous prediction error - blocks */ - -} dmbPFrameMBInOutParam_t; -/* {{-output"dmbPFrameMBInOutParam_t.txt"}} */ - - -/* - * Function prototypes - */ - -int dmbGetAndDecodeIFrameMB( - const dmbIFrameMBInParam_t *inParam, - dmbIFrameMBInOutParam_t *inOutParam, - u_char fMPEG4, CMPEG4Transcoder *hTranscoder); - -int dmbGetAndDecodePFrameMB( - const dmbPFrameMBInParam_t *inParam, - dmbPFrameMBInOutParam_t *inOutParam, - u_char fMPEG4, CMPEG4Transcoder *hTranscoder); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/decmbdct.h --- a/videoeditorengine/h263decoder/inc/decmbdct.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,294 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for macroblock content blocks decoding functions. -* -*/ - - - - -#ifndef _DECMBDCT_H_ -#define _DECMBDCT_H_ - -/* - * Includes - */ - -#include "block.h" -#include "vdcaic.h" - -#include "biblin.h" - -class CMPEG4Transcoder; - -/* - * Defines - */ - -// unify error codes -#define DMD_BIT_ERR H263D_OK_BUT_BIT_ERROR -#define DMD_OK H263D_OK -#define DMD_ERR H263D_ERROR - - -/* - * Structs and typedefs - */ - -/* {{-output"dmdBOfPBParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass parameters to - the dmdGetAndDecodeBOfPBMBBlocks function. - {{-output"dmdBOfPBParam_t_info.txt"}} */ - -/* {{-output"dmdBOfPBParam_t.txt"}} */ -typedef struct { - bibBuffer_t *inBuffer; /* Bit Buffer instance data */ - - - bibBuffer_t *outBuffer; /* Out Bit Buffer instance data */ - int StartByteIndex; - int StartBitIndex; - - int cbpb; /* Coded block pattern for B-blocks */ - - int quant; /* Current quantizer */ - - BLC_COPY_PREDICTION_MB_PARAM /* See block.h */ - - int fMQ; /* Modified Quantization Mode flag */ - -} dmdBOfPBParam_t; -/* {{-output"dmdBOfPBParam_t.txt"}} */ - - -/* {{-output"dmdIParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass parameters to - the dmdGetAndDecodeIMBBlocks function. - {{-output"dmdIParam_t_info.txt"}} */ - -/* {{-output"dmdIParam_t.txt"}} */ -typedef struct { - bibBuffer_t *inBuffer; /* Bit Buffer instance data */ - - - bibBuffer_t *outBuffer; /* Out Bit Buffer instance data */ - bibBufferEdit_t *bufEdit; - int iColorEffect; - TBool iGetDecodedFrame; - int StartByteIndex; - int StartBitIndex; - - - int cbpy; /* Coded block pattern for luminance */ - - int cbpc; /* Coded block pattern for chrominance */ - - int quant; /* Current quantizer */ - - int yWidth; /* Picture width in luminance pixels */ - - u_char *yMBInFrame; /* Current macroblock in frame */ - u_char *uBlockInFrame; - u_char *vBlockInFrame; - - int xPosInMBs; /* Horizontal position of the macroblock - (in macroblocks), - 0 .. (numMBsInMBLine - 1) */ - - int yPosInMBs; /* Vertical position of the macroblock, - (in macroblocks), 0 .. */ - - int numMBLinesInGOB; /* Number of macroblock lines in GOB */ - - int pictureType; /* Picture type is one of the following: - VDX_PIC_TYPE_I INTRA - VDX_PIC_TYPE_P INTER - VDX_PIC_TYPE_PB PB (Annex G) - VDX_PIC_TYPE_IPB Improved PB - VDX_PIC_TYPE_B B (Annex O) - VDX_PIC_TYPE_EI EI (Annex O) - VDX_PIC_TYPE_EP EP (Annex O) */ - - int numMBsInMBLine; /* Number of MBs in one MB Line */ - - int fGOBHeaderPresent; /* 1 if GOB header is present.*/ - - int predMode; /* prediction mode given by INTRA_MODE field */ - - int fMQ; /* Modified Quantization Mode flag */ - - int sumBEI; /* Sum (bit-wise OR) of bit error indications for the whole MB */ - - int rightOfBorder; /* There is a border on the left of the current MB */ - - int downOfBorder; /* There is a border on top of the current MB */ - -} dmdIParam_t; -/* {{-output"dmdIParam_t.txt"}} */ - -/* {{-output"dmdMPEGIParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass parameters to - the dmdGetAndDecodeMPEGIMBBlocks function. - {{-output"dmdMPEGIParam_t_info.txt"}} */ - -/* {{-output"dmdMPEGIParam_t.txt"}} */ -typedef struct { - bibBuffer_t *inBuffer; /* Bit Buffer instance data */ - - - bibBuffer_t *outBuffer; /* Out Bit Buffer instance data */ - bibBufferEdit_t *bufEdit; - int iColorEffect; - TBool iGetDecodedFrame; - int StartByteIndex; - int StartBitIndex; - - int cbpy; /* Coded block pattern for luminance */ - - int cbpc; /* Coded block pattern for chrominance */ - - int quant; /* Current quantizer */ - - int yWidth; /* Picture width in luminance pixels */ - - int switched; /* if TRUE instead of optimized IntraDC - decoding IntraAC VLC table is used for - DC coefficient coding */ - - int currMBNum; /* current MB Number */ - - u_char fTopOfVP; /* The current Macroblock is in the top row - of the current Video Packet */ - u_char fLeftOfVP; /* The current Macroblock is the first - (on the left) of the current Video Packet */ - u_char fBBlockOut; /* The "B" AC/DC prediction block for the - current Macroblock is outside of the - current Video Packet */ - - aicData_t *aicData; /* storage for the intra prediction (AIC) data */ - - u_char data_partitioned; - int *DC; /* if data_partitioned, this is the array of - the DC coefficients decoded in the previous - partition of the VP */ - - u_char reversible_vlc; /* TRUE if reversible VLC is used */ - u_char vlc_dec_direction; /* 0: forward, 1: backward decoding of RVLC */ - - u_char *yMBInFrame; /* Current macroblock in frame */ - u_char *uBlockInFrame; - u_char *vBlockInFrame; - - int xPosInMBs; /* Horizontal position of the macroblock - (in macroblocks), - 0 .. (numMBsInMBLine - 1) */ - - int yPosInMBs; /* Vertical position of the macroblock, - (in macroblocks), 0 .. */ - - int numMBsInMBLine; /* Number of macroblocks in one line */ - - int numMBLinesInGOB; /* Number of macroblock lines in GOB */ - - int pictureType; /* Picture type is one of the following: - VDX_PIC_TYPE_I INTRA - VDX_PIC_TYPE_P INTER - VDX_PIC_TYPE_PB PB (Annex G) - VDX_PIC_TYPE_IPB Improved PB - VDX_PIC_TYPE_B B (Annex O) - VDX_PIC_TYPE_EI EI (Annex O) - VDX_PIC_TYPE_EP EP (Annex O) */ - - int fMQ; - int fAIC; - -} dmdMPEGIParam_t; -/* {{-output"dmdMPEGIParam_t.txt"}} */ - -/* {{-output"dmdPParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass parameters to - the dmdGetAndDecodeIMBBlocks function. - {{-output"dmdPParam_t_info.txt"}} */ - -/* {{-output"dmdPParam_t.txt"}} */ -typedef struct { - bibBuffer_t *inBuffer; /* Bit Buffer instance data */ - - - bibBuffer_t *outBuffer; /* Out Bit Buffer instance data */ - bibBufferEdit_t *bufEdit; - int iColorEffect; - TBool iGetDecodedFrame; - int StartByteIndex; - int StartBitIndex; - - int cbpy; /* Coded block pattern for luminance */ - - int cbpc; /* Coded block pattern for chrominance */ - - int quant; /* Current quantizer */ - - BLC_COPY_PREDICTION_MB_PARAM /* See block.h */ - -/*** MPEG-4 REVISION ***/ - u_char reversible_vlc; /* TRUE if reversible VLC is used */ - u_char vlc_dec_direction; /* 0: forward, 1: backward decoding of RVLC */ -/*** End MPEG-4 REVISION ***/ - - int xPosInMBs; /* Horizontal position of the macroblock - (in macroblocks), - 0 .. (numMBsInMBLine - 1) */ - - int yPosInMBs; /* Vertical position of the macroblock, - (in macroblocks), 0 .. */ - - int numMBsInMBLine; /* Number of MBs in one MB Line */ - - int fGOBHeaderPresent; /* 1 if GOB header is present.*/ - - int mbType; - - -} dmdPParam_t; -/* {{-output"dmdPParam_t.txt"}} */ - - -/* - * Function prototypes - */ - -int dmdGetAndDecodeBOfPBMBBlocks( - dmdBOfPBParam_t *param); - -int dmdGetAndDecodeIMBBlocks( - dmdIParam_t *param, CMPEG4Transcoder *hTranscoder); - -int dmdGetAndDecodePMBBlocks( - dmdPParam_t *param, CMPEG4Transcoder *hTranscoder); - -int dmdGetAndDecodeAdvIMBBlocks( - dmdIParam_t *inpParam); - -/*** MPEG-4 REVISION ***/ -int dmdGetAndDecodeMPEGPMBBlocks( - dmdPParam_t *param, CMPEG4Transcoder *hTranscoder); - -int dmdGetAndDecodeMPEGIMBBlocks( - dmdMPEGIParam_t *param, CMPEG4Transcoder *hTranscoder); -/*** End MPEG-4 REVISION ***/ - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/decmbs.h --- a/videoeditorengine/h263decoder/inc/decmbs.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for multiple macroblock decoding module. -* -*/ - - - -#ifndef _DECMBS_H_ -#define _DECMBS_H_ - -/* - * Includes - */ - -#include "decmb.h" - - -/* - * Defines - */ - -// unify error codes -#define DMBS_OK H263D_OK -#define DMBS_ERR H263D_ERROR - - -/* - * Function prototypes - */ - -int dmbsGetAndDecodeIMBsInScanOrder( - const dmbIFrameMBInParam_t *inParam, - dmbIFrameMBInOutParam_t *inOutParam, - int *quant, CMPEG4Transcoder *hTranscoder); - -int dmbsGetAndDecodePMBsInScanOrder( - const dmbPFrameMBInParam_t *inParam, - dmbPFrameMBInOutParam_t *inOutParam, - int *quant, CMPEG4Transcoder *hTranscoder); - -int dmbsGetAndDecodeIMBsDataPartitioned( - dmbIFrameMBInParam_t *inParam, - dmbIFrameMBInOutParam_t *inOutParam, - int *quantParams, CMPEG4Transcoder *hTranscoder); - -int dmbsGetAndDecodePMBsDataPartitioned( - const dmbPFrameMBInParam_t *inParam, - dmbPFrameMBInOutParam_t *inOutParam, - int *quantParams, CMPEG4Transcoder *hTranscoder); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/decpich.h --- a/videoeditorengine/h263decoder/inc/decpich.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,132 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for picture header decoding functions. -* -*/ - - - - -#ifndef _DECPICH_H_ -#define _DECPICH_H_ - -/* - * Includes - */ - -#include "core.h" - -#include "biblin.h" - - -/* - * Defines - */ - -// unify error codes -#define DPH_OK H263D_OK /* everything ok */ - -#define DPH_OK_BUT_BIT_ERROR H263D_OK_BUT_BIT_ERROR /* bitstream corruption was detected */ -#define DPH_OK_BUT_NOT_CODED H263D_OK_BUT_NOT_CODED /* the VOP is not_coded: no video data sent, - only the timestamp -> skip the frame */ -#define DPH_ERR H263D_ERROR /* a general error */ -#define DPH_ERR_NO_INTRA H263D_ERROR_NO_INTRA /* no INTRA frame has been received */ -#define DPH_ERR_FORMAT_CHANGE H263D_ERROR /* picture size change in bitstream */ - - -/* - * Structs and typedefs - */ - -/* {{-output"dphInParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dphGetPictureHeader function. - {{-output"dphInParam_t_info.txt"}} */ - -/* {{-output"dphInParam_t.txt"}} */ -typedef struct { - int numStuffBits; /* Number of stuffing bits before PSC */ - int fReadBits; /* 0, if picture header should not be read (use previous - picture header but decode it using dphGetPictureHeader) */ - int fNeedDecodedFrame; -} dphInParam_t; -/* {{-output"dphInParam_t.txt"}} */ - - -/* {{-output"dphInOutParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dphGetPictureHeader function. The function may modify - the parameters (or the structures pointed by the parameters). - {{-output"dphInOutParam_t_info.txt"}} */ - -/* {{-output"dphInOutParam_t.txt"}} */ -typedef struct { - vdcInstance_t *vdcInstance; /* Video Decoder Core instance */ - bibBuffer_t *inBuffer; /* Bit Buffer instance */ - bibBuffer_t *outBuffer; /* Out Bit Buffer instance data */ - - -} dphInOutParam_t; -/* {{-output"dphInOutParam_t.txt"}} */ - - -/* {{-output"dphOutParam_t_info.txt" -ignore"*" -noCR}} - The dphGetPictureHeader function uses this structure to return - output parameters. - {{-output"dphOutParam_t_info.txt"}} */ - -/* {{-output"dphOutParam_t.txt"}} */ -typedef struct { - int pquant; /* Initial quantizer */ - int trp; /* Temporal Reference for Prediction, - -1 if not indicated in the bitstream */ - u_char *currYFrame; /* Memory buffer for new Y frame */ - u_char *currUFrame; /* Memory buffer for new U frame */ - u_char *currVFrame; /* Memory buffer for new V frame */ - u_char *currYBFrame; /* New Y frame of B part of PB-frame */ - u_char *currUBFrame; /* New U frame of B part of PB-frame */ - u_char *currVBFrame; /* New V frame of B part of PB-frame */ -} dphOutParam_t; -/* {{-output"dphOutParam_t.txt"}} */ - - -/* - * Function prototypes - */ - -int dphGetPictureHeader( - const dphInParam_t *inParam, - dphInOutParam_t *inOutParam, - dphOutParam_t *outParam, - int *bitErrorIndication); - -int dphGetSEI( - vdcInstance_t *vdcInstance, /* Video Decoder Core instance */ - bibBuffer_t *inBuffer, /* Bit Buffer instance */ - int *bitErrorIndication); - -class CMPEG4Transcoder; -int dphGetMPEGVolHeader(dphInOutParam_t *inOutParam, CMPEG4Transcoder *hTranscoder); - -int dphGetMPEGVopHeader( - const dphInParam_t *inParam, - dphInOutParam_t *inOutParam, - dphOutParam_t *outParam, - int *bitErrorIndication); - -#endif - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/decvp_mpeg.h --- a/videoeditorengine/h263decoder/inc/decvp_mpeg.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,156 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for Video packet decoding module. -* -*/ - - - -#ifndef _DECVP_MPEG_H_ -#define _DECVP_MPEG_H_ - -#include "core.h" -#include "vdcmvc.h" -#include "vdeims.h" - - -/* - * Defines - */ - -// unify error codes -#define DGOB_OK_BUT_FRAME_USELESS H263D_OK_BUT_FRAME_USELESS -#define DGOB_OK_BUT_BIT_ERROR H263D_OK_BUT_BIT_ERROR -#define DGOB_OK H263D_OK -#define DGOB_ERR H263D_ERROR - - -/* - * Structs and typedefs - */ - -/* {{-output"dvpMarkVPCompleted_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass parameters to - the dvpMarkVPCompleted function. - {{-output"dvpMarkVPCompleted_t_info.txt"}} */ - -/* {{-output"dvpMarkVPCompleted_t.txt"}} */ -typedef struct { - int numMBsInVP; /* Number of macroblocks within the VP */ - - int xPosInMBs; /* x position of the first MB in the VP */ - - int yPosInMBs; /* y position of the first MB in the VP */ - - int widthInMBs; /* Image width in macroblocks */ - - int fSegmentCorrupted; /* Non-zero if the reported GOBs are - corrupted. Otherwise zero. */ - - -} dvpMarkVPCompleted_t; -/* {{-output"dvpMarkVPCompleted_t.txt"}} */ - - -/* {{-output"dvpVPInParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dvpGetAndDecodeVideoPacketHeader and - dvpGetAndDecodeVideoPacketContents functions. - {{-output"dvpVPInParam_t_info.txt"}} */ - -/* {{-output"dvpVPInParam_t.txt"}} */ -typedef struct { - - vdcPictureParam_t *pictParam; /* Picture attributes */ - - bibBuffer_t *inBuffer; /* Bit Buffer instance */ - - bibBuffer_t *outBuffer; /* Out Bit Buffer instance data */ - - bibBufferEdit_t *bufEdit; - int iColorEffect; - TBool iGetDecodedFrame; - - u_char fVOPHeaderCorrupted; /* If non-zero, the VOP header was detected - to be erronous and the HEC information is - used for updating */ - -} dvpVPInParam_t; -/* {{-output"dvpVPInParam_t.txt"}} */ - - -/* {{-output"dvpVPInOutParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the dvpGetAndDecodeVideoPacketHeader and dvpGetAndDecodeVideoPacketContents - functions. The functions may modify the parameters (or the structures - pointed by the parameters). - {{-output"dvpVPInOutParam_t_info.txt"}} */ - -/* {{-output"dvpVPInOutParam_t.txt"}} */ -typedef struct { - - int currMBNum; /* the number of the next expected MB to decode */ - - int frameNum; /* the calculated frame number */ - - int quant; /* QP for the next MB */ - - u_char *fCodedMBs; /* array for coded macroblock flags in - scan-order, 1 = coded, 0 = not coded */ - - int numOfCodedMBs; /* number of coded macroblocks */ - - int *quantParams; /* array of quantization parameters for - macroblocks in scan-order */ - - mvcData_t *mvcData; /* Motion Vector Count module instance data */ - - aicData_t *aicData; /* Advanced Intra Coding module instance data */ - - vdeIms_t *imageStore; /* VDE Image Store instance data */ - - u_char *refY; /* Reference frame */ - u_char *refU; - u_char *refV; - - u_char *currPY; /* Current P (or I) frame */ - u_char *currPU; - u_char *currPV; - - /* MVE */ - int StartByteIndex; - int StartBitIndex; - -} dvpVPInOutParam_t; -/* {{-output"dvpVPInOutParam_t.txt"}} */ - -/* - * Functions prototypes - */ - -int dvpGetAndDecodeVideoPacketHeader( - const dvpVPInParam_t *inParam, - dvpVPInOutParam_t *inOutParam); - -int dvpGetAndDecodeVideoPacketContents( - const dvpVPInParam_t *inParam, - int fGetNewReferenceFrame, - dvpVPInOutParam_t *inOutParam, CMPEG4Transcoder *hTranscoder); - -int dvpMarkVPCompleted(dvpMarkVPCompleted_t *inParam); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/dlist.h --- a/videoeditorengine/h263decoder/inc/dlist.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for generic list handling services -* for doubly linked lists. -* -*/ - - -#ifndef _DLIST_H_ -#define _DLIST_H_ - -/* - * Includes - */ - -#include "list.h" - - -/* - * Defines - */ - -#define DLST_ITEM_SKELETON \ - LST_ITEM_SKELETON \ - void *prev; - - -/* - * Typedefs - */ - -/* A skeleton of a list item type. - Each real list item type must include these definitions in the beginning - of the structure. This structure has no use as such outside this module. */ -typedef struct dlstListItem_s { - DLST_ITEM_SKELETON -} dlstListItem_t; - -/* Doubly-linked list */ -typedef struct { - dlstListItem_t *head; - dlstListItem_t *curr; - dlstListItem_t *tail; - int numItems; -} dlst_t; - - -/* - * Function prototypes - */ - -/* Double-linked list functions */ -int dlstOpen(dlst_t *list); -int dlstClose(dlst_t *list); -int dlstHead(dlst_t *list, void **item); -int dlstTail(dlst_t *list, void **item); -int dlstNext(dlst_t *list, void **item); -int dlstPrev(dlst_t *list, void **item); -int dlstCurr(dlst_t *list, void **item); -int dlstNextExists(dlst_t *list); -int dlstAddAfterCurr(dlst_t *list, void *item); -int dlstAddBeforeCurr(dlst_t *list, void *item); -int dlstRemove(dlst_t *list, void **item); -#define dlstNumItems(list) ((list)->numItems) - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/epoclib.h --- a/videoeditorengine/h263decoder/inc/epoclib.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for epoclib.cpp. -* -*/ - - -#ifndef _EPOC_LIB -#define _EPOC_LIB - -#include -#include - -#ifdef _DEBUG -#define MALLOC_DEBUG -#endif - -#define EPOCLIB_DS - -//#define FILE RFile -//#define void TAny - -//specific to this program -//#define HANDLE void * - -typedef TUint8 Byte; -typedef TUint8 u_char; -typedef TInt8 int8; -typedef TUint8 u_int8; -typedef TInt16 int16; -typedef TUint16 u_int16; -typedef TInt32 int32; -typedef TUint32 u_int32; -typedef TReal32 float32; -typedef TReal64 float64; - - -typedef unsigned int size_t; - - -#define max(a,b) (((a) > (b)) ? (a) : (b)) -#define min(a,b) (((a) < (b)) ? (a) : (b)) - -#define abs Abs -#define labs Abs - - -EPOCLIB_DS void free(TAny *ptr); - -#ifdef MALLOC_DEBUG -#define malloc(size) debugMalloc(size, __FILE__, __LINE__) -EPOCLIB_DS TAny *debugMalloc(u_int32 size, char *file, int line); -#else -EPOCLIB_DS TAny *malloc(u_int32 size); -#endif -EPOCLIB_DS TAny *realloc(void *memblock, u_int32 size); -#ifdef MALLOC_DEBUG -#define calloc(num, size) debugCalloc(num, size, __FILE__, __LINE__) -EPOCLIB_DS TAny *debugCalloc(u_int32 num, u_int32 size, char *file, int line); -#else -EPOCLIB_DS TAny *calloc(u_int32 num, u_int32 size); -#endif -EPOCLIB_DS TAny *memset(TAny *dest, TInt c, TInt size); -EPOCLIB_DS TAny *memcpy(TAny *dest, const TAny *src, TInt size); -EPOCLIB_DS TAny *memmove(TAny *dest, const TAny *src, u_int32 count); - -#define assert(expr) __ASSERT_DEBUG(expr, User::Panic(_L("assert"), 1)); -EPOCLIB_DS int atoi(const char *nptr); - - -EPOCLIB_DS u_int32 fwrite(const TAny *buffer, u_int32 size, u_int32 count, RFile stream); - -#endif - - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/errcodes.h --- a/videoeditorengine/h263decoder/inc/errcodes.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Error code definitions. -* -*/ - - -#ifndef _ERRCODES_H_ -#define _ERRCODES_H_ - -/* - * Defines - */ - -/* - * Common errors for VDC and FCC - */ - -#define ERR_COM_NULL_POINTER 100 - - -/* - * Bit buffer module errors - */ - -#define ERR_BIB_STRUCT_ALLOC 1000 -#define ERR_BIB_BUFFER_ALLOC 1001 -#define ERR_BIB_FILE_READ 1002 -#define ERR_BIB_NOT_ENOUGH_DATA 1003 -#define ERR_BIB_ALREADY_OPENED 1004 -#define ERR_BIB_FILE_OPEN 1005 -#define ERR_BIB_ALREADY_CLOSED 1006 -#define ERR_BIB_FILE_CLOSE 1007 -#define ERR_BIB_NUM_BITS 1008 -#define ERR_BIB_FILE_NOT_OPEN 1009 -#define ERR_BIB_ILLEGAL_SIZE 1010 -#define ERR_BIB_CANNOT_REWIND 1011 -#define ERR_BIB_FEC_RELOCK 1050 - - -/* - * Variable length code module errors - */ - -#define ERR_VLC_MCBPC_INTRA 8500 -#define ERR_VLC_CBPY 8501 -#define ERR_VLC_MCBPC_INTER 8502 -#define ERR_VLC_MVD 8503 - - -/* - * Motion vector count module errors - */ - -#define ERR_MVC_ALLOC1 1200 -#define ERR_MVC_ALLOC2 1201 -#define ERR_MVC_NO_PREV_MB 1202 -#define ERR_MVC_NEIGHBOUR_NOT_VALID 1203 -#define ERR_MVC_PREV_NOT_VALID 1204 -#define ERR_MVC_PREV_NOT_CODED 1205 -#define ERR_MVC_PREV_INTRA 1206 -#define ERR_MVC_CURR_NOT_VALID 1207 -#define ERR_MVC_CURR_NOT_CODED 1208 -#define ERR_MVC_CURR_INTRA 1209 -#define ERR_MVC_MVDX_ILLEGAL 1250 -#define ERR_MVC_MODE_ILLEGAL 1251 -#define ERR_MVC_X_ILLEGAL 1252 -#define ERR_MVC_Y_ILLEGAL 1253 -#define ERR_MVC_MAX_X_ILLEGAL 1254 -#define ERR_MVC_TIME_ILLEGAL 1255 -#define ERR_MVC_MVX_ILLEGAL 1256 -#define ERR_MVC_MVY_ILLEGAL 1257 -#define ERR_MVC_MVDY_ILLEGAL 1258 -#define ERR_MVC_MVPTR 1260 - - - -/* - * Block module errors - */ - -#define ERR_BLC_TCOEF 8504 -#define ERR_BLC_LEVEL 5001 -#define ERR_BLC_TOO_MANY_COEFS 5002 -#define ERR_BLC_MV_OUTSIDE_PICT 5003 - - -/* - * Core module errors - */ - -/* General errors */ -#define ERR_VDC_MEMORY_ALLOC 2080 -#define ERR_VDC_NO_INTRA 2081 -#define ERR_VDC_INITIALIZE 2082 -#define ERR_VDC_CORRUPTED_INTRA 2083 -#define ERR_VDC_UNEXPECTED_FATAL_ERROR 2084 - -/* Picture Layer errors */ -#define ERR_VDC_PTYPE_BIT1 2048 -#define ERR_VDC_PTYPE_BIT2 2049 -#define ERR_VDC_PTYPE_BIT9_AND_BIT13_MISMATCH 2050 -#define ERR_VDC_SOURCE_FORMAT 2051 -#define ERR_VDC_NO_SIZE 2052 -#define ERR_VDC_ILLEGAL_PQUANT 2053 -#define ERR_VDC_ILLEGAL_TRB 2054 -#define ERR_VDC_ILLEGAL_PSPARE 2055 -#define ERR_VDC_NO_PSC 2056 -#define ERR_VDC_FORMAT_CHANGE 2057 - -/* Group of Blocks Layer errors */ -#define ERR_VDC_ILLEGAL_GN 2112 -#define ERR_VDC_ILLEGAL_GFID 2113 -#define ERR_VDC_ILLEGAL_GQUANT 2114 - - -/* - * Format Conversion Core errors - */ - -#define ERR_CON_UNKNOWN_MODE 3000 -#define ERR_CON_CLIP_ALLOC 3001 -#define ERR_CON_Y_TOO_LARGE 3002 -#define ERR_CON_DITH_INDEX_ILLEGAL 3003 -#define ERR_CON_GREY256_INDEX_ILLEGAL 3004 -#define ERR_CON_UNKNOWN_BIT_DEPTH 3005 -#define ERR_CON_NULL_PALETTE 3006 -#define ERR_CON_PALETTE_EXISTS 3007 -#define ERR_CON_ALLOC 3008 -#define ERR_CON_NO_CUSTOM_PALETTE 3009 -#define ERR_CON_WIN32_ERROR 3010 - -#define ERR_CON_OCT_ALLOC 3100 -#define ERR_CON_OCT_NULL_PTR 3101 -#define ERR_CON_OCT_INDEX_EXISTS 3102 - -#endif - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/h263dapi.h --- a/videoeditorengine/h263decoder/inc/h263dapi.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for external usage of the services provided by -* the Video Decoder Engine. -* -*/ - - -#ifndef _H263DAPI_H_ -#define _H263DAPI_H_ - -#include - -#include "h263dconfig.h" -#include "h263dext.h" -#include "h263dntc.h" - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/h263dconfig.h --- a/videoeditorengine/h263decoder/inc/h263dconfig.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definitions to port vedh263d to Symbian. -* -*/ - - -#ifndef _H263DCONFIG_H_ -#define _H263DCONFIG_H_ - -#include "h263dext.h" - -#if !defined(_DEBUG) && !defined(NDEBUG) - #define _DEBUG -#endif - - - -/* C standard libraries - - header file functions/macros/identifiers used - --------------------------------------------------------------------------- - assert.h assert - string.h memcpy, memset - stdlib.h NULL, free, malloc, calloc, abs - */ - -#if defined(__SYMBIAN32__) -#define __EPOC__ -#include "epoclib.h" -#else -#include -#include -#include -#endif - -/* Memory allocation wrappers for large (> 64 kB) memory chunks. - Used in core, block and convert. Needed when compiling in - systems with segmented memory (DOS, Windows 3.1) */ -#define HUGE -#define MEMCPY memcpy -#define MEMSET memset -#define MALLOC malloc -#define FREE free - - -/* core.h */ -#define VDC_INLINE __inline - -/* debug */ -/* Controlled from the project settings or makefile */ - -/* msgwrap etc. */ -#ifndef BUF_DS - #define BUF_DS -#endif - -#ifdef __MARM__ - #define __cdecl - #define __stdcall -#endif - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/h263dext.h --- a/videoeditorengine/h263decoder/inc/h263dext.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,278 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* A header file for external usage of the services provided by -* the Video Decoder Engine. -* -*/ - - -#ifndef _H263DEXT_H_ -#define _H263DEXT_H_ - - -/* - * Includes - */ - -//#include "renapi.h" -#include "epoclib.h" - -/* - * Defines - */ - -/* _WIN32_EXPLICIT has to be defined before anything else. */ - -/* Return codes */ -#define H263D_OK_BUT_NOT_CODED 4 /* not coded frame, - copied to output as is, - no decoded output generated */ -#define H263D_OK_BUT_BIT_ERROR 3 /* Bit errors detected but frame decoded */ -#define H263D_OK_BUT_FRAME_USELESS \ - 2 /* function behaved normally, but no output - was produced due to too corrupted frame */ -#define H263D_OK_EOS 1 /* End-of-Stream has been reached */ -#define H263D_OK 0 /* the function was successful */ -#define H263D_ERROR -1 /* indicates a general error */ -#define H263D_ERROR_NO_INTRA -2 /* No INTRA frame has been decoded, - decoding cannot be started */ -#define H263D_ERROR_HALTED -3 /* no further decoding possible */ -/* Note: In practice, there is no difference between H263D_ERROR and - H263D_ERROR_HALTED. The caller should react to both error messages - in the same way. They both exist due to compatibility with older - versions of the decoder. */ - - -/* Frame type scope. See h263dFrameType_t (in this file) for descriptions. */ -#define H263D_FTYPE_ALL 0xffffffff -#define H263D_FTYPE_NDEF 0xffffffff -#define H263D_FTYPE_DEF 0 -#define H263D_FTYPE_SIZE 0x00000001 -#define H263D_FTYPE_SNAPSHOT 0x00000002 - - -/* Mode values used in h263dSetStartOrEndCallback to select if the function - scope is in the start of the frame (H263D_CB_START) - or in the end the frame (H263D_CB_END), - or both (H263D_CB_START | H263D_CB_END). */ -#define H263D_CB_START 0x00000001 -#define H263D_CB_END 0x00000002 - - -/* H.263 Annex N submodes */ -#define H263D_BC_MUX_MODE_SEPARATE_CHANNEL 1 /* Separate Logical Channel - submode*/ -#define H263D_BC_MUX_MODE_VIDEO 2 /* VideoMux submode */ - - -/* Error resilience features, see h263dSetErrorResilience for details */ -#define H263D_ERD_FEATURE_STATUS 1 -#define H263D_ERD_FEATURE_CHECK_ALL 2 -#define H263D_ERD_FEATURE_DISCARD_CORRUPTED 3 - -#define H263D_ERD_INTRA_DCT_DOMAIN 0 -#define H263D_ERD_INTRA_PIXEL_DOMAIN 1 - -#define H263D_ERD_INTER_NO_MOTION_COMPENSATION 0 -#define H263D_ERD_INTER_MOTION_COMPENSATION 1 - - -/* Output types, see h263dSetOutputFile for more information */ -#define H263D_OUT_FILE_MODE_FRAME_BY_FRAME 1 -#define H263D_OUT_FILE_MODE_ONE_PER_COMPONENT 2 -#define H263D_OUT_FILE_MODE_ONE_FOR_ALL 3 - - - -/* Temporal/computational scalability levels, - see h263dSetTemporalScalabilityLevel for more details */ -#define H263D_LEVEL_ALL_FRAMES 0 -#define H263D_LEVEL_INTRA_FRAMES 1 - - -/* Calling convention for exported functions */ -#ifndef H263D_CC - #define H263D_CC -#endif - - -/* Calling convention for callback functions declared in the decoder */ -#ifndef H263D_CALLBACK - #define H263D_CALLBACK -#endif - - -/* Declaration specifier for exported functions */ -#ifndef H263D_DS - #define H263D_DS -#endif - - -/* - * Structs and typedefs - */ - -/* size_t */ - typedef unsigned int size_t; - - -/* {{-output"h263dHInstance_t_info.txt" -ignore"*" -noCR}} - h263dHInstance_t is used as a unique identifier of a H.263 Video Decoder - instance. - The type can be casted to u_int32 or void pointer and then back to - h263dHInstance_t without any problems. - {{-output"h263dHInstance_t_info.txt"}} */ - -/* {{-output"h263dHInstance_t.txt"}} */ -typedef void * h263dHInstance_t; -/* {{-output"h263dHInstance_t.txt"}} */ - - -/* {{-output"h263dFrameType_t_info.txt" -ignore"*" -noCR}} - This structure is used to define a frame type scope for some setting - functions. - Currently, there are three scopes: the default scope (H263D_FTYPE_DEF), - the frame size scope (H263D_FTYPE_SIZE) and the snapshot scope - (H263D_FTYPE_SNAPSHOT). If a setting is defined for a particular size, - all frames having that size will be handled according to the setting, - i.e. the frame size scope overrides the default scope. Later on, it may - be possible to add more frame types scopes, like the enchancement layer - number or the snapshot tag (Annex L.8. of the H.263 recommendation). - Then, the scope order must also be defined. For example, if there are - two settings, one for a particular size and one for a particular enhancement - layer. If a frame fulfills both scopes, one has to know which scope has - the priority, e.g. that the frame has to be handled according to the - enchancement layer setting. There can also be a combination of scopes, - e.g. some setting may be defined for a particular frame size and - enhancement layer. - {{-output"h263dFrameType_t_info.txt"}} */ - -/* {{-output"h263dFrameType_t.txt"}} */ -typedef struct { - u_int32 scope; /* the scope of the frame type setting: - H263D_FTYPE_ALL - This setting overrides all previous settings, - i.e. it is valid for all frame types. - H263D_FTYPE_DEF - is used to define a setting for frame types - which do not have a specific setting of their - own. - H263D_FTYPE_SIZE - is used to define a setting for a particular - frame size. - - H263D_FTYPE_SNAPSHOT - is used to define a setting for snapshot - frames. - - For internal use only: - H263D_FTYPE_NDEF - is used in querying functions to solve the scope - depending on the parameters which are used. - All parameters must be set. - */ - - int width; - int height; /* width and height of the frame which is in the scope - of the setting. These parameters are valid - only if scope indicates H263D_FTYPE_SIZE. */ - u_char fSnapshot; /* snapshot flag, valid only if scope is - H263D_FTYPE_SNAPSHOT */ -} h263dFrameType_t; -/* {{-output"h263dFrameType_t.txt"}} */ - - -/* Used in h263dOpen_t to pass a callback function to call when decoding - has to stopped. */ -typedef void (H263D_CALLBACK *h263dDecodingFinishedCallback_t) (void *); - - - -/* Prototype for callback function related to h263dSetStartOrEndCallback. - See the function description for more details. */ -typedef void (H263D_CALLBACK *h263dStartOrEndCallback_t) - (u_int32, u_int32, void *); - -/* Prototype for callback function related to h263dSetStartOrEndSnapshotCallback. - See the function description for more details. */ -typedef void (H263D_CALLBACK *h263dStartOrEndSnapshotCallback_t) (u_int32, u_int32, void *); - -/* Prototype for callback function related to h263dSetReportPictureSizeCallback. - See the function description for more details. */ -typedef void (H263D_CALLBACK *h263dReportPictureSizeCallback_t) (void *, int, int); - -typedef struct { - int fExist; /* 1 or 0 */ - u_int8 data[255]; /* header data */ - int length; /* length of header data */ -} h263dMPEG4Header_t; - -/* {{-output"h263dOpen_t_info.txt" -ignore"*" -noCR}} - This structure is used with the h263dOpen function to give the necessary - data for opening a new H.263 Video Decoder Engine instance. - {{-output"h263dOpen_t_info.txt"}} */ - -/* {{-output"h263dOpen_t.txt"}} */ -typedef struct { - int numPreallocatedFrames; /* Number of preallocated frame memories */ - - int lumWidth; /* Size of preallocated frame memories */ - int lumHeight; - - int fRPS; /* 1 = Reference Picture Selection mode in use */ - - int numReferenceFrames; /* number of reference frames in RPS mode */ - - h263dDecodingFinishedCallback_t decodingFinishedCallback; - /* callback function to call when no data has - been decoded for a while */ - - int decodingFinishedIdleTimeInMSec; - /* number of milliseconds to go by until - decodingFinishedCallback is called */ - - h263dMPEG4Header_t mpeg4Header; - /* MPEG-4 header received via H.245 */ - - size_t freeSpace; /* Used internally */ -} h263dOpen_t; -/* {{-output"h263dOpen_t.txt"}} */ - - -/* - * Function prototypes - */ - -H263D_DS int H263D_CC h263dFree( - void); - -H263D_DS int H263D_CC h263dLoad( - void); - -H263D_DS int H263D_CC h263dSetStartOrEndCallback( - h263dHInstance_t hInstance, - u_int32 mode, - h263dFrameType_t *frameType, - h263dStartOrEndCallback_t callback, - u_int32 param); - - -H263D_DS int H263D_CC h263dSetReportPictureSizeCallback( - h263dHInstance_t hInstance, - h263dReportPictureSizeCallback_t callback); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/h263dmai.h --- a/videoeditorengine/h263decoder/inc/h263dmai.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,246 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* A header file defining the h.263 decoder API. -* -*/ - - -#ifndef H263DMAIN_H -#define H263DMAIN_H - -#include - - -/* - * Structs and typedefs - */ -/* This structure is used to indicate the operating mode. */ - -/* Time change for merging MPEG-4 clips */ -typedef struct MPEG4TimeParameter -{ - int modulo_time_base; /* the time base of the video clip representing one second of duration */ - int time_inc; /* the time increment from the synchronization point marked by modulo_time_base */ -} tMPEG4TimeParameter; - -/* Editing parameters passed to decoder for compressed domain editing */ -typedef struct -{ - TInt aColorEffect; /* special color effect (None/B&W/ColorTone) */ - TInt aColorToneU; /* color tone value for U */ - TInt aColorToneV; /* color tone value for V */ - TBool aGetVideoMode; /* true if we need to get mode information from VOL */ - TBool fModeChanged; /* true if bitstream mode needs to be changed (transcoding needed within MPEG-4) */ - TBool fHaveDifferentModes; /* true if different MPEG-4 modes exist within movie */ - TBool aGetDecodedFrame; /* true if we need to return fully decoded frame */ - TInt aFrameOperation; /* type of decoding operation neded: 1=EDecodeAndWrite,2=EDecodeNoWrite, 3=EWriteNoDecode */ - TInt aVideoClipNumber; /* the index number of the video clip that this frame is part of */ - TInt aSMSpeed; /* slow motion speed (25-100) */ - - TInt *aTrP; /* time increment value of previous frame */ - TInt *aTrD; /* time duration of previous frame */ - tMPEG4TimeParameter * aMPEG4TimeStamp; /* time stamp of MPEG-4 frame */ - TInt aMPEG4DurationInMs; /* time duration of MPEG-4 frame in millisec */ - TInt *aMPEG4TargetTimeResolution; /* time increment resolution of output video - returned from the decoder */ - TInt aFirstFrameQp; /* QP of first frame, used for MPEG4 color toning */ - - TInt aOutputVideoFormat; /* video format of output movie */ - TInt iTimeIncrementResolution; /* time increment resolution for current frame, if MPEG-4 */ - TInt vosHeaderSize; /* VOS header size for current clip, if MPEG-4 */ - TInt streamMode; /* current bitstream mode (data partition, regular, etc.) */ - -}vdeDecodeParamters_t; - -/* - * Classes - */ -class MVideoRenderer; - -/** -* CVedH263Dec abstract class for H.263 decoder -* -* @lib vedh263d -* @since -*/ -class CVedH263Dec : public CBase - { - - public: // Constants - - // post-filter type - enum TPostFilter - { - ENoFilter = 0, - EH263AnnexJFilter, - EH263TMNFilter, - ENokiaFilter - }; - - // color effect - enum TColorEffect - { - EColorEffectNone = 0, - EColorEffectBlackAndWhite = 1, - EColorEffectToning = 2 // ColorToning feature - }; - - // error codes - enum TErrorCode - { - EInternalAssertionFailure = -10000, - EDecoderFailure = -10001, - EDecoderNoIntra = -10002, - EDecoderCorrupted = -10003 - }; - - - public: - - /** - * Two-phased constructor. - * @aFrameSize Indicates the size of the input frames which will be decoded - * @aNumReferencePictures indicates the number of reference pictures - */ - - IMPORT_C static CVedH263Dec* NewL(const TSize aFrameSize, const TInt aNumReferencePictures); - - public: // new functions - - /** - * Sets the renderer object to be used - * @since - * @param aRenderer Pointer to the renderer object - * @return void - */ - virtual void SetRendererL(MVideoRenderer* aRenderer) = 0; - - /** - * Sets the post-filter to be used in decoding - * @since - * @param aFilter filter to be used - * @return void - */ - virtual void SetPostFilterL(const TPostFilter aFilter) = 0; - - /** - * Checks if the given frame contains valid data which can be displayed - * @since - * @param aFrame Frame to be checked - * @return TBool ETrue if frame is valid - */ - virtual TBool FrameValid(const TAny* aFrame) = 0; - - /** - * Retrieves pointers to Y/U/V data for the given frame - * @since - * @param aFrame Pointer to the frame - * @param aYFrame top-left corner of the Y frame - * @param aUFrame top-left corner of the U frame - * @param aVFrame top-left corner of the V frame - * @param aFrameSize - * @return TInt error code - */ - virtual TInt GetYUVBuffers(const TAny* aFrame, TUint8*& aYFrame, TUint8*& aUFrame, - TUint8*& aVFrame, TSize& aFrameSize) = 0; - - /** - * Returns the given output frame to the decoder after it is not needed - * @since - * @param aFrame Frame to be returned - * @return void - */ - virtual void FrameRendered(const TAny* aFrame) = 0; - - /** - * Gets a pointer the latest decoded frame (YUV concatenated) - * @since - * @param aFrame Frame to be returned - * @return TUint8* pointer to the frame - */ - virtual TUint8* GetYUVFrame() = 0; - - /** - * Decodes / transcodes a compressed frame - * @since - * @param aInputBuffer Descriptor for the input bitstream buffer - * @param aOutputBuffer Descriptor for the output bitstream buffer - * @param aFirstFrame Flag (input/output) for the first frame, non-zero if the first frame is being decoded - * @param aBytesDecoded Number of bytes that were decoded to produce the output frame - * @param aColorEffect Color effect to be applied - * @param aGetDecodedFrame ETrue if the output frame needs to be retrieved from the decoder later - * @param aFrameOperation Operation to be performed: 1=EDecodeAndWrite,2=EDecodeNoWrite, 3=EWriteNoDecode - * @param aTrP - * @param aTrD - * @param aVideoClipNumber Number of the video clip - * @param aSMSpeed Slow motion speed, max = 1000 - * @param aDecoderInfo pointer to editing param struct - * @param aDataFormat Format of input/output data: 1 = H.263, 2 = MPEG-4 - * @return void - */ - - virtual void DecodeFrameL(const TPtrC8& aInputBuffer, TPtr8& aOutputBuffer, - TBool& aFirstFrame, TInt& aBytesDecoded, - vdeDecodeParamters_t *aDecoderInfo) = 0; - - virtual void DecodeFrameL(const TPtrC8& aInputBuffer, TPtr8& aOutputBuffer, - TBool& aFirstFrame, TInt& aBytesDecoded, - const TColorEffect aColorEffect, - const TBool aGetDecodedFrame, TInt aFrameOperation, - TInt* aTrP, TInt* aTrD, TInt aVideoClipNumber, TInt aSMSpeed, - TInt aDataFormat) = 0; - - - /** - * Decodes a compressed frame - * @since - * @param aInputBuffer Descriptor for the input bitstream buffer - * @param aFirstFrame Flag for the first frame, non-zero if the first frame is being decoded - * @param aBytesDecoded Number of bytes that were decoded to produce the output frame - * @param aDataFormat Format of input/output data: 1 = H.263, 2 = MPEG-4 - * @return void - */ - virtual void DecodeFrameL(const TPtrC8& aInputBuffer, TBool& aFirstFrame, TInt& aBytesDecoded, - TInt aDataFormat) = 0; - - /** - * Check the VOS header of one frame - * @since - * @param aInputBuffer Descriptor for the input bitstream buffer - * @return TBool ETrue the buffer is changed - */ - virtual TBool CheckVOSHeaderL(TPtrC8& aInputBuffer) = 0; - -}; - -/** -* MVideoRenderer Renderer interface for the H.263 decoder -* -* @lib vedh263d -* @since -*/ - -class MVideoRenderer -{ - -public: - virtual TInt RenderFrame(TAny* aFrame) = 0; - -}; - - -#endif - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/h263dntc.h --- a/videoeditorengine/h263decoder/inc/h263dntc.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for control interface for threadless video decoder. -* -*/ - - - -#ifndef _H263DNTC_H_ -#define _H263DNTC_H_ - - -/* - * Includes - */ - -#include "h263dext.h" -#include "h263dmai.h" - -/* - * Function prototypes - */ - -H263D_DS void H263D_CC h263dClose(h263dHInstance_t hInstance); - -H263D_DS int H263D_CC h263dDecodeFrameL( - h263dHInstance_t hInstance, - void *pStreamBuffer, - void *pOutStreamBuffer, - unsigned streamBufferSize, - u_char *fFirstFrame, - TInt *frameSize, - TInt *outframeSize, - vdeDecodeParamters_t *aDecoderInfo); - -int H263D_CC h263dGetLatestFrame( - h263dHInstance_t hInstance, - u_char **ppy, u_char **ppu, u_char **ppv, - int *pLumWidth, int *pLumHeight, - int *pFrameNum); - -H263D_DS int H263D_CC h263dIsPB( - h263dHInstance_t hInstance, - void *frameStart, - unsigned frameLength); - -H263D_DS int H263D_CC h263dIsIntra( - h263dHInstance_t hInstance, - void *frameStart, - unsigned frameLength); - -H263D_DS h263dHInstance_t H263D_CC h263dOpen(h263dOpen_t *openParam); - -int GetNewTrValue(int aTrCurOrig, int* aTrPrevNew, int* aTrPrevOrig, int aSMSpeed); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/idct.h --- a/videoeditorengine/h263decoder/inc/idct.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Inverse Discrete Cosine Transform (IDCT) module header. -* -*/ - - -#ifndef _IDCT_H_ -#define _IDCT_H_ - -/* - * Function prototypes - */ - -void init_idct(void); -void idct(int *block); - - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/list.h --- a/videoeditorengine/h263decoder/inc/list.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for list.cpp. -* -*/ - - -#ifndef _LIST_H_ -#define _LIST_H_ - - -/* - * Defines - */ - -#define LST_ITEM_SKELETON \ - void *next; - -/* - * Typedefs - */ - -/* A skeleton of a list item type. - Each real list item type must include these definitions in the beginning - of the structure. This structure has no use as such outside this module. */ -typedef struct lstListItem_s { - void *next; -} lstListItem_t; - -/* FIFO list */ -typedef struct { - lstListItem_t *head; - lstListItem_t *tail; - int numItems; -} fifo_t; - -/* LIFO list (stack) */ -typedef struct { - lstListItem_t *head; -} lifo_t; - -/* General linked list */ -typedef struct { - lstListItem_t *head; - lstListItem_t *prev; - lstListItem_t *curr; - int numItems; -} lst_t; - - -/* - * Function prototypes - */ - -/* FIFO list functions */ -int fifoOpen(fifo_t *list); -int fifoClose(fifo_t *list); -int fifoPut(fifo_t *list, void *item); -int fifoGet(fifo_t *list, void **item); -int fifoPeek(fifo_t *list, void **item); -#define fifoNumItems(list) ((list)->numItems) - -/* LIFO list functions */ -int lifoOpen(lifo_t *list); -int lifoClose(lifo_t *list); -int lifoPut(lifo_t *list, void *item); -int lifoGet(lifo_t *list, void **item); - -/* General linked list functions */ -int lstOpen(lst_t *list); -int lstClose(lst_t *list); -int lstHead(lst_t *list, void **item); -int lstTail(lst_t *list, void **item); -int lstEnd(lst_t *list); -int lstCurr(lst_t *list, void **item); -int lstNext(lst_t *list, void **item); -int lstNextExists(lst_t *list); -int lstAdd(lst_t *list, void *item); -int lstRemove(lst_t *list, void **item); -#define lstNumItems(list) ((list)->numItems) - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/mpegcons.h --- a/videoeditorengine/h263decoder/inc/mpegcons.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definition of constants used in MPEG-4 bitstream decoding. -* -*/ - - -#ifndef _MPEGCONS_H_ -#define _MPEGCONS_H_ - -#include "epoclib.h" - -/* - * Defines - */ - -/* end of bitstream code - inserted by the decoder if no new input buffer is got (bibNewBuffer()) */ - -#define MP4_EOB_CODE 0x1B1 -#define MP4_EOB_CODE_LENGTH 32 - -/* session layer and vop layer start codes */ - -#define MP4_VOS_START_CODE 0x1B0 -#define MP4_VOS_START_CODE_LENGTH 32 - -#define MP4_VO_START_CODE 0x1B5 -#define MP4_VO_START_CODE_LENGTH 32 - -#define MP4_VID_START_CODE 0x8 -#define MP4_VID_START_CODE_LENGTH 27 -#define MP4_VID_ID_CODE_LENGTH 5 - -#define MP4_VOL_START_CODE 0x12 -#define MP4_VOL_START_CODE_LENGTH 28 -#define MP4_VOL_ID_CODE_LENGTH 4 - -#define MP4_GROUP_START_CODE 0x1B3 -#define MP4_GROUP_START_CODE_LENGTH 32 - -#define MP4_VOP_START_CODE 0x1B6 -#define MP4_VOP_START_CODE_LENGTH 32 - -#define MP4_USER_DATA_START_CODE 0x1B2 - -/* motion and resync markers used in error resilient mode */ - -#define MP4_DC_MARKER 438273 -#define MP4_DC_MARKER_LENGTH 19 - -#define MP4_MOTION_MARKER_COMB 126977 -#define MP4_MOTION_MARKER_COMB_LENGTH 17 - -#define MP4_RESYNC_MARKER 1 -#define MP4_RESYNC_MARKER_LENGTH 17 - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/renapi.h --- a/videoeditorengine/h263decoder/inc/renapi.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* A header file for external usage of the services provided by -* the Video Renderer engine. -* -*/ - - -#ifndef _RENAPI_H_ -#define _RENAPI_H_ - -/* - * Includes - */ - - - - -/* - * Defines - */ - -/* Return values */ -#define REN_ERROR_BAD_IMAGE_SIZE -4 -#define REN_ERROR_BAD_FORMAT -3 -#define REN_ERROR_HALTED -2 -#define REN_ERROR -1 -#define REN_OK 1 -#define REN_OK_PLAYING_COMPLETE 2 -#define REN_OK_RESOURCE_LEAK 3 - -/* Defines for the flags member of renExtDrawParam_t */ -#define REN_EXTDRAW_NEW_SOURCE 1 -#define REN_EXTDRAW_COPY_NOT_CODED 2 -#define REN_EXTDRAW_NO_STATUS_CALLBACK 32 - - - -/* - * Structs and typedefs - */ - - - - -/* {{-output"renbmihi.txt" -ignore"*" -noCR}} - renBitmapInfoHeader_t is used to store the header information of - (device-independent) bitmaps such as individual video frames. - {{-output"renbmihi.txt"}} */ - -/* {{-output"renbmiht.txt"}} */ - -typedef struct { - u_int32 biSize; - int32 biWidth; - int32 biHeight; - u_int32 biSizeImage; -} renBitmapInfoHeader_t; -/* {{-output"renbmiht.txt"}} */ - - - - -/* {{-output"renExtDrawParam_t_info.txt" -ignore"*" -noCR}} - renExtDrawParam_t is used in a renDrawItem_t structure to provide - additional information which cannot be included in a renDrawParam_t - structure. - {{-output"renExtDrawParam_t_info.txt"}} */ - -/* {{-output"renExtDrawParam_t.txt"}} */ -typedef struct { - u_int32 size; /* The size of this structure in bytes, - if 0, no macroblock information is used - and the whole frame is converted */ - - u_int32 flags; /* REN_EXTDRAW_NEW_SOURCE = use this frame as - a new source for macroblock copying - (for subsequent frames until a new source - frame appears), - REN_EXTDRAW_COPY_NOT_CODED = use copying of - not coded macroblocks from the source frame, - REN_EXTDRAW_SNAPSHOT = mark this frame as - a snapshot - REN_EXTDRAW_NO_STATUS_CALLBACK = no status callback - function is called after this frame has been - processed - */ - - u_int32 rate; /* Frames / second = rate / scale, */ - u_int32 scale; /* These values replace the current values and affect - the subsequent frames. */ - - /* The values in this section are valid only if - the REN_EXTDRAW_COPY_NOT_CODED flag is on. */ - int numOfMBs; /* The number of macroblocks (16 x 16 blocks) in the - frame. */ - int numOfCodedMBs; /* The number of coded macroblocks in the frame - (compared to the previous reference frame) */ - u_char *fCodedMBs; /* one-dimensional array of u_char - flags indicating if the corresponding macroblock - in the normal scan-order is coded (1) or not (0) */ - -} renExtDrawParam_t; -/* {{-output"renExtDrawParam_t.txt"}} */ - - -#define RENDRAWPARAM_NOSTATUSCALLBACK 0x00000001L - /* Do not call the status callback function after - the processing of this frame */ - -/* {{-output"renDrawParam_t_info.txt" -ignore"*" -noCR}} - renDrawParam_t contains parameters for drawing video data to the screen. - This structure is used with the renDraw function. - renDrawParam_t is compatible with the ICDRAW type introduced by - the Win32 Video Compression Manager. The lpData member of renBasicDrawParam_t - must point to an address where the upper-left corner pixel of the Y frame - to be shown lies. The Y frame data must be in scanning order. The U frame - data must follow the Y frame data in scanning order, and similarly - the V frame data must follow the U frame data. - {{-output"renDrawParam_t_info.txt"}} */ - -/* {{-output"renDrawParam_t.txt"}} */ -typedef struct { - u_int32 dwFlags; /* Flags */ - void *lpFormat; /* Pointer to a renBitmapInfoHeader_t structure */ - void *lpData; /* Address of the data to render */ - u_int32 cbData; /* Ignored */ - int32 lTime; /* The frame number telling the time when this frame - should be drawn */ -} renDrawParam_t; -/* {{-output"renDrawParam_t.txt"}} */ - - - -/* {{-output"renDrawItem_t_info.txt" -ignore"*" -noCR}} - renDrawItem_t contains parameters for drawing video image to the screen. - In addition, it holds the returning information for the image. - This structure is used with the renDraw function. - {{-output"renDrawItem_t_info.txt"}} */ - -/* {{-output"renDrawItem_t.txt"}} */ -typedef struct { - renDrawParam_t param; - /* Basic, ICDRAW compatible parameters */ - - renExtDrawParam_t extParam; - /* Extended parameters */ - -} renDrawItem_t; -/* {{-output"renDrawItem_t.txt"}} */ - - - - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/rendri.h --- a/videoeditorengine/h263decoder/inc/rendri.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* A header file for the draw item abstract data type. -* -*/ - - -#ifndef _RENDRI_H_ -#define _RENDRI_H_ - - -/* - * Includes - */ - -#include "renapi.h" - - -/* - * Macros - */ - -/* {{-output"renDriMacros.txt"}} */ -/* - * The following macros return a specific feature of the draw item - * passed as a parameter. - * - * - * renDriNewSourceFlag - * returns 1, if the draw item is a new source for macroblock copying, - * otherwise, it returns 0, - * see REN_EXTDRAW_NEW_SOURCE in renExtDrawParam_t - * - * renDriCopyNotCodedFlag - * returns 1, if the draw item contains not-coded macroblock info, - * otherwise, it returns 0, - * see REN_EXTDRAW_COPY_NOT_CODED in renExtDrawParam_t - * - * renDriSnapshotFlag - * returns 1, if the draw item is marked as a snapshot, - * otherwise, it returns 0, - * see REN_EXTDRAW_SNAPSHOT in renExtDrawParam_t - * - * renDriFreezeReleaseFlag - * returns 1, if the draw item ends picture freezing, - * otherwise, it returns 0, - * see REN_EXTDRAW_SNAPSHOT in renExtDrawParam_t - * - * renDriNoStatusCallbackFlag - * returns 1, if no status callback is called after this draw item is, - * processed, - * otherwise, it returns 0, - * see REN_EXTDRAW_NO_STATUS_CALLBACK in renExtDrawParam_t - * - * renDriRate - * returns the rate parameter of renExtDrawParam_t - * - * renDriScale - * returns the scale parameter of renExtDrawParam_t - * - * renDriCodedMBs - * returns a pointer to an unsigned char array of flags of coded MBs, - * the array is indexed by scan-ordered macroblock index, - * 1 means that the corresponding macroblock is coded, - * 0 means that the corresponding macroblock is not coded - * - * renDriNumOfMBs - * returns the number of macroblocks in the draw item - * - * renDriNumOfCodedMBs - * returns the number of coded macroblocks in the draw item - * - * renDriBitmapWidth - * returns the width of the bitmap to be displayed (in pixels) - * - * renDriBitmapHeight - * returns the height of the bitmap to be displayed (in pixels) - * - * renDriBitmapImageSize - * returns the size of the bitmap to be displayed (in bytes) - * - * renDriBitmapCompression - * returns the compression ID number of the draw item - * - * renDriFrameNumber - * returns the frame number of the draw item - * (the lTime Parameter of renDrawParam_t) - * - * renDriRetFrame - * returns the pointer to the function where to return the processed draw - * item (the retFrame param of renDrawItem_t) - * - * renDriRetFrameParam - * returns the parameter to pass to the function where to return - * the processed draw item (the retFrameParam of renDrawItem_t) - * - */ - -#define renDriNewSourceFlag(drawItem) \ - (((drawItem)->extParam.flags & REN_EXTDRAW_NEW_SOURCE) > 0) - -#define renDriCopyNotCodedFlag(drawItem) \ - (((drawItem)->extParam.flags & REN_EXTDRAW_COPY_NOT_CODED) > 0) - -#define renDriRate(drawItem) \ - ((drawItem)->extParam.rate) - -#define renDriCodedMBs(drawItem) \ - ((drawItem)->extParam.fCodedMBs) - -#define renDriNumOfMBs(drawItem) \ - ((drawItem)->extParam.numOfMBs) - -#define renDriNumOfCodedMBs(drawItem) \ - ((drawItem)->extParam.numOfCodedMBs) - -#define renDriBitmapWidth(drawItem) \ - (((renBitmapInfoHeader_t *) ((drawItem)->param.lpFormat))->biWidth) - -#define renDriBitmapHeight(drawItem) \ - (labs(((renBitmapInfoHeader_t *) ((drawItem)->param.lpFormat))->biHeight)) - -#define renDriBitmapImageSize(drawItem) \ - (((renBitmapInfoHeader_t *) ((drawItem)->param.lpFormat))->biSizeImage) - -#define renDriFrameNumber(drawItem) \ - ((drawItem)->param.lTime) - - -/* - * Function prototypes - */ - -renDrawItem_t * renDriAlloc(int width, int height, int fYuvNeeded); - -void renDriCopyParameters( - renDrawItem_t *dstDrawItem, - const renDrawItem_t *srcDrawItem); - -void renDriCopyFrameData( - renDrawItem_t *dstDrawItem, - const renDrawItem_t *srcDrawItem); - -void renDriFree(renDrawItem_t *drawItem); - -int renDriYUV(renDrawItem_t *drawItem, - u_char **y, u_char **u, u_char **v, int *width, int *height); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/stckheap.h --- a/videoeditorengine/h263decoder/inc/stckheap.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Macros for stack/heap allocation. -* -*/ - - -#ifndef _STCKHEAP_H_ -#define _STCKHEAP_H_ - -/* - * Include files - */ - - -/* - * Internal macros - * (Not supposed to be used in any other file) - */ - -/* Concatenates two strings */ -#define SOH_CAT_STRINGS(item1, item2) item1 ## item2 - -/* Concatenates two macros */ -#define SOH_CAT_MACROS(macro1, macro2) SOH_CAT_STRINGS(macro1, macro2) - - -/* - * Public macros - */ - -/* - * SOH_DEFINE - * - * Parameters: - * type_t type name - * varName variable name - * - * Function: - * This macro defines a variable called varName of type type_t *. - * - * Example: - * SOH_DEFINE(int, pValue); defines a variable called pValue of type int *. - */ - -/* - * SOH_ALLOC - * - * Parameters: - * type_t type name - * varName variable name - * - * Function: - * This macro allocates and initializes a variable previously created - * with SOH_DEFINE. - * - * Example: - * SOH_ALLOC(int, pValue); allocates an int variable and sets pValue to - * point to it. - */ - -/* - * SOH_DEALLOC - * - * Parameters: - * varName variable name - * - * Function: - * This macro deallocates a variable previously created - * with SOH_DEFINE and SOH_ALLOC. - * - * Example: - * SOH_DEALLOC(pValue); deallocates pValue. - */ - - -/* Set the pointer to NULL in order to allow safe usage of SOH_DEALLOC - without a call to SOH_ALLOC first. */ -#define SOH_DEFINE(type_t, varName) \ - type_t *varName = NULL - -#define SOH_ALLOC(type_t, varName) \ - varName = (type_t *) malloc(sizeof(type_t)) - -#define SOH_DEALLOC(varName) \ - free(varName) - - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/sync.h --- a/videoeditorengine/h263decoder/inc/sync.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Sync codes. -* -*/ - - -#ifndef _SYNC_H_ -#define _SYNC_H_ - - -#include "epoclib.h" - -#include "biblin.h" - - -/* - * Defines - */ - -/* Return values */ -#define SNC_NO_SYNC 0 /* No synchronization code found */ -#define SNC_PSC 1 /* Picture Start Code */ -#define SNC_GBSC 2 /* GOB Start Code */ -#define SNC_EOS 4 /* End of Sequence */ - -/*** MPEG-4 REVISION ***/ -#define SNC_VIDPACK 5 /* Video Packet resynchronization marker */ -#define SNC_VOS 6 /* Video Object Sequence (VOS) Start Code */ -#define SNC_VOP 7 /* Video Object Plane (VOP) Start Code */ -#define SNC_GOV 8 /* Group of VOPs (GOV) Start Code */ -#define SNC_USERDATA 9 /* User Data Start Code */ -#define SNC_EOB 10 /* Visual Sequence End Code */ -#define SNC_VID 11 /* Other Video Object Header Start Codes */ -#define SNC_PATTERN 12 /* The search pattern in sncSeekBitPattern */ -/*** End MPEG-4 REVISION ***/ - -#define SNC_STUFFING 13 /* Stuffing in the end of a buffer containing - one frame */ - -/* See sncRewindAndSeekNewSync for description. */ -#define SNC_DEFAULT_REWIND -1 - - -/* - * Function prototypes - */ - -int sncCheckSync(bibBuffer_t *buffer, int *numStuffBits, int16 *error); - -int sncRewindAndSeekNewSync(u_int32 numBitsToRewind, bibBuffer_t *buffer, - int16 *error); - -int sncSeekFrameSync(bibBuffer_t *buffer, int16 *error); - -int sncSeekSync(bibBuffer_t *buffer, int16 *error); - - int sncCheckMpegVOP(bibBuffer_t *buffer, int16 *error); - int sncCheckMpegSync(bibBuffer_t *buffer, int f_code, int16 *error); - int sncRewindAndSeekNewMPEGSync(int earliestBitPos, bibBuffer_t *buffer, - int f_code, int16 *error); - int sncSeekMPEGSync(bibBuffer_t *buffer, int f_code, int16 *error); - int sncSeekMPEGStartCode(bibBuffer_t *buffer, int f_code, int skipVPSync, int checkUD, int16 *error); - int sncSeekBitPattern(bibBuffer_t *buffer, u_int32 BitPattern, - int BitPatternLength, int16 *error); - int sncRewindStuffing(bibBuffer_t *buffer, int16 *error); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vdc263.h --- a/videoeditorengine/h263decoder/inc/vdc263.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,351 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* An application programming interface for core functions of -* video decoder. -* -*/ - - -#ifndef _VDC263_H_ -#define _VDC263_H_ - - -/* - * Includes - */ - - -#include "biblin.h" -#include "vdeims.h" - - -/* - * Defines - */ - -/* Return values */ -// unify error codes -#define VDC_OK_BUT_NOT_CODED H263D_OK_BUT_NOT_CODED - /* not coded frame, - copied to output as is, - no decoded output generated */ -#define VDC_OK_BUT_FRAME_USELESS H263D_OK_BUT_FRAME_USELESS - /* Decoder behaved normally the decoded - frame(s) should not be displayed since - it is too heavily corrupted. */ - -#define VDC_OK_BUT_BIT_ERROR H263D_OK_BUT_BIT_ERROR - /* The decoded frame(s) are degraded due - to transmission errors but can be - displayed due to successful error - concealment. */ - -#define VDC_OK H263D_OK /* Everything ok. */ - -#define VDC_ERR H263D_ERROR /* An unexpected processing error - occured. */ -#define VDC_ERR_NO_INTRA H263D_ERROR_NO_INTRA /* No INTRA frame has been decoded - and the current frame is INTER */ - -/* vdcPictureHeader_t and vdxSEI_t related definitions */ -#define VDX_MAX_BYTES_IN_PIC_HEADER 44 - /* Maximum number of bytes allowed in - SEI picture header repetition. - - Picture headers not including - BCM (Annex N video-mux back-channel), - RPRP (Annex P warping parameters), and - Annex U - allocate 152 bits = 19 bytes in - the worst case. - Our decoder does not support the features - mentioned above. However, to ensure - that introduction of any of the mentioned - tools would not break this mechanism, - a relatively large buffer is allocated - for picture header copies. Note that - Annex U does not have an upper limit - for picture header lengths. */ - - -/* - * Structs and typedefs - */ - -/* {{-output"vdcHInstance_t_info.txt" -ignore"*" -noCR}} - vdcHInstance_t is used as a unique identifier of a VDC instance. - The type can be casted to u_int32 or void pointer and then back to - vdcHInstance_t without any problems. - {{-output"vdcHInstance_t_info.txt"}} */ - -/* {{-output"vdcHInstance_t.txt"}} */ -typedef void * vdcHInstance_t; -/* {{-output"vdcHInstance_t.txt"}} */ - - -/* The following vdx data types are defined here, because VDC exports - these structures (see vdcDecodePictureHeader). */ - -/* - * vdxPictureHeader_t - */ - -/* {{-output"vdxPictureHeader_t_info.txt" -ignore"*" -noCR}} - The vdxGetPictureHeader function uses this structure to return the picture - header parameters. - {{-output"vdxPictureHeader_t_info.txt"}} */ - -/* {{-output"vdxPictureHeader_t.txt"}} */ -typedef struct { - /* The following fields are always set */ - int numBits; /* number of bits in the picture header, - including PSC, excluding PSTUFF, PSUPP and - PEI */ - - int tr; /* the TR field or a combination of ETR and TR - if ETR is used */ - - int fSplitScreen; - int fDocumentCamera; - int fFreezePictureRelease; - - int pictureType; /* Picture type is one of the following: - VDX_PIC_TYPE_I INTRA - VDX_PIC_TYPE_P INTER - VDX_PIC_TYPE_PB PB (Annex G) - VDX_PIC_TYPE_IPB Improved PB - VDX_PIC_TYPE_B B (Annex O) - VDX_PIC_TYPE_EI EI (Annex O) - VDX_PIC_TYPE_EP EP (Annex O) */ - - int fPLUSPTYPE; /* 0 = no PLUSPTYPE, 1 = PLUSPTYPE exists */ - - int cpm; /* The CPM field */ - int psbi; /* The PSBI field, valid only if cpm == 1 */ - - int pquant; /* The PQUANT field */ - int pquantPosition; /* Number of bits preceding the PQUANT field, - including PSC, excluding PSTUFF */ - - /* The following fields are set - if pictureType == VDX_PIC_TYPE_PB || pictureType == VDX_PIC_TYPE_IPB */ - int trb; /* The TRB field */ - int dbquant; /* The DBQUANT field */ - - /* The following fields are set if fPLUSPTYPE == 0 || ufep == 1 */ - int lumWidth; /* the width and height of the luminance */ - int lumHeight; /* image */ - - int fUMV; /* Unrestricted Motion Vector Mode */ - int fSAC; /* Syntax-based Arithmetic Coding Mode */ - int fAP; /* Advanced Prediction Mode */ - - /* The following fields are set if fPLUSPTYPE == 1 */ - int ufep; /* The UFEP field */ - - int fRPR; /* Reference Picture Resampling Mode */ - int fRRU; /* Reduced-Resolution Update Mode */ - int rtype; /* Rounding type (RTYPE) */ - - - /* If Annex O is in use */ - int elnum; /* Enhancement layer number */ - - /* If the Reference Picture Selection mode is in use */ - int trpi; /* 1 = trp is valid */ - int trp; /* Temporal reference for prediction */ - - /* The following fields are set if ufep == 1 */ - int fCustomSourceFormat; - - int fAIC; /* Advanced INTRA Coding Mode */ - int fDF; /* Deblocking Filter Mode */ - int fSS; /* Slice Structured Mode */ - int fRPS; /* Reference Picture Selection Mode */ - int fISD; /* Independent Segment Decoding Mode */ - int fAIV; /* Alternate INTER VLC Mode */ - int fMQ; /* Modified Quantization Mode */ - - int parWidth; /* Pixel aspect ratio = parWidth : parHeight */ - int parHeight; - - /* Picture Clock Frequence (PCF) fields */ - int fCustomPCF; /* 0 = CIF PCF, 1 = custom PCF */ - int pcfRate; /* PCF = pcfRate / pcfScale Hz */ - int pcfScale; - - /* If fUMV == 1 */ - int fUMVLimited; /* 0 = motion vector range is not limited, - 1 = motion vector range is limited - according to Annex D */ - - /* If fSS == 1 */ - int fRectangularSlices; - /* 0 = free-running slices, - 1 = rectangular slices */ - - int fArbitrarySliceOrdering; - /* 0 = sequential order */ - /* 1 = arbitrary order */ - - /* If Annex O is in use */ - int rlnum; /* Reference layer number */ - - - /* If fRPS == 1 */ - int rpsMode; /* Reference Picture Selection Mode: - VDX_RPS_MODE_NO_MSGS - VDX_RPS_MODE_ACK - VDX_RPS_MODE_NACK - VDX_RPS_MODE_BOTH_MSGS */ -} vdxPictureHeader_t; -/* {{-output"vdxPictureHeader_t.txt"}} */ - - -/* - * vdxSEI_t - */ - -/* {{-output"vdxSEI_t_info.txt" -ignore"*" -noCR}} - This structure is used to return parameters parsed from Supplemental - Enhancement Information. - {{-output"vdxSEI_t_info.txt"}} */ - -/* {{-output"vdxSEI_t.txt"}} */ -typedef struct { - int fFullPictureFreezeRequest; /* 1 = Full-picture freeze requested as in - section L.4 of H.263, 0 otherwise */ - - int fFullPictureSnapshot; /* 1 = Full-picture snapshot tag as in - section L.8 of H.263, 0 otherwise */ - - u_int32 snapshotId; /* Snapshot identification number */ - - u_int8 snapshotStatus; /* Snapshot transmission status */ - - int scalabilityLayer; /* Annex N scalability layer for - the picture, -1 if not defined */ - - int numScalabilityLayers; /* Number of Annex N scalability layers, - value from 2 to 15, - 0 if no scalability layers in use. */ - - u_char prevPicHeader[VDX_MAX_BYTES_IN_PIC_HEADER]; - /* Previous picture header repetition - in bit-stream syntax including - the first two bytes of PSC */ - - int numBytesInPrevPicHeader; /* Number of bytes valid in prevPicHeader, - including the first two bytes of PSC - and the last byte of picture header - where the LSB bits are possibly not - belonging to the picture header copy */ - - int numBitsInLastByteOfPrevPicHeader; - /* Number of valid bits in the last byte - of prevPicHeader (1..8) */ - - int fPrevPicHeaderTooLarge; /* 1 if the previous picture header copy - did not fit into prevPicHeader, - 0 otherwise */ -} vdxSEI_t; -/* {{-output"vdxSEI_t.txt"}} */ - - -/* - * Function prototypes, core.c - */ - -int vdcClose(vdcHInstance_t hInstance); - -class CMPEG4Transcoder; -int vdcDecodeFrame(vdcHInstance_t hInstance, bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, int aColorEffect, TBool aGetDecodedFrame, - CMPEG4Transcoder *hTranscoder); - - -int vdcDecodePictureHeader( - vdcHInstance_t hInstance, - bibBuffer_t *inBuffer, - vdxPictureHeader_t *header, - vdxSEI_t *sei); - -int vdcFree(void); - -vdeImsItem_t *vdcGetImsItem(vdcHInstance_t hInstance, int index); - -int vdcGetNumberOfAnnexNScalabilityLayers( - vdcHInstance_t hInstance); - -int vdcGetNumberOfOutputFrames(vdcHInstance_t hInstance); - -void vdcGetTR(void *inpBuffer, u_int8 *tr); - -int vdcIsEOSReached(vdcHInstance_t hInstance); - -int vdcIsINTRA( - vdcHInstance_t hInstance, - void *frameStart, - unsigned frameLength); - -int vdcIsINTRAGot(vdcHInstance_t hInstance); - -int vdcIsPB( - vdcHInstance_t hInstance, - void *frameStart, - unsigned frameLength); - -int vdcLoad(void); - -vdcHInstance_t vdcOpen( - vdeIms_t *imageStore, - int numReferenceFrames, - void *hParent); - -void vdcRestartVideo(vdcHInstance_t hInstance); - -int vdcSetBackChannelUsage(vdcHInstance_t hInstance, int fSendMessages); - -int vdcSetErrorResilience(vdcHInstance_t hInstance, int feature, int value); - -int vdcSetStartOrEndSnapshotCallback( - vdcHInstance_t hInstance, - u_int32 mode, - u_int32 callback); - -int vdcGetSnapshotStatus(vdcHInstance_t hInstance); - -int vdcSetReportPictureSizeCallback( - vdcHInstance_t hInstance, - u_int32 callback); - -/* - * Function prototypes, core_mpeg.c - */ - - int vdcDecodeMPEGVolHeader(vdcHInstance_t hInstance, bibBuffer_t *inBuffer, CMPEG4Transcoder *hTranscoder); - - int vdcDecodeMPEGVop(vdcHInstance_t hInstance, bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, int aColorEffect, TBool aGetDecodedFrame, - int aStartByteIndex, int aStartBitIndex, CMPEG4Transcoder *hTranscoder); - - int vdcIsMPEGINTRA( - vdcHInstance_t hInstance, - void *frameStart, - unsigned frameLength); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vdcaic.h --- a/videoeditorengine/h263decoder/inc/vdcaic.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for the aic (Advanced Intra Coding) module. -* -*/ - - - -#ifndef _VDCAIC_H_ -#define _VDCAIC_H_ - -#include "epoclib.h" - -/* - * Structs and typedefs - */ - -typedef struct { - - int16 *qpStore; /* storage place for the QP values of MBs in the - previous and current MB line */ - - int ***dcStore; /* storage place for the DC and first horizontal - and vertical line of AC coefficients of the - 4+1+1 blocks of the MBs in the previous and - current MB line */ - - int numMBsInMBLine; /* number of MBs in a MB line for the calculation - of the internal sorage index from currMBNum */ - - int Xpos[6]; /* indexed by block number (0..5) of an MB gives - relative MB index of left neighbor block */ - - int Ypos[6]; /* indexed by block number (0..5) of an MB gives - relative MB index of top neighbor block */ - - int Xtab[6]; /* indexed by block number (0..5) of an MB gives - block number of left neighbor block */ - - int Ytab[6]; /* indexed by block number (0..5) of an MB gives - block number of top neighbor block */ - - int Ztab[6]; /* indexed by block number (0..5) of an MB gives - block number of top-left neighbor block */ - - u_char ACpred_flag; /* ON(1): AC prediction is used, OFF(0): only DC */ - - int midGrey; /* the grey value used for prediction direction - decision if prediction block is not available */ -} aicData_t; - - -/* - * Prototypes - */ - - void aicStart (aicData_t *aicData, int numMBsInMBLine, int16 *error); - - void aicFree (aicData_t *aicData); - - void aicBlockUpdate (aicData_t *aicData, int currMBNum, int blockNum, int *block, - int pquant, int DC_coeff); - - int aicIsBlockValid (aicData_t *aicData, int currMBNum); - - void aicDCACrecon (aicData_t *aicData, int QP, u_char fTopMBMissing, u_char fLeftMBMissing, - u_char fBBlockOut, int blockNum, int *qBlock, int currMBNum); - - int aicDCScaler (int QP, int type); - - u_char aicIntraDCSwitch (int intraDCVLCThr, int QP); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vdcmvc.h --- a/videoeditorengine/h263decoder/inc/vdcmvc.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,191 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Function prototypes for motion vector counting for H.263 decoder. -* -*/ - - -#ifndef _VDCMVC_H_ -#define _VDCMVC_H_ - - -#include "epoclib.h" - -/* - * Defines - */ - -#define MVC_XM1_UP 0 -#define MVC_XM1_DOWN 1 -#define MVC_YM1_LEFT 2 -#define MVC_YM1_RIGHT 3 -#define MVC_XP1_UP 4 -#define MVC_XP1_DOWN 5 - -#define MVC_MB_INTER 1 -#define MVC_MB_INTRA 2 -#define MVC_MB_NOT_CODED 3 - - -/* - * Structs and typedefs - */ - -/* {{-output"mvRowItem_t_info.txt" -ignore"*" -noCR}} - mvRowItem_t is capable of storing one P frame motion vector. - It is used internally within the MVC module. - {{-output"mvRowItem_t_info.txt"}} */ - -/* {{-output"mvRowItem_t.txt"}} */ -typedef struct { - int mvx; /* motion vector value or MVD_INTRA or MVD_NOT_CODED */ - int mvy; - int y; /* the y coordinate for motion vector in block units */ - int time; /* a relative time when motion vector was counted */ - u_char fourMVs; /* flag indicating four MBs per macroblock */ - int type; /* MVC_MB_INTER, MVC_MB_INTRA or MVC_MB_NOT_CODED */ -} mvRowItem_t; -/* {{-output"mvRowItem_t.txt"}} */ - - -/* {{-output"mvBFBufItem_t_info.txt" -ignore"*" -noCR}} - mvBFBufItem_t is capable of storing one B frame motion vector. - It is used internally within the MVC module. - {{-output"mvBFBufItem_t_info.txt"}} */ - -/* {{-output"mvBFBufItem_t.txt"}} */ -typedef struct { - int mvx; /* motion vector value */ - int mvy; - int x; /* the x coordinate for mv in block units */ - int y; /* the y coordinate for mv in block units */ - int time; /* a relative time when mv was counted */ - u_char fourMVs; /* flag indicating four MBs per macroblock */ -} mvBFBufItem_t; -/* {{-output"mvBFBufItem_t.txt"}} */ - - -/* {{-output"mvcData_t_info.txt" -ignore"*" -noCR}} - mvcData_t is used to store the instance data for one MVC module and - it is capable of keeping state of the motion vector decoding process - for one encoded H.263 bitstream. - {{-output"mvcData_t_info.txt"}} */ - -/* {{-output"mvcData_t.txt"}} */ -typedef struct { - /* motion vector buffers - * - * mvRow contains three motion vector lines: mvRow0, mvRow1 and mvRow2 - * mvRow0 is the lower block line in the previous macroblock line - * mvRow1 is the higher block line in the current macroblock line - * mvRow2 is the lower block line in the current macroblock line - */ - mvRowItem_t *mvRow; - mvRowItem_t *mvRow0; - mvRowItem_t *mvRow1; - mvRowItem_t *mvRow2; - - int currMaxX; /* maxX, when mvcStart was last called */ - int currX; /* x for current macroblock being handled */ - int currY; /* y for current macroblock */ - int currTime; /* time for current macroblock */ - int mvRowIndex; /* the index of mvRow0 in mvRow array (0..2) */ - - mvBFBufItem_t mvFBufArray[2][4]; /* forward motion vectors for B frame - for current and previous MB */ - mvBFBufItem_t mvBBufArray[2][4]; /* backward motion vectors for B frame - for current and previous MB */ - int mvBFBufIndex; /* the index of the current MB in mvFBufArray and - mvBBufArray. The index of the previous MB is generated - by XORing 1 to this variable. */ - int currLumWidth; - int currLumHeight; - int mvRangeLowX; /* Lower boundary for horz. MV range */ - int mvRangeHighX; /* Higher boundary for horz. MV range */ - int mvRangeLowY; /* Lower boundary for vert. MV range */ - int mvRangeHighY; /* Higher boundary for vert. MV range */ - int prevPredMode; /* Flag for prediction of forward prediction vector in IPB - 1 => MB to the left has a FWD MV - 0 => Otherwise */ - int rightOfBorder; /* There is a border on the left of the current MB */ - int downOfBorder; /* There is a border on top of the current MB */ - int leftOfBorder; /* There is a border on the right of the previous MB */ - int rightOfBorderPrev; /* There is a border on the left of the previous MB */ - int downOfBorderPrev; /* There is a border on top of the previous MB */ - int upRightMBIsStart; /* The MB, on the previous line and next column is - the starting MB of the slice. If Annex K is not - in use returns zero.*/ - int fSS; /* Annex K use flag */ - - - int range; /* allowed range of the MVs: low= -range; high= range-1 */ - int f_code; /* f_code_forward for P-frames */ - -} mvcData_t; -/* {{-output"mvcData_t.txt"}} */ - - -/* - * Function prototypes - */ - -void mvcCalcMV(mvcData_t *mvcData, int mvdx, int mvdy, - int *mvx, int *mvy, u_char predictorMode, u_char fourMVs, - u_char unrestrictedMV, u_char nonEmptyGOBHeader, int x, - int y, int time, int mbType, int16 *error, int fPLUSPTYPE, - int fUMVLimited); - -void mvcSetBorders( - mvcData_t *mvcData, int x, int y, int mba, int numMBsInMBLine, - int *rightOfBorder, int *downOfBorder); - -void mvcCalcMPEGMV(mvcData_t *mvcData, - int mvdx, int mvdy, int *mvx, int *mvy, - u_char predictorMode, u_char fourMVs, - u_char topOfVP, u_char leftOfVP, u_char fmv3_out, - int x, int y, int time, int mbType, int16 *error); - -void mvcCalcMVsForBFrame(mvcData_t *mvcData, int *mvfx, int *mvfy, - int *mvbx, int *mvby, int *mvx, int *mvy, int mvdx, int mvdy, - int trb, int trd, int numMVs, u_char unrestrictedMV, - int x, int y, int time); - -void mvcCalcFwdMVsForImpBFrame(mvcData_t *mvcData, int *mvfx, int *mvfy, - int *mvbx, int *mvby, int mvdx, int mvdy, int x, int y, int fUMV); - -void mvcFree(mvcData_t *mvcData); - -void mvcGetCurrNeighbourMVs(mvcData_t *mvcData, int *nmvx, int *nmvy, - int16 *error); - -void mvcGetPrevNeighbourMVs(mvcData_t *mvcData, int *nmvx, int *nmvy, - int *pmvx, int *pmvy, u_char *fourMVs, int16 *error); - -void mvcGetPrevMVFsAndMVBs(mvcData_t *mvcData, int *mvfx, int *mvfy, - int *mvbx, int *mvby, u_char *fourMVs, int16 *error); - -void mvcMarkMBIntra(mvcData_t *mvcData, int x, int y, int time); - -void mvcMarkMBNotCoded(mvcData_t *mvcData, int x, int y, int time); - -void mvcStart(mvcData_t *mvcData, int maxX, int lumWidth, - int lumHeight, int16 *error); - -void mvcGetCurrentMVs(mvcData_t *mvcData, int *mvx, int *mvy, - int16 *error); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vde.h --- a/videoeditorengine/h263decoder/inc/vde.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,160 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* A header file for internal usage of the services provided by -* the Video Decoder Engine. -* -*/ - - -#ifndef _VDE_H_ -#define _VDE_H_ - - -/* - * Includes - */ - -#include "vdefrt.h" -#include "vdeims.h" - -#include "biblin.h" -#include "vdc263.h" -#include "h263dapi.h" - - -/* - * Defines - */ - -/* Aliased return values from h263dext.h. - (These values may also be exported outside the decoder.) */ - -#define VDE_OK_BUT_NOT_CODED \ - H263D_OK_BUT_NOT_CODED -#define VDE_OK_BUT_FRAME_USELESS \ - H263D_OK_BUT_FRAME_USELESS -#define VDE_OK_EOS H263D_OK_EOS -#define VDE_OK H263D_OK -#define VDE_ERROR H263D_ERROR -#define VDE_ERROR_HALTED H263D_ERROR_HALTED -#define VDE_ERROR_NO_INTRA H263D_ERROR_NO_INTRA - -/* Internal return values. - See h263dext.h that they do not conflict with the exported ones. */ -#define VDE_OK_NOT_AVAILABLE 10 /* a requested item is not available, - see vdeFrtGetItem */ -#define VDE_OK_SEGMENTATION_CHANGED 11 - /* image segmentation in the Reference - Picture Selection mode has changed, - see rsbGetLatest */ - -/* VDE states */ -#define VDE_STATE_BEGIN 0 /* no frame data decoded */ -#define VDE_STATE_MIDDLE 1 /* decoding */ -#define VDE_STATE_EOS 2 /* End-of-Stream reached */ -#define VDE_STATE_HALTED 3 /* fatal error, halted */ -#define VDE_STATE_RESYNC 4 /* Resyncing to INTRA frame */ - -/* Temporal scalability levels, aliased from h263dext.h */ -#define VDE_LEVEL_ALL_FRAMES H263D_LEVEL_ALL_FRAMES -#define VDE_LEVEL_INTRA_FRAMES H263D_LEVEL_INTRA_FRAMES -#define VDE_LEVEL_ANNEX_N_LEVEL_0 (VDE_LEVEL_INTRA_FRAMES + 1) - - -/* - * Macros - */ - -/* Memory allocation wrappers */ - -#define vdeMalloc malloc -#define vdeCalloc calloc -#define vdeRealloc realloc -#define vdeDealloc free - -/* Assertion wrapper */ -#ifndef vdeAssert - #define vdeAssert(exp) assert(exp); -#endif - - -/* - * Structures and typedefs - */ - -/* {{-output"vdeInstance_t_info.txt" -ignore"*" -noCR}} - vdeInstance_t holds the instance data for a Video Decoder Engine instance. - This structure is used to keep track of the internal state of the VDE - instance. - {{-output"vdeInstance_t_info.txt"}} */ - - /* {{-output"vdeInstance_t.txt"}} */ - typedef struct { - vdcHInstance_t vdcHInstance; /* Video Decoder Core instance handle */ - - bibBuffer_t *inBuffer; /* Bit Buffer instance data */ - - - bibBuffer_t *outBuffer; /* output stream Bit Buffer instance data */ - bibBufferEdit_t *bufEdit; - int iColorEffect; - int iColorToneU; /* U color tone value to be used */ - int iColorToneV; /* V color tone value to be used */ - int iRefQp; /* first frame QP for color toning */ - TBool iGetDecodedFrame; - - - vdeIms_t imageStore; /* Image Store instance data */ - - vdeFrtStore_t renStore; /* Frame type specific store for renderer - handles */ - - vdeFrtStore_t startCallbackStore; /* Frame type specific store for - "start frame decoding" callbacks */ - - vdeFrtStore_t endCallbackStore; /* Frame type specific store for - "ended frame decoding" callbacks */ - - int state; /* current state of VDE, see - VDE_STATE_XXX definitions for - possible values */ - - u_int32 creationTime; /* the time returned by gtGetTime - when the instance was created */ - - u_char fMPEG4; /* this flag is used to signal the stream type - "0" H.263, "1" MPEG-4. - Set by calling vdeDetermineStreamType before - the first frame of the stream */ - - int lumWidth; /* Expected size of the incoming */ - int lumHeight; /* luminance pictures */ - - int requestedScalabilityLevel; /* Requested temporal scalability - level to decode. - See vdeSetTemporalScalability - for further details. */ - - int fPrevFrameDecoded; /* 0 if the previous frame was not - decoded because it did not belong - to requested temporal scalability - level, - 1 otherwise */ - } vdeInstance_t; - /* {{-output"vdeInstance_t.txt"}} */ - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vdefrt.h --- a/videoeditorengine/h263decoder/inc/vdefrt.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* A header file for vdefrt.c. -* -*/ - - -#ifndef _VDEFRT_H_ -#define _VDEFRT_H_ - - -/* - * Includes - */ - - -#include "h263dapi.h" -#include "list.h" - - -/* - * Defines - */ - -/* - * Structures and typedefs - */ - -/* {{-output"vdeFrtStore_t_info.txt" -ignore"*" -noCR}} - This structure is used to store the internal state of one frame type - container instance. A pointer to this structure is passed to - the VDE Frame Type Container module functions to indicate the container - instance which the functions should handle. - {{-output"vdeFrtStore_t_info.txt"}} */ - -/* {{-output"vdeFrtStore_t.txt"}} */ -typedef struct { - lst_t sizeList; -} vdeFrtStore_t; -/* {{-output"vdeFrtStore_t.txt"}} */ - - -/* - * Function prototypes - */ - -int vdeFrtClose(vdeFrtStore_t *store); - -int vdeFrtGetItem(vdeFrtStore_t *store, h263dFrameType_t *frameType, - u_int32 *item); - -int vdeFrtOpen(vdeFrtStore_t *store); - -int vdeFrtPutItem(vdeFrtStore_t *store, h263dFrameType_t *frameType, - u_int32 item, void (*removeItem) (void *)); - -int vdeFrtRemoveItem(vdeFrtStore_t *store, h263dFrameType_t *frameType); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vdeimb.h --- a/videoeditorengine/h263decoder/inc/vdeimb.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* A header file for the Video Decoder Engine Image Buffer abstract -* data type. -* -*/ - - -#ifndef _VDEIMB_H_ -#define _VDEIMB_H_ - - - -/* - * Includes - */ - -#include "renapi.h" -#include "rendri.h" - - -/* - * Defines - */ - -/* Displaying status */ -#define VDEIMB_NO_DISPLAYING 1 -#define VDEIMB_WAITING 2 -#define VDEIMB_DISPLAYED 4 - -/* Full-picture freeze status, - see vdeImb_t for description of the definitions */ -#define VDEIMB_FPF_REQUEST 2 -#define VDEIMB_FPF_RELEASE 1 -#define VDEIMB_FPF_NOT_SPECIFIED 0 - - -/* - * Structures and typedefs - */ - -/* {{-output"vdeImb_t_info.txt" -ignore"*" -noCR}} - vdeImb_t defines the structure of a single image buffer which is capable - of storing one YUV 4:2:0 image and a number of paramaters as - side-information. The YUV image as well as the YUV to RGB conversion and - displaying related parameters are kept in a renDrawItem_t structure. - Decoder related parameters are stored in the vdeImb_t itself. - One may directly refer to the member variables of the vdeImb_t structure. - However, one should use the functions and macros in the Renderer Draw Item - Interface for accessing the contents of the drawItem member of vdeImb_t. - {{-output"vdeImb_t_info.txt"}} */ - -/* {{-output"vdeImb_t.txt"}} */ -typedef struct { - renDrawItem_t *drawItem; /* renderer draw item which actually contains - the frame memory (and some parameters) */ - - int fReferenced; /* non-zero if the image buffer is going to be - used as a reference frame. Otherwise, zero. */ - - int tr; /* the TR field of H.263 which is associated with - the image buffer */ - - - int trRef; /* Referenced for a TR prediction, - 0 if the frame is a normal picture referenced - once at maximum (in the next picture), - 1 if the frame is referenced multiple times - in the future frames. - This information is used to update reference - picture data structures. It is neede at least - in streaming applications. */ - - int *yQuantParams; /* luminance quantizer parameter for each - macroblock in scan-order */ - - int *uvQuantParams; /* chrominance quantizer parameter for each - macroblock in scan-order */ - -} vdeImb_t; -/* {{-output"vdeImb_t.txt"}} */ - - -/* - * Function prototypes - */ - -vdeImb_t *vdeImbAlloc(int width, int height, int fYuvNeeded); - -int vdeImbCopyParameters(vdeImb_t *dstImb, const vdeImb_t *srcImb); - -void vdeImbDealloc(vdeImb_t *imb); - - -/* - * Macros - */ - -/* {{-output"vdeImbYUV.txt"}} */ -/* - * vdeImbYUV - * - * Parameters: - * vdeImb_t *pimb a pointer to image buffer - * u_char **ppy, **ppu, **ppv used to return the pointers to the top-left - * corner of Y, U and V image buffers - * respectively - * int *pWidth, *pHeight used to return the width and height of - * the luminance image in pixels - * - * Function: - * This function returns the Y, U and V pointers to the passed image buffer - * as well as the dimensions of the luminance frame of the image buffer. - * - * Returns: - * REN_OK if the function was successful - * REN_ERROR indicating a general error - * - */ - -#define vdeImbYUV(pimb, ppy, ppu, ppv, pWidth, pHeight) \ - renDriYUV((pimb)->drawItem, (ppy), (ppu), (ppv), (pWidth), (pHeight)) -/* {{-output"vdeImbYUV.txt"}} */ - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vdeims.h --- a/videoeditorengine/h263decoder/inc/vdeims.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for the Video Decoder Engine image buffer store. -* -*/ - - -#ifndef _VDEIMS_H_ -#define _VDEIMS_H_ - -/* - * Includes - */ - -#include "list.h" -#include "vdeimb.h" - -/* - * Defines - */ - -/* for the mode parameter of vdeImsGetReference */ -#define VDEIMS_REF_TR 0 -#define VDEIMS_REF_LATEST 1 -#define VDEIMS_REF_OLDEST 2 - - -/* - * Typedefs - */ - -/* {{-output"vdeImsItem_t_info.txt" -ignore"*" -noCR}} - The image store item structure is used throughout the Image Store - module to store individual image buffers. - {{-output"vdeImsItem_t_info.txt"}} */ - -/* {{-output"vdeImsItem_t.txt"}} */ -typedef struct { - LST_ITEM_SKELETON - - vdeImb_t *imb; /* pointer to image buffer structure */ -} vdeImsItem_t; -/* {{-output"vdeImsItem_t.txt"}} */ - - -/* {{-output"vdeIms_t_info.txt" -ignore"*" -noCR}} - vdeIms_t defines the structure of an image buffer store. - A pointer to this structure is passed to the VDE Image Store module - functions to indicate the image store instance which the functions should - handle. One should not access the members of this structure directly - but rather always use the provided access functions. - {{-output"vdeIms_t_info.txt"}} */ - -/* {{-output"vdeIms_t.txt"}} */ -typedef struct { - lst_t freeStoreList; /* a list of "Free" stores each of which is - carrying frames with a certain (unique) - size */ - - vdeImsItem_t *refFrame; /* refFrame is a pointer to - the latest reference (INTRA or INTER) frame */ - - lst_t idleStore; /* a list of non-referenced but to-be-displayed - image store items */ - int fYuvNeeded; - -} vdeIms_t; -/* {{-output"vdeIms_t.txt"}} */ - - -/* - * Function prototypes - */ - -int vdeImsChangeReference(vdeIms_t *store, vdeImsItem_t *newItem); - -int vdeImsClose(vdeIms_t *store); - -int vdeImsDebRefStore(vdeIms_t *store); - -int vdeImsFromRenderer(vdeIms_t *store, void *drawItem); - -int vdeImsGetFree(vdeIms_t *store, int lumWidth, int lumHeight, - vdeImsItem_t **item); - -int vdeImsGetReference(vdeIms_t *store, int mode, int tr, vdeImsItem_t **item); - -int vdeImsOpen(vdeIms_t *store, int numFreeItems, int lumWidth, int lumHeight); - -void vdeImsSetYUVNeed(vdeIms_t *store, int fYuvNeeded); - -int vdeImsPut(vdeIms_t *store, vdeImsItem_t *item); - -int vdeImsPutFree(vdeIms_t *store, vdeImsItem_t *item); - -int vdeImsReleaseReference(vdeIms_t *store, vdeImsItem_t *item); - - - -/* - * Macros - */ - -/* Note: vdeImsImageBufferToStoreItem and vdeImsStoreItemToImageBuffer - need not be used since it is considered that the vdeImsItem_t structure - is public and one can directly refer the image buffer to as pImsItem->imb. - However, these macros exist to provide compatibility to some "old" code. */ - -/* - * vdeImsImageBufferToStoreItem - * - * Parameters: - * vdeImb_t *buffer a pointer to an image buffer - * vdeImsItem_t *storeItem a pointer to a image store item - * - * Function: - * This macro associates the given image buffer with the given - * image store item. - * - * Returns: - * >= 0 if successful - * < 0 indicating an error - * - */ - -#define vdeImsImageBufferToStoreItem(buffer, storeItem) ((storeItem)->imb = (buffer), 0) - - -/* - * vdeImsStoreItemToImageBuffer - * - * Parameters: - * vdeImsItem_t *storeItem a pointer to a image store item - * vdeImb_t **buffer a pointer to an image buffer pointer - * - * Function: - * This macro returns the pointer to the image buffer associated with - * the given image store item. - * - * Returns: - * >= 0 if successful - * < 0 indicating an error - * - */ - -#define vdeImsStoreItemToImageBuffer(storeItem, buffer) (*(buffer) = (storeItem)->imb, 0) - - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vdemain.h --- a/videoeditorengine/h263decoder/inc/vdemain.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for external usage of the services provided by -* the H.263 Video Decoder Engine. -* -*/ - - -#ifndef _VDEMAIN_H_ -#define _VDEMAIN_H_ - - - - -/* - * Includes - */ - -#include "biblin.h" - -#include "epoclib.h" -#include "vdefrt.h" - - -/* - * Structs and typedefs - */ - -/* {{-output"vdeHInstance_t_info.txt" -ignore"*" -noCR}} - vdeHInstance_t is used as a unique identifier of a Video Decoder - Engine instance. - The type can be casted to u_int32 or void pointer and then back to - vdeHInstance_t without any problems. - {{-output"vdeHInstance_t_info.txt"}} */ - -/* {{-output"vdeHInstance_t.txt"}} */ -typedef void * vdeHInstance_t; -/* {{-output"vdeHInstance_t.txt"}} */ - - - -/* - * Function prototypes - */ - -int vdeFree(void); - -int vdeGetLatestFrame( - vdeHInstance_t hInstance, - u_char **ppy, u_char **ppu, u_char **ppv, - int *pLumWidth, int *pLumHeight, - int *pFrameNum); - -vdeHInstance_t vdeInit(h263dOpen_t *param); - -int vdeIsINTRA( - vdeHInstance_t hInstance, - void *frameStart, - unsigned frameLength); - -int vdeLoad(const char *rendererFileName); - -int vdeReturnImageBuffer(vdeHInstance_t hInstance, u_int32 typelessParam); - -int vdeSetInputBuffer(vdeHInstance_t hInstance, bibBuffer_t *buffer); - - -int vdeSetOutputBuffer(vdeHInstance_t hInstance, bibBuffer_t *buffer); - -int vdeSetBufferEdit(vdeHInstance_t hInstance, bibBufferEdit_t *bufEdit); - -int vdeSetVideoEditParams(vdeHInstance_t hInstance, int aColorEffect, - TBool aGetDecodedFrame, TInt aColorToneU, TInt aColorToneV); - -int vdeShutDown(vdeHInstance_t hInstance); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vdeti.h --- a/videoeditorengine/h263decoder/inc/vdeti.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for the vdeti.c file. -* -*/ - - -#ifndef _VDETI_H_ -#define _VDETI_H_ - - - -#include "vdemain.h" - -/* - * Structs and typedefs - */ - - -/* - * Function prototypes - */ - -class CMPEG4Transcoder; -int vdeDetermineStreamType(vdeHInstance_t hInstance, CMPEG4Transcoder *hTranscoder); - -int vdeDecodeFrame(vdeHInstance_t hInstance, int aStartByteIndex, int aStartBitIndex,CMPEG4Transcoder *hTranscoder); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vdxint.h --- a/videoeditorengine/h263decoder/inc/vdxint.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Internal header for the video demultiplexer module. -* -*/ - - - -#ifndef _VDXINT_H_ -#define _VDXINT_H_ - -/* - * Defines - */ - -#ifndef vdxAssert - #define vdxAssert(exp) assert(exp); -#endif - - -/* - * Structs and typedefs - */ - -/* type for VLC (variable length code) lookup tables */ -typedef struct { - int val; /* value for code, for example an index of the corresponding table - in the H.263 recommendation */ - u_char len; /* actual length of code in bits */ -} vdxVLCTable_t; - -typedef struct{ - int16 code; - int16 length; -}tVLCTable; - - -/* - * Functions defined in viddemux.c (and used from viddemux_mpeg.c) - */ - -/* Macroblock Layer */ - -int vdxGetCBPY(bibBuffer_t *inBuffer, int *index, - int *bitErrorIndication); - -int vdxGetMCBPCInter( - bibBuffer_t *inBuffer, - int fPLUSPTYPE, - int fFourMVsPossible, - int fFirstMBOfPicture, - int *index, - int *bitErrorIndication); - -int vdxGetMCBPCIntra(bibBuffer_t *inBuffer, int *index, - int *bitErrorIndication); - -int vdxGetMVD(bibBuffer_t *inBuffer, int *mvdx10, - int *bitErrorIndication); - -int vdxUpdateQuant( - bibBuffer_t *inBuffer, - int fMQ, - int quant, - int *newQuant, - int *bitErrorIndication); - - -/* - * Functions defined in viddemux_mpeg.c (and used from viddemux.c) - */ - - int vdxGetScaledMVD(bibBuffer_t *inBuffer, int f_code, int *mvd10, - int *bitErrorIndication); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/vedh263dimp.h --- a/videoeditorengine/h263decoder/inc/vedh263dimp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for H.263 Decoder API implementation class. -* -*/ - - -#ifndef VEDH263DIMP_H -#define VEDH263DIMP_H - -#include "h263dext.h" -#include "h263dmai.h" // CVedH263Dec defined here - - -class CVedH263DecImp : public CVedH263Dec -{ - - public: // Constructors and destructor - - /** - * C++ default constructor. - */ - CVedH263DecImp(TSize aFrameSize, TInt aNumReferencePictures); - - /** - * Destructor. - */ - ~CVedH263DecImp(); - - /** - * 2nd phase constructor must be public since it is called from NewL of abstract base class. - */ - void ConstructL(); - - public: // Functions from CVedH263Dec - - /** - * From CVedH263Dec Sets the renderer to be used - */ - void SetRendererL(MVideoRenderer* aRenderer); - - /** - * From CVedH263Dec Sets the post-filter to be used - */ - void SetPostFilterL(const TPostFilter aFilter); - - /** - * From CVedH263Dec Returns the frame to the decoder subsystem - */ - void FrameRendered(const TAny *aFrame); - - /** - * From CVedH263Dec Checks if the given frame is valid - */ - TBool FrameValid(const TAny *aFrame); - - /** - * From CVedH263Dec Retrieves Y/U/V pointers to the given frame - */ - TInt GetYUVBuffers(const TAny *aFrame, TUint8*& aYFrame, TUint8*& aUFrame, - TUint8*& aVFrame, TSize& aFrameSize); - - /** - * From CVedH263Dec Retrieves the latest decoded YUV frame - */ - TUint8* GetYUVFrame(); - - /** - * From CVedH263Dec Decodes / transcodes a compressed frame - */ - void DecodeFrameL(const TPtrC8& aInputBuffer, TPtr8& aOutputBuffer, - TBool& aFirstFrame, TInt& aBytesDecoded, - vdeDecodeParamters_t *aDecoderInfo); - - void DecodeFrameL(const TPtrC8& aInputBuffer, TPtr8& aOutputBuffer, TBool& aFirstFrame, TInt& aBytesDecoded, - const TColorEffect aColorEffect, - const TBool aGetDecodedFrame, TInt aFrameOperation, - TInt* aTrP, TInt* aTrD, TInt aVideoClipNumber, TInt aSMSpeed, - TInt aDataFormat); - - /** - * From CVedH263Dec Decodes a compressed frame - */ - void DecodeFrameL(const TPtrC8& aInputBuffer, TBool& aFirstFrame, TInt& aBytesDecoded, - TInt aDataFormat); - - - /** - * From CVedH263Dec Check the VOS header - */ - TBool CheckVOSHeaderL(TPtrC8& aInputBuffer); - - -private: - - // H.263 decoder instance handle - h263dHInstance_t iH263dHandle; - - // frame dimensions - TSize iFrameSize; - -}; - - - - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/viddemux.h --- a/videoeditorengine/h263decoder/inc/viddemux.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1068 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for the video demultiplexer module. -* -*/ - - -#ifndef _VIDDEMUX_H_ -#define _VIDDEMUX_H_ - -#include "epoclib.h" - -#include "biblin.h" - -#include "dlist.h" -#include "vdc263.h" /* for vdxPictureHeader_t and vdxSEI_t */ -class CMPEG4Transcoder; - - -/* - * Defines - */ - -/* General return values */ -// unify error codes -#define VDX_OK_BUT_BIT_ERROR H263D_OK_BUT_BIT_ERROR /* Handled portion of the bistream - contains a bit error */ -#define VDX_OK H263D_OK /* Everything ok */ -#define VDX_ERR H263D_ERROR /* Everything ok */ -#define VDX_ERR_NOT_SUPPORTED H263D_ERROR /* Some bit combination (in header) - occurs which is not supported by the - implementetion */ -#define VDX_ERR_BIB H263D_ERROR /* Bit Buffer module returned an error */ - -/* Picture types */ -#define VDX_PIC_TYPE_I 0 -#define VDX_PIC_TYPE_P 1 -#define VDX_PIC_TYPE_PB 8 -#define VDX_PIC_TYPE_IPB 2 -#define VDX_PIC_TYPE_B 3 -#define VDX_PIC_TYPE_EI 4 -#define VDX_PIC_TYPE_EP 5 -#define VDX_VOP_TYPE_I 0 /* MPEG-4 Intra Picture */ -#define VDX_VOP_TYPE_P 1 /* MPEG-4 Inter Picture */ -#define VDX_VOP_NOT_CODED -1 /* MPEG-4 Not Coded Picture - (only the time_increment is present) */ - -/* Reference Picture Selection modes */ -#define VDX_RPS_MODE_NO_MSGS 0 -#define VDX_RPS_MODE_ACK 1 -#define VDX_RPS_MODE_NACK 2 -#define VDX_RPS_MODE_BOTH_MSGS 3 - -/* Macroblock classes */ -#define VDX_MB_INTER 1 -#define VDX_MB_INTRA 2 - -#define MAX_USER_DATA_LENGTH 512 /* The maximum allocated memory for - user data (UD). Only this much of the UD - from the bitstream is stored */ - -/* - * Typedefs - */ - -/* - * vdxVolHeader_t - */ - -/* {{-output"vdxVolHeader_t_info.txt" -ignore"*" -noCR}} - The vdxGetVolHeader function uses this structure to return VOL header data. - /MPEG-4/ - {{-output"vdxVolHeader_t_info.txt"}} */ - -/* {{-output"vdxVolHeader_t.txt"}} */ -typedef struct { - - int profile_level; /* Indicates the Level (1,2 or 3) of the Simple - Profile the Video Object conforms to */ - int vo_priority; /* Priority assigned to the Video Object - a value between 1(lowest)-7(highest). - If not in the bitstream, set to zero */ - - int vo_id; /* id of the Video Object */ - int vol_id; /* id of the Video Object Layer */ - int random_accessible_vol; - /* set to 1 if all the VOPs in the stream are - I-VOP. */ - int pixel_aspect_ratio; /* see. MPEG-4 visual spec. pp. 71 */ - - int time_increment_resolution; - /* Resolution to interpret the time_increment - fields in the VOP headers */ - - int lumWidth; /* Frame width of the Y component in pixels */ - int lumHeight; /* Frame height of the Y component in pixels */ - - u_char error_res_disable;/* Flag ON if no resynchronization markers are - used inside frames. - When OFF it doesn't mean they ARE used. */ - u_char data_partitioned; /* Flag indicating if data partitioning inside - a VP is used or not. */ - u_char reversible_vlc; /* flag indicating the usage of reversible - VLC codes */ - - /* the following parameters concern the input video signal, - see MPEG-4 visual spec. pp. 66-70, and "Note" in viddemux_mpeg.c - Not used in the current implementatnion. */ - int video_format; - int video_range; - int colour_primaries; - int transfer_characteristics; - int matrix_coefficients; - - /* the following parameters are used in the Video Buffering Verifier - (Annex D) to monitor the input bit buffer, complexity, memory buffer - used in the decoding process. The conformance of a stream can be checked - using these parameters. - Not used in the current implementatnion. */ - u_int32 bit_rate; - u_int32 vbv_buffer_size; - u_int32 vbv_occupancy; - - char *user_data; /* User Data if available */ - int user_data_length; /* Length of the recieved user data */ - u_char fixed_vop_rate; /* fixed vop rate indication, added for transcoding */ -} vdxVolHeader_t; -/* {{-output"vdxVolHeader_t.txt"}} */ - -/* - * vdxGovHeader_t - */ - -/* {{-output"vdxGovHeader_t_info.txt" -ignore"*" -noCR}} - The vdxGetGovHeader function uses this structure to return GOV header data. - /MPEG-4/ - {{-output"vdxGovHeader_t_info.txt"}} */ - -/* {{-output"vdxGovHeader_t.txt"}} */ -typedef struct { - int time_stamp; /* The time stamp value in the GOV Header */ - - u_char closed_gov; /* only important if B-VOPs can be in the stream */ - u_char broken_link; /* only important if B-VOPs can be in the stream */ - - char *user_data; /* User Data if available */ - int user_data_length; /* Length of the recieved user data */ -} vdxGovHeader_t; -/* {{-output"vdxGovHeader_t.txt"}} */ - - -/* - * vdxGetVopHeaderInputParam_t - */ - -/* {{-output"vdxGetVopHeaderInputParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the vdxGetVopHeader function. /MPEG-4/ - {{-output"vdxGetVopHeaderInputParam_t_info.txt"}} */ - -/* {{-output"vdxGetVopHeaderInputParam_t.txt"}} */ -typedef struct { - - int time_increment_resolution; /* resolution of the time increment field */ - -} vdxGetVopHeaderInputParam_t; -/* {{-output"vdxGetVopHeaderInputParam_t.txt"}} */ - - -/* - * vdxVopHeader_t - */ - -/* {{-output"vdxVopHeader_t_info.txt" -ignore"*" -noCR}} - The vdxGetVopHeader function uses this structure to return the picture - header parameters. /MPEG-4/ - {{-output"vdxVopHeader_t_info.txt"}} */ - -/* {{-output"vdxVopHeader_t.txt"}} */ -typedef struct { - int time_base_incr; /* Increment of the modulo time base from the - previous VOP or GOV header in seconds */ - int time_inc; /* Time increment value of the current VOP, - plus the modulo time base = absolute time */ - - u_char vop_coded; /* Flag: 1 - VOP coded; - 0 - VOP not coded/skipped */ - int coding_type; /* VOP coding type is one of the following: - VDX_VOP_TYPE_I MPEG-4 INTRA - VDX_VOP_TYPE_P MPEG-4 INTER */ - - int rounding_type; /* Rounding of the sub-pixel predictor - calculations: 0 or 1. */ - - int intra_dc_vlc_thr; /* QP dependent switch control of coding the - Intra DC coefficient as separate/optimized or - as the other Intra AC. (0..7) */ - int quant; /* Initial Quantizer value */ - - int fcode_forward; /* For P-VOPs Motion Vector range control - 1: [-16,16] .. 7:[-1024,1024] */ -} vdxVopHeader_t; -/* {{-output"vdxVopHeader_t.txt"}} */ - - -/* - * vdxGetVideoPacketHeaderInputParam_t - */ - -/* {{-output"vdxGetVideoPacketHeaderInputParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the vdxGetVideoPacketHeader function. /MPEG-4/ - {{-output"vdxGetVideoPacketHeaderInputParam_t_info.txt"}} */ - -/* {{-output"vdxGetVideoPacketHeaderInputParam_t.txt"}} */ -typedef struct { - - int fcode_forward; /* used for determining the resync_marker - length */ - int time_increment_resolution; /* resolution of the time increment field */ - - int numOfMBs; /* Number of MBs in a VOP */ - -} vdxGetVideoPacketHeaderInputParam_t; -/* {{-output"vdxGetVideoPacketHeaderInputParam_t.txt"}} */ - - -/* - * vdxVideoPacketHeader_t - */ - -/* {{-output"vdxVideoPacketHeader_t_info.txt" -ignore"*" -noCR}} - The vdxGetVideoPacketHeader function uses this structure to return the - Number of the immediately following MB in the VOP and optionally confirm - header parameters. /MPEG-4/ - {{-output"vdxVideoPacketHeader_t_info.txt"}} */ - -/* {{-output"vdxVideoPacketHeader_t.txt"}} */ -typedef struct { - - int currMBNum; /* Number of the immediately following MB */ - int quant; /* Quantizer used for the following MB */ - - u_char fHEC; /* Flag for header extension code */ - - int time_base_incr; /* Increment of the modulo time base from the - previous VOP or GOV header in seconds */ - int time_inc; /* Time increment value of the current VOP, - plus the modulo time base = absolute time */ - - int coding_type; /* VOP coding type is one of the following: - VDX_VOP_TYPE_I MPEG-4 INTRA - VDX_VOP_TYPE_P MPEG-4 INTER */ - - int intra_dc_vlc_thr; /* QP dependent switch control of coding the - Intra DC coefficient as separate/optimized or - as the other Intra AC. (0..7) */ - - int fcode_forward; /* For P-VOPs Motion Vector range control - 1: [-16,16] .. 7:[-1024,1024] */ -} vdxVideoPacketHeader_t; -/* {{-output"vdxVideoPacketHeader_t.txt"}} */ - - -/* - * vdxGetPictureHeaderInputParam_t - */ - -/* {{-output"vdxGetPictureHeaderInputParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the vdxGetPictureHeader function. - {{-output"vdxGetPictureHeaderInputParam_t_info.txt"}} */ - -/* {{-output"vdxGetPictureHeaderInputParam_t.txt"}} */ -typedef struct { - int numStuffBits; /* Number of stuffing bits before PSC */ - - int fCustomPCF; /* Non-zero if custom picture clock frequency - is allowed. Otherwise zero. */ - - int fScalabilityMode; /* Non-zero if the Temporal, SNR, and Spatial - Scalability mode (Annex O) is in use. - Otherwise zero. */ - - int fRPS; /* Non-zero if the Refence Picture Selection - mode (Annex N) is in use. Otherwise zero. */ - - bibFlushBits_t flushBits; /* Pointers for bit buffer functions. */ - bibGetBits_t getBits; /* Needed to provide a possibly different */ - bibShowBits_t showBits; /* input mechanism for normal reading from - incoming bit-stream and for parsing - a picture header copy */ -} vdxGetPictureHeaderInputParam_t; -/* {{-output"vdxGetPictureHeaderInputParam_t.txt"}} */ - - -/* - * vdxPictureHeader_t - * Defined in vdc263.h because Video Decoder Core exports the data structure. - */ - - -/* - * vdxSEI_t - * Defined in vdc263.h because Video Decoder Core exports the data structure. - */ - - -/* - * vdxGetGOBHeaderInputParam_t - */ - -/* {{-output"vdxGetGOBHeaderInputParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the vdxGetGOBHeader function. - {{-output"vdxGetGOBHeaderInputParam_t_info.txt"}} */ - -/* {{-output"vdxGetGOBHeaderInputParam_t.txt"}} */ -typedef struct { - int numStuffBits; /* Number of stuffing bits before PSC */ - - int fCustomPCF; /* Non-zero if custom picture clock frequency - is allowed. Otherwise zero. */ - - int fCPM; /* Non-zero if the Continuous Presence - Multipoint feature (Annex C) is in use. - Otherwise zero. */ - - int fRPS; /* Non-zero if the Refence Picture Selection - mode (Annex N) is in use. Otherwise zero. */ -} vdxGetGOBHeaderInputParam_t; -/* {{-output"vdxGetGOBHeaderInputParam_t.txt"}} */ - - -/* - * vdxGOBHeader_t - */ - -/* {{-output"vdxGOBHeader_t_info.txt" -ignore"*" -noCR}} - The vdxGetGOBHeader function uses this structure to return the GOB - header parameters. - {{-output"vdxGOBHeader_t_info.txt"}} */ - -/* {{-output"vdxGOBHeader_t.txt"}} */ -typedef struct { - int gn; /* Group Number (GN) field */ - - int gfid; /* GOB Frame ID (GFID) field */ - - int gquant; /* Quantizer Information (GQUANT) field */ - - /* If CPM (Annex C) is in use */ - int gsbi; /* GOB Sub-Bitstream Indicator (GSBI) field */ - - /* If the Reference Picture Selection mode is in use */ - int tri; /* Temporal Reference Indicator (TRI) field */ - int trpi; /* Temporal Reference for Prediction - Indicator (TRPI) field */ - - /* If tri == 1 */ - int tr; /* Temporal Reference (TR) field */ - - /* If trpi == 1 */ - int trp; /* Temporal Reference for Prediction (TRP) - field */ -} vdxGOBHeader_t; -/* {{-output"vdxGOBHeader_t.txt"}} */ - - -/* - * vdxGetSliceHeaderInputParam_t - */ - -/* {{-output"vdxGetSliceHeaderInputParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the vdxGetSliceHeader function. - {{-output"vdxGetSliceHeaderInputParam_t_info.txt"}} */ - -/* {{-output"vdxGetSliceHeaderInputParam_t.txt"}} */ -typedef struct { - int sliceHeaderAfterPSC; /* If the slice follows a PSC, the value - should be 1 */ - - int numStuffBits; /* Number of stuffing bits before SSC */ - - int fCPM; /* Non-zero if the Continuous Presence - Multipoint feature (Annex C) is in use. - Otherwise zero. */ - - int fRPS; /* Non-zero if the Refence Picture Selection - mode (Annex N) is in use. Otherwise zero. */ - - int mbaFieldWidth; /* MBA Field width */ - int mbaMaxValue; /* MBA maximum value. See Table K.2/H.263 */ - - int fRectangularSlices; /* 0 = free-running slices, - 1 = rectangular slices */ - - int swiFieldWidth; /* SWI Field width */ - int swiMaxValue; /* SWI maximum value. See Table K.3/H.263 */ -} vdxGetSliceHeaderInputParam_t; -/* {{-output"vdxGetSliceHeaderInputParam_t.txt"}} */ - -/* - * vdxSliceHeader_t - */ - -/* {{-output"vdxSliceHeader_t_info.txt" -ignore"*" -noCR}} - The vdxGetSliceHeader function uses this structure to return the Slice - header parameters. - {{-output"vdxSliceHeader_t_info.txt"}} */ - -/* {{-output"vdxSliceHeader_t.txt"}} */ -typedef struct { - /* If CPM (Annex C) is in use */ - int ssbi; /* Slice Sub-Bitstream Indicator (SSBI) */ - - int gn; /* Group Number (GN) field */ - - int sbn; /* Sub-Bitstream number */ - - int mba; /* Macroblock Address (MBA) */ - - /* If not the slice just after the PSC */ - int squant; /* Quantizer Inforation (SQUANT) */ - - /* If fRectangularSlices */ - int swi; /* Slice Width Indication in Macroblocks (SWI)*/ - - int gfid; /* GOB Frame ID (GFID) field */ - /* If the Reference Picture Selection mode is in use */ - int tri; /* Temporal Reference Indicator (TRI) field */ - int trpi; /* Temporal Reference for Prediction - Indicator (TRPI) field */ - - /* If tri == 1 */ - int tr; /* Temporal Reference (TR) field */ - - /* If trpi == 1 */ - int trp; /* Temporal Reference for Prediction (TRP) - field */ - -} vdxSliceHeader_t; -/* {{-output"vdxSliceHeader_t.txt"}} */ - -/* - * vdxGetIMBLayerInputParam_t - */ - -/* {{-output"vdxGetIMBLayerInputParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the vdxGetIMBLayer function. - {{-output"vdxGetIMBLayerInputParam_t_info.txt"}} */ - -/* {{-output"vdxGetIMBLayerInputParam_t.txt"}} */ -typedef struct { - int fMQ; /* Modified Quantization */ - int quant; /* Current QUANT */ - int fAIC; /* Advanced Intra Coding Flag */ - int fSS; /* Slice Structured Mode Flag */ - u_char fMPEG4; /* MPEG4 or H.263 */ -} vdxGetIMBLayerInputParam_t; -/* {{-output"vdxGetIMBLayerInputParam_t.txt"}} */ - - -/* - * vdxGetDataPartitionedIMBLayerInputParam_t - */ - -/* {{-output"vdxGetDataPartitionedIMBLayerInputParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the vdxGetDataPartitionedIMBLayer function. /MPEG-4/ - {{-output"vdxGetDataPartitionedIMBLayerInputParam_t_info.txt"}} */ - -/* {{-output"vdxGetDataPartitionedIMBLayerInputParam_t.txt"}} */ -typedef struct { - int intra_dc_vlc_thr; - int quant; /* Current QUANT */ -} vdxGetDataPartitionedIMBLayerInputParam_t; -/* {{-output"vdxGetDataPartitionedIMBLayerInputParam_t.txt"}} */ - - -/* - * vdxIMBLayer_t - */ - -/* {{-output"vdxIMBLayer_t_info.txt" -ignore"*" -noCR}} - The vdxGetIMBLayer function uses this structure to return - the macroblock header parameters. - {{-output"vdxIMBLayer_t_info.txt"}} */ - -/* {{-output"vdxIMBLayer_t.txt"}} */ -typedef struct { - int mcbpc; /* Macroblock type and the coded block - pattern for chrominance */ - - int cbpc; /* Coded Block Pattern for Chrominance, - bit 1 is for U and bit 0 is for V, - use vdxIsUCoded and vdxIsVCoded macros - to access this value */ - - int cbpy; /* Coded Block Pattern for Luminance, - bit 3 is for block 1, ..., - bit 0 is for block 4, - use vdxIsYCoded macro to access this - value */ - -/*** MPEG-4 REVISION ***/ - u_char ac_pred_flag; /* "1" AC prediction used, "0" not */ -/*** End MPEG-4 REVISION ***/ - - int quant; /* New (possibly updated) QUANT */ - - int predMode; /* Prediction Mode used in Annex I - 0 (DC Only) - 1 (Vertical DC&AC) - 2 (Horizontal DC&AC) */ - - int mbType; /* 0..5, see table 9/H.263 */ - -} vdxIMBLayer_t; -/* {{-output"vdxIMBLayer_t.txt"}} */ - - -/* - * vdxGetPPBMBLayerInputParam_t - */ - -/* {{-output"vdxGetPPBMBLayerInputParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the vdxGetPPBMBLayer function. - {{-output"vdxGetPPBMBLayerInputParam_t_info.txt"}} */ - -/* {{-output"vdxGetPPBMBLayerInputParam_t.txt"}} */ -typedef struct { - int pictureType; /* Picture type is one of the following: - VDX_PIC_TYPE_P INTER - VDX_PIC_TYPE_PB PB (Annex G) - VDX_PIC_TYPE_IPB Improved PB */ - - /* See the description of vdxPictureHeader_t for the following flags. */ - int fPLUSPTYPE; - int fUMV; - int fAP; - int fDF; - int fMQ; - - int fCustomSourceFormat; /* Flag indicating if custom source format - is used */ - - -/*** MPEG-4 REVISION ***/ - u_char fMPEG4; /* MPEG4 or H.263 */ - int f_code; -/*** End MPEG-4 REVISION ***/ - - int quant; /* Current QUANT */ - - int fFirstMBOfPicture; /* Non-zero if the macroblock is the first - (top-left) one of the picture */ - - int fAIC; /* Advanced Intra Coding Flag */ -} vdxGetPPBMBLayerInputParam_t; -/* {{-output"vdxGetPPBMBLayerInputParam_t.txt"}} */ - - -/* - * vdxGetDataPartitionedPMBLayerInputParam_t - */ - -/* {{-output"vdxGetDataPartitionedPMBLayerInputParam_t_info.txt" -ignore"*" -noCR}} - This structure is used to pass input parameters to - the vdxGetDataPartitionedPMBLayer function. /MPEG-4/ - {{-output"vdxGetDataPartitionedPMBLayerInputParam_t_info.txt"}} */ - -/* {{-output"vdxGetDataPartitionedPMBLayerInputParam_t.txt"}} */ -typedef struct { - int intra_dc_vlc_thr; - int quant; /* Current QUANT */ - int f_code; -} vdxGetDataPartitionedPMBLayerInputParam_t; -/* {{-output"vdxGetDataPartitionedPMBLayerInputParam_t.txt"}} */ - - -/* - * vdxPPBMBLayer_t - */ - -/* {{-output"vdxPPBMBLayer_t_info.txt" -ignore"*" -noCR}} - The vdxGetPPBMBLayer function uses this structure to return - the macroblock header parameters. - {{-output"vdxPPBMBLayer_t_info.txt"}} */ - -/* {{-output"vdxPPBMBLayer_t.txt"}} */ -typedef struct { - int mcbpc; /* Macroblock type and the coded block - pattern for chrominance */ - - int fCodedMB; /* 1 if the macroblock is coded. - Otherwise 0. */ - - int mbType; /* 0..5, see table 9/H.263 */ - - int mbClass; /* VDX_MB_INTRA or VDX_MB_INTER */ - - int cbpc; /* Coded Block Pattern for Chrominance, - bit 1 is for U and bit 0 is for V, - use vdxIsUCoded and vdxIsVCoded macros - to access this value */ - - int cbpy; /* Coded Block Pattern for Luminance, - bit 3 is for block 1, ..., - bit 0 is for block 4, - use vdxIsYCoded macro to access this - value */ - - int cbpb; /* Coded Block Pattern for B-blocks, - bit 5 is for block 1, ..., - bit 0 is for block 6 */ - -/*** MPEG-4 REVISION ***/ - u_char ac_pred_flag; /* "1" AC prediction used, "0" not */ -/*** End MPEG-4 REVISION ***/ - - int quant; /* New (possibly updated) QUANT */ - - int numMVs; /* Number of motion vectors for the MB, - 0 if MVD is not in the stream, - 1 if MVD but not MVD2-4 is in the stream, - 4 if MVD and MVD2-4 is in the stream */ - - /* Only the number of MVs indicated in the numMVs member is valid - in the following arrays. */ - int mvdx[4]; /* Horizontal components of MVD1-4, - index to table 14/H.263 */ - int mvdy[4]; /* Vertical components of MVD1-4, - index to table 14/H.263 */ - - int fMVDB; /* 1 = MVDB exists in the bitstream, - i.e. mvdbx and mvdby are valid */ - - int mvdbx; /* Horizontal components of MVDB, - index to table 14/H.263 */ - int mvdby; /* Vertical components of MVDB, - index to table 14/H.263 */ - int predMode; /* Prediction Mode used in Annex I - 0 (DC Only) - 1 (Vertical DC&AC) - 2 (Horizontal DC&AC) */ - int IPBPredMode; /* Prediction Modes used in annex M - 0 Bidirectional prediction - 1 Forward prediction - 2 Backward prediction */ -} vdxPPBMBLayer_t; -/* {{-output"vdxPPBMBLayer_t.txt"}} */ - - -/* - * vdxIMBListItem_t - */ - -/* {{-output"vdxIMBListItem_t_info.txt" -ignore"*" -noCR}} - List Item which is used to build a queue of Intra MBs during the data - partitioned decoding of an I-VOP. /MPEG-4/ - The vdxGetDataPartitionedIMBLayer function uses this structure. - {{-output"vdxIMBListItem_t_info.txt"}} */ - -/* {{-output"vdxIMBListItem_t.txt"}} */ - - -/* Data item recording for data partitioned transcoding */ -#ifndef VDT_OPERATION -#define VDT_OPERATION -#define VDT_SET_START_POSITION(mb,item,byte,bit) \ -{\ - (mb)->DataItemStartByteIndex[(item)] = (byte);\ - (mb)->DataItemStartBitIndex[(item)] = (bit);\ -} - -#define VDT_SET_END_POSITION(mb,item,byte,bit) \ -{\ - (mb)->DataItemEndByteIndex[(item)] = (byte);\ - (mb)->DataItemEndBitIndex[(item)] = (bit);\ -} -#endif - - - -typedef struct { - DLST_ITEM_SKELETON - -/* for data partitioned transcoding - array ordering: 0: mcbpc, 1: dquant, 2: cbpy, 3: ac_pred_flag, 4~9: intraDCs, 10: mv, 11: mb stuffing - */ - int mcbpc; - int DataItemStartByteIndex[12]; - int DataItemStartBitIndex[12]; - int DataItemEndByteIndex[12]; - int DataItemEndBitIndex[12]; - int dquant; - - int DC[6]; /* DC component */ - int quant; /* QUANT */ - int cbpc; /* Coded Block Pattern for Chrominance */ - int cbpy; /* Coded Block Pattern for Luminance */ - u_char ac_pred_flag; /* "1" AC prediction used, "0" not */ - u_char switched; /* intra_dc_vlc_thr indicated switch - to Intra AC VLC coding of the DC coeff - intstead of the usual DC VLC coding - at this QP */ -} vdxIMBListItem_t; -/* {{-output"vdxIMBListItem_t.txt"}} */ - - -/* - * vdxPMBListItem_t - */ - -/* {{-output"vdxPMBListItem_t_info.txt" -ignore"*" -noCR}} - List Item which is used to build a queue of Inter MBs during the data - partitioned decoding of a P-VOP. /MPEG-4/ - The vdxGetDataPartitionedPMBLayer function uses this structure. - {{-output"vdxPMBListItem_t_info.txt"}} */ - -/* {{-output"vdxPMBListItem_t.txt"}} */ -typedef struct { - DLST_ITEM_SKELETON -/* for data partitioned transcoding - array ordering: 0: mcbpc, 1: dquant, 2: cbpy, 3: ac_pred_flag, 4~9: intraDCs, 10: mv, 11: mb stuffing - */ - int mcbpc; - int DataItemStartByteIndex[12]; - int DataItemStartBitIndex[12]; - int DataItemEndByteIndex[12]; - int DataItemEndBitIndex[12]; - int dquant; - int mv_x[4]; /* horizontal componenet of 1-4 MVs */ - int mv_y[4]; /* vertical componenet of 1-4 MVs */ - - u_char fCodedMB; /* 1 if the macroblock is coded. - Otherwise 0. */ - int mbType; /* 0..5, see table 9/H.263 */ - int mbClass; /* VDX_MB_INTRA or VDX_MB_INTER */ - int DC[6]; /* DC component */ - int quant; /* QUANT */ - int cbpc; /* Coded Block Pattern for Chrominance */ - int cbpy; /* Coded Block Pattern for Luminance */ - u_char ac_pred_flag; /* "1" AC prediction used, "0" not */ - u_char switched; /* intra_dc_vlc_thr indicated switch - to Intra AC VLC coding of the DC coeff - intstead of the usual DC VLC coding - at this QP */ - int numMVs; /* Number of motion vectors for the MB */ - int mvx[4]; /* horizontal componenet of 1-4 MVs */ // actually it is dMV - int mvy[4]; /* vertical componenet of 1-4 MVs */ -} vdxPMBListItem_t; -/* {{-output"vdxPMBListItem_t.txt"}} */ - - -/* - * Macros - */ - -/* These arrays are intialized in viddemux.c and needed in the vdxIsYXCoded - macros. */ -extern const int vdxBlockIndexToCBPYMask[5]; -extern const int vdxYBlockIndexToCBPBMask[5]; - -/* {{-output"vdxIsXCoded.txt"}} */ -/* - * vdxIsYCoded - * vdxIsUCoded - * vdxIsVCoded - * vdxIsYBCoded - * vdxIsUBCoded - * vdxIsVBCoded - * - * Parameters: - * for vdxIsYCoded: - * cbpy coded block for luminance - * blockIndex index for luminance block 1..4 - * - * for vdxIsUCoded and vdxIsVCoded: - * cbpc coded block pattern for chrominance - * - * for vdxIsXBCoded: - * cbpb coded block pattern for B blocks - * blockIndex index for B luminance block 1..4 - * - * Function: - * This macros access the coded block bit patterns. - * - * Returns: - * 0 if the requested block is not coded - * non-zero if the requested block is coded - * - */ - -#define vdxIsYCoded(cbpy, blockIndex) \ - ((cbpy) & vdxBlockIndexToCBPYMask[(blockIndex)]) - -#define vdxIsUCoded(cbpc) ((cbpc) & 2) -#define vdxIsVCoded(cbpc) ((cbpc) & 1) - -#define vdxIsYBCoded(cbpb, blockIndex) \ - ((cbpb) & vdxYBlockIndexToCBPBMask[(blockIndex)]) - -#define vdxIsUBCoded(cbpb) ((cbpb) & 2) -#define vdxIsVBCoded(cbpb) ((cbpb) & 1) -/* {{-output"vdxIsXCoded.txt"}} */ - - -/* - * Function prototypes - */ - -/* Picture Layer Global Functions */ -class CMPEG4Transcoder; - -int vdxGetVolHeader( - bibBuffer_t *inBuffer, - vdxVolHeader_t *header, - int *bitErrorIndication, - int getInfo, int *aByteIndex, int *aBitIndex, - CMPEG4Transcoder *hTranscoder); - -int vdxGetGovHeader( - bibBuffer_t *inBuffer, - vdxGovHeader_t *header, - int *bitErrorIndication); - -int vdxGetVopHeader( - bibBuffer_t *inBuffer, - const vdxGetVopHeaderInputParam_t *inpParam, - vdxVopHeader_t *header, - int * ModuloByteIndex, - int * ModuloBitIndex, - int * TimeIncByteIndex, - int * TimeIncBitIndex, - int *bitErrorIndication); - -int vdxGetPictureHeader( - bibBuffer_t *inBuffer, - const vdxGetPictureHeaderInputParam_t *inpParam, - vdxPictureHeader_t *header, - int *bitErrorIndication); - -int vdxFlushSEI( - bibBuffer_t *inBuffer, - int *bitErrorIndication); - -int vdxGetSEI( - bibBuffer_t *inBuffer, - int *ftype, - int *dsize, - u_char *parameterData, - int *fLast, - int *bitErrorIndication); - -int vdxGetAndParseSEI( - bibBuffer_t *inBuffer, - int fPLUSPTYPE, - int numScalabilityLayers, - vdxSEI_t *sei, - int *bitErrorIndication); - -int vdxGetUserData(bibBuffer_t *inBuffer, - char *user_data, int *user_data_length, - int *bitErrorIndication); - -/* GOB/Video Packet Layer Global Functions */ - -int vdxGetGOBHeader( - bibBuffer_t *inBuffer, - const vdxGetGOBHeaderInputParam_t *inpParam, - vdxGOBHeader_t *header, - int *bitErrorIndication, - int aColorEffect, - int* aStartByteIndex, - int* aStartBitIndex, - CMPEG4Transcoder *hTranscoder); - -int vdxGetVideoPacketHeader( - bibBuffer_t *inBuffer, - const vdxGetVideoPacketHeaderInputParam_t *inpParam, - vdxVideoPacketHeader_t *header, - int *bitErrorIndication); - -/* Slice Layer Global Functions*/ - -int vdxGetSliceHeader( - bibBuffer_t *inBuffer, - const vdxGetSliceHeaderInputParam_t *inpParam, - vdxSliceHeader_t *header, - int *bitErrorIndication); - -void vdxGetMBAandSWIValues( - int width, - int height, - int fRRU, - int *mbaFieldWidth, - int *mbaMaxValue, - int *swiFieldWidth, - int *swiMaxValue); - -/* Macroblock Layer Global Functions */ - - -int vdxGetIMBLayer( - bibBuffer_t *inBuffer, - bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, - int aColorEffect, - int *StartByteIndex, - int *StartBitIndex, - TBool aGetDecodedFrame, - const vdxGetIMBLayerInputParam_t *inpParam, - vdxIMBLayer_t *outParam, - int *bitErrorIndication, - CMPEG4Transcoder *hTranscoder); - - -int vdxGetPPBMBLayer( - bibBuffer_t *inBuffer, - bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, - int aColorEffect, - int *aStartByteIndex, - int *aStartBitIndex, - TBool aGetDecodedFrame, - int *bwMBType, - const vdxGetPPBMBLayerInputParam_t *inpParam, - vdxPPBMBLayer_t *outParam, - int *bitErrorIndication, - CMPEG4Transcoder *hTranscoder); - - -int vdxGetDataPartitionedIMBLayer_Part1( - bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, bibBufferEdit_t *bufEdit, - int aColorEffect, int *aStartByteIndex, int *aStartBitIndex, - CMPEG4Transcoder *hTranscoder, - const vdxGetDataPartitionedIMBLayerInputParam_t *inpParam, - dlst_t *MBList, - int *bitErrorIndication); - -int vdxGetDataPartitionedIMBLayer_Part2( - bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, bibBufferEdit_t *bufEdit, - int aColorEffect, int *aStartByteIndex, int *aStartBitIndex, - dlst_t *MBList, - int numMBsInVP, - int *bitErrorIndication); - -int vdxGetDataPartitionedPMBLayer_Part1( - bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, bibBufferEdit_t *bufEdit, - int aColorEffect, int *aStartByteIndex, int *aStartBitIndex, - const vdxGetDataPartitionedPMBLayerInputParam_t *inpParam, - dlst_t *MBList, - int *bitErrorIndication); - -int vdxGetDataPartitionedPMBLayer_Part2( - bibBuffer_t *inBuffer, - bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, - int aColorEffect, int *aStartByteIndex, int *aStartBitIndex, - CMPEG4Transcoder *hTranscoder, - const vdxGetDataPartitionedPMBLayerInputParam_t *inpParam, - dlst_t *MBList, - int *bitErrorIndication); - -/* Block Layer Global Functions */ - -int vdxGetIntraDCTBlock( - bibBuffer_t *inBuffer, - int fCodedBlock, - int *block, - int *bitErrorIndication, - int fMQ, - int qp); - -int vdxGetIntraDC( - bibBuffer_t *inBuffer, - bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, - int aColorEffect, - int *aStartByteIndex, - int *aStartBitIndex, - int compnum, - int *IntraDCSize, - int *IntraDCDelta, - int *bitErrorIndication); - -int vdxGetMPEGIntraDCTBlock( - bibBuffer_t *inBuffer, - int startIndex, - int *block, - int *bitErrorIndication); - -int vdxGetDCTBlock( - bibBuffer_t *inBuffer, - int startIndex, - u_char fMPEG4EscapeCodes, - int *block, - int *bitErrorIndication, - int fMQ, - int qp, - int *fEscapeCodeUsed); - -int vdxGetAdvIntraDCTBlock( - bibBuffer_t *inBuffer, - int fCodedBlock, - int *block, - int *bitErrorIndication, - int predMode, - int fMQ, - int qp); - -int vdxGetAdvDCTBlock( - bibBuffer_t *inBuffer, - int startIndex, - int *block, - int *bitErrorIndication, - int predMode, - int fMQ, - int qp); - -int vdxGetRVLCDCTBlock( - bibBuffer_t *inBuffer, - int startIndex, - int fIntraBlock, - int *block, - int *bitErrorIndication); - -int vdxGetRVLCDCTBlockBackwards( - bibBuffer_t *inBuffer, - int startIndex, - int fIntraBlock, - int *block, - int *bitErrorIndication); - - - -int vdxChangeBlackAndWhiteHeaderIntraIMB(bibBufferEdit_t *bufEdit, - int mcbpcIndex, - int StartByteIndex, - int StartBitIndex); - -int vdxChangeBlackAndWhiteHeaderInterPMB(bibBufferEdit_t *bufEdit, - int mcbpcIndex, - int StartByteIndex, - int StartBitIndex); - - - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/inc/zigzag.h --- a/videoeditorengine/h263decoder/inc/zigzag.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definition of the zigzag tables. -* -*/ - - -#ifndef _ZIGZAG_H_ -#define _ZIGZAG_H_ - -/* - * Structs and typedefs - */ - -/* Normal zigzag */ -static const int zigzag[64] = { - 0, 1, 5, 6,14,15,27,28, - 2, 4, 7,13,16,26,29,42, - 3, 8,12,17,25,30,41,43, - 9,11,18,24,31,40,44,53, - 10,19,23,32,39,45,52,54, - 20,22,33,38,46,51,55,60, - 21,34,37,47,50,56,59,61, - 35,36,48,49,57,58,62,63 -}; - -/* Horizontal zigzag */ -static const int zigzag_h[64] = { - 0, 1, 2, 3,10,11,12,13, - 4, 5, 8, 9,17,16,15,14, - 6, 7,19,18,26,27,28,29, - 20,21,24,25,30,31,32,33, - 22,23,34,35,42,43,44,45, - 36,37,40,41,46,47,48,49, - 38,39,50,51,56,57,58,59, - 52,53,54,55,60,61,62,63 -}; - -/* Vertical zigzag */ -static const int zigzag_v[64] = { - 0, 4, 6,20,22,36,38,52, - 1, 5, 7,21,23,37,39,53, - 2, 8,19,24,34,40,50,54, - 3, 9,18,25,35,41,51,55, - 10,17,26,30,42,46,56,60, - 11,16,27,31,43,47,57,61, - 12,15,28,32,44,48,58,62, - 13,14,29,33,45,49,59,63 -}; - -/* Inverse normal zigzag */ -static const int zigzag_i[64] = -{ - 0, 1, 8,16, 9, 2, 3,10, - 17,24,32,25,18,11, 4, 5, - 12,19,26,33,40,48,41,34, - 27,20,13, 6, 7,14,21,28, - 35,42,49,56,57,50,43,36, - 29,22,15,23,30,37,44,51, - 58,59,52,45,38,31,39,46, - 53,60,61,54,47,55,62,63 -}; - -#endif /* ifndef _ZIGZAG_H_ */ -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/MPEG4Transcoder.cpp --- a/videoeditorengine/h263decoder/src/MPEG4Transcoder.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4335 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation for MPEG4(H263) video transcoder. Operations may include: -* 1. Bitstream Copying -* 2. BlackAndWhite Effect -* 3. MPEG4 to VDT_RESYN (Simple profile) -* 4. H.263 -> MPEG4 (Open Loop structure, no MV refinement) -* 5. MPEG4 -> H263, partial implemented -* -* We call functions 2~5 as transcoding functions since they involve MB level data processing -* -* Note: -* When RVLC is used and errors occur during forward decoding, -* We don't do backward transcoding, the rest of the data is discarded, -* -*/ - - - -/* -* Includes -*/ -#include "MPEG4Transcoder.h" -#include "debug.h" - -/* Print macro */ -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x -#else -#define PRINT(x) -#endif - -/* -* Defines and Typedefs -*/ -typedef unsigned int uint32; - -#define EInternalAssertionFailure 1000 -#define VDT_NO_DATA(a, b, c, d) ((a) == (c) && (b) == (d)) - -const int KDataNotValid = -1; -const int KMpeg4VopTimeIncrementResolutionLength = 16; -const int KOutputMpeg4TimeIncResolution = 30000; -const int KShortHeaderMpeg4VosSize = 14; -const int KH263ToMpeg4VosSize = 28; - - - -/*Bit stream formating*/ -#define WRITE32(op, x) sPutBits((op), 16, ((uint32)(x)) >> 16); \ -sPutBits((op), 16, (x) & 0x0000ffff) - -/* -* Constants -*/ -#ifdef _DEBUG -const TUint KInitialBufferSize = 200000; /* MPEG4 Simple Visual Profile (Levels 0,1,2,3) initial frame data buffer size vga support */ -#endif - /* - * Function Declarations -*/ - -//Static Functions - -static void sStuffBitsH263(bibBuffer_t *outBuffer); -static TVedVideoBitstreamMode sGetMPEG4Mode(int error_resilience_disable, int dp, int rvlc); -static int sFindCBP(int *mbdata, int fUseIntraDCVLC); - - - -void vdtPutInterMBCMT(bibBuffer_t *outBuffer, int coeffStart, int *coeff, int *numTextureBits, int svh); -void vdtPutIntraMBCMT(bibBuffer_t *outBuffer, int *coeff, int *numTextureBits, int index, int skipDC, int skipAC); -void vbmEncodeMVDifferential(int32 mvdx, int32 mvdy, int32 fCode, bibBuffer_t *outBuffer); -void vbmGetH263IMCBPC(int lDQuant, int vopCodingType, int colorEffect, int cbpy, int& mcbpcVal, int& len); -void vbmGetH263PMCBPC(int lDQuant, int colorEffect, int cbpy, int& mcbpcVal, int& len); -tBool vbmMVOutsideBound(tMBPosition *mbPos, tMotionVector* bestMV, tBool halfPixel); -void vbmMvPrediction(tMBInfo *mbi, int32 mBCnt, tMotionVector *predMV, int32 mbinWidth); -void vbmPutInterMB(tMBPosition* mbPos, bibBuffer_t *outBuf, dmdPParam_t *paramMB, tMotionVector *initPred, - int32 noOfPredictors, u_int32 vopWidth, u_int32 vopHeight, int32 searchRange, - int32 mbNo, int32* numTextureBits, int16 colorEffect, tMBInfo *mbsinfo); - -void sPutBits (bibBuffer_t *buf, int numBits, unsigned int value); //forward decl - -/* -* Function Definitions -*/ - -/* -* sStuffBitsH263 -* -* Parameters: -* outBuffer output buffer -* -* Function: -* This function stuffs bits for H.263 format -* Returns: -* None -* Error codes: -* None. -* -*/ -static void sStuffBitsH263(bibBuffer_t *outBuffer) -{ - const int stuffingBits[8][2] = { {1,0}, {2,0}, {3,0}, {4,0}, {5,0}, {6,0}, {7,0}, {0,0} }; - - VDTASSERT(outBuffer->baseAddr); - - /* find the number of stuffing bits to insert in the output buffer */ - int bi = outBuffer->bitIndex; - int newNumBits = stuffingBits[bi][0]; - int newValue = stuffingBits[bi][1]; - sPutBits(outBuffer, newNumBits, newValue); - - return; -} - - - -/* -* sGetMPEG4Mode -* -* Parameters: -* -* -* Function: -* This function gets the mode of the MPEG-4 bitstream -* Returns: -* Nothing -* Error codes: -* None. -* -*/ -static TVedVideoBitstreamMode sGetMPEG4Mode(int error_resilience_disable, int dp, int rvlc) -{ - TVedVideoBitstreamMode mode = EVedVideoBitstreamModeUnknown; - int combination = ((!error_resilience_disable) << 2) | (dp << 1) | rvlc; - switch (combination) - { - case 0: - mode = EVedVideoBitstreamModeMPEG4Regular; - break; - case 2: - mode = EVedVideoBitstreamModeMPEG4DP; - break; - case 3: - mode = EVedVideoBitstreamModeMPEG4DP_RVLC; - break; - case 4: - mode = EVedVideoBitstreamModeMPEG4Resyn; - break; - case 6: - mode = EVedVideoBitstreamModeMPEG4Resyn_DP; - break; - case 7: - mode = EVedVideoBitstreamModeMPEG4Resyn_DP_RVLC; - break; - default: - mode = EVedVideoBitstreamModeUnknown; - } - - return mode; -} - - -/* {{-output"vdtGetVideoBitstreamInfo.txt"}} */ -/* -* sFindCBP -* -* Parameters: -* mbdata Contains the actual MB data to be quantized -* fUseIntraDCVLC ON for INTRA, OFF for INTER -* -* Function: -* This function finds the coded bit pattern of the MB -* Returns: -* Coded Block Pattern. -* Error codes: -* None. -* -*/ -static int sFindCBP(int *mbdata, int fUseIntraDCVLC) -{ - int coeffCnt; - int *block; - int blkCnt; - int cbpFlag = 0; - int codedBlockPattern = 0; - - for (blkCnt = 0; blkCnt < 6; blkCnt++) - { - cbpFlag = 0; - codedBlockPattern <<= 1; - block = &mbdata[blkCnt * BLOCK_COEFF_SIZE]; - for (coeffCnt = fUseIntraDCVLC; coeffCnt < BLOCK_COEFF_SIZE; - coeffCnt++) - { - if (block[coeffCnt]) - { - cbpFlag = 1; - codedBlockPattern |= cbpFlag; - break; - } - } - } - - return codedBlockPattern; -} - - - - - - -/* {{-output"sPutBits.txt"}} */ -/* -* sPutBits -* -* Parameters: -* outBuf output buffer -* numBits number of bits to output -* value new value -* -* Function: -* This function puts some bits to the output buffer -* Returns: -* Nothing. -* Error codes: -* None. -* -*/ -void sPutBits (bibBuffer_t *buf, int numBits, unsigned int value) -{ - - bibEditParams_t edParam; - - edParam.curNumBits = edParam.newNumBits = numBits; - edParam.StartByteIndex = edParam.StartBitIndex = 0; /* used for source buffer only */ - edParam.newValue = value; /* use value 128, encoded as codeword "1111 1111" = 255 */ - - CopyBufferEdit((bibBuffer_t*)NULL, buf, &edParam, 0); -} - - - -/* -* GetTimeIncPosition -* -* -* Parameters: -* hInstance instance handle -* -* Function: -* Calculates the time increment position for the current VOP. -* -* Returns: -* VDX error codes -* -*/ - -int GetTimeIncPosition( - bibBuffer_t *inBuffer, - const vdxGetVopHeaderInputParam_t *inpParam, - vdxVopHeader_t *header, - int * ModuloByteIndex, - int * ModuloBitIndex, - int * ByteIndex, - int * BitIndex, - int *bitErrorIndication) -/* {{-output"vdxGetVopHeader.txt"}} */ -{ - /* Get VOP header */ - int ret = vdxGetVopHeader(inBuffer, inpParam, header, - ModuloByteIndex, ModuloBitIndex, ByteIndex, BitIndex, - bitErrorIndication); - - return ret; - -} - - - -/* -* CopyEditVop -* -* -* Parameters: -* hInstance instance handle -* -* Function: -* This function copies the VOP header with edited time stamps of the VOP. -* -* Returns: -* TX error codes -*/ - -int CopyEditVop(vdeHInstance_t hInstance, int aNrOfBytesToSkip, bibBuffer_t * inBuffer, - vdeDecodeParamters_t *aDecoderInfo) -{ - PRINT((_L("CopyEditVop() begin"))); - int StartByteIndex = 0; - int StartBitIndex = 7; - int16 error; - int sncCode; - int timeIncByteIndex, timeIncBitIndex; - int moduloBaseByteIndex, moduloBaseBitIndex; - int vopheaderBitLeft; - int numBitChange = 0; - int increaseBytes = 0; - int stuffingLength = 0; - - tMPEG4TimeParameter * timeStamp = aDecoderInfo->aMPEG4TimeStamp; - MPEG4TimeParameter CurNewTimeCode; - - int outTirDecreased = 0; - int outputTimeResolution = *aDecoderInfo->aMPEG4TargetTimeResolution; - int numOutputTrBits; - for (numOutputTrBits = 1; ((outputTimeResolution-1) >> numOutputTrBits) != 0; numOutputTrBits++) - { - } - - int num_bits; - vdxGetVopHeaderInputParam_t inpParam; - vdxVopHeader_t vopheader; - int bitErrorIndication; - vdeInstance_t * vdeTemp = (vdeInstance_t *)hInstance; - bibBuffer_t *outBuffer = vdeTemp->outBuffer; - bibBufferEdit_t * bufEdit = vdeTemp->bufEdit; - - int FrameSizeInByte = outBuffer->numBytesRead; - bibRewindBits(bibNumberOfFlushedBits(inBuffer),inBuffer,&error); - bibRewindBits(bibNumberOfFlushedBits(outBuffer),outBuffer,&error); - if ( aNrOfBytesToSkip > 0 ) - { - // VOS header is already in the beginning of the output buffer - bibForwardBits(aNrOfBytesToSkip<<3, outBuffer); - // need to also skip the VOS header from input - } - bufEdit->copyMode = CopyWhole; /* CopyWhole - default */ - - /* record position */ - StartByteIndex = inBuffer->numBytesRead; - StartBitIndex = inBuffer->bitIndex; - - /* get time increment resolution */ - vdcInstance_t * vdcTemp = (vdcInstance_t *)(vdeTemp->vdcHInstance); - int currentTimeIncResolution = vdcTemp->pictureParam.time_increment_resolution > 0? vdcTemp->pictureParam.time_increment_resolution : outputTimeResolution; - inpParam.time_increment_resolution = currentTimeIncResolution; - - /* find the next vop start code */ - do - { - sncCode = sncSeekMPEGStartCode(inBuffer, vdcTemp->pictureParam.fcode_forward, vdcTemp->pictureParam.error_res_disable, 0, &error); - bibForwardBits(32,inBuffer); // one start code is found, move on - if(inBuffer->bitsLeft <= 0) - { - return TX_ERR; // did not find any sync code --- vop is corrupted - } - } - while (sncCode != SNC_VOP); - bibRewindBits(32,inBuffer, &error); // go back - - // if we have VOS header in the input, we are now just after it. If aNrOfBytesToSkip > 0, we should not copy it - // however, aNrOfBytesToSkip refers to output buffer, so we should not use it when skipping the input - if ( aNrOfBytesToSkip > 0 ) - { - StartByteIndex = inBuffer->numBytesRead; - StartBitIndex = inBuffer->bitIndex; - } - - /* read vop header */ - GetTimeIncPosition(inBuffer, &inpParam, &vopheader, - &moduloBaseByteIndex, &moduloBaseBitIndex, &timeIncByteIndex, - &timeIncBitIndex, &bitErrorIndication); - - /* record the header end; */ - vopheaderBitLeft = inBuffer->bitsLeft; - - /* copy-edit the part from the begin to the end of modulo base */ - CurNewTimeCode = *timeStamp; - - if (CurNewTimeCode.modulo_time_base != vopheader.time_base_incr) - { - if (!bufEdit->editParams) - { - bufEdit->editParams = (bibEditParams_t *) malloc(sizeof(bibEditParams_t)); - if(!bufEdit->editParams) - { - //Memory not available - return TX_ERR; //indicating error; - } - else - { - bufEdit->numChanges = 1; - } - } - bufEdit->copyMode = CopyWithEdit; /* CopyWithEdit */ - bufEdit->editParams->curNumBits = vopheader.time_base_incr + 1; - bufEdit->editParams->newNumBits = CurNewTimeCode.modulo_time_base + 1; - bufEdit->editParams->newValue = ((1 << CurNewTimeCode.modulo_time_base) - 1) << 1; - bufEdit->editParams->StartByteIndex = moduloBaseByteIndex; - bufEdit->editParams->StartBitIndex = moduloBaseBitIndex; - numBitChange += bufEdit->editParams->newNumBits - bufEdit->editParams->curNumBits; - } - else - { - bufEdit->copyMode = CopyWhole; /* CopyWithEdit */ - } - /* set the end of copy point */ - bibRewindBits((inBuffer->numBytesRead<<3)+7-inBuffer->bitIndex,inBuffer,&error); - bibForwardBits((moduloBaseByteIndex<<3)+7-moduloBaseBitIndex+vopheader.time_base_incr+2, inBuffer); - - /* copy data */ - CopyStream(inBuffer,outBuffer,bufEdit,StartByteIndex,StartBitIndex); - StartByteIndex=inBuffer->getIndex; - StartBitIndex=inBuffer->bitIndex; - bufEdit->copyMode = CopyWhole; /* CopyWhole */ - - /* copy and edit until the end of Vop header */ - if (currentTimeIncResolution != outputTimeResolution /* && volheader.time_increment_resolution != 30 */ - || vopheader.time_inc != CurNewTimeCode.time_inc) - { - for (num_bits = 1; ((currentTimeIncResolution-1) >> num_bits) != 0; num_bits++) - { - } - /* prepare editing position */ - if (!bufEdit->editParams) - { - bufEdit->editParams = (bibEditParams_t *) malloc(sizeof(bibEditParams_t)); - if(!bufEdit->editParams) - { - //Memory not available - return TX_ERR; //indicating error no memory; - } - else - { - bufEdit->numChanges = 1; - } - - } - bufEdit->copyMode = CopyWithEdit; /* CopyWithEdit */ - bufEdit->editParams->StartByteIndex = timeIncByteIndex; - bufEdit->editParams->StartBitIndex = timeIncBitIndex; - bufEdit->editParams->curNumBits = num_bits; - bufEdit->editParams->newNumBits = numOutputTrBits; - bufEdit->editParams->newValue = vopheader.time_inc; - - /* update time increment */ - if (vopheader.time_inc != CurNewTimeCode.time_inc) - { - /*bufEdit->editParams->newValue = (int)(vopheader.time_inc * (float)outputTimeResolution / - (float)currentTimeIncResolution + 0.5); //CurNewTimeCode.time_inc; - */ - bufEdit->editParams->newValue = CurNewTimeCode.time_inc; - } - numBitChange += bufEdit->editParams->newNumBits - bufEdit->editParams->curNumBits; - } - - /* set the copy end point to the end of vop header */ - bibForwardBits(inBuffer->bitsLeft - vopheaderBitLeft, inBuffer); - - /* copy data */ - CopyStream(inBuffer,outBuffer,bufEdit,StartByteIndex,StartBitIndex); - StartByteIndex=inBuffer->getIndex; - StartBitIndex=inBuffer->bitIndex; - - if ( vdcTemp->pictureParam.error_res_disable && (inBuffer->bitsLeft > 40) ) // 40 as below to avoid negative values below - { - // there are no VP headers => no need to search for VP start codes => can jump to the end. - // 40 = 5 bytes; in the end there is a start code that has 4 bytes - bibForwardBits( inBuffer->bitsLeft-40 ,inBuffer); - } - - PRINT((_L("CopyEditVop() seek sync"))); - /* find the next resync marker */ - sncCode = sncSeekMPEGStartCode(inBuffer, vopheader.fcode_forward, vdcTemp->pictureParam.error_res_disable, 0, &error); - if ( sncCode == SNC_NO_SYNC ) - { - PRINT((_L("CopyEditVop() sync NOT found, interrupt the copying and return"))); - return TX_ERR; - } - PRINT((_L("CopyEditVop() sync found"))); - - /* record next resync position */ - int resyncBitsLeft = inBuffer->bitsLeft; - - /* rewind stuffing bits */ - sncRewindStuffing(inBuffer, &error); - - if (!bufEdit->editParams) - { - bufEdit->editParams = (bibEditParams_t *) malloc(sizeof(bibEditParams_t)); - if(!bufEdit->editParams) - { - //Memory not available - return TX_ERR; //indicating error no memory; - } - else - { - bufEdit->numChanges = 1; - } - } - - /* record position */ - bufEdit->editParams->StartByteIndex = inBuffer->getIndex; - bufEdit->editParams->StartBitIndex = inBuffer->bitIndex; - - /* calculate new stuffing bits */ - bufEdit->editParams->curNumBits = inBuffer->bitsLeft - resyncBitsLeft; - /* calculate number of bits/bytes changed */ - if (numBitChange<0) - { - outTirDecreased = 1; - numBitChange = -numBitChange; - } - int numByteChange = numBitChange >> 3; - - if (outTirDecreased) - { - increaseBytes -= numByteChange; - stuffingLength = bufEdit->editParams->curNumBits + (numBitChange - (numByteChange << 3)); - if (stuffingLength > 8) - { - stuffingLength -= 8; - increaseBytes --; - } - } - else - { - increaseBytes += numByteChange; - stuffingLength = bufEdit->editParams->curNumBits - (numBitChange - (numByteChange << 3)); - if (stuffingLength <= 0) - { - stuffingLength += 8; - increaseBytes ++; - } - } - - /* adjust the output buffer size */ - if (increaseBytes != 0) - { - outBuffer->size += increaseBytes; - if (increaseBytes>=0) - { - outBuffer->bitsLeft += (increaseBytes << 3); - } - else - { - outBuffer->bitsLeft -= ((-increaseBytes) << 3); - } - } - - /* update edit statistics */ - bufEdit->editParams->newNumBits = stuffingLength; - bufEdit->editParams->newValue = stuffingLength>0?(1<<(stuffingLength-1))-1:0; - if (stuffingLength != bufEdit->editParams->curNumBits) - { - bufEdit->copyMode = CopyWithEdit; - } - - bibForwardBits(bufEdit->editParams->curNumBits, inBuffer); - /* copy data */ - CopyStream(inBuffer,outBuffer,bufEdit,StartByteIndex,StartBitIndex); - /* record position */ - StartByteIndex = inBuffer->getIndex; - StartBitIndex = inBuffer->bitIndex; - - do - { - /* if it is the start of a video packet, copy it with edit */ - if (sncCode == SNC_VIDPACK ) - { - /* copy video packet with edit */ - int retVal = CopyEditVideoPacket(inBuffer, outBuffer, bufEdit, vdcTemp, aDecoderInfo, &vopheader, - &sncCode, &StartByteIndex, &StartBitIndex); - if(retVal<0) - { - //error inside function return error - return TX_ERR; - } - } - else if (sncCode == SNC_EOB || sncCode == SNC_EOS || sncCode == SNC_GOV) - { - // since it is EOB, so end of sequence has occurred, so no more data, so exit - break; - } - } - while(sncCode != SNC_VOP); - - /* copy the rest of bits */ - if ((int)inBuffer->numBytesRead < FrameSizeInByte) - { - bufEdit->copyMode = CopyWhole; - bibForwardBits((FrameSizeInByte-StartByteIndex)<<3, inBuffer); - CopyStream(inBuffer,outBuffer,bufEdit,StartByteIndex,StartBitIndex); - } - - PRINT((_L("CopyEditVop() end"))); - return TX_OK; - } - - -/* -* CopyEditVideoPacket -* -* -* Parameters: -* -* Function: -* This function copies the video packet with edited time stamps, if HEC is enabled -* -* Returns: -* TX error codes -*/ - -int CopyEditVideoPacket(bibBuffer_t* aInBuffer, - bibBuffer_t* aOutBuffer, - bibBufferEdit_t* aBufEdit, - vdcInstance_t * aVdcTemp, - vdeDecodeParamters_t* aDecoderInfo, - vdxVopHeader_t* aVopheader, - int* aSncCode, - int* aStartByteIndex, - int* aStartBitIndex) -{ - int16 error = 0; - int value = 0; - int bitsGot = 0; - int num_bits = 0; - int *bitErrorIndication = 0; - int numOutputTrBits = 0; - int resyncMarkerLength = 0; - int numMBs = 0; - int mbNumberLength = 0; - int startByteIndex = *aStartByteIndex; - int startBitIndex = *aStartBitIndex; - int currentTimeIncResolution = 0; - int outputTimeResolution = 0; - MPEG4TimeParameter curNewTimeCode; - MPEG4TimeParameter* timeStamp = aDecoderInfo->aMPEG4TimeStamp; - - int numBitChange = 0; - int increaseBytes = 0; - int stuffingLength = 0; - int outTirDecreased = 0; - - currentTimeIncResolution = aVdcTemp->pictureParam.time_increment_resolution > 0? aVdcTemp->pictureParam.time_increment_resolution : 30000; - outputTimeResolution = *aDecoderInfo->aMPEG4TargetTimeResolution; - for (numOutputTrBits=1; ((outputTimeResolution-1)>>numOutputTrBits)!=0; numOutputTrBits++) - { - } - /* evaluate resync marker length */ - resyncMarkerLength = (aVopheader->coding_type == 0 ? 17 : 16+aVopheader->fcode_forward); - /* evaluate MB number length */ - numMBs = ((aVdcTemp->pictureParam.lumWidth+15)>>4) * ((aVdcTemp->pictureParam.lumHeight+15)>>4); - for (mbNumberLength = 1; ((numMBs-1) >> mbNumberLength) != 0; mbNumberLength++) - { - } - - value = bibGetBits(resyncMarkerLength, aInBuffer, &bitsGot, bitErrorIndication, &error); // resync marker - value = bibGetBits(mbNumberLength, aInBuffer, &bitsGot, bitErrorIndication, &error); // mb number - value = bibGetBits(5, aInBuffer, &bitsGot, bitErrorIndication, &error); // quant scale - value = bibGetBits(1, aInBuffer, &bitsGot, bitErrorIndication, &error); // header extension code - - /* if HEC enabled, copy edit time increment fields in the video packet */ - if (value == 1) - { - /* copy-edit the part from the begin to the end of modulo base */ - curNewTimeCode = *timeStamp; - - if (curNewTimeCode.modulo_time_base != aVopheader->time_base_incr) - { - if (!aBufEdit->editParams) - { - aBufEdit->editParams = (bibEditParams_t *) malloc(sizeof(bibEditParams_t)); - if(!aBufEdit->editParams) - { - //Memory not available - return TX_ERR; //indicating error no memory; - } - else - { - aBufEdit->numChanges = 1; - } - } - aBufEdit->copyMode = CopyWithEdit; /* CopyWithEdit */ - aBufEdit->editParams->curNumBits = aVopheader->time_base_incr + 1; - aBufEdit->editParams->newNumBits = curNewTimeCode.modulo_time_base + 1; - aBufEdit->editParams->newValue = ((1 << curNewTimeCode.modulo_time_base) - 1) << 1; - aBufEdit->editParams->StartByteIndex = aInBuffer->getIndex; - aBufEdit->editParams->StartBitIndex = aInBuffer->bitIndex; - numBitChange += aBufEdit->editParams->newNumBits - aBufEdit->editParams->curNumBits; - } - else - { - aBufEdit->copyMode = CopyWhole; /* CopyWithEdit */ - } - /* set the end of copy point */ - bibForwardBits(aVopheader->time_base_incr+2, aInBuffer); // includes one bit for Marker - - /* copy data */ - CopyStream(aInBuffer,aOutBuffer,aBufEdit,startByteIndex,startBitIndex); - startByteIndex = aInBuffer->getIndex; - startBitIndex = aInBuffer->bitIndex; - aBufEdit->copyMode = CopyWhole; /* CopyWhole */ - - /* copy and edit 'time increment' field */ - if (currentTimeIncResolution != outputTimeResolution /* && volheader.time_increment_resolution != 30 */ - || aVopheader->time_inc != curNewTimeCode.time_inc) - { - for (num_bits = 1; ((currentTimeIncResolution-1) >> num_bits) != 0; num_bits++) - { - } - - /* prepare editing position */ - if (!aBufEdit->editParams) - { - aBufEdit->editParams = (bibEditParams_t *) malloc(sizeof(bibEditParams_t)); - if(!aBufEdit->editParams) - { - //Memory not available - return TX_ERR; //indicating error no memory; - } - else - { - aBufEdit->numChanges = 1; - } - } - aBufEdit->copyMode = CopyWithEdit; /* CopyWithEdit */ - aBufEdit->editParams->StartByteIndex = aInBuffer->getIndex; - aBufEdit->editParams->StartBitIndex = aInBuffer->bitIndex; - aBufEdit->editParams->curNumBits = num_bits; - aBufEdit->editParams->newNumBits = numOutputTrBits; - aBufEdit->editParams->newValue = aDecoderInfo->aMPEG4TimeStamp->time_inc; - - /* move to end position of 'time increment' field */ - bibForwardBits(num_bits, aInBuffer); // move to end of 'time increment' field - /* update time increment */ - if (aVopheader->time_inc != curNewTimeCode.time_inc) - { - aBufEdit->editParams->newValue = curNewTimeCode.time_inc; - } - numBitChange += aBufEdit->editParams->newNumBits - aBufEdit->editParams->curNumBits; - } - - /* copy time increment field with edit */ - CopyStream(aInBuffer,aOutBuffer,aBufEdit,startByteIndex,startBitIndex); - startByteIndex=aInBuffer->getIndex; - startBitIndex=aInBuffer->bitIndex; - - } - - /* copy rest of video packet */ - - /* find the next resync marker */ - *aSncCode = sncSeekMPEGStartCode(aInBuffer, aVopheader->fcode_forward, 0 /* VPs used*/, 0, &error); - - /* record next resync position */ - int resyncBitsLeft = aInBuffer->bitsLeft; - - /* rewind stuffing bits */ - sncRewindStuffing(aInBuffer, &error); - - if (!aBufEdit->editParams) - { - aBufEdit->editParams = (bibEditParams_t *) malloc(sizeof(bibEditParams_t)); - if(!aBufEdit->editParams) - { - //Memory not available - return TX_ERR; //indicating error no memory; - } - else - { - aBufEdit->numChanges = 1; - } - } - - /* record position */ - aBufEdit->editParams->StartByteIndex = aInBuffer->getIndex; - aBufEdit->editParams->StartBitIndex = aInBuffer->bitIndex; - - /* calculate new stuffing bits */ - aBufEdit->editParams->curNumBits = aInBuffer->bitsLeft - resyncBitsLeft; - - /* calculate number of bits/bytes changed */ - if (numBitChange<0) - { - outTirDecreased = 1; - numBitChange = -numBitChange; - } - int numByteChange = numBitChange >> 3; - - /* evaluate change in buffer size */ - if (outTirDecreased) - { - increaseBytes -= numByteChange; - stuffingLength = aBufEdit->editParams->curNumBits + (numBitChange - (numByteChange << 3)); - if (stuffingLength > 8) - { - stuffingLength -= 8; - increaseBytes --; - } - } - else - { - increaseBytes += numByteChange; - stuffingLength = aBufEdit->editParams->curNumBits - (numBitChange - (numByteChange << 3)); - if (stuffingLength <= 0) - { - stuffingLength += 8; - increaseBytes ++; - } - } - - /* adjust the output buffer size */ - if (increaseBytes != 0) - { - aOutBuffer->size += increaseBytes; - if (increaseBytes>=0) - { - aOutBuffer->bitsLeft += (increaseBytes << 3); - } - else - { - aOutBuffer->bitsLeft -= ((-increaseBytes) << 3); - } - } - /* update edit statistics */ - aBufEdit->editParams->newNumBits = stuffingLength; - aBufEdit->editParams->newValue = stuffingLength>0?(1<<(stuffingLength-1))-1:0; - if (stuffingLength != aBufEdit->editParams->curNumBits) - { - aBufEdit->copyMode = CopyWithEdit; // copy with edit - } - else - { - aBufEdit->copyMode = CopyWhole; // copy whole - } - - bibForwardBits(aBufEdit->editParams->curNumBits, aInBuffer); - /* copy video packet with stuffing bits edited */ - CopyStream(aInBuffer, aOutBuffer, aBufEdit, startByteIndex, startBitIndex); - /* record position */ - startByteIndex = aInBuffer->getIndex; - startBitIndex = aInBuffer->bitIndex; - - /* update position for return */ - *aStartByteIndex = startByteIndex; - *aStartBitIndex = startBitIndex; - - return TX_OK; -} - - -/* -* sPutBits -* -* Parameters: -* outBuf output buffer -* numBits number of bits to output -* value new value -* -* Function: -* Wrapper to sPutBits -* Returns: -* None. -* Error codes: -* None. -* -*/ -void vdtPutBits (void *buf, int numBits, unsigned int value) -{ - /* must be in this type! "void" is used here only because of the interface with vlb.cpp */ - sPutBits ((bibBuffer_t *)(buf), numBits, value); -} - - - -/* {{-output"vdtCopyBuffer.txt"}} */ -/* -* vdtCopyBuffer -* -* Parameters: -* -* Function: -* This function copies some data from source buffer to destination buffer -* Returns: -* None. -* Error codes: -* None. -* -*/ -void vdtCopyBuffer(bibBuffer_t *SrcBuffer,bibBuffer_t *DestBuffer, - int ByteStart,int BitStart, int ByteEnd, int BitEnd) -{ - int startByteIndex = SrcBuffer->getIndex; - int startBitIndex = SrcBuffer->bitIndex; - int bitsLeft = SrcBuffer->bitsLeft; - int numBytesRead = SrcBuffer->numBytesRead; - - CopyBuffer(SrcBuffer,DestBuffer, ByteStart, BitStart, ByteEnd, BitEnd); - - /* recover the postion */ - SrcBuffer->getIndex = startByteIndex ; - SrcBuffer->bitIndex = startBitIndex; - SrcBuffer->bitsLeft = bitsLeft; - SrcBuffer->numBytesRead = numBytesRead; -} - - - - -/* {{-output"vdtStuffBitsMPEG4.txt"}} */ -/* -* vdtStuffBitsMPEG4 -* -* Parameters: -* outBuf output buffer -* -* Function: -* This function puts some stuffing bits to the output buffer -* bits need to be stuffed in the output buffer at the end of vp in all cases (bw or not) -* Returns: -* None. -* Error codes: -* None. -* -*/ -void vdtStuffBitsMPEG4(bibBuffer_t *outBuffer) -{ - const int stuffingBits[8][2] = { {1,0}, {2,1}, {3,3}, {4,7}, {5,15}, {6,31}, {7,63}, {8,127} }; - VDTASSERT(outBuffer->baseAddr); - - /* find the number of stuffing bits to insert in the output buffer */ - int bi = outBuffer->bitIndex; - int newNumBits = stuffingBits[bi][0]; - int newValue = stuffingBits[bi][1]; - sPutBits(outBuffer, newNumBits, newValue); - - return; -} - - -/*************************************************************/ - - -/* {{-output"sResetH263IntraDcUV.txt"}} */ -/* -* sResetH263IntraDcUV -* -* Parameters: output buffer -* uValue -* vValue -* -* Function: -* This function reset the chrominace INTRADC when black and white color effect is applied -* Returns: -* none -* Error codes: -* None. -* -*/ -inline void sResetH263IntraDcUV(bibBuffer_t *DestBuffer, TInt uValue, TInt vValue) -{ - /* For the Color Effects Fill the U and V buffers with the - corresponding color values */ - - sPutBits(DestBuffer, 8, uValue); - sPutBits(DestBuffer, 8, vValue); -} - - -/* {{-output"vdtGetPMBBlackAndWhiteMCBPC.txt"}} */ -/* -* vdtGetPMBBlackAndWhiteMCBPC -* -* Parameters: -* -* Function: -* This function compute the new mcbpc for black and white effect * -* Returns: -* the length of the input mcbpc. -* Error codes: -* None. -* -*/ -int vdtGetPMBBlackAndWhiteMCBPC(int& new_len, int& new_val, int mcbpc) -{ - int cur_index, new_index, cur_len; - - const tVLCTable sCBPCPType[21] = - { - {1, 1}, {3, 4}, {2, 4}, {5, 6}, - {3, 3}, {7, 7}, {6, 7}, {5, 9}, - {2, 3}, {5, 7}, {4, 7}, {5, 8}, - {3, 5}, {4, 8}, {3, 8}, {3, 7}, - {4, 6}, {4, 9}, {3, 9}, {2, 9}, - {1, 9} - }; - - /* evaluate MCBPC parameters */ - int cur_cbpc = mcbpc & 3; - int new_cbpc = 0; // cpbc=0 indicates chroma is 0 - int mbType; - - mbType = mcbpc / 4; - /* evaluate indices in table */ - cur_index = mbType * 4 + cur_cbpc; - new_index = mbType * 4 + new_cbpc; - - /* retrieve values */ - cur_len = sCBPCPType[cur_index].length; - new_len = sCBPCPType[new_index].length; - new_val = sCBPCPType[new_index].code; - - return cur_len; -} - - -/* {{-output"vdtGetIMBBlackAndWhiteMCBPC.txt"}} */ -/* -* vdtGetIMBBlackAndWhiteMCBPC -* -* Parameters: None -* -* Function: -* This function compute the new mcbpc for black and white effect -* Returns: -* the length of the input mcbpc. -* Error codes: -* None. -* -*/ -int vdtGetIMBBlackAndWhiteMCBPC(int& new_len, int& new_val, int mcbpc) -{ - int cur_index, new_index, cur_len; - - const tVLCTable sCBPCIType[9] = - { - {1, 1}, {1, 3}, {2, 3}, {3, 3}, {1, 4}, - {1, 6}, {2, 6}, {3, 6}, {1, 9} - }; - - /* evaluate MCBPC parameters */ - int cur_cbpc = mcbpc & 3; - int new_cbpc = 0; // cpbc=0 indicates chroma is 0 - int mbType = (mcbpc <4)?3:4; - - /* evaluate indices in table */ - cur_index = (mbType == 3 ? 0 : 4) + cur_cbpc; - new_index = (mbType == 3 ? 0 : 4) + new_cbpc; - - /* retrieve values */ - cur_len = sCBPCIType[cur_index].length; - new_len = sCBPCIType[new_index].length; - new_val = sCBPCIType[new_index].code; - - return cur_len; -} - - - - - -/* {{-output"vdtGetVideoBitstreamInfo.txt"}} */ -/* -* vdtGetVideoBitstreamInfo -* -* Parameters: -* -* Function: -* This function provides the bitstream info to the processor * -* Returns: -* VDE error codes -* Error codes: -* None. -* -*/ -int vdtGetVideoBitstreamInfo(bibBuffer_t *inBuffer, vdeDecodeParamters_t *aInfoOut, int *aByteIndex, int *aBitIndex) -{ - int numBitsGot, - bitErrorIndication = 0; - int16 error = 0; - u_int32 bits; - int timeResolution = 0; - TVedVideoBitstreamMode streamMode = EVedVideoBitstreamModeUnknown; - vdxVolHeader_t volHeader; - volHeader.user_data = NULL; - - bits = bibShowBits(32, inBuffer, &numBitsGot, &bitErrorIndication, &error); - if (error) - { - streamMode = EVedVideoBitstreamModeUnknown; - goto exitFunction; - } - /* If PSC */ - if ((bits >> 10) == 32) { - streamMode = EVedVideoBitstreamModeH263; - } - - /* Else check for Visual Sequence, Visual Object or Video Object start code */ - else if ((bits == MP4_VOS_START_CODE) || - (bits == MP4_VO_START_CODE) || - ((bits >> MP4_VID_ID_CODE_LENGTH) == MP4_VID_START_CODE) || - ((bits >> MP4_VOL_ID_CODE_LENGTH) == MP4_VOL_START_CODE)) - { - - /* read the Stream headers from the bitstream */ - if ((vdxGetVolHeader(inBuffer, &volHeader, &bitErrorIndication, 1, aByteIndex, aBitIndex, NULL) != 0) || - (bitErrorIndication != 0)) - { - goto exitFunction; - } - - timeResolution = volHeader.time_increment_resolution; - streamMode = sGetMPEG4Mode(volHeader.error_res_disable, volHeader.data_partitioned, volHeader.reversible_vlc); - bits = bibShowBits(22, inBuffer, &numBitsGot, &bitErrorIndication, &error); - if (error) - goto exitFunction; - - /* Check if H.263 PSC follows the VOL header, in which case this is - MPEG-4 with short header and is decoded as H.263 */ - if ( bits == 32 ) - { - streamMode = EVedVideoBitstreamModeMPEG4ShortHeader; - } - } - - /* Else no H.263 and no MPEG-4 start code detected */ - else { - streamMode = EVedVideoBitstreamModeUnknown; - } - -exitFunction: - /* copy the got user data to the core data structure */ - if (volHeader.user_data != NULL) - { - free(volHeader.user_data); - } - - bibRewindBits( bibNumberOfFlushedBits( inBuffer ), inBuffer, &error ); - aInfoOut->streamMode = streamMode; - aInfoOut->iTimeIncrementResolution = timeResolution; - return TX_OK; -} - - - - - -/* {{-output"vdtGetVideoBitstreamInfo.txt"}} */ -/* -* sQuantizeMB -* -* Parameters: -* mbdata Contains the actual MB data to be quantized -* oldQuant: -* newQuant: -* intra -* -* Function: -* This function requantizes the AC/DCT data for one MB, used in MPEG4 -> H263 transcoding -* Returns: -* Coded Block Pattern. -* Error codes: -* None. -* -*/ -static void sQuantizeMB(int *mbdata, int oldQuant, int newQuant, int intra, int colorEffect) -{ -#define SIGN(x) (((x)<0) ? -1:1 ) - int coeffCnt; - int *block; - int blkCnt; - - for (blkCnt = 0; blkCnt < (colorEffect ? 4 : 6); blkCnt++) - { - block = &mbdata[blkCnt * BLOCK_COEFF_SIZE]; - for (coeffCnt = (intra == VDX_MB_INTRA); coeffCnt < BLOCK_COEFF_SIZE; - coeffCnt++) - { - if (block[coeffCnt]) - { - int level = abs(block[coeffCnt]); - int sign = SIGN(block[coeffCnt]); - int rcoeff; - // dequantize - if ((oldQuant % 2) == 1) - rcoeff = oldQuant * ((level << 1) + 1); - else - rcoeff = oldQuant * ((level << 1) + 1) - 1; - - rcoeff = min (2047, max (-2048, sign * rcoeff)); - - // requantize - if (intra == VDX_MB_INTRA) - { - level = (abs (rcoeff)) / (newQuant << 1); - } - else - { - level = (abs (rcoeff) - (newQuant >> 1)) / (newQuant << 1); - /* clipping to [-127,+127] */ - } - - /* clipping to [-127,+127] */ - block[coeffCnt] = min (127, max (-127, sign * level)); - } - else - { - /* Nothing */ - } - } - } - return ; -} - - - - -/* {{-output"vdtGetVideoBitstreamInfo.txt"}} */ -/* -* vdtChangeVosHeaderRegResyncL -* -* Parameters: -* -* Function: -* This function finds the error resillence bit and change it if necessary -* to make it Regular Resynchronization mode -* Returns: -* ETrue if buffer changed. -* Error codes: -* None -* -*/ -TBool vdtChangeVosHeaderRegResyncL(TPtrC8& aInputBuffer, TUint aBufferSize) -{ - int16 errorCode = 0; /* return code for bib functions */ - bibBuffer_t *buffer; /* input buffer */ - - /* Create bit buffer */ - buffer = bibCreate((TAny*)aInputBuffer.Ptr(), aBufferSize, &errorCode); - if (!buffer || errorCode) - return EFalse; - - int startByte = 0, startBit = 7; - vdeDecodeParamters_t decInfo; - vdtGetVideoBitstreamInfo(buffer, &decInfo, &startByte, &startBit); - - if (decInfo.streamMode == EVedVideoBitstreamModeMPEG4Regular) - { - char *temp = (char *) (TAny*)aInputBuffer.Ptr(); - unsigned char patern[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; - temp[startByte] &= patern[startBit]; // change the error resillence bit to 0; - - /* Delete bit buffer */ - bibDelete(buffer, &errorCode); - return ETrue; - } - else - { - /* Delete bit buffer */ - bibDelete(buffer, &errorCode); - return EFalse; - } -} - -/* -* CMPEG4Transcoder -* -* Parameters: -* -* Function: -* Constructor -* -*/ -CMPEG4Transcoder::CMPEG4Transcoder(const vdeInstance_t *aVDEInstance, bibBuffer_t *aInBuffer, bibBuffer_t *aOutBuffer) -{ - VDTASSERT(aVDEInstance); - VDTASSERT(aInBuffer); - VDTASSERT(aOutBuffer); - - /* passing the arguments */ - iVDEInstance = aVDEInstance; - iInBuffer = aInBuffer; - iOutBuffer = aOutBuffer; - - /* Color Toning */ - iMBType = NULL; - iCurQuant = 0; - iColorEffect = aVDEInstance->iColorEffect; - iColorToneU = aVDEInstance->iColorToneU; - iColorToneV = aVDEInstance->iColorToneV; - iRefQuant = aVDEInstance->iRefQp; - iDcScaler = GetMpeg4DcScalerUV(iRefQuant); - - iDoModeTranscoding = EFalse; - iDoTranscoding = (iColorEffect || iDoModeTranscoding); - iTargetFormat = EVedVideoTypeMPEG4SimpleProfile; - iStuffingBitsUsed = 0; - - /* default values */ - iLastMBNum = -1; - iCurMBNum = 0; - - /* initialize here but will be changed later to proper value */ - iOutputMpeg4TimeIncResolution = KOutputMpeg4TimeIncResolution; - - iNumMBsInOneVOP = (iVDEInstance->lumHeight * iVDEInstance->lumWidth) >> 8; // /256 - iMBsinWidth = iVDEInstance->lumWidth >> 4; - iNumMBsInGOB = iVDEInstance->lumWidth >> 4; - - - iMBList = NULL; - iH263DCData = NULL; - h263mbi = NULL; - - - iH263MBVPNum = NULL; - iErrorResilienceStartByteIndex = KDataNotValid; - iErrorResilienceStartBitIndex = KDataNotValid; - - iVideoPacketNumInMPEG4 = 0; // the video packet number this MB belongs to, NOTE: the first GOB doesn't have a GOB header - iCurMBNumInVP = -1; - fFirstFrameInH263 = EFalse; - - return; -} - -/* -* ~CMPEG4Transcoder -* -* Parameters: -* -* Function: -* Destructor -* -*/ -CMPEG4Transcoder::~CMPEG4Transcoder() -{ - if (iCurIMBinstance) - { - free(iCurIMBinstance); - } - if (iCurPMBinstance) - { - free(iCurPMBinstance); - } - if (bufEdit.editParams) - { - free(bufEdit.editParams); - } - - // for H263 - if (iH263MBVPNum) - { - free(iH263MBVPNum); - } - - // for color toning - if (iMBType) - { - free(iMBType); - } - - - - if (iH263DCData) - { - for (int i = 0; i < iNumMBsInOneVOP; i++) - { - free(iH263DCData[i]); - } - free(iH263DCData); - } - - if ( ( (iTargetFormat == EVedVideoTypeH263Profile0Level10) || - (iTargetFormat == EVedVideoTypeH263Profile0Level45) ) && - iBitStreamMode != EVedVideoBitstreamModeMPEG4ShortHeader && - iBitStreamMode != EVedVideoBitstreamModeH263 && - h263mbi) - { - free(h263mbi); - } - - if ( iOutBuffer ) - { - - PRINT((_L("CMPEG4Transcoder: finish one frame successfully, buffer size %d"), - iOutBuffer->getIndex)); - } - -#ifdef _DEBUG - if (iOutBuffer->getIndex > KInitialBufferSize) - { - PRINT((_L("CMPEG4Transcoder: Output buffer size from engine is not big enough! check KInitialBufferSize"))); - - } -#endif - if ( iOutBuffer ) - { - VDTASSERT(iOutBuffer->getIndex < KInitialBufferSize); - } -} - -/* -* H263EscapeCoding -* -* Parameters: -* -* Function: -* Indicates whether escape vlc coding is used in one block -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::H263EscapeCoding(int aIndex, int fEscapeCodeUsed) -{ - iEscapeCodeUsed[aIndex] = fEscapeCodeUsed; -} - -/* -* SetTranscoding -* -* Parameters: -* -* Function: -* Indicates whether we need to do MPEG4 bitstream transcoding -* Returns: -* TX error codes -* Error codes: -* None -* -*/ -int CMPEG4Transcoder::SetTranscoding(vdeDecodeParamters_t *aDecoderInfo) -{ - iColorEffect = aDecoderInfo->aColorEffect; - iColorToneU = aDecoderInfo->aColorToneU; - iColorToneV = aDecoderInfo->aColorToneV; - iBitStreamMode = (TVedVideoBitstreamMode)aDecoderInfo->streamMode; - - iTargetFormat = aDecoderInfo->aOutputVideoFormat; - iDoModeTranscoding = aDecoderInfo->fModeChanged ? ETrue: EFalse; - iDoTranscoding = (iColorEffect || iDoModeTranscoding); - - /* set to proper value */ - iOutputMpeg4TimeIncResolution = *(aDecoderInfo->aMPEG4TargetTimeResolution); - - /* allocate buffer for MPEG4 - > H263 transcoding */ - /* the following is used if spatial domain processing is not done */ - - if ( ( (iTargetFormat == EVedVideoTypeH263Profile0Level10) || - (iTargetFormat == EVedVideoTypeH263Profile0Level45) ) && - iBitStreamMode != EVedVideoBitstreamModeMPEG4ShortHeader && - iBitStreamMode != EVedVideoBitstreamModeH263) - { - h263mbi = (tMBInfo*) malloc (sizeof(tMBInfo) * iNumMBsInOneVOP); - if (!h263mbi) - { - PRINT((_L("CMPEG4Transcoder::SetTranscoding - h263mbi creation failed"))); - deb("CMPEG4Transcoder::SetTranscoding - h263mbi creation failed\n"); - - return TX_ERR; - } - memset(h263mbi, 0, sizeof(tMBInfo) * iNumMBsInOneVOP); - } - - return TX_OK; -} - - - - -/* -* BeginOneVideoPacket -* -* Parameters: -* -* Function: -* Records the position before one Video packet is processed -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::BeginOneVideoPacket(dvpVPInParam_t *aVPin) -{ - VDTASSERT(iInBuffer); - VDTASSERT(aVPin); - - iCurVPIn = aVPin; - iVPStartByteIndex = iInBuffer->getIndex; - iVPStartBitIndex = iInBuffer->bitIndex; - - iCurMBNumInVP = -1; - - iStuffingBitsUsed = 0; - - iVopCodingType = aVPin->pictParam->pictureType; - iBitStreamMode = sGetMPEG4Mode(aVPin->pictParam->error_res_disable, - aVPin->pictParam->data_partitioned, aVPin->pictParam->reversible_vlc); -} - - -/* -* sConstructH263PicHeader -* -* Parameters: -* lBitOut output buffer -* quant quant value to be put in header -* picType VDX_VOP_TYPE_P or VDX_VOP_TYPE_I -* tr time increament -* Function: -* Writes the pic header into bit-stream for one MPEG4 frame -* Returns: -* None -* Error codes: -* None -* -*/ -void sConstructH263PicHeader(bibBuffer_t *lBitOut, int picType, int quant, int tr, int aVOPNotCoded, int aFormat) - -{ - if (aVOPNotCoded) - { - return; - } - /* ShortVideoStartMarker */ - sPutBits(lBitOut, 22, SHORT_VIDEO_START_MARKER); - /* TemporalReference */ - sPutBits(lBitOut, 8, (tr & 0x000000ff)); - /* Marker Bit */ - sPutBits(lBitOut, 1, MARKER_BIT); - /* Zero Bit */ - sPutBits(lBitOut, 1, 0); - /* SplitScreenIndicator = 0 */ - sPutBits(lBitOut, 1, 0); - /* DocumentCameraIndicator = 0 */ - sPutBits(lBitOut, 1, 0); - /* FullPictureFreezeRelease = 0 */ - sPutBits(lBitOut, 1, 0); - /* Source Fromat */ - sPutBits(lBitOut, 3, aFormat); - /* PictureCodingType 0 for intra, 1 for inter */ - sPutBits(lBitOut, 1, picType == VDX_VOP_TYPE_P); - /* UMV= 0 */ - sPutBits(lBitOut, 1, 0); - /* SAC = 0 */ - sPutBits(lBitOut, 1, 0); - /* Advanced Prediction = 0 */ - sPutBits(lBitOut, 1, 0); - /* PB frame = 0 */ - sPutBits(lBitOut, 1, 0); - /* VOPQuant */ - sPutBits(lBitOut, 5, quant); - /* ZeroBIt */ - sPutBits(lBitOut, 1, 0); - /* Pei = 0 */ - sPutBits(lBitOut, 1, 0); -} - - -/* -* VOPHeaderEnded -* -* Parameters: -* -* Function: -* Copy the VOP Header to output buffer -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::VOPHeaderEnded(int aStartByteIndex, int aStartBitIndex, - int aQuant, int aPicType, int aFrameNum, int aVOPNotCoded) -{ - const int KNumMbInSqcif = 48; - const int KNumMbInQcif = 99; - const int KNumMbInCif = 396; - - if (iTargetFormat == EVedVideoTypeH263Profile0Level10 || iTargetFormat == EVedVideoTypeH263Profile0Level45) - { - int sourceFormat = 2; // qcif - /* note: other formate not supported */ - if (iNumMBsInOneVOP == KNumMbInSqcif) /* sqcif */ - { - sourceFormat = 1; // sqcif - } - else if (iNumMBsInOneVOP == KNumMbInQcif) /* qcif */ - { - sourceFormat = 2; // qcif - } - else if (iNumMBsInOneVOP == KNumMbInCif) /* cif */ - { - sourceFormat = 3; // cif - } - sConstructH263PicHeader(iOutBuffer, aPicType, aQuant, 0, aVOPNotCoded, sourceFormat); - PRINT((_L("CMPEG4Transcoder: MPEG4 -> H263: picture header generated"))); - } - /* Copy the VOP header */ - else - { - bufEdit.copyMode = CopyWhole; // whole - CopyStream(iInBuffer,iOutBuffer,&bufEdit,aStartByteIndex,aStartBitIndex); - } - iPreQuant = aQuant; - iStuffingBitsUsed = 0; - - iCurQuant = aQuant; - /* Color Toning */ - if (!aFrameNum || !iRefQuant) - { - iRefQuant = iCurQuant; - iDcScaler = GetMpeg4DcScalerUV(iRefQuant); - } - -} - - -/* -* VOPEnded -* -* Parameters: -* -* Function: -* This function is called when one VOP has ended -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::VOPEnded() -{ - /* check if MBs are lost */ - int dataPartitioned = (iBitStreamMode == EVedVideoBitstreamModeMPEG4DP_RVLC || iBitStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP_RVLC - || iBitStreamMode == EVedVideoBitstreamModeMPEG4DP || iBitStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP); - - if (iLastMBNum != iNumMBsInOneVOP - 1 && !(dataPartitioned && !iDoModeTranscoding)) - { - for (int i = iLastMBNum+1; i < iNumMBsInOneVOP; i++) - { - /* output 1 bit COD */ - sPutBits (iOutBuffer, 1, 1); - } - } - - iLastMBNum = iNumMBsInOneVOP - 1; - /* bits need to be stuffed in the output buffer at the end VOP */ - if (!dataPartitioned && iTargetFormat == EVedVideoTypeMPEG4SimpleProfile) - { - if (!iStuffingBitsUsed) - { - vdtStuffBitsMPEG4(iOutBuffer); - } - iStuffingBitsUsed = 1; - } - else if (iTargetFormat == EVedVideoTypeH263Profile0Level10 || iTargetFormat == EVedVideoTypeH263Profile0Level45) - { - sStuffBitsH263(iOutBuffer); - } - - PRINT((_L("CMPEG4Transcoder: VOPEnded. color effect: %d, format convert %d, do transcoding: %d streammode: %d, outputformat: %d "), - iColorEffect, iDoModeTranscoding, iDoTranscoding, iBitStreamMode, iTargetFormat)); -} - -/* -* AfterOneVideoPacketHeader -* -* Parameters: -* -* Function: -* This function is called after retreiving the VP -* Records the position before the content of the video packet is processed -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::AfterVideoPacketHeader(dvpVPInOutParam_t *aVPInfo) -{ - VDTASSERT(aVPInfo); - iCurVPInOut = aVPInfo; - - iVPHeaderEndByteIndex = iInBuffer->getIndex; - iVPHeaderEndBitIndex = iInBuffer->bitIndex; - - /* Color Toning */ - iCurQuant = aVPInfo->quant; - - /* Copy the VP header to output stream. Note; the first VP does not have a VP header */ - if (iTargetFormat == EVedVideoTypeMPEG4SimpleProfile) - { - bufEdit.copyMode = CopyWhole; /* whole */ - CopyStream(iInBuffer,iOutBuffer,&bufEdit,iVPStartByteIndex,iVPStartBitIndex); - } -} - - -/* -* OneVPEnded -* -* Parameters: -* -* Function: -* This function is called after one VP contents are retrieved -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::OneVPEnded() -{ - if (!iDoTranscoding) - { - /* no transcoding, copy whole content VP */ - bufEdit.copyMode = CopyWhole; - CopyStream(iInBuffer,iOutBuffer,&bufEdit,iVPHeaderEndByteIndex,iVPHeaderEndBitIndex); - iStuffingBitsUsed = 1;// also stuffing is copied - } - else - { - int dataPartitioned = (iBitStreamMode == EVedVideoBitstreamModeMPEG4DP_RVLC || iBitStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP_RVLC - || iBitStreamMode == EVedVideoBitstreamModeMPEG4DP || iBitStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP); - int nextExpectedMBNum = iCurVPInOut->currMBNum; - - if (dataPartitioned && !iDoModeTranscoding) - { - /* if data is partitioned and we are not doing format transcoding, - not coded MBs info is already in data partition 1 - */ - } - else - { - /* MBs are lost or not coded, */ - for (int i = iLastMBNum+1; i < nextExpectedMBNum; i++) - { - /* output 1 bit COD */ - sPutBits (iOutBuffer, 1, 1); - } - } - - iLastMBNum = nextExpectedMBNum - 1; - /* bits need to be stuffed in the output buffer at the end of vp in all cases (bw or not) */ - if (iTargetFormat == EVedVideoTypeMPEG4SimpleProfile) - { - if (!iStuffingBitsUsed) - { - vdtStuffBitsMPEG4(iOutBuffer); - } - iStuffingBitsUsed = 1; - } - } -} - - - -/* -* BeginOneMB -* -* Parameters: -* -* Function: -* Records the position before one MB is processed -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::BeginOneMB(int aMBNum) -{ - VDTASSERT(iInBuffer); - - iMBStartByteIndex = iInBuffer->getIndex; - iMBStartBitIndex = iInBuffer->bitIndex; - iCurMBNum = aMBNum; - - // Color Toning - iCurMBNumInVP++; - - if ((iBitStreamMode == EVedVideoBitstreamModeMPEG4ShortHeader || iBitStreamMode == EVedVideoBitstreamModeH263) && iDoModeTranscoding) - { - /* H263 -> MPEG4 */ - VDTASSERT(iH263MBVPNum); - iH263MBVPNum[iCurMBNum]= iVideoPacketNumInMPEG4; - } -} - -/* -* BeginOneBlock -* -* Parameters: -* -* Function: -* Records the position before one block in MB is processed -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::BeginOneBlock(int aBlockIndex) -{ - VDTASSERT(aBlockIndex >= 0 && aBlockIndex < 6); - - iBlockStartByteIndex[aBlockIndex] = iInBuffer->getIndex; - iBlockStartBitIndex[aBlockIndex] = iInBuffer->bitIndex; -} - - -/* -* OneIMBDataStarted -* -* Parameters: -* -* Function: -* This function is called after the MB header is read; start one IMB, -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::OneIMBDataStarted(vdxIMBListItem_t *aMBInstance) -{ - VDTASSERT(aMBInstance); - VDTASSERT(iCurIMBinstance); - iMBCodingType = VDX_MB_INTRA; - iVopCodingType = VDX_VOP_TYPE_I; - iMBType[iCurMBNum] = iMBCodingType; - - - memcpy(iCurIMBinstance, aMBInstance, sizeof(vdxIMBListItem_t)); -} - -/* -* OnePMBDataStarted -* -* Parameters: -* -* Function: -* This function is called after the MB header is read; start one PMB, -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::OnePMBDataStarted(vdxPMBListItem_t *aMBInstance) -{ - VDTASSERT(aMBInstance); - VDTASSERT(iCurPMBinstance); - - iMBCodingType = aMBInstance->mbClass; - iVopCodingType = VDX_VOP_TYPE_P; - iMBType[iCurMBNum] = iMBCodingType; - - memcpy(iCurPMBinstance, aMBInstance, sizeof(vdxPMBListItem_t)); -} - - - -/* -* OneIMBDataStartedDataPartitioned -* -* Parameters: -* -* Function: -* Add one IMB instance, It is done after parsing Part1 and Part2 before the block data for current MB -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::OneIMBDataStartedDataPartitioned(vdxIMBListItem_t *aMBInstance, dlst_t *aMBList, int aCurrMBNumInVP, int aMBNum) -{ - VDTASSERT(aMBInstance); // at this point, the instance should not be null - VDTASSERT(aMBList); - - memcpy(iCurIMBinstance, aMBInstance, sizeof(vdxIMBListItem_t)); - iCurMBNumInVP = aCurrMBNumInVP; - iCurMBNum = aMBNum; - iMBList = aMBList; - iMBCodingType = VDX_MB_INTRA; - iVopCodingType = VDX_VOP_TYPE_I; - iMBType[iCurMBNum] = iMBCodingType; - - if (!iCurMBNumInVP && iDoTranscoding) - { - if (!iDoModeTranscoding) - { - /* We are not doing bitstream transcoding, - we have color effect here and need to reconstruct data partitions. - */ - ReconstructIMBPartitions(); - } - } -} - -/* -* OnePMBDataStartedDataPartitioned -* -* Parameters: -* -* Function: -* Add one IMB instance, It is done after parsing Part1 and Part2 before the block data for current MB -* Note: PMB may be INTRA coded. -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::OnePMBDataStartedDataPartitioned(vdxPMBListItem_t *aMBInstance, dlst_t *aMBList, int aCurrMBNumInVP, int aMBNum) -{ - VDTASSERT(aMBInstance); /* at this point, the instance should not be null */ - VDTASSERT(aMBList); - - memcpy(iCurPMBinstance, aMBInstance, sizeof(vdxPMBListItem_t)); - iCurMBNumInVP = aCurrMBNumInVP; - iCurMBNum = aMBNum; - iMBList = aMBList; - iMBCodingType = aMBInstance->mbClass; - iVopCodingType = VDX_VOP_TYPE_P; - iMBType[iCurMBNum] = iMBCodingType; - - if (!aMBInstance->fCodedMB && iDoModeTranscoding) - { - /* this MB is not coded and need to be converted to target mode, - out put the possible MB stuffing bits and COD - */ - /* MB stuffing bits if they exsit */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - aMBInstance->DataItemStartByteIndex[11], aMBInstance->DataItemStartBitIndex[11], - aMBInstance->DataItemEndByteIndex[11], aMBInstance->DataItemEndBitIndex[11]); - /* It is a not-coded MB, output 1 bit COD (it always exists in P frame) */ - sPutBits (iOutBuffer, 1, 1); - iLastMBNum = iCurMBNum; - } - else if (!iCurMBNumInVP && iDoTranscoding) - { - if (!iDoModeTranscoding) - { - /* We are not doing bitstream transcoding, - we have color effect here and need to reconstruct data partitions. - */ - ReconstructPMBPartitions(); - } - } -} - - - -/* -* TranscodingOneMB -* -* Parameters: -* -* Function: -* Transcoding one MB, which may include dequantization, requantization , and re-encoding -* Returns: -* DMD error codes since called from decmbdct -* -*/ -int CMPEG4Transcoder::TranscodingOneMB(dmdPParam_t *aParam = NULL) -{ -/* Because it has block data, this MB must be a coded MB, -which means the position indicated by iMBStartByteIndex and iMBStartBitIndex starts with a MCBPC - */ - VDTASSERT(!(!iCurPMBinstance->fCodedMB && iMBCodingType == VDX_MB_INTER)); - - if (!iDoTranscoding) - { - iLastMBNum = iCurMBNum; // need to update the variable to avoid marking this as noncoded MB - return TX_OK; - } - - int dataPartitioned = (iBitStreamMode == EVedVideoBitstreamModeMPEG4DP_RVLC || iBitStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP_RVLC - || iBitStreamMode == EVedVideoBitstreamModeMPEG4DP || iBitStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP); - - if (dataPartitioned) - { - /* since we need to handle MB stuffing bits, which are handle outside the transcoder in other modes, - not coded MBs and MB stuffing bits are handled in OnePMBDataStartedDataPartitioned, - ReconstuctI/PMBPartitios or ConstructRegularMPEG4MBData - */ - } - else if(iCurMBNum != iLastMBNum + 1 ) - { - /* if previous MBs are lost or not coded, we copy one MB with COD = 1; */ - for (int i = 0 ; i < iCurMBNum - iLastMBNum - 1; i++) - { - /* output 1 bit COD */ - sPutBits (iOutBuffer, 1, 1); - } - } - - int newMCBPCLen = 0; - int newMCBPC = 0; - int oldMCBPCLen = 0; - - /* determine whether to change mcbpc */ - if (iColorEffect) - { - if (iVopCodingType == VDX_VOP_TYPE_P) - { - oldMCBPCLen = vdtGetPMBBlackAndWhiteMCBPC(newMCBPCLen, newMCBPC, iCurPMBinstance->mcbpc); - } - else - { - oldMCBPCLen = vdtGetIMBBlackAndWhiteMCBPC(newMCBPCLen, newMCBPC, iCurIMBinstance->mcbpc); - } - } - - - - if (iDoModeTranscoding && ( (iTargetFormat == EVedVideoTypeH263Profile0Level10) || - (iTargetFormat == EVedVideoTypeH263Profile0Level45) ) ) - { - if ( ConstructH263MBData(aParam, newMCBPCLen, newMCBPC) != VDC_OK ) - { - return TX_ERR; - } - } - else /* possible H263->MPEG4 transcoding */ - - { - /* MPEG4 with VDT_RESYN and VDT_REGULAR, we only do bitstream copying */ - if ( iBitStreamMode == EVedVideoBitstreamModeMPEG4Resyn || iBitStreamMode == EVedVideoBitstreamModeMPEG4Regular || - ((iBitStreamMode ==EVedVideoBitstreamModeMPEG4ShortHeader || iBitStreamMode == EVedVideoBitstreamModeH263) && !iDoModeTranscoding) ) - { - /* the MB stuffing is taken card of outside in file viddemux.cpp - we only need to output COD, MCBPC - */ - int mcbpcStartByteIndex, mcbpcStartBitIndex; - - if (iVopCodingType == VDX_VOP_TYPE_I) - { - mcbpcStartByteIndex = iCurIMBinstance->DataItemStartByteIndex[0]; - mcbpcStartBitIndex = iCurIMBinstance->DataItemStartBitIndex[0]; - } - else - { - mcbpcStartByteIndex = iCurPMBinstance->DataItemStartByteIndex[0]; - mcbpcStartBitIndex = iCurPMBinstance->DataItemStartBitIndex[0]; - /* It is a coded MB, output 1 bit COD (it always exists in P frame) */ - sPutBits (iOutBuffer, 1, 0); - } - - if (!iColorEffect) - { - bufEdit.copyMode = CopyWhole; /* whole */ - CopyStream(iInBuffer,iOutBuffer,&bufEdit,mcbpcStartByteIndex,mcbpcStartBitIndex); - } - else - { - /* modify mcbpc and copy only the Y data */ - bufEdit.copyMode = CopyWithEdit; // copy with edit - bufEdit.editParams[0].StartByteIndex = mcbpcStartByteIndex; - bufEdit.editParams[0].StartBitIndex = mcbpcStartBitIndex; - bufEdit.editParams[0].curNumBits = oldMCBPCLen; - bufEdit.editParams[0].newNumBits = newMCBPCLen; - bufEdit.editParams[0].newValue = newMCBPC; - CopyStream(iInBuffer,iOutBuffer,&bufEdit,mcbpcStartByteIndex,mcbpcStartBitIndex); - - /* disgard the UV data */ - int16 errorCode = 0; - int bitsToRewind = ((iInBuffer->getIndex << 3) + 7 - iInBuffer->bitIndex) - - ((iBlockStartByteIndex[4] << 3) + 7 - iBlockStartBitIndex[4]); - bibRewindBits(bitsToRewind, iOutBuffer, &errorCode ); - - if (iMBCodingType == VDX_MB_INTRA) - { - if (iBitStreamMode == EVedVideoBitstreamModeMPEG4ShortHeader || iBitStreamMode == EVedVideoBitstreamModeH263) - { - sResetH263IntraDcUV(iOutBuffer, iColorToneU, iColorToneV); - } - else - { - ResetMPEG4IntraDcUV(); - } - } - } - } - - else if ((iBitStreamMode == EVedVideoBitstreamModeMPEG4ShortHeader || iBitStreamMode == EVedVideoBitstreamModeH263) && iDoModeTranscoding) - { - H263ToMPEG4MBData(newMCBPCLen, newMCBPC); - } - - else /* data partitioned */ - { - if (iDoModeTranscoding) - { - /* for data partitioned bitstream, we do the bitstream rearrangement */ - ConstructRegularMPEG4MBData(newMCBPCLen, newMCBPC); - } - else - { - /* copy the ACs or DCTs */ - bufEdit.copyMode = CopyWhole; // whole - CopyStream(iInBuffer,iOutBuffer,&bufEdit,iBlockStartByteIndex[0],iBlockStartBitIndex[0]); - if (iColorEffect) - { - /* discard U V data */ - int16 errorCode = 0; - int bitsToRewind = ((iInBuffer->getIndex << 3) + 7 - iInBuffer->bitIndex) - - ((iBlockStartByteIndex[4] << 3) + 7 - iBlockStartBitIndex[4]); - bibRewindBits(bitsToRewind, iOutBuffer, &errorCode ); - } - } - } - - } - iLastMBNum = iCurMBNum; - return TX_OK; -} - - - - -/* -* ReconstructIMBPartitions -* -* Parameters: -* -* Function: -* Recontruct the partitions for color effect when we are not doing format transcoding -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::ReconstructIMBPartitions() -{ - vdxIMBListItem_t *MBinstance; - int *dataItemStartByteIndex; - int *dataItemStartBitIndex; - int *dataItemEndByteIndex; - int *dataItemEndBitIndex; - int newMCBPCLen = 0; - int newMCBPC = 0; - - VDTASSERT(iMBList); - - for (dlstHead(iMBList, (void **) &MBinstance); - MBinstance != NULL; - dlstNext(iMBList, (void **) &MBinstance)) - { - dataItemStartByteIndex = MBinstance->DataItemStartByteIndex; - dataItemStartBitIndex = MBinstance->DataItemStartBitIndex; - dataItemEndByteIndex = MBinstance->DataItemEndByteIndex; - dataItemEndBitIndex = MBinstance->DataItemEndBitIndex; - // MB stuffing bits if they exsit - vdtCopyBuffer(iInBuffer, iOutBuffer, dataItemStartByteIndex[11], dataItemStartBitIndex[11], - dataItemEndByteIndex[11], dataItemEndBitIndex[11]); - - /* MCBPC */ - if (iColorEffect) - { - /* MCBPC Changed. Ignore the old value (not used) */ - vdtGetIMBBlackAndWhiteMCBPC(newMCBPCLen, newMCBPC, MBinstance->mcbpc); - sPutBits(iOutBuffer, newMCBPCLen, newMCBPC); - } - else - { - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[0], dataItemStartBitIndex[0], - dataItemEndByteIndex[0], dataItemEndBitIndex[0]); - } - - /* DQUANT, if it exsits */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[1], dataItemStartBitIndex[1], - dataItemEndByteIndex[1], dataItemEndBitIndex[1]); - - /* INTRA DCs */ - if (!iColorEffect) - { - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[4], dataItemStartBitIndex[4], - dataItemEndByteIndex[4], dataItemEndBitIndex[4]); - } - else - { - if (!(VDT_NO_DATA(dataItemStartByteIndex[4], dataItemStartBitIndex[4], - dataItemEndByteIndex[4], dataItemEndBitIndex[4]))) - { - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[4], dataItemStartBitIndex[4], - dataItemStartByteIndex[8], dataItemStartBitIndex[8]); - ResetMPEG4IntraDcUV(); - } - } - } - - /* DC marker */ - sPutBits(iOutBuffer, DC_MARKER_LENGTH, DC_MARKER); - - for (dlstHead(iMBList, (void **) &MBinstance); - MBinstance != NULL; - dlstNext(iMBList, (void **) &MBinstance)) - { - dataItemStartByteIndex = MBinstance->DataItemStartByteIndex; - dataItemStartBitIndex = MBinstance->DataItemStartBitIndex; - dataItemEndByteIndex = MBinstance->DataItemEndByteIndex; - dataItemEndBitIndex = MBinstance->DataItemEndBitIndex; - - /* ac_pred_flag */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[3], dataItemStartBitIndex[3], - dataItemEndByteIndex[3], dataItemEndBitIndex[3]); - - /* CBPY */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[2], dataItemStartBitIndex[2], - dataItemEndByteIndex[2], dataItemEndBitIndex[2]); - } - - /* make sure the head of the list is reset */ - dlstHead(iMBList, (void **) &MBinstance); -} - -/* -* ReconstructPMBPartitions -* -* Parameters: -* -* Function: -* Recontruct the partitions for color effect when we are not doing format transcoding -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::ReconstructPMBPartitions() -{ - vdxPMBListItem_t *MBinstance; - int *dataItemStartByteIndex; - int *dataItemStartBitIndex; - int *dataItemEndByteIndex; - int *dataItemEndBitIndex; - int newMCBPCLen = 0; - int newMCBPC = 0; - - VDTASSERT(iMBList); - - for (dlstHead(iMBList, (void **) &MBinstance); - MBinstance != NULL; - dlstNext(iMBList, (void **) &MBinstance)) - { - dataItemStartByteIndex = MBinstance->DataItemStartByteIndex; - dataItemStartBitIndex = MBinstance->DataItemStartBitIndex; - dataItemEndByteIndex = MBinstance->DataItemEndByteIndex; - dataItemEndBitIndex = MBinstance->DataItemEndBitIndex; - - /* MB stuffing bits if they exsit */ - vdtCopyBuffer(iInBuffer, iOutBuffer, dataItemStartByteIndex[11], dataItemStartBitIndex[11], - dataItemEndByteIndex[11], dataItemEndBitIndex[11]); - - if (MBinstance->fCodedMB) - { - /* output 1 bit COD, coded */ - sPutBits (iOutBuffer, 1, 0); - - /* MCBPC */ - if (iColorEffect) - { - /* MCBPC Changed, ignore the return value */ - vdtGetPMBBlackAndWhiteMCBPC(newMCBPCLen, newMCBPC, MBinstance->mcbpc); - sPutBits(iOutBuffer, newMCBPCLen, newMCBPC); - } - else - { - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[0], dataItemStartBitIndex[0], - dataItemEndByteIndex[0], dataItemEndBitIndex[0]); - } - - /* MVs, if they exist */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[10], dataItemStartBitIndex[10], - dataItemEndByteIndex[10], dataItemEndBitIndex[10]); - } - else - { - /* output 1 bit COD, not coded */ - sPutBits (iOutBuffer, 1, 1); - } - } - - /* MM marker */ - sPutBits(iOutBuffer, MOTION_MARKER_LENGTH, MOTION_MARKER); - - for (dlstHead(iMBList, (void **) &MBinstance); - MBinstance != NULL; - dlstNext(iMBList, (void **) &MBinstance)) - { - if (MBinstance->fCodedMB) - { - dataItemStartByteIndex = MBinstance->DataItemStartByteIndex; - dataItemStartBitIndex = MBinstance->DataItemStartBitIndex; - dataItemEndByteIndex = MBinstance->DataItemEndByteIndex; - dataItemEndBitIndex = MBinstance->DataItemEndBitIndex; - - /* ac_pred_flag, if it exsits */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[3], dataItemStartBitIndex[3], - dataItemEndByteIndex[3], dataItemEndBitIndex[3]); - - /* CBPY, */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[2], dataItemStartBitIndex[2], - dataItemEndByteIndex[2], dataItemEndBitIndex[2]); - /* DQUANT, if it exsits */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[1], dataItemStartBitIndex[1], - dataItemEndByteIndex[1], dataItemEndBitIndex[1]); - - /* INTRA DCs, if they exsit */ - if (!iColorEffect) - { - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[4], dataItemStartBitIndex[4], - dataItemEndByteIndex[4], dataItemEndBitIndex[4]); - } - else - { - if (!(VDT_NO_DATA(dataItemStartByteIndex[4], dataItemStartBitIndex[4], - dataItemEndByteIndex[4], dataItemEndBitIndex[4]))) - { - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[4], dataItemStartBitIndex[4], - dataItemStartByteIndex[8], dataItemStartBitIndex[8]); - ResetMPEG4IntraDcUV(); - } - } - } - } - - /* make sure the head of the list is reset */ - dlstHead(iMBList, (void **) &MBinstance); -} - -/* -* ResetMPEG4IntraDcUV -* -* Parameters: -* -* Function: -* This function resets the DCc for U V block in INTRA MB. -* Inputs are valid only with Color Effect -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::ResetMPEG4IntraDcUV() -{ - /* set INTRADC for u,v in the output buffer */ - TInt sizeU, sizeCodeU, sizeCodeLengthU, valueU, valueCodeU, valueCodeLengthU; - TInt sizeV, sizeCodeV, sizeCodeLengthV, valueV, valueCodeV, valueCodeLengthV; - TInt curDcScaler, delta; - TReal realDelta, realVal; - TInt mbh, mbv, mbd; // previous MB in the horizontal, vertical and diagonal directions - TInt codeMB; - - // initialize for codewords - sizeU = sizeCodeU = sizeCodeLengthU = valueCodeU = valueCodeLengthU = 0; - sizeV = sizeCodeV = sizeCodeLengthV = valueCodeV = valueCodeLengthV = 0; - - // initialize for prediction - mbh = mbv = mbd = VDX_MB_INTER; - codeMB = 0; - - // NOTE: VDX_MB_INTER=1, VDX_MB_INTRA=2, NOT-CODED MB has a value of 0 - if (iVopCodingType == VDX_VOP_TYPE_I) - { - /* encode intra DC coefficients for INTRA MBs of I-VOP if - either of the following is true: - - - - - else, do not encode intra DC - (because rest of MBs have differential intra DC, which is zero) - */ - if (!iCurMBNumInVP || - (!(iCurMBNum%iMBsinWidth) && (iCurMBNumInVPiMBsinWidth) - { - if (iCurMBNum%iMBsinWidth) - { - mbh = iMBType[iCurMBNum-1]; - mbd = iMBType[iCurMBNum-iMBsinWidth-1]; - } - mbv = iMBType[iCurMBNum-iMBsinWidth]; - } - else if (iCurMBNumInVP==iMBsinWidth) - { - if (iCurMBNum%iMBsinWidth) - { - mbh = iMBType[iCurMBNum-1]; - } - mbv = iMBType[iCurMBNum-iMBsinWidth]; - } - else if (iCurMBNumInVP>0) - { - if (iCurMBNum%iMBsinWidth) - { - mbh = iMBType[iCurMBNum-1]; - } - } - - // - if ((mbh8) - sPutBits(iOutBuffer, 1, 1); // marker bit - } - - // V - sPutBits(iOutBuffer, sizeCodeLengthV, sizeCodeV); // dct_dc_coeff size - if (sizeCodeV != 3) // size=0 - { - sPutBits(iOutBuffer, valueCodeLengthV, valueCodeV); // dct_dc_coeff differential - if (valueCodeLengthV>8) - sPutBits(iOutBuffer, 1, 1); // marker bit - } - } - else - { - sPutBits (iOutBuffer, 2, 3); /* U */ - sPutBits (iOutBuffer, 2, 3); /* V */ - } -} - - -/* -* GetMPEG4IntraDcCoeffUV -* -* Parameters: -* aValue coefficient value -* aDCAC pointer the reconstructed coefficients -* Function: -* This function fills the reconstructed DCAC values for INTRA block. -* Inputs are valid only with Color Effect -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::GetMPEG4IntraDcCoeffUV(TInt aValue, TInt& aSize, - TInt& aSizeCode, TInt& aSizeCodeLength, TInt& aValueCode, TInt& aValueCodeLength) -{ - int absVal = (aValue>=0 ? aValue : -aValue); - // size of aValueCode - for (aSize=0; absVal|0; absVal>>=1, aSize++) ; - if (aSize) - { - // codeword for aSize - if (aSize==1) - { - aSizeCode = 2; - aSizeCodeLength = 2; - } - else - { - aSizeCode = 1; - aSizeCodeLength = aSize; - } - - // codeword for aValue - aValueCode = aValue; - if (aValue<0) - aValueCode += ((1<= 0 && aIndex < 6); - - if (aDCAC && iDoModeTranscoding && (iTargetFormat == EVedVideoTypeH263Profile0Level10 || - iTargetFormat == EVedVideoTypeH263Profile0Level45)) - { - /* we only need the reconstructed DCACs for MPEG4 -> H263 */ - /* It is a coded block */ - memcpy(iDCTBlockData + (aIndex << 6), aDCAC, sizeof(int) * BLOCK_COEFF_SIZE); - } -} - -/* -* ConstructH263MBData -* -* Parameters: -* aNewMCBPCLen new length of mcbpc -* aNewMCBPC new mcbpc -* Function: -* This function creates a new H263 MB -* Inputs are valid only with Color Effect -* Returns: -* VDC error codes -* -*/ -int CMPEG4Transcoder::ConstructH263MBData(dmdPParam_t *aParam, int /*aNewMCBPCLen*/, int /*aNewMCBPC*/) -{ - /* MB data part1: output MCBPC, CBPY, DQuant, MV, intra DC etc */ - int *dataItemStartByteIndex; - int *dataItemStartBitIndex; - int *dataItemEndByteIndex; - int *dataItemEndBitIndex; - int quant, dquant; - int codedBlockPattern = 0; - - const unsigned int sDquant[5] = - { - 1, 0, (unsigned int)65536, 2, 3 - }; - - if (iVopCodingType == VDX_VOP_TYPE_P) - { - dataItemStartByteIndex = iCurPMBinstance->DataItemStartByteIndex; - dataItemStartBitIndex = iCurPMBinstance->DataItemStartBitIndex; - dataItemEndByteIndex = iCurPMBinstance->DataItemEndByteIndex; - dataItemEndBitIndex = iCurPMBinstance->DataItemEndBitIndex; - quant = iCurPMBinstance->quant; - dquant = iCurPMBinstance->dquant; - } - else - { - dataItemStartByteIndex = iCurIMBinstance->DataItemStartByteIndex; - dataItemStartBitIndex = iCurIMBinstance->DataItemStartBitIndex; - dataItemEndByteIndex = iCurIMBinstance->DataItemEndByteIndex; - dataItemEndBitIndex = iCurIMBinstance->DataItemEndBitIndex; - quant = iCurIMBinstance->quant; - dquant = iCurIMBinstance->dquant; - } - - if (iPreQuant != quant - dquant) - { - /* last quant in MPEG4 and H263 is different, dquant and VLCs may not be reused */ - if (abs(quant - iPreQuant) > 2) - { - /* VLCs cannot be reused, obtain the new ones */ - sQuantizeMB(iDCTBlockData, quant, iPreQuant, - iMBCodingType, iColorEffect); - quant = iPreQuant; - dquant = 0; - } - else - { - /* VLCs can be reused, but need to change dquant and MCBPC */ - dquant = quant - iPreQuant; - } - } - - /* MB stuffing bits if they exsit */ - vdtCopyBuffer(iInBuffer, iOutBuffer, dataItemStartByteIndex[11], dataItemStartBitIndex[11], - dataItemEndByteIndex[11], dataItemEndBitIndex[11]); - - if (iMBCodingType == VDX_MB_INTER) - { - VDTASSERT(aParam); - tMBPosition mbPos; - tMotionVector mvTestOutside; - mbPos.x = aParam->xPosInMBs * 16; - mbPos.y = aParam->yPosInMBs * 16; - mbPos.LeftBound = 0; - mbPos.RightBound = iVDEInstance->lumWidth << 1; - mbPos.TopBound = 0; - mbPos.BottomBound = iVDEInstance->lumHeight << 1; - mvTestOutside.mvx = (int16) ((aParam->mvx[0] << 1) / 10); - mvTestOutside.mvy = (int16) ((aParam->mvy[0] << 1) / 10); - - /* Three cases for MVs. 1): 4MVs -> need mapping 2). 1 outside frame MV 3) rounding type = 1 */ - vdcInstance_t * vdcTemp = (vdcInstance_t *)(iVDEInstance->vdcHInstance); - - /* Two cases for MVs. 1): 4MVs -> need mapping 2). 1 outside frame MV */ - if (iCurPMBinstance->numMVs == 4 || (iCurPMBinstance->numMVs == 1 && - vbmMVOutsideBound(&mbPos, &mvTestOutside, 1)) || vdcTemp->pictureParam.rtype) - { - int32 numTextureBits; - int32 searchRange = 16; - tMotionVector *initPred; - (h263mbi+iCurMBNum)->QuantScale = (int16) quant; - (h263mbi+iCurMBNum)->dQuant = (int16) dquant; - - /* note: this buffer is also used in the diamond search and half-pixel search !!!!! - which needs at least 8 points - */ - initPred = (tMotionVector*) malloc(8 * sizeof (tMotionVector)); - if(!initPred) - { - //Memory not available - return TX_ERR; - } - - - for (int i = 0; i < iCurPMBinstance->numMVs ; i++) - { - (initPred + i)->mvx = (int16) (aParam->mvx[i] / 10); /* the recorded mv is multipied by 10, */ - (initPred + i)->mvy = (int16) (aParam->mvy[i] / 10); /* the recorded mv is multipied by 10, */ - } - int32 noOfPredictors = iCurPMBinstance->numMVs; - - /* perform the 4MVs -> 1MV mapping, and output this MB */ - vbmPutInterMB(&mbPos, - iOutBuffer,aParam, - initPred, noOfPredictors, - (u_int32) iVDEInstance->lumWidth, (u_int32) iVDEInstance->lumHeight, - searchRange, iCurMBNum, &numTextureBits, - (int16)iColorEffect, h263mbi); - /* the MVs buffer is updated inside vbmPutInterMB */ - - if (initPred) - free(initPred); - } - else - { - /* Here, for Inter MB with One inside Frame MV, we simply reuse the DCTs */ - VDTASSERT(iCurPMBinstance->numMVs == 1); - - /* It is a coded MB, output 1 bit COD (it always exists in P frame) */ - sPutBits (iOutBuffer, 1, 0); - int cbpy; - int mcbpcVal; - int len; - - codedBlockPattern = sFindCBP(iDCTBlockData, OFF); - mcbpcVal = iColorEffect? 0 : (codedBlockPattern & 3); - cbpy = ((codedBlockPattern >> 2) & 0xf); - vbmGetH263PMCBPC(dquant, iColorEffect, cbpy, mcbpcVal, len); - sPutBits(iOutBuffer, len, mcbpcVal); //MCBPC, CBPY - - /* DQUANT, if it exsits */ - if (dquant) - { - sPutBits(iOutBuffer, 2, sDquant[dquant + 2]); - } - /* recode MVs, one more indice exists in the MV VLC table in MPEG4 - moreover, vop_fcode can be larger than 1 (although it may rarely happens), - so it is better to redo the VLC coding - */ - /* the recorded mv is multipied by 10, in pixel unit */ - int16 mvx = (int16) ((aParam->mvx[0] << 1) / 10); - int16 mvy = (int16) ((aParam->mvy[0] << 1) / 10); - - tMotionVector lPredMV[4]; - tMBInfo *mbi = h263mbi + iCurMBNum; - - /* get the new predicted MV */ - vbmMvPrediction(mbi, iCurMBNum, lPredMV, (u_int32)iMBsinWidth); - - vbmEncodeMVDifferential(mvx - lPredMV[0].mvx, mvy - lPredMV[0].mvy, 1, iOutBuffer); - cbpy = 32; - /* following is the block level data */ - for (int i = 0; i < (iColorEffect? 4 : 6); i++) - { - int fBlockCoded = cbpy & codedBlockPattern; - if (fBlockCoded) - { - /* here we do the VLC coding again */ - int numTextureBits = 0; - vdtPutInterMBCMT(iOutBuffer,0, iDCTBlockData + i * BLOCK_COEFF_SIZE, &numTextureBits, ON); - } - cbpy >>= 1; - } - - /* update the MVs buffer */ - (h263mbi + iCurMBNum)->MV[0][0] = (int16) ((aParam->mvx[0] << 1) / 10); /* the recorded mv is multipied by 10 */ - (h263mbi + iCurMBNum)->MV[0][1] = (int16) ((aParam->mvy[0] << 1) / 10); /* the recorded mv is multipied by 10 */ - - } /* end of if 4MVs */ - } - else /* INTRA MB */ - { - /* update the MVs buffer */ - (h263mbi + iCurMBNum)->MV[0][0] = 0; - (h263mbi + iCurMBNum)->MV[0][1] = 0; - /* MPEG4 and H263 use different methods for INTRA MB, redo the VLC coding */ - int cbpy; - int mcbpcVal; - int len; - - codedBlockPattern = sFindCBP(iDCTBlockData, ON); - mcbpcVal = iColorEffect? 0 : (codedBlockPattern & 3); - cbpy = ((codedBlockPattern >> 2) & 0xf); - vbmGetH263IMCBPC(dquant, (iVopCodingType == VDX_VOP_TYPE_P), iColorEffect, cbpy, mcbpcVal, len); - sPutBits(iOutBuffer, len, mcbpcVal); //COD, MCBPC, CBPY - - /* DQUANT, if it exsits */ - if (dquant) - { - sPutBits(iOutBuffer, 2, sDquant[dquant + 2]); - } - cbpy = 32; - - /* following is the block level data */ - for (int i = 0; i < (iColorEffect? 4 : 6); i++) - { - /* requantize INTRA DC */ - /* DC Quantization */ - int coeff = (iDCTBlockData + i * BLOCK_COEFF_SIZE)[0] >> 3; - - if(coeff < 1) coeff = 1; - if(coeff > 254) coeff = 254; - if(coeff == 128) - { - sPutBits(iOutBuffer, 8, 255); - } - else - { - sPutBits(iOutBuffer, 8, coeff); - } - - (iDCTBlockData + i * BLOCK_COEFF_SIZE)[0] = coeff; - if(cbpy & codedBlockPattern) - { - int numTextureBits = 0; - vdtPutInterMBCMT(iOutBuffer,1, iDCTBlockData + i * BLOCK_COEFF_SIZE, &numTextureBits, ON); - } - cbpy >>= 1; - } - } - - if (iColorEffect && (iMBCodingType == VDX_MB_INTRA)) - { - ResetH263IntraDcUV(iOutBuffer, iColorToneU, iColorToneV); - } - iPreQuant = quant; - - return TX_OK; -} - -/* -* ConstructRegularMPEG4MBData -* -* Parameters: -* aNewMCBPCLen new length of mcbpc -* aNewMCBPC new mcbpc -* Function: -* This function rearranges the data for bitstream with data partitioning -* Only valid in Data Partitioned mode -* Inputs are valid only with Color Effect -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::ConstructRegularMPEG4MBData(int aNewMCBPCLen, int aNewMCBPC) -{ - /* MB data part1: output MCBPC, CBPY, DQuant, MV, intra DC etc */ - int *dataItemStartByteIndex; - int *dataItemStartBitIndex; - int *dataItemEndByteIndex; - int *dataItemEndBitIndex; - - if (iVopCodingType == VDX_VOP_TYPE_P) - { - dataItemStartByteIndex = iCurPMBinstance->DataItemStartByteIndex; - dataItemStartBitIndex = iCurPMBinstance->DataItemStartBitIndex; - dataItemEndByteIndex = iCurPMBinstance->DataItemEndByteIndex; - dataItemEndBitIndex = iCurPMBinstance->DataItemEndBitIndex; - } - else - { - dataItemStartByteIndex = iCurIMBinstance->DataItemStartByteIndex; - dataItemStartBitIndex = iCurIMBinstance->DataItemStartBitIndex; - dataItemEndByteIndex = iCurIMBinstance->DataItemEndByteIndex; - dataItemEndBitIndex = iCurIMBinstance->DataItemEndBitIndex; - } - - /* MB stuffing bits if they exsit */ - vdtCopyBuffer(iInBuffer, iOutBuffer, dataItemStartByteIndex[11], dataItemStartBitIndex[11], - dataItemEndByteIndex[11], dataItemEndBitIndex[11]); - - if (iVopCodingType == VDX_VOP_TYPE_P) - { - /* It is a coded MB, output 1 bit COD (it always exists in P frame) */ - sPutBits (iOutBuffer, 1, 0); - } - - /* MCBPC. NOTE: the positions do not include MCBPC stuffing bits !! */ - if (iColorEffect) - { - /* MCBPC Changed */ - sPutBits(iOutBuffer, aNewMCBPCLen, aNewMCBPC); - } - else - { - vdtCopyBuffer(iInBuffer, iOutBuffer, dataItemStartByteIndex[0], dataItemStartBitIndex[0], - dataItemEndByteIndex[0], dataItemEndBitIndex[0]); - } - /* ac_pred_flag, if it exsits */ - vdtCopyBuffer(iInBuffer, iOutBuffer, dataItemStartByteIndex[3], dataItemStartBitIndex[3], - dataItemEndByteIndex[3], dataItemEndBitIndex[3]); - - /* CBPY */ - vdtCopyBuffer(iInBuffer, iOutBuffer, dataItemStartByteIndex[2], dataItemStartBitIndex[2], - dataItemEndByteIndex[2], dataItemEndBitIndex[2]); - - /* DQUANT, if it exsits */ - vdtCopyBuffer(iInBuffer, iOutBuffer, dataItemStartByteIndex[1], dataItemStartBitIndex[1], - dataItemEndByteIndex[1], dataItemEndBitIndex[1]); - - if (iMBCodingType == VDX_MB_INTER) - { - /* MVs, if they exsit */ - vdtCopyBuffer(iInBuffer, iOutBuffer, dataItemStartByteIndex[10], dataItemStartBitIndex[10], - dataItemEndByteIndex[10], dataItemEndBitIndex[10]); - } - - /* following is the block level data */ - for (int i = 0; i < (iColorEffect? 4 : 6); i++) - { - /* INTRA DC, if it exsits */ - vdtCopyBuffer(iInBuffer, iOutBuffer, dataItemStartByteIndex[i + 4], dataItemStartBitIndex[i + 4], - dataItemEndByteIndex[i + 4], dataItemEndBitIndex[i + 4]); - - /* block data part2, AC or DCT coefficients */ - if (iBitStreamMode == EVedVideoBitstreamModeMPEG4DP_RVLC || iBitStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP_RVLC) - { - /* remember for data partitioning, the positions only indicate the - AC or DCTs coefficients - */ - if (VDT_NO_DATA(iBlockStartByteIndex[i], iBlockStartBitIndex[i], - iBlockEndByteIndex[i], iBlockEndBitIndex[i])) - { - /* no coefficients,skip this block */ - continue; - } - else - { - /* for RVLC coding, we transform the block data back to VLC */ - int numTextureBits = 0; - /* redo the entropy coding, RVLC -> VLC - only for AC (IMB) or DCT (PMB) coefficients - */ - if (iMBCodingType == VDX_MB_INTRA) - { - vdtPutIntraMBCMT(iOutBuffer,iDCTBlockData + i * BLOCK_COEFF_SIZE, &numTextureBits, i, 1, 0); - } - else - { - vdtPutInterMBCMT(iOutBuffer,0, iDCTBlockData + i * BLOCK_COEFF_SIZE, &numTextureBits, OFF); - } - } - } - else /* ouput the AC or DCT coefficients */ - { - bufEdit.copyMode = CopyWhole; /* CopyWhole */ - vdtCopyBuffer(iInBuffer,iOutBuffer, - iBlockStartByteIndex[i],iBlockStartBitIndex[i], - iBlockEndByteIndex[i],iBlockEndBitIndex[i]); - } - } - if (iColorEffect && (iMBCodingType == VDX_MB_INTRA)) - { - ResetMPEG4IntraDcUV(); - } -} - - - -/* -* AddOneBlockDataToMB -* -* Parameters: -* blockData block data before VLC coding, in ZigZag order -* Function: -* This function input one block data to current MB -* only here the whole MB data is retrieved (COD=0) -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::AddOneBlockDataToMB(int aBlockIndex, int *aBlockData) -{ - VDTASSERT(aBlockIndex >= 0 && aBlockIndex < 6); - - - if (aBlockData && iDoModeTranscoding) - { - /* iDCTBlockData is only used when we need to convert the bitstream to MPEG4_RESYN - It is a coded block - */ - if (iMBCodingType == VDX_MB_INTRA && (iTargetFormat == EVedVideoTypeH263Profile0Level10 || - iTargetFormat == EVedVideoTypeH263Profile0Level45)) - { - /* we only need the reconstructed DCACs, skipped */ - } - else - { - memcpy(iDCTBlockData + (aBlockIndex << 6), aBlockData, sizeof(int) * BLOCK_COEFF_SIZE); - } - } - else - { - memset(iDCTBlockData + (aBlockIndex << 6), 0, sizeof(int) * BLOCK_COEFF_SIZE); - } - - - - iBlockEndByteIndex[aBlockIndex] = iInBuffer->getIndex; - iBlockEndBitIndex[aBlockIndex] = iInBuffer->bitIndex; -} - -/* -* ErrorResilienceInfo -* -* Parameters: -* header VOL Header data -* Function: -* This function records the position of resnc_marker_disable bit -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::ErrorResilienceInfo(vdxVolHeader_t *header, int aByte, int aBit) -{ - if (header) - { - - memcpy(&iVOLHeader, header, sizeof(vdxVolHeader_t)); // save the header info - - } - else - { - iErrorResilienceStartByteIndex = aByte; /* save the bits position */ - iErrorResilienceStartBitIndex = aBit; - } -} - - - -/* -* MPEG4TimerResolution -* -* Parameters: -* -* Function: -* This function records the position of vop_time_increment_resolution bit -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::MPEG4TimerResolution(int aStartByteIndex, int aStartBitIndex) -{ - iTimeResolutionByteIndex = aStartByteIndex; - iTimeResolutionBitIndex = aStartBitIndex; -} - - - -void CMPEG4Transcoder::ConstructVOSHeader(int aMPEG4, vdeDecodeParamters_t *aDecoderInfo) -{ - if (!aMPEG4 ) - { - /* for H263 and MPEG4 shortheader, no vos generated */ - if (iErrorResilienceStartByteIndex == KDataNotValid && - iErrorResilienceStartBitIndex == KDataNotValid) - { - iBitStreamMode = EVedVideoBitstreamModeH263; // pure H.263 - aDecoderInfo->vosHeaderSize = aDecoderInfo->fModeChanged? KH263ToMpeg4VosSize : 0; - } - else - { - /* we went into the VOL layer. It is a MPEG4 bitstream with short header */ - iBitStreamMode = EVedVideoBitstreamModeMPEG4ShortHeader; /* MPEG4 shortheader */ - iShortHeaderEndByteIndex = iInBuffer->getIndex; - iShortHeaderEndBitIndex = iInBuffer->bitIndex; - aDecoderInfo->vosHeaderSize = aDecoderInfo->fModeChanged? KH263ToMpeg4VosSize : KShortHeaderMpeg4VosSize; - } - fFirstFrameInH263 = ETrue; - } - else - { - iNumMBsInOneVOP = (iVDEInstance->lumHeight * iVDEInstance->lumWidth) / 256; - - /* even iBitStreamMode is given outside, we renew it here anyway */ - iBitStreamMode = sGetMPEG4Mode(iVOLHeader.error_res_disable, - iVOLHeader.data_partitioned, iVOLHeader.reversible_vlc); - - if (iTargetFormat != EVedVideoTypeH263Profile0Level10 && - iTargetFormat != EVedVideoTypeH263Profile0Level45) /* EVedVideoTypeMPEG4SimpleProfile or None */ - { - /* copy from the begining of the input buffer */ - vdtCopyBuffer(iInBuffer,iOutBuffer,0,7, iTimeResolutionByteIndex, iTimeResolutionBitIndex); - /* it is 16 bits */ - sPutBits (iOutBuffer, KMpeg4VopTimeIncrementResolutionLength, *aDecoderInfo->aMPEG4TargetTimeResolution); - - int startByteIndex, startBitIndex; - startByteIndex = iTimeResolutionByteIndex + 2; - startBitIndex = iTimeResolutionBitIndex; - - sPutBits(iOutBuffer, 1, MARKER_BIT); - /* close fixed_vop_rate */ - sPutBits (iOutBuffer, 1, 0); /* it is 1 bit */ - - int num_bits = 0; - vdcInstance_t * vdcTemp = (vdcInstance_t *)(iVDEInstance->vdcHInstance); - if (vdcTemp->pictureParam.fixed_vop_rate) - { - for (num_bits = 1; ((vdcTemp->pictureParam.time_increment_resolution-1) >> num_bits) != 0; num_bits++) - { - } - } - num_bits += 2; - - /* following is to skip the fixed_vop_rate */ - int bitsRemain, bitShift = 0; - int bitsToMove = 0 ; - /* complete the byte */ - if (startBitIndex != 7) - { - bitShift = startBitIndex + 1; - bitsToMove = (num_bits < bitShift) ? num_bits : bitShift; - /* update statistics to take care of bit addition or byte completion */ - if (num_bits < bitShift) - { - /* bits skipped but byte not completed */ - startBitIndex -= bitsToMove; - } - else - { - /* byte completed */ - startByteIndex ++; - startBitIndex = 7; - } - } - /* full bytes to skip */ - startByteIndex += ((num_bits - bitsToMove) >> 3); - bitsRemain = (num_bits - bitsToMove) % 8; - - /* the remaining bits */ - startBitIndex = ( bitsRemain != 0) ? 7 - bitsRemain : startBitIndex; - - - /* check if we have user data in the end of VOL; it cannot be copied as such but needs to be byte aligned */ - /* first need to rewind the input buffer to be able to seek in it */ - int16 error = 0; - int curByteIndex = iInBuffer->getIndex; - int curBitIndex = iInBuffer->bitIndex; - int bits = ((curByteIndex - iTimeResolutionByteIndex)<<3) + (7-curBitIndex); - bibRewindBits(bits, iInBuffer, &error); - int sncCode = sncSeekMPEGStartCode(iInBuffer, - vdcTemp->pictureParam.fcode_forward, 1 /* don't check VOPs */, 1 /* check for user data*/, &error); - - /* record next resync position */ - int resyncByteIndex = iInBuffer->getIndex; - - int stuffBits = 0; - int userDataExists = 0; - if ( sncCode == SNC_USERDATA ) - { - /* copy only until this sync code, and copy the rest separately in the end. */ - userDataExists = 1; - } - else - { - /* No UD */ - /* restore the original pointers in iInBuffer */ - iInBuffer->getIndex = curByteIndex; - iInBuffer->bitIndex = curBitIndex; - } - - if (iDoModeTranscoding || aDecoderInfo->fHaveDifferentModes) - { - /* close the error resilience tools, change the bitstream to regular MPEG4 with resyn marker */ - int numBits = iVOLHeader.data_partitioned ? 3 : 2; - - bufEdit.copyMode = CopyWithEdit; - bufEdit.editParams[0].StartByteIndex = iErrorResilienceStartByteIndex; - bufEdit.editParams[0].StartBitIndex = iErrorResilienceStartBitIndex; - bufEdit.editParams[0].curNumBits = numBits; - bufEdit.editParams[0].newNumBits = 2; - bufEdit.editParams[0].newValue = 0; /* new codeword: resyn, no dp, no rvlc */ - CopyStream(iInBuffer,iOutBuffer,&bufEdit, startByteIndex,startBitIndex); /* copy from vop_time_increment_resolution */ - - /* rewind stuffing bits */ - int16 error; - sncRewindStuffing(iOutBuffer, &error); - - // stuff bits in outbuffer for next start code - vdtStuffBitsMPEG4(iOutBuffer); - } - else - { - - /* rewind stuffing bits */ - sncRewindStuffing(iInBuffer, &error); - - /* record the number of bits rewinded - can be from 0 to 8 */ - /* note that iInBuffer must be byte aligned before rewinding */ - if (iInBuffer->bitIndex == 7) // full byte rewind - { - stuffBits = ( (int)(iInBuffer->getIndex) < resyncByteIndex) ? 8 : 0; - } - else - { - stuffBits = iInBuffer->bitIndex + 1; - } - - /* copy the rest of VOS until the first VOP (or UD) */ - bufEdit.copyMode = CopyWhole; - vdtCopyBuffer(iInBuffer,iOutBuffer, startByteIndex,startBitIndex, - resyncByteIndex, iInBuffer->bitIndex); - - // stuff bits in outbuffer for next start code - vdtStuffBitsMPEG4(iOutBuffer); - - // move inbuffer pointer back to original value - bibForwardBits(stuffBits, iInBuffer); - } - - - if ( userDataExists ) - { - /* seek for VOP start code */ - int sncCode = sncSeekMPEGStartCode(iInBuffer, - vdcTemp->pictureParam.fcode_forward, vdcTemp->pictureParam.error_res_disable, 0, &error); - - /* rewind stuffing bits */ - sncRewindStuffing(iInBuffer, &error); - - // record the number of bits rewinded - can be from 0 to 8 - // note that iInBuffer must be byte aligned before rewinding - if (iInBuffer->bitIndex == 7) // full byte rewind - { - stuffBits = ( (int)(iInBuffer->getIndex) < resyncByteIndex) ? 8 : 0; - } - else - { - stuffBits = iInBuffer->bitIndex + 1; - } - - bufEdit.copyMode = CopyWhole; - vdtCopyBuffer(iInBuffer,iOutBuffer, resyncByteIndex, 7, - iInBuffer->getIndex, iInBuffer->bitIndex); - - // stuff bits in outbuffer for next start code - vdtStuffBitsMPEG4(iOutBuffer); - - // move inbuffer pointer back to original value - bibForwardBits(stuffBits, iInBuffer); - - - - } - - aDecoderInfo->vosHeaderSize = iOutBuffer->getIndex; - } - - PRINT((_L("CMPEG4Transcoder: ConstructVOSHeader. resyn: %d, data partitioned: %d, rvlc: %d, resolution: %d"), - iVOLHeader.error_res_disable, iVOLHeader.data_partitioned, iVOLHeader.reversible_vlc, - aDecoderInfo->iTimeIncrementResolution)); - } - PRINT((_L("CMPEG4Transcoder: streammode: %d, outputformat: %d, vos size : %d"), - iBitStreamMode, iTargetFormat, aDecoderInfo->vosHeaderSize)); -} - - - - -/**************************************************************** -* * -* Functions for H.263, or H.263 -> MPEG4 (only baseline H.263) * -* * -*****************************************************************/ - - -/* Luminance block dc-scaler value corresponding to QP values of 0-31 */ -const u_int8 sLumDCScalerTbl[32] = -{ - 0, 8, 8, 8, 8, 10, 12, 14, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 34, 36, 38, 40, 42, 44, 46 -}; - -/* Chrominance block dc-scaler value corresponding to QP values of 0-31 */ -const u_int8 sChrDCScalerTbl[32] = -{ - 0, 8, 8, 8, 8, 9, 9, 10, - 10, 11, 11, 12, 12, 13, 13, 14, - 14, 15, 15, 16, 16, 17, 17, 18, - 18, 19, 20, 21, 22, 23, 24, 25 -}; - -/* -* sGetMPEG4INTRADCValue -* -* Parameters: -* intraDC reconstructed intra DC from H263 -* QP quantion factor -* blockNum block number (0 to 5) -* currMBNum current MB number -* mbinWidth number of MBs in picure width -* dcData matrix to store the INTRA DC values -* mbVPNumber matrix recording the video packet number for each MB -* -* Function: -* This function gets the new intra DC for MPEG4 -* Returns: -* INTRA DC to put into MPEG4 bitstream -* Error codes: -* None -* -*/ -int sGetMPEG4INTRADCValue(int intraDC, int blockNum, int currMBNum, - int32 QP, int32 mbinWidth, int **dcData, int *mbVPNumber) -{ - int tempDCScaler; - int blockA = 0, blockB = 0, blockC = 0; - int gradHor, gradVer, predDC; - - VDTASSERT(currMBNum >= 0); - VDTASSERT(QP <= 31); - - /* Prediction blocks A (left), B (above-left), and C (above) */ - switch (blockNum) - { - case 0: - case 4: - case 5: - /* Y0, U, and V blocks */ - if (((currMBNum % mbinWidth) == 0) || /* Left edge */ - (mbVPNumber[currMBNum - 1] != mbVPNumber[currMBNum])) - { - blockA = 1024; /* fixed value for H263 */ - } - else - { - blockA = dcData[currMBNum - 1][blockNum > 3? blockNum : 1]; - } - - if (((currMBNum / mbinWidth) == 0) || /* Top Edge */ - ((currMBNum % mbinWidth) == 0) || /* Left Edge */ - (mbVPNumber[currMBNum - mbinWidth - 1] != mbVPNumber[currMBNum])) - { - blockB = 1024; - } - else - { - blockB = dcData[currMBNum - mbinWidth - 1][blockNum > 3? blockNum : 3]; - } - - if (((currMBNum / mbinWidth) == 0) || /* Top Edge */ - (mbVPNumber[currMBNum - mbinWidth] != mbVPNumber[currMBNum])) - { - blockC = 1024; - } - else - { - blockC = dcData[currMBNum - mbinWidth][blockNum > 3? blockNum : 2]; - } - break; - - case 1: - /* Y1 block */ - blockA = dcData[currMBNum][0]; - - if (((currMBNum / mbinWidth) == 0) || /* Top Edge */ - (mbVPNumber[currMBNum - mbinWidth] != mbVPNumber[currMBNum])) - { - blockB = 1024; - blockC = 1024; - } - else - { - blockB = dcData[currMBNum - mbinWidth][2]; - blockC = dcData[currMBNum - mbinWidth][3]; - } - break; - - case 2: - /* Y2 block */ - - if (((currMBNum % mbinWidth) == 0) || /* Left Edge */ - (mbVPNumber[currMBNum - 1] != mbVPNumber[currMBNum])) - { - blockA = 1024; - blockB = 1024; - } - else - { - blockA = dcData[currMBNum - 1][3]; - blockB = dcData[currMBNum - 1][1]; - } - - blockC = dcData[currMBNum][0]; - break; - - case 3: - /* Y3 block */ - - blockA = dcData[currMBNum][2]; - blockB = dcData[currMBNum][0]; - blockC = dcData[currMBNum][1]; - break; - - default: - break; - } - - gradHor = blockB - blockC; - gradVer = blockA - blockB; - - if ((abs(gradVer)) < (abs(gradHor))) - { - /* Vertical prediction (from C) */ - predDC = blockC; - } - else - { - /* Horizontal prediction (from A) */ - predDC = blockA; - } - - /* DC quantization */ - if (blockNum < 4) /* Luminance Block */ - { - intraDC += (sLumDCScalerTbl[QP] >> 1); - intraDC /= sLumDCScalerTbl[QP]; - - /* update the DC data matrix - note: for INTER MB, the entry is already preset to 1024!! - */ - dcData[currMBNum][blockNum] = intraDC * sLumDCScalerTbl[QP]; - } - else /* Chrominance block */ - { - intraDC += (sChrDCScalerTbl[QP] >> 1); - intraDC /= sChrDCScalerTbl[QP]; - /* update the DC data matrix - note: for INTER MB, the entry is already preset to 1024!! - */ - dcData[currMBNum][blockNum] = intraDC * sChrDCScalerTbl[QP]; - } - /* DC prediction */ - tempDCScaler = (blockNum<4)? sLumDCScalerTbl[QP] : sChrDCScalerTbl[QP]; - - return (intraDC - ((predDC + tempDCScaler/2) / tempDCScaler)); -} - -/* -* sPutVOLHeader -* -* Parameters: -* bitOut pointer to the output buffer -* aWidth picture width -* aHeight picture height -* aTimerResolution timer resolution for MPEG4 -* -* Function: -* This function writes the VOL header into bit-stream -* Returns: -* None -* Error codes: -* None -* -*/ -inline void sPutVOLHeader(bibBuffer_t* bitOut, int aWidth, int aHeight, int aTimerResolution) -{ - bibBuffer_t *lBitOut; - uint32 vop_time_increment_resolution; - - lBitOut = bitOut; - WRITE32(lBitOut, (uint32)VIDEO_OBJECT_LAYER_START_CODE); - /* RandomAccessibleVol == 1 means all VOP's can be decoded independently */ - sPutBits(lBitOut, 1, 0); - /* VideoObjectTypeIndication = SIMPLE OBJECT */ - sPutBits(lBitOut, 8, SIMPLE_OBJECT); - /* IsObjectLayerIdentifier */ - sPutBits(lBitOut, 1, 0); - /* AspectRatioInfo */ - sPutBits(lBitOut, 4, ASPECT_RATIO_INFO); - /* vol_control_parameters = 1 */ - sPutBits(lBitOut, 1, 1); - /* Chroma Format */ - sPutBits(lBitOut, 2, CHROMA_FORMAT); - /* LowDelay = 1; */ - sPutBits(lBitOut, 1, 1); - /* vbvParameters = 0; */ - sPutBits(lBitOut, 1, 0); - /* VideoObjectLayerShape == RECTANGULAR */ - sPutBits(lBitOut, 2, RECTANGULAR); - /* Marker Bit */ - sPutBits(lBitOut, 1, MARKER_BIT); - /* VopTimeIncrementResolution */ - vop_time_increment_resolution = aTimerResolution; - sPutBits(lBitOut, 16, vop_time_increment_resolution); - /* Marker Bit */ - sPutBits(lBitOut, 1, MARKER_BIT); - /* FixedVOPRate = 0, not fixed */ - sPutBits(lBitOut, 1, 0); - /* Marker Bit */ - sPutBits(lBitOut, 1, MARKER_BIT); - /* VideoObjectLayerWidth */ - sPutBits(lBitOut, 13, aWidth); - /* Marker Bit */ - sPutBits(lBitOut, 1, MARKER_BIT); - /* VideoObjectLayerHeight */ - sPutBits(lBitOut, 13, aHeight); - /* Marker Bit */ - sPutBits(lBitOut, 1, MARKER_BIT); - /* Interlaced = 0 */ - sPutBits(lBitOut, 1, 0); - /* ObmcDisable= 1 */ - sPutBits(lBitOut, 1, 1); - /* SpriteEnable = 0 */ - sPutBits(lBitOut, 1, 0); - /* Not8Bit = 0 */ - sPutBits(lBitOut, 1, 0); - /* QuantType = H263 (0) */ - sPutBits(lBitOut, 1, H263); - /* Complexity Estimation Disable = 1 */ - sPutBits(lBitOut, 1, 1); - /* ResyncMarkerDisable */ - sPutBits(lBitOut, 1, 0); /* H263 is converted to resyn_marker MPEG4 in video editor */ - /* DataPartioned */ - sPutBits(lBitOut, 1, 0); /* always 0 for H263 */ - /* Reversible VLC closed */ - /* Scalability = 0 */ - sPutBits(lBitOut, 1, 0); - vdtStuffBitsMPEG4(lBitOut); - - return; -} - - -/* -* sPutGOVHeader -* -* Parameters: -* bitOut pointer to the output buffer -* aModuloTimeBase time base for MPEG4 -* -* Function: -* This function writes the group of VOP(GOV) header into bit-stream -* Returns: -* None -* Error codes: -* None -* -*/ -inline void sPutGOVHeader(bibBuffer_t *bitOut, int aModuloTimeBase) -{ - int32 time_code_hours; - int32 time_code_minutes; - int32 time_code_seconds; - - WRITE32(bitOut, (uint32)GROUP_OF_VOP_START_CODE); - time_code_seconds = aModuloTimeBase; - time_code_minutes = time_code_seconds / 60; - time_code_hours = time_code_minutes / 60; - time_code_minutes = time_code_minutes - (time_code_hours * 60); - time_code_seconds = time_code_seconds - (time_code_minutes * 60) - - (time_code_hours * 3600); - - sPutBits(bitOut, 5, time_code_hours); - sPutBits(bitOut, 6, time_code_minutes); - sPutBits(bitOut, 1, MARKER_BIT); - sPutBits(bitOut, 6, time_code_seconds); - - /* ClosedGov */ - sPutBits(bitOut, 1, 0); - /* Broken Link */ - sPutBits(bitOut, 1, 0); - - /* Stuff bits */ - vdtStuffBitsMPEG4(bitOut); - - return; -} - -/* -* sConstructMPEG4VOSHeaderForH263 -* -* Parameters: -* bitOut pointer to the output buffer -* aWidth picture width -* aHeight picture height -* -* Function: -* This function writes the MPEG4 VOS header into bit-stream -* Returns: -* None -* Error codes: -* None -* -*/ -void sConstructMPEG4VOSHeaderForH263(bibBuffer_t *bitOut, int aWidth, int aHeight, int aOutputMpeg4TimeRes) -{ - /* visual object sequence header */ - WRITE32(bitOut, (uint32)VISUAL_OBJECT_SEQUENCE_START_CODE); - - /* This is for testing for level 0,3 */ - uint32 level = 8; /* level 0 for QCIF or less */ - if(aWidth > 176 || aHeight > 144) /* level 2 for greater than QCIF */ - level = 2; - sPutBits(bitOut, 8, level); /* simple profile, level 0 for H263 */ - - /* visual object header begins */ - WRITE32(bitOut, (uint32)VISUAL_OBJECT_START_CODE); - /* IsVisualObjectIdentifier = 0 */ - sPutBits(bitOut, 1, 0); - /* VisualObjectType = VIDEO_OBJECT */ - sPutBits(bitOut, 4, VISUAL_OBJECT); - /* VideoSignalType = 0 */ - sPutBits(bitOut, 1, 0); - - vdtStuffBitsMPEG4(bitOut); - WRITE32(bitOut, (uint32)VIDEO_OBJECT_START_CODE); - - /* Writes the VOL header into bit-stream , for baseline H263 TR is marked with 29.97fps. ->? */ - sPutVOLHeader(bitOut, aWidth, aHeight, aOutputMpeg4TimeRes); - - /* Writes GOV , time base is 0 */ - sPutGOVHeader(bitOut, 0); - - return; -} - - -/* -* sPutVideoPacketHeader -* -* Parameters: -* lBitOut output buffer -* mbNo Macroblock number -* quantiserScale quant value to be put in header -* aMBsInVOP # of MBs in one VOP -* -* Function: -* This function writes the video packet header information into bit-stream -* Returns: -* None -* Error codes: -* None -* -*/ -inline void sPutVideoPacketHeader(bibBuffer_t *lBitOut, int32 mbNo, - int16 quantiserScale, - int aMBsInVOP) -{ - int32 lResyncMarkerLength = 17; - int32 lMBNoResolution; - - /* ResyncMarker */ - int fCode = 1; /*always 1 for H263 */ - lResyncMarkerLength = 16 + fCode; - sPutBits(lBitOut, lResyncMarkerLength, 1); - - --aMBsInVOP; - lMBNoResolution = 1; - while( (aMBsInVOP = - aMBsInVOP >> 1) > 0 ) - { - lMBNoResolution++; - } - sPutBits(lBitOut, lMBNoResolution, mbNo); - - /* QuantScale */ - sPutBits(lBitOut, 5, quantiserScale); - /* HEC */ - sPutBits(lBitOut, 1, 0); /* always 0 for H263 */ - - return; -} - -/* -* sConstructVOPHeaderForH263 -* -* Parameters: -* lBitOut output buffer -* prevQuant quant value to be put in header -* aVOPType picture coding type -* aVOPTimeIncrement time increament -* -* Function: -* This function writes the VOP header into bit-stream for one H263 frame -* Returns: -* None -* Error codes: -* None -* -*/ - -void sConstructVOPHeaderForH263(bibBuffer_t *lBitOut, int prevQuant, int aVOPType, int aVOPTimeIncrement,int aOutputMpeg4TimeRes) -{ - WRITE32(lBitOut, (uint32)VOP_START_CODE); - /* VOPType, 0 for Intra and 1 for inter */ - sPutBits(lBitOut, 2, aVOPType); - - /* H263 TR is marked with 29.97fps */ - /* Modulo Time Base */ - int outputTimerResolution = aOutputMpeg4TimeRes; - while ((unsigned)aVOPTimeIncrement >= (unsigned) outputTimerResolution) - { - sPutBits(lBitOut, 1, 1); - aVOPTimeIncrement -= outputTimerResolution; - } - sPutBits(lBitOut, 1, 0); - /* Marker Bit */ - sPutBits(lBitOut, 1, MARKER_BIT); - /* VopTimeIncrement */ - int numOutputTrBits; - for (numOutputTrBits = 1; ((outputTimerResolution-1) >> numOutputTrBits) != 0; numOutputTrBits++) - { - } - int VOPIncrementResolutionLength = numOutputTrBits; - sPutBits(lBitOut, VOPIncrementResolutionLength, aVOPTimeIncrement); - /* Marker Bit */ - sPutBits(lBitOut, 1, MARKER_BIT); - /* VOPCoded */ - sPutBits(lBitOut, 1, 1); /* always 1 for H263 */ - /* VOPRoundingType */ - if(aVOPType == P_VOP) - { - sPutBits(lBitOut, 1, 0); /* always 0 for H263 */ - } - /* IntraDCVLCThreshold */ - sPutBits(lBitOut, 3, 0); /* always 0 for H263 */ - /* VOPQuant */ - sPutBits(lBitOut, 5, prevQuant); - /* VOPFcodeForwad */ - if(aVOPType == P_VOP) - { - sPutBits(lBitOut, 3, 1); /* always 1 for H263 */ - } - - return; -} - - - -/* -* H263PictureHeaderEndedL -* -* Parameters: -* -* Function: -* This function is called after one H263 picture header is parsed -* Note: the input header is only valid inside this function -* Returns: -* VDC error codes -* Error codes: -* None -* -*/ -int CMPEG4Transcoder::H263PictureHeaderEnded(dphOutParam_t *aH263PicHeader, dphInOutParam_t *aInfo) -{ - VDTASSERT(aH263PicHeader); - - // asad - if (!aInfo->vdcInstance->frameNum || !iRefQuant) - { - iRefQuant = aH263PicHeader->pquant; - iDcScaler = GetMpeg4DcScalerUV(iRefQuant); - } - - if (!iDoModeTranscoding ) - { - - /* Copy the header to output stream */ - bufEdit.copyMode = CopyWhole; /* CopyWhole */ - - if ( (iTargetFormat == EVedVideoTypeH263Profile0Level10 || iTargetFormat == EVedVideoTypeH263Profile0Level45) && - fFirstFrameInH263 && iBitStreamMode == EVedVideoBitstreamModeMPEG4ShortHeader) - { - /* we don't need the VOS header, remove it */ - PRINT((_L("CMPEG4Transcoder: MPEG4 shortheader VOS removed"))); - - CopyStream(iInBuffer,iOutBuffer,&bufEdit,iShortHeaderEndByteIndex,iShortHeaderEndBitIndex); - fFirstFrameInH263 = EFalse; - } - else - { - /* copy from the begining of the input buffer, - including the VOS header for MPEG4 shortheader if its mode is not being changed - */ - CopyStream(iInBuffer,iOutBuffer,&bufEdit,0,7); - } - } - - - - else - { - /* H263 Picture Header -> MPEG4 VOP Header mapping - information about this frame - */ - iMBsinWidth = aInfo->vdcInstance->pictureParam.lumWidth >> 4; - - iNumMBsInOneVOP = (aInfo->vdcInstance->pictureParam.lumWidth >> 4) * - (aInfo->vdcInstance->pictureParam.lumHeight >> 4); - - iNumMBsInGOB = aInfo->vdcInstance->pictureParam.numMBsInGOB; - - /* create the intraDC matrix for DC prediction */ - VDTASSERT(!iH263DCData); - VDTASSERT(!iH263MBVPNum); - - iH263DCData = (int **)malloc(iNumMBsInOneVOP * sizeof(int)); - if (!iH263DCData) - { - deb("CMPEG4Transcoder::ERROR - iH263DCData creation failed\n"); - return TX_ERR; - } - - for (int i = 0; i < iNumMBsInOneVOP; i++) - { - iH263DCData[i] = (int *) malloc(6 * sizeof(int)); /* six blocks in one MB */ - VDTASSERT(iH263DCData[i]); - if (!iH263DCData[i]) - { - deb("CMPEG4Transcoder::ERROR - iH263DCData[i] creation failed\n"); - - for(int k=0; kvdcInstance->pictureParam.pictureType == VDX_PIC_TYPE_I? I_VOP : P_VOP; - - if (fFirstFrameInH263) - { - /* first frame, construct the VOS header */ - sConstructMPEG4VOSHeaderForH263(iOutBuffer, - aInfo->vdcInstance->pictureParam.lumWidth, - aInfo->vdcInstance->pictureParam.lumHeight, - iOutputMpeg4TimeIncResolution); - fFirstFrameInH263 = EFalse; - - PRINT((_L("CMPEG4Transcoder: H263 -> MPEG VOS generated"))); - } - sConstructVOPHeaderForH263(iOutBuffer, aH263PicHeader->pquant, pictureType, aH263PicHeader->trp == -1 ? 0 : aH263PicHeader->trp,iOutputMpeg4TimeIncResolution); - - - PRINT((_L("CMPEG4Transcoder: H263 -> MPEG4: transcoding one picture"))); - } - - - PRINT((_L("CMPEG4Transcoder: H263PictureHeaderEndedL. color effect: %d, format convert %d, do transcoding: %d streammode: %d, outputformat: %d "), - iColorEffect, iDoModeTranscoding, iDoTranscoding, - iBitStreamMode, iTargetFormat)); - - return TX_OK; -} - -/* -* H263GOBSliceHeaderEnded -* -* Parameters: -* -* Function: -* This function is called after one H263 GOB or Slice header is parsed -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::H263GOBSliceHeaderEnded(vdxGOBHeader_t *aH263GOBHeader, vdxSliceHeader_t */*aH263SliceHeader*/) -{ - iGOBSliceHeaderEndByteIndex = iInBuffer->getIndex; - iGOBSliceHeaderEndBitIndex = iInBuffer->bitIndex; - - if (aH263GOBHeader) - { - /* not the first GOB (no header), we have stuffing bits ahead - since we only store the position of GBSC not including - the stuffing bits, we may need to insert the stuffing bits here - if we have color effect, we have done the stuffing at the end of last GOB - see functin: H263OneGOBSliceWithHeaderEnded - */ - sStuffBitsH263(iOutBuffer); - } - - if (!iDoModeTranscoding) - { - /* Copy the header to output stream */ - bufEdit.copyMode = CopyWhole; // whole - CopyStream(iInBuffer,iOutBuffer,&bufEdit,iGOBSliceStartByteIndex,iGOBSliceStartBitIndex); - - } - - else - { - /* H263 GOB (Slice) Header -> MPEG4 VP Header mapping */ - if (!VDT_NO_DATA((int)iInBuffer->getIndex, iInBuffer->bitIndex, iGOBSliceStartByteIndex, iGOBSliceStartBitIndex) && - aH263GOBHeader) - { - /* sPutVideoPacketHeader */ - sPutVideoPacketHeader(iOutBuffer, aH263GOBHeader->gn * iNumMBsInGOB, (short)aH263GOBHeader->gquant, iNumMBsInOneVOP); - } - } - - // one slice ended, new video packet starting - iCurMBNumInVP = -1; - -} - - -/* -* H263GOBSliceHeaderBegin -* -* Parameters: -* -* Function: -* This function is called before one H263 GOB or Slice header is parsed -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::H263GOBSliceHeaderBegin() -{ - /* position not include the stuffing bits ahead of the GBSC ! */ - iGOBSliceStartByteIndex = iInBuffer->getIndex; - iGOBSliceStartBitIndex = iInBuffer->bitIndex; - iStuffingBitsUsed = 0; -} - - -/* -* H263GOBSliceHeaderBegin -* -* Parameters: -* -* Function: -* This function is called after one H263 GOB or Slice ends -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::H263OneGOBSliceEnded(int nextExpectedMBNum) -{ - if (iDoTranscoding) - { - /* MBs are lost or not coded, for H263 and H263->MPEG4 both */ - for (int i = iLastMBNum+1; i < nextExpectedMBNum; i++) - { - /* output 1 bit COD */ - sPutBits (iOutBuffer, 1, 1); - } - iLastMBNum = nextExpectedMBNum - 1; - } -} - - -/* -* H263OneGOBSliceWithHeaderEnded -* -* Parameters: -* -* Function: -* This function is called after GOB (Slice) that has GOB header (except the first GOB) ends -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::H263OneGOBSliceWithHeaderEnded() -{ - if (!iDoTranscoding) - { - bufEdit.copyMode = CopyWhole; /* CopyWhole */ - CopyStream(iInBuffer,iOutBuffer,&bufEdit, - iGOBSliceHeaderEndByteIndex,iGOBSliceHeaderEndBitIndex); - } - else - { - - if (iDoModeTranscoding) - { - /* for H263 to MPEG4, it implies that one video packet is finished */ - vdtStuffBitsMPEG4(iOutBuffer); - } - else - - { - /* stuffing occurs outside at the end of one GOB/slice withe header or end of frame, check in file core.cpp */ - sStuffBitsH263(iOutBuffer); - } - iVideoPacketNumInMPEG4 ++; - } - - // one slice ended, new video packet starting - iCurMBNumInVP = -1; // 0 - -} - - - -/* -* H263ToMPEG4MBData -* -* Parameters: -* -* Function: -* This function transcodes one H263 MB to one MPEG4 MB -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::H263ToMPEG4MBData(int aNewMCBPCLen, int aNewMCBPC) -{ - /* MB data part1: output MCBPC, CBPY, DQuant, MV, intra DC etc */ - int *dataItemStartByteIndex; - int *dataItemStartBitIndex; - int *dataItemEndByteIndex; - int *dataItemEndBitIndex; - int quant, cbpy, cbpc; - - if (iVopCodingType == VDX_VOP_TYPE_P) - { - dataItemStartByteIndex = iCurPMBinstance->DataItemStartByteIndex; - dataItemStartBitIndex = iCurPMBinstance->DataItemStartBitIndex; - dataItemEndByteIndex = iCurPMBinstance->DataItemEndByteIndex; - dataItemEndBitIndex = iCurPMBinstance->DataItemEndBitIndex; - quant = iCurPMBinstance->quant; - cbpy = iCurPMBinstance->cbpy; - cbpc = iCurPMBinstance->cbpc; - } - else - { - dataItemStartByteIndex = iCurIMBinstance->DataItemStartByteIndex; - dataItemStartBitIndex = iCurIMBinstance->DataItemStartBitIndex; - dataItemEndByteIndex = iCurIMBinstance->DataItemEndByteIndex; - dataItemEndBitIndex = iCurIMBinstance->DataItemEndBitIndex; - quant = iCurIMBinstance->quant; - cbpy = iCurIMBinstance->cbpy; - cbpc = iCurIMBinstance->cbpc; - } - - /* COD and MCBPC, (for I frame, it is MCBPC, for P frame it is COD and MCBPC) */ - if (iVopCodingType == VDX_VOP_TYPE_P) - { - /* It is a coded MB, output 1 bit COD (it always exists in P frame) */ - sPutBits (iOutBuffer, 1, 0); - } - - if (iColorEffect) - { - /* MCBPC Changed */ - sPutBits(iOutBuffer, aNewMCBPCLen, aNewMCBPC); - } - else - { - /* remember the positions do not include the possible stuffing MCBPC bits */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[0], dataItemStartBitIndex[0], - dataItemEndByteIndex[0], dataItemEndBitIndex[0]); - } - - /* ac_pred_flag */ - if (iMBCodingType == VDX_MB_INTRA) - { - sPutBits(iOutBuffer, 1, 0);// it is closed for H263 INTRA MB - } - - /* CBPY */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[2], dataItemStartBitIndex[2], - dataItemEndByteIndex[2], dataItemEndBitIndex[2]); - - /* DQUANT, if it exsits */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[1], dataItemStartBitIndex[1], - dataItemEndByteIndex[1], dataItemEndBitIndex[1]); - - if (iMBCodingType == VDX_MB_INTER) - { - /* MVs, if they exsit */ - vdtCopyBuffer(iInBuffer, iOutBuffer, - dataItemStartByteIndex[10], dataItemStartBitIndex[10], - dataItemEndByteIndex[10], dataItemEndBitIndex[10]); - } - - /* following is the block level data */ - for (int i = 0; i < (iColorEffect? 4 : 6); i++) - { - if (iMBCodingType == VDX_MB_INTRA) - { - int fBlockCoded = 0; - if (i < 4) - { - fBlockCoded = vdxIsYCoded(cbpy, i + 1); - } - else if (i == 4) - { - fBlockCoded = vdxIsUCoded(cbpc); - } - else - { - fBlockCoded = vdxIsVCoded(cbpc); - } - - /* Difference between H263 and MPEG4 : - 0. DC quantization is different, DC need to be dequantized and requantized - Note: for ACs, here we only support H263 quantization in MPEG4, we can copy them - 1. DC prediction is used in MPEG4 - 2. They use different VLC table for INTRA AC coefficient - */ - /* reconstuct INTRA DC */ - int intraDC = (iDCTBlockData + i * BLOCK_COEFF_SIZE)[0]; /* it is already dequantized in funcion vdxGetIntraDCTBlock */ - - /* INTRA quantization and prediction */ - (iDCTBlockData + i * BLOCK_COEFF_SIZE)[0] = sGetMPEG4INTRADCValue(intraDC, - i, iCurMBNum, quant, iMBsinWidth,iH263DCData, iH263MBVPNum); - - /* recoding the INTRA block */ - int numTextureBits = 0; - - vdtPutIntraMBCMT(iOutBuffer,iDCTBlockData + i * BLOCK_COEFF_SIZE, &numTextureBits, i, 0, 1); /* DC coding */ - - if (fBlockCoded) - { - vdtPutIntraMBCMT(iOutBuffer,iDCTBlockData + i * BLOCK_COEFF_SIZE, &numTextureBits, i, 1, 0); /*encode ACs */ - } - - } - - else if (!(VDT_NO_DATA(iBlockStartByteIndex[i], iBlockStartBitIndex[i], - iBlockEndByteIndex[i], iBlockEndBitIndex[i]))) - { - - /* 4. same VLC table for DCTs in H263 and MPEG4, but with different Escape Coding type. - see 7.4.1.3. in MPEG4 draft - */ - if (iEscapeCodeUsed[i]) - { - int numTextureBits = 0; - vdtPutInterMBCMT(iOutBuffer,0, iDCTBlockData + i * BLOCK_COEFF_SIZE, &numTextureBits, OFF); - } - else - { - bufEdit.copyMode = CopyWhole; /* CopyWhole */ - vdtCopyBuffer(iInBuffer,iOutBuffer, - iBlockStartByteIndex[i],iBlockStartBitIndex[i], - iBlockEndByteIndex[i],iBlockEndBitIndex[i]); - } - } - } - - if (iColorEffect && (iMBCodingType == VDX_MB_INTRA)) - { - ResetMPEG4IntraDcUV(); - } -} - - - -/* -* NeedDecodedYUVFrame -* -* Parameters: -* -* Function: -* This function indicates if whether we need the decoded frame -* Returns: -* ETrue if we need the decoded frame -* Error codes: -* None -* -*/ -int CMPEG4Transcoder::NeedDecodedYUVFrame() -{ - if ( (iTargetFormat == EVedVideoTypeH263Profile0Level10 || iTargetFormat == EVedVideoTypeH263Profile0Level45) && - iBitStreamMode !=EVedVideoBitstreamModeMPEG4ShortHeader && iBitStreamMode != EVedVideoBitstreamModeH263) - return ETrue; - else - return EFalse; -} - -/* -* NewL -* -* Parameters: -* -* Function: -* Symbian two-phased constructor -* Returns: -* pointer to constructed object, or NULL -* Error codes: -* None -* -*/ -CMPEG4Transcoder* CMPEG4Transcoder::NewL(const vdeInstance_t *aVDEInstance, bibBuffer_t *aInBuffer, bibBuffer_t *aOutBuffer) -{ - CMPEG4Transcoder *self = new (ELeave) CMPEG4Transcoder(aVDEInstance, aInBuffer, aOutBuffer); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; -} - - -/* -* ConstructL -* -* Parameters: -* -* Function: -* Symbian 2nd phase constructor (can leave) -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Transcoder::ConstructL() -{ - - /* Create one IMB Instance */ - iCurIMBinstance = (vdxIMBListItem_t *) malloc(sizeof(vdxIMBListItem_t)); - if (!iCurIMBinstance) - { - deb("CMPEG4Transcoder::ERROR - iCurIMBinstance creation failed\n"); - User::Leave(KErrNoMemory); - - } - memset(iCurIMBinstance, 0, sizeof(vdxIMBListItem_t)); - - /* Create one PMBInstance */ - iCurPMBinstance = (vdxPMBListItem_t *) malloc(sizeof(vdxPMBListItem_t)); - if (!iCurPMBinstance) - { - deb("CMPEG4Transcoder::ERROR - iCurPMBinstance creation failed\n"); - User::Leave(KErrNoMemory); - - } - memset(iCurPMBinstance, 0, sizeof(vdxPMBListItem_t)); - - /* initialize the edit buffer */ - bufEdit.editParams = (bibEditParams_t *) malloc(sizeof(bibEditParams_t)); - VDTASSERT(bufEdit.editParams); - if (!bufEdit.editParams) - { - deb("CMPEG4Transcoder::ERROR - bufEdit.editParams creation failed\n"); - User::Leave(KErrNoMemory); - - }else{ - bufEdit.numChanges = 1; - } - - if (!iMBType) - { - iMBType = (u_char *) malloc(iNumMBsInOneVOP * sizeof(u_char)); - if (!iMBType) - { - deb("CMPEG4Transcoder::ERROR - iMBType creation failed\n"); - User::Leave(KErrNoMemory); - } - memset(iMBType, VDX_MB_INTER, iNumMBsInOneVOP * sizeof(u_char)); - } - -} - - -/* -* GetMpeg4DcScaler -* -* Parameters: -* -* aQP Quantization parameter -* -* Function: -* Evaluates Chrominance DC Scaler from QP for MPEG4 -* Returns: -* int DC scaler value -* Error codes: -* None -* -*/ -int CMPEG4Transcoder::GetMpeg4DcScalerUV(int aQP) -{ - if (aQP>=1 && aQP<=4) - return (8); - else if (aQP>=5 && aQP<=24) - return ((aQP+13)/2); - else if (aQP>=25 && aQP<=31) - return (aQP-6); - else - return (0); // error -} - - -void CMPEG4Transcoder::AfterMBLayer(int aUpdatedQp) -{ - iCurQuant = aUpdatedQp; -} - - - - -/* End of File */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/VedVolReader.cpp --- a/videoeditorengine/h263decoder/src/VedVolReader.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,889 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* MPEG-4 VOL header parsing. -* -*/ - - -// INCLUDE FILES -#include "mpegcons.h" -#include "VedVolReader.h" - - - -// MACROS -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - - - -// CONSTANTS -const TUint8 CVedVolReader::KMsbMask[] = {1, 3, 7, 15, 31, 63, 127, 255}; -const TUint8 CVedVolReader::KLsbMask[] = {255, 254, 252, 248, 240, 224, 192, 128, 0}; - -const TInt CVedVolReader::KMaxUserDataLength = 512; - - - -// ================= MEMBER FUNCTIONS ======================= - -// Two-phased constructor -EXPORT_C CVedVolReader* CVedVolReader::NewL() - { - CVedVolReader* self = new (ELeave) CVedVolReader(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -// C++ default constructor -CVedVolReader::CVedVolReader() : iBitstreamMode(EVedVideoBitstreamModeUnknown) - { - // Reset the header data to zeroes - Mem::FillZ(&iHeader, sizeof(TVolHeader)); - } - -// Symbian OS default constructor can leave -void CVedVolReader::ConstructL() - { - } - -// Destructor -CVedVolReader::~CVedVolReader() - { - if (iHeader.iUserData != 0) - { - delete iHeader.iUserData; - } - } - -// --------------------------------------------------------- -// CVedVolReader::ParseVolHeaderL -// Parses given Video Object Layer header -// --------------------------------------------------------- -// -EXPORT_C TInt CVedVolReader::ParseVolHeaderL(TDesC8& aData) - { - TInt useDefaultVBVParams = 0; - TInt numBits; - TUint32 bits; - - // Reset the header data - if (iHeader.iUserData != 0) - { - delete iHeader.iUserData; - iHeader.iUserData = 0; - } - Mem::FillZ(&iHeader, sizeof(TVolHeader)); - iBitstreamMode = EVedVideoBitstreamModeUnknown; - iHeaderSize = 0; - - // Check that we have something to parse - if (aData.Length() == 0) - { - User::Leave(KErrNotFound); - } - - TSeqHeaderBuffer buffer(aData, 0, 7); // Bit 7 is the first bit in a byte - - // if H.263 PSC is present - bits = ReadSeqHeaderBits(buffer, 22, EFalse); - if (bits == 32) - { - // This is H.263 so there are no VOL headers - iBitstreamMode = EVedVideoBitstreamModeH263; - return KErrNone; - } - - // if Visual Object Sequence Start Code is present - bits = ReadSeqHeaderBits(buffer, MP4_VOS_START_CODE_LENGTH, EFalse); - if (bits == MP4_VOS_START_CODE) - { - // vos_start_code - ReadSeqHeaderBits(buffer, MP4_VOS_START_CODE_LENGTH, ETrue); - - // profile_and_level_indication (8 bits) - bits = ReadSeqHeaderBits(buffer, 8, ETrue); - // 8: Simple Profile Level 0 (from ISO/IEC 14496-2:1999/FPDAM4 [N3670] October 2000) - // 9: Simple Profile Level 0b - // 1: Simple Profile Level 1 - // 2: Simple Profile Level 2 - // 3: Simple Profile Level 3 - // 4: Simple Profile Level 4a - if (bits != 1 && bits != 2 && bits != 3 && bits != 4 && bits != 8 && bits != 9) - { - // Profile level id was not recognized so take a guess - // This is changed later if resolution does not match - bits = 9; - } - - iHeader.iProfileLevelId = (TInt) bits; - - ReadUserDataL(buffer); - } - - // if Visual Object Start Code is present - bits = ReadSeqHeaderBits(buffer, MP4_VO_START_CODE_LENGTH, EFalse); - if (bits == MP4_VO_START_CODE) - { - // visual_object_start_code - ReadSeqHeaderBits(buffer, MP4_VO_START_CODE_LENGTH, ETrue); - - // is_visual_object_identifier (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - // visual_object_ver_id (4 bits) - bits = ReadSeqHeaderBits(buffer, 4, ETrue); - if (bits != 1 && bits != 2) - { - // this is not an MPEG-4 version 1 or 2 stream - PRINT((_L("CVedVolReader: ERROR - This is not an MPEG-4 version 1 or 2 stream"))) - User::Leave(KErrNotSupported); - } - - // visual_object_priority (3 bits) - bits = ReadSeqHeaderBits(buffer, 3, ETrue); - iHeader.iVoPriority = (TInt) bits; - } - else - { - iHeader.iVoPriority = 0; - } - - // visual_object_type (4 bits) - bits = ReadSeqHeaderBits(buffer, 4, ETrue); - if (bits != 1) - { - // this is not a video object - PRINT((_L("CVedVolReader: ERROR - This is not a video object"))) - User::Leave(KErrNotSupported); - } - - // is_video_signal_type (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - /* Note: The following fields in the bitstream give information about the - video signal type before encoding. These parameters don't influence the - decoding algorithm, but the composition at the output of the video decoder. - Until a way to utilize them is found, these fields are just dummyly read, - but not interpreted. - For interpretation see the MPEG-4 Visual standard page 66-70. */ - - // video_format (3 bits) - bits = ReadSeqHeaderBits(buffer, 3, ETrue); - iHeader.iVideoFormat = (TInt) bits; - - // video_range (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - iHeader.iVideoRange = (TInt) bits; - - // colour_description (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - // colour_primaries (8 bits) - bits = ReadSeqHeaderBits(buffer, 8, ETrue); - iHeader.iColourPrimaries = (TInt) bits; - - // transfer_characteristics (8 bits) - bits = ReadSeqHeaderBits(buffer, 8, ETrue); - iHeader.iTransferCharacteristics = (TInt) bits; - - // matrix_coefficients (8 bits) - bits = ReadSeqHeaderBits(buffer, 8, ETrue); - iHeader.iMatrixCoefficients = (TInt) bits; - } - else - { - iHeader.iColourPrimaries = 1; // default: ITU-R BT.709 - iHeader.iTransferCharacteristics = 1; // default: ITU-R BT.709 - iHeader.iMatrixCoefficients = 1; // default: ITU-R BT.709 - } - } - else - { - // default values - iHeader.iVideoFormat = 5; // Unspecified video format - iHeader.iVideoRange = 0; // Y range 16-235 pixel values - iHeader.iColourPrimaries = 1; // ITU-R BT.709 - iHeader.iTransferCharacteristics = 1; // ITU-R BT.709 - iHeader.iMatrixCoefficients = 1; // ITU-R BT.709 - } - - // check the next start code - ReadSeqHeaderBits(buffer, 1, ETrue); - if (buffer.iBitInOctet != 7) - { - numBits = buffer.iBitInOctet + 1; - - bits = ReadSeqHeaderBits(buffer, numBits, ETrue); - if (bits != (TUint32) ((1 << numBits)-1)) - { - // stuffing error in VO - PRINT((_L("CVedVolReader: ERROR - Stuffing error"))) - User::Leave(KErrNotSupported); - } - } - - ReadUserDataL(buffer); - } - - // if Video Object Start Code is present - bits = ReadSeqHeaderBits(buffer, MP4_VID_START_CODE_LENGTH, EFalse); - if (bits == MP4_VID_START_CODE) - { - // video_object_start_code - ReadSeqHeaderBits(buffer, MP4_VID_START_CODE_LENGTH, ETrue); - - // video_object_id - bits = ReadSeqHeaderBits(buffer, MP4_VID_ID_CODE_LENGTH, ETrue); - iHeader.iVoId = (TInt) bits; - } - - // Check if H.263 PSC follows the VO header, in which case this is MPEG-4 with short header - bits = ReadSeqHeaderBits(buffer, 22, EFalse); - if (bits == 32 || buffer.iData.Length() <= buffer.iGetIndex) - { - iBitstreamMode = EVedVideoBitstreamModeMPEG4ShortHeader; - - // Calculate the header size in bytes - if (buffer.iBitInOctet == 7) - { - // The size is a multiple of 8 bits so the size is the number of bytes we've read so far - iHeaderSize = buffer.iGetIndex; - } - else - { - // Round up to the next full byte - iHeaderSize = buffer.iGetIndex + 1; - } - - // We no longer support short header clips - User::Leave(KErrNotSupported); - } - - // vol_start_code - bits = ReadSeqHeaderBits(buffer, MP4_VOL_START_CODE_LENGTH, ETrue); - if(bits != MP4_VOL_START_CODE) - { - PRINT((_L("CVedVolReader: ERROR - Bitstream does not start with MP4_VOL_START_CODE"))) - User::Leave(KErrCorrupt); - } - - // vol_id - bits = ReadSeqHeaderBits(buffer, MP4_VOL_ID_CODE_LENGTH, ETrue); - iHeader.iVolId = (TInt) bits; - - // random_accessible_vol (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - iHeader.iRandomAccessibleVol = (TUint8) bits; - - // video_object_type_indication (8 bits) - bits = ReadSeqHeaderBits(buffer, 8, ETrue); - if (bits != 1) - { - // this is not a simple video object stream - PRINT((_L("CVedVolReader: ERROR - This is not a simple video object stream"))) - User::Leave(KErrNotSupported); - } - - // is_object_layer_identifier (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - // visual_object_ver_id (4 bits) - bits = ReadSeqHeaderBits(buffer, 4, ETrue); - if (bits != 1 && bits != 2) - { - // this is not an MPEG-4 version 1 or 2 stream - PRINT((_L("CVedVolReader: ERROR - This is not an MPEG-4 version 1 or 2 stream"))) - User::Leave(KErrNotSupported); - } - - // video_object_layer_priority (3 bits) - bits = ReadSeqHeaderBits(buffer, 3, ETrue); - iHeader.iVoPriority = (TInt) bits; - } - - // aspect_ratio_info: `0010`- 12:11 (625-type for 4:3 picture) - bits = ReadSeqHeaderBits(buffer, 4, ETrue); - iHeader.iPixelAspectRatio = (TInt) bits; - - // extended par - if (bits == 15) - { - // par_width - bits = ReadSeqHeaderBits(buffer, 8, ETrue); - // par_height - bits = ReadSeqHeaderBits(buffer, 8, ETrue); - } - - // vol_control_parameters flag - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - // chroma_format (2 bits) - bits = ReadSeqHeaderBits(buffer, 2, ETrue); - if (bits != 1) - { - PRINT((_L("CVedVolReader: ERROR - Not supported chroma format"))) - User::Leave(KErrNotSupported); - } - - // low_delay (1 bits) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - - // vbv_parameters (1 bits) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - // first_half_bitrate (15 bits) - bits = ReadSeqHeaderBits(buffer, 15, ETrue); - iHeader.iBitRate = (bits << 15); - - // marker_bit - if (!ReadSeqHeaderBits(buffer, 1, ETrue)) - { - User::Leave(KErrCorrupt); - } - - // latter_half_bitrate (15 bits) - bits = ReadSeqHeaderBits(buffer, 15, ETrue); - iHeader.iBitRate += bits; - iHeader.iBitRate *= 400; - - // marker_bit - if (!ReadSeqHeaderBits(buffer, 1, ETrue)) - { - User::Leave(KErrCorrupt); - } - - // first_half_vbv_buffer_size (15 bits) - bits = ReadSeqHeaderBits(buffer, 15, ETrue); - iHeader.iVbvBufferSize = (bits << 3); - - // marker_bit - if (!ReadSeqHeaderBits(buffer, 1, ETrue)) - { - User::Leave(KErrCorrupt); - } - - // latter_half_vbv_buffer_size (3 bits) - bits = ReadSeqHeaderBits(buffer, 3, ETrue); - iHeader.iVbvBufferSize += bits; - iHeader.iVbvBufferSize *= 16384; - - // first_half_vbv_occupancy (11 bits) - bits = ReadSeqHeaderBits(buffer, 11, ETrue); - iHeader.iVbvOccupancy = (bits << 15); - - // marker_bit - if (!ReadSeqHeaderBits(buffer, 1, ETrue)) - { - User::Leave(KErrCorrupt); - } - - // latter_half_vbv_occupancy (15 bits) - bits = ReadSeqHeaderBits(buffer, 15, ETrue); - iHeader.iVbvOccupancy += bits; - iHeader.iVbvOccupancy *= 64; - - // marker_bit - if (!ReadSeqHeaderBits(buffer, 1, ETrue)) - { - User::Leave(KErrCorrupt); - } - } - else - { - useDefaultVBVParams = 1; - } - } - else - { - useDefaultVBVParams = 1; - } - - // vol_shape (2 bits) - bits = ReadSeqHeaderBits(buffer, 2, ETrue); - // rectangular_shape = '00' - if (bits != 0) - { - PRINT((_L("CVedVolReader: ERROR - Not rectangular shape is not supported"))) - User::Leave(KErrNotSupported); - } - - // marker_bit - if (!ReadSeqHeaderBits(buffer, 1, ETrue)) - { - User::Leave(KErrCorrupt); - } - - // time_increment_resolution - bits = ReadSeqHeaderBits(buffer, 16, ETrue); - iHeader.iTimeIncrementResolution = (TInt) bits; - - // marker_bit - if (!ReadSeqHeaderBits(buffer, 1, ETrue)) - { - User::Leave(KErrCorrupt); - } - - // fixed_vop_rate - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - - // fixed_vop_time_increment (1-15 bits) - if (bits) - { - for (numBits = 1; ((iHeader.iTimeIncrementResolution-1) >> numBits) != 0; numBits++) - { - } - - bits = ReadSeqHeaderBits(buffer, numBits, ETrue); - } - - // marker_bit - if (!ReadSeqHeaderBits(buffer, 1, ETrue)) - { - User::Leave(KErrCorrupt); - } - - // vol_width (13 bits) - bits = ReadSeqHeaderBits(buffer, 13, ETrue); - iHeader.iLumWidth = (TInt) bits; - - // marker_bit - if (!ReadSeqHeaderBits(buffer, 1, ETrue)) - { - User::Leave(KErrCorrupt); - } - - // vol_height (13 bits) - bits = ReadSeqHeaderBits(buffer, 13, ETrue); - iHeader.iLumHeight = (TInt) bits; - - // Accept only resolutions that are divisible by 16 - if ( ((iHeader.iLumWidth & 0x0000000f) != 0) || - ((iHeader.iLumHeight & 0x0000000f) != 0) ) - { - PRINT((_L("CVedVolReader: ERROR - Unsupported resolution"))) - User::Leave(KErrNotSupported); - } - - TInt macroBlocks = iHeader.iLumWidth * iHeader.iLumHeight / (16 * 16); - - // Check that we don't have too many macro blocks (ie resolution is not too big) - if( macroBlocks > 1200 ) - { - PRINT((_L("CVedVolReader: ERROR - Unsupported resolution"))) - User::Leave(KErrNotSupported); - } - - // Check that profile level id matches with the number of macro blocks - if( macroBlocks > 396 ) - { - // Resolution is higher than CIF => level must be 4a - if( iHeader.iProfileLevelId != 4 ) - { - iHeader.iProfileLevelId = 4; - useDefaultVBVParams = 1; - } - } - else if( macroBlocks > 99 ) - { - // Resolution is higher than QCIF => level must be atleast 2 - if( iHeader.iProfileLevelId < 2 || iHeader.iProfileLevelId > 4 ) - { - iHeader.iProfileLevelId = 3; // QVGA/CIF @ 30fps - useDefaultVBVParams = 1; - } - } - - // Set default VBV params if not set already - if (useDefaultVBVParams) - { - switch (iHeader.iProfileLevelId) - { - case 1: - iHeader.iVbvBufferSize = 10; - iHeader.iBitRate = 64; - break; - case 2: - iHeader.iVbvBufferSize = 20; - iHeader.iBitRate = 128; - break; - case 4: - iHeader.iVbvBufferSize = 80; - iHeader.iBitRate = 4000; - break; - case 8: - iHeader.iVbvBufferSize = 10; - iHeader.iBitRate = 64; - break; - case 9: - iHeader.iVbvBufferSize = 20; - iHeader.iBitRate = 128; - break; - default: - iHeader.iVbvBufferSize = 20; - iHeader.iBitRate = 384; - break; - } - - iHeader.iVbvOccupancy = iHeader.iVbvBufferSize * 170; - - iHeader.iVbvOccupancy *= 64; - iHeader.iVbvBufferSize *= 16384; - iHeader.iBitRate *= 1024; - } - - // marker_bit - if (!ReadSeqHeaderBits(buffer, 1, ETrue)) - { - User::Leave(KErrCorrupt); - } - - // interlaced (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - PRINT((_L("CVedVolReader: ERROR - Interlaced VOP not supported"))) - User::Leave(KErrNotSupported); - } - - // OBMC_disable - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (!bits) - { - PRINT((_L("CVedVolReader: ERROR - Overlapped motion compensation not supported"))) - User::Leave(KErrNotSupported); - } - - // sprite_enable (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - PRINT((_L("CVedVolReader: ERROR - Sprites not supported"))) - User::Leave(KErrNotSupported); - } - - // not_8_bit (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - PRINT((_L("CVedVolReader: ERROR - Not 8 bits/pixel not supported"))) - User::Leave(KErrNotSupported); - } - - // quant_type (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - PRINT((_L("CVedVolReader: ERROR - H.263/MPEG-2 Quant Table switch not supported"))) - User::Leave(KErrNotSupported); - } - - // complexity_estimation_disable (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (!bits) - { - PRINT((_L("CVedVolReader: ERROR - Complexity estimation header not supported"))) - User::Leave(KErrNotSupported); - } - - // resync_marker_disable (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - iHeader.iErrorResDisable = (TUint8) bits; - - // data_partitioned (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - iHeader.iDataPartitioned = (TUint8) bits; - - if (iHeader.iDataPartitioned) - { - // reversible_vlc (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - iHeader.iReversibleVlc = (TUint8) bits; - } - - // scalability (1 bit) - bits = ReadSeqHeaderBits(buffer, 1, ETrue); - if (bits) - { - PRINT((_L("CVedVolReader: ERROR - Scalability not supported"))) - User::Leave(KErrNotSupported); - } - - // check the next start code - ReadSeqHeaderBits(buffer, 1, ETrue); - if (buffer.iBitInOctet != 7) - { - numBits = buffer.iBitInOctet + 1; - - bits = ReadSeqHeaderBits(buffer, numBits, ETrue); - - /* Removed temporarily - if (bits != (TUint32) ((1 << numBits)-1)) - { - // this is not a video object - PRINT((_L("CVedVolReader: ERROR - Stuffing error"))) - User::Leave(KErrNotSupported); - }*/ - } - - ReadUserDataL(buffer); - - // Calculate the header size in bytes - if (buffer.iBitInOctet == 7) - { - // The size is a multiple of 8 bits so the size is the number of bytes we've read so far - iHeaderSize = buffer.iGetIndex; - } - else - { - // Round up to the next full byte - iHeaderSize = buffer.iGetIndex + 1; - } - - // Determine the bitstream mode - iBitstreamMode = CheckBitstreamMode(iHeader.iErrorResDisable, iHeader.iDataPartitioned, iHeader.iReversibleVlc); - - // If no error in bit buffer functions - return KErrNone; - } - -// --------------------------------------------------------- -// CVedVolReader::ReadSeqHeaderBits -// Reads requested bits from given buffer -// --------------------------------------------------------- -// -TUint32 CVedVolReader::ReadSeqHeaderBits(TSeqHeaderBuffer& aBuffer, TInt aNumBits, TBool aFlush) - { - TUint startIndex; // the index of the first byte to read - TUint startMask; // the mask for the first byte - TUint endIndex; // the index of the last byte to read - TUint endMask; // the mask for the last byte - TUint endShift; // the number of shifts after masking the last byte - TUint endNumberOfBits; // the number of bits in the last byte - TUint newBitIndex; // bitIndex after getting the bits - TUint newGetIndex; // getIndex after getting the bits - - TUint32 returnValue = 0; - - startIndex = aBuffer.iGetIndex; - startMask = KMsbMask[aBuffer.iBitInOctet]; - - // Check that there are enough bits left - if (startIndex * 8 + aNumBits > aBuffer.iData.Length() * 8) - { - return 0; - } - - if (aBuffer.iBitInOctet + 1 >= aNumBits) - { - // The bits are within one byte. - endShift = aBuffer.iBitInOctet - aNumBits + 1; - endMask = KLsbMask[endShift]; - returnValue = (aBuffer.iData[startIndex] & startMask & endMask) >> endShift; - if (endShift > 0) - { - newBitIndex = aBuffer.iBitInOctet - aNumBits; - newGetIndex = aBuffer.iGetIndex; - } - else - { - newBitIndex = 7; - newGetIndex = aBuffer.iGetIndex + 1; - } - } - else - { - // The bits are in multiple bytes. - aNumBits -= aBuffer.iBitInOctet + 1; - endNumberOfBits = aNumBits & 7; - - newBitIndex = 7 - endNumberOfBits; - newGetIndex = aBuffer.iGetIndex + (aNumBits >> 3) + 1; - - // Calculate the return value. - endIndex = newGetIndex; - endShift = 8 - (aNumBits & 7); - endMask = KLsbMask[endShift]; - - returnValue = aBuffer.iData[startIndex] & startMask; - startIndex++; - - while (startIndex != endIndex) - { - returnValue <<= 8; - returnValue += (TUint8) aBuffer.iData[startIndex]; - startIndex++; - } - - if (endNumberOfBits != 0) - { - returnValue <<= endNumberOfBits; - returnValue += (aBuffer.iData[startIndex] & endMask) >> endShift; - } - } - - if (aFlush) - { - // Update indexes. - aBuffer.iGetIndex = newGetIndex; - aBuffer.iBitInOctet = newBitIndex; - } - - return returnValue; - } - -// --------------------------------------------------------- -// CVedVolReader::ReadUserDataL -// Reads user data from given buffer -// --------------------------------------------------------- -// -void CVedVolReader::ReadUserDataL(TSeqHeaderBuffer& aBuffer) - { - TUint32 bits; - - // Check if User data is available - bits = ReadSeqHeaderBits(aBuffer, 32, EFalse); - if (bits == MP4_USER_DATA_START_CODE) - { - if (iHeader.iUserData == 0) - { - iHeader.iUserData = HBufC8::NewL(KMaxUserDataLength); - } - - TInt i = iHeader.iUserData->Length(); - do - { - bits = ReadSeqHeaderBits(aBuffer, 8, ETrue); - if (i++ < KMaxUserDataLength) - { - (iHeader.iUserData->Des()).Append(TChar(bits)); - } - } - while (aBuffer.iData.Length() > aBuffer.iGetIndex && - ReadSeqHeaderBits(aBuffer, 24, EFalse) != 0x1); - } - } - -// --------------------------------------------------------- -// CVedVolReader::CheckBitstreamMode -// Checks what is the bit stream mode the video -// --------------------------------------------------------- -// -TVedVideoBitstreamMode CVedVolReader::CheckBitstreamMode(TUint8 aErd, TUint8 aDp, TUint8 aRvlc) - { - TVedVideoBitstreamMode mode = EVedVideoBitstreamModeUnknown; - int combination = ((!aErd) << 2) | (aDp << 1) | aRvlc; - - switch (combination) - { - case 0: - mode = EVedVideoBitstreamModeMPEG4Regular; - break; - case 2: - mode = EVedVideoBitstreamModeMPEG4DP; - break; - case 3: - mode = EVedVideoBitstreamModeMPEG4DP_RVLC; - break; - case 4: - mode = EVedVideoBitstreamModeMPEG4Resyn; - break; - case 6: - mode = EVedVideoBitstreamModeMPEG4Resyn_DP; - break; - case 7: - mode = EVedVideoBitstreamModeMPEG4Resyn_DP_RVLC; - break; - default: - break; - } - - return mode; - } - -// --------------------------------------------------------- -// CVedVolReader::TimeIncrementResolution -// Returns the time increment resolution that was read from the VOL header -// --------------------------------------------------------- -// -EXPORT_C TInt CVedVolReader::TimeIncrementResolution() const - { - return iHeader.iTimeIncrementResolution; - } - -// --------------------------------------------------------- -// CVedVolReader::Width -// Returns the width of the video that was read from the VOL header -// --------------------------------------------------------- -// -EXPORT_C TInt CVedVolReader::Width() const - { - return iHeader.iLumWidth; - } - -// --------------------------------------------------------- -// CVedVolReader::Height -// Returns the height of the video that was read from the VOL header -// --------------------------------------------------------- -// -EXPORT_C TInt CVedVolReader::Height() const - { - return iHeader.iLumHeight; - } - -// --------------------------------------------------------- -// CVedVolReader::ProfileLevelId -// Returns the Level Id of the Simple Profile the Video Object conforms to -// --------------------------------------------------------- -// -EXPORT_C TInt CVedVolReader::ProfileLevelId() const - { - return iHeader.iProfileLevelId; - } - -// --------------------------------------------------------- -// CVedVolReader::BitstreamMode -// Returns the bitstream mode of the video -// --------------------------------------------------------- -// -EXPORT_C TVedVideoBitstreamMode CVedVolReader::BitstreamMode() const - { - return iBitstreamMode; - } - -// --------------------------------------------------------- -// CVedVolReader::HeaderSize -// Returns the bitstream mode of the video -// --------------------------------------------------------- -// -EXPORT_C TInt CVedVolReader::HeaderSize() const - { - return iHeaderSize; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/biblin.cpp --- a/videoeditorengine/h263decoder/src/biblin.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1127 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Bit buffer reading operations. -* -*/ - - - - -/* -* Includes -*/ - -#include "h263dConfig.h" -#include "Biblin.h" -#include "debug.h" - -#ifdef DEBUG_OUTPUT -bibBuffer_t * buffer_global; -#endif - - -/* -* Definitions -*/ - -#define bibMalloc malloc -#define bibCalloc calloc -#define bibRealloc realloc -#define bibDealloc free - -#ifndef bibAssert -#define bibAssert(exp) assert(exp); -#endif - - -/* -* Local function prototypes -*/ - -static void bibInitialize( - bibBuffer_t *bibBuffer, - void *srcBuffer, - unsigned srcBufferLength, - int16 *errorCode); - - - - -/* -* Imported variables -*/ - - - -/* -* Global functions -*/ - -/* {{-output"bibCreate.txt"}} */ -/* -* -* bibCreate -* -* -* Parameters: -* srcBuffer buffer containing the data -* srcBufferLength the length of the buffer -* errorCode error code -* -* Function: -* This function creates a bit buffer from a buffer given as a parameter. -* -* Returns: -* The bibCreate function returns a pointer to a bibBuffer_t -* structure. If the function is unsuccessful NULL is returned. -* -* Error codes: -* ERR_BIB_STRUCT_ALLOC if the bit buffer structure could not be -* allocated -* -*/ - -bibBuffer_t *bibCreate(void *srcBuffer, unsigned srcBufferLength, int16 *errorCode) -/* {{-output"bibCreate.txt"}} */ -{ - bibBuffer_t *bibBuffer = NULL; - int16 tmpError = 0; - - bibBuffer = (bibBuffer_t *) bibMalloc(sizeof(bibBuffer_t)); - if (bibBuffer == NULL) { - *errorCode = ERR_BIB_STRUCT_ALLOC; - deb("bibCreate: ERROR - bibMalloc failed.\n"); - return NULL; - } - - bibInitialize(bibBuffer, srcBuffer, srcBufferLength, &tmpError); - if (tmpError) { - bibDealloc(bibBuffer); - return NULL; - } - -#ifdef DEBUG_OUTPUT - debLoad("deb_dec.log"); - buffer_global = bibBuffer; -#endif - - return bibBuffer; -} - - - - -bibBufferEdit_t *bibBufferEditCreate(int16 *errorCode) -/* {{-output"bibCreate.txt"}} */ -{ - bibBufferEdit_t *bufEdit = NULL; - - bufEdit = (bibBufferEdit_t *) bibMalloc(sizeof(bibBufferEdit_t)); - if (bufEdit == NULL) { - *errorCode = ERR_BIB_STRUCT_ALLOC; - deb("bibBufferEditCreate: ERROR - bibMalloc failed.\n"); - return NULL; - } - bufEdit->copyMode = CopyWhole/*CopyWhole*/; - bufEdit->numChanges=0; - bufEdit->editParams=NULL; - - return bufEdit; -} - - - - -/* {{-output"bibDelete.txt"}} */ -/* -* -* bibDelete -* -* -* Parameters: -* buffer a pointer to a bit buffer structure -* errorCode error code -* -* Function: -* The bibDelete function frees the memory allocated for the buffer. -* -* Returns: -* Nothing -* -* Error codes: -* None -* -*/ - -void bibDelete(bibBuffer_t *buffer, int16 * /*errorCode*/) -/* {{-output"bibDelete.txt"}} */ -{ - if (buffer) { - // note that the BaseAddr is just a reference to memory allocated elsewhere - // and there is no other dynamic allocations inside buffer - bibDealloc((void *) buffer); - } -} - - - -void bibBufEditDelete(bibBufferEdit_t *bufEdit, int16 * /*errorCode*/) -{ - int i; - if (bufEdit) { - for(i=0; inumChanges; i++) - bibDealloc((void *) bufEdit->editParams); - bibDealloc((void *) bufEdit); - } -} - - -/* -* -* bibFlushBits -* bibGetBits -* bibShowBits -* -* -* Parameters: -* numberOfBits the number of bits wanted (1..32) -* buffer a pointer to a bit buffer structure -* numberOfBitsGot the number of bits actually got -* syncStartIndex the number of the first bit belonging to -* a synchronization code (1 .. numberOfBits). -* Bits are numbered starting from 1 given to -* the most significant bit of the returned code. -* Thus, syncStartIndex - 1 most significant bits -* of the returned code are valid coding -* parameters (do not belong to a sync code). -* 0 is returned if the returned code does not -* contain any part of a synchronization code. -* bitErrorIndication indication code for bit errors, -* see biterr.h for the possible values -* errorCode error code -* -* Function: -* The bibFlushBits function removes the next numberOfBits bits from -* the buffer. -* -* The bibGetBits function gets the next numberOfBits bits from the buffer. -* The returned bits are removed. -* -* The bibShowBits function gets the next numberOfBits bits from the -* buffer. The returned bits are not removed from the buffer. -* -* Returns: -* bibGetBits and bibShowBits: -* the next numberOfBits bits / the rest of the buffer if the end of -* the input file has been reached -* -* Error codes: -* ERR_BIB_NOT_ENOUGH_DATA if one tries to get more bits from the buffer -* than there is left -* -*/ - -void bibFlushBits(int numberOfBits, bibBuffer_t *buffer) -{ - bibAssert(buffer != NULL); - bibAssert(numberOfBits > 0 && numberOfBits <= 32); - - /* Check if enough bits are available. */ - if (buffer->bitsLeft < (u_int32) numberOfBits) { - goto flush_underflow; - } - buffer->bitsLeft -= numberOfBits; - - if ( buffer->bitIndex >= numberOfBits ) { - /* All in the current byte, bits still left */ - buffer->bitIndex -= numberOfBits; - } - else if ( buffer->bitIndex == (numberOfBits-1) ) { - /* Current byte used completely */ - buffer->bitIndex = 7; - buffer->getIndex++; - buffer->numBytesRead++; - } - else { - /* Current byte plus then some */ - numberOfBits -= buffer->bitIndex + 1; /* this many bits after current byte */ - buffer->getIndex += ((numberOfBits>>3) + 1); - buffer->numBytesRead += ((numberOfBits>>3) + 1); - buffer->bitIndex = 7 - (numberOfBits&7); - } - return; -flush_underflow: - buffer->error = ERR_BIB_NOT_ENOUGH_DATA; -} - - - -/* -* -* bibGetAlignedByte -* -* -* A fast function to get one byte from byte-boundary. -* -*/ -inline u_int8 bibGetAlignedByte(bibBuffer_t *buffer) - { - return buffer->baseAddr[buffer->getIndex++]; - } - - -/* -* -* bibGetBits -* -* -* See bibFlushBits. -* -*/ - -u_int32 bibGetBits(int numberOfBits, bibBuffer_t *buffer) -{ - static const u_char - msbMask[8] = {1, 3, 7, 15, 31, 63, 127, 255}, - lsbMask[9] = {255, 254, 252, 248, 240, 224, 192, 128, 0}; - u_char - *startAddr; - int32 - bitIndex; - u_int32 - endShift; /* the number of shifts after masking the last byte */ - u_int32 - numBytesFlushed; /* the number of bytes flushed from the buffer */ - u_int32 - returnValue = 0; - - bibAssert(buffer != NULL); - bibAssert(numberOfBits > 0 && numberOfBits <= 32); - - startAddr = buffer->baseAddr + buffer->getIndex; - bitIndex = buffer->bitIndex; - - /* Check if enough bits are available. */ - if (buffer->bitsLeft < (u_int32) numberOfBits) { - goto get_underflow; - } - - buffer->bitsLeft -= numberOfBits; - - if ( bitIndex >= numberOfBits ) { - /* All in the current byte, bits still left */ - endShift = bitIndex - numberOfBits + 1; - buffer->bitIndex -= numberOfBits; - return ((startAddr[0] & msbMask[bitIndex] & lsbMask[endShift]) >> endShift); - } - else if ( bitIndex == (numberOfBits-1) ) { - /* Current byte used completely */ - buffer->bitIndex = 7; - buffer->getIndex++; - buffer->numBytesRead++; - return startAddr[0] & msbMask[bitIndex]; - } - else { - /* Current byte plus then some */ - - /* Remainder of this byte */ - returnValue = *(startAddr++) & msbMask[bitIndex]; - numberOfBits -= bitIndex + 1; - numBytesFlushed = 1 + (numberOfBits >> 3); - - /* Get full bytes */ - while ( numberOfBits >= 8 ) { - returnValue = (returnValue << 8) | *(startAddr++); - numberOfBits -= 8; - } - - /* Get bits from last byte */ - endShift = 8 - numberOfBits; - returnValue = (returnValue << numberOfBits) | ((startAddr[0] & lsbMask[endShift]) >> endShift); - /* (safe, since lsbMask[8]==0) */ - - /* Update position in buffer */ - buffer->bitIndex = 7 - numberOfBits; - buffer->getIndex += numBytesFlushed; - buffer->numBytesRead += numBytesFlushed; - } - - return returnValue; -get_underflow: - buffer->error = ERR_BIB_NOT_ENOUGH_DATA; - return 0; -} - - -/* {{-output"bibNumberOfFlushedBits.txt"}} */ -/* -* -* bibNumberOfFlushedBits -* -* -* Parameters: -* buffer a pointer to a bit buffer structure -* -* Function: -* The bibNumberOfFlushedBytes returns the number of bits which -* are got (bibGetBits) or flushed (bibFlushBits) from the buffer since -* the buffer was created -* -* Returns: -* See above. -* -* Error codes: -* None. -* -*/ - -u_int32 bibNumberOfFlushedBits(bibBuffer_t *buffer) -/* {{-output"bibNumberOfFlushedBits.txt"}} */ -{ - bibAssert(buffer != NULL); - - return ((buffer->numBytesRead<<3) + (7-buffer->bitIndex)); -} - - -/* {{-output"bibNumberOfFlushedBytes.txt"}} */ -/* -* -* bibNumberOfFlushedBytes -* -* -* Parameters: -* buffer a pointer to a bit buffer structure -* -* Function: -* The bibNumberOfFlushedBytes returns the number of whole bytes which -* are got (bibGetBits) or flushed (bibFlushBits) from the buffer since -* bibCreate was called. -* -* Returns: -* See above. -* -* Error codes: -* None. -* -*/ - -u_int32 bibNumberOfFlushedBytes(bibBuffer_t *buffer) -/* {{-output"bibNumberOfFlushedBytes.txt"}} */ -{ - bibAssert(buffer != NULL); - - return buffer->numBytesRead; -} - - -/* {{-output"bibNumberOfRewBits.txt"}} */ -/* -* -* bibNumberOfRewBits -* -* -* Parameters: -* buffer a pointer to a bit buffer structure -* -* Function: -* The bibNumberOfRewBits returns the number of bits which can be -* successfully rewinded. -* -* Returns: -* See above. -* -* Error codes: -* None. -* -*/ - -u_int32 bibNumberOfRewBits(bibBuffer_t *buffer) -/* {{-output"bibNumberOfRewBits.txt"}} */ -{ - bibAssert(buffer != NULL); - - return ((buffer->numBytesRead<<3) + (7-buffer->bitIndex)); -} - - -/* {{-output"bibRewindBits.txt"}} */ -/* -* -* bibRewindBits -* -* -* Parameters: -* numberOfBits the number of bits to rewind -* buffer a pointer to a bit buffer structure -* errorCode error code -* -* Function: -* This function rewinds the pointers to the buffer -* so that already flushed or got bits can be read -* again. -* -* Returns: -* Nothing. -* -* Error codes: -* ERR_BIB_CANNOT_REWIND if numberOfBits is larger than which is -* possible to get (see also bibNumberOfRewBits). -* -* ERR_BIB_BUFLIST if there was a fatal error when handling -* buffer lists -* -*/ - -void bibRewindBits(u_int32 numberOfBits, bibBuffer_t *buffer, int16 *errorCode) -/* {{-output"bibRewindBits.txt"}} */ -{ - bibAssert(buffer != NULL); - - /* All bits to rewind are in the latest byte */ - if (numberOfBits <= (u_int32) (7 - buffer->bitIndex)) { - buffer->bitIndex += numberOfBits; - } - /* Bits to rewind are within several bytes */ - else { - u_int32 - numBitsWithoutFirstByte = numberOfBits - (7 - buffer->bitIndex), - numWholeBytes = (numBitsWithoutFirstByte>>3), - numBitsInLastByte = numBitsWithoutFirstByte - (numWholeBytes<<3); - - if (numBitsInLastByte) { - if (buffer->getIndex >= numWholeBytes + 1) { - buffer->getIndex -= numWholeBytes + 1; - buffer->bitIndex = numBitsInLastByte - 1; - buffer->numBytesRead -= numWholeBytes + 1; - } - else { - *errorCode = ERR_BIB_CANNOT_REWIND; - deb("bibRewindBits: ERROR - cannot rewind.\n"); - } - } - else { - if (buffer->getIndex >= numWholeBytes) { - buffer->getIndex -= numWholeBytes; - buffer->bitIndex = 7; - buffer->numBytesRead -= numWholeBytes; - } - else { - *errorCode = ERR_BIB_CANNOT_REWIND; - deb("bibRewindBits: ERROR - cannot rewind.\n"); - } - } - } - buffer->bitsLeft += numberOfBits; -} - - -/* {{-output"bibShowBits.txt"}} */ -/* -* -* bibShowBits -* -* -* See bibFlushBits. -* -*/ - -u_int32 bibShowBits(int numberOfBits, bibBuffer_t *buffer) -/* {{-output"bibShowBits.txt"}} */ -{ - static const u_char - msbMask[8] = {1, 3, 7, 15, 31, 63, 127, 255}, - lsbMask[9] = {255, 254, 252, 248, 240, 224, 192, 128, 0}; - u_char - *startAddr; - int32 - bitIndex; - u_int32 - endShift; /* the number of shifts after masking the last byte */ - u_int32 - returnValue = 0; - - bibAssert(buffer != NULL); - bibAssert(numberOfBits > 0 && numberOfBits <= 32); - - startAddr = buffer->baseAddr + buffer->getIndex; - bitIndex = buffer->bitIndex; - - /* Check if enough bits are available. */ - if (buffer->bitsLeft < (u_int32) numberOfBits) { - goto show_underflow; - } - - if ( bitIndex >= numberOfBits ) { - /* All in the current byte, bits still left */ - endShift = bitIndex - numberOfBits + 1; - return ((startAddr[0] & msbMask[bitIndex] & lsbMask[endShift]) >> endShift); - } - else if ( bitIndex == (numberOfBits-1) ) { - /* Current byte used completely */ - return startAddr[0] & msbMask[bitIndex]; - } - else { - /* Current byte plus then some */ - - /* Remainder of this byte */ - returnValue = *(startAddr++) & msbMask[bitIndex]; - numberOfBits -= bitIndex + 1; - - /* Get full bytes */ - while ( numberOfBits >= 8 ) - { - returnValue = (returnValue << 8) | *(startAddr++); - numberOfBits -= 8; - } - - /* Get bits from last byte */ - endShift = 8 - numberOfBits; - returnValue = (returnValue << numberOfBits) | ((startAddr[0] & lsbMask[endShift]) >> endShift); - /* (safe, since lsbMask[8]==0) */ - } - - return returnValue; -show_underflow: - buffer->error = ERR_BIB_NOT_ENOUGH_DATA; - return 0; -} - - -/* -* Local functions -*/ - -/* -* -* bibInitialize -* -* -* Parameters: -* bibBuffer input bit buffer instance -* srcBuffer buffer containing the data -* srcBufferLength the length of the buffer -* errorCode error code -* -* Function: -* This function initializes the values of the bibBuffer structure. -* -* Returns: -* Nothing. -* -* Error codes: -* ERR_BIB_BUFLIST if the internal buffer list has been corrupted -* -*/ - -static void bibInitialize( - bibBuffer_t *bibBuffer, - void *srcBuffer, - unsigned srcBufferLength, - int16 */*errorCode*/) -{ - bibBuffer->baseAddr = (u_char *) srcBuffer; - bibBuffer->size = srcBufferLength; - bibBuffer->getIndex = 0; - bibBuffer->bitIndex = 7; - bibBuffer->bitsLeft = (u_int32) (srcBufferLength<<3); - bibBuffer->numBytesRead = 0; - bibBuffer->error = 0; - - -} - - - -/* -* -* CopyStream -* -* -* Function to copy stream from SrcBuffer to DestBuffer based on settings in bufEdit and ByteStart & BitStart -* -* -*/ - -void CopyStream(bibBuffer_t *SrcBuffer,bibBuffer_t *DestBuffer,bibBufferEdit_t *bufEdit, - int ByteStart, int BitStart) -{ - int32 temp; - unsigned tgetIndex; - int tbitIndex; - u_int32 tbitsLeft; - u_int32 tnumBytesRead; - int tByteStart; - int tBitStart; - - bibEditParams_t *edParam; - - //Add assertions and checks here !! - bibAssert(SrcBuffer->baseAddr); - bibAssert(DestBuffer->baseAddr); - bibAssert(bufEdit); - - //Save the params of SrcBuffer to recover them later: - tgetIndex=SrcBuffer->getIndex; - tbitIndex=SrcBuffer->bitIndex; - tbitsLeft=SrcBuffer->bitsLeft; - tnumBytesRead=SrcBuffer->numBytesRead; - - - - // check to see if we need to change some header parameter - if(bufEdit->copyMode == CopyWithEdit/*CopyWithEdit*/) - { - bibAssert(bufEdit->editParams); - edParam = &(bufEdit->editParams[0]); - - // check if the editing position is in the current range of bit data - temp=((SrcBuffer->getIndex<<3) + (7-SrcBuffer->bitIndex))- - ((edParam->StartByteIndex<<3) + 7-(edParam->StartBitIndex)); - if (temp>=0) // yes, it is - { - // copy upto the editing point - CopyBuffer(SrcBuffer, DestBuffer, ByteStart, BitStart, edParam->StartByteIndex, - edParam->StartBitIndex); - - CopyBufferEdit(SrcBuffer, DestBuffer, &(bufEdit->editParams[0])); - - // store new starting copy position - tByteStart = SrcBuffer->getIndex; - tBitStart = SrcBuffer->bitIndex; - // restore original stop copy position - SrcBuffer->getIndex=tgetIndex; - SrcBuffer->bitIndex=tbitIndex; - SrcBuffer->bitsLeft=tbitsLeft; - SrcBuffer->numBytesRead=tnumBytesRead; - - CopyBuffer(SrcBuffer, DestBuffer, tByteStart, tBitStart, tgetIndex, tbitIndex); - - } - else // no - { - // put panic here ! - return; - } - } - else if (bufEdit->copyMode == CopyWhole/*CopyWhole*/) - { - CopyBuffer(SrcBuffer, DestBuffer, ByteStart, BitStart, - SrcBuffer->getIndex, SrcBuffer->bitIndex); - } - else if (bufEdit->copyMode == EditOnly /*EditOnly*/) - { - CopyBufferEdit(SrcBuffer, DestBuffer, &(bufEdit->editParams[0])); - } - else if(bufEdit->copyMode == CopyNone/*CopyNone*/) - { - return; - } - - - //4- Retrieve the original Srcbuffer params. - // Using getbits it should be equal to where we started - SrcBuffer->getIndex=tgetIndex; - SrcBuffer->bitIndex=tbitIndex; - SrcBuffer->bitsLeft=tbitsLeft; - SrcBuffer->numBytesRead=tnumBytesRead; - - //5- Update the destbuffer statistics: - DestBuffer->getIndex=DestBuffer->numBytesRead; - - DestBuffer->bitsLeft -= (DestBuffer->getIndex<<3); - -} - -/* -* -* CopyBuffer -* -* -* Function to copy data from SrcBuffer to DestBuffer from ByteStart & BitStart to ByteEnd & BitEnd -* -* -*/ - -void CopyBuffer(bibBuffer_t *SrcBuffer,bibBuffer_t *DestBuffer, - int ByteStart,int BitStart, int ByteEnd, int BitEnd) -{ - u_char *DestStartAddr; - u_int32 i; - u_int32 temp; - u_int32 BitsToRewind; - u_int32 BitsToCopy; - u_int32 BytesToCopy; - u_int32 Bytes4ToCopy; - u_int32 BitsRemaining; - int16 errorCode; - u_int32 bitshift; - u_int32 bitstoget; - static const u_char msbMask[8] = {1, 3, 7, 15, 31, 63, 127, 255}; - - DestStartAddr = DestBuffer->baseAddr + DestBuffer->getIndex; - - //Rewind the src buffer to the start address(ByteStart,BitStart) - BitsToRewind=((SrcBuffer->getIndex<<3) + (7-SrcBuffer->bitIndex))- - ((ByteStart<<3) + (7-BitStart)); - bibRewindBits(BitsToRewind,SrcBuffer, &errorCode); - - // evaluate the number of bits to copy - BitsToCopy = ((ByteEnd<<3) + (7-BitEnd))-((ByteStart<<3) + (7-BitStart)); - if (BitsToCopy<=0) - return; - else if (BitsToCopy > BitsToRewind) - BitsToCopy = BitsToRewind; // or else provide a panic here !!! - - //1- Fill the remaining of the byte in destination: - bitshift=0; - bitstoget=0; - if(DestBuffer->bitIndex!=7) - { - bitshift = DestBuffer->bitIndex+1; - bitstoget = ((BitsToCopy < bitshift) ? BitsToCopy : bitshift); - temp = bibGetBits(bitstoget,SrcBuffer); - - // update statistics to take care of bit addition or byte completion - if (BitsToCopy < bitshift) - { - // bits added but byte not completed - *(DestStartAddr)=(unsigned char)((((*DestStartAddr)>>bitshift)<bitIndex -= BitsToCopy; - bibAssert(DestBuffer->bitIndex >= 0) - } - else - { - // byte completed - *(DestStartAddr)=(unsigned char)((((*DestStartAddr)>>bitshift)<<(bitshift)) | - (temp & msbMask[bitshift-1])); - DestStartAddr+=1; - DestBuffer->numBytesRead++; - DestBuffer->bitIndex=7; - } - } - - //2- Extract all bytes (in 8 bits) from src to destination. - //Checks for BytesToCopy. - BytesToCopy=(BitsToCopy-bitstoget)>>3; - if ( BytesToCopy > 0 ) - { - - if ( SrcBuffer->bitIndex == 7 ) - { - // we can copy the data from src in full bytes, utilize faster inline method - // and try to utilize pipelining in the for-loop - // truncate it to 4-byte-boundary - Bytes4ToCopy = BytesToCopy>>2; - for(i=0; i i ) - { - // copy the leftovers - for(;inumBytesRead+=i; - } - else - { - for(i=0;inumBytesRead+=BytesToCopy; - - //3- Fill the last byte: - BitsRemaining=((BitsToCopy-bitstoget))%8; - if(BitsRemaining!=0) - { - temp = bibGetBits(BitsRemaining,SrcBuffer); - *(DestStartAddr++)=(u_char)(temp<<(8-BitsRemaining)); - DestBuffer->bitIndex=7-BitsRemaining; - } - - //5- Update the destbuffer statistics: - DestBuffer->getIndex=DestBuffer->numBytesRead; -} - -/* -* -* CopyBufferEdit -* -* -* Function to copy data with editing from SrcBuffer to DestBuffer with settings in edParam -* -* -*/ - -void CopyBufferEdit(bibBuffer_t *SrcBuffer, bibBuffer_t *DestBuffer, - bibEditParams_t *edParam, int updateSrcBufferStats) -{ - u_char *DestStartAddr; - u_int32 i; - u_int32 temp; - u_int32 BitsToSkip; - u_int32 BitsToEdit; - u_int32 BytesToSkip; - u_int32 BitsRemaining; - u_int32 BytesToEdit; - unsigned bitshift; - unsigned bitstoget; - unsigned bitstomove; - u_int32 StartBitPosition; - static const u_char msbMask[8] = {1, 3, 7, 15, 31, 63, 127, 255}; - - DestStartAddr = DestBuffer->baseAddr + DestBuffer->getIndex; - - // evaluate the number of bits to copy - BitsToEdit = edParam->newNumBits; - StartBitPosition = edParam->newNumBits-1; - - //1- Fill the remaining of the byte in destination: - bitshift=0; - bitstoget=0; - if(DestBuffer->bitIndex!=7) - { - bitshift=DestBuffer->bitIndex+1; - bitstoget = ((BitsToEdit < bitshift) ? BitsToEdit : bitshift); - - temp = bibGetBitsFromWord(edParam->newValue, bitstoget, &StartBitPosition, - edParam->newNumBits); - - // update statistics to take care of bit addition or byte completion - if (BitsToEdit < bitshift) - { - // bits added but byte not completed - *(DestStartAddr)=(unsigned char)((((*DestStartAddr)>>bitshift)<<(bitshift)) | - ((temp << (bitshift-BitsToEdit) ) & msbMask[bitshift-1])); - DestBuffer->bitIndex -= BitsToEdit; - bibAssert(DestBuffer->bitIndex >= 0) - } - else - { - // byte completed - *(DestStartAddr)=(unsigned char)((((*DestStartAddr)>>bitshift)<<(bitshift)) | - (temp & msbMask[bitshift-1])); - DestStartAddr++; - DestBuffer->numBytesRead++; - DestBuffer->bitIndex=7; - } - } - - - //2- Extract all bytes (in 8 bits) from src to destination. - //Checks for BytesToCopy - BytesToEdit=(BitsToEdit-bitstoget)>>3; - for(i=0;inewValue, 8, &StartBitPosition, edParam->newNumBits); - } - DestBuffer->numBytesRead+=BytesToEdit; - - //3- Fill the last byte: - BitsRemaining=((BitsToEdit-bitstoget))%8; - if(BitsRemaining!=0) - { - temp = bibGetBitsFromWord(edParam->newValue, BitsRemaining, &StartBitPosition, - edParam->newNumBits); - *(DestStartAddr++)=(u_char)(temp<<(8-BitsRemaining)); - DestBuffer->bitIndex=7-BitsRemaining; - } - - //5- Update the destbuffer statistics: - DestBuffer->getIndex=DestBuffer->numBytesRead; - - - // update the src buffer statistics to reflect skipping of the value - if(updateSrcBufferStats) - { - BitsToSkip = edParam->curNumBits; - bitshift=0; - bitstomove=0; - if (SrcBuffer->bitIndex!=7) - { - bitshift=SrcBuffer->bitIndex+1; - bitstomove = ((BitsToSkip < bitshift) ? BitsToSkip : bitshift); - // update statistics to take care of bit addition or byte completion - if (BitsToSkip < bitshift) - { - // bits skipped but byte not completed - SrcBuffer->bitIndex -= bitstomove; - bibAssert(SrcBuffer->bitIndex >= 0) - } - else - { - // byte completed - SrcBuffer->numBytesRead++; - SrcBuffer->bitIndex=7; - } - } - // full bytes to skip - BytesToSkip=(BitsToSkip-bitstomove)>>3; - SrcBuffer->numBytesRead+=BytesToSkip; - - // skip the remaining bits - BitsRemaining=((BitsToSkip-bitstomove))%8; - if(BitsRemaining!=0) - { - SrcBuffer->bitIndex=7-BitsRemaining; - } - SrcBuffer->bitsLeft -= BitsToSkip; - SrcBuffer->getIndex=SrcBuffer->numBytesRead; - } -} - -void ResetH263IntraDcUV(bibBuffer_t *DestBuffer, int uValue, int vValue) -{ - bibEditParams_t edParam; - - edParam.curNumBits = edParam.newNumBits = 8; - edParam.StartByteIndex = edParam.StartBitIndex = 0; // used for source buffer only - - // u - edParam.newValue = uValue; - CopyBufferEdit((bibBuffer_t*)NULL, DestBuffer, &edParam, 0); - // v - edParam.newValue = vValue; - CopyBufferEdit((bibBuffer_t*)NULL, DestBuffer, &edParam, 0); -} - -void ResetMPEG4IntraDcUV(bibBuffer_t *DestBuffer, int IntraDC_size) -{ - int i; - bibEditParams_t edParam; - const int DctDcSizeChrominanceNumBits[13] = { 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; - - // u,v - for(i=0; i<2; i++) - { - // change dct dc size chrominance - IntraDC for U.V is 0 (codeword '11') - edParam.curNumBits = DctDcSizeChrominanceNumBits[IntraDC_size]; - edParam.newNumBits = 2; - edParam.StartByteIndex = edParam.StartBitIndex = 0; // used or source buffer only - edParam.newValue = 3; - CopyBufferEdit((bibBuffer_t*)NULL, DestBuffer, &edParam, 0); - } -} - -// assume SrcValue is max 32 bits -u_int32 bibGetBitsFromWord(u_int32 SrcValue, u_int32 getBits, u_int32 *StartBit, - u_int32 MaxNumBits) -{ - int val; - u_int32 bitshift; - static const u_int32 mask[32] = - {0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, - 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, - 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, - 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; - - bibAssert(MaxNumBits <= 32); - bibAssert(*StartBit < MaxNumBits); - bibAssert(getBits-1 <= *StartBit); - bibAssert(getBits > 0); - - bitshift = *StartBit - getBits + 1; - val = (SrcValue>>bitshift) & mask[getBits-1]; - if ( getBits > *StartBit ) - { - // taking the last bits of the word; *StartBit is uint32, so it goes to max uint32 unless this special handling - // other cases asserted already above - *StartBit = 31; - } - else - { - *StartBit -= getBits; - } - - return val; -} - -void bibForwardBits(u_int32 numberOfBits, bibBuffer_t *buffer) -{ - u_int32 BitsToForward; - u_int32 BytesToForward; - u_int32 BitsRemaining; - unsigned bitshift; - unsigned bitstomove; - - BitsToForward = numberOfBits; - bitshift=0; - bitstomove=0; - - bibAssert(buffer != NULL); - - // complete the byte - if (buffer->bitIndex!=7) - { - bitshift=buffer->bitIndex+1; - bitstomove = ((BitsToForward < bitshift) ? BitsToForward : bitshift); - // update statistics to take care of bit addition or byte completion - if (BitsToForward < bitshift) - { - // bits skipped but byte not completed - buffer->bitIndex -= bitstomove; - bibAssert(buffer->bitIndex >= 0) - } - else - { - // byte completed - buffer->numBytesRead++; - buffer->bitIndex=7; - } - } - // full bytes to skip - BytesToForward=(BitsToForward-bitstomove)>>3; - buffer->numBytesRead+=BytesToForward; - - // skip the remaining bits - BitsRemaining=((BitsToForward-bitstomove))%8; - if(BitsRemaining!=0) - { - buffer->bitIndex=7-BitsRemaining; - } - buffer->bitsLeft -= BitsToForward; - buffer->getIndex=buffer->numBytesRead; -} - -void bibStuffBits(bibBuffer_t *buffer) -{ - // the extra bits are already set to zero - bibAssert(buffer->baseAddr); - if(buffer->bitIndex!=7) - { - buffer->bitIndex=7; - buffer->getIndex++; - buffer->numBytesRead++; - } -} - - - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/blcllcpy.cpp --- a/videoeditorengine/h263decoder/src/blcllcpy.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1065 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Block copying functions. -* -*/ - - - - -#include "h263dconfig.h" - - -/* - * - * blcMemSetIncBuf - * - * Parameters: - * void HUGE *buf destination buffer - * int ch input value - * size_t count the number of values to put into the buffer - * - * Function: - * This macro sets count bytes of buf into the low-order byte of ch - * and increases buf by count. - * - * Changes: - * buf - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcMemSetIncBuf(buf, ch, count) \ - MEMSET(buf, ch, count); \ - buf += count - - -/* - * - * blcCopyRowNBC copy a row without border checking - * - * Parameters: - * u_char HUGE *srcMem source row - * u_char HUGE *dstMem destination row - * - * int xlt0 ignored - * int xNormal See blcCopyBlockBC. - * int xgtmax ignored - * - * Function: - * This macro copies a row of pixels and assumes that - * - all pixels are within the image area - * - the pixels are in integer positions - * - * dstMem is increased by xNormal - * srcMem is increased by xNormal - 1 - * - * Changes: - * srcMem - * dstMem - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyRowNBC(srcMem, dstMem, xlt0, xNormal, xgtmax, roundIncNotUsed) \ -{ \ - MEMCPY(dstMem, srcMem, xNormal); \ - dstMem += xNormal; \ - srcMem += xNormal - 1; \ -} - - -/* - * - * blcCopyRowBC copy a row with border checking - * - * Parameters: - * u_char HUGE *srcMem source row - * u_char HUGE *dstMem destination row - * - * int xlt0 See blcCopyBlockBC. - * int xNormal See blcCopyBlockBC. - * int xgtmax See blcCopyBlockBC. - * - * Function: - * This macro copies a row of pixels and assumes that - * - xlt0 pixels are in the left side of the image area and - * - xgtmax pixels are in the right side of the image area and - * - the pixels are in integer positions - * - * dstMem is increased by xlt0 + xNormal + xgtmax - * srcMem is increased by xNormal - 1 if xNormal > 0 - * - * Changes: - * srcMem - * dstMem - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyRowBC(srcMem, dstMem, xlt0, xNormal, xgtmax, roundIncNotUsed) \ -{ \ - if (xlt0) MEMSET(dstMem, *srcMem, xlt0); \ - dstMem += xlt0; \ - if (xNormal) blcCopyRowNBC(srcMem, dstMem, xlt0, xNormal, xgtmax, roundIncNotUsed); \ - if (xgtmax) MEMSET(dstMem, *srcMem, xgtmax); \ - dstMem += xgtmax; \ -} - - -/* - * - * blcCopyRowSubXNBC - * - * Parameters: - * u_char HUGE *srcMem source row - * u_char HUGE *dstMem destination row - * - * int xlt0 ignored - * int xNormal See blcCopyBlockBC. - * int xgtmax ignored - * - * roundInc See blcCopyBlockSub*. - * - * Function: - * This macro copies a row of pixels and assumes that - * - all pixels are within the image area - * - the pixels are in integer pixel position in vertical direction - * - the pixels are in half pixel position in horizontal direction - * - * dstMem is increased by xNormal - * srcMem is increased by xNormal - * - * Changes: - * srcMem - * dstMem - * loopVar - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyRowSubXNBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, roundInc) \ -for (loopVar = xNormal; loopVar; loopVar--, srcMem++) \ - *dstMem++ = (u_char) ((*srcMem + *(srcMem + 1) + roundInc) >> 1) - - -/* - * - * blcCopyRowSubXBC - * - * Parameters: - * u_char HUGE *srcMem source row - * u_char HUGE *dstMem destination row - * - * int xlt0 See blcCopyBlockBC. - * int xNormal See blcCopyBlockBC. - * int xgtmax See blcCopyBlockBC. - * - * roundInc See blcCopyBlockSub*. - * - * Function: - * This macro copies a row of pixels and assumes that - * - xlt0 pixels are in the left side of the image area and - * - xgtmax pixels are in the right side of the image area and - * - the pixels are in integer pixel position in vertical direction - * - the pixels are in half pixel position in horizontal direction - * - * dstMem is increased by xlt0 + xNormal + xgtmax - * srcMem is increased by xlt0 + xNormal + xgtmax - * - * Changes: - * srcMem - * dstMem - * loopVar - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyRowSubXBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, roundInc) \ -{ \ - if (xlt0) \ - blcMemSetIncBuf(dstMem, *srcMem, xlt0); \ - blcCopyRowSubXNBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, roundInc); \ - if (xgtmax) blcMemSetIncBuf(dstMem, *srcMem, xgtmax); \ -} - - -/* - * - * blcCopyRowSubYNBC - * - * Parameters: - * u_char HUGE *srcMem source row - * u_char HUGE *dstMem destination row - * - * int xlt0 ignored - * int xNormal See blcCopyBlockBC. - * int xgtmax ignored - * - * roundInc See blcCopyBlockSub*. - * - * Function: - * This macro copies a row of pixels and assumes that - * - all pixels are within the image area - * - the pixels are in half pixel position in vertical direction - * - the pixels are in integer pixel position in horizontal direction - * - * dstMem is increased by xNormal - * srcMem is increased by xNormal - 1 if xNormal > 0 - * - * Changes: - * srcMem - * dstMem - * loopVar - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyRowSubYNBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, \ - srcXSize, roundInc) \ -{ \ - for (loopVar = xNormal; loopVar; loopVar--, srcMem++) \ - *dstMem++ = (u_char) ((*srcMem + *(srcMem + srcXSize) + roundInc) >> 1); \ - if (xNormal) srcMem--; \ -} - - -/* - * - * blcCopyRowSubYBC - * - * Parameters: - * u_char HUGE *srcMem source row - * u_char HUGE *dstMem destination row - * - * int xlt0 See blcCopyBlockBC. - * int xNormal See blcCopyBlockBC. - * int xgtmax See blcCopyBlockBC. - * - * roundInc See blcCopyBlockSub*. - * - * Function: - * This macro copies a row of pixels and assumes that - * - xlt0 pixels are in the left side of the image area and - * - xgtmax pixels are in the right side of the image area and - * - the pixels are in half pixel position in vertical direction - * - the pixels are in integer pixel position in horizontal direction - * - * dstMem is increased by xlt0 + xNormal + xgtmax - * srcMem is increased by xNormal - 1 if xNormal > 0 - * - * Changes: - * srcMem - * dstMem - * loopVar - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyRowSubYBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, \ - srcXSize, roundInc) \ -{ \ - if (xlt0) { \ - *dstMem++ = (u_char) ((*srcMem + *(srcMem + srcXSize) + roundInc) >> 1); \ - if (xlt0 > 1) blcMemSetIncBuf(dstMem, *(dstMem - 1), xlt0 - 1); \ - } \ - blcCopyRowSubYNBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, \ - srcXSize, roundInc); \ - if (xgtmax) { \ - if (xNormal) { \ - blcMemSetIncBuf(dstMem, *(dstMem - 1), xgtmax); \ - } \ - else { \ - *dstMem++ = (u_char) ((*srcMem + *(srcMem + srcXSize) + roundInc) >> 1); \ - if (xgtmax > 1) blcMemSetIncBuf(dstMem, *(dstMem - 1), xgtmax - 1); \ - } \ - } \ -} - - -/* - * - * blcCopyRowSubXYNBC - * - * Parameters: - * u_char HUGE *srcMem source row - * u_char HUGE *dstMem destination row - * - * int xlt0 ignored - * int xNormal See blcCopyBlockBC. - * int xgtmax ignored - * - * roundInc See blcCopyBlockSub*. - * - * Function: - * This macro copies a row of pixels and assumes that - * - all pixels are within the image area - * - the pixels are in half pixel position in vertical direction - * - the pixels are in half pixel position in horizontal direction - * - * dstMem is increased by xNormal - * srcMem is increased by xNormal - * - * Changes: - * srcMem - * dstMem - * loopVar - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyRowSubXYNBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, \ - srcXSize, roundInc) \ -for (loopVar = xNormal; loopVar; loopVar--, srcMem++) \ - *dstMem++ = (u_char) ((*srcMem + *(srcMem + 1) + *(srcMem + srcXSize) + \ - *(srcMem + srcXSize + 1) + roundInc) >> 2) - - -/* - * - * blcCopyOutPicXPixelSubXYRoundInc1 - * blcCopyOutPicXPixelSubXYRoundInc2 - * - * Parameters: - * u_char HUGE *srcMem source row - * u_char HUGE *dstMem destination row - * srcXSize number of pixels (bytes) in source row - * - * Function: - * These macros copy one pixel which lies horizontally outside the picture - * area assuming that - * - the pixels are in half pixel position in vertical direction - * - the pixels are in half pixel position in horizontal direction - * - * If roundInc is 2, the macro takes advantage of the fact that - * (A + B + C + D + roundInc) / 4 = (A + A + C + C + 2) / 4 = - * (A + C + 1) / 2 - * when using the notation of section 6.1.2 of the H.263 recommendation. - * - * dstMem is increased by 1 - * - * Changes: - * dstMem - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyOutPicXPixelSubXYRoundInc2(srcMem, dstMem, srcXSize) \ - *dstMem++ = (u_char) ((*srcMem + *(srcMem + srcXSize) + 1) >> 1) - -#define blcCopyOutPicXPixelSubXYRoundInc1(srcMem, dstMem, srcXSize) \ - *dstMem++ = (u_char) ((((*srcMem) << 1) + ((*(srcMem + srcXSize)) << 1) + 1) >> 2) - - -/* - * - * blcCopyRowSubXYBC - * - * Parameters: - * u_char HUGE *srcMem source row - * u_char HUGE *dstMem destination row - * - * int xlt0 ignored - * int xNormal See blcCopyBlockBC. - * int xgtmax ignored - * - * roundInc See blcCopyBlockSub*. - * - * Function: - * This macro copies a row of pixels and assumes that - * - xlt0 pixels are in the left side of the image area and - * - xgtmax pixels are in the right side of the image area and - * - the pixels are in half pixel position in vertical direction - * - the pixels are in half pixel position in horizontal direction - * - * dstMem is increased by xNormal - * srcMem is increased by xNormal - * - * Changes: - * srcMem - * dstMem - * loopVar - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyRowSubXYBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, \ - srcXSize, roundInc) \ -{ \ - if (xlt0) { \ - blcCopyOutPicXPixelSubXYRoundInc ## roundInc(srcMem, dstMem, srcXSize); \ - if (xlt0 > 1) blcMemSetIncBuf(dstMem, *(dstMem - 1), xlt0 - 1); \ - } \ - blcCopyRowSubXYNBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, \ - srcXSize, roundInc); \ - if (xgtmax) { \ - blcCopyOutPicXPixelSubXYRoundInc ## roundInc(srcMem, dstMem, srcXSize); \ - if (xgtmax > 1) blcMemSetIncBuf(dstMem, *(dstMem - 1), xgtmax - 1); \ - } \ -} - - -/* - * - * blcCopyOutPicRowSubXYRoundInc1 - * blcCopyOutPicRowSubXYRoundInc2 - * - * Parameters: - * u_char HUGE *srcMem source row - * u_char HUGE *dstMem destination row - * srcXSize number of pixels (bytes) in source row - * - * Function: - * These macros copy one row which lies vertically outside the picture - * area assuming that - * - the pixels are in half pixel position in vertical direction - * - the pixels are in half pixel position in horizontal direction - * - * If roundInc is 2, the macro takes advantage of the fact that - * (A + B + C + D + roundInc) / 4 = (A + A + B + B + 2) / 4 = - * (A + B + 1) / 2 - * when using the notation of section 6.1.2 of the H.263 recommendation. - * - * Changes: - * srcMem - * dstMem - * loopVar - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyOutPicRowSubXYRoundInc2(borderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, loopVar, srcXSize) \ - blcCopyRowSubX ## borderCheck(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, 1) - -#define blcCopyOutPicRowSubXYRoundInc1NBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, srcXSize) \ - for (loopVar = xNormal; loopVar; loopVar--, srcMem++) \ - *dstMem++ = (u_char) ((((*srcMem) << 1) + ((*(srcMem + 1)) << 1) + 1) >> 2) - -#define blcCopyOutPicRowSubXYRoundInc1BC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, srcXSize) \ -{ \ - if (xlt0) {\ - blcMemSetIncBuf(dstMem, *(srcMem), xlt0); \ - } \ - blcCopyOutPicRowSubXYRoundInc1NBC(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar, srcXSize); \ - if (xgtmax) { \ - blcMemSetIncBuf(dstMem, *(srcMem), xgtmax); \ - } \ -} - -#define blcCopyOutPicRowSubXYRoundInc1(borderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, loopVar, srcXSize) \ - blcCopyOutPicRowSubXYRoundInc1 ## borderCheck(srcMem, dstMem, \ - xlt0, xNormal, xgtmax, loopVar, srcXSize) - - -/* - * - * Integer pixel position (x and y picture boundary checks respectively): - * blcCopyBlockNoSubNBCBC - * blcCopyBlockNoSubBCNBC - * blcCopyBlockNoSubNBCNBC - * blcCopyBlockNoSubBCBC - * - * Half pixel position in horizontal direction: - * blcCopyBlockSubXNBC - * blcCopyBlockSubXBC - * - * Half pixel position in vertical direction: - * blcCopyBlockSubYNBC - * blcCopyBlockSubYBC - * - * Half pixel position in horizontal and vertical direction: - * blcCopyBlockSubXYNBC - * blcCopyBlockSubXYBC - * - * NBC means that all pixels are within the vertical range of the image area. - * BC means that ylt0 pixels are above the image area and ygtmax pixels are - * below the image area. - * - * Parameters: - * Note that some parameters are not included into every macro. - * - * routineName corresponding row copying macro name - * - * u_char HUGE *srcMem source block - * u_char HUGE *dstMem destination block - * - * int xlt0 See blcCopyBlockBC. - * int xNormal See blcCopyBlockBC. - * int xgtmax See blcCopyBlockBC. - * - * int ylt0 See blcCopyBlockBC. - * int yNormal See blcCopyBlockBC. - * int ygtmax See blcCopyBlockBC. - * - * loopVar1, loopVar2 loop variables - * - * srcXSize the horizontal size of the source image - * dstXSize the horizontal size of the destination image - * blkXSize the horizontal size of the block to be copied, - * should be equal to xlt0 + xNormal + xgtmax - * - * srcInc increment to srcMem (after row copying) - * to get the next row - * dstInc increment to dstMem (after row copying) - * to get the next row - * - * roundInc for subpixel functions only: - * for interpolation in X or Y directions: - * roundInc = 1 - RCONTROL, i.e. - * 1 if RCONTROL == 0, - * 0 if RCONTROL == 1, - * for interpolation in X and Y directions: - * roundInc = 2 - RCONTROL, i.e. - * 2 if RCONTROL == 0, - * 1 if RCONTROL == 1 - * - * Function: - * These macros copy a block of pixels. - * - * Changes: - * srcMem - * dstMem - * loopVar1 - * loopVar2 - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - - -#define blcCopyBlockNoSubNBC(routineName, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc) \ -for (loopVar1 = yNormal; loopVar1; loopVar1--) { \ - routineName(srcMem, dstMem, xlt0, xNormal, xgtmax, 0); \ - srcMem += srcInc; \ - dstMem += dstInc; \ -} - -#define blcCopyBlockNoSubNBCBC(routineName, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc) \ -blcCopyBlockNoSubNBC(routineName, srcMem, dstMem, xlt0, xNormal, xgtmax, \ - ylt0, yNormal, ygtmax, loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, \ - srcInc, dstInc) - -#define blcCopyBlockNoSubBCNBC(routineName, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc) \ -{ \ - if (ylt0) { \ - for (loopVar2 = ylt0; loopVar2; loopVar2--, dstMem += dstXSize) \ - MEMCPY(dstMem, srcMem, blkXSize); \ - } \ -\ - blcCopyBlockNoSubNBC(routineName, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc); \ -\ - if (ygtmax) { \ - if (yNormal) srcMem -= srcXSize; \ - for (loopVar2 = ygtmax; loopVar2; loopVar2--, dstMem += dstXSize) \ - MEMCPY(dstMem, srcMem, blkXSize); \ - } \ -} - -#define blcCopyBlockNoSubNBCNBC(routineName, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc) \ -for (loopVar1 = yNormal; loopVar1; loopVar1--) { \ - MEMCPY(dstMem, srcMem, xNormal); \ - dstMem += dstXSize; \ - srcMem += srcXSize; \ -} - -#define blcCopyBlockNoSubBCBC(routineName, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc) \ -{ \ - if (ylt0) { \ - routineName(srcMem, dstMem, xlt0, xNormal, xgtmax, 0); \ - dstMem += dstInc; \ - for (loopVar2 = ylt0 - 1; loopVar2; loopVar2--, dstMem += dstXSize) \ - MEMCPY(dstMem, dstMem - dstXSize, blkXSize); \ - if (xNormal) srcMem -= (xNormal - 1); \ - } \ -\ - blcCopyBlockNoSubNBC(routineName, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc); \ -\ - if (ygtmax) { \ - if (yNormal) srcMem -= srcXSize; \ - routineName(srcMem, dstMem, xlt0, xNormal, xgtmax, 0); \ - dstMem += dstInc; \ - for (loopVar2 = ygtmax - 1; loopVar2; loopVar2--, dstMem += dstXSize) \ - MEMCPY(dstMem, dstMem - dstXSize, blkXSize); \ - } \ -} - -#define blcCopyBlockSubXNBC(routineName, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, dstXSize, blkXSize, srcInc, dstInc, roundInc) \ -for (loopVar1 = yNormal; loopVar1; loopVar1--) { \ - routineName(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar2, roundInc); \ - srcMem += srcInc; \ - dstMem += dstInc; \ -} - -#define blcCopyBlockSubXBC(routineName, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, dstXSize, blkXSize, srcInc, dstInc, roundInc) \ -{ \ - if (ylt0) { \ - routineName(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar2, roundInc); \ - dstMem += dstInc; \ - for (loopVar2 = ylt0 - 1; loopVar2; loopVar2--, dstMem += dstXSize) \ - MEMCPY(dstMem, dstMem - dstXSize, blkXSize); \ - srcMem -= xNormal; \ - } \ -\ - blcCopyBlockSubXNBC(routineName, srcMem, dstMem, xlt0, xNormal, xgtmax, \ - ylt0, yNormal, ygtmax, loopVar1, loopVar2, dstXSize, blkXSize, \ - srcInc, dstInc, roundInc); \ -\ - if (ygtmax) { \ - if (!yNormal) { \ - routineName(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar2, roundInc); \ - dstMem += dstInc; \ - } \ - for (loopVar2 = ygtmax - !yNormal; loopVar2; loopVar2--, \ - dstMem += dstXSize) \ - MEMCPY(dstMem, dstMem - dstXSize, blkXSize); \ - } \ -} - -#define blcCopyBlockSubYNBC(routineName, yoffRoutine, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc, roundInc) \ -for (loopVar1 = yNormal; loopVar1; loopVar1--) { \ - routineName(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar2, srcXSize, roundInc); \ - srcMem += srcInc; \ - dstMem += dstInc; \ -} \ - -#define blcCopyBlockSubYBC(normRoutine, yoffRoutine, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc, roundInc) \ -{ \ - if (ylt0) { \ - yoffRoutine(srcMem, dstMem, xlt0, xNormal, xgtmax, roundInc); \ - dstMem += dstInc; \ - for (loopVar2 = ylt0 - 1; loopVar2; loopVar2--, dstMem += dstXSize) \ - MEMCPY(dstMem, dstMem - dstXSize, blkXSize); \ - if (xNormal) srcMem -= (xNormal - 1); \ - } \ -\ - blcCopyBlockSubYNBC(normRoutine, yoffRoutine, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc, roundInc); \ -\ - if (ygtmax) { \ - yoffRoutine(srcMem, dstMem, xlt0, xNormal, xgtmax, roundInc); \ - dstMem += dstInc; \ - for (loopVar2 = ygtmax - 1; loopVar2; loopVar2--, dstMem += dstXSize) \ - MEMCPY(dstMem, dstMem - dstXSize, blkXSize); \ - } \ -} - -#define blcCopyBlockSubXYNBC(routineName, notUsed, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc, roundInc) \ -for (loopVar1 = yNormal; loopVar1; loopVar1--) { \ - routineName(srcMem, dstMem, xlt0, xNormal, xgtmax, loopVar2, \ - srcXSize, roundInc); \ - srcMem += srcInc; \ - dstMem += dstInc; \ -} \ - -#define blcCopyBlockSubXYBC(normRoutine, xoffBorderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc, roundInc) \ -{ \ - if (ylt0) { \ - blcCopyOutPicRowSubXYRoundInc ## roundInc(xoffBorderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, loopVar2, srcXSize); \ - dstMem += dstInc; \ - for (loopVar2 = ylt0 - 1; loopVar2; loopVar2--, dstMem += dstXSize) \ - MEMCPY(dstMem, dstMem - dstXSize, blkXSize); \ - srcMem -= xNormal; \ - } \ -\ - blcCopyBlockSubXYNBC(normRoutine, yoffRoutine, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc, roundInc); \ -\ - if (ygtmax) { \ - blcCopyOutPicRowSubXYRoundInc ## roundInc(xoffBorderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, loopVar2, srcXSize); \ - dstMem += dstInc; \ - for (loopVar2 = ygtmax - 1; loopVar2; loopVar2--, dstMem += dstXSize) \ - MEMCPY(dstMem, dstMem - dstXSize, blkXSize); \ - } \ -} - - -/* - * - * blcCopyBlockBCVar - * - * Parameters: - * xoffBorderCheck NBC if all the pixels of the block are within - * the horizontal range of the image area - * BC otherwise - * yoffBorderCheck NBC if all the pixels of the block are within - * the vertical range of the image area - * BC otherwise - * - * u_char HUGE *srcMem source block - * u_char HUGE *dstMem destination block - * - * int xlt0 See blcCopyBlockBC. - * int xNormal See blcCopyBlockBC. - * int xgtmax See blcCopyBlockBC. - * int ylt0 See blcCopyBlockBC. - * int yNormal See blcCopyBlockBC. - * int ygtmax See blcCopyBlockBC. - * int subpixelX See blcCopyBlockBC. - * int subpixelY See blcCopyBlockBC. - * - * loopVar1, loopVar2 loop variables - * - * srcXSize the horizontal size of the source image - * dstXSize the horizontal size of the destination image - * - * blkXSize the horizontal size of the block to be copied, - * should be equal to xlt0 + xNormal + xgtmax - * blkYSize the vertical size of the block to be copied, - * should be equal to ylt0 + yNormal + ygtmax - * - * dstInc increment to dstMem (after row copying) - * to get the next row - * - * rcontrol See blcCopyBlockBC. - * - * Function: - * This macro copies a block with appropriate image border crossing - * checkings. - * - * Changes: - * srcMem - * dstMem - * loopVar1 - * loopVar2 - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -#define blcCopyBlockBCVar(xoffBorderCheck, yoffBorderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, \ - rcontrol) \ -{ \ - if (subpixelX) { \ - if (subpixelY) { \ - int srcInc = srcXSize - xNormal; \ - if (rcontrol) { \ - blcCopyBlockSubXY ## yoffBorderCheck( \ - blcCopyRowSubXY ## xoffBorderCheck, \ - xoffBorderCheck, srcMem, \ - dstMem, xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc, 1); \ - } \ - else { \ - blcCopyBlockSubXY ## yoffBorderCheck( \ - blcCopyRowSubXY ## xoffBorderCheck, \ - xoffBorderCheck, srcMem, \ - dstMem, xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc, 2); \ - } \ - } \ - else /* !subPixelY */ { \ - int srcInc = srcXSize - xNormal; \ - if (rcontrol) { \ - blcCopyBlockSubX ## yoffBorderCheck( \ - blcCopyRowSubX ## xoffBorderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, dstXSize, blkXSize, srcInc, dstInc, 0) \ - } \ - else { \ - blcCopyBlockSubX ## yoffBorderCheck( \ - blcCopyRowSubX ## xoffBorderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, dstXSize, blkXSize, srcInc, dstInc, 1) \ - } \ - } \ - } \ -\ - else /* !subpixelX */ { \ - if (subpixelY) { \ - int srcInc = srcXSize - xNormal + ((xNormal) ? 1 : 0); \ - if (rcontrol) { \ - blcCopyBlockSubY ## yoffBorderCheck( \ - blcCopyRowSubY ## xoffBorderCheck, \ - blcCopyRow ## yoffBorderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc, 0); \ - } \ - else { \ - blcCopyBlockSubY ## yoffBorderCheck( \ - blcCopyRowSubY ## xoffBorderCheck, \ - blcCopyRow ## yoffBorderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc, 1); \ - } \ - } \ - else /* !subpixelY */ { \ - int srcInc = srcXSize - xNormal + ((xNormal) ? 1 : 0); \ - blcCopyBlockNoSub ## yoffBorderCheck ## xoffBorderCheck ( \ - blcCopyRow ## xoffBorderCheck, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, \ - loopVar1, loopVar2, srcXSize, dstXSize, blkXSize, srcInc, dstInc); \ - } \ - } \ -} - - -/* - * - * blcCopyBlockBC - * blcCopyBlockNBC - * - * Parameters: - * u_char HUGE *srcMem source block - * u_char HUGE *dstMem destination block - * - * The next parameters describe a row of source pixels. - * int xlt0 the number of the source pixels in the left of - * the image area - * int xNormal the number of the source pixels within the image - * area - * int xgtmax the number of the source pixels in the right of - * the image area - * - * The next parameters describe a column of source pixels. - * int ylt0 the number of the source pixels above the image area - * int yNormal the number of the source pixels withing the image - * area - * int ygtmax the number of the source pixels below the image area - * - * int subpixelX 1 if source pixels are in half pixel position in - * horizontal direction, 0 otherwise - * int subpixelY 1 if source pixels are in half pixel position in - * vertical direction, 0 otherwise - * - * srcXSize the horizontal size of the source image - * dstXSize the horizontal size of the destination image - * - * blkXSize the horizontal size of the block to be copied, - * should be equal to xlt0 + xNormal + xgtmax - * blkYSize the vertical size of the block to be copied, - * should be equal to ylt0 + yNormal + ygtmax - * rcontrol 0 or 1, RCONTROL as in section 6.1.2. of H.263 - * version 2 - * - * Function: - * blcCopyBlockBC macro copies a block according to unrestricted motion - * vector mode, i.e. it checks if the motion vector points outside the - * image area, i.e. xlt0, xgtmax, ylt0 or ygtmax != 0. - * blcCopyBlockNBC macro copies a block assuming that the whole block is - * inside the image area. blcCopyBlockNBC is used in normal prediction - * mode (no options are used). - * - * Changes: - * srcMem - * dstMem - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -/*#define BLC_COPY_BLOCK_MACROS*/ -#ifdef BLC_COPY_BLOCK_MACROS -#define blcCopyBlockBC(srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, \ - srcXSize, dstXSize, blkXSize, blkYSize, rcontrol) \ -{ \ - int \ - dstInc = dstXSize - blkXSize, \ - i, j; \ -\ - if (xNormal == blkXSize) { \ - if (yNormal == blkYSize) { \ - blcCopyBlockBCVar(NBC, NBC, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, \ - j, i, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, rcontrol); \ - } \ - else { \ - blcCopyBlockBCVar(NBC, BC, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, \ - j, i, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, rcontrol); \ - } \ - } \ - else { \ - if (yNormal == blkYSize) { \ - blcCopyBlockBCVar(BC, NBC, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, \ - j, i, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, rcontrol); \ - } \ - else { \ - blcCopyBlockBCVar(BC, BC, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, \ - j, i, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, rcontrol); \ - } \ - } \ -} - -#define blcCopyBlockNBC(srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, \ - srcXSize, dstXSize, blkXSize, blkYSize, rcontrol) \ -{ \ - int \ - dstInc = dstXSize - blkXSize, \ - i, j; \ -\ - blcCopyBlockBCVar(NBC, NBC, srcMem, dstMem, \ - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, \ - j, i, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, rcontrol); \ -} - -#else -static void blcCopyBlockBC(u_char HUGE *srcMem, u_char HUGE *dstMem, - int xlt0, int xNormal, int xgtmax, int ylt0, int yNormal, int ygtmax, - int subpixelX, int subpixelY, - int srcXSize, int dstXSize, int blkXSize, int blkYSize, int rcontrol) -{ - int - dstInc = dstXSize - blkXSize, - i, j; - - if (xNormal == blkXSize) { - if (yNormal == blkYSize) { - blcCopyBlockBCVar(NBC, NBC, srcMem, dstMem, - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, - j, i, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, rcontrol); - } - else { - blcCopyBlockBCVar(NBC, BC, srcMem, dstMem, - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, - j, i, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, rcontrol); - } - } - else { - if (yNormal == blkYSize) { - blcCopyBlockBCVar(BC, NBC, srcMem, dstMem, - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, - j, i, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, rcontrol); - } - else { - blcCopyBlockBCVar(BC, BC, srcMem, dstMem, - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, - j, i, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, rcontrol); - } - } -} - -static void blcCopyBlockNBC(u_char HUGE *srcMem, u_char HUGE *dstMem, - int xlt0, int xNormal, int xgtmax, int ylt0, int yNormal, int ygtmax, - int subpixelX, int subpixelY, - int srcXSize, int dstXSize, int blkXSize, int blkYSize, int rcontrol) -{ - int - dstInc = dstXSize - blkXSize, - i, j; - - blcCopyBlockBCVar(NBC, NBC, srcMem, dstMem, - xlt0, xNormal, xgtmax, ylt0, yNormal, ygtmax, subpixelX, subpixelY, - j, i, srcXSize, dstXSize, blkXSize, blkYSize, dstInc, rcontrol); -} -#endif - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/block.cpp --- a/videoeditorengine/h263decoder/src/block.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1094 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Motion compensation functions. -* -*/ - - -#include "h263dConfig.h" - -#include "block.h" - -#include "errcodes.h" -#include "vdcmvc.h" -#include "debug.h" - -#ifndef blcAssert - #define blcAssert assert -#endif -#include "blcllcpy.cpp" - -/* See the description above. */ -typedef void (* blcCopyBlock_t) (u_char *, u_char *, - int, int, int, int, int, int, int, int, int, int, int, int, int); - -/* This structure is used to pass a pointer either to blcUVCountRefXY1MV or - blcUVCountRefXY4MVs. */ -typedef void (* blcUVCountRefXY_t) - (int, int, int *, int *, int *, int *, int *, int *); - - -/* - * Local function prototypes - */ - -static int blcCopyNormalYPredictionMBWith1MV( - blcCopyBlock_t copyBlock, - int *mvxArray, int *mvyArray, - u_char *dstYBlk, - u_char *srcYFrame, - int dstYXPos, int dstYYPos, - int dstYXSize, - int srcYXSize, int srcYYSize, - int fMVsOverPictureBoundaries, - int rcontrol); - -static int blcCopyNormalYPredictionMBWith4MVs( - blcCopyBlock_t copyBlock, - int *mvxArray, int *mvyArray, - u_char *dstYBlk, - u_char *srcYFrame, - int dstYXPos, int dstYYPos, - int dstYXSize, - int srcYXSize, int srcYYSize, - int fMVsOverPictureBoundaries, - int rcontrol); - -static int blcCopyUVPredictionBlocks( - blcUVCountRefXY_t uvCountSourceXY, - blcCopyBlock_t copyBlock, - int *mvxArray, int *mvyArray, - u_char *dstUBlk, u_char *dstVBlk, - u_char *srcUFrame, u_char *srcVFrame, - int dstUVXPos, int dstUVYPos, - int dstUVXSize, - int srcUVXSize, int srcUVYSize, - int fMVsOverPictureBoundaries, - int rcontrol); - -static void blcHandleRefOverPictBoundariesBC( - int xBlkSize, int yBlkSize, - int xSize, int ySize, - int subpixelX, int subpixelY, - int *sourceX, int *sourceY, - int *xlt0, int *xNormal, int *xgtmax, - int *ylt0, int *yNormal, int *ygtmax); - -static int blcIsRefOverPictBoundaries( - int xBlkSize, int yBlkSize, - int xSize, int ySize, - int subpixelX, int subpixelY, - int sourceX, int sourceY); - -static void blcUVCountMVOffset4MVs( - int *mvxArray, int *mvyArray, - int *offsetX, int *offsetY, - int *subpixelX, int *subpixelY); - -static void blcUVCountRefXY1MV( - int origoX, int origoY, - int *mvxArray, int *mvyArray, - int *sourceX, int *sourceY, - int *subpixelX, int *subpixelY); - -static void blcUVCountRefXY4MVs( - int origoX, int origoY, - int *mvxArray, int *mvyArray, - int *sourceX, int *sourceY, - int *subpixelX, int *subpixelY); - -static void blcYCountRefXY( - int mvxVal, int mvyVal, - int destX, int destY, - int *sourceX, int *sourceY, - int *subpixelX, int *subpixelY); - - -/* - * Module-scope constants - */ - -/* Clipping table to sature values to range 0..255 */ -static const u_char wholeClippingTable[4*256] = { - 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255}; - -static const u_char * const clippingTable = &wholeClippingTable[512]; - - -/* - * Global functions - */ - -/* {{-output"blcAddBlock.txt"}} */ -/* - * blcAddBlock - * - * - * Parameters: - * block block array (of 64 pixels) - * dstBlk pointer to present frame in the place, - * where the block is added - * xSize X size of the frame. - * mbPlace flag that indicates the place for the current - * macroblock inside the macroblock row: - * -1 beginning of row - * 0 middle of row - * 1 end of row - * fourMVs 1 if Advanced Prediction Mode is used, otherwise 0 - * prevDiffBlock if fourMVs == 1 and mbPlace <= 0 the difference - * block is stored to prevDiffBlock for later use - * - * Function: - * This function sums the given block into block being currently decoded in - * present frame. Parameters are the table consisting a block, a pointer to - * the frame at the correct place and the width of the frame. - * - * Returns: - * Nothing. - * - */ - -void blcAddBlock(int *block, u_char *dstBlk, int xSize, - int mbPlace, u_char fourMVs, int *prevDiffBlock) -/* {{-output"blcAddBlock.txt"}} */ -{ - int i; - - if (fourMVs && mbPlace <= 0) { - MEMCPY(prevDiffBlock, block, 64 * sizeof(int)); - } - else { - for(i = 8; i; i--) { - *dstBlk++ = clippingTable[*dstBlk + *block++]; - *dstBlk++ = clippingTable[*dstBlk + *block++]; - *dstBlk++ = clippingTable[*dstBlk + *block++]; - *dstBlk++ = clippingTable[*dstBlk + *block++]; - *dstBlk++ = clippingTable[*dstBlk + *block++]; - *dstBlk++ = clippingTable[*dstBlk + *block++]; - *dstBlk++ = clippingTable[*dstBlk + *block++]; - *dstBlk++ = clippingTable[*dstBlk + *block++]; - dstBlk += xSize - 8; - } - } -} - - -/* {{-output"blcBlockToFrame.txt"}} */ -/* - * blcBlockToFrame - * - * - * Parameters: - * block block array (of 64 pixels) - * dstBlk pointer to present frame in the place, where the block is - * written - * xSize X size of the frame. - * - * Function: - * This function writes the given block into block being currently decoded - * in present frame. Parameters are the table consisting a block, a pointer - * to the frame at the correct place and the width of the frame. - * - * Returns: - * Nothing. - * - */ - -void blcBlockToFrame(int *block, u_char *dstBlk, int xSize) -/* {{-output"blcBlockToFrame.txt"}} */ -{ - int i; - - for( i = 0; i < 8; i++ ) - { - *dstBlk = clippingTable[ *block ]; - *(dstBlk+1) = clippingTable[ *(block+1) ]; - *(dstBlk+2) = clippingTable[ *(block+2) ]; - *(dstBlk+3) = clippingTable[ *(block+3) ]; - *(dstBlk+4) = clippingTable[ *(block+4) ]; - *(dstBlk+5) = clippingTable[ *(block+5) ]; - *(dstBlk+6) = clippingTable[ *(block+6) ]; - *(dstBlk+7) = clippingTable[ *(block+7) ]; - dstBlk += xSize; - block += 8; - } -} - - -/* {{-output"blcCopyPredictionMB.txt"}} */ -/* - * blcCopyPredictionMB - * - * - * Parameters: - * param input and output parameters - * - * Function: - * This function copies one macroblock from previous frame into present - * frame at the location of macroblock being currently decoded. - * The location where the macroblock is read is the location of - * the current block changed with motion vectors. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int blcCopyPredictionMB(blcCopyPredictionMBParam_t *param) -/* {{-output"blcCopyPredictionMB.txt"}} */ -{ - int - uvWidth = param->uvWidth, - uvHeight = param->uvHeight, - yWidth = uvWidth * 2, - yHeight = uvHeight * 2, - uvDstX = param->uvBlkXCoord, - uvDstY = param->uvBlkYCoord, - yDstX = uvDstX * 2, - yDstY = uvDstY * 2, - *mvx = param->mvx, - *mvy = param->mvy, - status; - - u_char - *dstYBlk = param->currYMBInFrame, - *dstUBlk = param->currUBlkInFrame, - *dstVBlk = param->currVBlkInFrame, - *srcYFrame = param->refY, - *srcUFrame = param->refU, - *srcVFrame = param->refV; - - blcCopyBlock_t copyBlock = (param->fMVsOverPictureBoundaries) ? - blcCopyBlockBC : blcCopyBlockNBC; - - blcAssert(param != NULL); - blcAssert(param->rcontrol == 0 || param->rcontrol == 1); - - /* Copy UV prediction blocks */ - status = blcCopyUVPredictionBlocks( - (param->fourMVs) ? - blcUVCountRefXY4MVs : blcUVCountRefXY1MV, - copyBlock, - mvx, mvy, - dstUBlk, dstVBlk, - srcUFrame, srcVFrame, - uvDstX, uvDstY, - uvWidth, - uvWidth, uvHeight, - param->fMVsOverPictureBoundaries, - param->rcontrol); - - if (status < 0) - return status; - - /* If Advanced Prediction is in use */ - if (param->fAdvancedPrediction) { - - // not supported - - } - - /* Else normal prediction mode is in use */ - else { - - /* Copy Y prediction MB */ - if(param->fourMVs) - status = blcCopyNormalYPredictionMBWith4MVs( - copyBlock, - mvx, mvy, - dstYBlk, - srcYFrame, - yDstX, yDstY, - yWidth, - yWidth, yHeight, - param->fMVsOverPictureBoundaries, - param->rcontrol); - else - status = blcCopyNormalYPredictionMBWith1MV( - copyBlock, - mvx, mvy, - dstYBlk, - srcYFrame, - yDstX, yDstY, - yWidth, - yWidth, yHeight, - param->fMVsOverPictureBoundaries, - param->rcontrol); - if (status < 0) - return status; - } - - return 0; -} - - - - - -/* - * Local functions - */ - - - - - -/* - * blcCopyNormalYPredictionMBWith1MV - * - * - * Parameters: - * copyBlock a pointer to either blcCopyBlockBC or - * blcCopyBlockNBC (or their Assembler versions) - * - * mvxArray an array of four for x component of MVs - * mvyArray an array of four for y component of MVs - * (Only the first entry of the array is used.) - * - * dstYBlk a pointer to the current Y macroblock - * in the destination Y frame - * - * srcYFrame the top-left corner of the source Y frame - * - * dstYXPos the x coordinate of dstYBlk (in pixels) - * dstYYPos the y coordinate of dstYBlk (in pixels) - * - * dstYXSize the width of the Y destination frame - * srcYXSize the width of the Y source frame - * srcYYSize the height of the Y source frame - * - * fMVsOverPictureBoundaries non-zero if motion vectors may point outside - * picture boundaries, zero otherwise - * - * rcontrol RCONTROL (section 6.1.2 of the H.263 standard) - * - * Function: - * This function copies a luminance prediction macroblock from the given - * source frame to the given position of the destination frame. - * The prediction macroblock is associated with one motion vector. - * - * Returns: - * >= 0 if everything is ok - * < 0 if an error occured - * - */ - -static int blcCopyNormalYPredictionMBWith1MV( - blcCopyBlock_t copyBlock, - int *mvxArray, int *mvyArray, - u_char *dstYBlk, - u_char *srcYFrame, - int dstYXPos, int dstYYPos, - int dstYXSize, - int srcYXSize, int srcYYSize, - int fMVsOverPictureBoundaries, - int rcontrol) -{ - int - mvxVal = *mvxArray, mvyVal = *mvyArray, - subpixelX, subpixelY, - xlt0, xNormal, xgtmax, - ylt0, yNormal, ygtmax, - srcXPos, srcYPos; - u_char *srcBlk; - - blcYCountRefXY(mvxVal, mvyVal, dstYXPos, dstYYPos, &srcXPos, &srcYPos, - &subpixelX, &subpixelY); - - if (fMVsOverPictureBoundaries) - blcHandleRefOverPictBoundariesBC( - 16, 16, - srcYXSize, srcYYSize, - subpixelX, subpixelY, - &srcXPos, &srcYPos, - &xlt0, &xNormal, &xgtmax, - &ylt0, &yNormal, &ygtmax); - - else { - if (blcIsRefOverPictBoundaries( - 16, 16, - srcYXSize, srcYYSize, - subpixelX, subpixelY, - srcXPos, srcYPos)) - return -1; - xlt0 = xgtmax = ylt0 = ygtmax = 0; - xNormal = yNormal = 16; - } - - srcBlk = srcYFrame + srcYPos * srcYXSize + srcXPos; - - copyBlock(srcBlk, dstYBlk, xlt0, xNormal, xgtmax, - ylt0, yNormal, ygtmax, subpixelX, subpixelY, - srcYXSize, dstYXSize, 16, 16, rcontrol); - - return 0; -} - - -/* - * blcCopyNormalYPredictionMBWith4MVs - * - * - * Parameters: - * See blcCopyNormalYPredictionMBWith1MV. - * All 4 entries of mvxArray and mvyArray are used. - * - * Function: - * This function copies a luminance prediction macroblock from the given - * source frame to the given position of the destination frame. - * The prediction macroblock is associated with four motion vectors. - * - * Returns: - * >= 0 if everything is ok - * < 0 if an error occured - * - */ - -static int blcCopyNormalYPredictionMBWith4MVs( - blcCopyBlock_t copyBlock, - int *mvxArray, int *mvyArray, - u_char *dstYBlk, - u_char *srcYFrame, - int dstYXPos, int dstYYPos, - int dstYXSize, - int srcYXSize, int srcYYSize, - int fMVsOverPictureBoundaries, - int rcontrol) -{ - int - nh, nv, - mvi = 0, - mvxVal, mvyVal, - subpixelX, subpixelY, - xlt0, xNormal, xgtmax, - ylt0, yNormal, ygtmax, - srcXPos, srcYPos; - - u_char - *srcBlk, - *origDest; - - origDest = dstYBlk; - for (nv = 0; nv <= 1; nv++, dstYYPos += 8, - origDest += (dstYXSize << 3) - 16, dstYXPos -= 16) { - for (nh = 0; nh <= 1; nh++, dstYXPos += 8, origDest += 8, mvi++) { - dstYBlk = origDest; - mvxVal = mvxArray[mvi]; - mvyVal = mvyArray[mvi]; - - blcYCountRefXY(mvxVal, mvyVal, dstYXPos, dstYYPos, &srcXPos, &srcYPos, - &subpixelX, &subpixelY); - - if (fMVsOverPictureBoundaries) - blcHandleRefOverPictBoundariesBC( - 8, 8, - srcYXSize, srcYYSize, - subpixelX, subpixelY, - &srcXPos, &srcYPos, - &xlt0, &xNormal, &xgtmax, - &ylt0, &yNormal, &ygtmax); - - else { - if (blcIsRefOverPictBoundaries( - 8, 8, - srcYXSize, srcYYSize, - subpixelX, subpixelY, - srcXPos, srcYPos)) - return -1; - xlt0 = xgtmax = ylt0 = ygtmax = 0; - xNormal = yNormal = 8; - } - - srcBlk = srcYFrame + srcYPos * srcYXSize + srcXPos; - - copyBlock(srcBlk, dstYBlk, xlt0, xNormal, xgtmax, - ylt0, yNormal, ygtmax, subpixelX, subpixelY, srcYXSize, - dstYXSize, 8, 8, rcontrol); - } - } - - return 0; -} - - - -/* - * blcCopyUVPredictionBlocks - * - * - * Parameters: - * uvCountSourceXY a pointer to either blcUVCountRefXY1MV or - * blcUVCountRefXY4MVs - * - * copyBlock a pointer to either blcCopyBlockBC or - * blcCopyBlockNBC (or their Assembler versions) - * - * mvxArray an array of four for x component of MVs - * mvyArray an array of four for y component of MVs - * - * dstUBlk a pointer to the current U block - * in the destination U frame - * dstVBlk a pointer to the current V block - * in the destination V frame - * - * srcUFrame the top-left corner of the source U frame - * srcVFrame the top-left corner of the source V frame - * - * dstUVXPos the x coordinate of dstUBlk - * dstUVYPos the y coordinate of dstUBlk - * - * dstUVXSize the width of the U and V destination frame - * srcUVXSize the width of the U and V source frame - * srcUVYSize the height of the U and V source frame - * - * fMVsOverPictureBoundaries non-zero if motion vectors may point outside - * picture boundaries, zero otherwise - * - * rcontrol RCONTROL (section 6.1.2 of the H.263 standard) - * - * Function: - * This function copies chrominance prediction blocks from the given - * source frames to the given positions of the destination frames. - * - * Returns: - * >= 0 if everything is ok - * < 0 if an error occured - * - */ - -static int blcCopyUVPredictionBlocks( - blcUVCountRefXY_t uvCountSourceXY, - blcCopyBlock_t copyBlock, - int *mvxArray, int *mvyArray, - u_char *dstUBlk, u_char *dstVBlk, - u_char *srcUFrame, u_char *srcVFrame, - int dstUVXPos, int dstUVYPos, - int dstUVXSize, - int srcUVXSize, int srcUVYSize, - int fMVsOverPictureBoundaries, - int rcontrol) -{ - int - srcXPos, - srcYPos, - subpixelX, - subpixelY, - xlt0, - xNormal, - xgtmax, - ylt0, - yNormal, - ygtmax; - - u_char *srcBlk; - - uvCountSourceXY(dstUVXPos, dstUVYPos, mvxArray, mvyArray, - &srcXPos, &srcYPos, &subpixelX, &subpixelY); - - if (fMVsOverPictureBoundaries) - blcHandleRefOverPictBoundariesBC( - 8, 8, - srcUVXSize, srcUVYSize, - subpixelX, subpixelY, - &srcXPos, &srcYPos, - &xlt0, &xNormal, &xgtmax, - &ylt0, &yNormal, &ygtmax); - - else { - if (blcIsRefOverPictBoundaries( - 8, 8, - srcUVXSize, srcUVYSize, - subpixelX, subpixelY, - srcXPos, srcYPos)) - return -1; - xlt0 = xgtmax = ylt0 = ygtmax = 0; - xNormal = yNormal = 8; - } - - /* U block */ \ - srcBlk = srcUFrame + srcYPos * srcUVXSize + srcXPos; - - /*deb0p("Copy U block\n"); - deb1p("srcBlk %x\n", srcBlk); - deb1p("dstUBlk %x\n", dstUBlk); - deb1p("xlt0 %d\n", xlt0); - deb1p("xNormal %d\n", xNormal); - deb1p("xgtmax %d\n", xgtmax); - deb1p("ylt0 %d\n", ylt0); - deb1p("yNormal %d\n", yNormal); - deb1p("ygtmax %d\n", ygtmax); - deb1p("subpixelX %d\n", subpixelX); - deb1p("subpixelY %d\n", subpixelY); - deb1p("srcUVXSize %d\n", srcUVXSize); - deb1p("dstUVXSize %d\n", dstUVXSize); - deb1p("rcontrol %d\n", rcontrol);*/ - - copyBlock(srcBlk, dstUBlk, xlt0, xNormal, xgtmax, - ylt0, yNormal, ygtmax, subpixelX, subpixelY, - srcUVXSize, dstUVXSize, 8, 8, rcontrol); - - /* V block */ \ - srcBlk = srcVFrame + srcYPos * srcUVXSize + srcXPos; - - copyBlock(srcBlk, dstVBlk, xlt0, xNormal, xgtmax, - ylt0, yNormal, ygtmax, subpixelX, subpixelY, - srcUVXSize, dstUVXSize, 8, 8, rcontrol); - - return 0; -} - - -/* - * blcHandleRefOverPictBoundariesBC - * - * - * Input parameters: - * xBlkSize the width of the block to copy - * yBlkSize the height of the block to copy - * xSize the width of the frame - * ySize the height of the frame - * - * subpixelX 1 if half pixel position is used in X direction - * subpixelY 1 if half pixel position is used in Y direction - * - * Input/output parameters: - * sourceX input: the absolute position of the source - * sourceY block (may be negative, half-pixel values are - * truncated to the next smaller integer) - * output: the coordinates of the first valid - * pixel in the source block - * - * Output parameters: - * The next parameters describe a row of source pixels. - * xlt0 the number of the source pixels in the left of - * the image area - * xNormal the number of the source pixels within - * the image area - * xgtmax the number of the source pixels in the right of - * the image area - * - * The next parameters describe a column of source pixels. - * ylt0 the number of the source pixels above - * the image area - * yNormal the number of the source pixels withing - * the image area - * ygtmax the number of the source pixels below - * the image area - * - * Function: - * This function counts how many pixels are outside the picture area - * and the coordinates of the first valid pixel in the source block. - * - * Returns: - * See output parameters. - * - */ - -static void blcHandleRefOverPictBoundariesBC( - int xBlkSize, int yBlkSize, - int xSize, int ySize, - int subpixelX, int subpixelY, - int *sourceX, int *sourceY, - int *xlt0, int *xNormal, int *xgtmax, - int *ylt0, int *yNormal, int *ygtmax) -{ - int - xSizeMinus = xSize - xBlkSize, - ySizeMinus = ySize - yBlkSize; - - if (*sourceX < 0) { - *xlt0 = (-(*sourceX) < xBlkSize) ? -(*sourceX) : xBlkSize; - *sourceX = 0; - } - else *xlt0 = 0; - - if (*sourceY < 0) { - *ylt0 = (-(*sourceY) < yBlkSize) ? -(*sourceY) : yBlkSize; - *sourceY = 0; - } - else *ylt0 = 0; - - if (*sourceX + subpixelX > xSizeMinus) { - if (*sourceX + subpixelX < xSize) - *xgtmax = *sourceX + subpixelX - xSizeMinus; - else { - *xgtmax = xBlkSize; - *sourceX = xSize - 1; - } - } - else *xgtmax = 0; - - if (*sourceY + subpixelY > ySizeMinus) { - if (*sourceY + subpixelY < ySize) - *ygtmax = *sourceY + subpixelY - ySizeMinus; - else { - *ygtmax = yBlkSize; - *sourceY = ySize - 1; - } - } - else *ygtmax = 0; - - *xNormal = xBlkSize - *xgtmax - *xlt0; - *yNormal = yBlkSize - *ygtmax - *ylt0; -} - - -/* - * blcIsRefOverPictBoundaries - * - * - * Input parameters: - * xBlkSize the width of the block to copy - * yBlkSize the height of the block to copy - * xSize the width of the frame - * ySize the height of the frame - * - * subpixelX 1 if half pixel position is used in X direction - * subpixelY 1 if half pixel position is used in Y direction - * - * sourceX the absolute position of the source - * sourceY block (may be negative, half-pixel values are - * truncated to the next smaller integer) - * - * Function: - * This function checks if the reference (source, prediction) block - * is (partly) outside the picture area. - * - * Returns: - * 1 if the reference block is (partly) outside the picture area - * 0 if the whole reference block is inside the picture area - * - */ - -static int blcIsRefOverPictBoundaries( - int xBlkSize, int yBlkSize, - int xSize, int ySize, - int subpixelX, int subpixelY, - int sourceX, int sourceY) -{ - if (sourceX < 0) - return 1; - - if (sourceY < 0) - return 1; - - if (sourceX + subpixelX > xSize - xBlkSize) - return 1; - - if (sourceY + subpixelY > ySize - yBlkSize) - return 1; - - return 0; -} - - - -/* - * blcUVCountMVOffset4MVs - * - * - * Input parameters: - * mvxArray an array of the four horizontal components of - * the motion vectors for a particular macroblock - * mvyArray an array of the four vertical components of - * the motion vectors for a particular macroblock - * - * Output parameters: - * offsetX the relative position of the source - * offsetY block (the origo is the destination block, - * half-pixel values are truncated to the next - * smaller integer) - * - * subpixelX 1 if half pixel position is used in X direction - * subpixelY 1 if half pixel position is used in Y direction - * - * Function: - * This function counts the relative position of the chrominance source block - * when it is given the motion vectors for the destination block. The macro - * uses interpolation of four motion vectors described in Annex F of H.263 - * Recommendation. - * - * Returns: - * See output parameters. - * - * - * - */ - -static void blcUVCountMVOffset4MVs( - int *mvxArray, int *mvyArray, - int *offsetX, int *offsetY, - int *subpixelX, int *subpixelY) -{ - /* These arrays define the table 16 in H.263 recommendation which is used - for interpolating chrominance motion vectors when four motion vectors - per macroblock is used. */ - static const int - halfPixelOrig16[31] = - {0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0}, - * const halfPixel16 = &halfPixelOrig16[15], - fullPixelOrig16[31] = - {-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, - * const fullPixel16 = &fullPixelOrig16[15]; - - int mvSum, pixelPos; - - mvSum = mvxArray[0] + mvxArray[1] + mvxArray[2] + mvxArray[3]; - pixelPos = (mvSum % 80) / 5; - *subpixelX = halfPixel16[pixelPos]; - *offsetX = (mvSum / 80) + fullPixel16[pixelPos]; - if (mvSum < 0 && *subpixelX) - (*offsetX)--; - - mvSum = mvyArray[0] + mvyArray[1] + mvyArray[2] + mvyArray[3]; - pixelPos = (mvSum % 80) / 5; - *subpixelY = halfPixel16[pixelPos]; - *offsetY = (mvSum / 80) + fullPixel16[pixelPos]; - if (mvSum < 0 && *subpixelY) - (*offsetY)--; -} - - -/* - * blcUVCountRefXY1MV - * blcUVCountRefXY4MVs - * - * - * Input parameters: - * origoX the coordinates of the destination block - * origoY - * - * mvxArray an array of the four horizontal components of - * the motion vectors for a particular macroblock - * mvyArray an array of the four vertical components of - * the motion vectors for a particular macroblock - * In blcUVCountRefXY1MV, only the first entry of - * the array is used. - * - * Output parameters: - * sourceX the absolute position of the source - * sourceY block (may be negative, half-pixel values are - * truncated to the next smaller integer) - * - * subpixelX 1 if half pixel position is used in X direction - * subpixelY 1 if half pixel position is used in Y direction - * - * Function: - * These macros count the absolute position of the chrominance source block - * (and sets sourceX, sourceY, subpixelX and subpixelY according to it) - * when it is given the position of the destination block and - * the motion vectors for the destination block. blcUVCountRefXY4MVs - * uses interpolation of four motion vectors described in Annex F of H.263 - * Recommendation. blcUVCountRefXY1MV uses only the first motion vector - * of the array as described in chapter 6.1.1 of H.263 Recommendation. - * - * Returns: - * See output parameters. - * - * - * - */ - -static void blcUVCountRefXY1MV( - int origoX, int origoY, - int *mvxArray, int *mvyArray, - int *sourceX, int *sourceY, - int *subpixelX, int *subpixelY) -{ - int mvxVal = *mvxArray, mvyVal = *mvyArray; - - *sourceX = origoX + mvxVal / 20; - *sourceY = origoY + mvyVal / 20; - - *subpixelX = (mvxVal % 20) != 0; - *subpixelY = (mvyVal % 20) != 0; - - if (mvxVal < 0 && *subpixelX) - *sourceX -= 1; - if (mvyVal < 0 && *subpixelY) - *sourceY -= 1; -} - - -static void blcUVCountRefXY4MVs( - int origoX, int origoY, - int *mvxArray, int *mvyArray, - int *sourceX, int *sourceY, - int *subpixelX, int *subpixelY) -{ - int offX, offY; - - blcUVCountMVOffset4MVs(mvxArray, mvyArray, &offX, &offY, subpixelX, subpixelY); - *sourceX = origoX + offX; - *sourceY = origoY + offY; -} - - -/* - * blcYCountRefXY - * - * - * Input parameters: - * mvxVal motion vector components for the block - * mvyVal - * - * destX the coordinates of the destination block - * destY - * - * Output parameters: - * sourceX the absolute position of the source - * sourceY block (may be negative, half-pixel values are - * truncated to the next smaller integer) - * - * subpixelX 1 if half pixel position is used in X direction - * subpixelY 1 if half pixel position is used in Y direction - * - * Function: - * This function counts the absolute position of the luminance source block (and - * sets sourceX, sourceY, subpixelX and subpixelY according to it) when it is - * given the position of the destination block and a motion vector pointing - * to the source block. - * - * Returns: - * See output parameters. - * - * - * - */ - -static void blcYCountRefXY( - int mvxVal, int mvyVal, - int destX, int destY, - int *sourceX, int *sourceY, - int *subpixelX, int *subpixelY) -{ - *sourceX = destX + mvxVal / 10; - *sourceY = destY + mvyVal / 10; - - *subpixelX = mvxVal & 1; - *subpixelY = mvyVal & 1; - - if (mvxVal < 0 && *subpixelX) - *sourceX -= 1; - if (mvyVal < 0 && *subpixelY) - *sourceY -= 1; -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/bma.cpp --- a/videoeditorengine/h263decoder/src/bma.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1846 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation for MPEG4(H263) video transcoder. -* Block matching algorithms for MPEG4(H263) video transcoder. -* -*/ - - - -#include "biblin.h" -#include "common.h" -#include "h263dconfig.h" -#include "decmbdct.h" -#include "vdxint.h" - -/* - * Constants/definitions - */ - -#define DIAMOND_SEARCH_NUMBER 2 - - -const tVLCTable sCBPCIType[9] = -{ - {0x01,0x01}, {0x01,0x03}, {0x02,0x03}, {0x03,0x03}, - {0x01,0x04}, {0x01,0x06}, {0x02,0x06}, {0x03,0x06}, - {0x01,0x09} -}; - -const tVLCTable sCBPCPType[21] = -{ - {0x01,0x01}, {0x03,0x04}, {0x02,0x04}, {0x05,0x06}, - {0x03,0x03}, {0x07,0x07}, {0x06,0x07}, {0x05,0x09}, - {0x02,0x03}, {0x05,0x07}, {0x04,0x07}, {0x05,0x08}, - {0x03,0x05}, {0x04,0x08}, {0x03,0x08}, {0x03,0x07}, - {0x04,0x06}, {0x04,0x09}, {0x03,0x09}, {0x02,0x09}, - {0x01,0x09} -}; - -const tVLCTable sCBPY[16] = -{ - {0x03,0x04}, {0x05,0x05}, {0x04,0x05}, {0x09,0x04}, - {0x03,0x05}, {0x07,0x04}, {0x02,0x06}, {0x0b,0x04}, - {0x02,0x05}, {0x03,0x06}, {0x05,0x04}, {0x0a,0x04}, - {0x04,0x04}, {0x08,0x04}, {0x06,0x04}, {0x03,0x02} -}; - -const unsigned int sDquant[5] = -{ - 0x01, 0x00, (unsigned int)NOT_VALID, 0x02, 0x03 -}; - -const tVLCTable sMVTab[33] = -{ - {0x01,0x01}, {0x02,0x03}, {0x02,0x04}, {0x02,0x05}, - {0x06,0x07}, {0x0a,0x08}, {0x08,0x08}, {0x06,0x08}, - {0x16,0x0a}, {0x14,0x0a}, {0x12,0x0a}, {0x22,0x0b}, - {0x20,0x0b}, {0x1e,0x0b}, {0x1c,0x0b}, {0x1a,0x0b}, - {0x18,0x0b}, {0x16,0x0b}, {0x14,0x0b}, {0x12,0x0b}, - {0x10,0x0b}, {0x0e,0x0b}, {0x0c,0x0b}, {0x0a,0x0b}, - {0x08,0x0b}, {0x0e,0x0c}, {0x0c,0x0c}, {0x0a,0x0c}, - {0x08,0x0c}, {0x06,0x0c}, {0x04,0x0c}, {0x06,0x0d}, - {0x04,0x0d} -}; - -const int32 sFixedQuantScale1[32]= -{ - 0x0000, 0x7fff, 0x3fff, 0x2aaa, - 0x1fff, 0x1999, 0x1555, 0x1249, - 0x0fff, 0x0e38, 0x0ccc, 0x0ba2, - 0x0aaa, 0x09d8, 0x0924, 0x0888, - 0x07ff, 0x0787, 0x071c, 0x06bc, - 0x0666, 0x0618, 0x05d1, 0x1590, - 0x0555, 0x051e, 0x04ec, 0x04bd, - 0x0492, 0x0469, 0x0444, 0x0421 -}; - -const u_int16 sPrePostMult[64] = -{ - 0x8000, 0xb18a, 0xa73d, 0x9683, - 0x8000, 0x9683, 0xa73d, 0xb18a, - 0xb18a, 0xf641, 0xe7f7, 0xd0c3, - 0xb18a, 0xd0c3, 0xe7f7, 0xf641, - 0xa73d, 0xe7f7, 0xda82, 0xc4a7, - 0xa73d, 0xc4a7, 0xda82, 0xe7f7, - 0x9683, 0xd0c3, 0xc4a7, 0xb0fb, - 0x9683, 0xb0fb, 0xc4a7, 0xd0c3, - 0x8000, 0xb18a, 0xa73d, 0x9683, - 0x8000, 0x9683, 0xa73d, 0xb18a, - 0x9683, 0xd0c3, 0xc4a7, 0xb0fb, - 0x9683, 0xb0fb, 0xc4a7, 0xd0c3, - 0xa73d, 0xe7f7, 0xda82, 0xc4a7, - 0xa73d, 0xc4a7, 0xda82, 0xe7f7, - 0xb18a, 0xf641, 0xe7f7, 0xd0c3, - 0xb18a, 0xd0c3, 0xe7f7, 0xf641 -}; - - - -/* - * Function Declarations - */ -int32 vlbCodeACCoeffsSVHWithZigZag(int32 coeffStart, int16* block, bibBuffer_t * outBuf, - int32 svh, int32 lastPos); -void vlbPutBits(bibBuffer_t *base, int32 numBits, u_int32 value); - - - -/* - * Function Definitions - */ - -/* {{-output"vbmGetH263IMCBPC.txt"}} */ -/* -* vbmGetH263IMCBPC -* -* Parameters: -* vopCodingType coding type (INTER/INTRA) for the VOP -* dQuant quantization parameter -* colorEffect indicates color effect to be aplpied (e.g., black & white) -* cbpy cbpy value for the macro block -* mcbpcVal computed mcbpc value for the macro block -* length length of the computed mcbpc value codeword -* -* Function: -* This function evaluates the mcpbc codeword for INTRA macro block -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmGetH263IMCBPC(int dQuant, int vopCodingType, int /*colorEffect*/, - int cbpy, int& mcbpcVal, int& length) -{ - int index; - int len, mcbpc; - - if(vopCodingType == 1 /* VDX_VOP_TYPE_P */) - { - index = (dQuant == 0 ? 12 : 16) + mcbpcVal; - len = sCBPCPType[index].length + sCBPY[cbpy].length + 1; - mcbpc = (sCBPCPType[index].code << sCBPY[cbpy].length) | sCBPY[cbpy].code; - mcbpcVal = mcbpc; - length = len; - } - else - { - index = (dQuant == 0 ? 0 : 4) + mcbpcVal; - len = sCBPCIType[index].length + sCBPY[cbpy].length ; - mcbpc = (sCBPCIType[index].code << sCBPY[cbpy].length) | sCBPY[cbpy].code; - mcbpcVal = mcbpc; - length = len; - } -} - - - -/* {{-output"vbmGetH263PMCBPC.txt"}} */ -/* -* vbmGetH263PMCBPC -* -* Parameters: -* dQuant quantization parameter -* colorEffect indicates color effect to be aplpied (e.g., black & white) -* cbpy cbpy value for the macro block -* mcbpcVal computed mcbpc value for the macro block -* length length of the computed mcbpc value codeword -* -* Function: -* This function evaluates the mcpbc codeword for INTER macro block -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmGetH263PMCBPC(int dQuant, int /*colorEffect*/, int cbpy, int& mcbpcVal, int& length) -{ - int index; - int len, mcbpc; - cbpy = (~cbpy) & 0xf; - - /* only ONE MV in baseline H263 */ - index = (dQuant == 0 ? 0 : 4) + mcbpcVal; - len = sCBPCPType[index].length + sCBPY[cbpy].length; - mcbpc = (sCBPCPType[index].code << sCBPY[cbpy].length) | sCBPY[cbpy].code; - mcbpcVal = mcbpc; - length = len; -} - - - -/* {{-output"vbmEncodeMVDifferential.txt"}} */ -/* -* vbmEncodeMVDifferential -* -* Parameters: -* outBuf output buffer -* mvdx motion vector difference value in horizontal direction, in half-pixel unit -* mvdy motion vector difference value in vertical direction, in half-pixel unit -* fCode Fcode value -* -* Function: -* This function encodes the MV difference after prediction into the bitstream -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmEncodeMVDifferential(int32 mvdx, int32 mvdy, int32 fCode, - bibBuffer_t * outBuf) -{ - int32 mvd[2]; - u_int32 i; - int32 temp; - int32 motioncode; - int32 motionresidual; - int32 rsize = fCode - 1; - u_int32 f = 1 << rsize; - int32 high = 32 * f - 1; - int32 low = -32 * (int32) f; - int32 range = 64 *f; - - mvd[0] = mvdx; - mvd[1] = mvdy; - - for(i = 0; i < 2; i++) - { - if (mvd[i] < low) - { - mvd[i] += range; - } - else - { - if (mvd[i] > high) - { - mvd[i] -= range; - } - } - temp = ABS(mvd[i]) -1 + f; - motioncode = temp >> rsize; - if(mvd[i] >= 0) - { - vlbPutBits(outBuf, sMVTab[motioncode].length, sMVTab[motioncode].code); - } - else - { - vlbPutBits(outBuf, sMVTab[motioncode].length, (sMVTab[motioncode].code) ^ 1); - } - if (rsize != 0 && motioncode != 0) - { - motionresidual = temp & (f - 1); - vlbPutBits(outBuf, rsize, motionresidual); - } - } - return; -} - - - - -/* {{-output"vbmMedian3.txt"}} */ -/* -* vbmMedian3 -* -* Parameters: -* s1 pointer to the first vector -* s2 pointer to the second vector -* s3 pointer to the third vector -* med pointer to store the median vector -* -* Function: -* This function finds the median of three vectors -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmMedian3(int16 *s1, int16 *s2, int16 *s3, tMotionVector *med) -{ - int32 temp1; - int32 temp2; - int32 temp3; - - temp1 = s1[0]; - temp2 = s2[0]; - temp3 = s3[0]; - - if (temp1 > temp2) - { - temp1 += temp2; - temp2 = temp1 - temp2; - temp1 -= temp2; - } - if (temp2 > temp3) - { - temp2 += temp3; - temp3 = temp2 - temp3; - temp2 -= temp3; - } - if (temp1 > temp2) - { - temp1 += temp2; - temp2 = temp1 - temp2; - temp1 -= temp2; - } - - med->mvx = (int16) temp2; - temp1 = s1[1]; - temp2 = s2[1]; - temp3 = s3[1]; - - if (temp1 > temp2) - { - temp1 += temp2; - temp2 = temp1 - temp2; - temp1 -= temp2; - } - if (temp2 > temp3) - { - temp2 += temp3; - temp3 = temp2 - temp3; - temp2 -= temp3; - } - if (temp1 > temp2) - { - temp1 += temp2; - temp2 = temp1 - temp2; - temp1 -= temp2; - } - med->mvy = (int16) temp2; - - return; -} - - - -/* {{-output"vbmMvPrediction.txt"}} */ -/* -* vbmMvPrediction -* -* Parameters: -* mbi macro block info needed for processing -* predMV pointer to motion vector predictors -* mbinWidth number of MBs per row -* mBCnt mecro block number -* -* Function: -* This function performs prediction of MV based on adjacent blocks -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmMvPrediction(tMBInfo *mbi, int32 mBCnt, tMotionVector *predMV, int32 mbinWidth) -{ - int16 p[3][2]; - int32 zeroFound = 0; - int32 zeroPredictors = 0; - - if (mBCnt % mbinWidth == 0) - { - p[0][0] = 0; - p[0][1] = 0; - zeroPredictors++; - } - else - { - p[0][0] = (mbi - 1)->MV[0][0]; - p[0][1] = (mbi - 1)->MV[0][1]; - } - - if (mBCnt / mbinWidth == 0) - { - p[1][0] = 0; - p[1][1] = 0; - zeroPredictors++; - zeroFound += 1; - } - else - { - p[1][0] = (mbi - mbinWidth)->MV[0][0]; - p[1][1] = (mbi - mbinWidth)->MV[0][1]; - } - - if ((mBCnt / mbinWidth == 0) || - ((mBCnt % mbinWidth) == (mbinWidth - 1))) - { - p[2][0] = 0; - p[2][1] = 0; - zeroPredictors++; - zeroFound += 2; - } - else - { - p[2][0] = (mbi - mbinWidth + 1)->MV[0][0]; - p[2][1] = (mbi - mbinWidth + 1)->MV[0][1]; - } - - if (zeroPredictors == 3) - { - predMV->mvx = 0; - predMV->mvy = 0; - } - else if (zeroPredictors == 2) - { - predMV->mvx = p[zeroFound^3][0]; - predMV->mvy = p[zeroFound^3][1]; - } - else - { - vbmMedian3(p[0], p[1], p[2], predMV); - } - return; -} - - - -/* {{-output"vbmMBSAD.txt"}} */ -/* -* vbmMBSAD -* -* Parameters: -* refFrame pointer to reference frame -* currMB pointer to current MB -* mv pointer to store the SAD and having motion vector -* mbPos pointer to macroblock position structure -* vopWidth width of frame/VOP -* yWidth width of luminance frame -* -* Function: -* This function computes the SAD (Sum of Absolute Difference) -* for a macroblock for integer motion vector -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmMBSAD(tPixel* refFrame, u_int32 vopWidth, tPixel* currMB, u_int32 yWidth, - tMotionVector* mv, const tMBPosition* mbPos) -{ - u_int32 sad = 0; - tPixel* refPos; - tPixel* currPos; - int32 row; - int32 col; - - refPos = refFrame + (mbPos->y + mv->mvy) * vopWidth + (mbPos->x + mv->mvx); - currPos = currMB; - - for(row = 0; row < MB_SIZE; row++) - { - col = row & 0x1; - for(; col < MB_SIZE; col+= 2) - { - sad += ABS(*(refPos + col) - *(currPos + col)); - } - refPos += vopWidth; - currPos += yWidth; - } - mv->SAD = (sad << 1); - return; -} - - - -/* {{-output"vbmMVOutsideBound.txt"}} */ -/* -* vbmMVOutsideBound -* -* Parameters: -* mbPos pointer to macroblock position structure -* bestMV pointer to store the best match motion vector -* halfPixel flag to indicate whether half pel search is needed -* -* Function: -* This function checks whether the MV is within valid range -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -tBool vbmMVOutsideBound(tMBPosition *mbPos, tMotionVector* bestMV, tBool halfPixel) -{ - int32 xLeft; - int32 xRight; - int32 yTop; - int32 yBottom; - - xLeft = (mbPos->x << halfPixel) + bestMV->mvx; - xRight = (mbPos->x << halfPixel) + (MB_SIZE << halfPixel) + bestMV->mvx; - yTop = (mbPos->y << halfPixel) + bestMV->mvy; - yBottom = (mbPos->y << halfPixel) + (MB_SIZE << halfPixel) + bestMV->mvy; - - if (halfPixel) - { - return ((xLeft < mbPos->LeftBound) || - (xRight > mbPos->RightBound) || - (yTop < mbPos->TopBound) || - (yBottom > mbPos->BottomBound) || - ((bestMV->mvx) < -32 || (bestMV->mvx) > 31) || - ((bestMV->mvy) < -32 || (bestMV->mvy) > 31) - ); - } - else - { - return ((xLeft < mbPos->LeftBound) || - (xRight > mbPos->RightBound) || - (yTop < mbPos->TopBound) || - (yBottom > mbPos->BottomBound)|| - ((bestMV->mvx) < -16 || (bestMV->mvx) > 15) || - ((bestMV->mvy) < -16 || (bestMV->mvy) > 15) - ); - } -} - - - -/* {{-output"vbmEstimateBestPredictor.txt"}} */ -/* -* vbmEstimateBestPredictor -* -* Parameters: -* refFrame pointer to reference frame -* currMB pointer to current MB -* initPred pointer to predictor motion vectors, pixel unit -* mbPos pointer to macroblock position structure -* vopWidth width of frame/VOP -* yWidth width of luminance frame -* bestMV pointer to store the best match motion vector -* noofPredictors number of predictors -* -* Function: -* This function estimates the best predictor among the set -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmEstimateBestPredictor(tPixel* refFrame, u_int32 vopWidth, tPixel* currMB, u_int32 yWidth, - tMotionVector* initPred, tMBPosition* mbPos, - int32 noOfPredictors, tMotionVector* bestMV) -{ - int32 i; - bestMV->SAD = 65535; - for(i = 0; i < noOfPredictors; i++) - { - if (vbmMVOutsideBound(mbPos, (initPred + i), 0)) - { - initPred[i].SAD = 65535; - } - else - { - vbmMBSAD(refFrame, vopWidth, currMB, yWidth, (initPred + i), mbPos); - } - if(initPred[i].SAD < bestMV->SAD) - { - bestMV->SAD = initPred[i].SAD; - bestMV->mvx = initPred[i].mvx; - bestMV->mvy = initPred[i].mvy; - } - } - - return; -} - - - -/* {{-output"vbmEstimateBound.txt"}} */ -/* -* vbmEstimateBound -* -* Parameters: -* mbPos pointer to macroblock position structure -* vopWidth width of frame/VOP -* vopHeight height of frame/VOP -* searchRange search range -* -* Function: -* This function evaluates the bounds for a macroblock BM search -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmEstimateBound(tMBPosition *mbPos,u_int32 vopWidth, u_int32 vopHeight, int32 searchRange) -{ - mbPos->LeftBound = mbPos->x - searchRange; - mbPos->RightBound = mbPos->x + 16 + searchRange; - mbPos->TopBound = mbPos->y - searchRange; - mbPos->BottomBound = mbPos->y + 16 + searchRange; - - if(mbPos->LeftBound < 0) - { - mbPos->LeftBound = 0; - } - if(mbPos->RightBound > (int32)vopWidth) - { - mbPos->RightBound = vopWidth; - } - if(mbPos->TopBound < 0 ) - { - mbPos->TopBound = 0; - } - if(mbPos->BottomBound > (int32)vopHeight) - { - mbPos->BottomBound = vopHeight; - } - - return; -} - - - -/* {{-output"vbmEstimateBoundHalfPel.txt"}} */ -/* -* vbmEstimateBoundHalfPel -* -* Parameters: -* mbPos pointer to macroblock position structure -* vopWidth width of frame/VOP -* vopHeight height of frame/VOP -* -* Function: -* This function evaluates the bounds for a macroblock BM search in half pel accuracy -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmEstimateBoundHalfPel(tMBPosition *mbPos, u_int32 vopWidth, u_int32 vopHeight) -{ - mbPos->LeftBound = 0; - mbPos->RightBound = (vopWidth << 1); - mbPos->TopBound = 0; - mbPos->BottomBound = (vopHeight << 1); - return; -} - - - -/* {{-output"vbmSmallDiamondSearch.txt"}} */ -/* -* vbmSmallDiamondSearch -* -* Parameters: -* refFrame pointer to reference frame -* currMB pointer to current MB -* initPred pointer to predictor motion vectors, pixel unit -* mbPos pointer to macroblock position structure -* vopWidth width of frame/VOP -* yWidth width of luminance frame -* bestMV pointer to store the best match motion vector -* Function: -* This function performs motion estimation for a macroblock using small diamond search -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmSmallDiamondSearch(tPixel* refFrame, tPixel* currMB, tMotionVector *initPred, - tMotionVector* bestMV, u_int32 vopWidth, tMBPosition* mbPos, - u_int32 yWidth) -{ - u_int8 locateSDS[5][5] = - { - {0,0,0,0,0}, - {0,1,1,0,1}, - {0,1,1,1,0}, - {0,0,1,1,1}, - {0,1,0,1,1} - }; - u_int32 i; - int32 stepCount; - int32 flag=1; - int32 position=0; - - //form the diamond shap search pattern - stepCount = 1; - initPred[0].SAD = bestMV->SAD; - initPred[1].mvx = (int16)(bestMV->mvx + 1); - initPred[1].mvy = bestMV->mvy; - initPred[2].mvx = bestMV->mvx; - initPred[2].mvy = (int16)(bestMV->mvy - 1); - initPred[3].mvx = (int16)(bestMV->mvx - 1); - initPred[3].mvy = bestMV->mvy; - initPred[4].mvx = bestMV->mvx; - initPred[4].mvy = (int16)(bestMV->mvy + 1); - - for(i = 1; i < 5; i++) - { - if(vbmMVOutsideBound(mbPos, &initPred[i], 0) ) - { - initPred[i].SAD = 65535; - } - else - { - vbmMBSAD(refFrame, vopWidth, currMB, yWidth, (initPred + i), mbPos); - } - if(initPred[i].SAD < bestMV->SAD) - { - bestMV->SAD = initPred[i].SAD; - bestMV->mvx = initPred[i].mvx; - bestMV->mvy = initPred[i].mvy; - position = i; - } - } - - /* the minimum SAD falls in the center */ - if(bestMV->SAD == initPred[0].SAD) - { - return; - } - - while(flag) - { - stepCount++; - initPred[0].SAD = bestMV->SAD; - initPred[1].mvx = (int16)(bestMV->mvx + 1); - initPred[1].mvy = bestMV->mvy; - initPred[2].mvx = bestMV->mvx; - initPred[2].mvy = (int16)(bestMV->mvy - 1); - initPred[3].mvx = (int16)(bestMV->mvx - 1); - initPred[3].mvy = bestMV->mvy; - initPred[4].mvx = bestMV->mvx; - initPred[4].mvy = (int16)(bestMV->mvy + 1); - - for(i = 1; i < 5; i++) - { - if(locateSDS[position][i] != 0) - { - if(vbmMVOutsideBound(mbPos, &initPred[i],0)) - { - initPred[i].SAD = 65535; - } - else - { - vbmMBSAD(refFrame, vopWidth, currMB, yWidth, (initPred + i), mbPos); - if(initPred[i].SAD < bestMV->SAD) - { - bestMV->mvx = initPred[i].mvx; - bestMV->mvy = initPred[i].mvy; - bestMV->SAD = initPred[i].SAD; - position = i; - } - } - } - } - if(bestMV->SAD == initPred[0].SAD) - { - break; - } - if(stepCount > DIAMOND_SEARCH_NUMBER) // we only do 2 diamond search here - { - break; - } - } - - return; -} - - - -/* {{-output"vbmSADHalfPel.txt"}} */ -/* -* vbmSADHalfPel -* -* Parameters: -* refFrame pointer to reference frame -* currMB pointer to current MB -* mbPos pointer to macroblock position structure -* vopWidth width of frame/VOP -* yWidth width of luminance frame -* mv pointer to motion vector -* roundingControl rounding control value -* blockSize block size -* Function: -* This function evaluates SAD for a macroblock/block for half pel motion vector -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmSADHalfPel(tPixel* refFrame, u_int32 vopWidth, tPixel* currMB, u_int32 yWidth, - tMotionVector* mv, const tMBPosition* mbPos, tBool roundingControl, - int32 blockSize) -{ - u_int32 sad = 0; - tPixel* refPos; - tPixel* currPos; - int32 row; - int32 col; - int32 extendedVOPWidth; - int32 temp; - - extendedVOPWidth = vopWidth ; - refPos = refFrame + (mbPos->y + (mv->mvy >> 1)) * extendedVOPWidth + - (mbPos->x + (mv->mvx >> 1)); - currPos = currMB; - - if(mv->mvy & 1) - { - if(mv->mvx & 1) - { - /* Both horizontal and vertical components are having half pel */ - for(row = 0; row < blockSize; row++) - { - col = row & 0x1; - for(; col < blockSize; col += 2) - { - temp = (refPos[col] + refPos[col + 1] + - refPos[col + extendedVOPWidth] + - refPos[col + extendedVOPWidth + 1] + - 2 -roundingControl) >> 2; - sad += ABS(temp - currPos[col]); - } - refPos += extendedVOPWidth; - currPos += yWidth; - } - mv->SAD = (sad << 1); - } - else - { - /* Vertical component is having half pel */ - for(row = 0; row < blockSize; row++) - { - col = row & 0x1; - for(; col < blockSize; col += 2) - { - temp = (refPos[col] + refPos[col + extendedVOPWidth]+ - 1 -roundingControl) >> 1; - sad += ABS(temp - currPos[col]); - } - refPos += extendedVOPWidth; - currPos += yWidth; - } - mv->SAD = (sad << 1); - } - } - else - { - if(mv->mvx & 1) - { - /* Horizontal component is having half pel */ - for(row = 0; row < blockSize; row++) - { - col = row & 0x1; - for(; col < blockSize; col += 2) - { - temp = (refPos[col] + refPos[col + 1] + - 1 -roundingControl) >> 1; - sad += ABS(temp - currPos[col]); - } - refPos += extendedVOPWidth; - currPos += yWidth; - } - mv->SAD = (sad << 1); - } - else - { - /* Both horizontal and vertical components are integer pel */ - for(row = 0; row < blockSize; row++) - { - col = row & 0x1; - for(; col < blockSize; col += 2) - { - sad += ABS(refPos[col] - currPos[col]); - } - refPos += extendedVOPWidth; - currPos += yWidth; - } - mv->SAD = (sad << 1); - } - } - - return; -} - - - - -/* {{-output"vbmHalfPelSearchMB.txt"}} */ -/* -* vbmHalfPelSearchMB -* -* Parameters: -* refFrame pointer to reference frame -* currMB pointer to current MB -* mbPos pointer to macroblock position structure -* vopWidth width of frame/VOP -* yWidth width of luminance frame -* initPred pointer to predictor motion vectors, pixel unit -* bestMV pointer to store the best match motion vector -* Function: -* This function evaluates the half pel motion vector for a 16x16 block using -* the integer pel motion vector -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmHalfPelSearchMB(tPixel* refFrame, u_int32 vopWidth, tPixel* currMB, - u_int32 yWidth, tMotionVector* initPred, - tMotionVector* bestMV, tMBPosition* mbPos) -{ - int32 i; - int32 position=0; - - initPred[0].SAD = bestMV->SAD; - initPred[1].mvx = (int16)(bestMV->mvx + 1); - initPred[1].mvy = bestMV->mvy; - initPred[2].mvx = bestMV->mvx; - initPred[2].mvy = (int16)(bestMV->mvy - 1); - initPred[3].mvx = (int16)(bestMV->mvx - 1); - initPred[3].mvy = bestMV->mvy; - initPred[4].mvx = bestMV->mvx; - initPred[4].mvy = (int16)(bestMV->mvy + 1); - - for(i = 1; i < 5; i++) - { - if(vbmMVOutsideBound(mbPos, &initPred[i], 1)) - { - initPred[i].SAD = 65535; - } - else - { - vbmSADHalfPel(refFrame, vopWidth, currMB, yWidth, - (initPred + i), mbPos,(tBool)(0), 16); - } - - if(initPred[i].SAD < bestMV->SAD) - { - bestMV->mvx = initPred[i].mvx; - bestMV->mvy = initPred[i].mvy; - bestMV->SAD = initPred[i].SAD; - position = i; - } - } - - if(1) - { - if(bestMV->SAD == initPred[0].SAD) - { - return; - } - else - { - switch(position) - { - case 1: case 3: - initPred[5].mvx = bestMV->mvx; - initPred[5].mvy = (int16)(bestMV->mvy - 1); - initPred[6].mvx = bestMV->mvx; - initPred[6].mvy = (int16)(bestMV->mvy + 1); - break; - - case 2: case 4: - initPred[5].mvx = (int16)(bestMV->mvx - 1); - initPred[5].mvy = bestMV->mvy; - initPred[6].mvx = (int16)(bestMV->mvx + 1); - initPred[6].mvy = bestMV->mvy; - break; - - default: - break; - } - - for(i = 5; i < 7; i++) - { - - if(vbmMVOutsideBound(mbPos, &initPred[i],1)) - { - initPred[i].SAD = 65535; - } - else - { - vbmSADHalfPel(refFrame, vopWidth, currMB, yWidth, - (initPred + i), mbPos, (tBool)0, 16); - } - if(initPred[i].SAD < bestMV->SAD) - { - bestMV->mvx = initPred[i].mvx; - bestMV->mvy = initPred[i].mvy; - bestMV->SAD = initPred[i].SAD; - } - } - } - } - - return; -} - - - -/* {{-output"vbmMEMBSpatioTemporalSearch.txt"}} */ -/* -* vbmMEMBSpatioTemporalSearch -* -* Parameters: -* refFrame pointer to reference frame -* currMB pointer to current MB -* mbPos pointer to macroblock position structure -* vopWidth width of frame/VOP -* vopHeight height of frame/VOP -* yWidth width of luminance frame -* initPred pointer to predictor motion vectors, pixel unit -* bestMV pointer to store the best match motion vector -* noOfPredictors number of MV predictors -* searchRange search range -* minSAD minimum SAD -* Function: -* This function performs motion estimation for a macroblock using -* spatio-temporal correlation based search -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -int32 vbmMEMBSpatioTemporalSearch(tPixel* refFrame, u_int32 vopWidth, u_int32 vopHeight, - tPixel* currMB, u_int32 yWidth, tMBPosition* mbPos, - tMotionVector *initPred, int32 noOfPredictors, - tMotionVector* bestMV, int32 searchRange, u_int32 minSAD) -{ - /* estimate the bound of MV for current MB */ - vbmEstimateBound(mbPos, vopWidth, vopHeight, searchRange); - - /* get the best MV predictor from the candidates set */ - vbmEstimateBestPredictor(refFrame, vopWidth, currMB, yWidth, initPred, mbPos, noOfPredictors, bestMV); - - if(bestMV->SAD >= minSAD) - { - /* from the MV predictor, starts the small diamond search */ - vbmSmallDiamondSearch(refFrame, currMB, initPred, bestMV, vopWidth, mbPos, yWidth); - } - - /* adjustment for half-pixel search */ - bestMV->mvx <<= 1; - bestMV->mvy <<= 1; - - /* MV bound in half-pixel */ - vbmEstimateBoundHalfPel(mbPos,vopWidth, vopHeight); - - /* starts the half-pixel search around the integer-pixel MV */ - vbmHalfPelSearchMB(refFrame, vopWidth, currMB, yWidth, - initPred, bestMV, mbPos); - - return bestMV->SAD; -} - - - -/* {{-output"vbmRowDCT.txt"}} */ -/* -* vbmRowDCT -* -* Parameters: -* block array of 64 block coefficients -* Function: -* This function performs row DCT of 8x8 block of data elements -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmRowDCT(int16 *block) -{ - int32 coeff0, coeff1, coeff2, coeff3; - int32 coeff4, coeff5, coeff6, coeff7; - int32 temp; - u_int16 count; - int32 rowStartIndex; - - for(count = 0; count < BLOCK_SIZE; count++) - { - rowStartIndex = count << LOG_BLOCK_WIDTH; - - /* Stage 1 and up scaling of the input data to improve precision */ - coeff0 = (block[rowStartIndex] + block[rowStartIndex + 7]) << - DCT_KEPT_PRECISION; - coeff7 = (block[rowStartIndex] - block[rowStartIndex + 7]) << - DCT_KEPT_PRECISION; - - coeff1 = (block[rowStartIndex + 1] + block[rowStartIndex + 6]) << - DCT_KEPT_PRECISION; - coeff6 = (block[rowStartIndex + 1] - block[rowStartIndex + 6]) << - DCT_KEPT_PRECISION; - - coeff2 = (block[rowStartIndex + 2] + block[rowStartIndex + 5]) << - DCT_KEPT_PRECISION; - coeff5 = (block[rowStartIndex + 2] - block[rowStartIndex + 5]) << - DCT_KEPT_PRECISION; - - coeff3 = (block[rowStartIndex + 3] + block[rowStartIndex + 4]) << - DCT_KEPT_PRECISION; - coeff4 = (block[rowStartIndex + 3] - block[rowStartIndex + 4]) << - DCT_KEPT_PRECISION; - - /* Stage 2 */ - temp = coeff0 + coeff3; - coeff3 = coeff0 - coeff3; - coeff0 = temp; - - temp = coeff1 + coeff2; - coeff2 = coeff1 - coeff2; - coeff1 = temp; - - temp = ((coeff6 - coeff5) * COS_PI_BY_4 + DCT_ROUND) >> DCT_PRECISION; - coeff6 = ((coeff6 + coeff5) * COS_PI_BY_4 + DCT_ROUND) >> DCT_PRECISION; - coeff5 = temp; - - /* Stage 3 */ - temp = coeff0 + coeff1; - coeff1 = coeff0 - coeff1; - coeff0 = temp; - - temp = ((coeff2 * TAN_PI_BY_8 + DCT_ROUND) >> DCT_PRECISION) + coeff3; - coeff3 = ((coeff3 * TAN_PI_BY_8 + DCT_ROUND) >> DCT_PRECISION) - coeff2; - coeff2 = temp; - - temp = coeff4 + coeff5; - coeff5 = coeff4 - coeff5; - coeff4 = temp; - - temp = coeff7 - coeff6; - coeff7 = coeff7 + coeff6; - coeff6 = temp; - - /* Stage 4 */ - temp = ((coeff4 * TAN_PI_BY_16 + DCT_ROUND) >> DCT_PRECISION) + coeff7; - coeff7 = ((coeff7 * TAN_PI_BY_16 + DCT_ROUND) >> DCT_PRECISION) - coeff4; - coeff4 = temp; - - temp = coeff5 + ((coeff6 * TAN_3PI_BY_16 + DCT_ROUND) >> DCT_PRECISION); - coeff6 = coeff6 - ((coeff5 * TAN_3PI_BY_16 + DCT_ROUND) >> DCT_PRECISION); - coeff5 = temp; - - block[rowStartIndex] = (int16)coeff0; - block[rowStartIndex + 4] = (int16)coeff1; - block[rowStartIndex + 2] = (int16)coeff2; - block[rowStartIndex + 6] = (int16)coeff3; - block[rowStartIndex + 1] = (int16)coeff4; - block[rowStartIndex + 5] = (int16)coeff5; - block[rowStartIndex + 3] = (int16)coeff6; - block[rowStartIndex + 7] = (int16)coeff7; - } - - return; -} - - - -/* {{-output"vbmDCTQuantInterSVH.txt"}} */ -/* -* vbmDCTQuantInterSVH -* -* Parameters: -* block array of 64 block coefficients -* mbi contains info about MB quantization scale and coding type -* lastPosition indicates last non zero coefficient -* Function: -* This function performs DCT of a 8x8 block of data elements and -* quantizes the DCT coefficients with short video header flag set -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmDCTQuantInterSVH(int16 *block, tMBInfo *mbi, int32* lastPosition) -{ - int32 coeff0, coeff1, coeff2, coeff3; - int32 coeff4, coeff5, coeff6, coeff7; - int32 temp; - u_int16 count; - int32 sign; - - vbmRowDCT(block); - - for(count = 0; count < BLOCK_SIZE; count++) - { - /* Stage 1 */ - coeff0 = block[count] + block[count + 56]; - coeff7 = block[count] - block[count + 56]; - - coeff1 = block[count + 8] + block[count + 48]; - coeff6 = block[count + 8] - block[count + 48]; - - coeff2 = block[count + 16] + block[count + 40]; - coeff5 = block[count + 16] - block[count + 40]; - - coeff3 = block[count + 24] + block[count + 32]; - coeff4 = block[count + 24] - block[count + 32]; - - /* Stage 2 */ - temp = coeff0 + coeff3; - coeff3 = coeff0 - coeff3; - coeff0 = temp; - - temp = coeff1 + coeff2; - coeff2 = coeff1 - coeff2; - coeff1 = temp; - - temp = ((coeff6 - coeff5) * COS_PI_BY_4 + DCT_ROUND) >> DCT_PRECISION; - coeff6 = ((coeff6 + coeff5) * COS_PI_BY_4 + DCT_ROUND) >> DCT_PRECISION; - coeff5 = temp; - - /* Stage 3 */ - temp = coeff0 + coeff1; - coeff1 = coeff0 - coeff1; - coeff0 = temp; - - temp = ((coeff2 * TAN_PI_BY_8 + DCT_ROUND) >> DCT_PRECISION) + coeff3; - coeff3 = ((coeff3 * TAN_PI_BY_8 + DCT_ROUND) >> DCT_PRECISION) - coeff2; - coeff2 = temp; - - temp = coeff4 + coeff5; - coeff5 = coeff4 - coeff5; - coeff4 = temp; - - temp = coeff7 - coeff6; - coeff7 = coeff7 + coeff6; - coeff6 = temp; - - /* Stage 4 */ - temp = ((coeff4 * TAN_PI_BY_16 + DCT_ROUND) >> DCT_PRECISION) + coeff7; - coeff7 = ((coeff7 * TAN_PI_BY_16 + DCT_ROUND) >> DCT_PRECISION) - coeff4; - coeff4 = temp; - - temp = coeff5 + ((coeff6 * TAN_3PI_BY_16 + DCT_ROUND) >> DCT_PRECISION); - coeff6 = coeff6 - ((coeff5 * TAN_3PI_BY_16 + DCT_ROUND) >> DCT_PRECISION); - coeff5 = temp; - - block[count] = (int16) ( (coeff0* sPrePostMult[count] + - DCT_ROUND_PLUS_KEPT) >> DCT_PRECISION_PLUS_KEPT); - block[count + 32] = (int16) ((coeff1* sPrePostMult[count+32] + - DCT_ROUND_PLUS_KEPT) >> DCT_PRECISION_PLUS_KEPT); - block[count + 16] = (int16) ((coeff2* sPrePostMult[count+16] + - DCT_ROUND_PLUS_KEPT) >> DCT_PRECISION_PLUS_KEPT); - block[count + 48] = (int16) ((coeff3* sPrePostMult[count+48] + - DCT_ROUND_PLUS_KEPT) >> DCT_PRECISION_PLUS_KEPT); - block[count + 8] = (int16) ((coeff4* sPrePostMult[count+8] + - DCT_ROUND_PLUS_KEPT) >> DCT_PRECISION_PLUS_KEPT); - block[count + 40] = (int16) ((coeff5* sPrePostMult[count+40] + - DCT_ROUND_PLUS_KEPT) >> DCT_PRECISION_PLUS_KEPT); - block[count + 24] = (int16) ((coeff6* sPrePostMult[count+24] + - DCT_ROUND_PLUS_KEPT) >> DCT_PRECISION_PLUS_KEPT); - block[count + 56] = (int16) ((coeff7* sPrePostMult[count+56] + - DCT_ROUND_PLUS_KEPT) >> DCT_PRECISION_PLUS_KEPT); - - coeff1 = mbi->QuantScale; - temp= count; - while(temp<64) - { - coeff0 = (int32) block[temp]; - if (coeff0 >= 0) { - sign = 1; - } - else{ - sign = -1; - } - coeff0 = sign * coeff0; - - if (coeff0 < ((coeff1 * 5 ) >> 1)) - { - block[temp] = 0; - } - else - { - coeff0 -= (coeff1 >> 1); - coeff0 += 1; - coeff0 *= sFixedQuantScale1[coeff1]; - coeff0 >>= FIXED_PT_BITS; - coeff0 *= sign; - - if (coeff0 > MAX_SAT_VAL_SVH) - { - coeff0 = MAX_SAT_VAL_SVH; - } - else if (coeff0 < MIN_SAT_VAL_SVH) - { - coeff0 = MIN_SAT_VAL_SVH; - } - - block[temp] = (int16) coeff0; - if( temp > (*lastPosition)) *lastPosition = temp; - } - temp = temp+8; - } - } - - return; -} - - - -/* {{-output"vbmCBPYInter.txt"}} */ -/* -* vbmCBPYInter -* -* Parameters: -* mbi contains info about MB quantization scale and coding type -* lastPosition indicates last non zero coefficient -* Function: -* This function evaluates the coded bit pattern of the Inter MB -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmCBPYInter(tMBInfo *mbi, int32* lastPosition) -{ - int32 blkCnt; - - mbi->CodedBlockPattern = 0; - for (blkCnt = 0; blkCnt < 6; blkCnt++) - { - mbi->CodedBlockPattern <<= 1; - - if(lastPosition[blkCnt] != -1) - { - mbi->CodedBlockPattern |= 1; - } - } - - return; -} - - - -/* {{-output"vbmCBPYInter.txt"}} */ -/* -* vbmCBPYInter -* -* Parameters: -* refFrame reference frame -* currBlockPos current block -* block block for storing the difference between predicted and -* actual pixel values. -* mv motion vector for the block in half pixel unit -* x x-coordinate for the first pixel of block -* y y-coordinate for the first pixel of block -* refFrameWidth width of the reference frame -* curFrameWidth width of current Frame -* extendVopSize extension of the frame width -* Function: -* This function finds the predicted block from the reference frame and -* copies the predicted frame into the current frame -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -int32 vbmPredictBlock(tPixel *refFrame, int32 refFrameWidth, u_int32 extendVopSize, - tPixel *currBlockPos, int32 curFrameWidth, - int16 *block, tMotionVector *mv, int32 x, int32 y) -{ - int32 count1, count2; - u_int8 *tempFrame, *tempFrame1, *tempFrame2; - int32 tempVal, sad; - int32 extframeWidth; - extframeWidth = refFrameWidth + 2 * extendVopSize; /* Because of padding */ - - /* - * Since the frame is appended by 8 rows and 8 colums on all sides - * 0,0 of referenceframe will now be frameStartPoint - */ - - tempFrame = refFrame + extframeWidth * extendVopSize + extendVopSize - + ((y + (mv->mvy >> 1)) * extframeWidth) + x + (mv->mvx >> 1); - tempFrame2 = currBlockPos; - - if (mv->mvy & 1) /* Motion vector of y has half pel accuracy */ - { - if (mv->mvx & 1) /* MV has half pel value in both coordinates */ - { - tempFrame1 = tempFrame + extframeWidth; - sad=0; - for (count1 = 0; count1 < BLOCK_SIZE; count1++) - { - count2 = 0; - tempVal = (tempFrame[count2] - + tempFrame[count2 + 1] - + tempFrame1[count2] - + tempFrame1[count2 + 1]+ 2) >> 2; - - block[count2] = (int16)(tempFrame2[count2] - tempVal); - sad+=ABS(block[count2]); - tempVal = (tempFrame[count2 + 1] - + tempFrame[count2 + 2] - + tempFrame1[count2 + 1] - + tempFrame1[count2 + 2]+ 2) >> 2; - - block[count2 + 1] = (int16)(tempFrame2[count2 + 1] - tempVal); - sad+=ABS(block[count2+1]); - tempVal = (tempFrame[count2 + 2] - + tempFrame[count2 + 3] - + tempFrame1[count2 + 2] - + tempFrame1[count2 + 3]+ 2) >> 2; - - block[count2 + 2] = (int16)(tempFrame2[count2 + 2] - tempVal); - sad+=ABS(block[count2+2]); - tempVal = (tempFrame[count2 + 3] - + tempFrame[count2 + 4] - + tempFrame1[count2 + 3] - + tempFrame1[count2 + 4]+ 2) >> 2; - - block[count2 + 3] = (int16)(tempFrame2[count2 + 3] - tempVal); - sad+=ABS(block[count2+3]); - tempVal = (tempFrame[count2 + 4] - + tempFrame[count2 + 5] - + tempFrame1[count2 + 4] - + tempFrame1[count2 + 5]+ 2) >> 2; - - block[count2 + 4] = (int16)(tempFrame2[count2 + 4] - tempVal); - sad+=ABS(block[count2+4]); - tempVal = (tempFrame[count2 + 5] - + tempFrame[count2 + 6] - + tempFrame1[count2 + 5] - + tempFrame1[count2 + 6]+ 2) >> 2; - - block[count2 + 5] = (int16)(tempFrame2[count2 + 5] - tempVal); - sad+=ABS(block[count2+5]); - tempVal = (tempFrame[count2+ 6] - + tempFrame[count2 + 7] - + tempFrame1[count2 + 6] - + tempFrame1[count2 + 7]+ 2) >> 2; - - block[count2 + 6] = (int16)(tempFrame2[count2 + 6] - tempVal); - sad+=ABS(block[count2+6]); - tempVal = (tempFrame[count2 + 7] - + tempFrame[count2 + 8] - + tempFrame1[count2 + 7] - + tempFrame1[count2 + 8]+ 2) >> 2; - - block[count2 + 7] = (int16)(tempFrame2[count2 + 7] - tempVal); - sad+=ABS(block[count2+7]); - block += BLOCK_SIZE; - tempFrame += extframeWidth; - tempFrame1 += extframeWidth; - tempFrame2 += curFrameWidth; - } - } - else /* MV has half pel only in y direction */ - { - tempFrame1 = tempFrame + extframeWidth; - sad=0; - for (count1 = 0; count1 < BLOCK_SIZE; count1++) - { - count2 = 0; - tempVal = (tempFrame[count2] - + tempFrame1[count2]+ 1) >> 1; - - block[count2] = (int16)(tempFrame2[count2] - tempVal); - sad+=ABS(block[count2]); - tempVal = (tempFrame[count2 + 1] - + tempFrame1[count2 + 1]+ 1) >> 1; - - block[count2 + 1] = (int16)(tempFrame2[count2 + 1] - tempVal); - sad+=ABS(block[count2+1]); - tempVal = (tempFrame[count2 + 2] - + tempFrame1[count2 + 2]+ 1) >> 1; - - block[count2 + 2] = (int16)(tempFrame2[count2 + 2] - tempVal); - sad+=ABS(block[count2+2]); - tempVal = (tempFrame[count2 + 3]+ tempFrame1[count2 + 3]+1) >> 1; - - block[count2 + 3] = (int16)(tempFrame2[count2 + 3] - tempVal); - sad+=ABS(block[count2+3]); - tempVal = (tempFrame[count2 + 4] - + tempFrame1[count2 + 4]+ 1) >> 1; - - block[count2 + 4] = (int16)(tempFrame2[count2 + 4] - tempVal); - sad+=ABS(block[count2+4]); - tempVal = (tempFrame[count2 + 5] - + tempFrame1[count2 + 5]+ 1) >> 1; - - block[count2 + 5] = (int16)(tempFrame2[count2 + 5] - tempVal); - sad+=ABS(block[count2+5]); - tempVal = (tempFrame[count2+ 6] - + tempFrame1[count2 + 6]+ 1) >> 1; - - block[count2 + 6] = (int16)(tempFrame2[count2 + 6] - tempVal); - sad+=ABS(block[count2+6]); - tempVal = (tempFrame[count2 + 7] - + tempFrame1[count2 + 7]+ 1) >> 1; - - block[count2 + 7] = (int16)(tempFrame2[count2 + 7] - tempVal); - sad+=ABS(block[count2+7]); - block += BLOCK_SIZE; - tempFrame += extframeWidth; - tempFrame1 += extframeWidth; - tempFrame2 += curFrameWidth; - } - } - } - else - { - if (mv->mvx & 1) /* MV has half pel only in x direction */ - { - sad=0; - for (count1 = 0; count1 < BLOCK_SIZE; count1++) - { - count2 = 0; - tempVal = (tempFrame[count2] - + tempFrame[count2 + 1]+1) >> 1; - - block[count2] = (int16)(tempFrame2[count2] - tempVal); - sad+=ABS(block[count2]); - tempVal = (tempFrame[count2 + 1] - + tempFrame[count2 + 2]+ 1) >> 1; - - block[count2 + 1] = (int16)(tempFrame2[count2 + 1] - tempVal); - sad+=ABS(block[count2+1]); - tempVal = (tempFrame[count2 + 2] - + tempFrame[count2 + 3]+ 1) >> 1; - - block[count2 + 2] = (int16)(tempFrame2[count2 + 2] - tempVal); - sad+=ABS(block[count2+2]); - tempVal = (tempFrame[count2 + 3] - + tempFrame[count2 + 4]+1) >> 1; - - block[count2 + 3] = (int16)(tempFrame2[count2 + 3] - tempVal); - sad+=ABS(block[count2+3]); - tempVal = (tempFrame[count2 + 4] - + tempFrame[count2 + 5]+ 1) >> 1; - - block[count2 + 4] = (int16)(tempFrame2[count2 + 4] - tempVal); - sad+=ABS(block[count2+4]); - tempVal = (tempFrame[count2 + 5] - + tempFrame[count2 + 6]+ 1) >> 1; - - block[count2 + 5] = (int16)(tempFrame2[count2 + 5] - tempVal); - sad+=ABS(block[count2+5]); - tempVal = (tempFrame[count2+ 6] - + tempFrame[count2 + 7] - + 1) >> 1; - - block[count2 + 6] = (int16)(tempFrame2[count2 + 6] - tempVal); - sad+=ABS(block[count2+6]); - tempVal = (tempFrame[count2 + 7] - + tempFrame[count2 + 8]+ 1) >> 1; - - block[count2 + 7] = (int16)(tempFrame2[count2 + 7] - tempVal); - sad+=ABS(block[count2+7]); - block += BLOCK_SIZE; - tempFrame += extframeWidth; - tempFrame2 += curFrameWidth; - } - } - else /* MV has full pel accuracy in both coordinates */ - { - sad=0; - for (count1 = 0; count1 < BLOCK_SIZE; count1++) - { - for (count2 = 0; count2 < BLOCK_SIZE; count2++) - { - block[count2] = (int16)(tempFrame2[count2]- tempFrame[count2]); - sad+=ABS(block[count2]); - } - block += BLOCK_SIZE; - tempFrame += extframeWidth; - tempFrame2 += curFrameWidth; - } - } - } - return sad; -} - - - - -/* {{-output"vbmPutInterMBSVH.txt"}} */ -/* -* vbmPutInterMBSVH -* -* Parameters: -* outBuf pointer to the output bit-stream buffer structure -* mbData pointer to the macro block data structure -* mbi pointer to macro block information structure. -* numTextureBits pointer to store the number of bits needed to encode macro block -* predMV pointer to the predicted motion vector data -* lastPos pointer to last non-zero position of each block in the macro block -* colorEffect color effect applied -* Function: -* This function encodes INTER macroblock in SVH mode -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmPutInterMBSVH(tMacroblockData* mbData, tMBInfo* mbi, bibBuffer_t *outBuf, - int32 *numTextureBits, tMotionVector* predMV, int32* lastPos, - int16 colorEffect) -{ - int32 dQuant; - int32 mcbpcVal; - int32 index; - int32 cbpy; - int32 textureBits; - int16* coeff; - int32 len; - - vlbPutBits(outBuf, 1, mbi->SkippedMB); - if(mbi->SkippedMB == ON) - { - *numTextureBits = 0; - return; - } - - dQuant = mbi->dQuant; - mcbpcVal = colorEffect? 0 : (mbi->CodedBlockPattern & 3); - cbpy = (~((mbi->CodedBlockPattern >> 2) & 0xf)) & 0xf; - - /* only ONE MV in baseline H263 */ - index = (dQuant == 0 ? 0 : 4) + mcbpcVal; - len = sCBPCPType[index].length + sCBPY[cbpy].length; - mcbpcVal = (sCBPCPType[index].code << sCBPY[cbpy].length) | sCBPY[cbpy].code; - - vlbPutBits(outBuf, len, mcbpcVal); - - if(dQuant != 0) - { - vlbPutBits(outBuf, 2, sDquant[dQuant + 2]); - } - - /* encode motion vectors */ - { - vbmEncodeMVDifferential(mbi->MV[0][0] - predMV[0].mvx, - mbi->MV[0][1] - predMV[0].mvy, - 1, outBuf); - } - - /* encode texture coefficents */ - textureBits = 0; - cbpy = 32; - for (index = 0; index < (colorEffect ? 4 : 6); index++) - { - if(cbpy & mbi->CodedBlockPattern) - { - coeff = mbData->Data + index * 64; - textureBits += vlbCodeACCoeffsSVHWithZigZag(0, coeff, outBuf, ON, lastPos[index]); - } - cbpy >>= 1; - } - *numTextureBits = textureBits; - - return; -} - -/* -******************************************************************************* -Name : vbmPutInterMB -Description : INTER macroblock is encoded here. -Parameter : - mbData: Pointer to the macro block data structure - mbi: Pointer to the macro block information structure. - vopData: Pointer to the VOP data structure. - currFrame: Pointer to the current frame data - mbNo: The number macro block being encoded. - numTextureBits:Pointer to store the number of bits taken to encode the macro block. - prevQuant: Pointer to the quantization sacle. - blockSAD: Pointer to store the block SAD values. - outBuf: Pointer to the output bit-stream buffer structure - mvi: Pointer to the MV array -Return Value : void -******************************************************************************* -*/ -/* {{-output"vbmPutInterMB.txt"}} */ -/* -* vbmPutInterMB -* -* Parameters: -* outBuf pointer to the output bit-stream buffer structure -* mbPos pointer to macroblock position structure -* paramMB pointer to macroblock parameters structure -* initPred pointer to predictor motion vectors, pixel unit -* noOfPredictors number of MV predictors -* numTextureBits pointer to store the number of bits needed to encode macro block -* colorEffect color effect applied -* vopWidth width of frame/VOP -* vopHeight height of frame/VOP -* mbsinfo pointer to macro block information structure -* searchRange search range -* Function: -* This function encodes INTER macroblock -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vbmPutInterMB(tMBPosition* mbPos, bibBuffer_t *outBuf, dmdPParam_t *paramMB, - tMotionVector *initPred, int32 noOfPredictors, u_int32 vopWidth, - u_int32 vopHeight,int32 searchRange, int32 mbNo, - int32* numTextureBits, int16 colorEffect, tMBInfo *mbsinfo) -{ - int32 blkCnt; - tMotionVector predMV[4]; - int32 lastPosition[6] = {-1,-1,-1,-1,-1,-1}; - tPixel *currBlockPos = NULL; - tMotionVector bestMV; - tMacroblockData mbData; - tMBInfo *mbi = mbsinfo + mbNo; - mbi->SkippedMB = OFF; - u_int32 yWidth = paramMB->uvWidth * 2; - - bestMV.mvx = 0; - bestMV.mvy = 0; - bestMV.SAD = MB_SIZE * MB_SIZE / 2; // quich search stop threshold - - vbmMEMBSpatioTemporalSearch(paramMB->refY, vopWidth,vopHeight,paramMB->currYMBInFrame, yWidth, - mbPos, initPred, noOfPredictors, &bestMV, - searchRange, bestMV.SAD); - - /* update MV buffer */ - mbi->MV[0][0] = bestMV.mvx; - mbi->MV[0][1] = bestMV.mvy; - mbi->SAD = bestMV.SAD; - currBlockPos = paramMB->currYMBInFrame; - - for (blkCnt= 0; blkCnt < 4; blkCnt++) - { - int blkPosX, blkPosY; - blkPosX = (blkCnt & 1) ? mbPos->x + 8 : mbPos->x; - blkPosY = (blkCnt & 2) ? mbPos->y + 8 : mbPos->y; - - vbmPredictBlock(paramMB->refY, vopWidth, 0, currBlockPos, yWidth, - &mbData.Data[blkCnt * BLOCK_COEFF_SIZE], - &bestMV, blkPosX, blkPosY); - vbmDCTQuantInterSVH(&mbData.Data[blkCnt * BLOCK_COEFF_SIZE], - mbi, &(lastPosition[blkCnt])); - currBlockPos += 8; - if (blkCnt & 1) - currBlockPos += 8 * yWidth - 16; - } - - if (!colorEffect) - { - /* Find the Chrominance Block Motion vectors */ - tMotionVector lChrMv; - - lChrMv.mvx = (int16)(bestMV.mvx % 4 == 0 ? bestMV.mvx >> 1 : (bestMV.mvx >> 1) | 1); - lChrMv.mvy = (int16)(bestMV.mvy % 4 == 0 ? bestMV.mvy >> 1 : (bestMV.mvy >> 1) | 1); - blkCnt = 4; /* U */ - vbmPredictBlock(paramMB->refU, paramMB->uvWidth, 0, paramMB->currUBlkInFrame, paramMB->uvWidth, - &mbData.Data[blkCnt * BLOCK_COEFF_SIZE], - &lChrMv, mbPos->x >> 1, mbPos->y >> 1); - vbmDCTQuantInterSVH(&mbData.Data[blkCnt * BLOCK_COEFF_SIZE], - mbi, &(lastPosition[blkCnt])); - blkCnt = 5; /* V */ - vbmPredictBlock(paramMB->refV, paramMB->uvWidth, 0, paramMB->currVBlkInFrame, paramMB->uvWidth, - &mbData.Data[blkCnt * BLOCK_COEFF_SIZE], - &lChrMv, mbPos->x >> 1, mbPos->y >> 1); - vbmDCTQuantInterSVH(&mbData.Data[blkCnt * BLOCK_COEFF_SIZE], - mbi, &(lastPosition[blkCnt])); - } - - vbmCBPYInter(mbi, lastPosition); - if((mbi->CodedBlockPattern == 0) && - (mbi->MV[0][0] == 0) && (mbi->MV[0][1] == 0)) - { - mbi->SkippedMB = ON; - } - else //(mbi->SkippedMB == OFF) - { - vbmMvPrediction(mbi, mbNo, predMV, vopWidth / MB_SIZE); - } - vbmPutInterMBSVH(&mbData, mbi, outBuf, - numTextureBits, predMV, lastPosition, colorEffect); - - return; -} - - -/* End of bma.cpp */ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/core.cpp --- a/videoeditorengine/h263decoder/src/core.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1357 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* H.263 decoder core functions. -* -*/ - - -/* - * Includes - */ -#include "h263dConfig.h" -#include "vdc263.h" -#include "core.h" -#include "debug.h" -#include "decblock.h" /* for dblFree and dblLoad */ -#include "decgob.h" -#include "decpich.h" -#include "h263dapi.h" /* for H263D_BC_MUX_MODE_SEPARATE_CHANNEL and H263D_ERD_ */ -#include "stckheap.h" -#include "sync.h" -#include "vdeims.h" -#include "vdeimb.h" -#include "viddemux.h" -#include "biblin.h" -#include "MPEG4Transcoder.h" - - -/* - * Typedefs and structs - */ - -/* This structure is used to indicate the expected decoding position. */ -typedef enum { - EDP_START_OF_FRAME, - EDP_START_OF_GOB_SEGMENT, - EDP_START_OF_SLICE_SEGMENT, - EDP_END_OF_FRAME -} vdcExpectedDecodingPosition_t; - - -/* - * Local function prototypes - */ - -int vdcFillImageBuffers( - vdcInstance_t *instance, - int numOfCodedMBs, - vdeImb_t *imbP); - - -/* - * Global functions - */ - -/* {{-output"vdcClose.txt"}} */ -/* - * vdcClose - * - * - * Parameters: - * hInstance handle of instance data - * - * Function: - * This function closes the instance. The function frees all the resources - * allocated for the instance. The instance handle is no longer valid - * after calling this function. - * - * Returns: - * >= 0 if the function was successful - * < 0 if an error occured - * - */ - -int vdcClose(vdcHInstance_t hInstance) -/* {{-output"vdcClose.txt"}} */ -{ - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - int retValue = VDC_OK; - - if (instance == NULL) - return retValue; - - mvcFree(&instance->mvcData); - - if ( instance->prevPicHeader != NULL ) - free( instance->prevPicHeader ); - - aicFree(&instance->aicData); - - - if ( instance->user_data != NULL ) - free( instance->user_data ); - - - vdcDealloc(instance); - - return retValue; -} - - -/* {{-output"vdcDecodeFrame.txt"}} */ -/* - * vdcDecodeFrame - * - * - * Parameters: - * hInstance handle of instance data - * - * inBuffer pointer to bit buffer, the current position - * of the buffer must start with a PSC - * - * Function: - * The vdcDecodeFrame function implements the decoding process described - * in the H.263 recommendation (version 2). However, it does not support - * the following features of the recommendation: - * decoding using the H.261 standard (bit 2 in PTYPE), - * source format changes during a video sequence. - * - * The function decodes the next frame in - * the buffer (inBuffer) meaning that the decoding continues until the next - * PSC or EOS is found or until the end of the buffer is not reached. - * - * Returns: - * VDC_OK if the function was succesful - * VDC_OK_BUT_BIT_ERROR if bit errors were detected but - * decoded frames are provided by concealing - * the errors - * VDC_OK_BUT_FRAME_USELESS if severe bit errors were detected - * (no concealment was possible) or - * the bitstream ended unexpectedly - * VDC_ERR if a processing error occured, - * the instance should be closed - * - */ - - -int vdcDecodeFrame(vdcHInstance_t hInstance, bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, int aColorEffect, TBool aGetDecodedFrame, - CMPEG4Transcoder *hTranscoder) - -/* {{-output"vdcDecodeFrame.txt"}} */ -{ - int prevGN = -1; /* GOB number of the latest decoded GOB */ - int prevGNWithHeader = -1; /* GOB number of the latest decoded GOB with - a GOB header */ - - int numStuffBits; /* Number of stuffing bits before the sync code */ - - int sncCode; /* the latest synchronization code, see - sncCheckSync for the possible values */ - - int rtr = -1; /* reference tr, 0.. */ - int trp = -1; /* tr for prediction, -1 if not indicated in - the bitstream */ - - int retValue = VDC_OK; /* return value of this function */ - - - int16 error = 0; /* Used to pass error codes from the sync module */ - - u_char - *currYFrame = NULL, /* current P frame */ - *currUFrame = NULL, - *currVFrame = NULL, - *refYFrame = NULL, /* reference frame */ - *refUFrame = NULL, - *refVFrame = NULL; - - u_char *fCodedMBs = NULL; /* Pointer to table, which indicates coded \ - macroblocks by non-zero value */ - int numOfCodedMBs = 0; /* The number of coded macroblocks */ - - int *quantParams = NULL; /* Pointer to table, in which the quantization - parameter for each macroblock is stored */ - - int decStatus = 0; /* Decoding status, returned from decgob.c */ - int corruptedSegments = 0; /* counter for corrupted segments */ - int decodedSegments = 0; /* counter for decoded segments (used in slice mode) */ - int headerSuccess = 0; /* success of picture header */ - int numDecodedMBs = 0; /* Total number of decoded MBs */ - int numMBsInFrame = 0; /* Number of MBs in frame */ - - - vdcExpectedDecodingPosition_t expectedDecodingPosition; - /* Tells in which part of the bitstream - the decoding should be */ - - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - /* instance data */ - - vdcAssert(instance != NULL); - - /* Initializations */ - - instance->currFrame = NULL; - expectedDecodingPosition = EDP_START_OF_FRAME; - instance->pictureParam.prevTR = instance->pictureParam.tr; - - /* Main loop */ - for (;;) { - int bitErrorIndication = 0; - - sncCode = sncCheckSync(inBuffer, &numStuffBits, &error); - - /* If sncCheckSync failed */ - if (error && error != ERR_BIB_NOT_ENOUGH_DATA) { - deb1p("vdcDecodeFrame: ERROR - sncCheckSync returned %d.\n", error); - retValue = VDC_ERR; - goto exitFunction; - } - - /* If EOS was got */ - if (sncCode == SNC_EOS) - instance->fEOS = 1; - - /* If frame ends appropriately */ - if (expectedDecodingPosition == EDP_END_OF_FRAME && - (sncCode == SNC_PSC || sncCode == SNC_EOS || - sncCode == SNC_STUFFING || error == ERR_BIB_NOT_ENOUGH_DATA )) { - goto exitFunction; - } - - /* Else if frame (or stream) data ends suddenly */ - else if (error == ERR_BIB_NOT_ENOUGH_DATA) { - retValue = VDC_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* Else if EOS was reached */ - else if (sncCode == SNC_EOS) { - /* The current frame is useless since it ends before it is complete. - On the other hand, there is no point in concealing it since - it is the last frame of the sequence. */ - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - } - - /* Else if frame starts as expected */ - else if (expectedDecodingPosition == EDP_START_OF_FRAME && - sncCode == SNC_PSC) { - - dphInParam_t pichIn; - dphInOutParam_t pichInOut; - dphOutParam_t pichOut; - - pichIn.numStuffBits = numStuffBits; - pichIn.fNeedDecodedFrame = aGetDecodedFrame | hTranscoder->NeedDecodedYUVFrame(); - - pichIn.fReadBits = 1; - pichInOut.vdcInstance = instance; - pichInOut.inBuffer = inBuffer; - - if ( instance->fRPS ) { - /* Store the previous TR for VRC needs */ - if ( instance->nOfDecodedFrames > 0 ) - trp = instance->pictureParam.tr; - else - trp = -1; - } - /* Get picture header */ - headerSuccess = dphGetPictureHeader(&pichIn, &pichInOut, &pichOut, &bitErrorIndication); - - if (headerSuccess != DPH_OK) { - - deb("vdcDecodeFrame: Header decoding unsuccessful due to errors, picture will be discarded.\n"); - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - } - - numMBsInFrame = renDriNumOfMBs(instance->currFrame->imb->drawItem); - - currYFrame = pichOut.currYFrame; - currUFrame = pichOut.currUFrame; - currVFrame = pichOut.currVFrame; - - numOfCodedMBs = 0; - fCodedMBs = renDriCodedMBs(instance->currFrame->imb->drawItem); - memset(fCodedMBs, 0, numMBsInFrame * sizeof(u_char)); - - /* Initialize quantization parameter array */ - quantParams = instance->currFrame->imb->yQuantParams; - memset(quantParams, 0, numMBsInFrame * sizeof(int)); - - /* If this is the first frame and callback function has been set, report frame size */ - if (instance->nOfDecodedFrames == 0 && instance->reportPictureSizeCallback) { - h263dReportPictureSizeCallback_t cb = - (h263dReportPictureSizeCallback_t)instance->reportPictureSizeCallback; - cb(instance->hParent, instance->pictureParam.lumWidth, instance->pictureParam.lumHeight); - } - - /* If picture header was ok */ - if (headerSuccess == DPH_OK) - { - /* Get and decode Supplemental Enhancement Information */ - int seiSuccess = dphGetSEI(instance, inBuffer, &bitErrorIndication); - - /* If fatal error while reading SEI */ - if (seiSuccess < 0) { - retValue = VDC_ERR; - deb("vdcDecodeFrame: dphGetSEI failed.\n"); - goto exitFunction; - } - - /* Else if bit error while reading SEI */ - else if (seiSuccess == DPH_OK_BUT_BIT_ERROR) { - /* We can't trust that the 1st segment can be decoded. - Thus, let's continue with the 2nd segment. */ - if ( instance->pictureParam.fSS ) - expectedDecodingPosition = EDP_START_OF_SLICE_SEGMENT; - else - expectedDecodingPosition = EDP_START_OF_GOB_SEGMENT; - sncCode = sncSeekSync(inBuffer, &error); - if (error && error != ERR_BIB_NOT_ENOUGH_DATA) { - retValue = VDC_ERR; - deb("vdcDecodeFrame: sncSeekSync failed.\n"); - goto exitFunction; - } - continue; - } - - - } - - if ( hTranscoder->H263PictureHeaderEnded(&pichOut, &pichInOut) != VDC_OK ) - { - retValue = VDC_ERR; - goto exitFunction; - } - - if (instance->pictureParam.fSS) - /* Decode the 1st Slice segment - not supported */ - { - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - } - else - /* Decode the 1st GOB segment */ - { - dgobGOBSegmentInParam_t dgobi; - dgobGOBSegmentInOutParam_t dgobio; - - dgobi.numStuffBits = 0; - dgobi.pictParam = &instance->pictureParam; - dgobi.inBuffer = inBuffer; - - dgobi.outBuffer = outBuffer; - dgobi.bufEdit = bufEdit; - - dgobi.iColorEffect = aColorEffect; - dgobi.iGetDecodedFrame=aGetDecodedFrame; - dgobio.StartByteIndex=0; - dgobio.StartBitIndex=7; - - /* fGFIDShouldChange not relevant here */ - - dgobio.prevGNWithHeader = 0; - dgobio.prevGN = 0; - /* dgobio.gfid, not relevant here */ - dgobio.fCodedMBs = fCodedMBs; - dgobio.numOfCodedMBs = numOfCodedMBs; - dgobio.quantParams = quantParams; - dgobio.mvcData = &instance->mvcData; - dgobio.imageStore = instance->imageStore; - dgobio.trp = pichOut.trp; - dgobio.rtr = 0; /* not relevant since no reference frame exists yet */ - dgobio.refY = refYFrame; - dgobio.refU = refUFrame; - dgobio.refV = refVFrame; - dgobio.currPY = currYFrame; - dgobio.currPU = currUFrame; - dgobio.currPV = currVFrame; - - /* the first GOB doesn't have a header */ - hTranscoder->H263GOBSliceHeaderBegin(); - hTranscoder->H263GOBSliceHeaderEnded(NULL, NULL); - - decStatus = dgobGetAndDecodeGOBSegmentContents(&dgobi, - instance->pictureParam.pictureType != VDX_PIC_TYPE_I, - pichOut.pquant, &dgobio, hTranscoder); - - if (decStatus < 0) { - retValue = VDC_ERR; - goto exitFunction; - } - - hTranscoder->H263OneGOBSliceWithHeaderEnded(); - - prevGNWithHeader = dgobio.prevGNWithHeader; - prevGN = dgobio.prevGN; - numOfCodedMBs = dgobio.numOfCodedMBs; - trp = dgobio.trp; - rtr = dgobio.rtr; - refYFrame = dgobio.refY; - refUFrame = dgobio.refU; - refVFrame = dgobio.refV; - if (prevGN == instance->pictureParam.numGOBs - 1) - expectedDecodingPosition = EDP_END_OF_FRAME; - else - expectedDecodingPosition = EDP_START_OF_GOB_SEGMENT; - } - } - - /* Else if GOB segment starts as expected */ - else if (expectedDecodingPosition == EDP_START_OF_GOB_SEGMENT && - sncCode == SNC_GBSC) { - - dgobGOBSegmentInParam_t dgobi; - dgobGOBSegmentInOutParam_t dgobio; - - dgobi.numStuffBits = numStuffBits; - dgobi.pictParam = &instance->pictureParam; - dgobi.inBuffer = inBuffer; - - dgobi.outBuffer = outBuffer; - dgobi.bufEdit = bufEdit; - - dgobi.iColorEffect = aColorEffect; - dgobi.iGetDecodedFrame= aGetDecodedFrame; - if(prevGN==-1) - { - dgobio.StartByteIndex=0; - dgobio.StartBitIndex=7; - } - else - { - dgobio.StartByteIndex=dgobi.inBuffer->getIndex; - dgobio.StartBitIndex=dgobi.inBuffer->bitIndex; - } - - - /* fGFIDShouldChange, see below */ - - dgobio.prevGNWithHeader = prevGNWithHeader; - dgobio.prevGN = prevGN; - /* dgobio.gfid, see below */ - dgobio.fCodedMBs = fCodedMBs; - dgobio.numOfCodedMBs = numOfCodedMBs; - dgobio.quantParams = quantParams; - dgobio.mvcData = &instance->mvcData; - dgobio.imageStore = instance->imageStore; - dgobio.trp = trp; - dgobio.rtr = rtr; - dgobio.refY = refYFrame; - dgobio.refU = refUFrame; - dgobio.refV = refVFrame; - dgobio.currPY = currYFrame; - dgobio.currPU = currUFrame; - dgobio.currPV = currVFrame; - - dgobi.fGFIDShouldChange = instance->fGFIDShouldChange; - dgobio.gfid = instance->gfid; - - /* Get and decode GOB segment */ - decStatus = dgobGetAndDecodeGOBSegment(&dgobi, &dgobio, hTranscoder); - - if (decStatus == DGOB_ERR) { - retValue = VDC_ERR; - goto exitFunction; - } - if ( instance->fGFIDShouldChange ) { - instance->gfid = dgobio.gfid; - instance->fGFIDShouldChange = 0; - } - - prevGNWithHeader = dgobio.prevGNWithHeader; - prevGN = dgobio.prevGN; - numOfCodedMBs = dgobio.numOfCodedMBs; - trp = dgobio.trp; - - - rtr = dgobio.rtr; - - refYFrame = dgobio.refY; - refUFrame = dgobio.refU; - refVFrame = dgobio.refV; - - if (prevGN == instance->pictureParam.numGOBs - 1) - expectedDecodingPosition = EDP_END_OF_FRAME; - else - expectedDecodingPosition = EDP_START_OF_GOB_SEGMENT; - } - - /* Else if Slice segment starts as expected */ - else if (expectedDecodingPosition == EDP_START_OF_SLICE_SEGMENT && - sncCode == SNC_GBSC) { - /* slides not supported */ - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - - } - - /* Else decoding is out of sync */ - else { - switch (expectedDecodingPosition) { - - case EDP_START_OF_FRAME: - /* No PSC */ - /* Check if GFID could be used to recover the picture header */ - { - dphInParam_t pichIn; - dphInOutParam_t pichInOut; - dphOutParam_t pichOut; - - pichIn.numStuffBits = numStuffBits; - pichIn.fReadBits = 0; - - pichInOut.vdcInstance = instance; - pichInOut.inBuffer = inBuffer; - - headerSuccess = dphGetPictureHeader(&pichIn, &pichInOut, &pichOut, &bitErrorIndication); - if ( headerSuccess == DPH_OK) { - /* Header recovery was successful, start decoding from the next GOB available */ - if ( instance->pictureParam.fSS ) { - expectedDecodingPosition = EDP_START_OF_SLICE_SEGMENT; - /* decSlice does not increment these */ - decodedSegments++; - corruptedSegments++; - } - else - expectedDecodingPosition = EDP_START_OF_GOB_SEGMENT; - deb1p("vdcDecodeFrame: Header successfully recovered after PSC loss. FrameNum %d\n",instance->frameNum); - currYFrame = pichOut.currYFrame; - currUFrame = pichOut.currUFrame; - currVFrame = pichOut.currVFrame; - numMBsInFrame = renDriNumOfMBs(instance->currFrame->imb->drawItem); - numOfCodedMBs = 0; - numDecodedMBs = 0; - fCodedMBs = renDriCodedMBs(instance->currFrame->imb->drawItem); - memset(fCodedMBs, 0, numMBsInFrame * sizeof(u_char)); - - /* Initialize quantization parameter array */ - quantParams = instance->currFrame->imb->yQuantParams; - memset(quantParams, 0, numMBsInFrame * sizeof(int)); - - /* If this is the first frame and callback function has been set, report frame size */ - if (instance->nOfDecodedFrames == 0 && instance->reportPictureSizeCallback) { - h263dReportPictureSizeCallback_t cb = - (h263dReportPictureSizeCallback_t)instance->reportPictureSizeCallback; - cb(instance->hParent, instance->pictureParam.lumWidth, instance->pictureParam.lumHeight); - } - - continue; - } - else { - retValue = VDC_OK_BUT_FRAME_USELESS; - deb1p("vdcDecodeFrame: Header recovery unsuccessful after PSC loss. FrameNum %d\n",instance->frameNum); - goto exitFunction; - } - } - case EDP_START_OF_GOB_SEGMENT: - if ( sncCode == SNC_PSC ) { - retValue = VDC_OK_BUT_BIT_ERROR; - goto exitFunction; - } - else { - /* - * Picture header recovery used next picture header - * => we are not at the position of GBSC => search the next one - * This is caused by a erdRestorePictureHeader that does not synchronize - * bit buffer to GOB headers that have bitErrorIndication != 0. - * This may be considered as a , and it might be good to change it later on. - * This seeking should solve the problem, although maybe not in the most elegant way - */ - sncSeekSync( inBuffer, &error ); - continue; - } - default : - { - - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - } - - } - } - } - - exitFunction: - - - /* If frame(s) not useless */ - if (retValue == VDC_OK || retValue == VDC_OK_BUT_BIT_ERROR) { - - if (!corruptedSegments && (numDecodedMBs > 0 || prevGN > 0 || instance->pictureParam.numGOBs == 1)) - retValue = VDC_OK; - else { - retValue = VDC_OK_BUT_FRAME_USELESS; - deb1p("vdcDecodeFrame: Frame useless, too many corrupted segments. FrameNum %d\n",instance->frameNum); - } - } - - /* If decoding ok and frame not useless */ - if ( retValue == VDC_OK || retValue == VDC_OK_BUT_BIT_ERROR ) { - - - /* stuff bits here 'END OF FRAME' -->*/ - bibStuffBits(outBuffer); - /* <-- */ - - if ( instance->nOfDecodedFrames < 0xffffffff ) - instance->nOfDecodedFrames++; - - if (vdcFillImageBuffers( - instance, - numOfCodedMBs, - instance->currFrame->imb) < 0) - retValue = VDC_ERR; - - - - } - if ( retValue == VDC_OK_BUT_FRAME_USELESS ) { - /* GFID of the next frame can be whatever, since this frame was useless */ - instance->gfid = -1; - } - if ( instance->fGFIDShouldChange - && ( (instance->pictureParam.fSS && decodedSegments == 1) - || (!instance->pictureParam.fSS && prevGNWithHeader <= 0) - ) - ) - { - /* GFID of the next frame can be whatever, since this frame didn't have any GFID's and GFID was supposed to change */ - instance->gfid = -1; - } - - /* If a fatal error occurred */ - if (retValue < 0) { - /* Return frame buffers for decoded output images, - as they are useless for the caller and - as the caller cannot get a handle to return them */ - if (instance->currFrame) - vdeImsPutFree(instance->imageStore, instance->currFrame); - } - - return retValue; -} - - -/* {{-output"vdcDecodePictureHeader.txt"}} */ -/* - * vdcDecodePictureHeader - * - * Parameters: - * hInstance I: handle of instance data - * (May set instance->errorVar if bit errors.) - * - * Function: - * - * - * Note: - * This function does not recover corrupted picture headers (by means of - * GFID or redundant picture header copies). - * - * Returns: - * See above. - */ - -int vdcDecodePictureHeader( - vdcHInstance_t hInstance, - bibBuffer_t *inBuffer, - vdxPictureHeader_t *header, - vdxSEI_t *sei) -{ - int - retValue = VDC_OK, - sncCode, - numStuffBits, - bitErrorIndication = 0; - - int16 - error = 0; - - u_int32 - pictureStartPosition; - - vdcInstance_t - *instance = (vdcInstance_t *) hInstance; - - /* The function is implemented by calling stateless Video Demultiplexer - (vdx) functions. Consequently, the function does not have sophisticated - logic to track illegal/corrupted parameters based on the previous - picture header. It cannot recover corrupted picture headers either. - - Alternatively, the function could have been implemented by creating - an identical copy of the Video Decoder Core instance and by using - "Decode Picture Header" (dph) module functions. However, as there is - no instance copying functions implemented, the former alternative - was chosen. - - This function was targeted for getting the picture type and - Nokia-proprietary Annex N scalability layer information encapsulated - in Supplemental Enhancement Information in an error-free situation. - For this purpose, the former and simpler solution is more than - adequate. */ - - pictureStartPosition = bibNumberOfFlushedBits(inBuffer); - sncCode = sncCheckSync(inBuffer, &numStuffBits, &error); - - /* If sncCheckSync failed */ - if (error) { - deb1p("vdcDecodeFrame: ERROR - sncCheckSync returned %d.\n", error); - retValue = VDC_ERR; - goto exitFunction; - } - - /* Else if EOS was got */ - else if (sncCode == SNC_EOS) { - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - } - - /* Else if frame starts as expected */ - else if (sncCode == SNC_PSC) { - int - picHdrStatus, - seiStatus; - - vdxGetPictureHeaderInputParam_t - picHdrIn; - - picHdrIn.numStuffBits = numStuffBits; - picHdrIn.fCustomPCF = 0; - picHdrIn.fScalabilityMode = 0; - picHdrIn.fRPS = instance->fRPS; - picHdrIn.flushBits = bibFlushBits; - picHdrIn.getBits = bibGetBits; - picHdrIn.showBits = bibShowBits; - - /* Get picture header */ - picHdrStatus = vdxGetPictureHeader( - inBuffer, - &picHdrIn, - header, - &bitErrorIndication); - - /* If the header was not successfully retrieved */ - if (picHdrStatus < 0) { - retValue = VDC_ERR; - goto exitFunction; - } - else if (picHdrStatus != VDX_OK) { - retValue = VDC_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* Get and decode Supplemental Enhancement Information */ - seiStatus = vdxGetAndParseSEI( - inBuffer, - instance->pictureParam.fPLUSPTYPE, - instance->numAnnexNScalabilityLayers, - sei, - &bitErrorIndication); - - /* If error while reading SEI */ - if (seiStatus < 0) { - retValue = VDC_ERR; - goto exitFunction; - } - else if (seiStatus != VDX_OK) { - retValue = VDC_OK_BUT_BIT_ERROR; - goto exitFunction; - } - } - - /* Else no valid frame start */ - else - retValue = VDC_OK_BUT_FRAME_USELESS; - - exitFunction: - - /* Reset the bit buffer to its original position */ - bibRewindBits( - bibNumberOfFlushedBits(inBuffer) - pictureStartPosition, - inBuffer, &error); - - if (error) - retValue = VDC_ERR; - - return retValue; -} - - -/* {{-output"vdcFree.txt"}} */ -/* - * vdcFree - * - * - * Parameters: - * None. - * - * Function: - * This function deinitializes the Video Decoder Core module. - * Any functions of this module must not be called after vdcFree (except - * vdcLoad). - * - * Returns: - * >= 0 if succeeded - * < 0 if failed - * - * - */ - -int vdcFree(void) -/* {{-output"vdcFree.txt"}} */ -{ - if (dblFree() < 0) - return VDC_ERR; - - return VDC_OK; -} - - -/* {{-output"vdcGetImsItem.txt"}} */ -/* - * vdcGetImsItem - * - * - * Parameters: - * hInstance handle of instance data - * index output frame number, - * should be 0 for I and P frames - * - * Function: - * This function returns a pointer to the requested output frame. - * - * Returns: - * a pointer to a image store item which corresponds to the passed output - * frame index, or - * NULL if the function fails - * - */ - -vdeImsItem_t *vdcGetImsItem(vdcHInstance_t hInstance, int index) -/* {{-output"vdcGetImsItem.txt"}} */ -{ - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - int numOutputFrames = vdcGetNumberOfOutputFrames(hInstance); - - vdcAssert(instance); - vdcAssert(index >= 0); - - if (index >= numOutputFrames) - return NULL; - - return instance->currFrame; -} - - -/* {{-output"vdcGetNumberOfAnnexNScalabilityLayers.txt"}} */ -/* - * vdcGetNumberOfAnnexNScalabilityLayers - * - * Parameters: - * hInstance I: handle of instance data - * - * Function: - * Returns the number of Nokia-proprietary Annex N temporal scalability - * layers. - * - * Returns: - * See above. - */ - -int vdcGetNumberOfAnnexNScalabilityLayers( - vdcHInstance_t hInstance) -/* {{-output"vdcGetNumberOfAnnexNScalabilityLayers.txt"}} */ -{ - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - - vdcAssert(instance); - - return instance->numAnnexNScalabilityLayers; -} - - -/* {{-output"vdcGetNumberOfOutputFrames.txt"}} */ -/* - * vdcGetNumberOfOutputFrames - * - * - * Parameters: - * hInstance handle of instance data - * - * Function: - * This function returns the number of output frames which were produced - * during the latest vdcDecodeFrame. - * - * Returns: - * 0 if vdcDecodeFrame failed to produce any output frames - * 1 for I and P frames - * - */ - -int vdcGetNumberOfOutputFrames(vdcHInstance_t hInstance) -/* {{-output"vdcGetNumberOfOutputFrames.txt"}} */ -{ - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - - vdcAssert(instance); - - return ((instance->currFrame) ? 1 : 0); -} - - -/* {{-output"vdcGetTR.txt"}} */ -/* - * vdcGetTR - * - * - * Parameters: - * inpBuffer buffer containing the frame data, - * must start with a PSC - * tr temporal reference - * - * Function: - * Gets the temporal reference field from the input buffer. - * Notice that the validity of the bitstream is not checked. - * This function does not support enhanced temporal reference - * (ETR) defined in section 5.1.8 of the H.263 recommendation. - * - * Returns: - * Nothing - * - * - */ - -void vdcGetTR(void *inpBuffer, u_int8 *tr) -/* {{-output"vdcGetTR.txt"}} */ -{ - const u_char - *tmpBuffer = (u_char *) inpBuffer; - - *tr = (u_int8) (((tmpBuffer[2] & 2) << 6) | ((tmpBuffer[3] & 252) >> 2)); -} - - -/* {{-output"vdcIsEOSReached.txt"}} */ -/* - * vdcIsEOSReached - * - * - * Parameters: - * hInstance handle of instance data - * - * Function: - * This function returns 1 if the EOS code has been reached during - * the decoding. Otherwise, it returns 0. - * - * Returns: - * See above. - * - */ - -int vdcIsEOSReached(vdcHInstance_t hInstance) -/* {{-output"vdcIsEOSReached.txt"}} */ -{ - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - - vdcAssert(instance); - - return instance->fEOS; -} - - -/* {{-output"vdcIsINTRA.txt"}} */ -/* - * vdcIsINTRA - * - * - * Parameters: - * hInstance handle of instance data - * frameStart pointer to memory chunk containing a frame - * frameLength number of bytes in frame - * - * Function: - * This function returns 1 if the passed frame is an INTRA frame. - * Otherwise the function returns 0. - * - * Returns: - * See above. - * - * - */ - -int vdcIsINTRA( - vdcHInstance_t hInstance, - void *frameStart, - unsigned frameLength) -/* {{-output"vdcIsINTRA.txt"}} */ -{ - bibBuffer_t *tmpBitBuffer; - int fINTRA = 0, bitErrorIndication, syncCode, vdxStatus; - int16 error = 0; - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - vdxGetPictureHeaderInputParam_t vdxIn; - vdxPictureHeader_t vdxOut; - - vdcAssert(instance); - - tmpBitBuffer = bibCreate(frameStart, frameLength, &error); - if (!tmpBitBuffer || error) - return 0; - - syncCode = sncCheckSync(tmpBitBuffer, &(vdxIn.numStuffBits), &error); - - if (syncCode == SNC_PSC && error == 0) { - - /* Note: Needs to be changed when support for custom PCF or scalability mode - is added */ - vdxIn.fCustomPCF = 0; - vdxIn.fScalabilityMode = 0; - vdxIn.fRPS = instance->fRPS; - vdxIn.flushBits = bibFlushBits; - vdxIn.getBits = bibGetBits; - vdxIn.showBits = bibShowBits; - - vdxStatus = vdxGetPictureHeader(tmpBitBuffer, &vdxIn, &vdxOut, - &bitErrorIndication); - - if (vdxStatus >= 0 && bitErrorIndication == 0) - fINTRA = (vdxOut.pictureType == VDX_PIC_TYPE_I); - } - - bibDelete(tmpBitBuffer, &error); - - return fINTRA; -} - - -/* {{-output"vdcIsINTRAGot.txt"}} */ -/* - * vdcIsINTRAGot - * - * - * Parameters: - * hInstance handle of instance data - * - * Function: - * This function returns 1 if the an INTRA frame has been decoded - * during the lifetime of the instance. Otherwise, it returns 0. - * - * Returns: - * See above. - * - * - */ - -int vdcIsINTRAGot(vdcHInstance_t hInstance) -/* {{-output"vdcIsEOSReached.txt"}} */ -{ - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - - vdcAssert(instance); - - return instance->fIntraGot; -} - - -/* {{-output"vdcLoad.txt"}} */ -/* - * vdcLoad - * - * - * Parameters: - * None. - * - * Function: - * This function initializes the Video Decoder Core module meaning - * all the data common to all Video Decoder Core instances. - * vdcLoad has to be called before any other function of this module - * is used. - * - * Returns: - * >= 0 if succeeded - * < 0 if failed - * - * - */ - -int vdcLoad(void) -/* {{-output"vdcLoad.txt"}} */ -{ - if (dblLoad() < 0) - return VDC_ERR; - - return VDC_OK; -} - - -/* {{-output"vdcOpen.txt"}} */ -/* - * vdcOpen - * - * - * Parameters: - * imageStore pointer to image store instance - * numReferenceFrames 1 if the Reference Picture Selection (RPS) - * mode (Annex N) should not be used, - * >1 tells how many reference images - * are stored in the RPS mode - * fudInstance pointer to Fast Update module instance - * hParent handle of Video Decoder Engine instance - * that created this VDC instance - * - * Function: - * This function creates and initializes a new Video Decoder Core instance. - * - * Returns: - * a handle to the created instance, - * or NULL if the function fails - * - * - */ - -vdcHInstance_t vdcOpen( - vdeIms_t *imageStore, - int numReferenceFrames, - void *hParent) -{ - vdcInstance_t *instance; - - vdcAssert(numReferenceFrames >= 1); - - instance = (vdcInstance_t *) vdcMalloc(sizeof(vdcInstance_t)); - if (!instance) - return NULL; - memset(instance, 0, sizeof(vdcInstance_t)); - - instance->prevPicHeader = (vdxPictureHeader_t *)vdcMalloc( sizeof( vdxPictureHeader_t )); - if ( instance->prevPicHeader == NULL ) { - deb("vdcOpen, MALLOC for prevPicHeader failed.\n"); - goto errPHOpen; - } - instance->fPrevPicHeaderReliable = 1; - - instance->imageStore = imageStore; - - instance->numAnnexNScalabilityLayers = -1; /* Indicates no decoded frames */ - - instance->fGFIDShouldChange = 0; - instance->gfid = -1; - - instance->nOfDecodedFrames = 0; - - instance->hParent = hParent; - instance->snapshotStatus = -1; - - return (vdcHInstance_t) instance; - - /* Error cases: release everything in reverse order */ - errPHOpen: - - vdcDealloc(instance); - return NULL; -} -/* {{-output"vdcOpen.txt"}} */ - - -/* {{-output"vdcRestartVideo.txt"}} */ -/* - * vdcRestartVideo - * - * - * Parameters: - * hInstance handle of instance data - * - * Function: - * Resets the instance data but does not deallocate the allocated buffers. - * After this function vdcDecodeFrame can be called as if no data for this - * instance has been decoded. - * - * Note: - * This function is obsolete and not used anymore. If it is needed again, - * it should be re-implemented. - * - * Returns: - * Nothing - * - * - */ - -void vdcRestartVideo(vdcHInstance_t hInstance) -/* {{-output"vdcRestartVideo.txt"}} */ -{ - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - - if (instance) - memset(instance, 0, sizeof(vdcInstance_t)); -} - - - - - -/* - * Local functions - */ - -/* - * vdcFillCommonPartsOfImb - * - * - * Parameters: - * instance instance data - * numOfCodedMBs number of coded macroblocks - * imb pointer to image buffer to fill - * - * Function: - * This function fills the passed image buffer according to the latest - * decoding results. Only those parts of the image buffer are filled - * which can be composed with the presence of another image buffer, - * e.g. the P image buffer corresponding to the B image buffer. - * - * Returns: - * Nothing - * - * - */ - -static void vdcFillCommonPartsOfImb( - vdcInstance_t *instance, - int numOfCodedMBs, - vdeImb_t *imb) -{ - vdcAssert(imb); - vdcAssert(instance); - - imb->drawItem->param.dwFlags = 0; - imb->drawItem->param.lTime = instance->frameNum; - - /* Note: for now, convert whole frame */ - imb->drawItem->extParam.flags = 0; - /* Else one could convert just coded MBs as follows: */ - /* imb->drawItem->extParam.flags = (fBPart) ? 0 : REN_EXTDRAW_NEW_SOURCE; */ - - imb->drawItem->extParam.rate = 30000; - imb->drawItem->extParam.scale = 1001; - imb->drawItem->extParam.numOfCodedMBs = numOfCodedMBs; - - /* imb->drawItem->retFrame and imb->drawItem->retFrameParam are set by - the caller */ - - imb->fReferenced = 1; - imb->tr = instance->pictureParam.tr; -} - - -/* - * vdcFillImageBuffers - * - * - * Parameters: - * instance instance data - * numOfCodedMBs number of coded macroblocks - * imbP pointer to image buffer of P or I frame - * - * Function: - * This function fills the passed image buffers according to the latest - * decoding results. - * - * Returns: - * >= 0 if the function was successful - * < 0 if an error occured - * - * - */ - -/* Codec and renderer dependent */ -int vdcFillImageBuffers( - vdcInstance_t *instance, - int numOfCodedMBs, - vdeImb_t *imbP) -{ - /* Table to convert from lumiance quantization parameter to chrominance - quantization parameter if Modified Quantization (Annex T) is in use. */ - static const int yToUVQuantizer[32] = - {0,1,2,3,4,5,6,6,7,8,9,9,10,10,11,11,12, - 12,12,13,13,13,14,14,14,14,14,15,15,15, - 15,15}; - - int - firstQPIndex, /* the index of the first non-zero quantizer */ - - *yQuantParams = imbP->yQuantParams, - /* array of Y quantizers in scan-order */ - - *uvQuantParams = imbP->uvQuantParams, - /* array of UV quantizers in scan-order */ - - numMBsInPicture, /* number of macroblocks in the image */ - - i; /* loop variable */ - - vdcAssert(imbP); - vdcAssert(instance); - - /* - * Fill basic stuff - */ - - vdcFillCommonPartsOfImb(instance, numOfCodedMBs, imbP); - - /* - * Calculate quantizer arrays for loop/post-filtering - */ - - numMBsInPicture = instance->pictureParam.lumMemWidth * - instance->pictureParam.lumMemHeight / 256; - - /* Get the index of the first non-zero quantizer in scan-order */ - for (firstQPIndex = 0; firstQPIndex < numMBsInPicture; firstQPIndex++) { - if (yQuantParams[firstQPIndex] > 0) - break; - } - - /* Assert that at least one macroblock is decoded successfully */ - vdcAssert(firstQPIndex < numMBsInPicture); - - /* Replace the first zero quantizers with the first non-zero quantizer - (in scan-order) */ - for (i = 0; i < firstQPIndex; i++) - yQuantParams[i] = yQuantParams[firstQPIndex]; - - /* Replace all other zero quantizers with the predecessor (in scan-order) */ - for (i = firstQPIndex; i < numMBsInPicture; i++) { - if (yQuantParams[i] == 0) - yQuantParams[i] = yQuantParams[i - 1]; - } - - /* If Modified Quantization is in use */ - if (instance->pictureParam.fMQ) { - /* Convert Y quantizers to UV quantizers */ - for (i = 0; i < numMBsInPicture; i++) - uvQuantParams[i] = yToUVQuantizer[yQuantParams[i]]; - } - else - /* Copy Y quantizers to UV quantizers */ - memcpy(uvQuantParams, yQuantParams, numMBsInPicture * sizeof(int)); - - - return VDC_OK; -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/core_mpeg.cpp --- a/videoeditorengine/h263decoder/src/core_mpeg.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,671 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* MPEG-4 decoder core functions. -* -*/ - - -/* - * Includes - */ -#include "h263dConfig.h" -#include "vdc263.h" -#include "core.h" -#include "debug.h" -#include "decblock.h" /* for dblFree and dblLoad */ -#include "decvp_mpeg.h" -#include "decpich.h" -#include "h263dapi.h" /* for H263D_BC_MUX_MODE_SEPARATE_CHANNEL and H263D_ERD_ */ -#include "stckheap.h" -#include "sync.h" -#include "vdeims.h" -#include "vdeimb.h" -#include "viddemux.h" -#include "biblin.h" -/* MVE */ -#include "MPEG4Transcoder.h" - - -/* - * Typedefs and structs - */ - -/* This structure is used to indicate the expected decoding position. */ -typedef enum { - EDP_START_OF_FRAME, - EDP_START_OF_VIDEO_PACKET, - EDP_END_OF_FRAME -} vdcExpectedDecodingPosition_t; - - -/* - * Local function prototypes - */ - -extern int vdcFillImageBuffers( - vdcInstance_t *instance, - int numOfCodedMBs, - vdeImb_t *imbP); - - -/* - * Global functions - */ - -/* {{-output"vdcDecodeMPEGVolHeader.txt"}} */ -/* - * vdcDecodeMPEGVolHeader - * - * - * Parameters: - * None. - * - * Function: - * This function reads the VOL Header and updates the instance data - * with the read parameters. - * - * Returns: - * >= 0 if succeeded - * < 0 if failed - * - */ - -int vdcDecodeMPEGVolHeader(vdcHInstance_t hInstance, bibBuffer_t *inBuffer, CMPEG4Transcoder *hTranscoder) -/* {{-output"vdcDecodeMPEGVolHeader.txt"}} */ -{ - dphInOutParam_t pichInOut; - int headerSuccess = 0; - - pichInOut.vdcInstance = (vdcInstance_t *) hInstance; - pichInOut.inBuffer = inBuffer; - - headerSuccess = dphGetMPEGVolHeader(&pichInOut, hTranscoder); - if (headerSuccess != 0) - return VDC_ERR; - else - return VDC_OK; -} - - -/* {{-output"vdcDecodeMPEGVop.txt"}} */ -/* - * vdcDecodeMPEGVop - * - * - * Parameters: - * hInstance handle of instance data - * - * inBuffer pointer to bit buffer, the current position - * of the buffer must start with a PSC - * - * Function: - * The vdcDecodeMPEGVop function implements the decoding process of the MPEG-4 - * Simple Video Object described in ISO/IEC 14496-2. - * - * The function decodes the next frame in the buffer (inBuffer) meaning that - * the decoding continues until the next VOP start code or EOB is found or - * until the end of the buffer is not reached. - * - * Returns: - * VDC_OK if the function was succesful - * VDC_OK_BUT_BIT_ERROR if bit errors were detected but - * decoded frames are provided by concealing - * the errors - * VDC_OK_BUT_FRAME_USELESS if severe bit errors were detected - * (no concealment was possible) or - * the bitstream ended unexpectedly - * VDC_ERR if a processing error occured, - * the instance should be closed - * - */ -int vdcDecodeMPEGVop(vdcHInstance_t hInstance, bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, int aColorEffect, TBool aGetDecodedFrame, - int aStartByteIndex, int aStartBitIndex, - CMPEG4Transcoder *hTranscoder) -/* {{-output"vdcDecodeMPEGVop.txt"}} */ -{ - int sncCode; /* the latest synchronization code, see - sncCheckSync for the possible values */ - - int retValue = VDC_OK; /* return value of this function */ - - int16 error = 0; - - u_char - *currYFrame = NULL, /* current P frame */ - *currUFrame = NULL, - *currVFrame = NULL, - *refYFrame = NULL, /* reference frame */ - *refUFrame = NULL, - *refVFrame = NULL; - - u_char *fCodedMBs = NULL; /* Pointer to table, which indicates coded \ - macroblocks by non-zero value */ - int numOfCodedMBs = 0; /* The number of coded macroblocks */ - - int *quantParams = NULL; /* Pointer to table, in which the quantization - parameter for each macroblock is stored */ - - int currMBNum = 0; /* Current macro block */ - - int decStatus = 0; - int corruptedVPs = 0; - int numberOfVPs = 1; - int headerSuccess = 0; - u_char fVOPHeaderCorrupted = 0, fVOPHeaderLost = 0; - - vdcExpectedDecodingPosition_t expectedDecodingPosition; - /* Tells in which part of the bitstream - the decoding should be */ - - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - /* instance data */ - - vdcAssert(instance != NULL); - - /* Initializations */ - - instance->currFrame = NULL; - expectedDecodingPosition = EDP_START_OF_FRAME; - - /* Main loop */ - for (;;) { - int bitErrorIndication = 0; - - sncCode = sncCheckMpegSync(inBuffer, instance->pictureParam.fcode_forward, &error); - - /* If sncCheckSync failed */ - if (error && error != ERR_BIB_NOT_ENOUGH_DATA) { - deb1p("vdcDecodeMPEGVop: ERROR - sncCheckSync returned %d.\n", error); - retValue = VDC_ERR; - goto exitFunction; - } - - /* If EOS was got */ - if (sncCode == SNC_EOB) - instance->fEOS = 1; - - /* If frame ends appropriately */ - if (expectedDecodingPosition == EDP_END_OF_FRAME && - (sncCode == SNC_VOP || sncCode == SNC_GOV || sncCode == SNC_EOB || - sncCode == SNC_STUFFING || error == ERR_BIB_NOT_ENOUGH_DATA)) - goto exitFunction; - - /* Else if frame (or stream) data ends suddenly */ - else if (error == ERR_BIB_NOT_ENOUGH_DATA) { - retValue = VDC_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* Else if EOS was reached */ - else if (sncCode == SNC_EOB) { - /* The current frame is useless since it ends before it is complete. - On the other hand, there is no point in concealing it since - it is the last frame of the sequence. */ - goto exitFunction; - } - - /* Else if frame starts as expected */ - else if (expectedDecodingPosition == EDP_START_OF_FRAME && - ((sncCode == SNC_GOV) || (sncCode == SNC_VOP) || fVOPHeaderLost)) { - - dphInParam_t pichIn; - dphInOutParam_t pichInOut; - dphOutParam_t pichOut; - - if (sncCode == SNC_GOV) { - vdxGovHeader_t govHeader; - - headerSuccess = vdxGetGovHeader(inBuffer, &govHeader, &bitErrorIndication); - if ( headerSuccess < 0) { - retValue = VDC_ERR; - goto exitFunction; - } else if (( headerSuccess > 0 ) || - (govHeader.time_stamp < instance->pictureParam.mod_time_base) || - (govHeader.time_stamp - instance->pictureParam.mod_time_base > 60)) { - - if(sncCheckMpegVOP(inBuffer, &error) != SNC_PSC) { - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - } - - } else { - instance->pictureParam.mod_time_base = govHeader.time_stamp; - - /* copying the user data */ - if (govHeader.user_data != NULL) { - - if (!instance->user_data) - instance->user_data = (char *) vdcMalloc( - MAX_USER_DATA_LENGTH); - - govHeader.user_data_length = - ((instance->user_data_length + govHeader.user_data_length) >= MAX_USER_DATA_LENGTH) ? - (MAX_USER_DATA_LENGTH - instance->user_data_length) : govHeader.user_data_length; - memcpy( - instance->user_data + instance->user_data_length, - govHeader.user_data, - govHeader.user_data_length); - instance->user_data_length += govHeader.user_data_length; - - vdcDealloc(govHeader.user_data); - } - - } - } - - /* Start VOP decoding */ - pichIn.fReadBits = (fVOPHeaderLost ? 0 : 1); - pichIn.fNeedDecodedFrame = aGetDecodedFrame | hTranscoder->NeedDecodedYUVFrame(); - pichInOut.vdcInstance = instance; - pichInOut.inBuffer = inBuffer; - - /* Get VOP header */ - headerSuccess = dphGetMPEGVopHeader(&pichIn, &pichInOut, &pichOut, &bitErrorIndication); - - deb1p("vdcDecodeMPEGVop: frameNum %d.\n", instance->frameNum); - if ( headerSuccess < 0) { - retValue = VDC_ERR; - goto exitFunction; - } else if ( headerSuccess > 0 ) { - - if (headerSuccess == DPH_OK_BUT_BIT_ERROR) { - /* find the next resync marker, to get the number of MBs in the current VP */ - sncCode = sncRewindAndSeekNewMPEGSync(-1, inBuffer, instance->pictureParam.fcode_forward, &error); - if (error && error != ERR_BIB_NOT_ENOUGH_DATA) { - retValue = VDC_ERR; - goto exitFunction; - } - - if (sncCode == SNC_VIDPACK) { - fVOPHeaderCorrupted = 1; - } else { - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - } - - } else if (headerSuccess == DPH_OK_BUT_NOT_CODED) { - - /* MVE */ - /* copy VOP header to output buffer in case VOP is not coded, including the GOV */ - bufEdit->copyMode = CopyWhole; /* copyWhole */ - CopyStream(inBuffer,outBuffer,bufEdit, aStartByteIndex, aStartBitIndex); - - /* behaves the same as if the frame was useless, but it's just not coded */ - retValue = VDC_OK_BUT_NOT_CODED; - goto exitFunction; - } - } - - - currYFrame = pichOut.currYFrame; - currUFrame = pichOut.currUFrame; - currVFrame = pichOut.currVFrame; - - currMBNum = 0; - - numOfCodedMBs = 0; - fCodedMBs = renDriCodedMBs(instance->currFrame->imb->drawItem); - memset(fCodedMBs, 0, renDriNumOfMBs( - instance->currFrame->imb->drawItem) * sizeof(u_char)); - - /* Initialize quantization parameter array */ - quantParams = instance->currFrame->imb->yQuantParams; - memset(quantParams, 0, renDriNumOfMBs( - instance->currFrame->imb->drawItem) * sizeof(int)); - - /* If this is the first frame and callback function has been set, report frame size */ - if (instance->nOfDecodedFrames == 0 && instance->reportPictureSizeCallback) { - h263dReportPictureSizeCallback_t cb = - (h263dReportPictureSizeCallback_t)instance->reportPictureSizeCallback; - cb(instance->hParent, instance->pictureParam.lumWidth, instance->pictureParam.lumHeight); - } - - /* Decode the 1st VP segment */ - { - dvpVPInParam_t dvpi; - dvpVPInOutParam_t dvpio; - - dvpi.pictParam = &instance->pictureParam; - dvpi.inBuffer = inBuffer; - dvpi.outBuffer = outBuffer; - dvpi.bufEdit = bufEdit; - dvpi.iColorEffect = aColorEffect; - dvpi.iGetDecodedFrame = aGetDecodedFrame; - - if (fVOPHeaderLost) fVOPHeaderCorrupted = 1; - dvpi.fVOPHeaderCorrupted = fVOPHeaderCorrupted; - - dvpio.currMBNum = 0; - dvpio.quant = pichOut.pquant; - dvpio.fCodedMBs = fCodedMBs; - dvpio.numOfCodedMBs = numOfCodedMBs; - dvpio.quantParams = quantParams; - dvpio.mvcData = &instance->mvcData; - dvpio.aicData = &instance->aicData; - dvpio.imageStore = instance->imageStore; - dvpio.frameNum = instance->frameNum; - - dvpio.refY = refYFrame; - dvpio.refU = refUFrame; - dvpio.refV = refVFrame; - dvpio.currPY = currYFrame; - dvpio.currPU = currUFrame; - dvpio.currPV = currVFrame; - - /* MVE */ - hTranscoder->VOPHeaderEnded(aStartByteIndex, aStartBitIndex, - pichOut.pquant, instance->pictureParam.pictureType, - instance->frameNum, headerSuccess == DPH_OK_BUT_NOT_CODED); - /* VOP header parsing success, begin on VP */ - hTranscoder->BeginOneVideoPacket(&dvpi); - hTranscoder->AfterVideoPacketHeader(&dvpio); // the first VP does not have VPHeader - - decStatus = dvpGetAndDecodeVideoPacketContents(&dvpi, - instance->pictureParam.pictureType != VDX_PIC_TYPE_I, - &dvpio, hTranscoder); - - if (decStatus < 0) { - retValue = VDC_ERR; - goto exitFunction; - } else if (decStatus > 0 ) { - if (decStatus == DGOB_OK_BUT_FRAME_USELESS) { - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - } - corruptedVPs ++; - } - - /* MVE */ - /* the first VP ends */ - hTranscoder->OneVPEnded(); - - currMBNum = dvpio.currMBNum; - numOfCodedMBs = dvpio.numOfCodedMBs; - refYFrame = dvpio.refY; - refUFrame = dvpio.refU; - refVFrame = dvpio.refV; - - - if ((decStatus == DGOB_OK && currMBNum == instance->pictureParam.numMBsInGOB) || - (decStatus == DGOB_OK_BUT_BIT_ERROR && sncCheckMpegVOP(inBuffer, &error) == SNC_PSC)) - expectedDecodingPosition = EDP_END_OF_FRAME; - else - expectedDecodingPosition = EDP_START_OF_VIDEO_PACKET; - } - } - - /* Else if Video Packet starts as expected */ - else if (expectedDecodingPosition == EDP_START_OF_VIDEO_PACKET && - sncCode == SNC_VIDPACK) { - - dvpVPInParam_t dvpi; - dvpVPInOutParam_t dvpio; - - dvpi.pictParam = &instance->pictureParam; - dvpi.inBuffer = inBuffer; - dvpi.outBuffer = outBuffer; - dvpi.bufEdit = bufEdit; - dvpi.iColorEffect = aColorEffect; - dvpi.iGetDecodedFrame = aGetDecodedFrame; - dvpi.fVOPHeaderCorrupted = fVOPHeaderCorrupted; - - dvpio.currMBNum = currMBNum; - dvpio.fCodedMBs = fCodedMBs; - dvpio.numOfCodedMBs = numOfCodedMBs; - dvpio.quantParams = quantParams; - dvpio.mvcData = &instance->mvcData; - dvpio.aicData = &instance->aicData; - dvpio.imageStore = instance->imageStore; - - dvpio.refY = refYFrame; - dvpio.refU = refUFrame; - dvpio.refV = refVFrame; - dvpio.currPY = currYFrame; - dvpio.currPU = currUFrame; - dvpio.currPV = currVFrame; - - /* MVE */ - /* VOP header parsing success, begin on VP */ - hTranscoder->BeginOneVideoPacket(&dvpi); - - /* if the VOP header data needs to be corrected from the HEC codes set - inParam->fVOPHeaderCorrupted and pictParam values will be set + read - inOutParam->frameNum into instance->frameNum */ - decStatus = dvpGetAndDecodeVideoPacketHeader(&dvpi, &dvpio); - - /* MVE */ - /* After parsing the VP header */ - hTranscoder->AfterVideoPacketHeader(&dvpio); - - if (decStatus < 0) { - retValue = VDC_ERR; - goto exitFunction; - } else if (decStatus > 0) { - - if (fVOPHeaderCorrupted) { - /* this is also true when the whole packet with the VOP header is lost */ - - if (dvpio.frameNum <= instance->frameNum) { - /* VOP header could not be recovered from HEC (there was no HEC) - or there was an error in the VP header: in this case should we try to recover - VOP header from the next VP instead of the exiting here? */ - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - - } else { - /* VOP header was succesfully recovered from HEC, - the first VP is treated as corrupted or lost */ - instance->frameNum = dvpio.frameNum; - - } - } else if (currMBNum < dvpio.currMBNum) { - /* when there was no bit-error in the VP header and the MB counter shows difference - we know, that a whole VP was lost */ - - corruptedVPs++; - numberOfVPs++; - - - } - } - - numberOfVPs++; - - if (!decStatus) { - - - decStatus = dvpGetAndDecodeVideoPacketContents(&dvpi,0,&dvpio, hTranscoder); - if (decStatus < 0) { - retValue = VDC_ERR; - goto exitFunction; - } else if (decStatus > 0 ) { - if (decStatus == DGOB_OK_BUT_FRAME_USELESS) { - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - } - corruptedVPs++; - } - - } - - /* MVE */ - hTranscoder->OneVPEnded(); - - currMBNum = dvpio.currMBNum; - numOfCodedMBs = dvpio.numOfCodedMBs; - - if ((decStatus == DGOB_OK && currMBNum == instance->pictureParam.numMBsInGOB) || - (decStatus == DGOB_OK_BUT_BIT_ERROR && sncCheckMpegVOP(inBuffer, &error) == SNC_PSC)) - expectedDecodingPosition = EDP_END_OF_FRAME; - else { - expectedDecodingPosition = EDP_START_OF_VIDEO_PACKET; - if (fVOPHeaderCorrupted) fVOPHeaderCorrupted=0; - } - } - - /* Else decoding is out of sync */ - else { - switch (expectedDecodingPosition) { - - case EDP_START_OF_FRAME: - if (sncCode == SNC_VIDPACK) { - /* VP start code instead of VOP start code -> - packet including VOP header is lost */ - fVOPHeaderLost = 1; - continue; - } else { - /* No start code */ - retValue = VDC_OK_BUT_FRAME_USELESS; - goto exitFunction; - } - - case EDP_START_OF_VIDEO_PACKET: - /* If the decoding gets out of sync, the next sync code is - seeked in dvpGetAndDecodeVideoPacketContents. Then, if - the frame ends instead of a new VP header, we are here. */ - - /* Mark the missing VP corrupted */ - { - numberOfVPs++; - corruptedVPs++; - - } - - retValue = VDC_OK_BUT_BIT_ERROR; - goto exitFunction; - - case EDP_END_OF_FRAME: - /* Too much data */ - retValue = VDC_OK_BUT_BIT_ERROR; - goto exitFunction; - } - } - } - - - -exitFunction: - - /* MVE */ - hTranscoder->VOPEnded(); - - if (sncCheckMpegSync(inBuffer, instance->pictureParam.fcode_forward, &error) == SNC_EOB) { - instance->fEOS = 1; - } - - /* If frame(s) not useless */ - if (retValue == VDC_OK || retValue == VDC_OK_BUT_BIT_ERROR) { - - /* If bit errors */ - if (corruptedVPs) { - retValue = VDC_OK_BUT_FRAME_USELESS; - } - - if ( retValue != VDC_OK_BUT_FRAME_USELESS ) { - - if ( instance->nOfDecodedFrames < 0xffffffff ) - instance->nOfDecodedFrames++; - if (vdcFillImageBuffers(instance, numOfCodedMBs, - instance->currFrame->imb) < 0) - retValue = VDC_ERR; - - } - } - - /* If a fatal error occurred */ - if (retValue < 0) { - /* Return frame buffers for decoded output images, - as they are useless for the caller and - as the caller cannot get a handle to return them */ - if (instance->currFrame) - vdeImsPutFree(instance->imageStore, instance->currFrame); - } - - return retValue; -} - - -/* {{-output"vdcIsMPEGINTRA.txt"}} */ -/* - * vdcIsMPEGINTRA - * - * - * Parameters: - * hInstance handle of instance data - * frameStart pointer to memory chunk containing a frame - * frameLength number of bytes in frame - * - * Function: - * This function returns 1 if the passed frame is an INTRA frame. - * Otherwise the function returns 0. - * - * Returns: - * See above. - * - * - */ - -int vdcIsMPEGINTRA( - vdcHInstance_t hInstance, - void *frameStart, - unsigned frameLength) -/* {{-output"vdcIsINTRA.txt"}} */ -{ - bibBuffer_t *tmpBitBuffer; - int fINTRA = 0, bitErrorIndication, syncCode, vdxStatus; - int16 error = 0; - vdcInstance_t *instance = (vdcInstance_t *) hInstance; - vdxGovHeader_t govHeader; - - vdcAssert(instance); - - tmpBitBuffer = bibCreate(frameStart, frameLength, &error); - if (!tmpBitBuffer || error) - return 0; - - syncCode = sncCheckMpegSync(tmpBitBuffer, instance->pictureParam.fcode_forward, &error); - - if ((syncCode == SNC_GOV || syncCode == SNC_VOP) && error == 0) { - vdxGetVopHeaderInputParam_t vopIn; - vdxVopHeader_t vopOut; - - if (syncCode == SNC_GOV) { - vdxStatus = vdxGetGovHeader(tmpBitBuffer, &govHeader, - &bitErrorIndication); - - if (vdxStatus < 0 || bitErrorIndication != 0) - return fINTRA; - } - - /* MVE */ - int dummy1, dummy2, dummy3, dummy4; /* not used for any processing */ - /* Get VOP header */ - vopIn.time_increment_resolution = instance->pictureParam.time_increment_resolution; - vdxStatus = vdxGetVopHeader(tmpBitBuffer, &vopIn, &vopOut, - &dummy1, &dummy2, &dummy3, &dummy4, - &bitErrorIndication); - - - if (vdxStatus >= 0 && bitErrorIndication == 0) - fINTRA = (vopOut.coding_type == VDX_VOP_TYPE_I); - } - - bibDelete(tmpBitBuffer, &error); - - return fINTRA; -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/decblock.cpp --- a/videoeditorengine/h263decoder/src/decblock.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,184 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Block decoding functions. -* -*/ - - - -#include "h263dConfig.h" - -#include "decblock.h" -#include "blkfunc.h" -#include "viddemux.h" -#include "idct.h" - - -/* {{-output"dblfree.txt"}} */ -/* - * dblFree - * - * - * Parameters: - * None. - * - * Function: - * This function deinitializes the module. - * Any functions of this module must not be called after dblFree (except - * for dblLoad). - * - * Returns: - * >= 0 if succeeded - * < 0 if failed - * - */ - -int dblFree(void) -/* {{-output"dblfree.txt"}} */ -{ - return 0; -} - - -/* {{-output"dblload.txt"}} */ -/* - * dblLoad - * - * - * Parameters: - * None. - * - * Function: - * This function initializes the module. - * dblLoad has to be called before any other function of this module - * is used. - * - * Returns: - * >= 0 if succeeded - * < 0 if failed - * - */ - -int dblLoad(void) -/* {{-output"dblload.txt"}} */ -{ - return 0; -} - - -/* {{-output"dblIdctAndDequant.txt"}} */ -/* - * dblIdctAndDequant - * - * Parameters: - * block block array (length 64) - * quant quantization information - * skip must be 1 if INTRADC is in the block, otherwise 0 - * - * Function: - * This function makes the dequantization, the clipping and the inverse - * cosine transform for the given block. - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -void dblIdctAndDequant(int *block, int quant, int skip) -/* {{-output"dblIdctAndDequant.txt"}} */ -{ - - int rec, i, *tmpBlock, level; - - /* See section 6.2.1 of H.263 Recommendation for Inverse Quantization - formulas. */ - - /* If odd quantization parameter */ - if (quant & 1) { - - for (i = 64 - skip, tmpBlock = block + skip; i; i--, tmpBlock++) { - - if (!(*tmpBlock)) - continue; - - level = *tmpBlock; - - if (level > 0) { - rec = quant * ((level << 1) + 1); - *tmpBlock = (rec < 2048) ? rec : 2047; - } - - else { - rec = -(quant * (((-level) << 1) + 1)); - *tmpBlock = (rec < -2048) ? -2048 : rec; - } - } - } - - /* Else even quantization parameter */ - else { - - /* For loop copy-pasted from the previous case due to speed - optimization */ - for (i = 64 - skip, tmpBlock = block + skip; i; i--, tmpBlock++) { - - if (!(*tmpBlock)) - continue; - - level = *tmpBlock; - - if (level > 0) { - rec = quant * ((level << 1) + 1) - 1; - *tmpBlock = (rec < 2048) ? rec : 2047; - } - - else { - rec = -(quant * (((-level) << 1) + 1) - 1); - *tmpBlock = (rec < -2048) ? -2048 : rec; - } - } - } - idct(block); -} - - -/* - * dblIdct - * - * Parameters: - * block block array (length 64) - * - * Function: - * This function makes the inverse - * cosine transform for the given block. - * - * Returns: - * Nothing. - * - * Error codes: - * None. - * - */ - -void dblIdct(int *block) - -{ - idct(block); -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/decgob.cpp --- a/videoeditorengine/h263decoder/src/decgob.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,508 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* GOB decoding functions. -* -*/ - - -/* - * Includes - */ -#include "h263dConfig.h" -#include "decgob.h" -#include "block.h" -#include "debug.h" -#include "decmbs.h" -#include "stckheap.h" -#include "sync.h" -#include "viddemux.h" -#include "biblin.h" -/* MVE */ -#include "MPEG4Transcoder.h" - - -/* - * Global functions - */ - -/* {{-output"dgobGetAndDecodeGOBSegment.txt"}} */ -/* - * dgobGetAndDecodeGOBSegment - * - * - * Parameters: - * inParam input parameters - * inOutParam input/output parameters, these parameters - * may be modified in the function - * - * Function: - * This function gets and decodes a GOB segment which should start - * with a GBSC at the current position of the bit buffer. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int dgobGetAndDecodeGOBSegment( - const dgobGOBSegmentInParam_t *inParam, - dgobGOBSegmentInOutParam_t *inOutParam, - CMPEG4Transcoder *hTranscoder) -/* {{-output"dgobGetAndDecodeGOBSegment.txt"}} */ -{ - bibBuffer_t - *inBuffer; /* Input bit buffer instance */ - - int - retValue, /* Value returned from this function */ - - fGetNewReferenceFrame, - /* 1 if the reference picture has changed from - the previous one */ - - bitErrorIndication = 0, - /* Carries bit error indication information returned - by the video demultiplexer module */ - - intraGobsMissing = 0; - /* Flag to indicate if INTRA coded GOBs are missing */ - - u_int32 - segmStart = bibNumberOfFlushedBits( inParam->inBuffer ); - /* Start bit buffer position of the GOB segment */ - - vdxGetGOBHeaderInputParam_t - vdxParam; /* Input parameters for vdxGetGOBHeader */ - - vdxGOBHeader_t - header; /* GOB header data */ - - inBuffer = inParam->inBuffer; - - /* - * Get GOB header - */ - - vdxParam.numStuffBits = inParam->numStuffBits; - vdxParam.fCustomPCF = inParam->pictParam->fCustomPCF; - vdxParam.fCPM = inParam->pictParam->cpm; - vdxParam.fRPS = inParam->pictParam->fRPS; - - if (vdxGetGOBHeader(inBuffer, &vdxParam, &header, &bitErrorIndication, - inParam->iColorEffect, &inOutParam->StartByteIndex, &inOutParam->StartBitIndex, hTranscoder) < 0) { - - deb("dgobGetAndDecodeGOBSegment: ERROR - vdxGetGOBHeader failed.\n"); - goto unexpectedError; - } - - /* - * Check header validity - */ - - if (header.gn >= inParam->pictParam->numGOBs) { - deb("dgobGetAndDecodeGOBSegment: ERROR - too big GN.\n"); - goto unexpectedError; - } - - /* If TRP present and TRP is not 8-bit if only 8-bit TRs have existed. - Note: The following condition assumes that only 8-bit TRs are allowed. */ - if (header.trpi && header.trp > 255) { - deb("dgobGetAndDecodeGOBSegment: ERROR - too big TRP.\n"); - goto unexpectedError; - } - - /* If GFID is not as expected */ - if (inOutParam->gfid >= 0 && bitErrorIndication != 0 && - ((inParam->fGFIDShouldChange && inOutParam->gfid == header.gfid) || - (!inParam->fGFIDShouldChange && inOutParam->gfid != header.gfid))) { - deb("dgobGetAndDecodeGOBSegment: ERROR - illegal GFID.\n"); - goto unexpectedError; - } - - inOutParam->prevGN = inOutParam->prevGNWithHeader = header.gn; - /* GFID was valid, and in the next GOB the gfidShouldChange flag should be 0 and GFID should be - the same as the current one */ - inOutParam->gfid = header.gfid; - - fGetNewReferenceFrame = 0; - if (inParam->pictParam->fRPS) { - /* If TRP has changed */ - if ((header.trpi && header.trp != inOutParam->trp) || - (!header.trpi && inOutParam->trp >= 0)) - fGetNewReferenceFrame = 1; - - if (header.trpi) - inOutParam->trp = header.trp; - else - inOutParam->trp = -1; - } - - /* MVE */ - hTranscoder->H263GOBSliceHeaderEnded(&header, NULL); - - - /* - * Decode GOB contents - */ - - retValue = dgobGetAndDecodeGOBSegmentContents(inParam, fGetNewReferenceFrame, - header.gquant, inOutParam, hTranscoder); - - /* MVE */ - hTranscoder->H263OneGOBSliceWithHeaderEnded(); - - - if ( intraGobsMissing && retValue == 0 ) - return DGOB_OK_BUT_BIT_ERROR; - else - return retValue; - - unexpectedError: - return DGOB_ERR; -} - - -/* {{-output"dgobGetAndDecodeGOBSegmentContents.txt"}} */ -/* - * dgobGetAndDecodeGOBSegmentContents - * - * - * Parameters: - * inParam input parameters - * fGetNewReferenceFrame non-zero if a new reference frame must be - * requested from the image store, otherwise 0 - * quant initial quantization parameter - * inOutParam input/output parameters, these parameters - * may be modified in the function - * - * Function: - * This function gets and decodes the contents of a GOB segment - * meaning that the header of the GOB (either GOB header or picture - * header) is already got and processed and the macroblocks belonging - * to the GOB segment are decoded. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int dgobGetAndDecodeGOBSegmentContents( - const dgobGOBSegmentInParam_t *inParam, - int fGetNewReferenceFrame, - int quant, - dgobGOBSegmentInOutParam_t *inOutParam, - CMPEG4Transcoder *hTranscoder) -/* {{-output"dgobGetAndDecodeGOBSegmentContents.txt"}} */ -{ - bibBuffer_t - *inBuffer; /* Input bit buffer instance */ - - - bibBuffer_t - *outBuffer; /* Output bit buffer instance */ - - bibBufferEdit_t - *bufEdit; - - int colorEffect; - TBool getDecodedFrame; - - - /* decmbs input and output parameters */ - dmbPFrameMBInParam_t dpmbi; - dmbPFrameMBInOutParam_t dpmbio; - dmbIFrameMBInParam_t dimbi; - dmbIFrameMBInOutParam_t dimbio; - - int - *pYPosInMBs, /* Pointer to variable containing the y-position - of the current macroblock in macroblocks - (starting from zero in the top row) */ - fSegmentCorrupted = 0; - /* Flag to indicate if the current GOB segment - is corrupted */ - - int16 - error = 0; /* Used to pass error codes from snc and erd modules */ - - /* Pointers to pointers pointing to the top-left corner of the current - GOB (inside the current frame) */ - u_char **pYGOB, **pUGOB, **pVGOB; - - SOH_DEFINE(blcDiffMB_t, pDiffMB); - /* Storage for the previous difference blocks */ - - inBuffer = inParam->inBuffer; - - outBuffer = inParam->outBuffer; - bufEdit = inParam->bufEdit; - colorEffect = inParam->iColorEffect; - getDecodedFrame = inParam->iGetDecodedFrame; - - - SOH_ALLOC(blcDiffMB_t, pDiffMB); - - if (pDiffMB == NULL) { - deb("dgobGetAndDecodeGOBSegmentContents: SOH_ALLOC failed.\n"); - goto unexpectedError; - } - - pDiffMB->cbpy = 0; - - /* If the reference frame changed */ - if (fGetNewReferenceFrame) { - vdeIms_t *store = inOutParam->imageStore; - vdeImsItem_t *imsItem; - vdeImb_t *imb; - int width, height; - - /* Get the reference frame */ - if (inOutParam->trp >= 0) { - if (vdeImsGetReference(store, VDEIMS_REF_TR, inOutParam->trp, &imsItem) < 0) { - deb("dgobGetAndDecodeGOBSegment: ERROR - vdeImsGetReference " - "failed.\n"); - goto unexpectedError; - } - } - - else { - if (vdeImsGetReference(store, VDEIMS_REF_LATEST, 0, &imsItem) < 0) { - deb("dgobGetAndDecodeGOBSegment: ERROR - vdeImsGetReference " - "failed.\n"); - goto unexpectedError; - } - } - - /* If no reference frame available */ - if (!imsItem) { - - /* Treat the situation like a decoding error. - This should cause error concealment and - a NACK message if Annex N is used. */ - deb("dgobGetAndDecodeGOBSegment: Warning - no reference frame " - "available.\n"); - - goto unexpectedError; - } - - if (vdeImsStoreItemToImageBuffer(imsItem, &imb) < 0) { - deb("dgobGetAndDecodeGOBSegment: ERROR - vdeImsStoreItemToImageBuffer " - "failed.\n"); - goto unexpectedError; - } - - inOutParam->rtr = imb->tr; - - if (vdeImbYUV(imb, &inOutParam->refY, &inOutParam->refU, - &inOutParam->refV, &width, &height) < 0) { - deb("dgobGetAndDecodeGOBSegment: ERROR - vdeImbYUV " - "failed.\n"); - goto unexpectedError; - } - } - - /* Preset structures for multiple macroblock decoding */ - if (inParam->pictParam->pictureType == VDX_PIC_TYPE_I) { - dimbi.inBuffer = inBuffer; - - - dimbi.outBuffer = outBuffer; - dimbi.bufEdit = bufEdit; - dimbi.iColorEffect = colorEffect; - dimbi.iGetDecodedFrame = getDecodedFrame; - dimbio.StartByteIndex = inOutParam->StartByteIndex; - dimbio.StartBitIndex = inOutParam->StartBitIndex; - - - dimbi.xPosInMBs = 0; - /* yPosInMBs set inside the loop (below) */ - dimbi.pictParam = inParam->pictParam; - dimbi.fGOBHeaderPresent = 1; - - dimbio.fCodedMBs = inOutParam->fCodedMBs; - dimbio.numOfCodedMBs = inOutParam->numOfCodedMBs; - dimbio.quant = quant; - - /* YUV pointers set iside the loop (below) */ - - pYPosInMBs = &dimbi.yPosInMBs; - pYGOB = &dimbio.yMBInFrame; - pUGOB = &dimbio.uBlockInFrame; - pVGOB = &dimbio.vBlockInFrame; - } - - else { - dpmbi.inBuffer = inBuffer; - - - dpmbi.outBuffer = outBuffer; - dpmbi.bufEdit = bufEdit; - dpmbi.iColorEffect = colorEffect; - dpmbi.iGetDecodedFrame = getDecodedFrame; - dpmbio.StartByteIndex = inOutParam->StartByteIndex; - dpmbio.StartBitIndex = inOutParam->StartBitIndex; - - - dpmbi.xPosInMBs = 0; - /* yPosInMBs set inside the loop (below) */ - dpmbi.pictParam = inParam->pictParam; - dpmbi.fGOBHeaderPresent = 1; - dpmbi.refY = inOutParam->refY; - dpmbi.refU = inOutParam->refU; - dpmbi.refV = inOutParam->refV; - dpmbi.currPY = inOutParam->currPY; - dpmbi.currPU = inOutParam->currPU; - dpmbi.currPV = inOutParam->currPV; - - dpmbio.fCodedMBs = inOutParam->fCodedMBs; - dpmbio.numOfCodedMBs = inOutParam->numOfCodedMBs; - dpmbio.quant = quant; - - /* YUV pointers set iside the loop (below) */ - dpmbio.mvcData = inOutParam->mvcData; - dpmbio.diffMB = pDiffMB; - - pYPosInMBs = &dpmbi.yPosInMBs; - pYGOB = &dpmbio.yMBInFrame; - pUGOB = &dpmbio.uBlockInFrame; - pVGOB = &dpmbio.vBlockInFrame; - } - - /* Loop forever (until the GOB segment ends) */ - for (;;) { - int dmbsRetValue; - int numMBsInCurrGOB; - int sncCode; - int numStuffBits; - int mbNumberInScanOrder; - - if ((inOutParam->prevGN == inParam->pictParam->numGOBs - 1) && - (inParam->pictParam->fLastGOBSizeDifferent)) - numMBsInCurrGOB = inParam->pictParam->numMBsInLastGOB; - else - numMBsInCurrGOB = inParam->pictParam->numMBsInGOB; - - *pYPosInMBs = inOutParam->prevGN * inParam->pictParam->numMBLinesInGOB; - - mbNumberInScanOrder = *pYPosInMBs * inParam->pictParam->numMBsInMBLine; - - /* Set pointers for the GOB (inside frame(s)) */ - if ( inOutParam->currPY != NULL ) - { - int32 yOffset, uvOffset; - - yOffset = *pYPosInMBs * 16 * inParam->pictParam->lumMemWidth; - - *pYGOB = inOutParam->currPY + yOffset; - - uvOffset = yOffset / 4; - *pUGOB = inOutParam->currPU + uvOffset; - *pVGOB = inOutParam->currPV + uvOffset; - - } - else - { - *pYGOB = NULL; - *pUGOB = NULL; - *pVGOB = NULL; - } - - /* Decode macroblocks of the current GOB */ - if (inParam->pictParam->pictureType == VDX_PIC_TYPE_I) { - dimbi.numMBsInSegment = numMBsInCurrGOB; - dmbsRetValue = dmbsGetAndDecodeIMBsInScanOrder(&dimbi, - &dimbio, &inOutParam->quantParams[mbNumberInScanOrder], hTranscoder); - - inOutParam->StartByteIndex = dimbio.StartByteIndex; - inOutParam->StartBitIndex = dimbio.StartBitIndex; - - - } - else { - dpmbi.numMBsInSegment = numMBsInCurrGOB; - dmbsRetValue = dmbsGetAndDecodePMBsInScanOrder(&dpmbi, - &dpmbio, &inOutParam->quantParams[mbNumberInScanOrder], hTranscoder); - - inOutParam->StartByteIndex = dpmbio.StartByteIndex; - inOutParam->StartBitIndex = dpmbio.StartBitIndex; - } - - if (dmbsRetValue < 0) - goto unexpectedError; - - /* Some bit errors were found inside the segment - (dpmbi/dimbi fSegmentCorrupted have the same address as fSegmentCorrupted) - Note that if no suspicious/corrupted blocks was found, but there was crc-error, - this flag is not set. However, that case will be checked if no sync code is found */ - if ( fSegmentCorrupted ) - break; - - /* Check if there is a synchronization code in the current bitstream - position */ - sncCode = sncCheckSync(inBuffer, &numStuffBits, &error); - - /* If buffer ends (in one-frame-per-one-buffer case) */ - if (error == ERR_BIB_NOT_ENOUGH_DATA) - break; - - if (error) - goto unexpectedError; - - /* If there is a synchronization code */ - if (sncCode != SNC_NO_SYNC ) - break; - - - if (inOutParam->prevGN + 1 < inParam->pictParam->numGOBs) - inOutParam->prevGN++; - - else { - deb("dgobGetAndDecodeGOBSegment: ERROR - too much frame data.\n"); - fSegmentCorrupted = 1; - break; - } - - dpmbi.fGOBHeaderPresent = 0; - dimbi.fGOBHeaderPresent = 0; - } - - /* Update coded macroblock counter */ - if (inParam->pictParam->pictureType == VDX_PIC_TYPE_I) - inOutParam->numOfCodedMBs = dimbio.numOfCodedMBs; - else - inOutParam->numOfCodedMBs = dpmbio.numOfCodedMBs; - - if (!fSegmentCorrupted) { - SOH_DEALLOC(pDiffMB); - if (inOutParam->trp >= 0) { - } - - return DGOB_OK; - } - else { - - return DGOB_OK_BUT_BIT_ERROR; - } - - unexpectedError: - SOH_DEALLOC(pDiffMB); - return DGOB_ERR; -} - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/decmb.cpp --- a/videoeditorengine/h263decoder/src/decmb.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,731 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Macroblock decoding functions. -* -*/ - - -/* - * Includes - */ -#include "h263dConfig.h" -#include "decmb.h" -#include "viddemux.h" -#include "decmbdct.h" -#include "errcodes.h" -/* MVE */ -#include "MPEG4Transcoder.h" - -/* - * Global functions - */ - -/* {{-output"dmbGetAndDecodeIFrameMB.txt"}} */ -/* - * dmbGetAndDecodeIFrameMB - * - * - * Parameters: - * inParam input parameters - * inOutParam input/output parameters, these parameters - * may be modified in the function - * fMPEG4 flag indicating if H.263 ("0") or MPEG-4 ("1") - * specific block decoding should be used - * - * Function: - * This function gets the coding parameters of a macroblock belonging - * to an INTRA frame (from the bitstream) and decodes the macroblock. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured when accessing bit buffer - * - */ - -int dmbGetAndDecodeIFrameMB( - const dmbIFrameMBInParam_t *inParam, - dmbIFrameMBInOutParam_t *inOutParam, - u_char fMPEG4, CMPEG4Transcoder *hTranscoder) -/* {{-output"dmbGetAndDecodeIFrameMB.txt"}} */ -{ - int - bitErrorIndication = 0, - /* Carries bit error indication information returned - by the video demultiplexer module */ - ret = 0; /* Used to check return values of function calls */ - - vdxGetIMBLayerInputParam_t - vdxIn; /* Input parameters for vdxGetIMBLayer */ - - vdxIMBLayer_t - mbLayer; /* Macroblock layer data */ - - int - rightOfBorder, /* There is a border on the left of the current MB */ - downOfBorder; /* There is a border on top of the current MB */ - - int StartByteIndex = inOutParam->StartByteIndex; - int StartBitIndex = inOutParam->StartBitIndex; - - inOutParam->fCodedMBs[inParam->yPosInMBs * - inParam->pictParam->numMBsInMBLine + inParam->xPosInMBs] = 1; - inOutParam->numOfCodedMBs++; - - /* Get MB layer parameters */ - - vdxIn.fMQ = inParam->pictParam->fMQ; - vdxIn.quant = inOutParam->quant; - vdxIn.fAIC = inParam->pictParam->fAIC; - vdxIn.fMPEG4 = fMPEG4; - - ret = vdxGetIMBLayer(inParam->inBuffer, inParam->outBuffer, inParam->bufEdit, inParam->iColorEffect,&StartByteIndex, &StartBitIndex, - inParam->iGetDecodedFrame, &vdxIn, &mbLayer, - &bitErrorIndication, hTranscoder); - - if ( ret <0 ) - goto error; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - goto bitError; - - /* Store output parameters */ - inOutParam->quant = mbLayer.quant; - - /* Get block layer parameters and decode them */ - - - if(fMPEG4) { - dmdMPEGIParam_t dmdIn; - - - dmdIn.inBuffer = inParam->inBuffer; - dmdIn.outBuffer = inParam->outBuffer; - dmdIn.bufEdit = inParam->bufEdit; - dmdIn.iColorEffect = inParam->iColorEffect; - dmdIn.iGetDecodedFrame = inParam->iGetDecodedFrame; - - dmdIn.cbpy = mbLayer.cbpy; - dmdIn.cbpc = mbLayer.cbpc; - dmdIn.quant = mbLayer.quant; - dmdIn.yWidth = inParam->pictParam->lumMemWidth; - dmdIn.yMBInFrame = inOutParam->yMBInFrame; - dmdIn.uBlockInFrame = inOutParam->uBlockInFrame; - dmdIn.vBlockInFrame = inOutParam->vBlockInFrame; - - dmdIn.xPosInMBs = inParam->xPosInMBs; - dmdIn.yPosInMBs = inParam->yPosInMBs; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - dmdIn.numMBLinesInGOB = inParam->pictParam->numMBLinesInGOB; - dmdIn.pictureType = inParam->pictParam->pictureType; - - inOutParam->aicData->ACpred_flag = mbLayer.ac_pred_flag; - dmdIn.aicData = inOutParam->aicData; - - dmdIn.switched = - aicIntraDCSwitch(inParam->pictParam->intra_dc_vlc_thr,mbLayer.quant); - - dmdIn.data_partitioned = 0; - dmdIn.reversible_vlc = 0; - - dmdIn.currMBNum = inOutParam->currMBNum; - - dmdIn.fTopOfVP = (u_char) (inOutParam->currMBNumInVP < inParam->pictParam->numMBsInMBLine); - dmdIn.fLeftOfVP = (u_char) (inOutParam->currMBNumInVP == 0); - dmdIn.fBBlockOut = (u_char) (inOutParam->currMBNumInVP <= inParam->pictParam->numMBsInMBLine); - - ret = dmdGetAndDecodeMPEGIMBBlocks(&dmdIn, hTranscoder); - - if ( ret < 0 ) - goto error; - else if ( ret == DMD_BIT_ERR ) - goto bitError; - - } else - - { - dmdIParam_t dmdIn; - - /* Store the coding type of the MB*/ - if ( inParam->pictParam->fAIC ) { - mvcSetBorders( - NULL, - inParam->xPosInMBs, - inParam->yPosInMBs, - (inParam->pictParam->fSS)?inParam->sliceStartMB:-1, /* If Annex K is not in use, set to -1 */ - inParam->pictParam->numMBsInMBLine, - &rightOfBorder, - &downOfBorder); - } - - - dmdIn.inBuffer = inParam->inBuffer; - - - dmdIn.outBuffer = inParam->outBuffer; - dmdIn.bufEdit = inParam->bufEdit; - dmdIn.iColorEffect = inParam->iColorEffect; - dmdIn.iGetDecodedFrame = inParam->iGetDecodedFrame; - dmdIn.StartByteIndex = inOutParam->StartByteIndex; - dmdIn.StartBitIndex = inOutParam->StartBitIndex; - - - dmdIn.cbpy = mbLayer.cbpy; - dmdIn.cbpc = mbLayer.cbpc; - dmdIn.quant = mbLayer.quant; - dmdIn.yWidth = inParam->pictParam->lumMemWidth; - dmdIn.yMBInFrame = inOutParam->yMBInFrame; - dmdIn.uBlockInFrame = inOutParam->uBlockInFrame; - dmdIn.vBlockInFrame = inOutParam->vBlockInFrame; - - dmdIn.xPosInMBs = inParam->xPosInMBs; - dmdIn.yPosInMBs = inParam->yPosInMBs; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - dmdIn.numMBLinesInGOB = inParam->pictParam->numMBLinesInGOB; - dmdIn.pictureType = inParam->pictParam->pictureType; - - dmdIn.predMode = mbLayer.predMode; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - dmdIn.fGOBHeaderPresent = inParam->fGOBHeaderPresent; - dmdIn.rightOfBorder = rightOfBorder; - dmdIn.downOfBorder = downOfBorder; - dmdIn.sumBEI = 0; - - if (!inParam->pictParam->fAIC) - ret = dmdGetAndDecodeIMBBlocks(&dmdIn, hTranscoder); - else - { - // not supported - goto error; - } - - inOutParam->StartByteIndex = dmdIn.StartByteIndex; - inOutParam->StartBitIndex = dmdIn.StartBitIndex; - - - if ( ret < 0 ) - goto error; - else if ( ret == DMD_BIT_ERR ) - goto bitError; - } - - return DMB_OK; - -bitError: - - inOutParam->fCodedMBs[inParam->yPosInMBs * - inParam->pictParam->numMBsInMBLine + inParam->xPosInMBs] = 0; - inOutParam->numOfCodedMBs--; - return DMB_BIT_ERR; - -error: - return DMB_ERR; -} - - -/* {{-output"dmbGetAndDecodePFrameMB.txt"}} */ -/* - * dmbGetAndDecodePFrameMB - * - * - * Parameters: - * inParam input parameters - * inOutParam input/output parameters, these parameters - * may be modified in the function - * fMPEG4 flag indicating if H.263 ("0") or MPEG-4 ("1") - * specific block decoding should be used - * - * Function: - * This function gets the coding parameters of a macroblock belonging - * to an INTER frame (from the bitstream) and decodes the macroblock. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured when accessing bit buffer - * - */ - -int dmbGetAndDecodePFrameMB( - const dmbPFrameMBInParam_t *inParam, - dmbPFrameMBInOutParam_t *inOutParam, - u_char fMPEG4, CMPEG4Transcoder *hTranscoder) -/* {{-output"dmbGetAndDecodePFrameMB.txt"}} */ -{ - int - bitErrorIndication = 0, - /* Carries bit error indication information returned - by the video demultiplexer module */ - sumBEI = 0, /* Sum (bit-wise OR) of bit error indications for the whole MB */ - ret, /* Used to check return values of function calls */ - mbPos, /* the position of the current macroblock, - -1 = the leftmost MB of the image, - 0 = MB is not in the border of the image, - 1 = rightmost MB of the image */ - cbpy, /* Coced block pattern for luminance */ - xPosInMBs, /* Current macroblock position in x-direction - in units of macroblocks starting from zero */ - yPosInMBs, /* Current macroblock position in y-direction - in units of macroblocks starting from zero */ - numMBsInMBLine, /* The number of macroblocks in one line */ - yHeight, /* Luminance image height in pixels */ - uvHeight, /* Chrominance image height in pixels */ - yWidth, /* Luminance image width in pixels */ - uvWidth, /* Chrominance image width in pixels */ - mbNum, /* Macroblock number within a picture starting - from zero in the top-left corner and - increasing in scan-order */ - quant; /* Current quantization parameter */ - - /* Motion vectors for P-macroblock */ - int mvx[4]; - int mvy[4]; - - - /* MVE */ - int StartByteIndex = inOutParam->StartByteIndex; - int StartBitIndex = inOutParam->StartBitIndex; - - int16 - error = 0; /* Used for return value of vdcmvc module */ - - u_char - fourMVs, /* Flag which tells if four motion vectors is - present in the current macroblock */ - mbNotCoded; /* == 1 if current macro block is not coded */ - - vdxGetPPBMBLayerInputParam_t - vdxIn; /* Input parameters for vdxGetPPBMBLayer */ - - vdxPPBMBLayer_t - mbLayer; /* Macroblock layer data */ - int - rightOfBorder, /* There is a border on the left of the current MB */ - downOfBorder; /* There is a border on top of the current MB */ - - /* Add assertions here */ - - xPosInMBs = inParam->xPosInMBs; - yPosInMBs = inParam->yPosInMBs; - numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - mbNum = yPosInMBs * numMBsInMBLine + xPosInMBs; - yHeight = inParam->pictParam->lumMemHeight; - uvHeight = (yHeight >>1 /*/ 2*/); - yWidth = inParam->pictParam->lumMemWidth; - uvWidth = (yWidth >>1 /*/ 2*/); - - /* mbPos, needed in blcCopyPredictionMB */ - if (inParam->pictParam->fSS) { - if (xPosInMBs == numMBsInMBLine - 1) - if (mbNum == inParam->sliceStartMB) - mbPos = 2; - else - mbPos = 1; - else if (mbNum == inParam->sliceStartMB) - /* if this is the first MB of the slice but not the last MB of the MB line */ - mbPos = -1; - else if (xPosInMBs == 0) - mbPos = -1; - else - mbPos = 0; - } - else { - if (xPosInMBs == 0) - mbPos = -1; - else if (xPosInMBs == numMBsInMBLine - 1) - mbPos = 1; - else - mbPos = 0; - } - - /* Get MB layer parameters */ - vdxIn.pictureType = inParam->pictParam->pictureType; - vdxIn.fPLUSPTYPE = inParam->pictParam->fPLUSPTYPE; - vdxIn.fUMV = inParam->pictParam->fUMV; - vdxIn.fDF = inParam->pictParam->fDF; - vdxIn.fMQ = inParam->pictParam->fMQ; - vdxIn.fCustomSourceFormat = inParam->pictParam->fCustomSourceFormat; - vdxIn.fAIC = inParam->pictParam->fAIC; - vdxIn.quant = inOutParam->quant; - vdxIn.fFirstMBOfPicture = (yPosInMBs == 0 && xPosInMBs == 0); - - vdxIn.fMPEG4 = fMPEG4; - - if (fMPEG4) { - vdxIn.fAP = 1; - vdxIn.f_code = inParam->pictParam->fcode_forward; - } else - - { - vdxIn.fAP = inParam->pictParam->fAP; - } - - - int mbType=3; // default - ret = vdxGetPPBMBLayer(inParam->inBuffer, inParam->outBuffer, inParam->bufEdit, inParam->iColorEffect,&StartByteIndex, &StartBitIndex, - inParam->iGetDecodedFrame, &mbType, &vdxIn, &mbLayer, &bitErrorIndication, - hTranscoder); - - if ( ret < 0 ) - goto error; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) { - goto bitError; - } - /* PB macroblock */ - if ((inParam->pictParam->pictureType == VDX_PIC_TYPE_PB) || - (inParam->pictParam->pictureType == VDX_PIC_TYPE_IPB)) { - - // PB not supported - goto error; - } /* if (PB macroblock) */ - - sumBEI |= bitErrorIndication; - - inOutParam->quant = quant = mbLayer.quant; - - cbpy = mbLayer.cbpy; - fourMVs = (u_char) (mbLayer.numMVs == 4); - - if(!fMPEG4) { - mvcSetBorders( - inOutParam->mvcData, - xPosInMBs, - yPosInMBs, - (inParam->pictParam->fSS)?inParam->sliceStartMB:-1, /* If Annex K is not in use, set to -1 */ - numMBsInMBLine, - &rightOfBorder, - &downOfBorder); - } - - if (mbLayer.fCodedMB) { - int currMVNum; - - /* Decode motion vectors */ - mbNotCoded = 0; - inOutParam->fCodedMBs[mbNum] = 1; - inOutParam->numOfCodedMBs++; - - for (currMVNum = 0; currMVNum < mbLayer.numMVs; currMVNum++) { - - if(fMPEG4) - mvcCalcMPEGMV( - inOutParam->mvcData, - mbLayer.mvdx[currMVNum], mbLayer.mvdy[currMVNum], - &mvx[currMVNum], &mvy[currMVNum], - (u_char) currMVNum, fourMVs, - (u_char) (inOutParam->currMBNumInVP < inParam->pictParam->numMBsInMBLine), - (u_char) (inOutParam->currMBNumInVP == 0), - (u_char) (inOutParam->currMBNumInVP < (inParam->pictParam->numMBsInMBLine-1)), - xPosInMBs, - yPosInMBs, - inParam->pictParam->tr, - (mbLayer.mbClass == VDX_MB_INTRA) ? MVC_MB_INTRA : MVC_MB_INTER, - &error); - else { - mvcCalcMV( - inOutParam->mvcData, - mbLayer.mvdx[currMVNum], mbLayer.mvdy[currMVNum], - &mvx[currMVNum], &mvy[currMVNum], - (u_char) currMVNum, - (u_char) (mbLayer.numMVs == 4), - (u_char) inParam->pictParam->fUMV, - (u_char) ((inParam->pictParam->fSS)?1:inParam->fGOBHeaderPresent), - xPosInMBs, - yPosInMBs, - inParam->pictParam->tr, - (mbLayer.mbClass == VDX_MB_INTRA) ? - MVC_MB_INTRA : MVC_MB_INTER, - &error, - inParam->pictParam->fPLUSPTYPE, - inParam->pictParam->fUMVLimited); - } - - /* If motion vector points illegally outside the picture, - there may be two reasons for it: - 1) bit error has occured and corrupted MVD, or - 2) encoder (e.g. /UBC) does not follow the standard. - Since we assume that encoders may violate this feature relatively - frequently, the decoder considers these cases as bit errors - only if the demultiplexer indicates a similar condition. - Note that there may be a very improbable situation where - the demultiplexer error indication has failed (it reports - no errors even though there are errors), and these bit errors - would cause an illegal motion vector. Now, we won't detect - these cases. */ - if (error == ERR_MVC_MVPTR && bitErrorIndication) - goto bitError; - else if (error && error != ERR_MVC_MVPTR) - goto error; - } - - if (mbLayer.numMVs == 1) { - mvx[1] = mvx[2] = mvx[3] = mvx[0]; - mvy[1] = mvy[2] = mvy[3] = mvy[0]; - } - } - - else { - mbNotCoded = 1; - /* Motion vectors to 0 */ - mvx[0] = mvx[1] = mvx[2] = mvx[3] = - mvy[0] = mvy[1] = mvy[2] = mvy[3] = 0; - mvcMarkMBNotCoded( - inOutParam->mvcData, - xPosInMBs, - yPosInMBs, - inParam->pictParam->tr); - inOutParam->fCodedMBs[mbNum] = 0; - cbpy = 0; - fourMVs = (u_char) (fMPEG4 ? fourMVs : inParam->pictParam->fAP); - } - - - - /* If INTER MB */ - if (mbNotCoded || mbLayer.mbClass == VDX_MB_INTER) { - dmdPParam_t dmdIn; - blcCopyPredictionMBParam_t blcCopyParam; - - dmdIn.inBuffer = inParam->inBuffer; - - - dmdIn.outBuffer = inParam->outBuffer; - dmdIn.bufEdit = inParam->bufEdit; - dmdIn.iColorEffect = inParam->iColorEffect; - dmdIn.iGetDecodedFrame = inParam->iGetDecodedFrame; - dmdIn.StartByteIndex = inOutParam->StartByteIndex; - dmdIn.StartBitIndex = inOutParam->StartBitIndex; - dmdIn.mbType = mbType; - - dmdIn.cbpy = cbpy; - dmdIn.cbpc = mbLayer.cbpc; - dmdIn.quant = quant; - dmdIn.refY = inParam->refY; - dmdIn.refU = inParam->refU; - dmdIn.refV = inParam->refV; - dmdIn.currYMBInFrame = inOutParam->yMBInFrame; - dmdIn.currUBlkInFrame = inOutParam->uBlockInFrame; - dmdIn.currVBlkInFrame = inOutParam->vBlockInFrame; - dmdIn.uvBlkXCoord = xPosInMBs * 8; - dmdIn.uvBlkYCoord = yPosInMBs * 8; - dmdIn.uvWidth = uvWidth; - dmdIn.uvHeight = uvHeight; - dmdIn.mvcData = inOutParam->mvcData; - dmdIn.mvx = mvx; - dmdIn.mvy = mvy; - dmdIn.mbPlace = mbPos; - dmdIn.fAdvancedPrediction = inParam->pictParam->fAP; - dmdIn.fMVsOverPictureBoundaries = - inParam->pictParam->fMVsOverPictureBoundaries; - dmdIn.diffMB = inOutParam->diffMB; - dmdIn.rcontrol = inParam->pictParam->rtype; - - dmdIn.fourMVs = fourMVs; - dmdIn.reversible_vlc = 0; - - dmdIn.xPosInMBs = xPosInMBs; - dmdIn.yPosInMBs = yPosInMBs; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - - /* Copy blcCopyPredictionMB parameters from input parameters */ - memcpy(&blcCopyParam, &(dmdIn.refY), sizeof(blcCopyPredictionMBParam_t)); - /* Note: In order to operate properly, this memcpy requires that - the structure members are in the same order and allocate the same - amount of space. This is not guaranteed in C! */ - - if (inParam->iGetDecodedFrame || hTranscoder->NeedDecodedYUVFrame()) - { - /* Do motion compensation */ - if (blcCopyPredictionMB(&blcCopyParam) < 0) { - /* MV was illegal => caused by bitError */ - goto bitError; - } - } - - - if (fMPEG4) { - /* Update the AIC module data, marking the MB as Inter (quant=0) */ - aicBlockUpdate (inOutParam->aicData, inOutParam->currMBNum, 0, NULL, 0, 0); - } - - - /* Store new CBPY */ - inOutParam->diffMB->cbpy = cbpy; - - /* If some prediction error blocks are coded */ - if (mbLayer.fCodedMB) { - /* Decode prediction error blocks */ - - if (fMPEG4) { - ret = dmdGetAndDecodeMPEGPMBBlocks(&dmdIn, hTranscoder); - } else - - { - ret = dmdGetAndDecodePMBBlocks(&dmdIn, hTranscoder); - } - - - inOutParam->StartByteIndex = dmdIn.StartByteIndex; - inOutParam->StartBitIndex = dmdIn.StartBitIndex; - - - if ( ret < 0) - goto error; - else if ( ret == DMD_BIT_ERR ) { - goto bitError; - } - } - - else // for the case when the MB is not coded - { - /* nothing here */ - } - - - } /* if (INTER block ) */ - - /* Else block layer decoding of INTRA macroblock */ - else { - - if (inParam->pictParam->pictureType != VDX_PIC_TYPE_PB) - mvcMarkMBIntra(inOutParam->mvcData, xPosInMBs, yPosInMBs, - inParam->pictParam->tr); - - inOutParam->diffMB->cbpy = 0; - - /* Get block layer parameters and decode them */ - - if(fMPEG4) { - dmdMPEGIParam_t dmdIn; - - dmdIn.inBuffer = inParam->inBuffer; - - /* MVE */ - dmdIn.outBuffer = inParam->outBuffer; - dmdIn.bufEdit = inParam->bufEdit; - dmdIn.iColorEffect = inParam->iColorEffect; - dmdIn.iGetDecodedFrame = inParam->iGetDecodedFrame; - - dmdIn.cbpy = cbpy; - dmdIn.cbpc = mbLayer.cbpc; - dmdIn.quant = quant; - dmdIn.yWidth = yWidth; - dmdIn.yMBInFrame = inOutParam->yMBInFrame; - dmdIn.uBlockInFrame = inOutParam->uBlockInFrame; - dmdIn.vBlockInFrame = inOutParam->vBlockInFrame; - - dmdIn.xPosInMBs = inParam->xPosInMBs; - dmdIn.yPosInMBs = inParam->yPosInMBs; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - dmdIn.numMBLinesInGOB = inParam->pictParam->numMBLinesInGOB; - dmdIn.pictureType = inParam->pictParam->pictureType; - - - inOutParam->aicData->ACpred_flag = mbLayer.ac_pred_flag; - dmdIn.aicData = inOutParam->aicData; - - dmdIn.switched = - aicIntraDCSwitch(inParam->pictParam->intra_dc_vlc_thr,mbLayer.quant); - - dmdIn.data_partitioned = 0; - dmdIn.reversible_vlc = 0; - - dmdIn.currMBNum = inOutParam->currMBNum; - - dmdIn.fTopOfVP = (u_char) - (inOutParam->currMBNumInVP < inParam->pictParam->numMBsInMBLine || - !aicIsBlockValid(inOutParam->aicData, inOutParam->currMBNum-inParam->pictParam->numMBsInMBLine)); - dmdIn.fLeftOfVP = (u_char) - (inOutParam->currMBNumInVP == 0 || - inParam->xPosInMBs == 0 || - !aicIsBlockValid(inOutParam->aicData, inOutParam->currMBNum-1)); - dmdIn.fBBlockOut = (u_char) - (inOutParam->currMBNumInVP <= inParam->pictParam->numMBsInMBLine || - inParam->xPosInMBs == 0 || - !aicIsBlockValid(inOutParam->aicData, inOutParam->currMBNum-inParam->pictParam->numMBsInMBLine-1)); - - ret = dmdGetAndDecodeMPEGIMBBlocks(&dmdIn, hTranscoder); - - if ( ret < 0 ) - goto error; - else if ( ret == DMD_BIT_ERR ) - goto bitError; - - } else - - { - dmdIParam_t dmdIn; - - dmdIn.inBuffer = inParam->inBuffer; - - dmdIn.outBuffer = inParam->outBuffer; - dmdIn.bufEdit = inParam->bufEdit; - dmdIn.iColorEffect = inParam->iColorEffect; - dmdIn.iGetDecodedFrame = inParam->iGetDecodedFrame; - dmdIn.StartByteIndex = inOutParam->StartByteIndex; - dmdIn.StartBitIndex = inOutParam->StartBitIndex; - - dmdIn.cbpy = cbpy; - dmdIn.cbpc = mbLayer.cbpc; - dmdIn.quant = quant; - dmdIn.yWidth = yWidth; - dmdIn.yMBInFrame = inOutParam->yMBInFrame; - dmdIn.uBlockInFrame = inOutParam->uBlockInFrame; - dmdIn.vBlockInFrame = inOutParam->vBlockInFrame; - - dmdIn.xPosInMBs = inParam->xPosInMBs; - dmdIn.yPosInMBs = inParam->yPosInMBs; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - dmdIn.numMBLinesInGOB = inParam->pictParam->numMBLinesInGOB; - dmdIn.pictureType = inParam->pictParam->pictureType; - - dmdIn.predMode = mbLayer.predMode; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - dmdIn.fGOBHeaderPresent = (inParam->pictParam->fSS)?1:inParam->fGOBHeaderPresent; - dmdIn.rightOfBorder = rightOfBorder; - dmdIn.downOfBorder = downOfBorder; - - if (!inParam->pictParam->fAIC) - ret = dmdGetAndDecodeIMBBlocks(&dmdIn, hTranscoder); - else - { - // not supported - goto error; - } - - inOutParam->StartByteIndex = dmdIn.StartByteIndex; - inOutParam->StartBitIndex = dmdIn.StartBitIndex; - - if ( ret < 0 ) - goto error; - else if ( ret == DMD_BIT_ERR ) - goto bitError; - } - } - - - - return DMB_OK; - -bitError: - if ( inOutParam->fCodedMBs[mbNum] ) { - inOutParam->fCodedMBs[mbNum] = 0; - inOutParam->numOfCodedMBs--; - } - return DMB_BIT_ERR; - -error: - return DMB_ERR; -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/decmbdct.cpp --- a/videoeditorengine/h263decoder/src/decmbdct.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,352 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Prediction error block decoding functions. -* -*/ - - - -/* - * Includes - */ -#include "h263dConfig.h" -#include "decmbdct.h" -#include "decblock.h" -#include "block.h" -#include "viddemux.h" -/* MVE */ -#include "MPEG4Transcoder.h" - -/* - * Globals - */ - -/* New chroma QP values in MQ mode. See Table T.1/H.263 */ -static const u_char dmdMQChromaTab[32] = {0,1,2,3,4,5,6,6,7,8,9,9,10,10, - 11,11,12,12,12,13,13,13,14,14, - 14,14,14,15,15,15,15,15}; - - -/* - * Global functions - */ - - -/* {{-output"dmdGetAndDecodeIMBBlocks.txt"}} */ -/* - * dmdGetAndDecodeIMBBlocks - * - * - * Parameters: - * param parameters needed in this function - * - * Function: - * This function gets the DCT coefficients of an INTRA macroblock - * from the bitstream, reconstructs the corresponding - * pixel-domain blocks and puts the blocks to the output frame. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured when accessing bit buffer - * - */ - -int dmdGetAndDecodeIMBBlocks( - dmdIParam_t *param, CMPEG4Transcoder *hTranscoder) -/* {{-output"dmdGetAndDecodeIMBBlocks.txt"}} */ -{ - bibBuffer_t - *inBuffer; /* Input bit buffer instance */ - - TBool getDecodedFrame; - - - int - cWidth, /* Chrominance image width in pixels */ - block[64], /* Temporal 8 x 8 block of pixels */ - i, /* Loop variable */ - chrQuant, /* Quantization parameter for chroma */ - bitErrorIndication = 0, - /* Carries bit error indication information returned - by the video demultiplexer module */ - ret = 0; /* Used to check return values of function calls */ - - u_char - *yBlockInFrame; /* Points to top-left corner of the current block - inside the current frame */ - - inBuffer = param->inBuffer; - - getDecodedFrame = param->iGetDecodedFrame; - - - yBlockInFrame = param->yMBInFrame; - cWidth = param->yWidth / 2; - - - /* Luminance blocks */ - for (i=0; i<4; i++) - { - /* MVE */ - hTranscoder->BeginOneBlock(i); - - bitErrorIndication = 0; - - /* Get DCT coefficients */ - ret = vdxGetIntraDCTBlock(inBuffer, vdxIsYCoded(param->cbpy, i + 1), - block, &bitErrorIndication, param->fMQ, param->quant); - if ( ret < 0 ) - return DMD_ERR; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - goto corruptedMB; - - /* MVE */ - hTranscoder->AddOneBlockDataToMB(i, block); - if(getDecodedFrame || hTranscoder->NeedDecodedYUVFrame()) // we need the YUV frames. - { - - dblIdctAndDequant(block, param->quant, 1); - blcBlockToFrame(block, yBlockInFrame, param->yWidth); - yBlockInFrame += 8; - if (i & 1) - yBlockInFrame += 8 * param->yWidth - 16; - } - - } /* for (y blocks) */ - - /* MVE */ - hTranscoder->BeginOneBlock(4); - - /* Chrominance blocks (U) */ - bitErrorIndication = 0; - /* Find out the value of QP for chrominance block. */ - chrQuant = (param->fMQ)?dmdMQChromaTab[param->quant]:param->quant; - - /* Get DCT coefficients */ - ret = vdxGetIntraDCTBlock(inBuffer, vdxIsUCoded(param->cbpc), - block, &bitErrorIndication, param->fMQ, chrQuant); - if ( ret < 0 ) - return DMD_ERR; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - goto corruptedMB; - - /* MVE */ - hTranscoder->AddOneBlockDataToMB(4, block); - hTranscoder->BeginOneBlock(5); - if(getDecodedFrame || hTranscoder->NeedDecodedYUVFrame()) - { - dblIdctAndDequant(block, chrQuant, 1); - blcBlockToFrame(block, param->uBlockInFrame, cWidth); - } - - /* (V) */ - bitErrorIndication = 0; - /* Get DCT coefficients */ - ret = vdxGetIntraDCTBlock(inBuffer, vdxIsVCoded(param->cbpc), - block, &bitErrorIndication, param->fMQ, chrQuant); - if ( ret < 0 ) - return DMD_ERR; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - goto corruptedMB; - - /* MVE */ - hTranscoder->AddOneBlockDataToMB(5, block); - if ( hTranscoder->TranscodingOneMB(NULL) != DMD_OK ) - { - return DMD_ERR; - } - if(getDecodedFrame || hTranscoder->NeedDecodedYUVFrame()) - { - - dblIdctAndDequant(block, chrQuant, 1); - blcBlockToFrame(block, param->vBlockInFrame, cWidth); - - } - - return DMD_OK; - -corruptedMB: - - return DMD_BIT_ERR; -} - - -/* {{-output"dmdGetAndDecodePMBBlocks.txt"}} */ -/* - * dmdGetAndDecodePMBBlocks - * - * - * Parameters: - * param parameters needed in this function - * - * Function: - * This function gets the DCT coefficients of an INTER macroblock - * from the bitstream, reconstructs the corresponding - * pixel-domain blocks and adds the blocks to the prediction frame. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured when accessing bit buffer - * - */ - -int dmdGetAndDecodePMBBlocks( - dmdPParam_t *param, CMPEG4Transcoder *hTranscoder) -/* {{-output"dmdGetAndDecodePMBBlocks.txt"}} */ -{ - bibBuffer_t - *inBuffer; /* Input bit buffer instance */ - - - TBool getDecodedFrame; - - int - yWidth, /* Luminance image width in pixels */ - block[64], /* Temporal 8 x 8 block of pixels */ - i, /* Loop variable */ - chrQuant, /* Quantization parameter for chroma */ - bitErrorIndication = 0, - /* Carries bit error indication information returned - by the video demultiplexer module */ - ret = 0; /* Used to check return values of function calls */ - - u_char - *yBlockInFrame; /* Points to top-left corner of the current block - inside the current frame */ - - inBuffer = param->inBuffer; - - - getDecodedFrame = param->iGetDecodedFrame; - - - yWidth = param->uvWidth * 2; - yBlockInFrame = param->currYMBInFrame; - - - int fEscapeCodeUsed = 0; - - /* Luminance blocks */ - for (i = 0; i < 4; i++) { - - hTranscoder->BeginOneBlock(i); - - if (vdxIsYCoded(param->cbpy, i + 1)) - { - /* Get DCT coefficients */ - ret = vdxGetDCTBlock(inBuffer, 0, 0, block, - &bitErrorIndication, 0, param->quant, &fEscapeCodeUsed); - if ( ret < 0 ) - return DMD_ERR; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - return DMD_BIT_ERR; - - /* MVE */ - hTranscoder->H263EscapeCoding(i, fEscapeCodeUsed); - hTranscoder->AddOneBlockDataToMB(i, block); - if(getDecodedFrame || hTranscoder->NeedDecodedYUVFrame()) - { - - dblIdctAndDequant(block, param->quant, 0); - - blcAddBlock(block, yBlockInFrame, - yWidth, param->mbPlace, - (u_char) param->fAdvancedPrediction, param->diffMB->block[i]); - } - } - - /* MVE */ - else - { - hTranscoder->H263EscapeCoding(i, fEscapeCodeUsed); - hTranscoder->AddOneBlockDataToMB(i, NULL); - } - - yBlockInFrame += 8; - if (i & 1) - yBlockInFrame += ((/*8 **/ yWidth<<3) - 16); - } /* for (y blocks) */ - - /* Find out the value of QP for chrominance block. */ - chrQuant = param->quant; - - hTranscoder->BeginOneBlock(4); - - /* Chrominance blocks (U) */ - if (vdxIsUCoded(param->cbpc)) - { - /* Get DCT coefficients */ - ret = vdxGetDCTBlock(inBuffer, 0, 0, block, - &bitErrorIndication, 0, param->quant, &fEscapeCodeUsed); - if ( ret < 0 ) - return DMD_ERR; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - return DMD_BIT_ERR; - - hTranscoder->H263EscapeCoding(4, fEscapeCodeUsed); - hTranscoder->AddOneBlockDataToMB(4, block); - if(getDecodedFrame || hTranscoder->NeedDecodedYUVFrame()) - { - - dblIdctAndDequant(block, chrQuant,0); - blcAddBlock(block, param->currUBlkInFrame, param->uvWidth, 0, 0, 0); - } - } - - else - { - hTranscoder->H263EscapeCoding(4, fEscapeCodeUsed); - hTranscoder->AddOneBlockDataToMB(4, NULL); - } - - hTranscoder->BeginOneBlock(5); - - /* (V) */ - if (vdxIsVCoded(param->cbpc)) - { - /* Get DCT coefficients */ - ret = vdxGetDCTBlock(inBuffer, 0, 0, block, - &bitErrorIndication, 0, param->quant, &fEscapeCodeUsed); - if ( ret < 0 ) - return DMD_ERR; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - return DMD_BIT_ERR; - - /* MVE */ - hTranscoder->H263EscapeCoding(5, fEscapeCodeUsed); - hTranscoder->AddOneBlockDataToMB(5, block); - if(getDecodedFrame || hTranscoder->NeedDecodedYUVFrame()) - { - - dblIdctAndDequant(block, chrQuant,0); - blcAddBlock(block, param->currVBlkInFrame, param->uvWidth, 0, 0, 0); - } - } - else - { - hTranscoder->H263EscapeCoding(5, fEscapeCodeUsed); - hTranscoder->AddOneBlockDataToMB(5, NULL); - } - - if ( hTranscoder->TranscodingOneMB(param) != TX_OK ) - { - return DMD_ERR; - } - return DMD_OK; - -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/decmbdct_mpeg.cpp --- a/videoeditorengine/h263decoder/src/decmbdct_mpeg.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,381 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Prediction error block decoding functions (MPEG-4). -* -*/ - - - -/* - * Includes - */ -#include "h263dConfig.h" -#include "decmbdct.h" -#include "decblock.h" -#include "block.h" -#include "viddemux.h" -/* MVE */ -#include "MPEG4Transcoder.h" - -/* - * Global functions - */ - -/* {{-output"dmdGetAndDecodeMPEGIMBBlocks.txt"}} */ -/* - * dmdGetAndDecodeMPEGIMBBlocks - * - * - * Parameters: - * param parameters needed in this function - * - * Function: - * This function gets the DCT coefficients of an INTRA macroblock - * from the bitstream, reconstructs the corresponding - * pixel-domain blocks and puts the blocks to the output frame. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured when accessing bit buffer - * - */ - -int dmdGetAndDecodeMPEGIMBBlocks( - dmdMPEGIParam_t *param, CMPEG4Transcoder *hTranscoder) -/* {{-output"dmdGetAndDecodeMPEGIMBBlocks.txt"}} */ -{ - bibBuffer_t *inBuffer; - - bibBuffer_t - *outBuffer; /* Output bit buffer instance */ - - bibBufferEdit_t - *bufEdit; - - int colorEffect; - TBool getDecodedFrame; - - int i, j, - block[64], cWidth, bitErrorIndication = 0, ret = 0; - u_char *yBlockInFrame; - int IntraDC_size, - IntraDC_delta, - DC_coeff; - - inBuffer = param->inBuffer; - outBuffer = param->outBuffer; - bufEdit = param->bufEdit; - colorEffect = param->iColorEffect; - getDecodedFrame = param->iGetDecodedFrame; - - if ( param->yMBInFrame ) - { - yBlockInFrame = param->yMBInFrame + - ((param->reversible_vlc && param->vlc_dec_direction) ? ((/*8 **/ param->yWidth<<3) + 8) : 0); - } - else - { - yBlockInFrame = NULL; - } - cWidth = (param->yWidth >>1 /*/ 2*/); - - - /* Loop through the 4 Luminance and the 2 Chrominance blocks */ - for (j=0; j<=5; j++) - { - - /* if reversible decoding, the block numbering is reverse */ - if (param->reversible_vlc && param->vlc_dec_direction) - { - i = 5-j; - } - else - { - i=j; - } - - /* MVE */ - hTranscoder->BeginOneBlock(i); - - bitErrorIndication = 0; - - /* Get Intra DC if not switched */ - if(!param->switched) { - if (param->data_partitioned) - IntraDC_delta = param->DC[i]; - else { - ret = vdxGetIntraDC(inBuffer, outBuffer, bufEdit, colorEffect, &(param->StartByteIndex), &(param->StartBitIndex), - i, &IntraDC_size, &IntraDC_delta, &bitErrorIndication); - - if ( ret < 0 ) - return DMD_ERR; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - goto corruptedMB; - } - block[0] = IntraDC_delta; - } - - /* Get DCT coefficients */ - if (((i<4) && (vdxIsYCoded(param->cbpy, i + 1))) || - ((i==4) && (vdxIsUCoded(param->cbpc))) || - ((i==5) && (vdxIsVCoded(param->cbpc)))) - { - /* if reversible VLC, also the direction of decoding is relevant */ - if (param->reversible_vlc) - { - if (!param->vlc_dec_direction) - ret = vdxGetRVLCDCTBlock(inBuffer, (!param->switched), 1, block, - &bitErrorIndication); - else - ret = vdxGetRVLCDCTBlockBackwards(inBuffer, (!param->switched), 1, block, - &bitErrorIndication); - } - else - { - ret = vdxGetMPEGIntraDCTBlock(inBuffer, (!param->switched), block, - &bitErrorIndication); - } - - if ( ret < 0 ) - return DMD_ERR; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - goto corruptedMB; - - } - /* if block is not coded */ - else - { - memset(block + (!param->switched), 0, (63 + (param->switched))* sizeof(int)); - } - - /* MVE */ - hTranscoder->AddOneBlockDataToMB(i, block); - - /* DC/AC prediction: reconstruct the Intra coefficients */ - aicDCACrecon(param->aicData, param->quant, - param->fTopOfVP, param->fLeftOfVP, param->fBBlockOut, - i, block, param->currMBNum); - - /* optimized nonlinear inverse quantization for Intra DC */ - DC_coeff = (block[0] *= aicDCScaler(param->quant,(i<4)?1:2)); - - hTranscoder->AddOneBlockDCACrecon(i, block); - - /* Update the AIC module data, with the current MB */ - aicBlockUpdate (param->aicData, param->currMBNum, i, block, - param->quant, DC_coeff); - - - if(getDecodedFrame || hTranscoder->NeedDecodedYUVFrame()) - { - /* inverse quantization and IDCT */ - dblIdctAndDequant(block, param->quant, 1); - - if (i<4) - { - blcBlockToFrame(block, yBlockInFrame, param->yWidth); - if (param->reversible_vlc && param->vlc_dec_direction) - { - yBlockInFrame -= 8; - if (i == 2) - yBlockInFrame -= ((/*8 **/ param->yWidth<<3) - 16); - } - else - { - yBlockInFrame += 8; - if (i & 1) - yBlockInFrame += ((/*8 **/ param->yWidth<<3) - 16); - } - } - else - { - blcBlockToFrame(block, ((i==4)? param->uBlockInFrame : param->vBlockInFrame) , cWidth); - } - - } - - } - /* for blocks */ - - if ( hTranscoder->TranscodingOneMB(NULL) != TX_OK ) - { - return DMD_ERR; - } - - return DMD_OK; - -corruptedMB: - - return DMD_BIT_ERR; -} - -/* {{-output"dmdGetAndDecodeMPEGPMBBlocks.txt"}} */ - -/* without the possibility to decode only Y component (#ifdef H263D_LUMINANCE_ONLY) */ -/* - * dmdGetAndDecodeMPEGPMBBlocks - * - * - * Parameters: - * param parameters needed in this function - * - * Function: - * This function gets the DCT coefficients of an INTER macroblock - * from the bitstream, reconstructs the corresponding - * pixel-domain blocks and adds the blocks to the prediction frame. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured when accessing bit buffer - * - */ - -int dmdGetAndDecodeMPEGPMBBlocks( - dmdPParam_t *param, CMPEG4Transcoder *hTranscoder) -/* {{-output"dmdGetAndDecodeMPEGPMBBlocks.txt"}} */ -{ - int i, j, - bitErrorIndication = 0, /* Carries bit error indication information returned - by the video demultiplexer module */ - ret = 0; - - bibBuffer_t *inBuffer; - - TBool getDecodedFrame; - - inBuffer = param->inBuffer; - getDecodedFrame = param->iGetDecodedFrame; - - int yWidth, block[64]; - u_char *yBlockInFrame; - int chrQuant; - - int fEscapeCodeUsed = 0; - - /* Find out the value of QP for chrominance block. */ - chrQuant = param->quant; - - yWidth = param->uvWidth <<1 /** 2*/; - if ( param->currYMBInFrame ) - { - yBlockInFrame = param->currYMBInFrame + - ((param->reversible_vlc && param->vlc_dec_direction) ? ((/*8 **/ yWidth<<3) + 8) : 0); - } - else - { - yBlockInFrame = NULL; - } - - /* Loop through the 4 Luminance and the 2 Chrominance blocks */ - for (j=0; j<=5; j++) { - - /* if reversible decoding, the block numbering is reverse */ - if (param->reversible_vlc && param->vlc_dec_direction) - { - i = 5-j; - } - else - { - i=j; - } - - /* MVE */ - hTranscoder->BeginOneBlock(i); - - if (((i<4) && (vdxIsYCoded(param->cbpy, i + 1))) || - ((i==4) && (vdxIsUCoded(param->cbpc))) || - ((i==5) && (vdxIsVCoded(param->cbpc)))) - { - - /* Get DCT coefficients */ - if (param->reversible_vlc) - { - if (!param->vlc_dec_direction) - ret = vdxGetRVLCDCTBlock(inBuffer, 0, 0, block, - &bitErrorIndication); - else - ret = vdxGetRVLCDCTBlockBackwards(inBuffer, 0, 0, block, - &bitErrorIndication); - } - else - { - ret = vdxGetDCTBlock(inBuffer, 0, 1, block, - &bitErrorIndication, 0, param->quant, &fEscapeCodeUsed); - } - if ( ret < 0 ) - return DMD_ERR; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - return DMD_BIT_ERR; - - hTranscoder->AddOneBlockDataToMB(i, block); - if(getDecodedFrame || hTranscoder->NeedDecodedYUVFrame()) // we need the YUV frames. - { - - /* IDCT & dequant */ - dblIdctAndDequant(block, ((i<4)?param->quant:chrQuant), 0); - - if (i<4) - { - - blcAddBlock(block, yBlockInFrame, - yWidth, 0, 0, 0); - } - else - { - /* U or V component */ - - blcAddBlock(block, ((i==4)? param->currUBlkInFrame : param->currVBlkInFrame), param->uvWidth, 0, 0, 0); - } - } - - } - - /* MVE */ - else - { - /* this block is not coded */ - hTranscoder->AddOneBlockDataToMB(i, NULL); - } - - - if ((i<4) && yBlockInFrame) - { - if (param->reversible_vlc && param->vlc_dec_direction) { - yBlockInFrame -= 8; - if (i == 2) - yBlockInFrame -= ((/*8 **/ yWidth<<3) - 16); - } else { - yBlockInFrame += 8; - if (i & 1) - yBlockInFrame += ((/*8 **/ yWidth<<3) - 16); - } - - } - else //u,v - { - /* nothing here */ - } - } - - - /* MVE */ - if ( hTranscoder->TranscodingOneMB(param) != TX_OK ) - { - return DMD_ERR; - } - return DMD_OK; -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/decmbs.cpp --- a/videoeditorengine/h263decoder/src/decmbs.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,186 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Multiple scan-order macroblock decoding functions. -* -*/ - - -/* - * Includes - */ -#include "h263dConfig.h" -#include "decmbs.h" -#include "viddemux.h" -/* MVE */ -#include "MPEG4Transcoder.h" - - -/* - * Global functions - */ - -/* {{-output"dmbsGetAndDecodeIMBsInScanOrder.txt"}} */ -/* - * dmbsGetAndDecodeIMBsInScanOrder - * - * Parameters: - * numMBsToDecode the number of macroblocks to decode - * inParam input parameters - * inOutParam input/output parameters, these parameters - * may be modified in the function - * quant array for storing quantization parameters - * - * Function: - * This function gets and decodes a requested number of INTRA frame - * macroblocks in scan order. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int dmbsGetAndDecodeIMBsInScanOrder( - const dmbIFrameMBInParam_t *inParam, - dmbIFrameMBInOutParam_t *inOutParam, - int *quant, CMPEG4Transcoder *hTranscoder) -/* {{-output"dmbsGetAndDecodeIMBsInScanOrder.txt"}} */ -{ - int currMBNum; - int yWidth = inParam->pictParam->lumMemWidth; - int uvWidth = yWidth / 2; - int ret = 0; - dmbIFrameMBInParam_t dmbi; - - memcpy(&dmbi, inParam, sizeof(dmbIFrameMBInParam_t)); - - for (currMBNum = 0; currMBNum < inParam->numMBsInSegment; currMBNum++) { - - hTranscoder->BeginOneMB(currMBNum + inParam->numMBsInSegment * inParam->yPosInMBs); - - ret = dmbGetAndDecodeIFrameMB(&dmbi, inOutParam, 0, hTranscoder); - if ( ret < 0) - return DMBS_ERR; - else if ( ret == DMB_BIT_ERR ) { - break; - } - - /* Store quantizer and increment array index */ - *quant = inOutParam->quant; - quant++; - - if ( inOutParam->yMBInFrame != NULL ) - { - inOutParam->yMBInFrame += 16; - inOutParam->uBlockInFrame += 8; - inOutParam->vBlockInFrame += 8; - } - dmbi.xPosInMBs++; - - if (dmbi.xPosInMBs == inParam->pictParam->numMBsInMBLine) { - if ( inOutParam->yMBInFrame != NULL ) - { - inOutParam->yMBInFrame += 15 * yWidth; - inOutParam->uBlockInFrame += 7 * uvWidth; - inOutParam->vBlockInFrame += 7 * uvWidth; - } - dmbi.xPosInMBs = 0; - dmbi.yPosInMBs++; - } - } - - hTranscoder->H263OneGOBSliceEnded(dmbi.yPosInMBs * inParam->numMBsInSegment); - - return DMBS_OK; -} - - -/* {{-output"dmbsGetAndDecodePMBsInScanOrder.txt"}} */ -/* - * dmbsGetAndDecodePMBsInScanOrder - * - * Parameters: - * numMBsToDecode the number of macroblocks to decode - * inParam input parameters - * inOutParam input/output parameters, these parameters - * may be modified in the function - * quant array for storing quantization parameters - * - * Function: - * This function gets and decodes a requested number of INTER frame - * macroblocks in scan order. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int dmbsGetAndDecodePMBsInScanOrder( - const dmbPFrameMBInParam_t *inParam, - dmbPFrameMBInOutParam_t *inOutParam, - int *quant, CMPEG4Transcoder *hTranscoder) -/* {{-output"dmbsGetAndDecodePMBsInScanOrder.txt"}} */ -{ - int currMBNum; - int yWidth = inParam->pictParam->lumMemWidth; - int uvWidth = yWidth / 2; - int ret = 0; - dmbPFrameMBInParam_t dmbi; - - memcpy(&dmbi, inParam, sizeof(dmbPFrameMBInParam_t)); - - for (currMBNum = 0; currMBNum < inParam->numMBsInSegment; currMBNum++) { - - hTranscoder->BeginOneMB(currMBNum + inParam->numMBsInSegment * inParam->yPosInMBs); - - ret = dmbGetAndDecodePFrameMB(&dmbi, inOutParam, 0, hTranscoder); - if (ret < 0) - return DMBS_ERR; - else if ( ret == DMB_BIT_ERR ) { - break; - } - - /* Store quantizer and increment array index */ - *quant = inOutParam->quant; - quant++; - - if ( inOutParam->yMBInFrame != NULL ) - { - inOutParam->yMBInFrame += 16; - inOutParam->uBlockInFrame += 8; - inOutParam->vBlockInFrame += 8; - } - dmbi.xPosInMBs++; - - if (dmbi.xPosInMBs == inParam->pictParam->numMBsInMBLine) { - if ( inOutParam->yMBInFrame != NULL ) - { - inOutParam->yMBInFrame += 15 * yWidth; - inOutParam->uBlockInFrame += 7 * uvWidth; - inOutParam->vBlockInFrame += 7 * uvWidth; - } - dmbi.xPosInMBs = 0; - dmbi.yPosInMBs++; - } - } - - hTranscoder->H263OneGOBSliceEnded(dmbi.yPosInMBs * inParam->numMBsInSegment); - - return DMBS_OK; - -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/decmbs_dp_mpeg.cpp --- a/videoeditorengine/h263decoder/src/decmbs_dp_mpeg.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1766 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* MB decoding in data partitioned mode (MPEG-4). -* -*/ - - - -/* - * Includes - */ -#include "h263dConfig.h" -#include "decmbs.h" -#include "decmbdct.h" -#include "viddemux.h" -#include "errcodes.h" -#include "sync.h" -#include "mpegcons.h" -#include "debug.h" -/* MVE */ -#include "MPEG4Transcoder.h" - -/* - * Local functions - */ - - -/* - * Global functions - */ - -/* {{-output"dmbsGetAndDecodeIMBsDataPartitioned.txt"}} */ -/* - * dmbsGetAndDecodeIMBsDataPartitioned - * - * - * Parameters: - * inParam input parameters - * inOutParam input/output parameters, these parameters - * may be modified in the function - * - * Function: - * This function gets and decodes the MBs of a data partitioned - * Video Packet in an Intra Frame. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int dmbsGetAndDecodeIMBsDataPartitioned( - dmbIFrameMBInParam_t *inParam, - dmbIFrameMBInOutParam_t *inOutParam, - int *quantParams, CMPEG4Transcoder *hTranscoder) -/* {{-output"dmbsGetAndDecodeIMBsDataPartitioned.txt"}} */ -{ - int retValue = DMBS_OK; - - int currMBNumInVP, lastMBNum, numMBsInVP, numCorrectMBs; - int yWidth = inParam->pictParam->lumMemWidth; - int uvWidth = yWidth / 2; - int bitErrorIndication = 0, ret = 0, sncCode, bitsGot, bitErrorsInPart1 = 0; - u_int32 startVPBitPos = 0, - errorBitPos = 0, - backwards_errorBitPos = 0, - nextVPBitPos = 0, - startBlockDataBitPos = 0, - DCMarkerBitPos = 0; - u_char fPart1Error=0, fPart2Error=0, fBlockError=0; - int16 error = 0; -#ifdef DEBUG_OUTPUT - FILE *rvlc_stat; -#endif - - dlst_t MBList; - vdxIMBListItem_t *MBinstance; - - vdxGetDataPartitionedIMBLayerInputParam_t vdxDPIn; - dmdMPEGIParam_t dmdIn; - - if (dlstOpen(&MBList) < 0) - return DMBS_ERR; - - /* mark the bit position at the beginning of the VP */ - startVPBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - - /* - * read the first partition: DC coefficients, etc. - */ - - vdxDPIn.intra_dc_vlc_thr = inParam->pictParam->intra_dc_vlc_thr; - vdxDPIn.quant = inOutParam->quant; - - /* MVE */ - ret = vdxGetDataPartitionedIMBLayer_Part1(inParam->inBuffer, inParam->outBuffer, - inParam->bufEdit, inParam->iColorEffect, &(inOutParam->StartByteIndex), - &(inOutParam->StartBitIndex), hTranscoder, &vdxDPIn, &MBList, - &bitErrorIndication); - - bitErrorsInPart1 = bitErrorIndication; - if (ret < 0) { - retValue = DMBS_ERR; - goto exitFunction; - } - else if (ret == VDX_OK_BUT_BIT_ERROR) { - - fPart1Error = 1; - bitErrorIndication = 0; - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - DC partition error.\n"); - } else { - DCMarkerBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - } - - /* read the next VP header to determine the number of MBs in this VP */ - if ( fPart1Error ) { - /* Stop decoding this segment */ - goto exitFunction; - } - else { - sncCode = sncRewindAndSeekNewMPEGSync( 1, - inParam->inBuffer, inParam->pictParam->fcode_forward, &error); - } - if (error) { - if (error == ERR_BIB_NOT_ENOUGH_DATA) error = 0; - else { - retValue = DMBS_ERR; - goto exitFunction; - } - } - - nextVPBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - - if (sncCode == SNC_VIDPACK) { - - vdxVideoPacketHeader_t header; - vdxGetVideoPacketHeaderInputParam_t vdxParam; - int retValue; - - vdxParam.fcode_forward = inParam->pictParam->fcode_forward; - vdxParam.time_increment_resolution = inParam->pictParam->time_increment_resolution; - vdxParam.numOfMBs = inParam->pictParam->numMBsInGOB; - - retValue = vdxGetVideoPacketHeader(inParam->inBuffer, &vdxParam, &header, &bitErrorIndication); - if (retValue < 0) { - retValue = DMBS_ERR; - goto exitFunction; - } else if (retValue == VDX_OK_BUT_BIT_ERROR) { - /* If bit error occurred */ - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - VP Header error.\n"); - bitErrorIndication = 0; - lastMBNum = 0; - } else { - lastMBNum = header.currMBNum; - } - } else { - lastMBNum = inParam->pictParam->numMBsInGOB; - } - - /* rewind the bits to the beginning of the current VP data */ - bibRewindBits(bibNumberOfFlushedBits(inParam->inBuffer) - (fPart1Error ? errorBitPos : DCMarkerBitPos), - inParam->inBuffer, &error); - - if (fPart1Error) { - /* Seek the DC_MARKER */ - if ((sncSeekBitPattern(inParam->inBuffer, MP4_DC_MARKER, MP4_DC_MARKER_LENGTH, &error) != SNC_PATTERN) || - (bibNumberOfFlushedBits(inParam->inBuffer) >= nextVPBitPos)) { - - /* rewind the bits to the beginning of the current VP data */ - bibRewindBits( VDC_MIN(bibNumberOfRewBits(inParam->inBuffer), (bibNumberOfFlushedBits(inParam->inBuffer) - startVPBitPos)), - inParam->inBuffer, &error); - - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - Part1Error && No DC marker found.\n"); - goto exitFunction; - } - } - - if ((lastMBNum <= inOutParam->currMBNum) || - (lastMBNum > inParam->pictParam->numMBsInGOB) || - (sncCode == SNC_EOB)) { - numMBsInVP = MBList.numItems; - if (fPart1Error) fPart2Error = 1; - } else - numMBsInVP = lastMBNum - inOutParam->currMBNum; - - if (numMBsInVP != MBList.numItems || fPart1Error) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - MB list length != num MBs.\n"); - if ( fPart1Error || bitErrorsInPart1 ) { - /* Discard few MBs from the end of the list, - since there are errors somewhere in the bitstream. - If the list is short due to the missing packet, - all the read MBs are likely to be OK and there is no - need to discard them */ - dlstTail(&MBList, (void **) &MBinstance); - dlstRemove(&MBList, (void **) &MBinstance); - free( MBinstance ); - if (numMBsInVP > MBList.numItems ) { - /* Take still one away */ - dlstTail(&MBList, (void **) &MBinstance); - dlstRemove(&MBList, (void **) &MBinstance); - free( MBinstance ); - } - } - if (numMBsInVP < MBList.numItems ) { - /* Discard all the extra MBs from the end of the list + 2 just to be sure, - since there are errors somewhere in the bitstream */ - while ( MBList.numItems > VDC_MAX(numMBsInVP-2,0) ) { - dlstTail(&MBList, (void **) &MBinstance); - dlstRemove(&MBList, (void **) &MBinstance); - free( MBinstance ); - } - } - fPart1Error = 1; - errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - } - - /* Flush the DC_Marker */ - bibFlushBits(MP4_DC_MARKER_LENGTH, inParam->inBuffer, &bitsGot, &bitErrorIndication, &error); - if (error) - { - retValue = DMBS_ERR; - goto exitFunction; - } - - /* - * Read the second partition header: cpby, ac_pred_flag - */ - - ret = vdxGetDataPartitionedIMBLayer_Part2(inParam->inBuffer, inParam->outBuffer, - inParam->bufEdit, inParam->iColorEffect, &(inOutParam->StartByteIndex), &(inOutParam->StartBitIndex), - &MBList, numMBsInVP, &bitErrorIndication); - if (ret < 0) { - retValue = DMBS_ERR; - goto exitFunction; - } - else if (ret == VDX_OK_BUT_BIT_ERROR) { - fPart2Error = 1; - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - Part2Error.\n"); - /* Stop decoding this segment */ - goto exitFunction; - } - - /* common input parameters for all blocks */ - dmdIn.aicData = inOutParam->aicData; - - /* MVE */ - dmdIn.inBuffer = inParam->inBuffer; - dmdIn.outBuffer = inParam->outBuffer; - dmdIn.bufEdit = inParam->bufEdit; - dmdIn.iColorEffect = inParam->iColorEffect; - dmdIn.iGetDecodedFrame = inParam->iGetDecodedFrame; - - dmdIn.yWidth = inParam->pictParam->lumMemWidth; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - dmdIn.pictureType = inParam->pictParam->pictureType; - - /* - * Read block data partition in forward direction - */ - - startBlockDataBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - - /* set block pointers to the beginning of the VP */ - dmdIn.yMBInFrame = inOutParam->yMBInFrame; - dmdIn.uBlockInFrame = inOutParam->uBlockInFrame; - dmdIn.vBlockInFrame = inOutParam->vBlockInFrame; - - dmdIn.xPosInMBs = inParam->xPosInMBs; - dmdIn.yPosInMBs = inParam->yPosInMBs; - - dmdIn.currMBNum = inOutParam->currMBNum; - - /* get the first MB of the list */ - dlstHead(&MBList, (void **) &MBinstance); - - for (currMBNumInVP = 0; currMBNumInVP < numMBsInVP; currMBNumInVP++) { - - /* if MBList is shorter then the number of MBs in the VP */ - if (MBinstance == NULL) { - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - MB list < num MBs.\n"); - goto exitFunction; - } - - /* header params. If partition 2 or AC partition contains errors, no bits are read any more - from the bitstream, but the blocks are reconstructed based only on DC values */ - dmdIn.cbpy = (fPart2Error || fBlockError) ? 0 : MBinstance->cbpy; - dmdIn.cbpc = (fPart2Error || fBlockError) ? 0 : MBinstance->cbpc; - dmdIn.quant = MBinstance->quant; - - /* AC/DC prediction params */ - dmdIn.switched = MBinstance->switched; - - dmdIn.fTopOfVP = (u_char) (currMBNumInVP < inParam->pictParam->numMBsInMBLine); - dmdIn.fLeftOfVP = (u_char) (currMBNumInVP == 0); - dmdIn.fBBlockOut = (u_char) (currMBNumInVP <= inParam->pictParam->numMBsInMBLine); - - inOutParam->aicData->ACpred_flag = (u_char) ((fPart2Error || fBlockError) ? 0 : MBinstance->ac_pred_flag); - - /* error resilience params */ - dmdIn.data_partitioned = 1; - dmdIn.DC = MBinstance->DC; - - dmdIn.reversible_vlc = inParam->pictParam->reversible_vlc; - dmdIn.vlc_dec_direction = 0; - - /* MVE */ - hTranscoder->OneIMBDataStartedDataPartitioned(MBinstance, &MBList, currMBNumInVP, dmdIn.currMBNum); - - /* get the next macroblock data */ - ret = dmdGetAndDecodeMPEGIMBBlocks(&dmdIn, hTranscoder); - - if ( ret < 0 ) { - retValue = DMBS_ERR; - goto exitFunction; - } - else if ( ret == DMD_BIT_ERR ) { - if (fPart1Error) { - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - IMB Blocks decoding error && Part1Error.\n"); - goto exitFunction; - } else { - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - IMB Blocks decoding error. Using DCs only.\n"); - fBlockError = 1; - } - } - - /* Store quantizer */ - quantParams[dmdIn.currMBNum] = MBinstance->quant; - - /* increment the block pointers and counters */ - dmdIn.currMBNum++; - if ( dmdIn.yMBInFrame != NULL ) - { - dmdIn.yMBInFrame += 16; - dmdIn.uBlockInFrame += 8; - dmdIn.vBlockInFrame += 8; - } - dmdIn.xPosInMBs++; - - if (dmdIn.xPosInMBs == inParam->pictParam->numMBsInMBLine) { - if ( dmdIn.yMBInFrame ) - { - dmdIn.yMBInFrame += 15 * yWidth; - dmdIn.uBlockInFrame += 7 * uvWidth; - dmdIn.vBlockInFrame += 7 * uvWidth; - } - dmdIn.xPosInMBs = 0; - dmdIn.yPosInMBs++; - if (dmdIn.yPosInMBs >= inParam->pictParam->numMBLinesInGOB) - break; - } - - dlstNext(&MBList, (void **) &MBinstance); - } - - if (!fPart1Error && !fPart2Error && !fBlockError) { - if (sncCode == SNC_EOB) { - inOutParam->currMBNum += numMBsInVP; - goto exitFunction; - } else { - - sncCode = sncCheckMpegSync(inParam->inBuffer, inParam->pictParam->fcode_forward, &error); - if (sncCode == SNC_NO_SYNC) { - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - After block data no start code found.\n"); - if (lastMBNum != 0) - fBlockError = 1; - } - } - } - - /* - * In case of error, read block data partition in backward direction - */ - - /* WARNING: backwards decoding of INTRA frame RVLC is disabled by setting the VP size - higher then 10. The useful VP sizes used in low bitrates allow max. 8-10 MBs per - VP, but in average 3-5 MBs. With this small amount the backwards decoding always - causes overlap of the MB counter, and the overlapped MBs must be discarded. So the - RVLC doesn't have any use. */ - - if (!fPart2Error && fBlockError && inParam->pictParam->reversible_vlc && (numMBsInVP >= 10)) { - numCorrectMBs = currMBNumInVP; - -#ifdef DEBUG_OUTPUT - { - int bitPos[6], xpos, ypos, mbnum; - - rvlc_stat = fopen("rvlc.log", "a+t"); - - fprintf(rvlc_stat, "I-VOP: (frame)(MB_first):%3d (MB_last):%3d\n", - inOutParam->currMBNum, (inOutParam->currMBNum + numMBsInVP-1)); - - for (xpos = inParam->xPosInMBs, ypos = inParam->yPosInMBs, mbnum = 0; mbnum < numCorrectMBs; mbnum++, xpos++) { - - if (xpos / inParam->pictParam->numMBsInMBLine) - xpos = 0, ypos++; - - fprintf(rvlc_stat, "fw: MB#%3d\tY0: %8d | Y1: %8d | Y2: %8d | Y3: %8d | U: %8d | V: %8d\n", - inOutParam->currMBNum+mbnum, bitPos[0], bitPos[1], bitPos[2], bitPos[3], bitPos[4], bitPos[5]); - } - } -#endif - - /* find next VP header (end of MB block data of this VP) */ - sncCode = sncRewindAndSeekNewMPEGSync(errorBitPos-startBlockDataBitPos, inParam->inBuffer, - inParam->pictParam->fcode_forward, &error); - if (error) { - if (error == ERR_BIB_NOT_ENOUGH_DATA) error = 0; - else { - retValue = DMBS_ERR; - goto exitFunction; - } - } - - if (sncCode == SNC_EOB) { - inOutParam->currMBNum += numMBsInVP; - goto exitFunction; - } - - nextVPBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - - backwards_errorBitPos = startBlockDataBitPos; - - /* rewind the stuffing bits */ - if (sncCode != SNC_NO_SYNC || !(nextVPBitPos % 8)) { - if(sncRewindStuffing(inParam->inBuffer, &error) != SNC_PATTERN) { - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - Backwards decoding, stuffing not found.\n"); - inOutParam->currMBNum = dmdIn.currMBNum; - goto exitFunction; - } - } - - /* set the block pointers and counters to the end of the VP */ - if ( dmdIn.yMBInFrame != NULL ) - { - dmdIn.yMBInFrame = inOutParam->yMBInFrame + 16 * (numMBsInVP-1); - dmdIn.uBlockInFrame = inOutParam->uBlockInFrame + 8 * (numMBsInVP-1); - dmdIn.vBlockInFrame = inOutParam->vBlockInFrame + 8 * (numMBsInVP-1); - } - else - { - dmdIn.yMBInFrame = dmdIn.uBlockInFrame = dmdIn.vBlockInFrame = NULL; - } - dmdIn.xPosInMBs = inParam->xPosInMBs + (numMBsInVP-1); - dmdIn.yPosInMBs = inParam->yPosInMBs; - - if (dmdIn.xPosInMBs / inParam->pictParam->numMBsInMBLine) { - - int numFullLines = dmdIn.xPosInMBs / inParam->pictParam->numMBsInMBLine; - - if ( dmdIn.yMBInFrame != NULL ) - { - dmdIn.yMBInFrame += 15 * yWidth * numFullLines; - dmdIn.uBlockInFrame += 7 * uvWidth * numFullLines; - dmdIn.vBlockInFrame += 7 * uvWidth * numFullLines; - } - dmdIn.xPosInMBs = dmdIn.xPosInMBs % inParam->pictParam->numMBsInMBLine; - dmdIn.yPosInMBs+=numFullLines; - } - - dmdIn.currMBNum = inOutParam->currMBNum + (numMBsInVP-1); - - /* get the last MB of the list */ - dlstTail(&MBList, (void **) &MBinstance); - - for (currMBNumInVP = numMBsInVP-1; currMBNumInVP >= 0; currMBNumInVP--) { - - /* header params */ - dmdIn.cbpy = MBinstance->cbpy; - dmdIn.cbpc = MBinstance->cbpc; - dmdIn.quant = MBinstance->quant; - - /* AC/DC prediction params */ - dmdIn.switched = MBinstance->switched; - - dmdIn.fTopOfVP = (u_char) (currMBNumInVP < inParam->pictParam->numMBsInMBLine); - dmdIn.fLeftOfVP = (u_char) (currMBNumInVP == 0); - dmdIn.fBBlockOut = (u_char) (currMBNumInVP <= inParam->pictParam->numMBsInMBLine); - - inOutParam->aicData->ACpred_flag = MBinstance->ac_pred_flag; - - /* error resilience params */ - dmdIn.data_partitioned = 1; - dmdIn.DC = MBinstance->DC; - - dmdIn.reversible_vlc = 1; - dmdIn.vlc_dec_direction = 1; - - /* get the next macroblock data */ - ret = dmdGetAndDecodeMPEGIMBBlocks(&dmdIn, hTranscoder); - - if ( ret < 0 ) { - retValue = DMBS_ERR; - goto exitFunction; - } - else if ( ret == DMD_BIT_ERR ) { - backwards_errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - Backwards decoding, IMB Blocks error.\n"); - break; - } - - - if (bibNumberOfFlushedBits(inParam->inBuffer) <= startBlockDataBitPos) { - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - Backwards decoding, block data start position reached.\n"); - break; - } - - /* deincrement the block pointers and counters */ - dmdIn.xPosInMBs--; - if (dmdIn.xPosInMBs < 0) { - if (dmdIn.yPosInMBs > 0) { - if ( dmdIn.yMBInFrame != NULL ) - { - dmdIn.yMBInFrame -= 15 * yWidth; - dmdIn.uBlockInFrame -= 7 * uvWidth; - dmdIn.vBlockInFrame -= 7 * uvWidth; - } - dmdIn.xPosInMBs = inParam->pictParam->numMBsInMBLine -1; - dmdIn.yPosInMBs--; - } else { - dmdIn.xPosInMBs = 0; - backwards_errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - break; - } - } - if ( dmdIn.yMBInFrame != NULL ) - { - dmdIn.yMBInFrame -= 16; - dmdIn.uBlockInFrame -= 8; - dmdIn.vBlockInFrame -= 8; - } - - dmdIn.currMBNum--; - dlstPrev(&MBList, (void **) &MBinstance); - } - - if (currMBNumInVP < 0) { - currMBNumInVP = 0; - backwards_errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - deb("dmbsGetAndDecodeIMBsDataPartitioned:ERROR - Backwards decoding, all MBs decoded without detected error.\n"); - } - -#ifdef DEBUG_OUTPUT - { - int bitPos[6], xpos, ypos, mbnum; - - for (xpos = dmdIn.xPosInMBs, ypos = dmdIn.yPosInMBs, mbnum = currMBNumInVP; mbnum < numMBsInVP; mbnum++, xpos++) { - - if (xpos / inParam->pictParam->numMBsInMBLine) - xpos = 0, ypos++; - - fprintf(rvlc_stat, "bw: MB#%3d\tY0: %8d | Y1: %8d | Y2: %8d | Y3: %8d | U: %8d | V: %8d\n", - inOutParam->currMBNum+mbnum, bitPos[0], bitPos[1], bitPos[2], bitPos[3], bitPos[4], bitPos[5]); - } - - fprintf(rvlc_stat, "(blk_st):%8u (fw_det):%8u (bw_det):%8u (nxt_vp):%8u\n", - startBlockDataBitPos, errorBitPos, backwards_errorBitPos, nextVPBitPos); - } -#endif - - /* strategy 1 */ - if ((backwards_errorBitPos > errorBitPos) && - (currMBNumInVP + 1 > numCorrectMBs)) { -#ifdef DEBUG_OUTPUT - fprintf(rvlc_stat, "I-VOP: strategy 1!\n\n"); -#endif - - } - /* strategy 2 */ - else if ((backwards_errorBitPos > errorBitPos) && - (currMBNumInVP + 1 <= numCorrectMBs)) { - numCorrectMBs = VDC_MAX(currMBNumInVP-1,0); - } - /* strategy 3 */ - else if ((backwards_errorBitPos <= errorBitPos) && - (currMBNumInVP + 1 > numCorrectMBs)) { -#ifdef DEBUG_OUTPUT - fprintf(rvlc_stat, "I-VOP: strategy 3!\n\n"); -#endif - - } - /* strategy 4 */ - else if ((backwards_errorBitPos <= errorBitPos) && - (currMBNumInVP + 1 <= numCorrectMBs)) { - numCorrectMBs = VDC_MAX(currMBNumInVP,0); - } - -#ifdef DEBUG_OUTPUT - fclose (rvlc_stat); -#endif - - /* if backward decoding, set the currentMB to the first MB of the next VP */ - inOutParam->currMBNum += numMBsInVP; - - } else { - /* if no error or no backward decoding, set the currentMB */ - inOutParam->currMBNum = dmdIn.currMBNum; - } - -#ifdef DEBUG_OUTPUT - if (errorBitPos) - deb_core("%08lu: MB#%3d VP Data Starts\n%08lu: DC Marker\n%08lu: DCT data starts\n%08lu: MB#%3d Next VP/VOP Header\n%08lu: Fw Error Detected\n%08lu: Bw Error Detected\n", - startVPBitPos, (inParam->yPosInMBs*inParam->pictParam->numMBsInMBLine + inParam->xPosInMBs), - DCMarkerBitPos, startBlockDataBitPos, nextVPBitPos, lastMBNum, - errorBitPos,backwards_errorBitPos); -#endif - -exitFunction: - - deb1p("dmbsGetAndDecodeIMBsDataPartitioned:Finished.\n",inOutParam->currMBNum); - /* Free the MB list */ - if (MBList.numItems != 0) - { - dlstHead(&MBList, (void **) &MBinstance); - dlstRemove(&MBList, (void **) &MBinstance); - while (MBinstance != NULL) { - free(MBinstance); - dlstRemove(&MBList, (void **) &MBinstance); - } - dlstClose(&MBList); - } - - return retValue; -} - - -/* {{-output"dmbsGetAndDecodePMBsDataPartitioned.txt"}} */ -/* - * dmbsGetAndDecodePMBsDataPartitioned - * - * - * Parameters: - * inParam input parameters - * inOutParam input/output parameters, these parameters - * may be modified in the function - * - * Function: - * This function gets and decodes the MBs of a data partitioned - * Video Packet in an Inter Frame. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int dmbsGetAndDecodePMBsDataPartitioned( - const dmbPFrameMBInParam_t *inParam, - dmbPFrameMBInOutParam_t *inOutParam, - int *quantParams, CMPEG4Transcoder *hTranscoder) -/* {{-output"dmbsGetAndDecodePMBsDataPartitioned.txt"}} */ -{ - int currMBNumInVP, currMBNum, numMBsInVP, lastMBNum, numCorrectMBs, numCorrectBackwardsMBs = 0; - int xPosInMBs, yPosInMBs; - int yWidth = inParam->pictParam->lumMemWidth; - int uvWidth = yWidth / 2; - int bitErrorIndication = 0, - ret = 0, sncCode, bitsGot, - bitErrorsInPart1 = 0; - u_int32 errorBitPos = 0, - backwards_errorBitPos = 0, - nextVPBitPos = 0, - startBlockDataBitPos = 0, - motionMarkerBitPos = 0; - u_char fPart1Error=0, fPart2Error=0, fBlockError=0; - u_char *currYMBInFrame, *currUBlkInFrame, *currVBlkInFrame; - u_char fourMVs = 0; -#ifdef DEBUG_OUTPUT - FILE *rvlc_stat; -#endif - - int16 error = 0; - - dlst_t MBList; - vdxPMBListItem_t *MBinstance; - - vdxGetDataPartitionedPMBLayerInputParam_t vdxDPIn; - - if (dlstOpen(&MBList) < 0) - return DMBS_ERR; - - currMBNum = inParam->yPosInMBs*inParam->pictParam->numMBsInMBLine + inParam->xPosInMBs; - - /* Store initial quantizer */ - quantParams[currMBNum] = inOutParam->quant; - - /* - * read the first partition: DC coefficients, etc. - */ - - vdxDPIn.intra_dc_vlc_thr = inParam->pictParam->intra_dc_vlc_thr; - vdxDPIn.quant = inOutParam->quant; - vdxDPIn.f_code = inParam->pictParam->fcode_forward; - - ret = vdxGetDataPartitionedPMBLayer_Part1(inParam->inBuffer, inParam->outBuffer, - inParam->bufEdit, inParam->iColorEffect, &(inOutParam->StartByteIndex), &(inOutParam->StartBitIndex), - &vdxDPIn, &MBList, &bitErrorIndication); - bitErrorsInPart1 = bitErrorIndication; - if (ret < 0) - return DMBS_ERR; - else if (ret == VDX_OK_BUT_BIT_ERROR) { - - /* Must break down decoding, because even if we know the number of MBs - in the 2nd partition, the content (quant, ac_pred_flag) is dependent - on "not_coded" and the type of MB (I-vop or P-vop), which information - is derived from the 1st !currupted! partition. */ - - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - Part 1 Error.\n"); - fPart1Error = 1; - bitErrorIndication = 0; - errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - } else { - motionMarkerBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - } - - /* read the next VP header to determine the number of MBs in this VP */ - if ( fPart1Error ) { - /* Stop decoding this segment */ - goto exitFunction; - } - else { - sncCode = sncRewindAndSeekNewMPEGSync( 1, - inParam->inBuffer, inParam->pictParam->fcode_forward, &error); - } - if (error) { - if (error == ERR_BIB_NOT_ENOUGH_DATA) error = 0; - else - return DMBS_ERR; - } - - nextVPBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - - if (sncCode == SNC_VIDPACK) { - - vdxVideoPacketHeader_t header; - vdxGetVideoPacketHeaderInputParam_t vdxParam; - int retValue = 0; - - vdxParam.fcode_forward = inParam->pictParam->fcode_forward; - vdxParam.time_increment_resolution = inParam->pictParam->time_increment_resolution; - vdxParam.numOfMBs = inParam->pictParam->numMBsInGOB; - - retValue = vdxGetVideoPacketHeader(inParam->inBuffer, &vdxParam, &header, &bitErrorIndication); - if (retValue < 0) { - return DMBS_ERR; - } else if (retValue == VDX_OK_BUT_BIT_ERROR) { - /* If bit error occurred */ - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - Reading Next VP Header error.\n"); - lastMBNum = 0; - } else { - lastMBNum = header.currMBNum; - } - } else { - lastMBNum = inParam->pictParam->numMBsInGOB; - } - - /* signaling to the caller function, that the Next VP header has been read */ - inOutParam->currMBNumInVP = lastMBNum; - - /* rewind the bits before the next resync_marker */ - bibRewindBits(bibNumberOfFlushedBits(inParam->inBuffer) - (fPart1Error ? nextVPBitPos: motionMarkerBitPos), - inParam->inBuffer, &error); - - if ((bitErrorIndication && !fPart1Error) || - (lastMBNum <= currMBNum || lastMBNum > inParam->pictParam->numMBsInGOB) || - (sncCode == SNC_EOB)) { - bitErrorIndication = 0; - numMBsInVP = MBList.numItems; - } else - numMBsInVP = lastMBNum - currMBNum; - - if (numMBsInVP != MBList.numItems || fPart1Error) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - MB list length != num MBs.\n"); - if ( fPart1Error || bitErrorsInPart1 ) { - /* Discard few MBs from the end of the list, - since there are errors somewhere in the bitstream. - If the list is short due to the missing packet, - all the read MBs are likely to be OK and there is no - need to discard them */ - dlstTail(&MBList, (void **) &MBinstance); - dlstRemove(&MBList, (void **) &MBinstance); - free( MBinstance ); - if (numMBsInVP > MBList.numItems ) { - /* Take still one away */ - dlstTail(&MBList, (void **) &MBinstance); - dlstRemove(&MBList, (void **) &MBinstance); - free( MBinstance ); - } - } - if (numMBsInVP < MBList.numItems ) { - /* Discard all the extra MBs from the end of the list + 2 just to be sure, - since there are errors somewhere in the bitstream */ - while ( MBList.numItems > VDC_MAX(numMBsInVP-2,0) ) { - dlstTail(&MBList, (void **) &MBinstance); - dlstRemove(&MBList, (void **) &MBinstance); - free( MBinstance ); - } - } - fPart1Error = 1; - errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - } - - if (currMBNum + numMBsInVP > inParam->pictParam->numMBsInGOB) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - Determined numMBsInVP overrun numMBsInFrame.\n"); - fPart1Error = 1; - errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - numMBsInVP = inParam->pictParam->numMBsInGOB - currMBNum; - } - - if (!fPart1Error) { - - /* Flush the Motion_Marker */ - bibFlushBits(MP4_MOTION_MARKER_COMB_LENGTH, inParam->inBuffer, &bitsGot, &bitErrorIndication, &error); - if (error) - return DMBS_ERR; - - /* - * Read the second partition header: cpby, ac_pred_flag - */ - - ret = vdxGetDataPartitionedPMBLayer_Part2(inParam->inBuffer, inParam->outBuffer, - inParam->bufEdit, inParam->iColorEffect, &(inOutParam->StartByteIndex), - &(inOutParam->StartBitIndex), hTranscoder, - &vdxDPIn, &MBList, &bitErrorIndication); - if (ret < 0) - return DMBS_ERR; - else if (ret == VDX_OK_BUT_BIT_ERROR) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - Part 2 Error.\n"); - fPart2Error = 1; - /* Stop decoding this segment */ - goto exitFunction; - } - } - - /* - * Count the motion vectors and copy the prediction blocks - */ - - xPosInMBs = inParam->xPosInMBs; - yPosInMBs = inParam->yPosInMBs; - currYMBInFrame = inOutParam->yMBInFrame; - currUBlkInFrame = inOutParam->uBlockInFrame; - currVBlkInFrame = inOutParam->vBlockInFrame; - - /* get the first MB of the list */ - dlstHead(&MBList, (void **) &MBinstance); - - for (currMBNumInVP = 0; currMBNumInVP < numMBsInVP; currMBNumInVP++) { - - /* Motion vectors for P-macroblock */ - int mvx[4]; - int mvy[4]; - int mbPos; /* the position of the current macroblock, - -1 = the leftmost MB of the image, - 0 = MB is not in the border of the image, - 1 = rightmost MB of the image */ - - blcCopyPredictionMBParam_t blcParam; - - /* if MBList is shorter then the number of MBs in the VP */ - if (MBinstance == NULL) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - MB list < num MBs.\n"); - inOutParam->currMBNum = currMBNum; - goto exitFunction; - } - - if (!MBinstance->fCodedMB) { - - inOutParam->fCodedMBs[currMBNum] = 0; - /* Motion vectors to 0 */ - mvx[0] = mvx[1] = mvx[2] = mvx[3] = 0; - mvy[0] = mvy[1] = mvy[2] = mvy[3] = 0; - mvcMarkMBNotCoded( - inOutParam->mvcData, - xPosInMBs, - yPosInMBs, - inParam->pictParam->tr); - MBinstance->cbpy = 0; - fourMVs = 0; - - } else { - - inOutParam->fCodedMBs[currMBNum] = 1; - inOutParam->numOfCodedMBs++; - - if(MBinstance->mbClass == VDX_MB_INTER) { - int currMVNum; - - fourMVs = (u_char) (MBinstance->numMVs == 4); - - for (currMVNum = 0; currMVNum < MBinstance->numMVs; currMVNum++) { - - mvcCalcMPEGMV( - inOutParam->mvcData, - MBinstance->mvx[currMVNum], MBinstance->mvy[currMVNum], - &mvx[currMVNum], &mvy[currMVNum], - (u_char) currMVNum, fourMVs, - (u_char) (currMBNumInVP < inParam->pictParam->numMBsInMBLine), - (u_char) (currMBNumInVP == 0), - (u_char) (currMBNumInVP < (inParam->pictParam->numMBsInMBLine-1)), - xPosInMBs, - yPosInMBs, - inParam->pictParam->tr, - (MBinstance->mbClass == VDX_MB_INTRA) ? MVC_MB_INTRA : MVC_MB_INTER, - &error); - - if (error == ERR_MVC_MVPTR) - return DMB_BIT_ERR; - else if (error) - return DMB_ERR; - } - - if (MBinstance->numMVs == 1) { - mvx[1] = mvx[2] = mvx[3] = mvx[0]; - mvy[1] = mvy[2] = mvy[3] = mvy[0]; - } - - } else { /* VDX_MB_INTRA */ - mvcMarkMBIntra(inOutParam->mvcData, xPosInMBs, yPosInMBs, - inParam->pictParam->tr); - - } - } - - /* mbPos, needed in blcCopyPredictionMB */ - if (xPosInMBs == 0) - mbPos = -1; - else if (xPosInMBs == inParam->pictParam->numMBsInMBLine - 1) - mbPos = 1; - else - mbPos = 0; - - if (!MBinstance->fCodedMB || MBinstance->mbClass == VDX_MB_INTER) { - blcParam.refY = inParam->refY; - blcParam.refU = inParam->refU; - blcParam.refV = inParam->refV; - blcParam.currYMBInFrame = currYMBInFrame; - blcParam.currUBlkInFrame = currUBlkInFrame; - blcParam.currVBlkInFrame = currVBlkInFrame; - blcParam.uvBlkXCoord = xPosInMBs * 8; - blcParam.uvBlkYCoord = yPosInMBs * 8; - blcParam.uvWidth = uvWidth; - blcParam.uvHeight = inParam->pictParam->lumMemHeight / 2; - blcParam.mvcData = inOutParam->mvcData; - blcParam.mvx = mvx; - blcParam.mvy = mvy; - blcParam.mbPlace = mbPos; - blcParam.fAdvancedPrediction = inParam->pictParam->fAP; - blcParam.fMVsOverPictureBoundaries = - inParam->pictParam->fMVsOverPictureBoundaries; - blcParam.diffMB = inOutParam->diffMB; - blcParam.rcontrol = inParam->pictParam->rtype; - blcParam.fourMVs = fourMVs; - - /* MVE */ - if (inParam->iGetDecodedFrame || hTranscoder->NeedDecodedYUVFrame()) - { - - /* Do motion compensation */ - if (blcCopyPredictionMB(&blcParam) < 0) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - Block copying failed, illegal MV.\n"); - inOutParam->currMBNum = currMBNum; - goto exitFunction; - /* MV was illegal => caused by bitError */ - } - } - } - - currMBNum++; - - /* increment the block pointers and counters */ - if ( currYMBInFrame != NULL ) - { - currYMBInFrame += 16; - currUBlkInFrame += 8; - currVBlkInFrame += 8; - } - xPosInMBs++; - - if (xPosInMBs == inParam->pictParam->numMBsInMBLine) { - if ( currYMBInFrame != NULL ) - { - currYMBInFrame += 15 * yWidth; - currUBlkInFrame += 7 * uvWidth; - currVBlkInFrame += 7 * uvWidth; - } - xPosInMBs = 0; - yPosInMBs++; - if (yPosInMBs >= inParam->pictParam->numMBLinesInGOB) - break; - } - - /* MVE */ - MBinstance->mv_x[0] = mvx[0]; MBinstance->mv_x[1] = mvx[1]; MBinstance->mv_x[2] = mvx[2]; MBinstance->mv_x[3] = mvx[3]; - MBinstance->mv_y[0] = mvy[0]; MBinstance->mv_y[1] = mvy[1]; MBinstance->mv_y[2] = mvy[2]; MBinstance->mv_y[3] = mvy[3]; - - dlstNext(&MBList, (void **) &MBinstance); - } - - /* if error occured in the first 2 MV&header partitions, then stop decoding */ - if (fPart1Error || fPart2Error) { - -#ifdef DEBUG_OUTPUT - deb_core("%08lu: MB#%3d VP Data Starts\n%08lu: Motion Marker\n%08lu: DCT data starts\n%08lu: MB#%3d Next VP/VOP Header\n%08lu: Fw Error Detected\n", - startVPBitPos, (inParam->yPosInMBs*inParam->pictParam->numMBsInMBLine + inParam->xPosInMBs), - motionMarkerBitPos, startBlockDataBitPos, nextVPBitPos, lastMBNum, - errorBitPos); -#endif - - inOutParam->currMBNum = currMBNum; - goto exitFunction; - } - - /* - * Read block data partition in forward direction - */ - - xPosInMBs = inParam->xPosInMBs; - yPosInMBs = inParam->yPosInMBs; - currMBNumInVP = 0; - currMBNum = inParam->yPosInMBs*inParam->pictParam->numMBsInMBLine + inParam->xPosInMBs; - currYMBInFrame = inOutParam->yMBInFrame; - currUBlkInFrame = inOutParam->uBlockInFrame; - currVBlkInFrame = inOutParam->vBlockInFrame; - - startBlockDataBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - - for (dlstHead(&MBList, (void **) &MBinstance); - MBinstance != NULL; - dlstNext(&MBList, (void **) &MBinstance)) - { - /* MVE */ - hTranscoder->OnePMBDataStartedDataPartitioned(MBinstance, &MBList, currMBNumInVP, currMBNum); - - if (MBinstance->fCodedMB) { - - /* If INTER MB */ - if (MBinstance->mbClass == VDX_MB_INTER) { - dmdPParam_t dmdIn; - - dmdIn.inBuffer = inParam->inBuffer; - dmdIn.outBuffer = inParam->outBuffer; - dmdIn.bufEdit = inParam->bufEdit; - dmdIn.iColorEffect = inParam->iColorEffect; - dmdIn.iGetDecodedFrame = inParam->iGetDecodedFrame; - dmdIn.cbpy = MBinstance->cbpy; - dmdIn.cbpc = MBinstance->cbpc; - dmdIn.quant = MBinstance->quant; - - /* MVE */ - dmdIn.refY = inParam->refY; - dmdIn.refU = inParam->refU; - dmdIn.refV = inParam->refV; - dmdIn.mvx = MBinstance->mv_x; - dmdIn.mvy = MBinstance->mv_y; - - dmdIn.currYMBInFrame = currYMBInFrame; - dmdIn.currUBlkInFrame = currUBlkInFrame; - dmdIn.currVBlkInFrame = currVBlkInFrame; - dmdIn.uvWidth = uvWidth; - dmdIn.reversible_vlc = inParam->pictParam->reversible_vlc; - dmdIn.vlc_dec_direction = 0; - - dmdIn.xPosInMBs = xPosInMBs; - dmdIn.yPosInMBs = yPosInMBs; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - - /* Store quantizer */ - quantParams[currMBNum] = MBinstance->quant; - - /* Update the AIC module data, marking the MB as Inter (quant=0) */ - aicBlockUpdate (inOutParam->aicData, currMBNum, 0, NULL, 0, 0); - - /* Decode prediction error blocks */ - ret = dmdGetAndDecodeMPEGPMBBlocks(&dmdIn, hTranscoder); - - if ( ret < 0) - return DMBS_ERR; - else if ( ret == DMD_BIT_ERR ) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - PMB Blocks decoding failed.\n"); - fBlockError = 1; - errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - break; - } - - } - /* Else block layer decoding of INTRA macroblock */ - else { - dmdMPEGIParam_t dmdIn; - - /* Get block layer parameters and decode them */ - dmdIn.inBuffer = inParam->inBuffer; - dmdIn.outBuffer = inParam->outBuffer; - dmdIn.bufEdit = inParam->bufEdit; - dmdIn.iColorEffect = inParam->iColorEffect; - dmdIn.iGetDecodedFrame = inParam->iGetDecodedFrame; - - dmdIn.cbpy = MBinstance->cbpy; - dmdIn.cbpc = MBinstance->cbpc; - dmdIn.quant = MBinstance->quant; - dmdIn.yWidth = yWidth; - dmdIn.yMBInFrame = currYMBInFrame; - dmdIn.uBlockInFrame = currUBlkInFrame; - dmdIn.vBlockInFrame = currVBlkInFrame; - - dmdIn.xPosInMBs = xPosInMBs; - dmdIn.yPosInMBs = yPosInMBs; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - dmdIn.numMBLinesInGOB = inParam->pictParam->numMBLinesInGOB; - dmdIn.pictureType = inParam->pictParam->pictureType; - - inOutParam->aicData->ACpred_flag = MBinstance->ac_pred_flag; - dmdIn.aicData = inOutParam->aicData; - - dmdIn.data_partitioned = 1; - dmdIn.switched = MBinstance->switched; - dmdIn.DC = MBinstance->DC; - - dmdIn.reversible_vlc = inParam->pictParam->reversible_vlc; - dmdIn.vlc_dec_direction = 0; - - dmdIn.currMBNum = currMBNum; - - dmdIn.fTopOfVP = (u_char) - (currMBNumInVP < inParam->pictParam->numMBsInMBLine || - !aicIsBlockValid(inOutParam->aicData, currMBNum-inParam->pictParam->numMBsInMBLine)); - dmdIn.fLeftOfVP = (u_char) - (currMBNumInVP == 0 || - xPosInMBs == 0 || - !aicIsBlockValid(inOutParam->aicData, currMBNum-1)); - dmdIn.fBBlockOut = (u_char) - (currMBNumInVP <= inParam->pictParam->numMBsInMBLine || - xPosInMBs == 0 || - !aicIsBlockValid(inOutParam->aicData, currMBNum-inParam->pictParam->numMBsInMBLine-1)); - - ret = dmdGetAndDecodeMPEGIMBBlocks(&dmdIn, hTranscoder); - - if ( ret < 0 ) - return DMBS_ERR; - else if ( ret == DMD_BIT_ERR ) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - IMB Blocks decoding failed.\n"); - fBlockError = 1; - errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - break; - } - } - - } else { /* end of if coded MB */ - - /* Update the AIC module data, marking the MB as Not Coded (quant=0) */ - aicBlockUpdate (inOutParam->aicData, currMBNum, 0, NULL, 0, 0); - } - - currMBNumInVP++; - currMBNum++; - - /* increment the block pointers and counters */ - if ( currYMBInFrame != NULL ) - { - currYMBInFrame += 16; - currUBlkInFrame += 8; - currVBlkInFrame += 8; - } - xPosInMBs++; - - if (xPosInMBs == inParam->pictParam->numMBsInMBLine) { - if ( currYMBInFrame != NULL ) - { - currYMBInFrame += 15 * yWidth; - currUBlkInFrame += 7 * uvWidth; - currVBlkInFrame += 7 * uvWidth; - } - xPosInMBs = 0; - yPosInMBs++; - if (yPosInMBs >= inParam->pictParam->numMBLinesInGOB) - break; - } - } // end of for-loop - - if (!fPart1Error && !fPart2Error && !fBlockError) { - if (sncCode == SNC_EOB) { - inOutParam->currMBNum += numMBsInVP; - goto exitFunction; - } else { - sncCode = sncCheckMpegSync(inParam->inBuffer, inParam->pictParam->fcode_forward, &error); - if (sncCode == SNC_NO_SYNC) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - After block data no start code found.\n"); - if (lastMBNum != 0) - fBlockError = 1; - errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - } - } - } - - /* - * In case of error, read block data partition in backward direction - */ - - if (fBlockError && inParam->pictParam->reversible_vlc) { - numCorrectMBs = currMBNumInVP; - -#ifdef DEBUG_OUTPUT - { - int bitPos[6], xpos, ypos, mbnum; - - rvlc_stat = fopen("rvlc.log", "a+t"); - - fprintf(rvlc_stat, "P-VOP: (MB_first):%3d (MB_last):%3d\n", - inOutParam->currMBNum, (inOutParam->currMBNum + numMBsInVP-1)); - - for (xpos = inParam->xPosInMBs, ypos = inParam->yPosInMBs, mbnum = 0; mbnum < numCorrectMBs; mbnum++, xpos++) { - - if (xpos / inParam->pictParam->numMBsInMBLine) - xpos = 0, ypos++; - - fprintf(rvlc_stat, "fw: MB#%3d\tY0: %8d | Y1: %8d | Y2: %8d | Y3: %8d | U: %8d | V: %8d\n", - inOutParam->currMBNum+mbnum, bitPos[0], bitPos[1], bitPos[2], bitPos[3], bitPos[4], bitPos[5]); - } - } -#endif - - /* find next VP header (end of MB block data of this VP) */ - sncCode = sncRewindAndSeekNewMPEGSync(errorBitPos-startBlockDataBitPos, inParam->inBuffer, - inParam->pictParam->fcode_forward, &error); - if (error) { - if (error == ERR_BIB_NOT_ENOUGH_DATA) error = 0; - else - return DMBS_ERR; - } - - if (sncCode == SNC_EOB) { - inOutParam->currMBNum += numMBsInVP; - goto exitFunction; - } - - nextVPBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - - backwards_errorBitPos = startBlockDataBitPos; - - /* rewind the stuffing bits */ - if (sncCode != SNC_NO_SYNC || !(nextVPBitPos % 8)) { - if(sncRewindStuffing(inParam->inBuffer, &error) != SNC_PATTERN) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - Backwards decoding, stuffing not found.\n"); - goto exitFunction; - } - } - - /* set the block pointers and counters to the end of the VP */ - if ( currYMBInFrame != NULL ) - { - currYMBInFrame = inOutParam->yMBInFrame + 16 * (numMBsInVP-1); - currUBlkInFrame = inOutParam->uBlockInFrame + 8 * (numMBsInVP-1); - currVBlkInFrame = inOutParam->vBlockInFrame + 8 * (numMBsInVP-1); - } - - xPosInMBs = inParam->xPosInMBs + (numMBsInVP-1); - yPosInMBs = inParam->yPosInMBs; - - if (xPosInMBs / inParam->pictParam->numMBsInMBLine) { - - int numFullLines = xPosInMBs / inParam->pictParam->numMBsInMBLine; - - if ( currYMBInFrame != NULL ) - { - currYMBInFrame += 15 * yWidth * numFullLines; - currUBlkInFrame += 7 * uvWidth * numFullLines; - currVBlkInFrame += 7 * uvWidth * numFullLines; - } - xPosInMBs = xPosInMBs % inParam->pictParam->numMBsInMBLine; - yPosInMBs+=numFullLines; - } - - currMBNum = inParam->yPosInMBs*inParam->pictParam->numMBsInMBLine + - inParam->xPosInMBs + (numMBsInVP-1); - currMBNumInVP = numMBsInVP-1; - - for (dlstTail(&MBList, (void **) &MBinstance); - MBinstance != NULL; - dlstPrev(&MBList, (void **) &MBinstance)) - { - if (MBinstance->fCodedMB) - { - - /* If INTER MB */ - if (MBinstance->mbClass == VDX_MB_INTER) - { - dmdPParam_t dmdIn; - - dmdIn.inBuffer = inParam->inBuffer; - dmdIn.outBuffer = inParam->outBuffer; - dmdIn.bufEdit = inParam->bufEdit; - dmdIn.iColorEffect = inParam->iColorEffect; - dmdIn.iGetDecodedFrame = inParam->iGetDecodedFrame; - dmdIn.cbpy = MBinstance->cbpy; - dmdIn.cbpc = MBinstance->cbpc; - dmdIn.quant = MBinstance->quant; - - /* MVE */ - dmdIn.refY = inParam->refY; - dmdIn.refU = inParam->refU; - dmdIn.refV = inParam->refV; - dmdIn.mvx = MBinstance->mv_x; - dmdIn.mvy = MBinstance->mv_y; - - dmdIn.currYMBInFrame = currYMBInFrame; - dmdIn.currUBlkInFrame = currUBlkInFrame; - dmdIn.currVBlkInFrame = currVBlkInFrame; - dmdIn.uvWidth = uvWidth; - - dmdIn.reversible_vlc = inParam->pictParam->reversible_vlc; - dmdIn.vlc_dec_direction = 1; - - dmdIn.xPosInMBs = xPosInMBs; - dmdIn.yPosInMBs = yPosInMBs; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - - /* Update the AIC module data, marking the MB as Inter (quant=0) */ - aicBlockUpdate (inOutParam->aicData, currMBNum, 0, NULL, 0, 0); - - /* Decode prediction error blocks */ - ret = dmdGetAndDecodeMPEGPMBBlocks(&dmdIn, hTranscoder); - - if ( ret < 0) - return DMBS_ERR; - else if ( ret == DMD_BIT_ERR ) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - Backwards decoding, PMB Blocks decoding failed.\n"); - backwards_errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - break; - } - - } - /* Else block layer decoding of INTRA macroblock */ - else - { - dmdMPEGIParam_t dmdIn; - - /* Get block layer parameters and decode them */ - dmdIn.inBuffer = inParam->inBuffer; - dmdIn.outBuffer = inParam->outBuffer; - dmdIn.bufEdit = inParam->bufEdit; - dmdIn.iColorEffect = inParam->iColorEffect; - dmdIn.iGetDecodedFrame = inParam->iGetDecodedFrame; - - dmdIn.cbpy = MBinstance->cbpy; - dmdIn.cbpc = MBinstance->cbpc; - dmdIn.quant = MBinstance->quant; - dmdIn.yWidth = yWidth; - dmdIn.yMBInFrame = currYMBInFrame; - dmdIn.uBlockInFrame = currUBlkInFrame; - dmdIn.vBlockInFrame = currVBlkInFrame; - - dmdIn.xPosInMBs = xPosInMBs; - dmdIn.yPosInMBs = yPosInMBs; - dmdIn.numMBsInMBLine = inParam->pictParam->numMBsInMBLine; - dmdIn.numMBLinesInGOB = inParam->pictParam->numMBLinesInGOB; - dmdIn.pictureType = inParam->pictParam->pictureType; - - inOutParam->aicData->ACpred_flag = MBinstance->ac_pred_flag; - dmdIn.aicData = inOutParam->aicData; - - dmdIn.data_partitioned = inParam->pictParam->data_partitioned; - dmdIn.switched = MBinstance->switched; - dmdIn.DC = MBinstance->DC; - - dmdIn.reversible_vlc = inParam->pictParam->reversible_vlc; - dmdIn.vlc_dec_direction = 1; - - dmdIn.currMBNum = currMBNum; - - dmdIn.fTopOfVP = (u_char) - (currMBNumInVP < inParam->pictParam->numMBsInMBLine || - !aicIsBlockValid(inOutParam->aicData, currMBNum-inParam->pictParam->numMBsInMBLine)); - dmdIn.fLeftOfVP = (u_char) - (currMBNumInVP == 0 || - xPosInMBs == 0 || - !aicIsBlockValid(inOutParam->aicData, currMBNum-1)); - dmdIn.fBBlockOut = (u_char) - (currMBNumInVP <= inParam->pictParam->numMBsInMBLine || - xPosInMBs == 0 || - !aicIsBlockValid(inOutParam->aicData, currMBNum-inParam->pictParam->numMBsInMBLine-1)); - - ret = dmdGetAndDecodeMPEGIMBBlocks(&dmdIn, hTranscoder); - - if ( ret < 0 ) - return DMBS_ERR; - else if ( ret == DMD_BIT_ERR ) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - Backwards decoding, IMB Blocks decoding failed.\n"); - backwards_errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - - break; - } - } // end of else - - } /* end of if coded MB */ - else - { - - /* Update the AIC module data, marking the MB as Not Coded (quant=0) */ - aicBlockUpdate (inOutParam->aicData, currMBNum, 0, NULL, 0, 0); - } - - if (bibNumberOfFlushedBits(inParam->inBuffer) <= startBlockDataBitPos) { - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - Backwards decoding, block data start position reached.\n"); - break; - } - - /* deincrement the block pointers and counters */ - xPosInMBs--; - if (xPosInMBs < 0) { - if (yPosInMBs > 0) { - if ( currYMBInFrame != NULL ) - { - currYMBInFrame -= 15 * yWidth; - currUBlkInFrame -= 7 * uvWidth; - currVBlkInFrame -= 7 * uvWidth; - } - xPosInMBs = inParam->pictParam->numMBsInMBLine -1; - yPosInMBs--; - } else { - xPosInMBs = 0; - backwards_errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - break; - } - } - if ( currYMBInFrame != NULL ) - { - currYMBInFrame -= 16; - currUBlkInFrame -= 8; - currVBlkInFrame -= 8; - } - - currMBNumInVP--; - currMBNum--; - } - - if (currMBNumInVP < 0) { - currMBNumInVP = 0; - backwards_errorBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - deb("dmbsGetAndDecodePMBsDataPartitioned:ERROR - Backwards decoding, all MBs decoded without detected error.\n"); - } - -#ifdef DEBUG_OUTPUT - { - int bitPos[6], xpos, ypos, mbnum; - - xPosInMBs++; - if (xPosInMBs >= inParam->pictParam->numMBsInMBLine) { - xPosInMBs = 0; - if (yPosInMBs < (inParam->pictParam->numMBLinesInGOB-1)) - yPosInMBs++; - } - - for (xpos = xPosInMBs, ypos = yPosInMBs, mbnum = (currMBNumInVP+1); mbnum < numMBsInVP; mbnum++, xpos++) { - - if (xpos / inParam->pictParam->numMBsInMBLine) - xpos = 0, ypos++; - - fprintf(rvlc_stat, "bw: MB#%3d\tY0: %8d | Y1: %8d | Y2: %8d | Y3: %8d | U: %8d | V: %8d\n", - inOutParam->currMBNum+mbnum, bitPos[0], bitPos[1], bitPos[2], bitPos[3], bitPos[4], bitPos[5]); - } - - fprintf(rvlc_stat, "(blk_st):%8u (fw_det):%8u (bw_det):%8u (nxt_vp):%8u\n", - startBlockDataBitPos, errorBitPos, backwards_errorBitPos, nextVPBitPos); - } -#endif - - /* - * Based on the decoder MB counters forwards and backwards, - * recopy the "to be discarded" blocks - */ - - /* strategy 1 */ - if ((backwards_errorBitPos > errorBitPos) && - (currMBNumInVP + 1 > numCorrectMBs)) { - numCorrectBackwardsMBs = VDC_MIN(currMBNumInVP + 2,numMBsInVP); - numCorrectMBs = VDC_MAX(numCorrectMBs-2,0); -#ifdef DEBUG_OUTPUT - fprintf(rvlc_stat, "P-VOP strategy 1: MBs %3d-%3d concealed\n\n", inOutParam->currMBNum+numCorrectMBs, inOutParam->currMBNum+numCorrectBackwardsMBs-1); -#endif - } - /* strategy 2 */ - else if ((backwards_errorBitPos > errorBitPos) && - (currMBNumInVP + 1 <= numCorrectMBs)) { - numCorrectBackwardsMBs = VDC_MIN(numCorrectMBs + 1,numMBsInVP); - numCorrectMBs = VDC_MAX(currMBNumInVP-1,0); -#ifdef DEBUG_OUTPUT - fprintf(rvlc_stat, "P-VOP strategy 2: MBs %3d-%3d concealed\n\n", inOutParam->currMBNum+numCorrectMBs, inOutParam->currMBNum+numCorrectBackwardsMBs-1); -#endif - } - /* strategy 3 */ - else if ((backwards_errorBitPos <= errorBitPos) && - (currMBNumInVP + 1 > numCorrectMBs)) { - numCorrectBackwardsMBs = VDC_MIN(currMBNumInVP + 2,numMBsInVP); - numCorrectMBs = VDC_MAX(numCorrectMBs-2,0); -#ifdef DEBUG_OUTPUT - fprintf(rvlc_stat, "P-VOP strategy 3: MBs %3d-%3d concealed\n\n", inOutParam->currMBNum+numCorrectMBs, inOutParam->currMBNum+numCorrectBackwardsMBs-1); -#endif - } - /* strategy 4 */ - else if ((backwards_errorBitPos <= errorBitPos) && - (currMBNumInVP + 1 <= numCorrectMBs)) { - numCorrectBackwardsMBs = VDC_MIN(numCorrectMBs + 1,numMBsInVP); - numCorrectMBs = VDC_MAX(currMBNumInVP-1,0); -#ifdef DEBUG_OUTPUT - fprintf(rvlc_stat, "P-VOP strategy 4: MBs %3d-%3d concealed\n\n", inOutParam->currMBNum+numCorrectMBs, inOutParam->currMBNum+numCorrectBackwardsMBs-1); -#endif - } - -#ifdef DEBUG_OUTPUT - fclose (rvlc_stat); -#endif - - - /* set the block pointers and counters to the end of the VP */ - if ( currYMBInFrame != NULL ) - { - currYMBInFrame = inOutParam->yMBInFrame + 16 * numCorrectMBs; - currUBlkInFrame = inOutParam->uBlockInFrame + 8 * numCorrectMBs; - currVBlkInFrame = inOutParam->vBlockInFrame + 8 * numCorrectMBs; - } - - xPosInMBs = inParam->xPosInMBs + numCorrectMBs; - yPosInMBs = inParam->yPosInMBs; - - if (xPosInMBs / inParam->pictParam->numMBsInMBLine) { - - int numFullLines = xPosInMBs / inParam->pictParam->numMBsInMBLine; - - if ( currYMBInFrame != NULL ) - { - currYMBInFrame += 15 * yWidth * numFullLines; - currUBlkInFrame += 7 * uvWidth * numFullLines; - currVBlkInFrame += 7 * uvWidth * numFullLines; - } - xPosInMBs = xPosInMBs % inParam->pictParam->numMBsInMBLine; - yPosInMBs+=numFullLines; - } - - /* get the first MB of the list */ - for (currMBNumInVP = 0, dlstHead(&MBList, (void **) &MBinstance); - currMBNumInVP < numCorrectMBs; currMBNumInVP++) - dlstNext(&MBList, (void **) &MBinstance); - - for (currMBNumInVP = numCorrectMBs; currMBNumInVP < numCorrectBackwardsMBs; currMBNumInVP++) { - /* The blocks whose DCT are missing, will be reconstructed (possibly again => clear effects of corrupted DCT) here, - using the MVs decoded from 1st partition */ - /* Motion vectors for P-macroblock */ - int mvx[4]; - int mvy[4]; - int mbPos; /* the position of the current macroblock, - -1 = the leftmost MB of the image, - 0 = MB is not in the border of the image, - 1 = rightmost MB of the image */ - - blcCopyPredictionMBParam_t blcParam; - - if (MBinstance == NULL) { - break; - } - - if (!MBinstance->fCodedMB) { - /* Motion vectors to 0 */ - mvx[0] = mvx[1] = mvx[2] = mvx[3] = 0; - mvy[0] = mvy[1] = mvy[2] = mvy[3] = 0; - mvcMarkMBNotCoded( - inOutParam->mvcData, - xPosInMBs, - yPosInMBs, - inParam->pictParam->tr); - MBinstance->cbpy = 0; - fourMVs = 0; - - } else { - - if(MBinstance->mbClass == VDX_MB_INTER) { - int currMVNum; - - fourMVs = (u_char) (MBinstance->numMVs == 4); - - for (currMVNum = 0; currMVNum < MBinstance->numMVs; currMVNum++) { - - mvcCalcMPEGMV( - inOutParam->mvcData, - MBinstance->mvx[currMVNum], MBinstance->mvy[currMVNum], - &mvx[currMVNum], &mvy[currMVNum], - (u_char) currMVNum, fourMVs, - (u_char) (currMBNumInVP < inParam->pictParam->numMBsInMBLine), - (u_char) (currMBNumInVP == 0), - (u_char) (currMBNumInVP < (inParam->pictParam->numMBsInMBLine-1)), - xPosInMBs, - yPosInMBs, - inParam->pictParam->tr, - (MBinstance->mbClass == VDX_MB_INTRA) ? MVC_MB_INTRA : MVC_MB_INTER, - &error); - - if (error == ERR_MVC_MVPTR) - return DMB_BIT_ERR; - else if (error) - return DMB_ERR; - - /* if MVs over VOP boundaries are not allowed */ - if ((xPosInMBs == 0 && mvx[currMVNum] < 0) || - (xPosInMBs == inParam->pictParam->numMBsInMBLine-1 && mvx[currMVNum] > 0) || - (yPosInMBs == 0 && mvy[currMVNum] < 0) || - (yPosInMBs == inParam->pictParam->numMBLinesInGOB-1 && mvy[currMVNum] > 0)) { - mvx[currMVNum] = 0; - mvy[currMVNum] = 0; - } - } - - if (MBinstance->numMVs == 1) { - mvx[1] = mvx[2] = mvx[3] = mvx[0]; - mvy[1] = mvy[2] = mvy[3] = mvy[0]; - } - - } else { /* VDX_MB_INTRA */ - - /*int predBlocks[8] = {0,0,0,0,0,0,0,0};*/ - - mvcMarkMBIntra(inOutParam->mvcData, xPosInMBs, yPosInMBs, - inParam->pictParam->tr); - - - /* Conceal the MB in intra mode (use top and left predictor only) - if (xPosInMBs > 0) predBlocks[5] = 1; - if (yPosInMBs > 0) predBlocks[4] = 1; - epixConcealMB( inParam->currPY, yPosInMBs<<1, xPosInMBs<<1, predBlocks, yWidth, 2 ); - epixConcealMB( inParam->currPU, yPosInMBs, xPosInMBs, predBlocks, uvWidth, 1 ); - epixConcealMB( inParam->currPV, yPosInMBs, xPosInMBs, predBlocks, uvWidth, 1 ); */ - - mvcCalcMPEGMV( - inOutParam->mvcData, - 0, 0, - &mvx[0], &mvy[0], - (u_char) 0, 0, - (u_char) (currMBNumInVP < inParam->pictParam->numMBsInMBLine), - (u_char) (currMBNumInVP == 0), - (u_char) (currMBNumInVP < (inParam->pictParam->numMBsInMBLine-1)), - xPosInMBs, - yPosInMBs, - inParam->pictParam->tr, - MVC_MB_INTRA, - &error); - - if (error == ERR_MVC_MVPTR) - return DMB_BIT_ERR; - else if (error) - return DMB_ERR; - - /* if MVs over VOP boundaries are not allowed */ - if ((xPosInMBs == 0 && mvx[0] < 0) || - (xPosInMBs == inParam->pictParam->numMBsInMBLine-1 && mvx[0] > 0) || - (yPosInMBs == 0 && mvy[0] < 0) || - (yPosInMBs == inParam->pictParam->numMBLinesInGOB-1 && mvy[0] > 0)) { - mvx[0] = 0; - mvy[0] = 0; - } - - mvx[1] = mvx[2] = mvx[3] = mvx[0]; - mvy[1] = mvy[2] = mvy[3] = mvy[0]; - } - } - - /* mbPos, needed in blcCopyPredictionMB */ - if (xPosInMBs == 0) - mbPos = -1; - else if (xPosInMBs == inParam->pictParam->numMBsInMBLine - 1) - mbPos = 1; - else - mbPos = 0; - -/* if (!MBinstance->fCodedMB || MBinstance->mbClass == VDX_MB_INTER) {*/ - blcParam.refY = inParam->refY; - blcParam.refU = inParam->refU; - blcParam.refV = inParam->refV; - blcParam.currYMBInFrame = currYMBInFrame; - blcParam.currUBlkInFrame = currUBlkInFrame; - blcParam.currVBlkInFrame = currVBlkInFrame; - blcParam.uvBlkXCoord = xPosInMBs * 8; - blcParam.uvBlkYCoord = yPosInMBs * 8; - blcParam.uvWidth = uvWidth; - blcParam.uvHeight = inParam->pictParam->lumMemHeight / 2; - blcParam.mvcData = inOutParam->mvcData; - blcParam.mvx = mvx; - blcParam.mvy = mvy; - blcParam.mbPlace = mbPos; - blcParam.fAdvancedPrediction = inParam->pictParam->fAP; - blcParam.fMVsOverPictureBoundaries = - inParam->pictParam->fMVsOverPictureBoundaries; - blcParam.diffMB = inOutParam->diffMB; - blcParam.rcontrol = inParam->pictParam->rtype; - blcParam.fourMVs = fourMVs; - - /* Do motion compensation */ - if (blcCopyPredictionMB(&blcParam) < 0) { - goto exitFunction; - } -/* }*/ - - /* increment the block pointers and counters */ - if ( currYMBInFrame != NULL ) - { - currYMBInFrame += 16; - currUBlkInFrame += 8; - currVBlkInFrame += 8; - } - xPosInMBs++; - - if (xPosInMBs == inParam->pictParam->numMBsInMBLine) { - if ( currYMBInFrame != NULL ) - { - currYMBInFrame += 15 * yWidth; - currUBlkInFrame += 7 * uvWidth; - currVBlkInFrame += 7 * uvWidth; - } - xPosInMBs = 0; - yPosInMBs++; - if (yPosInMBs >= inParam->pictParam->numMBLinesInGOB) - break; - } - - dlstNext(&MBList, (void **) &MBinstance); - } - } - -#ifdef DEBUG_OUTPUT - if (errorBitPos) - deb_core("%08lu: MB#%3d VP Data Starts\n%08lu: Motion Marker\n%08lu: DCT data starts\n%08lu: MB#%3d Next VP/VOP Header\n%08lu: Fw Error Detected\n%08lu: Bw Error Detected\n", - startVPBitPos, (inParam->yPosInMBs*inParam->pictParam->numMBsInMBLine + inParam->xPosInMBs), - motionMarkerBitPos, startBlockDataBitPos, nextVPBitPos, lastMBNum, - errorBitPos,backwards_errorBitPos); -#endif - - /* if no error in Part1 and Part2, set the currentMB to the first MB of the next VP */ - inOutParam->currMBNum += numMBsInVP; - -exitFunction: - - deb1p("dmbsGetAndDecodePMBsDataPartitioned:Finished.\n",inOutParam->currMBNum); - /* Free the MB list */ - if (MBList.numItems != 0) - { - dlstHead(&MBList, (void **) &MBinstance); - dlstRemove(&MBList, (void **) &MBinstance); - while (MBinstance != NULL) { - free(MBinstance); - dlstRemove(&MBList, (void **) &MBinstance); - } - dlstClose(&MBList); - } - - return DMBS_OK; -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/decpich.cpp --- a/videoeditorengine/h263decoder/src/decpich.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,699 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Picture header decoding functions. -* -*/ - - - -#include "h263dConfig.h" - -#include "decpich.h" -#include "debug.h" -#include "vdeims.h" -#include "vdeimb.h" -#include "viddemux.h" -#include "sync.h" - - -/* - * Global functions - */ - -/* {{-output"dphGetPictureHeader.txt"}} */ -/* - * dphGetPictureHeader - * - * - * Parameters: - * inParam input parameters - * inOutParam input/output parameters, these parameters - * may be modified in the function - * outParam output parameters - * bitErrorIndication bit error indication, see biterr.h for - * the possible values - * - * Function: - * This function gets and decodes a picture header which should start - * with a PSC at the current position of the bit buffer. At first, - * the function reads the picture header fields from the bitstream. - * Then, it checks whether the values of the fields are supported. - * An unsupported value is interpreted as a bit error. Finally, - * the function updates VDC instance data and output parameters - * (according to the new picture header). - * - * Returns: - * DPH_OK - * DPH_OK_BUT_BIT_ERROR - * DPH_ERR - * DPH_ERR_NO_INTRA - * DPH_ERR_FORMAT_CHANGE - * - */ - -int dphGetPictureHeader( - const dphInParam_t *inParam, - dphInOutParam_t *inOutParam, - dphOutParam_t *outParam, - int *bitErrorIndication) -/* {{-output"dphGetPictureHeader.txt"}} */ -{ - bibBuffer_t *inBuffer = inOutParam->inBuffer; - u_char fPrevIntraGot; /* Non-zero if an INTRA frame has been decoded - before the current frame */ - vdxGetPictureHeaderInputParam_t picHdrIn; - vdxPictureHeader_t picHeader; - vdcInstance_t *instance = inOutParam->vdcInstance; - vdcPictureParam_t *pictureParam = &instance->pictureParam; - vdcPictureParam_t prevPictParam; - int trd; /* Difference between present and previous tr */ - int fInterFrame; /* non-zero = INTER frame, 0 = INTRA frame */ - int fPBFrame; /* Flag indicating a PB-frame */ - int fRPS; /* 1 = RPS used, 0 = RPS not used */ - int ret = 0; /* temporary variable to carry return values */ - int retVal = DPH_OK; /* return value if everything as expected, - either DPH_OK or DPH_OK_BUT_SKIP */ - int16 error = 0; /* snc and mvc module error code */ - - - /* - * Get picture header - */ - - picHdrIn.numStuffBits = inParam->numStuffBits; - picHdrIn.fCustomPCF = 0; - picHdrIn.fScalabilityMode = 0; - picHdrIn.fRPS = instance->fRPS; - picHdrIn.flushBits = bibFlushBits; - picHdrIn.getBits = bibGetBits; - picHdrIn.showBits = bibShowBits; - - /* Used to recover the 1st picture segment */ - u_int32 picHeaderStartPos = bibNumberOfFlushedBits(inBuffer); - - if ( inParam->numStuffBits ) { - bibFlushBits(inParam->numStuffBits, inBuffer, &picHdrIn.numStuffBits, bitErrorIndication, &error); - picHdrIn.numStuffBits = 0; - } - - // Read header bits normally from the bitstream - ret = vdxGetPictureHeader(inBuffer, &picHdrIn, &picHeader, - bitErrorIndication); - - if ( ret < 0 ) - return DPH_ERR; - else if ( ret == VDX_OK_BUT_BIT_ERROR ) - { - // Bit error exists. - return DPH_OK_BUT_BIT_ERROR; - } // end of if ( ret == VDX_OK_BUT_BIT_ERROR ) - - - /* - * Check picture header validity - */ - - /* Local parameters needed in validity check (and possibly afterwards) */ - fPrevIntraGot = instance->fIntraGot; - fInterFrame = (picHeader.pictureType == VDX_PIC_TYPE_P || - picHeader.pictureType == VDX_PIC_TYPE_PB || - picHeader.pictureType == VDX_PIC_TYPE_IPB); - fPBFrame = ((picHeader.pictureType == VDX_PIC_TYPE_PB)|| - (picHeader.pictureType == VDX_PIC_TYPE_IPB)); - - /* TR with the same value as in the previous picture can be interpreted - two ways: - - if Reference Picture Selection is enabled, it means - a synchronization frame - - if Reference Picture Selection is not used, it means the maximum - difference between two frames. - However, at least VDOPhone uses TR equal to zero always, which - in practice should be interpreted that TR field is not used in - display timing. */ - - /* At first, check if RPS is used */ - if (picHeader.fPLUSPTYPE && picHeader.ufep) - fRPS = picHeader.fRPS; - else - fRPS = instance->fRPS; - - /* Calculate temporal reference difference (from the previous frame) */ - trd = picHeader.tr - instance->pictureParam.tr; - if (trd < 0) - trd += 256; /* Note: Add ETR support */ - - /* If TR is the same as in the previous frame and Reference Picture Selection - is not used and not the very first frame (in which case previous tr == 0), - the temporal reference difference is the maximum one. */ - if (trd == 0 && !fRPS && instance->frameNum > 0) - trd = 256; /* Note: Add ETR support */ - - /* If unsupported picture type */ - if (picHeader.pictureType != VDX_PIC_TYPE_I - && picHeader.pictureType != VDX_PIC_TYPE_P - && picHeader.pictureType != VDX_PIC_TYPE_PB - && picHeader.pictureType != VDX_PIC_TYPE_IPB - ) { - return DPH_OK_BUT_BIT_ERROR; - } - - if (picHeader.pictureType == VDX_PIC_TYPE_PB || - picHeader.pictureType == VDX_PIC_TYPE_IPB) { - return DPH_OK_BUT_BIT_ERROR; - } - - if (picHeader.cpm) { - /* No CPM support */ - return DPH_OK_BUT_BIT_ERROR; - } - - if (picHeader.fPLUSPTYPE) { - /* If unsupported modes (and UFEP is whatever) */ - if (picHeader.fRPR || - picHeader.fRRU) { - return DPH_OK_BUT_BIT_ERROR; - } - - if (picHeader.ufep == 1) { - /* If unsupported mode */ - if (picHeader.fISD || - picHeader.fSAC || - picHeader.fAIV || - picHeader.fCustomPCF) { - return DPH_OK_BUT_BIT_ERROR; - } - - if (picHeader.fUMV) { - return DPH_OK_BUT_BIT_ERROR; - } - - if (picHeader.fAP) { - return DPH_OK_BUT_BIT_ERROR; - } - - if (picHeader.fAIC) { - return DPH_OK_BUT_BIT_ERROR; - } - - - - if (picHeader.fDF) { - return DPH_OK_BUT_BIT_ERROR; - } - - - - if (picHeader.fSS) { - return DPH_OK_BUT_BIT_ERROR; - } - - - - if (picHeader.fMQ) { - return DPH_OK_BUT_BIT_ERROR; - } - - } - - /* Note: Add check for "The Indenpenent Segment Decoding mode shall not - be used with the Reference Picture Resampling mode" - from section 5.1.4.6 of the H.263 recommendation whenever both of - the modes in question are supported. - Note that this check cannot reside in vdxGetPictureHeader since - ISD and RPR can be turned on in different pictures. */ - } - - /* Else no PLUSPTYPE */ - else { - /* If unsupported modes */ - if (picHeader.fSAC) { - return DPH_OK_BUT_BIT_ERROR; - } - - if (picHeader.fUMV) { - return DPH_OK_BUT_BIT_ERROR; - } - - if (picHeader.fAP) { - return DPH_OK_BUT_BIT_ERROR; - } - } - - /* If no INTRA frame has ever been decoded and the current frame is INTER */ - if (!fPrevIntraGot && fInterFrame) - return DPH_ERR_NO_INTRA; - - if (fPrevIntraGot) { - - /* If width and height are indicated in the header and - they are different from the previous */ - if ((picHeader.fPLUSPTYPE == 0 || picHeader.ufep == 1) && - (instance->pictureParam.lumWidth != picHeader.lumWidth || - instance->pictureParam.lumHeight != picHeader.lumHeight)) { - - if (fInterFrame) { - /* INTER frame, check that the source format has not changed */ - deb("vdcDecodeFrame: ERROR - Source format has changed " - "(INTER frame)\n"); - return DPH_OK_BUT_BIT_ERROR; - } - else if ( *bitErrorIndication ) { - deb("vdcDecodeFrame: ERROR - Frame size changing during " - "the sequence, cause: bitError\n"); - return DPH_OK_BUT_BIT_ERROR; - } - else { - /* At the moment do NOT allow source format changes during - the sequence. */ - deb("vdcDecodeFrame: ERROR - Frame size changing during " - "the sequence\n"); - return DPH_ERR_FORMAT_CHANGE; - } - } - } - - /* If the temporal reference of B points after P */ - if (fPBFrame && trd <= picHeader.trb) { - deb("vdcDecodeFrame: ERROR - TRB illegal.\n"); - return DPH_OK_BUT_BIT_ERROR; - } - - - /* Now, the picture header is considered to be error-free, - and its contents are used to manipulate instance data */ - - /* - * Update instance data and output parameters - */ - - /* Update frame numbers */ - { - int32 oldFrameNum = instance->frameNum; - - instance->frameNum += trd; - if (instance->frameNum < 0) - /* Wrap from 0x7fffffff to 0 instead of the largest negative number */ - instance->frameNum += 0x80000000; - - if (fPBFrame) { - instance->frameNumForBFrame = oldFrameNum + picHeader.trb; - if (instance->frameNumForBFrame < 0) - /* Wrap from 0x7fffffff to 0 instead of the largest negative number */ - instance->frameNumForBFrame += 0x80000000; - } - else - instance->frameNumForBFrame = -1; - } - - /* Note: If no INTRA has been got the function has already returned */ - instance->fIntraGot = 1; - - outParam->pquant = picHeader.pquant; - - instance->fRPS = fRPS; - - if (instance->fRPS && picHeader.trpi) - outParam->trp = picHeader.trp; - else - outParam->trp = -1; - - if (instance->fRPS && picHeader.fPLUSPTYPE && picHeader.ufep) - instance->rpsMode = picHeader.rpsMode; - - /* Store previous picture parameters temporarily */ - memcpy(&prevPictParam, pictureParam, sizeof(vdcPictureParam_t)); - - /* Update picture parameters */ - pictureParam->tr = picHeader.tr; - pictureParam->trd = trd; - pictureParam->fSplitScreenIndicator = picHeader.fSplitScreen; - pictureParam->fDocumentCameraIndicator = picHeader.fDocumentCamera; - pictureParam->fFullPictureFreezeRelease = picHeader.fFreezePictureRelease; - pictureParam->pictureType = picHeader.pictureType; - pictureParam->fPLUSPTYPE = picHeader.fPLUSPTYPE; - pictureParam->cpm = picHeader.cpm; - pictureParam->psbi = picHeader.psbi; - - if (fPBFrame) { - pictureParam->trb = picHeader.trb; - pictureParam->dbquant = picHeader.dbquant; - } - - if (!picHeader.fPLUSPTYPE || picHeader.ufep) { - pictureParam->lumWidth = picHeader.lumWidth; - pictureParam->lumHeight = picHeader.lumHeight; - pictureParam->fUMV = picHeader.fUMV; - pictureParam->fSAC = picHeader.fSAC; - pictureParam->fAP = picHeader.fAP; - - if (pictureParam->lumWidth % 16) - pictureParam->lumMemWidth = - (pictureParam->lumWidth / 16 + 1) * 16; - else - pictureParam->lumMemWidth = pictureParam->lumWidth; - - if (pictureParam->lumHeight % 16) - pictureParam->lumMemHeight = (pictureParam->lumHeight / 16 + 1) * 16; - else - pictureParam->lumMemHeight = pictureParam->lumHeight; - - if (picHeader.lumHeight <= 400) - pictureParam->numMBLinesInGOB = 1; - else if (picHeader.lumHeight <= 800) - pictureParam->numMBLinesInGOB = 2; - else - pictureParam->numMBLinesInGOB = 4; - - pictureParam->numMBsInMBLine = pictureParam->lumMemWidth / 16; - - { - int - numMBLines = pictureParam->lumMemHeight / 16, - numMBLinesInLastGOB = - numMBLines % pictureParam->numMBLinesInGOB; - - if (numMBLinesInLastGOB) { - pictureParam->numGOBs = - numMBLines / pictureParam->numMBLinesInGOB + 1; - pictureParam->fLastGOBSizeDifferent = 1; - pictureParam->numMBsInLastGOB = - numMBLinesInLastGOB * pictureParam->numMBsInMBLine; - } - else { - pictureParam->numGOBs = - numMBLines / pictureParam->numMBLinesInGOB ; - pictureParam->fLastGOBSizeDifferent = 0; - pictureParam->numMBsInLastGOB = - pictureParam->numMBLinesInGOB * pictureParam->numMBsInMBLine; - } - } - - pictureParam->numMBsInGOB = - pictureParam->numMBsInMBLine * pictureParam->numMBLinesInGOB; - } - - else { - pictureParam->lumWidth = prevPictParam.lumWidth; - pictureParam->lumHeight = prevPictParam.lumHeight; - pictureParam->lumMemWidth = prevPictParam.lumMemWidth; - pictureParam->lumMemHeight = prevPictParam.lumMemHeight; - pictureParam->fUMV = prevPictParam.fUMV; - pictureParam->fSAC = prevPictParam.fSAC; - pictureParam->fAP = prevPictParam.fAP; - } - - /* Note: Mode inference rules defined in section 5.1.4.5 of - the H.263 recommendation are (in most cases) not reflected to members - of pictureParam due to the fact that they are implicitly turned - off or irrelevant in the current implementation. (This is particularly - true when assigning inferred state "off".) */ - - if (picHeader.fPLUSPTYPE) { - pictureParam->fRPR = picHeader.fRPR; - pictureParam->fRRU = picHeader.fRRU; - pictureParam->rtype = picHeader.rtype; - - /* Note: irrelevant if Annex O is not in use */ - pictureParam->elnum = picHeader.elnum; - - if (picHeader.ufep) { - pictureParam->fCustomSourceFormat = picHeader.fCustomSourceFormat; - pictureParam->fAIC = picHeader.fAIC; - pictureParam->fDF = picHeader.fDF; - pictureParam->fSS = picHeader.fSS; - pictureParam->fRPS = picHeader.fRPS; - pictureParam->fISD = picHeader.fISD; - pictureParam->fAIV = picHeader.fAIV; - pictureParam->fMQ = picHeader.fMQ; - - pictureParam->fUMVLimited = picHeader.fUMVLimited; - - } - - /* Else no UFEP */ - else { - pictureParam->fCustomSourceFormat = - prevPictParam.fCustomSourceFormat; - pictureParam->fAIC = prevPictParam.fAIC; - pictureParam->fDF = prevPictParam.fDF; - pictureParam->fSS = prevPictParam.fSS; - pictureParam->fRPS = prevPictParam.fRPS; - pictureParam->fISD = prevPictParam.fISD; - pictureParam->fAIV = prevPictParam.fAIV; - pictureParam->fMQ = prevPictParam.fMQ; - - pictureParam->fUMVLimited = prevPictParam.fUMVLimited; - - } - } - - /* Else no PLUSPTYPE */ - else { - /* Section 5.1.4.5 of the H.263 recommendation states: - "If a picture is sent which does not contain (PLUSPTYPE), - a state "off" shall be assigned to all modes not explicitly set to - "on" in the PTYPE filed, and all modes shall continue to have - an inferred state of "off" until a new picture containing - the optional part of PLUSPTYPE is sent." */ - - /* Fields occuring in mandatory part of PLUSPTYPE are copied from - the previous picture. */ - pictureParam->fRPR = prevPictParam.fRPR; - pictureParam->fRRU = prevPictParam.fRRU; - - /* RTYPE is set to zero according to section 6.1.2 of - the H.263 recommendation */ - pictureParam->rtype = 0; - - /* Modes occuring in the optional part of PLUSPTYPE are turned off - (unless occuring in PTYPE field too, like Advanced Prediction). */ - pictureParam->fCustomSourceFormat = 0; - pictureParam->fCustomPCF = 0; - pictureParam->fAIC = 0; - pictureParam->fDF = 0; - pictureParam->fSS = 0; - pictureParam->fRPS = 0; - pictureParam->fISD = 0; - pictureParam->fAIV = 0; - pictureParam->fMQ = 0; - - /* Other related settings turned off just to be sure that they are - not misused. */ - pictureParam->fUMVLimited = 0; - } - - pictureParam->fMVsOverPictureBoundaries = - (pictureParam->fUMV || pictureParam->fAP || - pictureParam->fDF); - - /* Initialize motion vector count module */ - mvcStart( &instance->mvcData, - instance->pictureParam.lumMemWidth / 16 - 1, - pictureParam->lumMemWidth, - pictureParam->lumMemHeight, &error); - /* Note: This assumes that the memory for frame->mvcData is filled with 0 - in the first time the function is called. - (This is ensured by setting the instance data to zero when it is - initialized in vdcOpen.) */ - instance->mvcData.fSS = pictureParam->fSS; - - if (error) { - deb("mvcStart failed.\n"); - return DPH_ERR; - } - - /* Get image buffers */ - { - vdeIms_t *store = instance->imageStore; - vdeImsItem_t *imsItem; - vdeImb_t *imb; - int width, height; - - vdeImsSetYUVNeed(store, inParam->fNeedDecodedFrame); - - if (vdeImsGetFree(store, instance->pictureParam.lumMemWidth, - instance->pictureParam.lumMemHeight, - &instance->currFrame) < 0) - goto errGetFreeP; - imsItem = instance->currFrame; - - - if (vdeImsStoreItemToImageBuffer(imsItem, &imb) < 0) - goto errAfterGetFreeP; - - if (vdeImbYUV(imb, &outParam->currYFrame, - &outParam->currUFrame, &outParam->currVFrame, - &width, &height) < 0) - goto errAfterGetFreeP; - - } - - /* Initialize the parameters for the advanced intra coding structure. */ - if (pictureParam->fAIC) - { - // not supported - } - - /* Initialize the parameters for Slice Structured Mode. */ - if (pictureParam->fSS) - { - // not supported - } - - - /* If picture header successfully decoded or reliably recovered */ - if ( inParam->fReadBits && ret == VDX_OK ) { - - /* In the beginning, tr is set to -1 */ - if ( instance->fPrevPicHeaderReliable - && instance->prevPicHeader->tr >= 0 - && ( picHeader.pictureType != instance->prevPicHeader->pictureType - || picHeader.fUMV != instance->prevPicHeader->fUMV - || picHeader.fAP != instance->prevPicHeader->fAP - || picHeader.fPLUSPTYPE != instance->prevPicHeader->fPLUSPTYPE - || ( ( picHeader.fPLUSPTYPE == 0 || picHeader.ufep == 1 ) - && ( picHeader.lumWidth != instance->prevPicHeader->lumWidth - || picHeader.lumHeight != instance->prevPicHeader->lumHeight ) - ) - || ( picHeader.fPLUSPTYPE == 1 && picHeader.ufep == 1 - && ( picHeader.fAIC != instance->prevPicHeader->fAIC - || picHeader.fDF != instance->prevPicHeader->fDF - || picHeader.fMQ != instance->prevPicHeader->fMQ - || picHeader.fUMVLimited != instance->prevPicHeader->fUMVLimited - ) - ) - ) - || ( picHeader.fPLUSPTYPE == 1 - && picHeader.rtype != instance->prevPicHeader->rtype ) - ) { - - /* Some parameter in PTYPE/PLUSPTYPE has changed, GFID should change also */ - /* Note that some parameters, such as SAC, are not checked since they have not been implemented */ - - instance->fGFIDShouldChange = 1; - } - else if ( !instance->fPrevPicHeaderReliable ) { - /* Previous picture header was not reliable, don't check GFID */ - instance->fGFIDShouldChange = 1; - instance->gfid = -1; - } - else if ( instance->gfid == -1 ) { - /* The very first frame, or a frame after a lost frame, GFID can be whatever */ - /* Note: instance->gfid == -1 is used to indicate that previous GFID - is not available as in the first picture in first GOB header. - If there is a picture without GOB headers and having a different - picture header than the surrounding pictures, instance->gfid is - reset to -1 in vdcDecodeFrame()! (Otherwise, a wrong GFID may be - used in GFID correctness check.) */ - instance->fGFIDShouldChange = 1; - } - else { - /* No changes in PTYPE => the same GFID. - * It is better not to change the value of this flag here, since - * if there are no GOB or slice headers where GFID can change, the next - * read GFID in some other frame than the one with the different PTYPE - * will be considered illegal - */ - /* instance->fGFIDShouldChange = 0; */ - } - - /* Header was reliable and can be used when checking the next header */ - instance->fPrevPicHeaderReliable = 1; - - /* Copy the read header to be used if the next header is corrupted or lost */ - memcpy( instance->prevPicHeader, &picHeader, sizeof( vdxPictureHeader_t ) ); - } - - /* Else picture header unreliable */ - else { - /* Since we cannot trust that picture header is reliable, - we cannot detect errors based on GFID. - Thus, let's disable GFID checking in GOB level. */ - instance->fPrevPicHeaderReliable = 0; - instance->fGFIDShouldChange = 1; - instance->gfid = -1; - } - - return retVal; - - /* Error condition handling, - release everything in reverse order */ -// errAfterGetFreeB: - -// vdeImsPutFree(instance->imageStore, instance->bFrame); -// errGetFreeB: - - errAfterGetFreeP: - - vdeImsPutFree(instance->imageStore, instance->currFrame); - errGetFreeP: - - instance->currFrame = NULL; - instance->bFrame = NULL; - - return DPH_ERR; -} - - -/* {{-output"dphGetSEI.txt"}} */ -/* - * dphGetSEI - * - * - * Parameters: - * vdcInstance Video Decoder Core instance - * inBuffer Bit Buffer instance - * bitErrorIndication bit error indication, see biterr.h for - * the possible values - * - * Function: - * This function gets and decodes Supplemental Enhancement - * Information. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int dphGetSEI( - vdcInstance_t *vdcInstance, /* Video Decoder Core instance */ - bibBuffer_t *inBuffer, /* Bit Buffer instance */ - int *bitErrorIndication) -{ -/* {{-output"dphGetSEI.txt"}} */ - int - vdxStatus; - - vdxSEI_t - sei; - - vdxStatus = vdxGetAndParseSEI( - inBuffer, - vdcInstance->pictureParam.fPLUSPTYPE, - vdcInstance->numAnnexNScalabilityLayers, - &sei, - bitErrorIndication); - - if (vdxStatus < 0) - return DPH_ERR; - else if (vdxStatus == VDX_OK_BUT_BIT_ERROR) - return DPH_OK_BUT_BIT_ERROR; - - - return DPH_OK; -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/decpich_mpeg.cpp --- a/videoeditorengine/h263decoder/src/decpich_mpeg.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,417 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Picture header decoding functions (MPEG-4). -* -*/ - - - -#include "h263dConfig.h" -#include "mpegcons.h" -#include "sync.h" -#include "decpich.h" -#include "debug.h" -#include "vdeims.h" -#include "vdeimb.h" -#include "viddemux.h" - - -/* - * Global functions - */ - -/* - * dphGetMPEGVolHeader - * - * - * Parameters: - * hInstance instance data - * - * Function: - * This function decodes the Video Object Header and the VOL Header - * and initializes the fields of vdcInstance which are set in these - * headers. Check and reports (generating error messages) if the header - * shows a configuration on feature which is not supported by the - * Simple Video Object Profile of MPEG4 - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if a fatal error, from which the decoder - * cannot be restored, has occured - * - */ - -int dphGetMPEGVolHeader(dphInOutParam_t *inOutParam, CMPEG4Transcoder *hTranscoder) -{ - vdcInstance_t *instance = inOutParam->vdcInstance; - bibBuffer_t *inBuffer = inOutParam->inBuffer; - int bitErrorIndication = 0; - vdxVolHeader_t volHeader; - - /* read the Stream headers from the bitstream */ - if ((vdxGetVolHeader(inBuffer, &volHeader, &bitErrorIndication, 0, 0, 0, hTranscoder) != VDX_OK) || - (bitErrorIndication != 0)) { - return DPH_ERR; - } - - /* copy the useful VOL parameters to pictureParam or the core data structure */ - instance->pictureParam.vo_id = volHeader.vo_id; - instance->pictureParam.vol_id = volHeader.vol_id; - instance->pictureParam.time_increment_resolution = volHeader.time_increment_resolution; - - /* MVE */ - instance->pictureParam.fixed_vop_rate = volHeader.fixed_vop_rate; - - instance->pictureParam.lumWidth = volHeader.lumWidth; - instance->pictureParam.lumHeight = volHeader.lumHeight; - - if (volHeader.lumWidth%16) - instance->pictureParam.lumMemWidth = (((volHeader.lumWidth >>4/*/16*/) + 1) <<4/** 16*/); - else - instance->pictureParam.lumMemWidth = volHeader.lumWidth; - - if (volHeader.lumHeight%16) - instance->pictureParam.lumMemHeight = (((volHeader.lumHeight >>4/*/16*/) + 1) <<4/** 16*/); - else - instance->pictureParam.lumMemHeight = volHeader.lumHeight; - - instance->pictureParam.error_res_disable = volHeader.error_res_disable; - instance->pictureParam.data_partitioned = volHeader.data_partitioned; - instance->pictureParam.reversible_vlc = volHeader.reversible_vlc; - - /* copy the got user data to the core data structure */ - if (volHeader.user_data != NULL) { - instance->user_data = (char *) malloc(MAX_USER_DATA_LENGTH); - - volHeader.user_data_length = - ((instance->user_data_length + volHeader.user_data_length) >= MAX_USER_DATA_LENGTH) ? - (MAX_USER_DATA_LENGTH - instance->user_data_length) : volHeader.user_data_length; - - memcpy( - instance->user_data + instance->user_data_length, - volHeader.user_data, - volHeader.user_data_length); - - instance->user_data_length += volHeader.user_data_length; - - free(volHeader.user_data); - } - - return DPH_OK; -} - -/* {{-output"dphGetMPEGVopHeader.txt"}} */ -/* - * dphGetMPEGVopHeader - * - * - * Parameters: - * inOutParam input/output parameters, these parameters - * may be modified in the function - * outParam output parameters - * bitErrorIndication bit error indication, see biterr.h for - * the possible values - * - * Function: - * This function gets and decodes an MPEG Vop header which should start - * with a VOP start_code at the current position of the bit buffer. - * At first, the function reads the picture header fields from the bitstream. - * Then, it checks whether the values of the fields are supported. - * An unsupported value is interpreted as a bit error. Finally, - * the function updates VDC instance data and output parameters - * (according to the new picture header). - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int dphGetMPEGVopHeader( - const dphInParam_t *inParam, - dphInOutParam_t *inOutParam, - dphOutParam_t *outParam, - int *bitErrorIndication) -/* {{-output"dphGetMPEGVopHeader.txt"}} */ -{ - bibBuffer_t *inBuffer = inOutParam->inBuffer; - u_char fPrevIntraGot; /* Non-zero if an INTRA frame has been decoded - before the current frame */ - vdxGetVopHeaderInputParam_t picHdrIn; - vdxVopHeader_t picHeader; - vdcInstance_t *instance = inOutParam->vdcInstance; - vdcPictureParam_t *pictureParam = &instance->pictureParam; - int fInterFrame; /* non-zero = INTER frame, 0 = INTRA frame */ - int ret = DPH_OK, curr_mod_time_base=0; - int16 error = 0; - int32 currFrameNum=0; - - /* In normal case read the picture header from the bitstream. - This function can be also called just to initialize the default - picture header parameters and allocate image buffers, but not read - the picture header from bitstream. This is used when the picture - header has been lost (e.g. packet loss) but decoding is continued */ - - if (inParam->fReadBits) { - - /* - * Get picture header - */ - - picHdrIn.time_increment_resolution = pictureParam->time_increment_resolution; - - /* MVE */ - int dummy1, dummy2, dummy3, dummy4; /* not used for processing */ - ret = vdxGetVopHeader(inBuffer, &picHdrIn, &picHeader, - &dummy1, &dummy2, &dummy3, &dummy4, - bitErrorIndication); - - if ( ret < 0 ) - return DPH_ERR; - else if ( ret > 0 ) { - ret = DPH_OK_BUT_BIT_ERROR; - goto updateInstanceData; - } else { - ret = DPH_OK; - } - - /* - * Check picture header validity - */ - - /* Local parameters needed in validity check (and possibly afterwards) */ - fPrevIntraGot = instance->fIntraGot; - fInterFrame = (picHeader.coding_type == VDX_VOP_TYPE_P); - - - if (picHeader.time_base_incr < 0 || picHeader.time_base_incr > 60) { - if ( *bitErrorIndication ) { - ret = DPH_OK_BUT_BIT_ERROR; - goto updateInstanceData; - } - } - - curr_mod_time_base = pictureParam->mod_time_base + picHeader.time_base_incr; - - currFrameNum = (int) ((curr_mod_time_base + - ((double) picHeader.time_inc) / ((double) pictureParam->time_increment_resolution)) * - 30.0 + 0.001); - - if ((currFrameNum <= instance->frameNum) && - (instance->frameNum > 0)) { - if (*bitErrorIndication) { - ret = DPH_OK_BUT_BIT_ERROR; - goto updateInstanceData; - } else { - /* this can happen if a previous picture header is lost and it had - mod_time_base increase information. */ - int i; - int32 tryFrameNum=0; - for (i=1;i<5;i++) { - tryFrameNum = (int) (((curr_mod_time_base+i) + - ((double) picHeader.time_inc) / ((double) pictureParam->time_increment_resolution)) * - 30.0 + 0.001); - if (tryFrameNum > instance->frameNum) { - currFrameNum = tryFrameNum; - curr_mod_time_base += i; - ret = DPH_OK; - break; - } - } - if (i==5) { - ret = DPH_OK_BUT_BIT_ERROR; - goto updateInstanceData; - } - } - } - - /* If no INTRA frame has ever been decoded and the current frame is INTER */ - if (!fPrevIntraGot && fInterFrame) { - deb("ERROR. No I-vop before a P-vop\n"); - return DPH_ERR_NO_INTRA; - - } - - /* fcode can have only the valid values 1..7 */ - if(picHeader.fcode_forward == 0) { - ret = DPH_OK_BUT_BIT_ERROR; - goto updateInstanceData; - } - - /* quant can not be zero */ - if(picHeader.quant == 0) { - ret = DPH_OK_BUT_BIT_ERROR; - goto updateInstanceData; - } - - } /* end fReadBits */ - - /* Now, the picture header is considered to be error-free, - and its contents are used to manipulate instance data */ - -updateInstanceData: - - /* - * Update instance data and output parameters - */ - - /* some parameters need to be set if error has been detected, for initializing */ - if (!inParam->fReadBits || (ret == DPH_OK_BUT_BIT_ERROR)) { - picHeader.rounding_type = 0; - picHeader.fcode_forward = 1; - picHeader.coding_type = 1; - } else { - /* Update frame numbers */ - pictureParam->time_base_incr = picHeader.time_base_incr; - pictureParam->mod_time_base = curr_mod_time_base; - pictureParam->time_inc = picHeader.time_inc; - instance->frameNum = currFrameNum; - } - - /* Update picture parameters */ - pictureParam->trd = (instance->frameNum % 256) - pictureParam->tr; - pictureParam->tr = instance->frameNum % 256; - - pictureParam->pictureType = picHeader.coding_type; - - if (!picHeader.vop_coded) { - return DPH_OK_BUT_NOT_CODED; - } - - /* NO reference picture selection */ - outParam->trp = -1; - - /* No PB Frames allowed */ - instance->frameNumForBFrame = -1; - - /* Note: If no INTRA has been got the function has already returned */ - instance->fIntraGot = 1; - - pictureParam->intra_dc_vlc_thr = picHeader.intra_dc_vlc_thr; - pictureParam->fcode_forward = picHeader.fcode_forward; - - outParam->pquant = picHeader.quant; - - /* Initialize for only 1 GOB */ - pictureParam->numMBLinesInGOB = pictureParam->lumMemHeight / 16; - pictureParam->numMBsInMBLine = pictureParam->lumMemWidth / 16; - - pictureParam->numGOBs = 1; - pictureParam->fLastGOBSizeDifferent = 0; - pictureParam->numMBsInGOB = - pictureParam->numMBsInMBLine * pictureParam->numMBLinesInGOB; - pictureParam->numMBsInLastGOB = pictureParam->numMBsInGOB; - - /* Rounding type */ - pictureParam->rtype = picHeader.rounding_type; - - /* NO channel Multiplexing */ - pictureParam->fSplitScreenIndicator = 0; - pictureParam->fDocumentCameraIndicator = 0; - pictureParam->fFullPictureFreezeRelease = 0; - pictureParam->fPLUSPTYPE = 0; - pictureParam->cpm = 0; - - /* All the Annexes are switched off */ - pictureParam->fSAC = 0; - pictureParam->fRPR = 0; - pictureParam->fRRU = 0; - pictureParam->fCustomSourceFormat = 0; - pictureParam->fAIC = 0; - pictureParam->fDF = 0; - pictureParam->fSS = 0; - pictureParam->fRPS = 0; - pictureParam->fISD = 0; - pictureParam->fAIV = 0; - pictureParam->fMQ = 0; - pictureParam->fUMVLimited = 0; - - /* Unrestricted MV allowed - OBMC NOT allowed */ - pictureParam->fUMV = 1; - pictureParam->fAP = 0; - pictureParam->fMVsOverPictureBoundaries = 1; - - /* Initialize motion vector count module */ - mvcStart( &instance->mvcData, - ((instance->pictureParam.lumMemWidth >>4 /*/ 16*/) - 1), - pictureParam->lumWidth, - pictureParam->lumHeight, &error); - /* Note: This assumes that the memory for frame->mvcData is filled with 0 - in the first time the function is called. - (This is ensured by setting the instance data to zero when it is - initialized in vdcOpen.) */ - if (error) { - deb("mvcStart failed.\n"); - return DPH_ERR; - } - - /* Initialize once to count parameters for the mvc module */ - { - int r_size, scale_factor; - - instance->mvcData.f_code = pictureParam->fcode_forward; - r_size = pictureParam->fcode_forward - 1; - scale_factor = (1 << r_size); - instance->mvcData.range = 160 * scale_factor; - } - - /* Start, initialize the Advanced Intra Coding module */ - aicStart(&instance->aicData, pictureParam->numMBsInMBLine, &error); - if (error) { - deb("aicStart failed.\n"); - return DPH_ERR; - } - - /* Get image buffers */ - { - vdeIms_t *store = instance->imageStore; - vdeImsItem_t *imsItem; - vdeImb_t *imb; - int width, height; - - vdeImsSetYUVNeed(store, inParam->fNeedDecodedFrame); - - if (vdeImsGetFree(store, instance->pictureParam.lumMemWidth, - instance->pictureParam.lumMemHeight, - &instance->currFrame) < 0) - goto errGetFreeP; - imsItem = instance->currFrame; - - if (vdeImsStoreItemToImageBuffer(imsItem, &imb) < 0) - goto errAfterGetFreeP; - - if (vdeImbYUV(imb, &outParam->currYFrame, - &outParam->currUFrame, &outParam->currVFrame, - &width, &height) < 0) - goto errAfterGetFreeP; - } - - return ret; - - /* Error condition handling, - release everything in reverse order */ - errAfterGetFreeP: - - vdeImsPutFree(instance->imageStore, instance->currFrame); - errGetFreeP: - - instance->currFrame = NULL; - instance->bFrame = NULL; - - return DPH_ERR; -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/decvp_mpeg.cpp --- a/videoeditorengine/h263decoder/src/decvp_mpeg.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,653 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video packet decoding module (MPEG-4). -* -*/ - - -/* - * Includes - */ -#include "h263dConfig.h" -#include "decvp_mpeg.h" -#include "block.h" -#include "debug.h" -#include "decmbs.h" -#include "stckheap.h" -#include "sync.h" -#include "viddemux.h" -#include "biblin.h" -/* MVE */ -#include "MPEG4Transcoder.h" - -/* - * Global functions - */ - -/* {{-output"dvpGetAndDecodeVideoPacketHeader.txt"}} */ -/* - * dvpGetAndDecodeVideoPacketHeader - * - * - * Parameters: - * inParam input parameters - * inOutParam input/output parameters, these parameters - * may be modified in the function - * - * Function: - * This function gets and decodes a Video Packet header at the - * current position of the bit buffer. It checks its correctness and - * if it fits to the sequence of VPs, and does the necessary actions for - * correction. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int dvpGetAndDecodeVideoPacketHeader( - const dvpVPInParam_t *inParam, - dvpVPInOutParam_t *inOutParam) -/* {{-output"dvpGetAndDecodeVideoPacketHeader.txt"}} */ -{ - int16 error = 0; - vdxGetVideoPacketHeaderInputParam_t vdxParam; - vdxVideoPacketHeader_t header; - bibBuffer_t *inBuffer = inParam->inBuffer; - int bitErrorIndication = 0, retVal, fLostSegment = FALSE; - - /* - * Get VP header - */ - - vdxParam.fcode_forward = inParam->pictParam->fcode_forward; - vdxParam.time_increment_resolution = inParam->pictParam->time_increment_resolution; - vdxParam.numOfMBs = inParam->pictParam->numMBsInGOB; - - retVal = vdxGetVideoPacketHeader(inBuffer, &vdxParam, &header, &bitErrorIndication); - if (retVal < 0) { - return DGOB_ERR; - } else if (retVal > 0) { - deb("dvpGetAndDecodeVideoPacketHeader: ERROR - vdxGetVideoPacketHeader failed.\n"); - goto headerFailure; - } - - - /* - * Check header validity - */ - - if (header.currMBNum == 0 || header.currMBNum >= inParam->pictParam->numMBsInGOB) { - deb("dvpGetAndDecodeVideoPacketHeader: ERROR - too big currMBNum.\n"); - goto headerFailure; - } - - /* quant can not be zero */ - if(header.quant == 0) { - goto headerFailure; - } - - if (header.fHEC) { - - if (header.time_base_incr < 0 || header.time_base_incr > 60) { - if (bitErrorIndication) { - goto headerFailure; - } - } - - /* fcode can have only the valid values 1..7 */ - if (header.coding_type == VDX_VOP_TYPE_P) - if (header.fcode_forward == 0) { - goto headerFailure; - } - - if (!inParam->fVOPHeaderCorrupted) { - - if ((inParam->pictParam->pictureType != header.coding_type) || - (inParam->pictParam->time_base_incr != header.time_base_incr) || - (inParam->pictParam->time_inc != header.time_inc)) { - deb("dvpGetAndDecodeVideoPacketHeader: ERROR - Parameter change VOP<->VP header.\n"); - goto headerFailure; - } - } - } - if (inParam->fVOPHeaderCorrupted) { - /* Get the coding type parameter since it is needed in the concealment before the other updates */ - if (header.fHEC) { - inParam->pictParam->pictureType = header.coding_type; - } - } - if (header.currMBNum != inOutParam->currMBNum) { - if ( header.currMBNum > inOutParam->currMBNum && bitErrorIndication == 0) { - - fLostSegment = TRUE; - goto headerFailure; - - } else if (header.currMBNum < inOutParam->currMBNum) { - deb("dvpGetAndDecodeVideoPacketHeader: ERROR - MB counting is out of sync.\n"); - goto headerFailure; - } - } - - /* - * Update parameters - */ - - inOutParam->currMBNum = header.currMBNum; - inOutParam->quant = header.quant; - - if (inParam->fVOPHeaderCorrupted) { - if (header.fHEC) { - inParam->pictParam->mod_time_base += inParam->pictParam->time_base_incr = header.time_base_incr; - - inParam->pictParam->time_inc = header.time_inc; - - inOutParam->frameNum = (int) ((inParam->pictParam->mod_time_base + - ((double) header.time_inc) / ((double) inParam->pictParam->time_increment_resolution)) * - 30.0 + 0.001); - - inParam->pictParam->tr = inOutParam->frameNum % 256; - inParam->pictParam->pictureType = header.coding_type; - - inParam->pictParam->intra_dc_vlc_thr = header.intra_dc_vlc_thr; - - if (header.coding_type == VDX_VOP_TYPE_P) - if (inParam->pictParam->fcode_forward != header.fcode_forward) { - /* Initialize once to count parameters for the mvc module */ - int r_size, scale_factor; - - inParam->pictParam->fcode_forward = header.fcode_forward; - - inOutParam->mvcData->f_code = inParam->pictParam->fcode_forward; - r_size = inParam->pictParam->fcode_forward - 1; - scale_factor = (1 << r_size); - inOutParam->mvcData->range = 160 * scale_factor; - } - } else { - /* seek next PSC, VP start code is not good enough */ - sncRewindAndSeekNewMPEGSync(-1, inBuffer, 0, &error); - return DGOB_OK_BUT_BIT_ERROR; - } - } - - if (fLostSegment) - return DGOB_OK_BUT_BIT_ERROR; - else - return DGOB_OK; - - headerFailure: - sncRewindAndSeekNewMPEGSync(-1, inBuffer, inParam->pictParam->fcode_forward, &error); - - if (error && error != ERR_BIB_NOT_ENOUGH_DATA) - return DGOB_ERR; - return DGOB_OK_BUT_BIT_ERROR; -} - - -/* {{-output"dvpGetAndDecodeVideoPacketContents.txt"}} */ -/* - * dvpGetAndDecodeVideoPacketContents - * - * - * Parameters: - * inParam input parameters - * fGetNewReferenceFrame non-zero if a new reference frame must be - * requested from the image store, otherwise 0 - * inOutParam input/output parameters, these parameters - * may be modified in the function - * - * Function: - * This function gets and decodes the contents of a Video Packet - * after the header of the VP (either VP header or picture - * header) is already got and processed. It works MB-by-MB or if VP - * is data partitioned calls the corresponding decoding functions. - * Error concealment for the missing (not decodable) MBs in a P-frame - * is called. - * - * Returns: - * >= 0 the function was successful - * < 0 an error occured - * - */ - -int dvpGetAndDecodeVideoPacketContents( - const dvpVPInParam_t *inParam, - int fGetNewReferenceFrame, - dvpVPInOutParam_t *inOutParam, CMPEG4Transcoder *hTranscoder) -/* {{-output"dvpGetAndDecodeVideoPacketContents.txt"}} */ -{ - int16 error = 0; - int bitErrorIndication = 0; - dmbPFrameMBInParam_t dpmbi; - dmbPFrameMBInOutParam_t dpmbio; - dmbIFrameMBInParam_t dimbi; - dmbIFrameMBInOutParam_t dimbio; - int yPosInMBs, xPosInMBs = 0; - bibBuffer_t *inBuffer; - bibBuffer_t - *outBuffer; /* Output bit buffer instance */ - - bibBufferEdit_t - *bufEdit; - - int colorEffect; - TBool getDecodedFrame; - - - int fSegmentCorrupted = 0; - - int dmbRetValue; - int sncCode = SNC_NO_SYNC; - int lastMBNumInVP = 0; - int startMB = inOutParam->currMBNum; - - SOH_DEFINE(blcDiffMB_t, pDiffMB); /* Storage for the previous difference blocks */ - - SOH_ALLOC(blcDiffMB_t, pDiffMB); - - if (pDiffMB == NULL) { - deb("dvpGetAndDecodeVideoPacketContents: SOH_ALLOC failed.\n"); - goto unexpectedError; - } - - pDiffMB->cbpy = 0; - - inBuffer = inParam->inBuffer; - outBuffer = inParam->outBuffer; - bufEdit = inParam->bufEdit; - colorEffect = inParam->iColorEffect; - getDecodedFrame = inParam->iGetDecodedFrame; - - /* If the reference frame changed */ - if (fGetNewReferenceFrame) { - vdeIms_t *store = inOutParam->imageStore; - vdeImsItem_t *imsItem; - vdeImb_t *imb; - int width, height; - - if (vdeImsGetReference(store, VDEIMS_REF_LATEST, 0, &imsItem) < 0) { - deb("dvpGetAndDecodeVideoPacketContents: ERROR - vdeImsGetReference " - "failed.\n"); - goto unexpectedError; - } - - /* If no reference frame available */ - if (!imsItem) { - /* Treat the situation like a decoding error.*/ - deb("dvpGetAndDecodeVideoPacketContents: Warning - no reference frame " - "available.\n"); - goto headerFailure; - } - - if (vdeImsStoreItemToImageBuffer(imsItem, &imb) < 0) { - deb("dvpGetAndDecodeVideoPacketContents: ERROR - vdeImsStoreItemToImageBuffer " - "failed.\n"); - goto unexpectedError; - } - - if (vdeImbYUV(imb, &inOutParam->refY, &inOutParam->refU, - &inOutParam->refV, &width, &height) < 0) { - deb("dvpGetAndDecodeVideoPacketContents: ERROR - vdeImbYUV " - "failed.\n"); - goto unexpectedError; - } - } - - xPosInMBs = (inOutParam->currMBNum % inParam->pictParam->numMBsInMBLine); - yPosInMBs = (inOutParam->currMBNum / inParam->pictParam->numMBsInMBLine); - - /* if VOP header corrupted and first VP -> exit */ - if(inParam->fVOPHeaderCorrupted && inOutParam->currMBNum==0) { - fSegmentCorrupted = 1; - goto exitWhenVOPHeaderCorrupted; - } - - /* in case of an I-VOP */ - if (inParam->pictParam->pictureType == VDX_VOP_TYPE_I) { - dimbi.inBuffer = inBuffer; - dimbi.outBuffer = outBuffer; - dimbi.bufEdit = bufEdit; - dimbi.iColorEffect = colorEffect; - dimbi.iGetDecodedFrame = getDecodedFrame; - - dimbi.pictParam = inParam->pictParam; - - dimbi.xPosInMBs = xPosInMBs; - dimbi.yPosInMBs = yPosInMBs; - - dimbio.currMBNum = inOutParam->currMBNum; - dimbio.currMBNumInVP = 0; - - dimbio.aicData = inOutParam->aicData; - - dimbio.fCodedMBs = inOutParam->fCodedMBs; - dimbio.numOfCodedMBs = inOutParam->numOfCodedMBs; - dimbio.quant = inOutParam->quant; - - /* YUV pointers */ - { - int32 yOffset, uvOffset; - - yOffset = inParam->pictParam->lumMemWidth * dimbi.yPosInMBs + dimbi.xPosInMBs; - uvOffset = (inParam->pictParam->lumMemWidth >> 1) * dimbi.yPosInMBs + dimbi.xPosInMBs; - - if ( inOutParam->currPY != NULL ) - { - dimbio.yMBInFrame = inOutParam->currPY + (yOffset << 4); - dimbio.uBlockInFrame = inOutParam->currPU + (uvOffset << 3); - dimbio.vBlockInFrame = inOutParam->currPV + (uvOffset << 3); - } - else - { - dimbio.yMBInFrame = NULL; - dimbio.uBlockInFrame = NULL; - dimbio.vBlockInFrame = NULL; - } - } - } - /* in case of a P-VOP */ - else { - dpmbi.inBuffer = inBuffer; - dpmbi.outBuffer = outBuffer; - dpmbi.bufEdit = bufEdit; - dpmbi.iColorEffect = colorEffect; - dpmbi.iGetDecodedFrame = getDecodedFrame; - - dpmbi.pictParam = inParam->pictParam; - - dpmbi.xPosInMBs = xPosInMBs; - dpmbi.yPosInMBs = yPosInMBs; - - dpmbi.refY = inOutParam->refY; - dpmbi.refU = inOutParam->refU; - dpmbi.refV = inOutParam->refV; - dpmbi.currPY = inOutParam->currPY; - dpmbi.currPU = inOutParam->currPU; - dpmbi.currPV = inOutParam->currPV; - - dpmbio.currMBNum = inOutParam->currMBNum; - dpmbio.currMBNumInVP = 0; - - dpmbio.fCodedMBs = inOutParam->fCodedMBs; - dpmbio.numOfCodedMBs = inOutParam->numOfCodedMBs; - dpmbio.quant = inOutParam->quant; - - dpmbio.aicData = inOutParam->aicData; - - dpmbio.mvcData = inOutParam->mvcData; - dpmbio.diffMB = pDiffMB; - - /* YUV pointers */ - { - int32 yOffset, uvOffset; - - yOffset = inParam->pictParam->lumMemWidth * dpmbi.yPosInMBs + dpmbi.xPosInMBs; - uvOffset = (inParam->pictParam->lumMemWidth >> 1) * dpmbi.yPosInMBs + dpmbi.xPosInMBs; - - if ( inOutParam->currPY != NULL ) - { - dpmbio.yMBInFrame = inOutParam->currPY + (yOffset << 4); - dpmbio.uBlockInFrame = inOutParam->currPU + (uvOffset << 3); - dpmbio.vBlockInFrame = inOutParam->currPV + (uvOffset << 3); - } - else - { - dimbio.yMBInFrame = NULL; - dimbio.uBlockInFrame = NULL; - dimbio.vBlockInFrame = NULL; - } - } - } - - /* Decode multiple Macroblocks until a resync_marker is found or error occurs */ - while (inParam->pictParam->numMBsInGOB != inOutParam->currMBNum && - sncCode != SNC_VIDPACK && sncCode != SNC_VOP) { - - /* MVE */ - hTranscoder->BeginOneMB((inParam->pictParam->pictureType == VDX_VOP_TYPE_I) ? dimbio.currMBNum : dpmbio.currMBNum ); - - /* decode an I-frame MB */ - if (inParam->pictParam->pictureType == VDX_VOP_TYPE_I) { - - if(inParam->pictParam->data_partitioned) { - - dmbRetValue = dmbsGetAndDecodeIMBsDataPartitioned(&dimbi, &dimbio, - inOutParam->quantParams, hTranscoder); - - if (dmbRetValue < 0) - goto unexpectedError; - - inOutParam->currMBNum = dimbio.currMBNum; - - /* Video Packet corrupted */ - if ( fSegmentCorrupted ) - break; - - } else { - - dmbRetValue = dmbGetAndDecodeIFrameMB(&dimbi, &dimbio, 1, hTranscoder); - - if (dmbRetValue < 0) - goto unexpectedError; - else if (dmbRetValue == DMB_BIT_ERR ) { - /* Video Packet corrupted */ - fSegmentCorrupted = 1; - break; - } - - /* Store quantizer */ - inOutParam->quantParams[dimbio.currMBNum] = dimbio.quant; - - /* increment the frame pointers and MB counters */ - dimbio.currMBNum++; - dimbio.currMBNumInVP++; - - if ( dimbio.yMBInFrame != NULL ) - { - dimbio.yMBInFrame += 16; - dimbio.uBlockInFrame += 8; - dimbio.vBlockInFrame += 8; - } - dimbi.xPosInMBs++; - - if (dimbi.xPosInMBs == inParam->pictParam->numMBsInMBLine) { - if ( dimbio.yMBInFrame != NULL ) - { - dimbio.yMBInFrame += 15 * inParam->pictParam->lumMemWidth; - dimbio.uBlockInFrame += 7 * (inParam->pictParam->lumMemWidth >> 1); - dimbio.vBlockInFrame += 7 * (inParam->pictParam->lumMemWidth >> 1); - } - dimbi.xPosInMBs = 0; - dimbi.yPosInMBs++; - } - - inOutParam->currMBNum = dimbio.currMBNum; - } - - /* decode a P-frame MB */ - } else { - - if(inParam->pictParam->data_partitioned) { - - dmbRetValue = dmbsGetAndDecodePMBsDataPartitioned(&dpmbi, &dpmbio, - inOutParam->quantParams, hTranscoder); - - if (dmbRetValue < 0) - goto unexpectedError; - - inOutParam->currMBNum = dpmbio.currMBNum; - lastMBNumInVP = dpmbio.currMBNumInVP; - - /* Video Packet corrupted */ - if ( fSegmentCorrupted ) - break; - - } else { - - dmbRetValue = dmbGetAndDecodePFrameMB(&dpmbi, &dpmbio, 1, hTranscoder); - - if (dmbRetValue < 0) - goto unexpectedError; - else if (dmbRetValue == DMB_BIT_ERR ) { - /* Video Packet corrupted */ - fSegmentCorrupted = 1; - break; - } - - /* Store quantizer */ - inOutParam->quantParams[dpmbio.currMBNum] = dpmbio.quant; - - /* increment the frame pointers and MB counters */ - dpmbio.currMBNum++; - dpmbio.currMBNumInVP++; - - if ( dpmbio.yMBInFrame != NULL ) - { - dpmbio.yMBInFrame += 16; - dpmbio.uBlockInFrame += 8; - dpmbio.vBlockInFrame += 8; - } - dpmbi.xPosInMBs++; - - if (dpmbi.xPosInMBs == inParam->pictParam->numMBsInMBLine) { - if ( dpmbio.yMBInFrame != NULL ) - { - dpmbio.yMBInFrame += 15 * inParam->pictParam->lumMemWidth; - dpmbio.uBlockInFrame += 7 * (inParam->pictParam->lumMemWidth >> 1); - dpmbio.vBlockInFrame += 7 * (inParam->pictParam->lumMemWidth >> 1); - } - dpmbi.xPosInMBs = 0; - dpmbi.yPosInMBs++; - } - - inOutParam->currMBNum = dpmbio.currMBNum; - } - } - - /* check for a resync_marker */ - sncCode = sncCheckMpegSync(inBuffer, inParam->pictParam->fcode_forward, &error); - - /* If sncCheckMpegSync failed */ - if (error && error != ERR_BIB_NOT_ENOUGH_DATA) { - deb1p("dvpGetAndDecodeVideoPacketContents: ERROR - sncCheckSync returned %d.\n", error); - goto unexpectedError; - - } else - /* If buffer ends (in one-frame-per-one-buffer case) */ - if (sncCode == SNC_EOB || - sncCode == SNC_STUFFING || - error == ERR_BIB_NOT_ENOUGH_DATA) { - break; - } - - } - - -// <-- - - inOutParam->numOfCodedMBs = (inParam->pictParam->pictureType != VDX_VOP_TYPE_I) ? - dpmbio.numOfCodedMBs : dimbio.numOfCodedMBs; - - if (fSegmentCorrupted) { - u_int32 nextVPBitPos; - - /* find the next resync marker, to get the number of MBs in the current VP */ - sncCode = sncRewindAndSeekNewMPEGSync(-1, inBuffer, inParam->pictParam->fcode_forward, &error); - if (error && error != ERR_BIB_NOT_ENOUGH_DATA) { - goto unexpectedError; - } else if (sncCode == SNC_EOB) { - goto exitFunction; - } - - nextVPBitPos = bibNumberOfFlushedBits(inParam->inBuffer); - - /* if the lastMBNumInVP was not yet read */ - if (inParam->pictParam->pictureType == VDX_VOP_TYPE_I || - !inParam->pictParam->data_partitioned || - lastMBNumInVP == 0) { - - /* if VP header is found: read it, and get last MB number in current vop */ - if (sncCode == SNC_VIDPACK) { - vdxVideoPacketHeader_t header; - vdxGetVideoPacketHeaderInputParam_t vdxParam; - int retValue; - - vdxParam.fcode_forward = inParam->pictParam->fcode_forward; - vdxParam.time_increment_resolution = inParam->pictParam->time_increment_resolution; - vdxParam.numOfMBs = inParam->pictParam->numMBsInGOB; - - retValue = vdxGetVideoPacketHeader(inParam->inBuffer, &vdxParam, &header, &bitErrorIndication); - if (retValue < 0) { - goto unexpectedError; - } else if (retValue == VDX_OK_BUT_BIT_ERROR) { - /* If bit error occurred */ - goto headerFailure; - } - - /* rewind the bits to the beginning of the VP header */ - bibRewindBits(bibNumberOfFlushedBits(inParam->inBuffer) - nextVPBitPos, - inParam->inBuffer, &error); - - lastMBNumInVP = header.currMBNum; - - } else { - lastMBNumInVP = inParam->pictParam->numMBsInGOB; - } - } - - /* if possibly the next VP header is damaged (it gives MB index which is smaller than the start of the current one */ - if (lastMBNumInVP <= startMB || lastMBNumInVP > inParam->pictParam->numMBsInGOB) - goto exitFunction; - - /* if the MB counting due to error overran the next VP header's value */ - if (inOutParam->currMBNum > lastMBNumInVP) - inOutParam->currMBNum = VDC_MAX(lastMBNumInVP-3,startMB); - - /* if not all the MBs have been predicted due to error */ - else if (inOutParam->currMBNum < lastMBNumInVP) - inOutParam->currMBNum = VDC_MAX(inOutParam->currMBNum-1,startMB); - - - inOutParam->currMBNum = lastMBNumInVP; - } - - exitFunction: - - - exitWhenVOPHeaderCorrupted: - - if (!fSegmentCorrupted) { - SOH_DEALLOC(pDiffMB); - return DGOB_OK; - } - else { - SOH_DEALLOC(pDiffMB); - return DGOB_OK_BUT_BIT_ERROR; - } - - headerFailure: - SOH_DEALLOC(pDiffMB); - sncRewindAndSeekNewMPEGSync(-1, inBuffer, 0, &error); - if (error && error != ERR_BIB_NOT_ENOUGH_DATA) - return DGOB_ERR; - return DGOB_OK_BUT_BIT_ERROR; - - unexpectedError: - SOH_DEALLOC(pDiffMB); - return DGOB_ERR; -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/dlist.cpp --- a/videoeditorengine/h263decoder/src/dlist.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,384 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Doubly linked list module. -* -*/ - - -/* - * dlist.c - * - * - * - * Project: - * Mobile Videophone Demonstrator - * H.263 Video Decoder - * - * Contains: - * This module contains generic list handling functions for doubly linked - * lists, i.e. one can use the same set of functions regardless of the type - * of list items. - * The list item type has a constraint that it must begin with the skeleton - * of a list item (see the definition of DLST_ITEM_SKELETON in dlist.h). - * - * The prefix ddlst is used in common names defined in this module. - * - * - * - */ - - -#include "dlist.h" - - -#ifndef NULL - #define NULL 0 -#endif - - -/* - * dlstClose - * - * - * Parameters: - * list a pointer to a list - * - * Function: - * This function deinitializes the given list. Notice that no dynamic - * allocation for the list is done. This function must be called when - * the list is no longer used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int dlstClose(dlst_t *list) -{ - list->head = list->tail = list->curr = NULL; - list->numItems = 0; - - return 0; -} - - -/* - * dlstRemove - * - * - * Parameters: - * list a pointer to a list - * item used to return a pointer to the removed - * list item - * - * Function: - * This function removes an item from the list. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * If there are no items left in the list, NULL will be returned in - * the item parameter. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int dlstRemove(dlst_t *list, void **item) -{ - if (list->curr) { - dlstListItem_t - *curr = list->curr, - *prev = (dlstListItem_t *) (list->curr->prev), - *next = (dlstListItem_t *) (list->curr->next); - - *item = (void *) curr; - - if (prev) - prev->next = curr->next; - else - list->head = (dlstListItem_t *) curr->next; - - if (next) - next->prev = curr->prev; - - curr->next = NULL; - curr->prev = NULL; - - if (curr == list->tail) { - list->tail = prev; - list->curr = prev; - } - else - list->curr = next; - - list->numItems--; - } - - else - *item = NULL; - - return 0; -} - - -/* - * dlstOpen - * - * - * Parameters: - * list a pointer to a list - * - * Function: - * This function initializes the given list. Notice that no dynamic - * allocation for the list is done. This function must be called before - * the list is used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int dlstOpen(dlst_t *list) -{ - list->head = list->tail = list->curr = NULL; - list->numItems = 0; - - return 0; -} - - -/* - * dlstHead - * - * - * Parameters: - * list a pointer to a dlst list - * item used to return a pointer to the head item - * of the list - * - * Function: - * This function sets the current access point to the head of the list and - * returns a pointer to the head item. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * If there are no items left in the list, NULL will be returned in - * the item parameter. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int dlstHead(dlst_t *list, void **item) -{ - if (list->head) - *item = (void *) list->head; - - else - *item = NULL; - - list->curr = list->head; - - return 0; -} - - -/* - * dlstTail - * - * - * Parameters: - * list a pointer to a dlst list - * - * Function: - * This function sets the current access point to the tail of the list - * enabling the item addition to the end of the list. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int dlstTail(dlst_t *list, void **item) -{ - - if (list->tail) - *item = (void *) list->tail; - - else - *item = NULL; - - list->curr = list->tail; - - return 0; -} - - -/* - * dlstNext - * - * - * Parameters: - * list a pointer to a dlst list - * item used to return a pointer to the next item - * of the list - * - * Function: - * This function sets the current access point to the next item of the list - * and returns a pointer to the item. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * If there are no items left in the list, NULL will be returned in - * the item parameter and the current access point shall be left as it is. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int dlstNext(dlst_t *list, void **item) -{ - if (list->curr && list->curr->next) { - list->curr = (dlstListItem_t *) (list->curr->next); - *item = (void *) list->curr; - } - - else - *item = NULL; - - return 0; -} - - -int dlstPrev(dlst_t *list, void **item) -{ - if (list->curr && list->curr->prev) { - list->curr = (dlstListItem_t *) (list->curr->prev); - *item = (void *) list->curr; - } - - else - *item = NULL; - - return 0; -} - - -int dlstCurr(dlst_t *list, void **item) -{ - *item = (void *) list->curr; - - return 0; -} - - -int dlstNextExists(dlst_t *list) -{ - return (list->curr && list->curr->next) ? 1 : 0; -} - -/* - * dlstAdd - * - * - * Parameters: - * list a pointer to a dlst list - * item an item to add to the list - * - * Function: - * This function adds an item into the list. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int dlstAddBeforeCurr(dlst_t *list, void *item) -{ - dlstListItem_t - *curr, *prev, *listItem = (dlstListItem_t *) item; - - if (list->curr) { - curr = (dlstListItem_t *) list->curr, - prev = (dlstListItem_t *) list->curr->prev; - - if (prev) - prev->next = item; - else - list->head = (dlstListItem_t *) item; - listItem->prev = prev; - - curr->prev = item; - listItem->next = curr; - - list->curr = (dlstListItem_t *) item; - } - - else { - list->head = list->tail = list->curr = (dlstListItem_t *) item; - listItem->next = NULL; - listItem->prev = NULL; - } - - list->numItems++; - - return 0; -} - -int dlstAddAfterCurr(dlst_t *list, void *item) -{ - dlstListItem_t - *curr, *next, *listItem = (dlstListItem_t *) item; - - if (list->curr) { - curr = list->curr, - next = (dlstListItem_t *) (list->curr->next); - - curr->next = item; - listItem->prev = curr; - - if (next) - next->prev = item; - else - list->tail = (dlstListItem_t *) item; - listItem->next = next; - - list->curr = (dlstListItem_t *) item; - } - - else { - list->head = list->tail = list->curr = (dlstListItem_t *) item; - listItem->next = NULL; - listItem->prev = NULL; - } - - list->numItems++; - - return 0; -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/epoclib.cpp --- a/videoeditorengine/h263decoder/src/epoclib.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,245 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Wrappers for Symbian OS -specific system functions. -* -*/ - - -#include -#include -#include "epoclib.h" - -#define NAMELEN 120 -#define EL_EXPORT - - -EL_EXPORT void free(TAny *ptr) - - { -#ifdef MALLOC_DEBUG - if ( !ptr ) - return; - - unsigned *p32 = (unsigned*) (((unsigned) ptr) - (NAMELEN+8)); - - if ( p32[0] != 0xdaded1d0 ) - User::Panic(_L("BadFree"), 1); - - ptr = (TAny*) p32; -#endif - - // Dangling pointer check - unsigned count = (unsigned) User::AllocLen(ptr); - TUint8 *p; - - p = (TUint8*) ptr; - while ( count >> 2 ) - { - *((TUint32*)p) = 0xfeedf1d0; - p += 4; - count -= 4; - } - while ( count ) - { - *(p++) = 0x17; - count--; - } - - User::Free(ptr); - } - -#ifdef MALLOC_DEBUG -EL_EXPORT TAny *debugMalloc(u_int32 size, char *file, int line) -#else -EL_EXPORT TAny *malloc(u_int32 size) -#endif - { - // Uninit checks - TAny *ptr; - unsigned count = size; - TUint8 *p; - -#ifdef MALLOC_DEBUG - ptr = User::Alloc(size + NAMELEN+8); - if ( !ptr ) - return 0; - p = ((TUint8*) ptr) + NAMELEN+8; -#else - ptr = User::Alloc(size); - if ( !ptr ) - return 0; - p = (TUint8*) ptr; -#endif - - while ( count >> 2 ) - { - *((TUint32*)p) = 0xdeadbeef; - p += 4; - count -= 4; - } - while ( count ) - { - *(p++) = 0x42; - count--; - } - -#ifdef MALLOC_DEBUG - unsigned *p32 = (unsigned*) ptr; - p32[0] = 0xdaded1d0; - p32[1] = (unsigned) line; - char *c = (char*) &p32[2]; - int n = NAMELEN; - while ( (*file != 0) && n ) - { - *(c++) = *(file++); - n--; - } - return (TAny*) (((unsigned) p32) + NAMELEN + 8); -#else - return ptr; -#endif - } - -EL_EXPORT TAny *realloc(void *memblock, u_int32 size) - { - // realloc not used at least currently, skip the debug-branch - return User::ReAlloc(memblock, size); - } - - -#ifdef MALLOC_DEBUG -EL_EXPORT TAny *debugCalloc(u_int32 num, u_int32 size, char *file, int line) -{ - TAny *ptr; - TUint8 *p; - - ptr = User::Alloc(num*size + NAMELEN+8); - if ( !ptr ) - return 0; - p = ((TUint8*) ptr) + NAMELEN+8; - - Mem::Fill(p, size*num, 0); - - unsigned *p32 = (unsigned*) ptr; - p32[0] = 0xdaded1d0; - p32[1] = (unsigned) line; - char *c = (char*) &p32[2]; - int n = NAMELEN; - while ( (*file != 0) && n ) - { - *(c++) = *(file++); - n--; - } - return (TAny*) p; -} -#else -EL_EXPORT TAny *calloc(u_int32 num, u_int32 size) - - { - TAny *dest = User::Alloc(size*num); - Mem::Fill(dest, size*num, 0); - return dest; - } -#endif - -EL_EXPORT TAny *memset(TAny *dest, TInt c, TInt size) - { - Mem::Fill(dest, size, c); - return dest; //returning the value of dest as in windows - } -EL_EXPORT TAny *memcpy(TAny *dest, const TAny *src, TInt size) - { - Mem::Copy(dest, src, size); - return dest; - } - -EL_EXPORT TAny *memmove(TAny *dest, const TAny *src, u_int32 count) - { - Mem::Copy(dest,src,count); - return dest; - } - -long atol( - const char *nptr - ) -{ - int c; // current char - long total; // current total - int sign; // if '-', then negative, otherwise positive - - TLex8 string((unsigned char *)nptr); - // skip whitespace - string.SkipSpace(); - - //prendre un caratere dans string lui faire le sign - c = (int)string.Peek(); - string.Inc(); - - sign = c; // save sign indication - if (c == '-' || c == '+') - // skip sign - {c = (int)string.Peek(); - string.Inc(); - } - else //If c is not a sign, it is necessary to go increment back into the descriptors to get the right - //number - { - string.UnGet(); - } - - total = 0; - - while (string.Peek().IsDigit()) - { - total = 10 * total + (c - '0'); - string.Inc(); - c = (int)string.Peek(); - - } - - if (sign == '-') - return -total; - else - return total; /* return result, negated if necessary */ -} - - -/* -*int atoi(char *nptr) - Convert string to long -* -*Purpose: -* Converts ASCII string pointed to by nptr to binary. -* Overflow is not detected. Because of this, we can just use -* atol(). -* -*Entry: -* nptr = ptr to string to convert -* -*Exit: -* return int value of the string -* -*Exceptions: -* None - overflow is not detected. -* -*******************************************************************************/ - -EL_EXPORT int atoi( - const char *nptr - ) -{ - return (int)atol(nptr); -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/h263dntc.cpp --- a/videoeditorengine/h263decoder/src/h263dntc.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,750 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video decoder control interface. -* -*/ - - - -/* - * Includes - */ - -/* Include the definition header for the active build target */ -#include "h263dConfig.h" -/* Include the header for this file */ -#include "h263dntc.h" -/* All other inclusions */ -#include "biblin.h" -#include "h263dapi.h" -#include "vde.h" -#include "vdemain.h" -#include "vdeti.h" -#include "biblin.h" -/* MVE */ -//#include "InnerTranscoder.h" -#include "core.h" -#include "MPEG4Transcoder.h" - -/* - * Constants - */ -const TUint KH263StartCodeLength = 3; // H.263 picture start code length -const TUint KMPEG4StartCodeLength = 4; // MPEG4 picture start code length - -/* -* Global functions -*/ - -/* {{-output"h263dClose.txt"}} */ -/* -* h263dClose -* -* -* Parameters: -* hInstance instance handle -* -* Function: -* This function closes an H.263 decoder instance. -* -* Returns: -* Nothing -*/ - -void H263D_CC h263dClose(h263dHInstance_t hInstance) -/* {{-output"h263dClose.txt"}} */ -{ - if (hInstance) - vdeShutDown(hInstance); -} - - -/* {{-output"h263dDecodeFrame.txt"}} */ -/* -* h263dDecodeFrameL -* -* -* Parameters: -* hInstance instance data -* pStreamBuffer pointer to input data (>= 1 video frames) -* streamBufferSize size of pStreamBuffer -* fFirstFrame pointer to flag telling if the very first -* frame is being decoded -* frameSize If non-NULL, frameSize is used to return -* the number of bytes that were decoded -* to produce the reconstructed output frame. -* -* Function: -* This function decodes the bitstream until it gets at least one decoded -* frame. It also shows the resulting frames. -* In addition, the function handles the parameter updating synchronization. -* -* Returns: -* H263D_OK if the function was successful -* H263D_OK_EOS if the end of stream has been reached -* H263D_ERROR if a fatal error, from which the decoder -* cannot be restored, has occured -* H263D_ERROR_HALTED the instance is halted, it should be closed -*/ - -int H263D_CC h263dDecodeFrameL(h263dHInstance_t hInstance, - void *pStreamBuffer, - void *pOutStreamBuffer, - unsigned streamBufferSize, - u_char *fFirstFrame, - TInt *frameSize, - TInt *outframeSize, - vdeDecodeParamters_t *aDecoderInfo - ) - -/* {{-output"h263dDecodeFrame.txt"}} */ -{ - TInt colorEffect = aDecoderInfo->aColorEffect; - TInt colorToneU = aDecoderInfo->aColorToneU; - TInt colorToneV = aDecoderInfo->aColorToneV; - TInt frameOperation = aDecoderInfo->aFrameOperation; - TInt* trP = aDecoderInfo->aTrP; - TInt* trD = aDecoderInfo->aTrD; - TInt videoClipNumber = aDecoderInfo->aVideoClipNumber; - TInt smSpeed = aDecoderInfo->aSMSpeed; - TInt getDecodedFrame = aDecoderInfo->aGetDecodedFrame; - - bibBuffer_t - *buffer = 0; /* input buffer */ - - bibBuffer_t - *outbuffer = 0; /* output buffer */ - - bibBuffer_t - *tmpbuffer = 0; /* temporary buffer */ - - u_char* tmpbuf=0; - - bibBufferEdit_t - *bufEdit = 0; - - int StartByteIndex=0; - int StartBitIndex=7; - - int tr = 0; - int newtr = 0; - int efftr; - int numBitsGot; - int bitsErrorIndication; - int16 bibError; - - int retValue; /* return value for vde functions */ - - int leaveError = 0; - - int16 - errorCode = 0; /* return code for bib functions */ - - /* MVE */ - int startCodeLen = 0; - CMPEG4Transcoder *hTranscoder = NULL; - - TBool modifyMPEG4Afterwards = EFalse; - - vdeAssert(hInstance); - vdeAssert(pStreamBuffer); - vdeAssert(pOutStreamBuffer); - vdeAssert(streamBufferSize); - vdeAssert(fFirstFrame); - - vdeInstance_t *vdeinstance = (vdeInstance_t *) hInstance; - - /* Create bit buffer */ - buffer = bibCreate(pStreamBuffer, streamBufferSize, &errorCode); - if (!buffer || errorCode) - return H263D_ERROR; - - /* MVE */ - - if ((aDecoderInfo->streamMode==EVedVideoBitstreamModeMPEG4ShortHeader) || (aDecoderInfo->streamMode == EVedVideoBitstreamModeH263) ) - outbuffer = bibCreate(pOutStreamBuffer, streamBufferSize-3, &errorCode); - else - outbuffer = bibCreate(pOutStreamBuffer, streamBufferSize-4-3, &errorCode); - - if (!outbuffer || errorCode) - { - bibDelete(buffer, &errorCode); - return H263D_ERROR; - } - - bufEdit = bibBufferEditCreate(&errorCode); - if (!bufEdit || errorCode) - { - bibDelete(outbuffer, &errorCode); - bibDelete(buffer, &errorCode); - return H263D_ERROR; - } - - if(frameOperation==4 /*ENoDecodeNoWrite*/) - { - bufEdit->copyMode = CopyNone; - } - - if(colorEffect==1 || colorEffect==2) - { - outbuffer->numBytesRead=0; - outbuffer->size=0; - } - - /* Associate bit buffer with the VDE instance */ - retValue = vdeSetInputBuffer(hInstance, buffer); - if (retValue < 0) - goto freeBufferAndReturn; - - /* Associate output bit buffer with the VDE instance */ - retValue = vdeSetOutputBuffer(hInstance, outbuffer); - if (retValue < 0) - goto freeBufferAndReturn; - - retValue = vdeSetBufferEdit(hInstance, bufEdit); - if (retValue < 0) - goto freeBufferAndReturn; - - retValue = vdeSetVideoEditParams(hInstance, colorEffect, - getDecodedFrame, colorToneU, colorToneV); - if (retValue < 0) - goto freeBufferAndReturn; - - /* MVE */ - if (aDecoderInfo->streamMode == EVedVideoBitstreamModeH263 /*H.263*/) - { - /* read current TR */ - bibForwardBits(22,buffer); // streamBufferSize is in bytes - tr = bibGetBits(8,buffer,&numBitsGot, &bitsErrorIndication, &bibError); - bibRewindBits(30,buffer,&bibError); - } - - /* get first frame's QP */ - if (!(*fFirstFrame)) - { - vdeinstance->iRefQp = aDecoderInfo->aFirstFrameQp; - } - vdeinstance->iColorEffect = aDecoderInfo->aColorEffect; - vdeinstance->iColorToneU = aDecoderInfo->aColorToneU; - vdeinstance->iColorToneV = aDecoderInfo->aColorToneV; - - /* MVE */ - /* one frame is ready, initialize the transcoder */ - TRAP( leaveError, (hTranscoder = CMPEG4Transcoder::NewL(vdeinstance, vdeinstance->inBuffer, vdeinstance->outBuffer)) ); - if ( leaveError != 0 ) - { - retValue = leaveError; - goto freeBufferAndReturn; - } - - if (aDecoderInfo->aGetVideoMode) - { - /* we are to determine the bitstream mode */ - aDecoderInfo->aOutputVideoFormat = EVedVideoTypeNoVideo; - int dummy1, dummy2; // position of the error resillence bit,not used here - vdtGetVideoBitstreamInfo(buffer, aDecoderInfo, &dummy1, &dummy2); - } - - /* set transcoding information */ - retValue = hTranscoder->SetTranscoding(aDecoderInfo); - if ( retValue != TX_OK ) - { - goto freeBufferAndReturn; - } - - /* before the first frame is decoded, determine the stream type */ - if (*fFirstFrame) { - retValue = vdeDetermineStreamType(hInstance, hTranscoder); - if (retValue < 0) - goto freeBufferAndReturn; - - /* MVE */ - /* for the first frame of the bitstream, we may need to construct a new VOS */ - hTranscoder->ConstructVOSHeader(vdeinstance->fMPEG4, aDecoderInfo); - - if (vdeinstance->fMPEG4 == 1 ) - { - StartByteIndex = buffer->getIndex; - StartBitIndex = buffer->bitIndex; - - /* for MPEG4 (not including shortheader) stuffing bits are inserted at the end of the VOS - but the index here indicates the position of the stuffing bits - */ - if (StartBitIndex != 7) - { - StartByteIndex += 1; - StartBitIndex = 7; - } - - // update the output stream size by removing VOS size - streamBufferSize -= StartByteIndex; - } - - else if (aDecoderInfo->streamMode == EVedVideoBitstreamModeMPEG4ShortHeader) - { - if (aDecoderInfo->aOutputVideoFormat == EVedVideoTypeH263Profile0Level10 || - aDecoderInfo->aOutputVideoFormat == EVedVideoTypeH263Profile0Level45) - { - // we don't need the VOS header - StartByteIndex = buffer->getIndex; - StartBitIndex = buffer->bitIndex; - // update the output stream size by removing VOS size - streamBufferSize -= StartByteIndex; - } - else if (aDecoderInfo->aOutputVideoFormat == EVedVideoTypeMPEG4SimpleProfile && - aDecoderInfo->fModeChanged == EFalse) - { - // update the output stream size by removing VOS size - // but we need the original MPEG4 shortheader VOS, which is not yet copied to the output buffer - streamBufferSize -= buffer->getIndex; - - } - } - - } - - /* This may produce multiple output frames, and that is why it is commented - out. However, it may be useful if the bitstream is corrupted and picture - start codes are lost - while (buffer->bitsLeft > 8) { */ - /* Decode frame */ - - /* MVE */ - /* The buffer size is changed in h263decoder.cpp - In the old version, it is fixed to 3, which may be incorrect - */ - startCodeLen = (aDecoderInfo->streamMode == EVedVideoBitstreamModeH263)? KH263StartCodeLength : KMPEG4StartCodeLength; - - - - if ( ((aDecoderInfo->aOutputVideoFormat == EVedVideoTypeMPEG4SimpleProfile) - && !(aDecoderInfo->streamMode == EVedVideoBitstreamModeMPEG4ShortHeader)) - || ((aDecoderInfo->streamMode == EVedVideoBitstreamModeMPEG4ShortHeader) && aDecoderInfo->fModeChanged) ) - { - modifyMPEG4Afterwards = ETrue; - } - - if (frameOperation==1/*EDecodeAndWrite*/ || frameOperation==2/*EDecodeNoWrite*/) - { - if ( vdeinstance->fMPEG4 == 1 ) - { - buffer->size -= startCodeLen; - buffer->bitsLeft -= ( startCodeLen << 3 ); - } - retValue = vdeDecodeFrame(hInstance, StartByteIndex, StartBitIndex, hTranscoder); - if ( retValue < VDE_OK ) - { - // negative means fatal error - goto freeBufferAndReturn; - } - // get first frame QP for possible color toning - if (*fFirstFrame) - { - aDecoderInfo->aFirstFrameQp = hTranscoder->GetRefQP(); - } - } - else if (frameOperation==3/*EWriteNoDecode*/) - { - /* first reset bit counter to beginning of buffer */ - /* copy input frame as it is */ - bibForwardBits((streamBufferSize-startCodeLen)<<3,buffer); // streamBufferSize is in bytes - - if (aDecoderInfo->streamMode == EVedVideoBitstreamModeMPEG4ShortHeader && - aDecoderInfo->aOutputVideoFormat == EVedVideoTypeMPEG4SimpleProfile && - !(aDecoderInfo->fModeChanged)) - { - bibRewindBits(32,buffer,&bibError); - } - - /* reset buffer edit to CopyWhole mode */ - bufEdit->copyMode = CopyWhole/*CopyWhole*/; - - if ( vdeinstance->fMPEG4 == 1 ) - { - if (*fFirstFrame) - { - buffer->getIndex = buffer->size - startCodeLen; - buffer->bitIndex = 7; - buffer->bitsLeft = 24; - buffer->numBytesRead = buffer->size - startCodeLen; - } - - if ( buffer->numBytesRead > 4 ) - { - buffer->numBytesRead -= 4; - buffer->getIndex = buffer->numBytesRead; - } - } - // Reassign pointers so that outbuffer actually has the pointer to (in)buffer's data, - // if we have MPEG4 output (not short header) and we need to change e.g. timestamps - // This eliminates 2 memory copies - otherwise we would copy from buffer to outbuffer to tmpbuffer to outbuffer; - // the content is modified when copying from tmpbuffer to outbuffer. - // tmpbuffer is needed since we can't modify the content directly in the outbuffer. - // Now we can copy directly from buffer to outbuffer. - // In this branch we don't call vdeDecodeFrame at all, but use either CopyEditVopL for MPEG-4 or - // CopyStream for H.263 - if ( modifyMPEG4Afterwards ) - { - tmpbuffer = buffer; - } - else - { - /* copy from buffer to outbuffer. This simulates vdeDecodeFrame with EDecodeAndWrite */ - CopyStream(buffer,outbuffer,bufEdit,StartByteIndex,StartBitIndex); - } - retValue=0; - } - - outbuffer->size = outbuffer->getIndex; - outbuffer->bitsLeft = 0; - - if ( !tmpbuffer ) - { - /* if tr values are changes, need another buffer */ - /* first create temp buffer in memory */ - tmpbuf = (u_char*) malloc(outbuffer->size + 4); - if (tmpbuf == NULL) - { - bibDelete(outbuffer, &errorCode); - bibDelete(buffer, &errorCode); - bibBufEditDelete(bufEdit, &errorCode); - return H263D_ERROR; - } - tmpbuffer = bibCreate((void*)tmpbuf, outbuffer->size + 4, &errorCode); - if (!tmpbuffer || errorCode) - { - free(tmpbuf); - bibDelete(outbuffer, &errorCode); - bibDelete(buffer, &errorCode); - bibBufEditDelete(bufEdit, &errorCode); - return H263D_ERROR; - } - } - - /* MVE */ - if (aDecoderInfo->aOutputVideoFormat != EVedVideoTypeNoVideo) - { - - if ( modifyMPEG4Afterwards ) - { - if ( tmpbuffer != buffer ) - { - // the bitstream was decoded too, need to copy it temporarily from outbuffer to tmpbuffer since it needs to be modified - bibRewindBits(bibNumberOfFlushedBits(tmpbuffer),tmpbuffer,&bibError); - bibRewindBits(bibNumberOfFlushedBits(outbuffer),outbuffer,&bibError); - bibForwardBits(((outbuffer->size)<<3),outbuffer); - outbuffer->bitsLeft = 0; - - StartByteIndex = 0; - StartBitIndex = 7; - - CopyStream(outbuffer,tmpbuffer,bufEdit,StartByteIndex,StartBitIndex); - tmpbuffer->baseAddr[tmpbuffer->getIndex] = 0x0; - tmpbuffer->baseAddr[tmpbuffer->getIndex+1] = 0x0; - tmpbuffer->baseAddr[tmpbuffer->getIndex+2] = 0x01; - tmpbuffer->baseAddr[tmpbuffer->getIndex+3] = 0xb6; - } - else - { - // the tmpbuffer was used as a shortcut to the buffer, no need to copy anything here. - tmpbuffer->bitsLeft = 32; - // the following ones are probably not needed - tmpbuffer->baseAddr[tmpbuffer->getIndex+4] = 0x0; - tmpbuffer->baseAddr[tmpbuffer->getIndex+5] = 0x0; - tmpbuffer->baseAddr[tmpbuffer->getIndex+6] = 0x01; - tmpbuffer->baseAddr[tmpbuffer->getIndex+7] = 0xb6; - } - - - bibForwardBits(32,tmpbuffer); - - // Copy bitstream part-by-part, possibly modifying it, from tmp to output. - // StartByteIndex may be > 0 if there is VOS header in tmpbuffer already. It is always byte-aligned so no need to have StartBitIndex - TInt skip = 0; - if ( StartByteIndex > 0 ) - { - // startByteIndex refers to input buffer. - // The skip however should refer to the output buffer. The output header size is in aDecoderInfo - skip = aDecoderInfo->vosHeaderSize; - } - int retVal= CopyEditVop(hInstance, skip, tmpbuffer, aDecoderInfo); - if(retVal<0) - { - retValue = retVal; //will be handled later - } - } - else - { - /* copy input frame while changing TR */ - if((videoClipNumber>0) || (smSpeed!=1000)) - { - if ((frameOperation==1) || ((frameOperation==2) && !getDecodedFrame)) - { - /* if the output buffer will not be use, leave it as it is! */ - } - else - { - - /* get new TR */ - StartByteIndex = 0; - StartBitIndex = 7; - outbuffer->bitsLeft = 0; - newtr = GetNewTrValue(tr, trP, trD, smSpeed); - /* change TR value in output bitstream */ - /* prepare editing position */ - if (!bufEdit->editParams) - { - bufEdit->editParams = (bibEditParams_t *) malloc(sizeof(bibEditParams_t)); - if (bufEdit->editParams == NULL) - { - retValue = H263D_ERROR; - goto freeBufferAndReturn; - } - - bufEdit->numChanges=1; - bufEdit->copyMode = CopyWithEdit; // CopyWithEdit - } - bufEdit->editParams->curNumBits = bufEdit->editParams->newNumBits = 8; - bufEdit->editParams->StartByteIndex=2; //2; // starting position for the TR marker - bufEdit->editParams->StartBitIndex=1; //1; // starting position for the TR marker - bufEdit->editParams->newValue=newtr; - /* copy the input buffer to the output buffer with TR changes */ - CopyStream(outbuffer,tmpbuffer,bufEdit,StartByteIndex,StartBitIndex); - bibRewindBits((streamBufferSize)<<3,buffer,&bibError); - /* copy the changed bitstream from tmpbuffer back to buffer */ - bufEdit->copyMode = CopyWhole; // CopyWhole - bibRewindBits(bibNumberOfFlushedBits(outbuffer),outbuffer,&bibError); - CopyStream(tmpbuffer,outbuffer,bufEdit,StartByteIndex,StartBitIndex); - bibRewindBits((streamBufferSize)<<3,buffer,&bibError); - } - } - /* update TR values */ - efftr = (videoClipNumber>0 || smSpeed!=1000) ? newtr : tr; - *trP = efftr; - *trD = tr; - } - } - - *fFirstFrame = 0; - - if (retValue < 0) - goto freeBufferAndReturn; - /* See the comment above. - else if (retValue == H263D_OK_EOS) - break; - } */ - - if (frameSize) - *frameSize = bibNumberOfFlushedBytes(buffer) + - ((bibNumberOfFlushedBits(buffer) % 8 > 0) ? 1 : 0); - - *outframeSize = outbuffer->numBytesRead; - - -freeBufferAndReturn: - - int bitError = buffer->error; - - if (hTranscoder) - { - delete hTranscoder; - hTranscoder = NULL; - } - - if ( tmpbuffer == buffer ) - { - // tmpbuffer was a shortcut to inbuffer, set it to NULL to avoid deleting it - tmpbuffer = NULL; - } - - int16 deleteError = 0; - /* Delete bit buffer */ - bibDelete(buffer, &errorCode); - if ( errorCode ) - { - deleteError = errorCode; - } - - /* Delete output bit buffer */ - bibDelete(outbuffer, &errorCode); - if ( errorCode ) - { - deleteError = errorCode; - } - - /* Delete tmp bit buffer, if it was used */ - if ( tmpbuffer ) - { - bibDelete(tmpbuffer, &errorCode); - if ( errorCode ) - { - deleteError = errorCode; - } - } - if(tmpbuf) - free(tmpbuf); - - /* Delete bufEdit */ - bibBufEditDelete(bufEdit, &errorCode); - if ( errorCode ) - { - deleteError = errorCode; - } - if (deleteError || errorCode) - return H263D_ERROR; - - if ( bitError ) - { - return H263D_OK_BUT_FRAME_USELESS; - } - - return retValue; -} - - -/* {{-output"h263dGetLatestFrame.txt"}} */ -/* -* h263dGetLatestFrame -* -* -* Parameters: -* hInstance instance data -* -* ppy, ppu, ppv used to return Y, U and V frame pointers -* -* pLumWidth, pLumHeight used to return luminance image width and height -* -* pFrameNum used to return frame number -* -* Function: -* This function returns the latest correctly decoded frame -* (and some side-information). -* -* Returns: -* H263D_OK if the function was successful -* H263D_ERROR if a fatal error, from which the decoder -* cannot be restored, has occured -* H263D_ERROR_HALTED the instance is halted, it should be closed -*/ - - -int H263D_CC h263dGetLatestFrame( - h263dHInstance_t hInstance, - u_char **ppy, u_char **ppu, u_char **ppv, - int *pLumWidth, int *pLumHeight, - int *pFrameNum) - /* {{-output"h263dGetLatestFrame.txt"}} */ -{ - vdeAssert(hInstance); - vdeAssert(ppy); - vdeAssert(ppu); - vdeAssert(ppv); - vdeAssert(pLumWidth); - vdeAssert(pLumHeight); - vdeAssert(pFrameNum); - - return vdeGetLatestFrame(hInstance, ppy, ppu, ppv, pLumWidth, pLumHeight, - pFrameNum); -} - - - -/* {{-output"h263dIsIntra.txt"}} */ -/* -* h263dIsIntra -* -* -* Parameters: -* hInstance handle of instance data -* frameStart pointer to memory chunk containing a frame -* frameLength number of bytes in frame -* -* Function: -* This function returns 1 if the passed frame is an INTRA frame. -* Otherwise the function returns 0. -* -* Returns: -* See above. -*/ - -int h263dIsIntra( - h263dHInstance_t hInstance, - void *frameStart, - unsigned frameLength) - /* {{-output"h263dIsIntra.txt"}} */ -{ - vdeAssert(hInstance); - vdeAssert(frameStart); - vdeAssert(frameLength); - - return vdeIsINTRA(hInstance, frameStart, frameLength); -} - -/* {{-output"h263dOpen.txt"}} */ -/* -* h263dOpen -* -* -* Parameters: -* openParam initialization parameters -* -* Function: -* This function creates and initializes a new H.263 decoder instance. -* -* Returns: -* an instance handle if the function was successful -* NULL if an error occured -*/ - -h263dHInstance_t H263D_CC h263dOpen(h263dOpen_t *openParam) -/* {{-output"h263dOpen.txt"}} */ -{ - vdeAssert(openParam); - - /* No extra space needs to be allocated after the VDE instance data - (of type vdeInstance_t) due to the fact that no thread specific - data is needed. */ - openParam->freeSpace = 0; - - return vdeInit(openParam); -} - - - -int GetNewTrValue(int aTrCurOrig, int* aTrPrevNew, int* aTrPrevOrig, int aSMSpeed) -{ - int trCurNew=0; - int trDiff=0; - TReal speedFactor = (TReal)aSMSpeed/1000.0; - - trDiff = aTrCurOrig - *aTrPrevOrig; - if(trDiff==0) // if corrupt TR values - trDiff=1; - else if(trDiff<0) // jump in TR values (change of clip or end of limit) - trDiff = 3; // arbitrary, for 10 fps default - // check for slow motion - vdeAssert(aSMSpeed); - if(aSMSpeed!=1000) - trDiff = (int)((TReal)trDiff/speedFactor + 0.5); - trCurNew = *aTrPrevNew + trDiff; - if(trCurNew>255) - trCurNew = trCurNew%256; - return trCurNew; -} - - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/idctiforepoc.cpp --- a/videoeditorengine/h263decoder/src/idctiforepoc.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,641 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Symbian OS -specific IDCT routines. -* -*/ - - - -/* - - 1 ABSTRACT - - - 1.1 Module Type - - type subroutine - - - 1.2 Functional Description - - Fixed point arithmetic for fast calculation of IDCT for 8x8 size image - blocks. The full calculation of the IDCT takes 208 multiplications and - 400 additions. - - The routine optionally checks if AC coefficients are all zero and in that - case makes a shortcut in IDCT, thus making the calculation faster. This - feature is activated by defining CHECK_ZERO_AC_COEFFICIENTS_0, - CHECK_ZERO_AC_COEFFICIENTS_1 or CHECK_ZERO_AC_COEFFICIENTS_2 in envdef.h. - - - 1.3 Specification/Design Reference - - The algorithm used is the fast algorithm introduced in W.-H. Chen, C. H. - Smith, and S. C. Fralick, "A fast computational algorithm for the - Discrete Cosine Transform," IEEE Transactions on Communications, vol. - COM-25, pp. 1004-1009, 1977. - - This IDCT routine conforms to the accuracy requirements specified in the - H.261 and H.263 recommendations. - - NRC documentation: Moments: H.263 Decoder - Functional Definition - Specification - - NRC documentation: Moments: H.263 Decoder - Implementation Design - Specification - - - 1.4 Module Test Specification Reference - - TRABANT:h263_test_spec.BASE-TEST - - - 1.5 Compilation Information - - Compiler: RISC OS ARM C compiler (Acorn Computers Ltd.) - Version: 5.05 - Activation: cc -DBUILD_TARGET=ACORNDEC idcti.c - - - 1.6 Notes - - This source code can be used in both 16-bit and 32-bit application. - - PREC defines the precision for the fixed point numbers. The best value - for it depends on several things: You should always have enough room for - the integer part of the number, and in 386s/486s smaller PREC values are - faster, but the smaller it is, the poorer is the accuracy. - - The TMPPRECDEC is another adjustable constant. It tells how many bits are - ripped off the number for the temporary storage. This way the accuracy - for the multiplications can be better. TMPPREC can be zero. This speeds - the code up a bit. - - To determine the maximum values for PREC and TMPPRECDEC, count bits you - need for the integer part anywhere during the calculation, substract that - from 32, and divide the remaining number by two. This number should be - >= (2*PREC-TMPPRECDEC)/2, otherwise the results may be corrupted due to - lost bits. - - For example, if you know that your data will vary from -2048 - 2047, you - need twelve bits for the integer part. 32-12 = 20, 20 / 2 = 10, so good - example values for PREC and TMPPRECDEC would be 12 and 4. Also 11 and 2 - would be legal, as would 11 and 3, but 12 and 3 would not ((2*12-3)/2 = - 10.5 > 10). - - NOTE: Several PREC and TMPPRECDEC values were tried in order to meet - the . - The requirements could not be met. PREC = 13, TMPPRECDEC = 5 was - the closest combination to meet the requirements violating only - the overall mean square error requirement. - - Both the input and output tables are assumed to be normal C ints. Thus, - in the 16-bit version they are 16-bit integers and in the 32-bit version - 32-bit ones. - - - Define CHECK_ZERO_AC_COEFFICIENTS_0, CHECK_ZERO_AC_COEFFICIENTS_1 and - CHECK_ZERO_AC_COEFFICIENTS_2 in envdef.h if zero AC coefficients checking - for the whole block, for current row or for current column is desired, - respectively. - - -*/ - - -/* 2 CONTENTS - - - 1 ABSTRACT - - 2 CONTENTS - - 3 GLOSSARY - - 4 EXTERNAL RESOURCES - 4.1 Include Files - 4.2 External Data Structures - 4.3 External Function Prototypes - - 5 LOCAL CONSTANTS AND MACROS - - 6 MODULE DATA STRUCTURES - 6.1 Local Data Structures - 6.2 Local Function Prototypes - - 7 MODULE CODE - 7.1 idct - 7.2 firstPass - 7.3 secondPass - -*/ - - -/* 3 GLOSSARY - - IDCT Inverse discrete cosine transform - -*/ - - -/* 4 EXTERNAL RESOURCES */ - - -/* 4.1 Include Files */ - -#include "h263dconfig.h" - -/* 4.2 External Data Structures */ - - /* None */ - - -/* 4.3 External Function Prototypes */ - - /* None */ - - -/* 5 LOCAL CONSTANTS AND MACROS */ - -#define PREC 13 /* Fixed point precision */ -#define TMPPRECDEC 5 /* Temporary precision decrease */ - - /* See note about PREC and TMPPRECDEC above. */ - -#define TMPPREC ( PREC - TMPPRECDEC ) -#define CDIV ( 1 << ( 16 - PREC )) -#define ROUNDER ( 1 << ( PREC - 1 )) - -#define f0 (int32)(0xb504 / CDIV) /* .7071068 = cos( pi / 4 ) */ -#define f1 (int32)(0x7d8a / CDIV) /* .4903926 = 0.5 * cos( 7pi / 16 ) */ -#define f2 (int32)(0x7641 / CDIV) /* .4619398 = 0.5 * cos( 6pi / 16 ) */ -#define f3 (int32)(0x6a6d / CDIV) /* .4157348 = 0.5 * cos( 5pi / 16 ) */ -#define f4 (int32)(0x5a82 / CDIV) /* .3535534 = 0.5 * cos( 4pi / 16 ) */ -#define f5 (int32)(0x471c / CDIV) /* .2777851 = 0.5 * cos( 3pi / 16 ) */ -#define f6 (int32)(0x30fb / CDIV) /* .1913417 = 0.5 * cos( 2pi / 16 ) */ -#define f7 (int32)(0x18f8 / CDIV) /* .0975452 = 0.5 * cos( pi / 16 ) */ - -#define f0TMP (int32)(0xb504 / (1 << (16 - TMPPREC))) - - - -/* 6 MODULE DATA STRUCTURES */ - - -/* 6.1 Local Data Structures */ - -#ifdef _WIN32_EXPLICIT /* EPOC32_PORT static data */ - -static const int idctZigzag[64] = /* array of zig-zag positioning */ -{ 0, 1, 5, 6, 14, 15, 27, 28, /* of transform coefficients */ - 2, 4, 7, 13, 16, 26, 29, 42, - 3, 8, 12, 17, 25, 30, 41, 43, - 9, 11, 18, 24, 31, 40, 44, 53, - 10, 19, 23, 32, 39, 45, 52, 54, - 20, 22, 33, 38, 46, 51, 55, 60, - 21, 34, 37, 47, 50, 56, 59, 61, - 35, 36, 48, 49, 57, 58, 62, 63 }; - -static int32 idctTmpbuf1[64]; /* array for temporary storage of - transform results */ -#endif - -/* 6.2 Local Function Prototypes */ - -static void firstPass (int *buffer, - int32 *tmpbuf); - -static void secondPass (int32 *tmpbuf, - int *dest); - - - -/* 7 MODULE CODE */ - -/* -============================================================================= -*/ - -/* 7.1 */ - -void idct - (int *block) - - { - - -/* Functional Description - - Fixed point arithmetic for fast calculation of IDCT for 8x8 size image - blocks. - - - Activation - - by function call - - Reentrancy: no - - - Inputs - - Parameters: - - *block: 8x8 source block of zigzagged cosine transform - coefficients - - Externals: - - None - - - Outputs - - Parameters: - - *block: 8x8 destination block of pixel values - - Externals: - - None - - Return Values: - - None - - - Exceptional Conditions - - None - ------------------------------------------------------------------------------ -*/ - - - -/* Pseudocode - - Calculate 1D-IDCT by rows. - Calculate 1D-IDCT by columns. - -*/ - - - -/* Data Structures */ - - -/* These are only needed if checking the AC coefficients of the whole block - is desired. */ - - int i = 1; /* Loop variable */ - int result; /* Calculation result */ - - -#ifndef _WIN32_EXPLICIT /* EPOC32_PORT static data */ - int32 idctTmpbuf1[64]; -#endif - -/* Code */ - - - /* - * Check if the AC coefficients of the whole block are all zero. - * In that case the inverse transform is equal to the DC - * coefficient with a scale factor. - */ - - while (i < 64 && !block[i++]) {} - if (i == 64) { - int *blk = block; - result = (block[0] + 4) >> 3; - i = 8; - while ( i-- ) - { - blk[0] = result; blk[1] = result; blk[2] = result; blk[3] = result; - blk[4] = result; blk[5] = result; blk[6] = result; blk[7] = result; - blk += 8; - } - /* - for (i = 0; i < 64; i++) - { - block[i] = result; - } - */ - } - else - { - firstPass(block, idctTmpbuf1); - secondPass(idctTmpbuf1, block); - } - - - } - -/* -============================================================================= -*/ - - - -/* 7.2 */ - -static void firstPass - (int *buffer, - int32 *tmpbuf) - - { - - -/* Functional Description - - Local function: Calculate 1D-IDCT for the rows of the 8x8 block. - - - Activation - - by function call - - Reentrancy: no - - - Inputs - - Parameters: - - *block: 8x8 block of cosine transform coefficients - - Externals: - - None - - - Outputs - - Parameters: - - *tmpbuf Temporary storage for the results of the first pass. - - Externals: - - None - - Return Values: - - None - - - Exceptional Conditions - - None - ------------------------------------------------------------------------------ -*/ - - - -/* Pseudocode - - Calculate 1D-IDCT by rows. - -*/ - - - -/* Data Structures */ - - int row; /* Loop variable */ - int32 e, f, g, h; /* Temporary storage */ - int32 t0, t1, t2, t3, t5, t6; /* Temporary storage */ - int32 bd2, bd3; /* Temporary storage */ - -#ifndef _WIN32_EXPLICIT /* EPOC32_PORT static data */ - static const int idctZigzag[64] = -{ 0, 1, 5, 6, 14, 15, 27, 28, - 2, 4, 7, 13, 16, 26, 29, 42, - 3, 8, 12, 17, 25, 30, 41, 43, - 9, 11, 18, 24, 31, 40, 44, 53, - 10, 19, 23, 32, 39, 45, 52, 54, - 20, 22, 33, 38, 46, 51, 55, 60, - 21, 34, 37, 47, 50, 56, 59, 61, - 35, 36, 48, 49, 57, 58, 62, 63 }; - - const int *zz = idctZigzag; -#else - int *zz = idctZigzag; -#endif - - -/* Code */ - -#define ZZ(x) ((int32)buffer[zz[x]]) - - for( row = 0; row < 8; row++ ) - { - - - /* - * Check if the AC coefficients on the current row are all zero. - * In that case the inverse transform is equal to the DC - * coefficient with a scale factor. - */ - - if ((ZZ(1) | ZZ(2) | ZZ(3) | ZZ(4) | ZZ(5) | ZZ(6) | ZZ(7)) == 0) - { - tmpbuf[7] = - tmpbuf[6] = - tmpbuf[5] = - tmpbuf[4] = - tmpbuf[3] = - tmpbuf[2] = - tmpbuf[1] = - tmpbuf[0] = (ZZ(0) * f4) >> TMPPRECDEC; - - tmpbuf += 8; - zz += 8; - continue; - } - - t0 = t3 = (ZZ(0) + ZZ(4)) * f4; - bd3 = ZZ(6) * f6 + ZZ(2) * f2; - t0 += bd3; - t3 -= bd3; - - t1 = t2 = (ZZ(0) - ZZ(4)) * f4; - bd2 = ZZ(2) * f6 - ZZ(6) * f2; - t1 += bd2; - t2 -= bd2; - - e = h = (ZZ(1) + ZZ(7)) * f7; - h += ZZ(1) * ( -f7+f1 ); - f = g = (ZZ(5) + ZZ(3)) * f3; - g += ZZ(5) * ( -f3+f5 ); - - tmpbuf[0] = ( t0 + ( h + g )) >> TMPPRECDEC; - tmpbuf[7] = ( t0 - ( h + g )) >> TMPPRECDEC; - - f += ZZ(3) * ( -f3-f5 ); - e += ZZ(7) * ( -f7-f1 ); - - tmpbuf[3] = ( t3 + ( e + f )) >> TMPPRECDEC; - tmpbuf[4] = ( t3 - ( e + f )) >> TMPPRECDEC; - - t6 = ( h - g + e - f ) * f0TMP >> TMPPREC; - t5 = ( h - g - e + f ) * f0TMP >> TMPPREC; - - tmpbuf[1] = ( t1 + t6 ) >> TMPPRECDEC; - tmpbuf[6] = ( t1 - t6 ) >> TMPPRECDEC; - tmpbuf[2] = ( t2 + t5 ) >> TMPPRECDEC; - tmpbuf[5] = ( t2 - t5 ) >> TMPPRECDEC; - - tmpbuf += 8; - zz += 8; - } - } - -#undef ZZ - - -/* -============================================================================= -*/ - - - -/* 7.3 */ - -static void secondPass - (int32 *tmpbuf, - int *dest) - - { - - -/* Functional Description - - Local function: Calculate 1D-IDCT for the columns of the 8x8 block. - - - Activation - - by function call - - Reentrancy: no - - - Inputs - - Parameters: - - *tmpbuf Temporary storage for the results of the first pass. - - Externals: - - None - - - Outputs - - Parameters: - - *block: 8x8 block of pixel values - - Externals: - - None - - Return Values: - - None - - - Exceptional Conditions - - None - ------------------------------------------------------------------------------ -*/ - - -/* Pseudocode - - Calculate 1D-IDCT by columns. - -*/ - - -/* Data Structures */ - - int col; /* Loop variable */ - int32 e, f, g, h; /* Temporary storage */ - int32 t0, t1, t2, t3, t5, t6; /* Temporary storage */ - int32 bd2, bd3; /* Temporary storage */ - - -/* Code */ - -#define ZZ(x) tmpbuf[x * 8] - - for( col = 0; col < 8; col++ ) - { - - t0 = t3 = ((ZZ(0) + ZZ(4)) * f4 ) >> TMPPREC; - bd3 = ( ZZ(6) * f6 + ZZ(2) * f2 ) >> TMPPREC; - t0 += bd3; - t3 -= bd3; - - t1 = t2 = ((ZZ(0) - ZZ(4)) * f4 ) >> TMPPREC; - bd2 = ( ZZ(2) * f6 - ZZ(6) * f2 ) >> TMPPREC; - t1 += bd2; - t2 -= bd2; - - e = h = (ZZ(1) + ZZ(7)) * f7; - h += (ZZ(1) * ( -f7+f1 )); - h >>= TMPPREC; - f = g = (ZZ(5) + ZZ(3)) * f3; - g += (ZZ(5) * ( -f3+f5 )); - g >>= TMPPREC; - - dest[0*8] = (int) (( t0 + ( h + g ) + ROUNDER ) >> PREC); - dest[7*8] = (int) (( t0 - ( h + g ) + ROUNDER ) >> PREC); - - f += ZZ(3) * ( -f3-f5 ); - f >>= TMPPREC; - e += ZZ(7) * ( -f7-f1 ); - e >>= TMPPREC; - - dest[3*8] = (int) (( t3 + ( e + f ) + ROUNDER ) >> PREC); - dest[4*8] = (int) (( t3 - ( e + f ) + ROUNDER ) >> PREC); - - t6 = ( h - g + e - f ) * f0TMP >> TMPPREC; - t5 = ( h - g - e + f ) * f0TMP >> TMPPREC; - - dest[1*8] = (int) (( t1 + t6 + ROUNDER ) >> PREC); - dest[6*8] = (int) (( t1 - t6 + ROUNDER ) >> PREC); - dest[2*8] = (int) (( t2 + t5 + ROUNDER ) >> PREC); - dest[5*8] = (int) (( t2 - t5 + ROUNDER ) >> PREC); - - tmpbuf++; - dest++; - } - } - - -/* -============================================================================= -*/ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/list.cpp --- a/videoeditorengine/h263decoder/src/list.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,627 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* List handling functions. -* -*/ - - - -#include "h263dconfig.h" -#include "list.h" - -#ifndef NULL - #define NULL 0 -#endif - - -/* - * fifoClose - * - * - * Parameters: - * list a pointer to a FIFO list - * - * Function: - * This function deinitializes the given FIFO list. Notice that no dynamic - * allocation for the list is done. This function must be called when - * the list is no longer used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int fifoClose(fifo_t *list) -{ - list->head = list->tail = NULL; - list->numItems = 0; - - return 0; -} - - -/* - * fifoGet - * - * - * Parameters: - * list a pointer to a FIFO list - * item used to return a pointer to the removed - * list item - * - * Function: - * This function removes an item from the list. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * If there are no items left in the list, NULL will be returned in - * the item parameter. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int fifoGet(fifo_t *list, void **item) -{ - if (list->head) { - *item = (void *) list->head; - list->head = (lstListItem_t *) list->head->next; - if (list->head == NULL) - list->tail = NULL; - list->numItems--; - } - - else - *item = NULL; - - return 0; -} - - -/* - * fifoOpen - * - * - * Parameters: - * list a pointer to a FIFO list - * - * Function: - * This function initializes the given FIFO list. Notice that no dynamic - * allocation for the list is done. This function must be called before - * the list is used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int fifoOpen(fifo_t *list) -{ - list->head = list->tail = NULL; - list->numItems = 0; - - return 0; -} - - -/* - * fifoPeek - * - * - * Parameters: - * list a pointer to a FIFO list - * item used to return a pointer to the removed - * list item - * - * Function: - * This function returns a pointer to the next in the list but does not - * remove the item from the list. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * If there are no items left in the list, NULL will be returned in - * the item parameter. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int fifoPeek(fifo_t *list, void **item) -{ - if (list->head) - *item = (void *) list->head; - - else - *item = NULL; - - return 0; -} - - -/* - * fifoPut - * - * - * Parameters: - * list a pointer to a FIFO list - * item an item to add to the list - * - * Function: - * This function adds an item into the list. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int fifoPut(fifo_t *list, void *item) -{ - ((lstListItem_t *) item)->next = NULL; - - if (list->tail) { - list->tail->next = item; - list->tail = (lstListItem_t *) (item); - } - - else - list->head = list->tail = (lstListItem_t *) item; - - list->numItems++; - - return 0; -} - - -/* - * lifoClose - * - * - * Parameters: - * list a pointer to a LIFO list - * - * Function: - * This function deinitializes the given LIFO list. Notice that no dynamic - * allocation for the list is done. This function must be called when - * the list is no longer used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lifoClose(lifo_t *list) -{ - list->head = NULL; - - return 0; -} - - -/* - * lifoGet - * - * - * Parameters: - * list a pointer to a LIFO list - * item used to return a pointer to the removed - * list item - * - * Function: - * This function removes an item from the list. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * If there are no items left in the list, NULL will be returned in - * the item parameter. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lifoGet(lifo_t *list, void **item) -{ - if (list->head) { - *item = list->head; - list->head = (lstListItem_t *) list->head->next; - } - else - *item = NULL; - - return 0; -} - - -/* - * lifoOpen - * - * - * Parameters: - * list a pointer to a LIFO list - * - * Function: - * This function initializes the given LIFO list. Notice that no dynamic - * allocation for the list is done. This function must be called before - * the list is used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lifoOpen(lifo_t *list) -{ - list->head = NULL; - - return 0; -} - - -/* - * lifoPut - * - * - * Parameters: - * list a pointer to a LIFO list - * item an item to add to the list - * - * Function: - * This function adds an item into the list. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lifoPut(lifo_t *list, void *item) -{ - ((lstListItem_t *) item)->next = list->head; - list->head = (lstListItem_t *) item; - - return 0; -} - - -/* - * lstClose - * - * - * Parameters: - * list a pointer to a list - * - * Function: - * This function deinitializes the given list. Notice that no dynamic - * allocation for the list is done. This function must be called when - * the list is no longer used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lstClose(lst_t *list) -{ - list->head = list->prev = list->curr = NULL; - list->numItems = 0; - - return 0; -} - - -/* - * lstRemove - * - * - * Parameters: - * list a pointer to a lst list - * item used to return a pointer to the removed - * list item - * - * Function: - * This function removes an item from the list. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * If there are no items left in the list, NULL will be returned in - * the item parameter. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lstRemove(lst_t *list, void **item) -{ - if (list->curr) { - *item = (void *) list->curr; - if (list->prev) - list->prev->next = list->curr->next; - else - list->head = (lstListItem_t *) (list->curr->next); - list->curr = (lstListItem_t *) (list->curr->next); - ((lstListItem_t *) *item)->next = NULL; - list->numItems--; - } - - else - *item = NULL; - - return 0; -} - - -/* - * lstOpen - * - * - * Parameters: - * list a pointer to a list - * - * Function: - * This function initializes the given list. Notice that no dynamic - * allocation for the list is done. This function must be called before - * the list is used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lstOpen(lst_t *list) -{ - list->head = list->prev = list->curr = NULL; - list->numItems = 0; - - return 0; -} - - -/* - * lstHead - * - * - * Parameters: - * list a pointer to a lst list - * item used to return a pointer to the head item - * of the list - * - * Function: - * This function sets the current access point to the head of the list and - * returns a pointer to the head item. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * If there are no items left in the list, NULL will be returned in - * the item parameter. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lstHead(lst_t *list, void **item) -{ - if (list->head) - *item = (void *) list->head; - - else - *item = NULL; - - list->curr = list->head; - list->prev = NULL; - - return 0; -} - - -/* - * lstEnd - * - * - * Parameters: - * list a pointer to a lst list - * - * Function: - * This function sets the current access point to the tail of the list - * enabling the item addition to the end of the list. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lstEnd(lst_t *list) -{ - while (list->curr) { - list->prev = list->curr; - list->curr = (lstListItem_t *) (list->curr->next); - } - - return 0; -} - - -/* - * lstTail - * - * - * Parameters: - * list a pointer to a lst list - * - * Function: - * This function sets the current access point to the tail of the list - * enabling the item addition to the end of the list. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lstTail(lst_t *list, void **item) -{ - if (!list->curr) { - list->curr = list->head; - list->prev = NULL; - } - - if (!list->curr) { - *item = NULL; - return 0; - } - - while (list->curr->next) { - list->prev = list->curr; - list->curr = (lstListItem_t *) (list->curr->next); - } - - *item = list->curr; - return 0; -} - - -/* - * lstCurr - * - * - * Parameters: - * list a pointer to a lst list - * item used to return a pointer to the current item - * of the list - * - * Function: - * This returns a pointer to the current item of the list. - * Notice that no copying of contents of the given item is done, - * i.e. only the pointer to the item is used. - * - * If there are no items left in the list, NULL will be returned in - * the item parameter. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lstCurr(lst_t *list, void **item) -{ - *item = list->curr; - return 0; -} - - -/* - * lstNext - * - * - * Parameters: - * list a pointer to a lst list - * item used to return a pointer to the next item - * of the list - * - * Function: - * This function sets the current access point to the next item of the list - * and returns a pointer to the item. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * If there are no items left in the list, NULL will be returned in - * the item parameter. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lstNext(lst_t *list, void **item) -{ - if (list->curr) { - list->prev = list->curr; - list->curr = (lstListItem_t *) (list->curr->next); - *item = (void *) list->curr; - } - - else - *item = NULL; - - return 0; -} - - -int lstNextExists(lst_t *list) -{ - return (list->curr && list->curr->next) ? 1 : 0; -} - -/* - * lstAdd - * - * - * Parameters: - * list a pointer to a lst list - * item an item to add to the list - * - * Function: - * This function adds an item into the list. Notice that no copying of - * contents of the given item is done, i.e. only the pointer to the item - * is used. - * - * Returns: - * >= 0 if the function was successful - * < 0 indicating an error - * - */ - -int lstAdd(lst_t *list, void *item) -{ - ((lstListItem_t *) item)->next = list->curr; - - if (list->prev) - list->prev->next = item; - - else - list->head = (lstListItem_t *) item; - - list->curr = (lstListItem_t *) item; - - list->numItems++; - - return 0; -} - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/rendri.cpp --- a/videoeditorengine/h263decoder/src/rendri.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,409 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Renderer Draw Item Interface. -* -*/ - - - -#include "h263dconfig.h" -#include "rendri.h" -#include "debug.h" - - -/* - * Preprocessor definitions - */ - - -#define renDriMalloc malloc -#define renDriCalloc calloc -#define renDriRealloc realloc -#define renDriDealloc free - -#ifndef renAssert - #ifndef assert - #include - #endif - #define renAssert(exp) assert(exp) -#endif - - -/* - * Local function prototypes - */ - - -/* - * Global functions - */ - -/* {{-output"renDriAlloc.txt"}} */ -/* - * renDriAlloc - * - * - * Parameters: - * width luminance image width in pixels - * height luminance image height in pixels - * - * Function: - * This function creates and initializes a new draw item. - * - * When passed to the renderer the following members of the draw item - * must be explicitly set (i.e. these members are not set by this - * function): - * drawItem->param.dwFlags - * drawItem->param.lTime - * drawItem->extParam.flags - * drawItem->extParam.rate - * drawItem->extParam.scale - * drawItem->extParam.numOfCodedMBs - * drawItem->extParam.snapshotRect - * drawItem->extParam.ckInfo - * drawItem->retFrame - * drawItem->retFrameParam - * - * Returns: - * a pointer to the created - * draw item if the function was successful - * NULL indicating a general error - * - * - */ - -renDrawItem_t * renDriAlloc(int width, int height, int fYuvNeeded) -/* {{-output"renDriAlloc.txt"}} */ -{ - renDrawItem_t *drawItem; - renBitmapInfoHeader_t *bmi; - void *data; - - /* Allocate draw item */ - drawItem = (renDrawItem_t *) renDriMalloc(sizeof(renDrawItem_t)); - if (drawItem == NULL) - return NULL; - memset(drawItem, 0, sizeof(renDrawItem_t)); - - /* Allocate bitmap info header */ - bmi = (renBitmapInfoHeader_t *) renDriMalloc(sizeof(renBitmapInfoHeader_t)); - if (bmi == NULL) { - renDriDealloc(drawItem); - return NULL; - } - - /* Initialize bitmap info header */ - bmi->biSize = sizeof(renBitmapInfoHeader_t); - bmi->biWidth = width; - bmi->biHeight = height; - if ( fYuvNeeded ) - { - bmi->biSizeImage = (u_int32) width * (u_int32) height * 3 / 2; - /* Allocate room for frame data */ - data = renDriMalloc(bmi->biSizeImage); - if (data == NULL) { - renDriDealloc(bmi); - renDriDealloc(drawItem); - return NULL; - } - } - else - { - bmi->biSizeImage = 0; - data = NULL; - } - - - /* Initialize renDrawParam_t member of draw item */ - /* dwFlags set by application */ - drawItem->param.lpFormat = bmi; - drawItem->param.lpData = data; - drawItem->param.cbData = bmi->biSizeImage; - /* lTime set by application */ - - drawItem->extParam.size = sizeof(renExtDrawParam_t); - /* flags set by application */ - /* rate set by application */ - /* scale set by application */ - drawItem->extParam.numOfMBs = (width / 16) * (height / 16); - /* numOfCodedMBs set by application */ - drawItem->extParam.fCodedMBs = (u_char *) renDriMalloc( - drawItem->extParam.numOfMBs * sizeof(u_char)); - if (drawItem->extParam.fCodedMBs == NULL) { - renDriDealloc(data); - renDriDealloc(bmi); - renDriDealloc(drawItem); - return NULL; - } - /* snapshotRect set by application */ - /* ckInfo set by application */ - - /* retFrame and retFrameParam members of draw item are set by application */ - - return drawItem; -} - - -/* {{-output"renDriCopyParameters.txt"}} */ -/* - * renDriCopyParameters - * - * - * Parameters: - * dstDrawItem destination draw item - * srcDrawItem source draw item - * - * Function: - * This function copies the srcDrawItem structure to the dstDrawItem - * structure. All other parameters are copied but the actual picture - * contents. The function handles nested structures correctly. - * No pointers are overwritten but rather the contents corresponding - * to a pointer are copied from the source to the destionation structure. - * - * Returns: - * Nothing - * - * - */ - -void renDriCopyParameters( - renDrawItem_t *dstDrawItem, - const renDrawItem_t *srcDrawItem) -/* {{-output"renDriCopyParameters.txt"}} */ -{ - /* param */ - { - renDrawParam_t *dstDrawParam = &(dstDrawItem->param); - const renDrawParam_t *srcDrawParam = &(srcDrawItem->param); - - /* dwFlags */ - dstDrawParam->dwFlags = srcDrawParam->dwFlags; - - /* lpFormat */ - { - const renBitmapInfoHeader_t *srcBitmapInfoHeader = - (renBitmapInfoHeader_t *) srcDrawParam->lpFormat; - - /* biSize indicates the size of the bitmap info header. - Thus, copy biSize bytes from source to destination bitmap info - header. - Note: it is assumed that biSize (and the amount of allocated - memory) is the same in both structures. */ - MEMCPY( - dstDrawParam->lpFormat, - srcDrawParam->lpFormat, - (TInt)srcBitmapInfoHeader->biSize); - } - - /* lpData */ - /* Not copied since contains a pointer to actual picture contents. - Set to NULL for clarity. */ - - /* cbData */ - dstDrawParam->cbData = srcDrawParam->cbData; - - /* lTime */ - dstDrawParam->lTime = srcDrawParam->lTime; - } - - /* extParam */ - { - renExtDrawParam_t *dstExtDrawParam = &(dstDrawItem->extParam); - const renExtDrawParam_t *srcExtDrawParam = &(srcDrawItem->extParam); - u_char *dstFCodedMBs = dstExtDrawParam->fCodedMBs; - - /* fCodedMBs is the only pointer in the structure. Thus, it is easier - to temporally save the destionation fCodedMBs, then overwrite each - member of the destination structure by corresponding member of - the source structure and finally restore fCodedMBs in the destination - structure. */ - - /* "size" member indicates the size of the structure. - Thus, copy size bytes from source to destination structure. - Note: it is assumed that size (and the amount of allocated - memory) is the same in both structures. */ - MEMCPY( - (void *) dstExtDrawParam, - (void *) srcExtDrawParam, - (TInt)srcExtDrawParam->size); - - /* Restore destination fCodedMBs. */ - dstExtDrawParam->fCodedMBs = dstFCodedMBs; - - /* Copy coded MBs array */ - MEMCPY( - (void *) dstFCodedMBs, - (void *) srcExtDrawParam->fCodedMBs, - (TInt)srcExtDrawParam->numOfMBs); - } - -} - -/* {{-output"renDriCopyFrameData.txt"}} */ -/* - * renDriCopyFrameData - * - * Parameters: - * dstDrawItem destination draw item - * srcDrawItem source draw item - * - * Function: - * This function copies the actual picture data contents from srcDrawItem - * structure to the dstDrawItem structure. No pointers are overwritten - * but rather the contents corresponding to a pointer are copied from - * the source to the destination structure. - * - * Returns: - * Nothing - * - */ - -void renDriCopyFrameData( - renDrawItem_t *dstDrawItem, - const renDrawItem_t *srcDrawItem) -/* {{-output"renDriCopyFrameData.txt"}} */ -{ - - renDrawParam_t *dstDrawParam = &(dstDrawItem->param); - const renDrawParam_t *srcDrawParam = &(srcDrawItem->param); - const renBitmapInfoHeader_t *srcBitmapInfoHeader = - (renBitmapInfoHeader_t *) srcDrawParam->lpFormat; - - /* biSizeImage indicates the size of the image data in bytes. - Copy biSizeImage bytes from source to destination frame data. - Note: it is assumed that size (and the amount of allocated - memory) is the same in both structures. */ - - renAssert(((renBitmapInfoHeader_t *) dstDrawParam->lpFormat)->biSizeImage == srcBitmapInfoHeader->biSizeImage); - - MEMCPY(dstDrawParam->lpData, - srcDrawParam->lpData, - (TInt)srcBitmapInfoHeader->biSizeImage); - -} - -/* {{-output"renDriFree.txt"}} */ -/* - * renDriFree - * - * - * Parameters: - * drawItem a pointer to the draw item to free - * - * Function: - * This function destroys the passed draw item. - * - * Returns: - * Nothing. - * - * - */ - -void renDriFree(renDrawItem_t *drawItem) -/* {{-output"renDriFree.txt"}} */ -{ - renDrawParam_t *param; - renExtDrawParam_t *extParam; - - if (!drawItem) - return; - - param = &drawItem->param; - extParam = &drawItem->extParam; - - if (param) { - if (param->lpFormat) - renDriDealloc(param->lpFormat); - if (param->lpData) - renDriDealloc(param->lpData); - } - - if (extParam) { - if (extParam->fCodedMBs) - renDriDealloc(extParam->fCodedMBs); - } - - renDriDealloc(drawItem); -} - - - - - -/* {{-output"renDriYUV.txt"}} */ -/* - * renDriYUV - * - * - * Parameters: - * drawItem a pointer to a draw item - * y, u, v top-left corners of the Y, U and V frames - * corresponding to the passed draw item - * width, height the dimensions of the luminance frame of - * the passed draw item - * - * Function: - * This function returns the Y, U and V pointers to the passed draw item - * as well as the dimensions of the luminance frame of the draw item. - * - * Returns: - * REN_OK if the function was successful - * REN_ERROR indicating a general error - * - */ - -int renDriYUV(renDrawItem_t *drawItem, - u_char **y, u_char **u, u_char **v, int *width, int *height) -/* {{-output"renDriYUV.txt"}} */ -{ - renBitmapInfoHeader_t *bmi; - int32 ySize, uvSize; - - /* If invalid arguments */ - if (!drawItem || !drawItem->param.lpFormat || - !y || !u || !v || !width || !height) { - /* Return error */ - debPrintf("renGetYUVFromDrawParam: ERROR - null pointer.\n"); - return REN_ERROR; - } - - - bmi = (renBitmapInfoHeader_t *) drawItem->param.lpFormat; - - *width = bmi->biWidth; - *height = labs(bmi->biHeight); - - if ( drawItem->param.lpData == NULL ) - { - // no YUV buffer, parsing-only instance - *y = NULL, - *u = NULL; - *v = NULL; - - return REN_OK; - } - - ySize = (*width) * (*height) * sizeof(u_char); - uvSize = ySize / 4; - - *y = (u_char *) drawItem->param.lpData; - *u = *y + ySize; - *v = *u + uvSize; - - return REN_OK; -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/sync.cpp --- a/videoeditorengine/h263decoder/src/sync.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,311 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* H.263 sync code functions. -* -*/ - - - - -#include "h263dConfig.h" - -#include "sync.h" -#include "errcodes.h" -#include "debug.h" -#include "biblin.h" - - - -/* - * Global functions - */ - -/* {{-output"sncCheckSync.txt"}} */ -/* - * sncCheckSync - * - * - * Parameters: - * buffer a pointer to a bit buffer structure - * numStuffBits the number of stuffing bits - * error error code - * - * Function: - * This function checks if the Picture Start Code (PSC), - * the End Of Sequence code (EOS) or the GOB synchronization code (GBSC) - * are the next codes in the bit buffer. - * Stuffing (PSTUF, ESTUF or GSTUF) is allowed before the code and - * the number of stuffing bits is returned in numStuffBits parameter. - * The code is not flushed from the buffer. - * - * Returns: - * SNC_NO_SYNC if no sync code is found - * SNC_PSC if PSC is found - * SNC_GBSC if GBSC is found - * SNC_EOS if EOS is found - * SNC_STUFFING if there are less than 8 zeros starting from - * the current position and after - * them the buffer ends - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - */ - -int sncCheckSync(bibBuffer_t *buffer, int *numStuffBits, int16 *error) -/* {{-output"sncCheckSync.txt"}} */ -{ - u_int32 result; - int numBitsGot, i; - int16 newError = 0; - int bitErrorIndication = 0; - - for(i = 0; i < 8; i++) { - bitErrorIndication = 0; - result = bibShowBits(i + 22, buffer, &numBitsGot, &bitErrorIndication, - &newError); - if (result == 32) { - /* PSC */ - *numStuffBits = i; - return SNC_PSC; - } - - else if (result == 63) { - /* EOS */ - *numStuffBits = i; - return SNC_EOS; - } - - else if (result > 32 && result < 63) { - /* GBSC */ - /* Notice that the allowed Group Numbers are listed in section 5.2.3 - of the H.263 recommendation. They are not checked here but rather - they are assumed to be checked in the corresponding header reading - function, e.g. vdxGetGOBHeader. */ - *numStuffBits = i; - return SNC_GBSC; - } - - else if (result >= 64) { - return SNC_NO_SYNC; - } - else if ( buffer->error ) - { - // out of bits - *error = (int16)buffer->error; - return SNC_NO_SYNC; - } - } - - return SNC_NO_SYNC; -} - - -/* {{-output"sncRewindAndSeekNewSync.txt"}} */ -/* - * sncRewindAndSeekNewSync - * - * - * Parameters: - * earliestBitPos location of previously found sync code - * so no sense to rewind over it - * buffer a pointer to a bit buffer structure - * error error code - * - * Function: - * This function is intended to be called after GOB header is corrupted. - * It rewinds some (already read) bits in order not to miss any sync code. - * Then, this function finds the next Picture Start Code (PSC), - * End Of Sequence code (EOS) or Group of Blocks Start Code (GBSC) - * The function discards the bits before the synchronization code - * but does not remove the found code from the buffer. - * - * Returns: - * SNC_NO_SYNC if no PSC, EOS either GBSC was found and - * no more bits are available - * SNC_PSC if PSC is found - * SNC_GBSC if GBSC is found - * SNC_EOS if EOS is found - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - */ - -int sncRewindAndSeekNewSync(u_int32 earliestBitPos, bibBuffer_t *buffer, - int16 *error) -/* {{-output"sncRewindAndSeekNewSync.txt"}} */ -{ - int sncCode; /* found sync code */ - u_int32 numRewindableBits; /* number of bits which can be rewinded */ - u_int32 bitPosBeforeRewinding; /* initial buffer bit index */ - u_int32 numBitsToRewind; /* number of bits to rewind before seeking the sync code */ - - *error = 0; - - bitPosBeforeRewinding = bibNumberOfFlushedBits(buffer); - - if ( bitPosBeforeRewinding > earliestBitPos+17 ) { - numBitsToRewind = bitPosBeforeRewinding - earliestBitPos - 17; - /* 17 is the sync code length, and one sync code exists in earliestBitPos => do not read it again */ - } - else if ( bitPosBeforeRewinding > earliestBitPos ) { - /* This might be possible in slice mode */ - numBitsToRewind = bitPosBeforeRewinding - earliestBitPos; - } - else { - /* Bit counter overrun? */ - numBitsToRewind = bitPosBeforeRewinding + (0xffffffff - earliestBitPos) - 17; - } - numRewindableBits = bibNumberOfRewBits(buffer); - - if (numRewindableBits < (u_int32) numBitsToRewind) - numBitsToRewind = (int) numRewindableBits; - - bibRewindBits(numBitsToRewind, buffer, error); - if (*error) - return SNC_NO_SYNC; - - /* Seek the next synchronization code */ - sncCode = sncSeekSync(buffer, error); - if (*error) - return sncCode; - - return sncCode; -} - - -/* {{-output"sncSeekFrameSync.txt"}} */ -/* - * sncSeekFrameSync - * - * - * Parameters: - * buffer a pointer to a bit buffer structure - * error error code - * - * Function: - * This function finds the next Picture Start Code (PSC) or - * End Of Sequence code (EOS) from the bit buffer. The function skips - * any other codes. It discards the bits before the found synchronization - * code but does not remove the found code from the buffer. - * - * Returns: - * SNC_NO_SYNC if no PSC or EOS was found and - * no more bits are available - * SNC_PSC if PSC is found - * SNC_EOS if EOS is found - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - */ - -int sncSeekFrameSync(bibBuffer_t *buffer, int16 *error) -/* {{-output"sncSeekFrameSync.txt"}} */ -{ - int numBitsGot, syncCode, bitErrorIndication = 0; - int16 newError = 0; - - for (;;) { - syncCode = sncSeekSync(buffer, &newError); - - if (newError) { - *error = newError; - return SNC_NO_SYNC; - } - - if (syncCode == SNC_GBSC) { - bibFlushBits(17, buffer, &numBitsGot, &bitErrorIndication, &newError); - } - - else - return syncCode; - } -} - - -/* {{-output"sncSeekSync.txt"}} */ -/* - * sncSeekSync - * - * - * Parameters: - * buffer a pointer to a bit buffer structure - * error error code - * - * Function: - * This function finds the next Picture Start Code (PSC), - * End Of Sequence code (EOS) or Group of Blocks Start Code (GBSC) - * from the bit buffer. It discards the bits before the synchronization - * code but does not remove the found code from the buffer. - * - * Returns: - * SNC_NO_SYNC if no PSC, EOS either GBSC was found and - * no more bits are available - * SNC_PSC if PSC is found - * SNC_GBSC if GBSC is found - * SNC_EOS if EOS is found - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - */ - -int sncSeekSync(bibBuffer_t *buffer, int16 *error) -/* {{-output"sncSeekSync.txt"}} */ -{ - u_int32 result; - int numBitsGot; - int16 newError = 0; - int bitErrorIndication = 0; - - for (;;) { - bitErrorIndication = 0; - result = bibShowBits(22, buffer, &numBitsGot, &bitErrorIndication, - &newError); - - - if (result == 32) { - /* PSC */ - return SNC_PSC; - } - - else if (result == 63) { - /* EOS */ - return SNC_EOS; - } - - else if (result > 32 && result < 63) { - /* GBSC */ - /* Notice that the allowed Group Numbers are listed in section 5.2.3 - of the H.263 recommendation. They are not checked here but rather - they are assumed to be checked in the corresponding header reading - function, e.g. vdxGetGOBHeader. */ - return SNC_GBSC; - } - else if ( buffer->error ) - { - // out of bits - *error = (int16)buffer->error; - return SNC_NO_SYNC; - } - - bibFlushBits(1, buffer, &numBitsGot, &bitErrorIndication, error); - } -} - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/sync_mpeg.cpp --- a/videoeditorengine/h263decoder/src/sync_mpeg.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,648 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* MPEG-4 sync code functions. -* -*/ - - -#include "h263dConfig.h" - -#include "sync.h" -#include "errcodes.h" -#include "debug.h" -#include "mpegcons.h" -#include "biblin.h" - - -/* - * Global functions - */ - -/* {{-output"sncCheckMpegVOP.txt"}} */ -/* - * - * sncCheckMpegVOP - * - * Parameters: - * buffer a pointer to a bit buffer structure - * error error code - * - * Function: - * This function checks if the GOV, VOP start codes - * are the next codes in the bit buffer. - * NO stuffing is allowed before the code, the routine checks from the - * current position in the buffer- - * The code is not flushed from the buffer. - * - * Returns: - * SNC_NO_SYNC if no sync code is found - * SNC_PSC if GOV or VOP start code is found - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - * - * - */ - -int sncCheckMpegVOP(bibBuffer_t *buffer, int16 *error) -/* {{-output"sncCheckMpegVOP.txt"}} */ -{ - u_int32 bits; - int16 newError = 0; - int numBitsGot, bitErrorIndication = 0; - - bits = bibShowBits(32, buffer, &numBitsGot, &bitErrorIndication, &newError); - - if ((newError == ERR_BIB_NOT_ENOUGH_DATA) && (numBitsGot > 0 )) { - /* Still bits in the buffer */ - deb("sncCheckSync: bibShowReturned not enough data but there are " - "still bits in the buffer --> error cleared.\n"); - return SNC_NO_SYNC; - } else if (newError) { - *error = newError; - return SNC_NO_SYNC; - } - - if (bits == MP4_GROUP_START_CODE || bits == MP4_VOP_START_CODE || bits == MP4_EOB_CODE) - return SNC_PSC; - else - return SNC_NO_SYNC; -} - -/* {{-output"sncCheckMpegSync.txt"}} */ -/* - * - * sncCheckMpegSync - * - * Parameters: - * buffer a pointer to a bit buffer structure - * f_code f_code of the last P-vop - * error error code - * - * Function: - * This function checks if the GOV, VOP or Video Pcaket start codes - * are the next codes in the bit buffer. - * Stuffing is needed before the code and the number of stuffing bits - * is returned in numStuffBits parameter. - * The code is not flushed from the buffer. - * - * Returns: - * SNC_NO_SYNC if no sync code is found - * SNC_GOV if GOV start code is found - * SNC_VOP if VOP start code is found - * SNC_VOS if VOS start code is found - * SNC_VIDPACK if Video Packet start code is found - * SNC_STUFFING if there is a bit with the value zero - * followed by less than 7 bits with the - * value one starting from the current position - * and after them the buffer (picture segment) ends - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - * - * - * - * - * - */ - -int sncCheckMpegSync(bibBuffer_t *buffer, int f_code, int16 *error) -/* {{-output"sncCheckMpegSync.txt"}} */ -{ - u_int32 result, bits, start_code_val; - int numBitsGot, i, shift_bits; - int16 newError = 0; - int bitErrorIndication = 0; - - shift_bits = 32-(16+f_code); - - bits = bibShowBits(32, buffer, &numBitsGot, &bitErrorIndication, &newError); - - if ( buffer->error ) - { - // out of bits - *error = (int16)buffer->error; - return SNC_NO_SYNC; - } - - - for(i = 0; i <= 8; i++) { - - /* if stuffing is correct */ - if ( (i==0) || ((bits >> (32-i)) == (u_int32) ((1 << (i-1))-1)) ) { - - result = bits << i; - - if ((result >> 8) == 1) { - - /* Stuff start code */ - if (i != 0) { - bibFlushBits(i, buffer, &numBitsGot, &bitErrorIndication, &newError); - if (newError) { - *error = newError; - return SNC_NO_SYNC; - } - } - - /* Check start code */ - start_code_val = - bibShowBits(32, buffer, &numBitsGot, &bitErrorIndication, &newError); - if ((newError == ERR_BIB_NOT_ENOUGH_DATA) && (numBitsGot > 0 )) { - /* Still bits in the buffer */ - deb("sncCheckSync: bibShowReturned not enough data but there are " - "still bits in the buffer --> error cleared.\n"); - if (i) bibRewindBits(i, buffer, &newError); - return SNC_NO_SYNC; - } else if (newError) { - *error = newError; - if (i) bibRewindBits(i, buffer, &newError); - return SNC_NO_SYNC; - } - - if (start_code_val == MP4_VOP_START_CODE) { - return SNC_VOP; - } else if (start_code_val == MP4_VOS_START_CODE) { - return SNC_VOS; - } else if (start_code_val == MP4_GROUP_START_CODE) { - return SNC_GOV; - } else if (start_code_val == MP4_USER_DATA_START_CODE) { - return SNC_USERDATA; - } else if (start_code_val == MP4_EOB_CODE) { - return SNC_EOB; - } else if (((start_code_val >> (32-MP4_VID_START_CODE_LENGTH)) == MP4_VID_START_CODE) || - ((start_code_val >> (32-MP4_VOL_START_CODE_LENGTH)) == MP4_VOL_START_CODE)) { - return SNC_VID; - } else { - if (i) bibRewindBits(i, buffer, &newError); - continue; - } - - } else if (f_code && ((result >> shift_bits) == 1)) { - if (i != 0) { - /* Stuff start code */ - bibFlushBits(i, buffer, &numBitsGot, &bitErrorIndication, &newError); - if (newError) { - *error = newError; - return SNC_NO_SYNC; - } - } - return SNC_VIDPACK; - } - } - } - - return SNC_NO_SYNC; -} - - -/* {{-output"sncRewindAndSeekNewMPEGSync.txt"}} */ -/* - * sncRewindAndSeekNewMPEGSync - * - * - * Parameters: - * numBitsToRewind the number of bits to rewind before seeking - * the synchronization code, - * if negative, a default number of bits is - * rewinded. It is recommended to use - * the SNC_DEFAULT_REWIND definition to represent - * negative values in order to increase code - * readability. - * buffer a pointer to a bit buffer structure - * f_code f_code of the last P-vop - * error error code - * - * Function: - * This function is intended to be called after bit error detection. - * It rewinds some (already read) bits in order not to miss any sync code. - * Then, this function finds the next GOV, VOP or Video Packet start code - * which is not within the rewinded bits. The function discards the bits - * before the synchronization code but does not remove the found code from - * the buffer. - * - * - * Returns: - * SNC_NO_SYNC if no sync code was found and - * no more bits are available - * SNC_GOV if GOV start code is found - * SNC_VOP if VOP start code is found - * SNC_VIDPACK if Video Packet start code is found - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - * - * - */ - -int sncRewindAndSeekNewMPEGSync(int numBitsToRewind, bibBuffer_t *buffer, - int f_code, int16 *error) -/* {{-output"sncRewindAndSeekNewMPEGSync.txt"}} */ -{ - int sncCode; /* found sync code */ - u_int32 numRewindableBits; /* number of bits which can be rewinded */ - u_int32 bitPosBeforeRewinding; /* initial buffer bit index */ - u_int32 syncStartBitPos; /* 1st bit index in found sync code */ - u_int32 syncEndBitPos; - int nb = 0; - int bei = 0; - - *error = 0; - - /* If default number of rewinded bits requested */ - if (numBitsToRewind < 0) - /* 32 bits is considered to be enough */ - numBitsToRewind = 32; - - numRewindableBits = bibNumberOfRewBits(buffer); - - if (numRewindableBits < (u_int32) numBitsToRewind) - numBitsToRewind = (int) numRewindableBits; - - bitPosBeforeRewinding = bibNumberOfFlushedBits(buffer); - - if (numBitsToRewind) bibRewindBits(numBitsToRewind, buffer, error); - if (*error) - return SNC_NO_SYNC; - - /* Loop */ - do { - - /* Seek the next synchronization code */ - sncCode = sncSeekMPEGStartCode (buffer, f_code, 0 /* this method used with DP and VP => VP resync is relevant */, 0, error); - if (*error) - return sncCode; - - syncStartBitPos = bibNumberOfFlushedBits(buffer); - - syncEndBitPos = syncStartBitPos + - (u_int32) ((sncCode == SNC_VIDPACK) ? (16 + f_code) : 32); - - if (syncEndBitPos <= bitPosBeforeRewinding) - bibFlushBits( 1, buffer, &nb, &bei, error ); - - /* While the found sync code has been previously read */ - } while (syncEndBitPos <= bitPosBeforeRewinding); - - return sncCode; -} - -/* {{-output"sncSeekMPEGSync.txt"}} */ -/* - * sncSeekMPEGSync - * - * - * Parameters: - * buffer a pointer to a bit buffer structure - * f_code f_code of the last P-vop - * error error code - * - * Function: - * Then, this function finds the next GOV, VOP or Video Packet start code - * from the buffer. The function discards the bits before the sync code - * but does not remove the found code from the buffer. - * - * Returns: - * SNC_NO_SYNC if no sync code was found and - * no more bits are available - * SNC_GOV if GOV start code is found - * SNC_VOP if VOP start code is found - * SNC_VOS if VOS start code is found - * SNC_VIDPACK if Video Packet start code is found - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - * - */ - -int sncSeekMPEGSync(bibBuffer_t *buffer, int f_code, int16 *error) -/* {{-output"sncSeekMPEGSync.txt"}} */ -{ - u_int32 result; - int numBitsGot, shift_bits; - int16 newError = 0; - int bitErrorIndication = 0; - - shift_bits = 32-(16+f_code); - - for (;;) { - - bitErrorIndication = 0; - - result = bibShowBits(32, buffer, &numBitsGot, &bitErrorIndication, &newError); - - - if (newError == ERR_BIB_NOT_ENOUGH_DATA && numBitsGot) { - /* Use the available bits */ - result <<= (32 - numBitsGot); - newError = 0; - } else if (newError) { - deb("sncSeekSync: ERROR - bibShowBits failed.\n"); - *error = newError; - return SNC_NO_SYNC; - } - - if (result == MP4_GROUP_START_CODE) - return SNC_GOV; - else if (result == MP4_VOP_START_CODE) - return SNC_VOP; - else if (result == MP4_VOS_START_CODE) - return SNC_VOS; - else if (result == MP4_EOB_CODE) - return SNC_EOB; - else if (f_code && ((result >> shift_bits) == 1)) - return SNC_VIDPACK; - else if ( buffer->error ) - { - // out of bits - *error = (int16)buffer->error; - return SNC_NO_SYNC; - } - - - bibFlushBits(1, buffer, &numBitsGot, &bitErrorIndication, error); - } -} - - /* {{-output"sncSeekMPEGStartCode.txt"}} */ -/* - * sncSeekMPEGStartCode - * - * - * Parameters: - * buffer a pointer to a bit buffer structure - * f_code f_code of the last P-vop - * skipVPSync nonzero if Video Packet sync codes can be skipped - * error error code - * - * Function: - * This function finds the next GOV, VOP or Video Packet start code - * from the buffer in byte-aligned positions. The function discards the bits before the sync code - * but does not remove the found code from the buffer. - * - * Returns: - * SNC_NO_SYNC if no sync code was found and - * no more bits are available - * SNC_GOV if GOV start code is found - * SNC_VOP if VOP start code is found - * SNC_VOS if VOS start code is found - * SNC_VIDPACK if Video Packet start code is found - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - * - */ - -int sncSeekMPEGStartCode(bibBuffer_t *buffer, int f_code, int skipVPSync, int checkUD, int16 *error) -/* {{-output"sncSeekMPEGSync.txt"}} */ -{ - u_int32 result; - int numBitsGot, shift_bits; - int16 newError = 0; - int bitErrorIndication = 0; - int flush = 8; - const u_int32 MAX_MPEG4_START_CODE = 0x000001ff; - shift_bits = 32-(16+f_code); - - /* start codes are always byte aligned */ - /* move to the next byte aligned position, if not already there */ - if (buffer->bitIndex != 7) - { - bibForwardBits(buffer->bitIndex + 1, buffer); - } - - for (;;) - { - bitErrorIndication = 0; - result = bibShowBits(32, buffer, &numBitsGot, &bitErrorIndication, &newError); - - - if ( buffer->error ) - { - // out of bits - *error = (int16)buffer->error; - return SNC_NO_SYNC; - } - - /* don't check all start codes, if it is not one of them */ - if (result <= MAX_MPEG4_START_CODE) - { - if (result == MP4_GROUP_START_CODE) - return SNC_GOV; - else if (result == MP4_VOP_START_CODE) - return SNC_VOP; - else if (result == MP4_VOS_START_CODE) - return SNC_VOS; - else if (result == MP4_EOB_CODE) - return SNC_EOB; - else if ( checkUD && (result == MP4_USER_DATA_START_CODE) ) - return SNC_USERDATA; - - } - else if (!skipVPSync && f_code && ((result >> shift_bits) == 1)) - { - return SNC_VIDPACK; - } - - // we continue here after either if all the if-else's inside the if above are false or if the last else-if is false - - // Note! the following optimization is based on MPEG-4 sync code prefix 0x000001. It doesn't work with any other prefixes. - if ( !skipVPSync ) - { - flush = 8; - // a small optimization could be reached also with video packet sync markers, but is probably not worth the effort since - // it seems that it could be used to shift at most 16 bits at least in cases with typical f_code values - // idea: - // at least if fcode == 15, possible vp resync markers are in the form - // 00008xxx, 00009xxx, 0000axxx, 0000bxxx, 0000cxxx, 0000dxxx, 0000exxx, 0000fxxx - // the shifting above already removes the 15 lowest bits => 16th bit must be 1 and 16 highest bits - // should be 0 - // in the old way, the sync code from 00008xxx is found in the following steps - // 8xxxyyyy, 008xxxyy, => match - // hence we can skip 16 bits (or f-code dependent nr of bits) if - // a) 32nd bit is 1 - // If 32nd bit is 0, we can skip the 16-(nr of successive 0-MSB bits) - } - - // then check for the other sync codes - - // the 1st check here is needed to optimize the checking: in hopeless cases only a single check is needed - else if ( (result & 0x000000ff) <= 1 ) - { - // the 1st check is needed to optimize the checking: in hopeless cases only a single check is needed - if ( ((result & 0x000000ff ) == 1) && ((result & 0x00ffff00 ) > 0)) - { - // yyxxxx01, where one of the x != 0 => hopeless - flush = 32; - } - else if ( (result & 0x0000ffff ) == 0 ) - { - // xxxx0000 => could be the 1st 2 bytes of sync code - flush = 16; - } - else if ( (result & 0x000000ff) == 0 ) - { - // yyyyxx00, where xx != 00 (checked above), could be the 1st byte of sync code - flush = 24; - } - else if ( (result & 0x00ffffff) == 1 ) - { - // xx000001 => shift 1 byte - flush = 8; - } - else - { - // this looks duplicate to the 1st one, but is kept here for simplicity. The 1st one is there since it is the most probable and - // hence most cases fall under it. If it was not there, then in most cases all the if's were evaluated and that means extra processing - flush = 32; - } - } - else - { - // hopeless - flush = 32; - } - - // flush bits - bibFlushBits(flush, buffer, &numBitsGot, &bitErrorIndication, error); - } -} - - -/* {{-output"sncSeekBitPattern.txt"}} */ -/* - * sncSeekBitPattern - * - * - * Parameters: - * buffer a pointer to a bit buffer structure - * error error code - * BitPattern to bit pattern to be found - * BitPatternLength length of the bit pattern to be found - * - * Function: - * This function finds the next occurance of the given BitPattern - * from the buffer. The function discards the bits before the BitPattern - * but does not remove the found code from the buffer. - * - * Returns: - * SNC_NO_SYNC if the bit pattern was not found and - * no more bits are available - * SNC_PATTERN if the BitPattern is found - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - * - */ - -int sncSeekBitPattern(bibBuffer_t *buffer, u_int32 BitPattern, int BitPatternLength, int16 *error) -/* {{-output"sncSeekBitPattern.txt"}} */ -{ - u_int32 result; - int numBitsGot; - int16 newError = 0; - int bitErrorIndication = 0; - - for (;;) { - - bitErrorIndication = 0; - - result = bibShowBits(32, buffer, &numBitsGot, &bitErrorIndication, &newError); - - if (newError == ERR_BIB_NOT_ENOUGH_DATA && numBitsGot >= BitPatternLength) { - /* Use the available bits */ - result <<= (32 - numBitsGot); - newError = 0; - } else if (newError) { - deb("sncSeekBitPattern: ERROR - bibShowBits failed.\n"); - *error = newError; - return SNC_NO_SYNC; - } - - if ((result >> (32 - BitPatternLength)) == BitPattern) - return SNC_PATTERN; - else if (result == MP4_GROUP_START_CODE) - return SNC_GOV; - else if (result == MP4_VOP_START_CODE) - return SNC_VOP; - else if (result == MP4_EOB_CODE) - return SNC_EOB; - else if ( buffer->error ) - { - // out of bits - *error = (int16)buffer->error; - return SNC_NO_SYNC; - } - - bibFlushBits(1, buffer, &numBitsGot, &bitErrorIndication, error); - } -} - -/* {{-output"sncRewindStuffing.txt"}} */ -/* - * sncRewindStuffing - * - * - * Parameters: - * buffer a pointer to a bit buffer structure - * error error code - * - * Function: - * This function recognizes and rewinds the stuffing bits (1..8) from - * the current position of the buffer. - * - * Returns: - * SNC_NO_SYNC if the stuffing was not found - * SNC_PATTERN if the stuffing has been rewinded successfully - * - * Error codes: - * Error codes returned by bibFlushBits/bibGetBits/bibShowBits. - * - * - */ - -int sncRewindStuffing(bibBuffer_t *buffer, int16 *error) -/* {{-output"sncRewindStuffing.txt"}} */ -{ - u_int32 result; - int numBitsGot, i; - int16 newError = 0; - int bitErrorIndication = 0; - - bibRewindBits(8, buffer, &newError); - result = bibGetBits(8, buffer, &numBitsGot, &bitErrorIndication, &newError); - if (newError) { - deb("sncRewindStuffing: ERROR - bibShowBits failed.\n"); - *error = newError; - return SNC_NO_SYNC; - } - - for(i = 1; i <= 8; i++) { - /* if stuffing is correct */ - if ((result & (1 << (i-1))) == 0) { - bibRewindBits(i, buffer, &newError); - return SNC_PATTERN; - } - } - - return SNC_NO_SYNC; -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vdcaic.cpp --- a/videoeditorengine/h263decoder/src/vdcaic.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,627 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Advanced Intra Coding functions (MPEG-4). -* -*/ - - - - -#include "h263dConfig.h" - -#include "vdcaic.h" - -#include "errcodes.h" -#include "debug.h" - -#include "zigzag.h" - -/* - * - * aicIntraDCSwitch - * - * Parameters: - * intraDCVLCThr VOP-header field for QP dependent switching between - * MPEG-4 IntraDC coding and IntraAC VLC coding of the - * Intra DC coefficients - * QP quantization parameter - * - * Function: - * This function decides based on the input parameters if the Intra DC - * should be decoded as MPEG-4 IntraDC (switched=0) or switched to - * IntraAC VLC (switched=1) - * - * Returns: - * switched value - * - * - * - */ - -u_char aicIntraDCSwitch(int intraDCVLCThr, int QP) { - - if ( intraDCVLCThr == 0 ) { - return 0; - } - else if ( intraDCVLCThr == 7 ) { - return 1; - } - else if ( QP >= intraDCVLCThr*2+11 ) { - return 1; - } - else { - return 0; - } -} - -/* - * - * aicDCScaler - * - * Parameters: - * QP quantization parameter - * type type of Block "1" Luminance "2" Chrominance - * - * Function: - * Calculation of DC quantization scale according - * to the incoming QP and block type - * - * Returns: - * dcScaler value - * - * - * - */ - -int aicDCScaler (int QP, int type) { - - int dcScaler; - if (type == 1) { - if (QP > 0 && QP < 5) { - dcScaler = 8; - } - else if (QP > 4 && QP < 9) { - dcScaler = 2 * QP; - } - else if (QP > 8 && QP < 25) { - dcScaler = QP + 8; - } - else { - dcScaler = 2 * QP - 16; - } - } - else { - if (QP > 0 && QP < 5) { - dcScaler = 8; - } - else if (QP > 4 && QP < 25) { - dcScaler = (QP + 13) / 2; - } - else { - dcScaler = QP - 6; - } - } - return dcScaler; -} - -/** - * Small routine to compensate the QP value differences between the - * predictor and current block AC coefficients - * - **/ - -static int compensateQPDiff(int val, int QP) { - - if (val<0) { - return (val-(QP>>1))/QP; - } - else { - return (val+(QP>>1))/QP; - } -} - -/** - * Small routine to fill default prediction values into a dcStore entry - * - */ - -static void resetPredRow(int pred[]) -{ - memset (pred, 0, 7 * sizeof(int)); -} - -/* - * - * aicStart - * - * Parameters: - * aicData aicData_t structure - * instance pointer to vdcInstance_t structure - * - * Function: - * This function initialises dcStore and qpStore buffers. - * One should call aicStart in the beginning of each VOP. - * - * Returns: - * Nothing - * - * Error codes: - * - * - */ - -void aicStart(aicData_t *aicData, int numMBsInMBLine, int16 *error) -{ - - int i,j, numStoreUnits; - int initXpos[6] = {-1, 0, -1, 0, -1, -1}; - int initYpos[6] = {-1, -1, 0, 0, -1, -1}; - int initXtab[6] = {1, 0, 3, 2, 4, 5}; - int initYtab[6] = {2, 3, 0, 1, 4, 5}; - int initZtab[6] = {3, 2, 1, 0, 4, 5}; - - numStoreUnits = numMBsInMBLine*2; - - if (!aicData->qpStore || !aicData->dcStore) { - aicData->qpStore = (int16 *) calloc(numStoreUnits, sizeof(int16)); - if (!aicData->qpStore) - { - *error = ERR_VDC_MEMORY_ALLOC; - return; - } - - /* allocate space for 3D matrix to keep track of prediction values - for DC/AC prediction */ - - aicData->dcStore = (int ***)calloc(numStoreUnits, sizeof(int **)); - if (!aicData->dcStore) - { - *error = ERR_VDC_MEMORY_ALLOC; - return; - } - - for (i = 0; i < numStoreUnits; i++) - { - aicData->dcStore[i] = (int **)calloc(6, sizeof(int *)); - if (!aicData->dcStore[i]) - { - *error = ERR_VDC_MEMORY_ALLOC; - return; - } - - for (j = 0; j < 6; j++) - { - aicData->dcStore[i][j] = (int *)calloc(15, sizeof(int)); - if ( !(aicData->dcStore[i][j]) ) - { - *error = ERR_VDC_MEMORY_ALLOC; - return; - } - } - } - - aicData->numMBsInMBLine = numMBsInMBLine; - - for (i= 0; i < 6; i++) - { - aicData->Xpos[i] = initXpos[i]; - aicData->Ypos[i] = initYpos[i]; - aicData->Xtab[i] = initXtab[i]; - aicData->Ytab[i] = initYtab[i]; - aicData->Ztab[i] = initZtab[i]; - } - - /* 1 << (instance->bits_per_pixel - 1) */ - aicData->midGrey = 1 << 7; - - aicData->ACpred_flag = 1; - } else { - memset(aicData->qpStore, 0, numStoreUnits * sizeof(int16)); - } - -} - -/* - * Clip the reconstructed coefficient when it is stored for prediction - * - */ - -#define aicClip(rec) \ - ((rec < -2048) ? -2048 : ((rec > 2047) ? 2047 : rec)) - -/* - * - * aicBlockUpdate - * - * Parameters: - * aicData aicData_t structure - * currMBNum Current Macroblocks Number - * - * Function: - * This function fills up the dcStore and qpStore of current MB. - * - * Returns: - * Nothing - * - * Error codes: - * None - * - * - */ - -void aicBlockUpdate (aicData_t *aicData, int currMBNum, int blockNum, int *block, - int pquant, int DC_coeff) -{ - - int n, currDCStoreIndex; - assert(currMBNum >= 0); - - currDCStoreIndex = ((currMBNum / aicData->numMBsInMBLine) % 2) * aicData->numMBsInMBLine + - (currMBNum % aicData->numMBsInMBLine); - - if (block != NULL) { - - aicData->dcStore[currDCStoreIndex][blockNum][0] = aicClip(DC_coeff); - block[0] = aicClip(block[0]); - - for (n = 1; n < 8; n++) - { - aicData->dcStore[currDCStoreIndex][blockNum][n] = block[zigzag[n]] = aicClip(block[zigzag[n]]); - aicData->dcStore[currDCStoreIndex][blockNum][n+7] = block[zigzag[n<<3 /**8*/]] = aicClip(block[zigzag[n<<3 /**8*/]]); - } - } - - if (blockNum == 0) - aicData->qpStore[currDCStoreIndex]= (int16) pquant; -} - -/* - * - * aicIsBlockValid - * - * Parameters: - * aicData aicData_t structure - * currMBNum Current Macroblocks Number - * - * Function: - * This function checks if the current MB has a valid entry in the - * dcStore and qpStore (needed in predictor validation of I-MBs in a P-VOP). - * - * Returns: - * 1 if MB has a valid entry - * 0 if MB doesn't have a valid entry - * - * Error codes: - * None - * - * - */ - -int aicIsBlockValid (aicData_t *aicData, int currMBNum) -{ - int currDCStoreIndex; - assert(currMBNum >= 0); - - currDCStoreIndex = ((currMBNum / aicData->numMBsInMBLine) % 2) * aicData->numMBsInMBLine + - (currMBNum % aicData->numMBsInMBLine); - - if (aicData->qpStore[currDCStoreIndex] > 0 && aicData->qpStore[currDCStoreIndex] < 32) - return 1; - else - return 0; -} - -/* - * - * aicFree - * - * Parameters: - * aicData aicData_t structure - * numOfMBs Number of Macroblocks in VOP - * - * Function: - * This function frees the dynamic memory allocated by aicStart. - * aicFree should be called at least when exiting the main program. - * Alternatively it can be called whenever the playing a video has - * ended. - * - * Returns: - * Nothing - * - * Error codes: - * None - * - * - */ - -void aicFree(aicData_t *aicData) -{ - int i,j; - - /* Free allocated memory for 3D matrix */ - if (aicData->dcStore) { - for (i = 0; i < (aicData->numMBsInMBLine*2); i++) - { - for (j = 0; j < 6; j++) - free((char *)aicData->dcStore[i][j]); - free((char *)aicData->dcStore[i]); - } - free((char *)aicData->dcStore); - } - - /* Free allocated memory for qpStore matrix */ - if (aicData->qpStore) { - free((char *)aicData->qpStore); - } -} - -/* - * - * aicDCACrecon - * - * Parameters: - * aicData aicData_t structure - * QP QP of the current MB - * fTopMBMissing flag indicating if the block above the current block - * is outside of the current Video Packet or not a valid - * Intra block (in case of P-VOP decoding) - * fLeftMBMissing flag indicating if the block left to the current block - * is outside of the current Video Packet or not a valid - * Intra block (in case of P-VOP decoding) - * fBBlockOut flag indicating if the top-left neighbour block of the - * current block is outside of the current Video Packet - * or not a valid Intra block (in case of P-VOP decoding) - * blockNum number of the current block in the MB - * (0..3 luminance, 4..5 chrominance) - * qBlock block of coefficients - * currMBNum number of the current macroblocks in the VOP - * - * Function: - * This function reconstructs the DC and AC (first column or first row or none) - * coefficients of the current block by selecting the predictor from the - * neighbouring blocks (or default values), and adding these predictor - * values to qBlock. Its output is the quantized coefficient matrix in - * normal zigzag order. - * - * Returns: - * Nothing - * - * Error codes: - * None - * - * - */ - -void aicDCACrecon(aicData_t *aicData, int QP, u_char fTopMBMissing, u_char fLeftMBMissing, - u_char fBBlockOut, int blockNum, int *qBlock, int currMBNum) -{ - int m, n, tempDCScaler; - int xCoordMB, yCoordMB, mbWidth, currDCStoreIndex; - int blockA = 0, blockB = 0, blockC = 0, fBlockAExist = 0, fBlockCExist = 0; - int gradHor, gradVer, predDC; - int fVertical; - int predA[7], predC[7]; - int pcoeff[64]; - assert(currMBNum >= 0); - assert(qBlock != NULL); - - xCoordMB = currMBNum % aicData->numMBsInMBLine; - yCoordMB = currMBNum / aicData->numMBsInMBLine; - currDCStoreIndex = (yCoordMB % 2)*aicData->numMBsInMBLine + xCoordMB; - mbWidth = aicData->numMBsInMBLine * ((currDCStoreIndex < aicData->numMBsInMBLine) ? -1 : 1); - - - /* Find the direction of prediction and the DC prediction */ - switch ( blockNum ) { - case 0 : - case 4 : - case 5 : - /* Y0, U, and V blocks */ - - - /* Prediction blocks A (left), B (above-left), and C (above) */ - if ( ( yCoordMB == 0 && xCoordMB == 0) || (fTopMBMissing && fLeftMBMissing) || (xCoordMB == 0 && fTopMBMissing) || (yCoordMB == 0 && fLeftMBMissing) ) { - /* top-left edge of VOP or VP */ - blockA = aicData->midGrey<<3 /**8*/; - blockB = aicData->midGrey<<3 /**8*/; - blockC = aicData->midGrey<<3 /**8*/; - fBlockAExist = fBlockCExist = 0; - } - else if ( yCoordMB == 0 || fTopMBMissing ) { - /* top row of VOP or VP, or MB on top not valid */ - blockA = aicData->dcStore[currDCStoreIndex+aicData->Xpos[blockNum]][aicData->Xtab[blockNum]][0]; - fBlockAExist = 1; - if ( yCoordMB == 0 || fBBlockOut ) { - /* B MB is out of this VP */ - blockB = aicData->midGrey<<3 /**8*/; - } - else { - blockB = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth+aicData->Xpos[blockNum]][aicData->Ztab[blockNum]][0]; - } - blockC = aicData->midGrey<<3 /**8*/; - fBlockCExist = 0; - } - else if ( xCoordMB == 0 || fLeftMBMissing ) { - /* left edge of VOP or VP, or MB on left not valid */ - blockA = aicData->midGrey<<3 /**8*/; - fBlockAExist = 0; - if ( xCoordMB == 0 || fBBlockOut ) { - /* B MB is out of this VP */ - blockB = aicData->midGrey<<3 /**8*/; - } - else { - blockB = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth+aicData->Xpos[blockNum]][aicData->Ztab[blockNum]][0]; - } - blockC = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth][aicData->Ytab[blockNum]][0]; - fBlockCExist = 1; - } - else { - /* Something else */ - blockA = aicData->dcStore[currDCStoreIndex+aicData->Xpos[blockNum]][aicData->Xtab[blockNum]][0]; - if ( fBBlockOut ) { - /* B MB is out of this VP */ - blockB = aicData->midGrey<<3 /**8*/; - } - else { - blockB = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth+aicData->Xpos[blockNum]][aicData->Ztab[blockNum]][0]; - } - blockC = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth][aicData->Ytab[blockNum]][0]; - fBlockAExist = fBlockCExist = 1; - } - break; - case 1 : - /* Y1 block */ - - /* Prediction block A (left) always available */ - blockA = aicData->dcStore[currDCStoreIndex+aicData->Xpos[blockNum]][aicData->Xtab[blockNum]][0]; - fBlockAExist = 1; - /* Prediction blocks B (above-left) and C (above) */ - if ( yCoordMB == 0 || fTopMBMissing ) { - /* top row of VOP or VP */ - blockB = aicData->midGrey<<3 /**8*/; - blockC = aicData->midGrey<<3 /**8*/; - fBlockCExist = 0; - } - else { - blockB = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth+aicData->Xpos[blockNum]][aicData->Ztab[blockNum]][0]; - blockC = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth][aicData->Ytab[blockNum]][0]; - fBlockCExist = 1; - } - break; - case 2 : - /* Y2 block */ - - /* Prediction blocks A (left) and B (above-left) */ - if ( xCoordMB == 0 || fLeftMBMissing ) { - /* left edge or first MB in VP */ - blockA = aicData->midGrey<<3 /**8*/; - blockB = aicData->midGrey<<3 /**8*/; - fBlockAExist = 0; - } - else { - blockA = aicData->dcStore[currDCStoreIndex+aicData->Xpos[blockNum]][aicData->Xtab[blockNum]][0]; - blockB = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth+aicData->Xpos[blockNum]][aicData->Ztab[blockNum]][0]; - fBlockAExist = 1; - } - /* Prediction block C (above) always available */ - blockC = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth][aicData->Ytab[blockNum]][0]; - fBlockCExist = 1; - break; - case 3 : - /* Y3 block */ - - /* Prediction block A (left) always available */ - blockA = aicData->dcStore[currDCStoreIndex+aicData->Xpos[blockNum]][aicData->Xtab[blockNum]][0]; - /* Prediction block B (above-left) always available */ - blockB = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth+aicData->Xpos[blockNum]][aicData->Ztab[blockNum]][0]; - /* Prediction block C (above) always available */ - blockC = aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth][aicData->Ytab[blockNum]][0]; - fBlockAExist = fBlockCExist = 1; - break; - } - - - - - gradHor = blockB - blockC; - gradVer = blockA - blockB; - - if ((abs(gradVer)) < (abs(gradHor))) { - /* Vertical prediction (from C) */ - predDC = blockC; - fVertical = 1; - } - else { - /* Horizontal prediction (from A) */ - predDC = blockA; - fVertical = 0; - } - - /* Now reconstruct the DC coefficient */ - tempDCScaler = aicDCScaler(QP,(blockNum<4)?1:2); - qBlock[0] = (u_int8) (qBlock[0] + (predDC + tempDCScaler/2) / tempDCScaler); - - /* Do AC prediction if required */ - if (aicData->ACpred_flag == 1) { - - /* Do inverse zigzag-scanning */ - if (fVertical) { - for (m = 0; m < 64; m++) { - pcoeff[m] = qBlock[zigzag_h[m]]; - } - } - else { /* horizontal prediction */ - for (m = 0; m < 64; m++) { - pcoeff[m] = qBlock[zigzag_v[m]]; - } - } - - - - /* AC predictions */ - if ( !fVertical && fBlockAExist ) { - /* prediction from A */ - for (m = 8; m < 15; m++) { - predA[m-8] = compensateQPDiff(((aicData->dcStore[currDCStoreIndex+aicData->Xpos[blockNum]][aicData->Xtab[blockNum]][m]) * 2 * (aicData->qpStore[currDCStoreIndex+aicData->Xpos[blockNum]])), (QP<<1)); - } - } - else if ( fVertical && fBlockCExist ) { - /* prediction from C */ - for (m = 1; m < 8; m++) { - predC[m-1] = compensateQPDiff(((aicData->dcStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth][aicData->Ytab[blockNum]][m]) * 2 * (aicData->qpStore[currDCStoreIndex+(aicData->Ypos[blockNum])*mbWidth])), (QP<<1)); - } - } - else { - /* Prediction not possible */ - if ( fVertical ) { - resetPredRow(predC); - } - else { - resetPredRow(predA); - } - } - - - - /* AC coefficients reconstruction*/ - if (fVertical) { /* Vertical, top row of block C */ - for (m = 0; m < 7; m++) { - qBlock[zigzag[(m+1)*8]] = pcoeff[(m+1)*8]; - } - for (m = 1; m < 8; m++) { - qBlock[zigzag[m]] = pcoeff[m] + predC[m-1]; - } - } - else { /* Horizontal, left column of block A */ - for (m = 0; m < 7; m++) { - qBlock[zigzag[(m+1)*8]] = pcoeff[(m+1)*8] + predA[m]; - } - for (m = 1; m < 8; m++) { - qBlock[zigzag[m]] = pcoeff[m]; - } - } - - /* Copy the rest of the coefficients back to qBlock */ - for (m = 1; m < 8; m++) { - for (n = 1; n < 8; n++) { - qBlock[zigzag[m*8+n]] = pcoeff[m*8+n]; - } - } - } - -} - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vdcmvc.cpp --- a/videoeditorengine/h263decoder/src/vdcmvc.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1701 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Motion vector calculations and storage. -* -*/ - - - - -#include "h263dConfig.h" - -#include "vdcmvc.h" - -#include "core.h" -#include "errcodes.h" -#include "debug.h" - - -/* - * Defines - */ - -#define NEIGHBOUR_SIZE 2 /* The size for neighbour array */ -#define MVD_NOT_CODED -32767 /* Macroblock is not coded in mvcTable_t */ -#define MVD_INTRA -32765 /* Marks intra macroblock in mvcTable_t */ - -#define MVD_UMIN_MPEG4 -10240 - -#define MVD_MIN -160 /* The minimum for mvd. */ -#define MVD_MAX 155 /* The maximum for mvd. */ -#define MVD_UMIN_V1 -315 /* The minimum for MV in unrestricted mode (v1) */ -#define MVD_UMAX_V1 315 /* The maximum for MV in unrestricted mode (v1) */ -#define MVD_UMIN_V2 -32000 /* The minimum for MV in unrestricted mode (v2) - Note: this value is used to check the validity - of MVs. If there is no MV for a MB - MVD_NOT_CODED or MVD_INTRA are used, and - therefore any value bigger than those - suits for this definition. In H.263 v2 - unlimited submode, MVs can have any length - within a picture (plus 15-pixel border), - and therefore this definition is set to small - enough value. */ -#define MVD_155 155 /* MV for 15.5 */ -#define MVD_160 160 /* MV for 16 */ -#define MVD_320 320 /* MV for 32 */ -/* It is assumed that motion vector values are signed and in order - (for example MV for 15.5 < MV for 16). - No other assumptions are made. */ - - -/* - * Macros - */ - -/* mvValid checks if the specified item is a valid motion vector */ -/* Note: MVD_NOT_CODED and MVD_INTRA are very small negative numbers. - Thus, we can use the minimum MV for H.263 Annex D unlimited - submode to check the validity of a passed item. Actually, - we could use any value larger than MVD_NOT_CODED and MVD_INTRA - and smaller than or equal to the minimum MV. */ -#define mvValid(d1item, d1y, d1time) \ - (d1item.mvx >= MVD_UMIN_V2 \ - && d1item.y == (d1y) && d1item.time == (d1time)) - - -#define mvValidMPEG(d1item, d1y, d1time) \ - (d1item.mvx >= MVD_UMIN_MPEG4 \ - && d1item.y == (d1y) && d1item.time == (d1time)) - -/* mvLegal cheks if the specified item has been updated to either contain - a motion vector or not coded / intra information */ -#define mvLegal(d5item, d5y, d5time) \ - (d5item.y == (d5y) && d5item.time == (d5time)) - -/* mvStore puts given arguments into the motion vector array - Used from: mvcCalcMV */ -#define mvStore(d2row, d2x, d2y, d2mvx, d2mvy, d2time, d2type) \ - d2row[d2x].mvx = d2mvx; d2row[d2x].mvy = d2mvy; \ - d2row[d2x].y = d2y; d2row[d2x].time = d2time; d2row[d2x].fourMVs = 1; \ - d2row[d2x].type = d2type - -/* mvStoreMB puts given arguments into the motion vector array for the - whole macroblock - Used from: mvcCalcMV, mvcMarkMBIntra, mvcMarkMBNotCoded */ -#define mvStoreMB(d4row1, d4row2, d4x, d4y, d4mvx, d4mvy, d4time, d4type) \ - d4row1[d4x].mvx = d4row1[d4x + 1].mvx = \ - d4row2[d4x].mvx = d4row2[d4x + 1].mvx = d4mvx; \ - d4row1[d4x].mvy = d4row1[d4x + 1].mvy = \ - d4row2[d4x].mvy = d4row2[d4x + 1].mvy = d4mvy; \ - d4row1[d4x].y = d4row1[d4x + 1].y = d4y; \ - d4row2[d4x].y = d4row2[d4x + 1].y = d4y + 1; \ - d4row1[d4x].time = d4row1[d4x + 1].time = \ - d4row2[d4x].time = d4row2[d4x + 1].time = time; \ - d4row1[d4x].fourMVs = d4row1[d4x + 1].fourMVs = \ - d4row2[d4x].fourMVs = d4row2[d4x + 1].fourMVs = 0; \ - d4row1[d4x].type = d4row1[d4x + 1].type = \ - d4row2[d4x].type = d4row2[d4x + 1].type = (d4type) - -/* updateRowPointers checks if currX, currY or currTime have changed - and updates them. It also updates mvRow0, mvRow1 and mvRow2. - Used from: mvcCalcMV, mvcMarkMBIntra, mvcMarkMBNotCoded */ -#define updateRowPointers(d3x, d3y, d3time) \ - if (d3x != mvcData->currX) \ - mvcData->currX = d3x; \ - if (d3y != mvcData->currY) { \ - int \ - mvRowIndex, \ - currMaxX = mvcData->currMaxX; \ - mvRowItem_t *mvRow = mvcData->mvRow; \ - mvcData->currY = d3y; \ - mvcData->mvRowIndex = mvRowIndex = (mvcData->mvRowIndex + 2) % 3; \ - mvcData->mvRow0 = &mvRow[(currMaxX + 1) * 2 * mvRowIndex]; \ - mvcData->mvRow1 = &mvRow[(currMaxX + 1) * 2 * ((mvRowIndex + 1) % 3)]; \ - mvcData->mvRow2 = &mvRow[(currMaxX + 1) * 2 * ((mvRowIndex + 2) % 3)]; \ - } \ - if (d3time != mvcData->currTime) \ - mvcData->currTime = d3time - -/* mvcInvMVD takes the other one of the possible MVD values defined in - H.263 Recommendation */ -#define mvcInvMVD(invMv) \ - (invMv < 0) ? \ - MVD_320 + invMv : \ - -MVD_320 + invMv - -/* sign123(x) returns - 1 if x < 0, - 2 if x > 0, - 3 if x == 0 - In other words, - bit 0 = 1 if x <= 0, - bit 1 = 1 if x >= 0 */ -#define sign123(x) ((x == 0) ? 3 : (x < 0) ? 1 : 2) - - -/* - * Local prototypes - */ - -static void mvcGetNeighbourMVs(mvcData_t *mvcData, int x, int y, int time, - int *nmvx, int *nmvy, int prevFlag, int16 *error); - -__inline static void mvcCheckAndSet( - mvRowItem_t *mvRowPtr, int xind, int yind, int time, int nind, - int *nmvx, int *nmvy, mvRowItem_t *cmvRowPtr, int cxind, int cyind, - int16 *error); - -__inline static void mvcSetToCurrent( - mvRowItem_t *mvRowPtr, int xind, int yind, int time, int nind, - int *nmvx, int *nmvy, int16 *error); - - -/* - * Global functions - */ - - -/* {{-output"mvcSetBorders.txt"}} */ -/* - * - * mvcSetBorders - * - * Parameters: - * mvcData mvcData_t structure - * x the x coordinate of the MB (0 .. maxX) - * y the y coordinate of the MB - * (0 .. macroblock rows in frame - 1) - * mba Macroblock address of starting MB of the slice. This - * value SHOULD be set to -1 if Annex K is not in use. - * numMBsInMBLine Number of MBs in MB line - * rightOfBorder There is a border on the left of the current MB - * downOfBorder There is a border on top of the current MB - * - * Function: - * This function calculates the borders of GOBs and Slices..This function - * SHOULD be called before mvcCalcMV..... - * - * Returns: - * Nothing - * - * Error codes: - * None - * - */ - -void mvcSetBorders( - mvcData_t *mvcData, int x, int y, int mba, int numMBsInMBLine, - int *rightOfBorder, int *downOfBorder -) -{ - int - upRightMBIsStart; - - if (mvcData) { - mvcData->rightOfBorderPrev = mvcData->rightOfBorder; - mvcData->downOfBorderPrev = mvcData->downOfBorder; - } - - if (mba == -1) { - if (x == 0) { - *rightOfBorder = 1; - } - else { - *rightOfBorder = 0; - } - - /* Always downOfBorder is set to 1, since in QCIF and CIF every GOB - has only 1 MB line. If larger images are supported, numMBLinesInGOB - should be passed here. Also number of starting MB of the GOB may be - needed...*/ - *downOfBorder = 1; - upRightMBIsStart = 0; - } - else { - int - xs, /* x coordinate of start MB */ - ys; /* y coordinate of start MB */ - xs = mba % numMBsInMBLine; - ys = mba / numMBsInMBLine; - - /* slice structured mode*/ - /* Check if there is slice border on top of the current MB: - For that, check either current MB should be on the same MB line - with the starting MB of slice or current MB should not be on the - left of the starting MB if the MB is on the second line of the - slice. */ - - if ((y == ys) || ((x < xs) && (ys+1 == y))) { - *downOfBorder = 1; - } - else { - *downOfBorder = 0; - } - /* Check if there is a slice border on the left of the current MB.*/ - if (((x == xs) && (y == ys)) || (x == 0)) { - *rightOfBorder = 1; - } - else { - *rightOfBorder = 0; - } - - /* Test the situation of MV2 is in another slice but MV3 in in the - same slice... i.e: - MB1 MB1 MB1 MB2 MB2 .........MB2 - MB2 MB2 MB2 MB2 MB2..........MB2 - * - The MB marked with * is an exmaple. MB on top of it is in another slice - but the MB which MV3 will come from is in the same slice...*/ - if ((x+1 == xs) && (y-1 == ys)) - upRightMBIsStart = 1; - else - upRightMBIsStart = 0; - } - - if (mvcData) { - mvcData->upRightMBIsStart = upRightMBIsStart; - mvcData->downOfBorder = *downOfBorder; - mvcData->rightOfBorder = *rightOfBorder; - mvcData->leftOfBorder = 0; - } -} - -/* {{-output"mvcCalcMV.txt"}} */ -/* - * - * mvcCalcMV - * - * Parameters: - * mvcData mvcData_t structure - * - * mvdx motion vector data returned by vlcGetMVD - * mvdy - * - * *mvx the resulting motion vector is placed to *mvx and *mvy - * *mvy - * - * predictorMode 0, 1, 2 or 3. See H.263 recommendation, Annex F, Figure - * 15, where modes are in the following order: - * 0 1 - * 2 3 - * - * Advanced Prediction mode: It is assumed that this - * function is called by setting predictorMode 0, 1, 2 - * and 3 in this order for a particular macroblock. - * - * Normal: This function should be called by setting - * predictorMode to 0. - * - * fourMVs if != 0, four motion vectors for current macroblock - * is assumed - * - * unrestrictedMV if != 0, unrestricted motion vector mode is used - * - * topOfGOB if != 0, the current MB is assumed to be in the - * first line of the current GOB - * - * nonEmptyGOBHeader if != 0, the GOB header of the current GOB is - * is assumed to be non-empty, and MV2 and MV3 are - * set to MV1 if they are outside the GOB. If Annex K - * is in use set this value to 1...... - * - * x the x coordinate of the MB (0 .. maxX) - * y the y coordinate of the MB - * (0 .. macroblock rows in frame - 1) - * - * time a value which is related to the time when the current - * frame must be shown. This value should be unique - * among a relatively small group of consecutive frames. - * - * mbType must be MVC_MB_INTER or MVC_MB_INTRA. MVC_MB_INTRA - * should be used only in PB frames mode. - * - * error error code - * - * fPLUSPTYPE PLUSTYPE flag - * - * fUMVLimited Annex D v2 flag - * 1 => Limited MVs (UUI = 1) - * 0 => Unlimited MVs (UUI = 01) - * - * Function: - * This function counts the motion vector value for given macroblock. - * See H.263 Recommendation 6.1.1 Differential Motion Vectors and - * Annex F. Advanced Prediction Mode. - * - * Returns: - * Changes *mvx, *mvy and possibly *error. - * - * Error codes: - * ERR_MVC_MVDX_ILLEGAL mvdx illegal - * ERR_MVC_MVDY_ILLEGAL mvdy illegal - * ERR_MVC_MVX_ILLEGAL mvx is NULL - * ERR_MVC_MVY_ILLEGAL mvy is NULL - * ERR_MVC_MODE_ILLEGAL predictorMode illegal - * ERR_MVC_X_ILLEGAL x < 0 or x > maxX - * ERR_MVC_Y_ILLEGAL y < 0 - * ERR_MVC_TIME_ILLEGAL time < 0 - * ERR_MVC_MVPTR result is not legal - * - */ - -void mvcCalcMV(mvcData_t *mvcData, int mvdx, int mvdy, - int *mvx, int *mvy, u_char predictorMode, u_char fourMVs, - u_char unrestrictedMV, u_char nonEmptyGOBHeader, int x, - int y, int time, int mbType, int16 *error, int fPLUSPTYPE, - int fUMVLimited) -/* {{-output"mvcCalcMV.txt"}} */ -{ - - int - i, j, /* loop variables */ - mvcx[3], /* Candidates: mv[0] = MV1, mv[1] = MV2, mv[2] = MV3 */ - mvcy[3], - *mv, /* mvcx or mvcy */ - *mvptr, /* == mvx or mvy */ - mvd, /* mvdx or mvdy */ - xx2, /* x * 2 */ - yx2, /* y * 2 */ - xmv1, /* index for MV1 */ - xmv2, /* index for MV2 */ - xmv3, /* index for MV3 */ - ymv1, - ymv2, - ymv3, - mvRangeLow, /* Lower boundary for MV Range - Look H.263+ Rec. Table D.1, D.2 */ - mvRangeHigh, /* Higher boundary for MV Range - Look H.263+ Rec. Table D.1, D.2 */ - picDim, /* Temporary variable for luminance width or height */ - mbCorner, /* Temporary variable for MB's topleft corner's - coordinate (x or y)*/ - mvRes; /* MB's rightmost or bottommost pixel plus MV - for checking restriction D.1.1 */ - mvRowItem_t - *currMvRow, - *prevMvRow, - *mvRow0, - *mvRow1, - *mvRow2; - - /* Check parameters */ - if ((!fPLUSPTYPE) || (!unrestrictedMV)) - { - if (mvdx < MVD_MIN || mvdx > MVD_MAX) { - *error = ERR_MVC_MVDX_ILLEGAL; - return; - } - - if (mvdy < MVD_MIN || mvdy > MVD_MAX) { - *error = ERR_MVC_MVDY_ILLEGAL; - return; - } - } - - if (!mvx) { - *error = ERR_MVC_MVX_ILLEGAL; - return; - } - - if (!mvy) { - *error = ERR_MVC_MVY_ILLEGAL; - return; - } - - if ((fourMVs && predictorMode > 3) || - (!fourMVs && predictorMode > 0)) { - *error = ERR_MVC_MODE_ILLEGAL; - return; - } - - if (x < 0 || x > mvcData->currMaxX) { - *error = ERR_MVC_X_ILLEGAL; - return; - } - - if (y < 0) { - *error = ERR_MVC_Y_ILLEGAL; - return; - } - - if (time < 0) { - *error = ERR_MVC_TIME_ILLEGAL; - return; - } - - updateRowPointers(x, y, time); - mvRow0 = mvcData->mvRow0; - mvRow1 = mvcData->mvRow1; - mvRow2 = mvcData->mvRow2; - - /* Seek candidate predictors */ - - xx2 = x << 1; /* xx2 = x * 2 */ - yx2 = y << 1; - - xmv1 = xx2 - 1 + (predictorMode & 1); - xmv2 = xx2 + (predictorMode == 1); - xmv3 = xx2 + 2 - (predictorMode > 1); - ymv1 = yx2 + (predictorMode > 1); - ymv2 = ymv3 = yx2 - 1 + (predictorMode > 1); - - if (predictorMode <= 1) { - currMvRow = mvRow1; - prevMvRow = mvRow0; - } - else { - currMvRow = mvRow2; - prevMvRow = mvRow1; - } - - if ( (predictorMode & 1) || /* right column of the MB */ - ( !mvcData->rightOfBorder && mvValid(currMvRow[xmv1], ymv1, time) ) ) { - mvcx[0] = currMvRow[xmv1].mvx; - mvcy[0] = currMvRow[xmv1].mvy; - } - else - /* if (x == 0 || motion vector for previous MB does not exist || - the previous MB belongs to a different slice) */ - mvcx[0] = mvcy[0] = 0; - - if ((y == 0 || (mvcData->downOfBorder && nonEmptyGOBHeader)) && predictorMode <= 1) { - /* mv2 and mv3 are outside the picture or GOB - (if non-empty GOB header) or outside the slice*/ - mvcx[1] = mvcx[0]; - mvcy[1] = mvcy[0]; - /* Check if the MB ont the previous line and on the next column - in in the same slice (means start MBof the slice).. */ - if (!mvcData->upRightMBIsStart) { - mvcx[2] = mvcx[0]; - mvcy[2] = mvcy[0]; - } - if (x == mvcData->currMaxX) - mvcx[2] = mvcy[2] = 0; - } - else { - if (mvValid(prevMvRow[xmv2], ymv2, time)) { - mvcx[1] = prevMvRow[xmv2].mvx; - mvcy[1] = prevMvRow[xmv2].mvy; - } - else - mvcx[1] = mvcy[1] = 0; - - if (mvValid(prevMvRow[xmv3], ymv3, time)) { - mvcx[2] = prevMvRow[xmv3].mvx; - mvcy[2] = prevMvRow[xmv3].mvy; - } - else - mvcx[2] = mvcy[2] = 0; - } - - for (j = 0, mv = mvcx, mvd = mvdx, mvptr = mvx, - picDim = mvcData->currLumWidth, mbCorner = x, - mvRangeLow = mvcData->mvRangeLowX, - mvRangeHigh = mvcData->mvRangeHighX; - j < 2; - j++, mv = mvcy, mvd = mvdy, mvptr = mvy, - picDim = mvcData->currLumHeight, mbCorner = y, - mvRangeLow = mvcData->mvRangeLowY, - mvRangeHigh = mvcData->mvRangeHighY) { - - int choice1, min, predictor; - - /* Find the median of the candidates */ - - min = mv[0]; - predictor = 32767; - - for (i = 1; i < 3; i++) { - if (mv[i] <= min) { - predictor = min; - min = mv[i]; - continue; - } - if (mv[i] < predictor) - predictor = mv[i]; - } - - /* Count the new motion vector value */ - - if (!unrestrictedMV) { - /* Default prediction mode. - Count the legal [-16..15.5] motion vector */ - - choice1 = predictor + mvd; - - *mvptr = (MVD_MIN <= choice1 && choice1 <= MVD_MAX) ? - choice1 : - /*(mvd == 0) ? - predictor :*/ /* index 32, should never happen?! */ - (mvd < 0) ? - MVD_320 + choice1 : /* index 0..31: 32 + mvd + predictor */ - -MVD_320 + choice1; /* index 33..63: -32 + mvd + predictor */ - - /* Check that the result is [-16..15.5] */ - if (*mvptr < MVD_MIN || *mvptr > MVD_MAX) { - *error = ERR_MVC_MVPTR; - return; - } - } - - else if ((-MVD_155 <= predictor && predictor <= MVD_160) && (!fPLUSPTYPE)) - /* Unrestricted motion vector mode && -15.5 <= predictor <= 16. - mvd is always valid. */ - *mvptr = predictor + mvd; - - else if (!fPLUSPTYPE) - { - /* Unrestricted motion vector mode && predictor not in [-15.5, 16] - Result in [-31.5, 31.5] and has the same sign as predictor */ - choice1 = predictor + mvd; - *mvptr = (MVD_UMIN_V1 <= choice1 && choice1 <= MVD_UMAX_V1 && - (sign123(choice1) & sign123(predictor))) ? - choice1 : - /*(mvd == 0) ? - predictor :*/ /* index 32, should never happen!? */ - (mvd < 0) ? - MVD_320 + choice1 : /* index 0..31: 32 + mvd + predictor */ - -MVD_320 + choice1; /* index 33..63: -32 + mvd + predictor */ - - /* Check that the result is in the appropriate range. */ - if ((predictor < -MVD_155 && *mvptr > 0) || - (predictor > MVD_160 && *mvptr < 0)) { - *error = ERR_MVC_MVPTR; - return; - } - - } - else if (fUMVLimited) - /* fPlusType==1 && UUI == 1*/ - { - *mvptr = predictor + mvd; - - if ( *mvptr > 0 ) - /* mvRes is the leftmost/topmost pixels coordinate of next - macroblock plus 2 times MV */ - mvRes = (mbCorner+1)*32 + (*mvptr)/5 ; - else - /* mvRes is the leftmost/topmost pixels coordinate of current - macroblock plus 2 times MV, - half a pixel corresponds to 1 in integer scale */ - mvRes = mbCorner*32 + (*mvptr)/5 ; - - if ((mvRes < -30) || (mvRes > picDim * 2 + 30)) - /* Restriction D.1.1 */ - { - *error = ERR_MVC_MVPTR; - deb("Restriction D.1.1\n"); - return; - } - - if ((*mvptr < mvRangeLow) || (*mvptr > mvRangeHigh)) - /* Restriction D.2 */ - { - *error = ERR_MVC_MVPTR; - deb("Restriction D.2 \n"); - return; - } - } - else /* fPlusType==1 && UUI == 01 */ - { - *mvptr = predictor + mvd; - if ( *mvptr > 0 ) - mvRes = (mbCorner+1)*32 + (*mvptr)/5; - else - mvRes = mbCorner*32 + (*mvptr)/5; - if ((mvRes < -30) || (mvRes > picDim * 2 + 30)) - /* Restriction D.1.1 */ - { - *error = ERR_MVC_MVPTR; - deb("Restriction D.1.1\n"); - return; - } - } - } - - /* Update motion vector buffer arrays */ - switch (predictorMode) { - case 0: - if (fourMVs) { - mvStore(mvRow1, xx2, yx2, *mvx, *mvy, time, mbType); - } - else { - mvStoreMB(mvRow1, mvRow2, xx2, yx2, *mvx, *mvy, time, mbType); - } - break; - case 1: - mvStore(mvRow1, xx2 + 1, yx2, *mvx, *mvy, time, mbType); - break; - case 2: - mvStore(mvRow2, xx2, yx2 + 1, *mvx, *mvy, time, mbType); - break; - case 3: - mvStore(mvRow2, xx2 + 1, yx2 + 1, *mvx, *mvy, time, mbType); - break; - } -} - - -/* {{-output"mvcCalcMPEGMV.txt"}} */ -/* - * - * mvcCalcMPEGMV - * - * Parameters: - * mvcData mvcData_t structure - * - * mvdx motion vector data returned by vlcGetMVD - * mvdy - * - * *mvx the resulting motion vector is placed to *mvx and *mvy - * *mvy - * - * predictorMode 0, 1, 2 or 3. See H.263 recommendation, Annex F, Figure - * 15, where modes are in the following order: - * 0 1 - * 2 3 - * - * Advanced Prediction mode: It is assumed that this - * function is called by setting predictorMode 0, 1, 2 - * and 3 in this order for a particular macroblock. - * - * Normal: This function should be called by setting - * predictorMode to 0. - * - * fourMVs if != 0, four motion vectors for current macroblock - * is assumed - * - * topOfVP if != 0, the current MB is assumed to be in the - * first line of the current VideoPacket - * - * leftOfVP if != 0, the current MB is assumed to be the - * first in the VideoPacket - * - * fmv3_out if != 0, the 3rd MB (top, right) used as MV predictor - * is outside of the current VideoPacket - * - * x the x coordinate of the MB (0 .. maxX) - * y the y coordinate of the MB - * (0 .. macroblock rows in frame - 1) - * - * time a value which is related to the time when the current - * frame must be shown. This value should be unique - * among a relatively small group of consecutive frames. - * - * mbType must be MVC_MB_INTER or MVC_MB_INTRA. MVC_MB_INTRA - * should be used only in PB frames mode. - * - * error error code - * - * Function: - * This function counts the motion vector value for given macroblock. - * See H.263 Recommendation 6.1.1 Differential Motion Vectors and - * Annex F. Advanced Prediction Mode. - * - * Returns: - * Changes *mvx, *mvy and possibly *error. - * - * Error codes: - * The following codes are assertion-like checks: - * ERR_MVC_MVDX_ILLEGAL mvdx illegal - * ERR_MVC_MVDY_ILLEGAL mvdy illegal - * ERR_MVC_MVX_ILLEGAL mvx is NULL - * ERR_MVC_MVY_ILLEGAL mvy is NULL - * ERR_MVC_MODE_ILLEGAL predictorMode illegal - * ERR_MVC_X_ILLEGAL x < 0 or x > maxX - * ERR_MVC_Y_ILLEGAL y < 0 - * ERR_MVC_TIME_ILLEGAL time < 0 - * - * The following code may also be caused by a bit error: - * ERR_MVC_MVPTR result is not legal - * - */ - -void mvcCalcMPEGMV(mvcData_t *mvcData, - int mvdx, int mvdy, int *mvx, int *mvy, - u_char predictorMode, u_char fourMVs, - u_char topOfVP, u_char leftOfVP, u_char fmv3_out, - int x, int y, int time, int mbType, int16 *error) -/* {{-output"mvccalc.txt"}} */ -{ - int - i, j, /* loop variables */ - mvcx[3], /* Candidates: mv[0] = MV1, mv[1] = MV2, mv[2] = MV3 */ - mvcy[3], - mvc1_out = 0, mvc2_out = 0, mvc3_out = 0, - *mv, /* mvcx or mvcy */ - *mvptr, /* == mvx or mvy */ - mvd, /* mvdx or mvdy */ - xx2, /* x * 2 */ - yx2, /* y * 2 */ - xmv1, /* index for MV1 */ - xmv2, /* index for MV2 */ - xmv3, /* index for MV3 */ - ymv1, - ymv2, - ymv3; - mvRowItem_t - *currMvRow, - *prevMvRow, - *mvRow0, - *mvRow1, - *mvRow2; - - - if (!mvx) { - *error = ERR_MVC_MVX_ILLEGAL; - return; - } - - if (!mvy) { - *error = ERR_MVC_MVY_ILLEGAL; - return; - } - - if ((fourMVs && predictorMode > 3) || - (!fourMVs && predictorMode > 0)) { - *error = ERR_MVC_MODE_ILLEGAL; - return; - } - - if (x < 0 || x > mvcData->currMaxX) { - *error = ERR_MVC_X_ILLEGAL; - return; - } - - if (y < 0) { - *error = ERR_MVC_Y_ILLEGAL; - return; - } - - if (time < 0) { - *error = ERR_MVC_TIME_ILLEGAL; - return; - } - - updateRowPointers(x, y, time); - mvRow0 = mvcData->mvRow0; - mvRow1 = mvcData->mvRow1; - mvRow2 = mvcData->mvRow2; - - /* Seek candidate predictors */ - - xx2 = x << 1; /* xx2 = x * 2 */ - yx2 = y << 1; - - xmv1 = xx2 - 1 + (predictorMode & 1); - xmv2 = xx2 + (predictorMode == 1); - xmv3 = xx2 + 2 - (predictorMode > 1); - ymv1 = yx2 + (predictorMode > 1); - ymv2 = ymv3 = yx2 - 1 + (predictorMode > 1); - - if (predictorMode <= 1) { - currMvRow = mvRow1; - prevMvRow = mvRow0; - } - else { - currMvRow = mvRow2; - prevMvRow = mvRow1; - } - - if ((x == 0 || leftOfVP) && !(predictorMode & 1)) { - /* mv1 is outside the VP or VOP */ - mvcx[0] = mvcy[0] = 0; - mvc1_out = 1; - } - else { - if (mvValidMPEG(currMvRow[xmv1], ymv1, time)) { - mvcx[0] = currMvRow[xmv1].mvx; - mvcy[0] = currMvRow[xmv1].mvy; - } - else mvcx[0] = mvcy[0] = 0; - } - - if ((y == 0 || topOfVP) && predictorMode <= 1) { - /* mv2 is outside the VP or VOP */ - mvcx[1] = mvcy[1] = 0; - mvc2_out = 1; - } - else { - if (mvValidMPEG(prevMvRow[xmv2], ymv2, time)) { - mvcx[1] = prevMvRow[xmv2].mvx; - mvcy[1] = prevMvRow[xmv2].mvy; - } - else mvcx[1] = mvcy[1] = 0; - } - - if ((y == 0 || fmv3_out || x == mvcData->currMaxX) && predictorMode <= 1) { - /* mv3 is outside the VP or VOP */ - mvcx[2] = mvcy[2] = 0; - mvc3_out = 1; - } - else { - if (mvValidMPEG(prevMvRow[xmv3], ymv3, time)) { - mvcx[2] = prevMvRow[xmv3].mvx; - mvcy[2] = prevMvRow[xmv3].mvy; - } - else - mvcx[2] = mvcy[2] = 0; - } - - for (j = 0, mv = mvcx, mvd = mvdx, mvptr = mvx; - j < 2; - j++, mv = mvcy, mvd = mvdy, mvptr = mvy) { - - int min, predictor; - - switch (mvc1_out + mvc2_out + mvc3_out) - { - case 3: - predictor = 0; - break; - case 2: - predictor = mv[0] + mv[1] + mv[2]; - break; - case 1: - case 0: - /* Find the median of the candidates */ - min = mv[0]; - predictor = 32767; - - for (i = 1; i < 3; i++) { - if (mv[i] <= min) { - predictor = min; - min = mv[i]; - continue; - } - if (mv[i] < predictor) - predictor = mv[i]; - } - break; - default: - /* Should never happen */ - vdcAssert(0); - predictor = 0; - break; - } - - /* Count the new motion vector value */ - *mvptr = predictor + mvd; - - if (*mvptr < -(mvcData->range)) - *mvptr += 2*(mvcData->range); - else if (*mvptr > (mvcData->range)-5) - *mvptr -= 2*(mvcData->range); - } - - /* Update motion vector buffer arrays */ - switch (predictorMode) { - case 0: - if (fourMVs) { - mvStore(mvRow1, xx2, yx2, *mvx, *mvy, time, mbType); - } - else { - mvStoreMB(mvRow1, mvRow2, xx2, yx2, *mvx, *mvy, time, mbType); - } - break; - case 1: - mvStore(mvRow1, xx2 + 1, yx2, *mvx, *mvy, time, mbType); - break; - case 2: - mvStore(mvRow2, xx2, yx2 + 1, *mvx, *mvy, time, mbType); - break; - case 3: - mvStore(mvRow2, xx2 + 1, yx2 + 1, *mvx, *mvy, time, mbType); - break; - } -} - -/* {{-output"mvcFree.txt"}} */ -/* - * - * mvcFree - * - * Parameters: - * mvcData mvcData_t structure - * - * Function: - * This function frees the dynamic memory allocated by mvcStart. - * mvcFree should be called at least when exiting the main program. - * Alternatively it can be called whenever the playing a video has - * ended. - * - * Returns: - * Nothing - * - * Error codes: - * None - * - * - * - * - */ - -void mvcFree(mvcData_t *mvcData) -/* {{-output"mvcFree.txt"}} */ -{ - if (mvcData) { - if (mvcData->mvRow) free(mvcData->mvRow); - mvcData->currMaxX = -1; - } -} - - -/* {{-output"mvcGetCurrentMVs.txt"}} */ -/* - * - * mvcGetCurrentMVs - * - * Parameters: - * mvcData mvcData_t structure - * mvx - * mvy - * error error code - * - * Function: - * These functions return the motion vectors of the current - * blocks. - * - * Returns: - * Changes mvx, mvy and possibly error. - * - * Error codes: - * - * ERR_MVC_CURR_NOT_VALID if the motion vectors for the current - * macroblock do not exist - * - * ERR_MVC_CURR_NOT_CODED if the current macroblock was not coded - * - * ERR_MVC_CURR_INTRA if the current macroblock was coded in - * INTRA mode - * - */ -void mvcGetCurrentMVs(mvcData_t *mvcData, int *mvx, int *mvy, - int16 *error) -{ - int - xx2 = mvcData->currX << 1, - yx2 = mvcData->currY << 1; - mvRowItem_t - *mvRow1 = mvcData->mvRow1, - *mvRow2 = mvcData->mvRow2; - if (mvValid(mvRow1[xx2], yx2, mvcData->currTime) && - mvRow1[xx2].type == MVC_MB_INTER) { - mvx[0] = mvRow1[xx2].mvx; - mvx[1] = mvRow1[xx2 + 1].mvx; - mvx[2] = mvRow2[xx2].mvx; - mvx[3] = mvRow2[xx2 + 1].mvx; - mvy[0] = mvRow1[xx2].mvy; - mvy[1] = mvRow1[xx2 + 1].mvy; - mvy[2] = mvRow2[xx2].mvy; - mvy[3] = mvRow2[xx2 + 1].mvy; - } - else { - mvx[0] = mvx[1] = mvx[2] = mvx[3] = - mvy[0] = mvy[1] = mvy[2] = mvy[3] = 0; - if mvLegal(mvRow1[xx2], yx2, mvcData->currTime) { - if (mvRow1[xx2].type == MVC_MB_NOT_CODED) { - /*deb("mvcGetCurrentMVs: ERROR - macroblock not coded.\n");*/ - *error = ERR_MVC_CURR_NOT_CODED; - } - else if (mvRow1[xx2].type == MVC_MB_INTRA) { - /*deb("mvcGetCurrentMVs: ERROR - INTRA macroblock.\n");*/ - *error = ERR_MVC_CURR_INTRA; - } - else { - /*deb("mvcGetCurrentMVs: ERROR - macroblock not valid.\n");*/ - *error = ERR_MVC_CURR_NOT_VALID; - } - } - else { - /*deb("mvcGetCurrentMVs: ERROR - macroblock not valid.\n");*/ - *error = ERR_MVC_CURR_NOT_VALID; - } - } -} - -/* {{-output"mvcGetNeighbourMVs.txt"}} */ -/* - * - * mvcGetCurrNeighbourMVs - * mvcGetPrevNeighbourMVs - * - * Parameters: - * mvcData mvcData_t structure - * - * nmvx pointer to motion vector x component array - * nmvy pointer to motion vector y component array - * The size of the array must be 6. The indexing of the - * neighboring motion vectors goes like this: - * (X = the motion vector which is investigated, i.e. - * the last one decoded (mvcGetCurrNeighbourMVs) or - * the one before the last one (mvcGetPrevNeighbourMVs)) - * 2 3 - * 0 X X 4 - * 1 X X 5 - * It is suggested that the following defines are used - * instead of values: - * MVC_XM1_UP (0) - * MVC_XM1_DOWN (1) - * MVC_YM1_LEFT (2) - * MVC_YM1_RIGHT (3) - * MVC_XP1_UP (4) - * MVC_XP1_DOWN (5) - * (M stand for minus and P for plus) - * - * pmvx and pmvy are for mvcGetPrevNeighbourMVs only: - * pmvx pointer to the motion vector x component array of the - * previous macroblock - * pmvy pointer to the motion vector y component array of the - * previous macroblock - * The size of the array must be 4. The indexing is similar - * to normal block indexing inside a macroblock: - * 0 1 - * 2 3 - * - * error error code - * - * Function: - * These functions return the motion vectors of the neighboring - * blocks (on the left side, above or on the right side) of the - * macroblock which is investigated, i.e. - * - the last one decoded (mvcGetCurrNeighbourMVs) or - * - the one before the last one (mvcGetPrevNeighbourMVs)) - * - * The H.263 standard for Overlapped motion compensation for luminance - * (Annex F.3) is followed, that is: - * If one of the surrounding macroblocks was not coded, the - * corresponding remote motion vector is set to zero. If one of the - * surrounding (macro)blocks was coded in INTRA mode, the corresponding - * remote motion vector is replaced by the motion vector for the - * current block expect when in PB-frames mode. In this case (INTRA - * block in PB-frame mode), the INTRA block's motion vector is used. - * If the current block is at the border of the picture and therefore - * a surrounding block is not present, the corresponding remote motion - * vector is replaced by the current motion vector. - * - * mvcGetPrevNeighbourMVs also returns the motion vector for the - * previous macroblock. - * - * Returns: - * Changes nmvx, nmvy, pmvx, pmvy and possibly error. - * - * Error codes: - * ERR_MVC_NO_PREV_MB if the current MB has x coordinate 0 and - * mvcGetPrevNeighbourMVs is called - * - * ERR_MVC_NEIGHBOUR_NOT_VALID if one of the neighboring MVs is not - * valid, i.e. it has not been updated - * for this frame. The MV in nmvx and nmvy - * is set to zero. - * - * for mvcGetPrevNeighbourMVs only: - * ERR_MVC_PREV_NOT_VALID if the motion vectors for the previous - * macroblock do not exist - * - * ERR_MVC_PREV_NOT_CODED if the previous macroblock was not coded - * - * ERR_MVC_PREV_INTRA if the previous macroblock was coded in - * INTRA mode - * - * - * - * - * - * - * - */ - -void mvcGetCurrNeighbourMVs(mvcData_t *mvcData, int *nmvx, int *nmvy, - int16 *error) -/* {{-output"mvcGetNeighbourMVs.txt"}} */ -{ - mvRowItem_t - *mvRow1 = mvcData->mvRow1; - int xx2 = mvcData->currX << 1; - - mvcGetNeighbourMVs(mvcData, mvcData->currX, mvcData->currY, - mvcData->currTime, nmvx, nmvy, 0, error); - if (*error) { - if mvLegal(mvRow1[xx2], mvcData->currY << 1, mvcData->currTime) { - if (mvRow1[xx2].type == MVC_MB_NOT_CODED) { - /*deb("mvcGetPrevNeighbourMVs: ERROR - macroblock not coded.\n");*/ - *error = ERR_MVC_CURR_NOT_CODED; - } - else if (mvRow1[xx2].type == MVC_MB_INTRA) { - /*deb("mvcGetPrevNeighbourMVs: ERROR - INTRA macroblock.\n");*/ - *error = ERR_MVC_CURR_INTRA; - } - else { - /*deb("mvcGetPrevNeighbourMVs: ERROR - macroblock not valid.\n");*/ - *error = ERR_MVC_CURR_NOT_VALID; - } - } - else { - /*deb("mvcGetPrevNeighbourMVs: ERROR - macroblock not valid.\n");*/ - *error = ERR_MVC_CURR_NOT_VALID; - } - } -} - -/* {{-output"mvcGetPrevNeighbourMVs.txt"}} */ -void mvcGetPrevNeighbourMVs(mvcData_t *mvcData, int *nmvx, int *nmvy, - int *pmvx, int *pmvy, u_char *fourMVs, int16 *error) -/* {{-output"mvcGetPrevNeighbourMVs.txt"}} */ -{ - int - currX = mvcData->currX, - currY = mvcData->currY; - mvRowItem_t - *mvRow1 = mvcData->mvRow1, - *mvRow2 = mvcData->mvRow2; - - if (currX > 0) { - int xx2 = (currX - 1) << 1; - mvcGetNeighbourMVs(mvcData, currX - 1, currY, - mvcData->currTime, nmvx, nmvy, 1, error); - if (mvValid(mvRow1[xx2], currY << 1, mvcData->currTime) && - mvRow1[xx2].type == MVC_MB_INTER) { - pmvx[0] = mvRow1[xx2].mvx; - pmvx[1] = mvRow1[xx2 + 1].mvx; - pmvx[2] = mvRow2[xx2].mvx; - pmvx[3] = mvRow2[xx2 + 1].mvx; - pmvy[0] = mvRow1[xx2].mvy; - pmvy[1] = mvRow1[xx2 + 1].mvy; - pmvy[2] = mvRow2[xx2].mvy; - pmvy[3] = mvRow2[xx2 + 1].mvy; - *fourMVs = mvRow1[xx2].fourMVs; - } - else { - pmvx[0] = pmvx[1] = pmvx[2] = pmvx[3] = - pmvy[0] = pmvy[1] = pmvy[2] = pmvy[3] = 0; - *fourMVs = 0; - if mvLegal(mvRow1[xx2], currY << 1, mvcData->currTime) { - if (mvRow1[xx2].type == MVC_MB_NOT_CODED) { - /*deb("mvcGetPrevNeighbourMVs: ERROR - macroblock not coded.\n");*/ - *error = ERR_MVC_PREV_NOT_CODED; - } - else if (mvRow1[xx2].type == MVC_MB_INTRA) { - /*deb("mvcGetPrevNeighbourMVs: ERROR - INTRA macroblock.\n");*/ - *error = ERR_MVC_PREV_INTRA; - } - else { - /*deb("mvcGetPrevNeighbourMVs: ERROR - macroblock not valid.\n");*/ - *error = ERR_MVC_PREV_NOT_VALID; - } - } - else { - /*deb("mvcGetPrevNeighbourMVs: ERROR - macroblock not valid.\n");*/ - *error = ERR_MVC_PREV_NOT_VALID; - } - } - } - else { - /*deb("mvcGetPrevNeighbourMVs: ERROR - no previous macroblock.\n");*/ - *error = ERR_MVC_NO_PREV_MB; - } -} - - -/* {{-output"mvcGetPrevMVFsAndMVBs.txt"}} */ -/* - * - * mvcGetPrevMVFsAndMVBs - * - * Parameters: - * mvcData mvcData_t structure - * - * mvfx the resulting forward motion vector - * mvfy - * - * mvbx the resulting backward motion vector - * mvby - * - * fourMVs 1 if there is four motion vectors per macroblock - * 0 otherwise - * - * Function: - * This function gets the forward and backward motion vectors for the - * previous B macroblock. - * - * Returns: - * Changes *mvfx, *mvfy, *mvbx, *mvby and *fourMVs. - * - * Error codes: - * ERR_MVC_NO_PREV_MB if the current MB has x coordinate 0 and - * mvcGetPrevNeighbourMVs is called - * - * ERR_MVC_PREV_NOT_VALID if the motion vectors for the previous - * macroblock do not exist - * - * - */ - -void mvcGetPrevMVFsAndMVBs(mvcData_t *mvcData, int *mvfx, int *mvfy, - int *mvbx, int *mvby, u_char *fourMVs, int16 *error) -/* {{-output"mvcGetPrevMVFsAndMVBs.txt"}} */ -{ - mvBFBufItem_t - *mvFBuf = mvcData->mvFBufArray[mvcData->mvBFBufIndex ^ 1], - *mvBBuf = mvcData->mvBBufArray[mvcData->mvBFBufIndex ^ 1]; - int i; - - if (mvcData->currX > 0) { - if (mvBBuf[0].x == mvcData->currX - 1 && - mvValid(mvBBuf[0], mvcData->currY, mvcData->currTime)) { - *fourMVs = mvBBuf[0].fourMVs; - for (i = 0; i < 4; i++) { - mvfx[i] = mvFBuf[i].mvx; - mvfy[i] = mvFBuf[i].mvy; - mvbx[i] = mvBBuf[i].mvx; - mvby[i] = mvBBuf[i].mvy; - } - } - else { - /*deb("mvcGetPrevMVFsAndMVBs: ERROR - PREV_NOT_VALID.\n");*/ - *error = ERR_MVC_PREV_NOT_VALID; - } - } - else { - /*deb("mvcGetPrevMVFsAndMVBs: ERROR - NO_PREV_MB.\n");*/ - *error = ERR_MVC_NO_PREV_MB; - } -} - - -/* {{-output"mvcMarkMB.txt"}} */ -/* - * - * mvcMarkMBIntra - * mvcMarkMBNotCoded - * - * Parameters: - * mvcData mvcData_t structure - * x the x coordinate of the MB (0 .. maxX) - * y the y coordinate of the MB - * (0 .. macroblock rows in frame - 1) - * - * time a value which is related to the time when the current - * frame must be shown. This value should be unique - * among a relatively small group of consecutive frames. - * - * Function: - * These functions are used to mark that the macroblock is either - * intra coded or not coded at all. The information is used when - * deciding the neighboring motion vectors of a macroblock in - * mvcGetPrevNeighbourMVs and mvcGetCurrNeighbourMVs. - * Note that mvcMarkMBIntra should not be called in case of - * INTRA block in PB-frame mode. Instead mvcCalcMV should be used. - * - * Returns: - * Nothing - * - * Error codes: - * None - * - * - * - */ - -void mvcMarkMBIntra(mvcData_t *mvcData, int x, int y, int time) -/* {{-output"mvcMarkMB.txt"}} */ -{ - int - xx2 = x << 1, - yx2 = y << 1; - mvRowItem_t - *mvRow1, - *mvRow2; - - updateRowPointers(x, y, time); - mvRow1 = mvcData->mvRow1; - mvRow2 = mvcData->mvRow2; - mvStoreMB(mvRow1, mvRow2, xx2, yx2, MVD_INTRA, MVD_INTRA, time, MVC_MB_INTRA); -} - -/* {{-output"mvcMarkMBNotCoded.txt"}} */ -void mvcMarkMBNotCoded(mvcData_t *mvcData, int x, int y, int time) -/* {{-output"mvcMarkMBNotCoded.txt"}} */ -{ - int - xx2 = x << 1, - yx2 = y << 1; - mvRowItem_t - *mvRow1, - *mvRow2; - - updateRowPointers(x, y, time); - mvRow1 = mvcData->mvRow1; - mvRow2 = mvcData->mvRow2; - mvStoreMB(mvRow1, mvRow2, xx2, yx2, MVD_NOT_CODED, - MVD_NOT_CODED, time, MVC_MB_NOT_CODED); -} - - -/* {{-output"mvcStart.txt"}} */ -/* - * - * mvcStart - * - * Parameters: - * mvcData mvcData_t structure - * - * maxX the largest x coordinate possible for a macroblock - * If maxX if different from maxX when the function was - * last called, a new dynamic memory allocation is made. - * - * lumWidth Luminance width - * - * lumHeight Luminance height - * - * error error code - * - * Function: - * This function initialises motion vector buffers. It also allocates - * buffer memory if needed. - * One should call mvcStart in the beginning of each video sequence. - * - * Returns: - * Nothing - * - * Error codes: - * ERR_MVC_ALLOC1 dynamic allocation error - * ERR_MVC_MAX_X_ILLEGAL maxX <= 0 - * - * - * - * - */ - -void mvcStart(mvcData_t *mvcData, int maxX, int lumWidth, int lumHeight, int16 *error) -/* {{-output"mvcStart.txt"}} */ -{ - int - i, j, /* loop variables */ - rowSize; /* the number of items in prevMV?Row */ - - if (maxX < 0) { - *error = ERR_MVC_MAX_X_ILLEGAL; - return; - } - - rowSize = (maxX + 1) << 1; - - if (mvcData->currMaxX != maxX || mvcData->mvRow == NULL) { - /* frame size changed */ - - if (mvcData->mvRow) free(mvcData->mvRow); - - mvcData->mvRow = (mvRowItem_t *) vdcMalloc( - rowSize * 3 * sizeof(mvRowItem_t)); - if (mvcData->mvRow == NULL) { - deb("mvcStart: ERROR - memory allocation failed.\n"); - *error = ERR_MVC_ALLOC1; - return; - } - - mvcData->currMaxX = maxX; - } - - /* Horizontal motion vector range when PLUSTYPE present and UUI = 1 - See Table D.1/H.263 */ - if (mvcData->currLumHeight != lumHeight) - { - mvcData->currLumHeight = lumHeight; - if ((lumHeight>=4)&&(lumHeight<=288)) - { - mvcData->mvRangeLowY = -320; - mvcData->mvRangeHighY = 315; - } - else if ((lumHeight>=292)&&(lumHeight<=576)) - { - mvcData->mvRangeLowY = -640; - mvcData->mvRangeHighY = 635; - } - else if ((lumHeight>=580)&&(lumHeight<=1152)) - { - mvcData->mvRangeLowY = -1280; - mvcData->mvRangeHighY = 1275; - } - } - - /* Vertical motion vector range when PLUSTYPE present and UUI = 1 - See Table D.2/H.263 */ - if (mvcData->currLumWidth != lumWidth) - { - mvcData->currLumWidth = lumWidth; - if ((lumWidth>=4)&&(lumWidth<=352)) - { - mvcData->mvRangeLowX = -320; - mvcData->mvRangeHighX = 315; - } - else if ((lumWidth>=356)&&(lumWidth<=704)) - { - mvcData->mvRangeLowX = -640; - mvcData->mvRangeHighX = 635; - } - else if ((lumWidth>=708)&&(lumWidth<=1408)) - { - mvcData->mvRangeLowX = -1280; - mvcData->mvRangeHighX = 1275; - } - else if ((lumWidth>=1412)&&(lumWidth<=2048)) - { - mvcData->mvRangeLowX = -2560; - mvcData->mvRangeHighX = 2555; - } - } - /* Set time to be impossible */ - for (i = 0; i < 3 * rowSize; i++) { - mvcData->mvRow[i].time = -2; - } - - for (j = 0; j < 2; j++) { - for (i = 0; i < 4; i++) { - mvcData->mvFBufArray[j][i].time = -2; - mvcData->mvBBufArray[j][i].time = -2; - } - } - - mvcData->currX = -1; - mvcData->currY = -1; - mvcData->currTime = -2; - mvcData->mvRowIndex = 0; - mvcData->mvBFBufIndex = 0; - mvcData->prevPredMode = 3; -} - - -/* Local functions */ - - - -/* - * - * mvcGetNeighbourMVs - * - * Parameters: - * mvcData mvcData_t structure - * x - * y macroblock coordinates - * time time reference - * nmvx pointer to motion vector x component array - * nmvy pointer to motion vector y component array - * See mvcGetCurrNeighbourMVs/mvcGetPrevNeighbourMVs for - * description. - * prevFlag If this flag is set, the previous border values should - * be used. - * error error code - * - * Function: - * This function return the motion vectors of the neighboring - * blocks (on the left side, above or on the right side) of the - * macroblock which is investigated. mvcGetNeighbourMVs is used - * by mvcGetCurrNeighbourMVs and mvcGetPrevNeighbourMVs. - * See also the functional description for these functions. - * - * Returns: - * Changes nmvx and nmvy and possibly error. - * - * Error codes: - * ERR_MVC_NEIGHBOUR_NOT_VALID if one of the neighboring MVs is not - * valid, i.e. it has not been updated - * for this frame. The MV in nmvx and nmvy - * is set to zero. - * - * - */ - -static void mvcGetNeighbourMVs(mvcData_t *mvcData, int x, int y, int time, - int *nmvx, int *nmvy, int prevFlag, int16 *error) -{ - int - xx2 = x << 1, - yx2 = y << 1, - xtmp, - ytmp, - rightOfBorder, - downOfBorder, - leftOfBorder; - mvRowItem_t - *mvRow0 = mvcData->mvRow0, - *mvRow1 = mvcData->mvRow1, - *mvRow2 = mvcData->mvRow2; - - if (prevFlag) { - rightOfBorder = mvcData->rightOfBorderPrev; - downOfBorder = (mvcData->fSS)?mvcData->downOfBorderPrev:(y==0); - leftOfBorder = 0; - } - else { - rightOfBorder = mvcData->rightOfBorder; - downOfBorder = (mvcData->fSS)?mvcData->downOfBorder:(y==0); - leftOfBorder = (mvcData->fSS)?(x == mvcData->currMaxX)||(mvcData->leftOfBorder):(x == mvcData->currMaxX); - } - //if (x > 0) { - if (!rightOfBorder) { - xtmp = xx2 - 1; - mvcCheckAndSet(mvRow1, xtmp, yx2, time, MVC_XM1_UP, nmvx, nmvy, - mvRow1, xx2, yx2, error); - mvcCheckAndSet(mvRow2, xtmp, yx2 + 1, time, MVC_XM1_DOWN, nmvx, nmvy, - mvRow2, xx2, yx2 + 1, error); - } - else { - mvcSetToCurrent(mvRow1, xx2, yx2, time, MVC_XM1_UP, nmvx, nmvy, - error); - mvcSetToCurrent(mvRow2, xx2, yx2 + 1, time, MVC_XM1_DOWN, nmvx, nmvy, - error); - } - - //if (y > 0) { - if (!downOfBorder) { - ytmp = yx2 - 1; - mvcCheckAndSet(mvRow0, xx2, ytmp, time, MVC_YM1_LEFT, nmvx, nmvy, - mvRow1, xx2, yx2, error); - mvcCheckAndSet(mvRow0, xx2 + 1, ytmp, time, MVC_YM1_RIGHT, nmvx, nmvy, - mvRow1, xx2 + 1, yx2, error); - } - else { - mvcSetToCurrent(mvRow1, xx2, yx2, time, MVC_YM1_LEFT, nmvx, nmvy, - error); - mvcSetToCurrent(mvRow1, xx2 + 1, yx2, time, MVC_YM1_RIGHT, nmvx, nmvy, - error); - } - - //if (x < mvcData->currMaxX) { - if (!leftOfBorder) { - xtmp = xx2 + 2; - mvcCheckAndSet(mvRow1, xtmp, yx2, time, MVC_XP1_UP, nmvx, nmvy, - mvRow1, xtmp - 1, yx2, error); - mvcCheckAndSet(mvRow2, xtmp, yx2 + 1, time, MVC_XP1_DOWN, nmvx, nmvy, - mvRow2, xtmp -1, yx2 + 1, error); - } - else { - xtmp = xx2 + 1; - mvcSetToCurrent(mvRow1, xtmp, yx2, time, MVC_XP1_UP, nmvx, nmvy, - error); - mvcSetToCurrent(mvRow2, xtmp, yx2 + 1, time, MVC_XP1_DOWN, nmvx, nmvy, - error); - } -} - - - -/* - * mvcCheckAndSet - * - * Parameters: - * mvRowPtr Source row item pointer - * xind x index of the source block - * yind y index of the source block - * timeref time reference - * nind index to motion vector arrays ( x and y) - * nmvx pointer to motion vector x component array - * nmvy pointer to motion vector y component array - * cmvRowPtr Target row item pointer - * cxind x index of the target block - * cyind y index of the target block - * error error code - * - * Function: - * Sets the correct value for neighboring motion vector - * used from: mvcGetNeighbourMVs - * - * Returns: - * Nothing - * - * Error codes: - * - */ - -__inline static void mvcCheckAndSet( - mvRowItem_t *mvRowPtr, int xind, int yind, int timeref, int nind, - int *nmvx, int *nmvy, mvRowItem_t *cmvRowPtr, int cxind, int cyind, - int16 *error) -{ - - if (mvLegal(mvRowPtr[xind], yind, timeref)) { - if (mvRowPtr[xind].mvx >= MVD_UMIN_V2) { - nmvx[nind] = mvRowPtr[xind].mvx; - nmvy[nind] = mvRowPtr[xind].mvy; - } - else if (mvRowPtr[xind].mvx == MVD_INTRA) { - if (mvLegal(cmvRowPtr[cxind], cyind, timeref)) { - if (mvValid(cmvRowPtr[cxind], cyind, timeref)) { - nmvx[nind] = cmvRowPtr[cxind].mvx; - nmvy[nind] = cmvRowPtr[cxind].mvy; - } - else /* Not coded macroblock */ - nmvx[nind] = nmvy[nind] = 0; - } - else { - deb("mvcCheckAndSet: ERROR - neighbour not valid.\n"); - *error = ERR_MVC_NEIGHBOUR_NOT_VALID; - nmvx[nind] = nmvy[nind] = 0; - } - } - else { /* MVD_NOT_CODED */ - nmvx[nind] = nmvy[nind] = 0; - } - } - else { - deb("mvcCheckAndSet: ERROR - neighbour not valid.\n"); - *error = ERR_MVC_NEIGHBOUR_NOT_VALID; - nmvx[nind] = nmvy[nind] = 0; - } -} - -/* - * mvcSetToCurrent - * - * Parameters: - * mvRowPtr Current row item pointer - * xind x index of the block - * yind y index of the block - * timeref time reference - * nind index to motion vector arrays ( x and y) - * nmvx pointer to motion vector x component array - * nmvy pointer to motion vector y component array - * error error code - * - * Function: - * Sets the correct value for neighboring motion vector using current - * motion vector, used in cases of border used from: mvcGetNeighbourMVs - * - * Returns: - * Nothing - * - * Error codes: - * - * History - */ - -__inline static void mvcSetToCurrent( - mvRowItem_t *mvRowPtr, int xind, int yind, int timeref, int nind, - int *nmvx, int *nmvy, int16 *error) -{ - if (mvValid(mvRowPtr[xind], yind, timeref)) { - nmvx[nind] = mvRowPtr[xind].mvx; - nmvy[nind] = mvRowPtr[xind].mvy; - } - else { - deb("mvcSetToCurrent: ERROR - neighbour not valid.\n"); - *error = ERR_MVC_NEIGHBOUR_NOT_VALID; - nmvx[nind] = nmvy[nind] = 0; - } -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vdefrt.cpp --- a/videoeditorengine/h263decoder/src/vdefrt.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,666 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Frame type -dependent settings. -* -*/ - - - - -/* - * Includes - */ - - -#include "h263dConfig.h" - -#include "vdefrt.h" -#include "vde.h" -#include "h263dapi.h" - - - -/* - * Defines - */ - -/* The following two definitions are used to indicate that all image - widths/heights belong to the scope of the correponding setting. */ -#define VDEFRT_ALL_WIDTHS 0 -#define VDEFRT_ALL_HEIGHTS 0 - - -/* - * Structures and typedefs - */ - -/* Size list item */ -typedef struct { - LST_ITEM_SKELETON - - int width; /* image width associated with this item */ - int height; /* image height associated with this item */ - u_char fSnapshot; /* snapshot flag associated with this item */ - - u_int32 dataHandle; /* handle to generic data */ - void (*dealloc) (void *); /* function for dataHandle dealloction */ -} vdeFrtSizeListItem_t; - -/* NOTE: Currently the snapshot scope must be used together with the frame - size scope. It is not possible to store or retrieve an item based - on the snapshot flag only. */ - -/* - * Local function prototypes - */ - -static int vdeFrtRemoveAll(vdeFrtStore_t *store); - -static int vdeFrtSeekSize(lst_t *sizeList, int width, int height, - vdeFrtSizeListItem_t **seekHit); - -static int vdeFrtSeekItem(lst_t *sizeList, int width, int height, - u_char fSnapshot, vdeFrtSizeListItem_t **seekHit); - - -/* - * Global functions - */ - -/* {{-output"vdeFrtClose.txt"}} */ -/* - * vdeFrtClose - * - * Parameters: - * store a pointer to a frame type store - * - * Function: - * This function closes the given frame type store. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeFrtClose(vdeFrtStore_t *store) -/* {{-output"vdeFrtClose.txt"}} */ -{ - int retValue; - - retValue = vdeFrtRemoveAll(store); - if (retValue < 0) - return retValue; - - if (lstClose(&store->sizeList) < 0) - return VDE_ERROR; - - return VDE_OK; -} - - -/* {{-output"vdeFrtGetItem.txt"}} */ -/* - * vdeFrtGetItem - * - * Parameters: - * store a pointer to a frame type store - * frameType specifies the frame type for the wanted item - * item used to return an item from the store - * - * Function: - * This function fetches the item from the given store which corresponds - * to the given frame type. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeFrtGetItem(vdeFrtStore_t *store, h263dFrameType_t *frameType, u_int32 *item) -/* {{-output"vdeFrtGetItem.txt"}} */ -{ - switch (frameType->scope) { - case H263D_FTYPE_NDEF: - case H263D_FTYPE_SIZE + H263D_FTYPE_SNAPSHOT: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - /* seek item with matching size and snapshot flag */ - retValue = vdeFrtSeekItem(&store->sizeList, frameType->width, - frameType->height, frameType->fSnapshot, &listItem); - if (retValue < 0) - return retValue; - - if (listItem) - *item = listItem->dataHandle; - - else { - if (lstTail(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - /* If a default item exists */ - if (listItem && - listItem->width == VDEFRT_ALL_WIDTHS && - listItem->height == VDEFRT_ALL_HEIGHTS) - *item = listItem->dataHandle; - - else { - *item = 0; - return VDE_OK_NOT_AVAILABLE; - } - } - - return VDE_OK; - - } - - case H263D_FTYPE_SIZE: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - retValue = vdeFrtSeekSize(&store->sizeList, frameType->width, - frameType->height, &listItem); - if (retValue < 0) - return retValue; - - if (listItem) - *item = listItem->dataHandle; - - else { - if (lstTail(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - /* If a default item exists */ - if (listItem && - listItem->width == VDEFRT_ALL_WIDTHS && - listItem->height == VDEFRT_ALL_HEIGHTS) - *item = listItem->dataHandle; - - else { - *item = 0; - return VDE_OK_NOT_AVAILABLE; - } - } - - return VDE_OK; - } - - case H263D_FTYPE_DEF: - { - vdeFrtSizeListItem_t *tailItem; - - if (lstTail(&store->sizeList, (void **) &tailItem) < 0) - return VDE_ERROR; - - /* If a default item exists */ - if (tailItem->width == VDEFRT_ALL_WIDTHS && - tailItem->height == VDEFRT_ALL_HEIGHTS) { - *item = tailItem->dataHandle; - return VDE_OK; - } - - else { - *item = 0; - return VDE_OK_NOT_AVAILABLE; - } - } - - default: - return VDE_ERROR; - } -} - - -/* {{-output"vdeFrtOpen.txt"}} */ -/* - * vdeFrtOpen - * - * Parameters: - * store a pointer to a frame type store - * - * Function: - * This function initializes the given frame type store. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeFrtOpen(vdeFrtStore_t *store) -/* {{-output"vdeFrtOpen.txt"}} */ -{ - if (lstOpen(&store->sizeList) < 0) - return VDE_ERROR; - - return VDE_OK; -} - - -/* {{-output"vdeFrtPutItem.txt"}} */ -/* - * vdeFrtPutItem - * - * Parameters: - * store a pointer to a frame type store - * frameType specifies the frame type for the given item - * item a data handle to store - * removeItem a function which is used to deallocate - * the data handle when it is removed from - * the store. NULL may be given if no - * deallocation is needed. - * - * Function: - * This function puts a data handle to the frame type store. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeFrtPutItem(vdeFrtStore_t *store, h263dFrameType_t *frameType, - u_int32 item, void (*removeItem) (void *)) -/* {{-output"vdeFrtPutItem.txt"}} */ -{ - switch (frameType->scope) { - case H263D_FTYPE_ALL: - { - int retValue; - vdeFrtSizeListItem_t *newItem; - - retValue = vdeFrtRemoveAll(store); - if (retValue < 0) - return retValue; - - newItem = (vdeFrtSizeListItem_t *) - vdeMalloc(sizeof(vdeFrtSizeListItem_t)); - if (!newItem) - return VDE_ERROR; - - newItem->width = VDEFRT_ALL_WIDTHS; - newItem->height = VDEFRT_ALL_HEIGHTS; - newItem->fSnapshot = 0; - newItem->dataHandle = item; - newItem->dealloc = removeItem; - - if (lstAdd(&store->sizeList, newItem) < 0) { - vdeDealloc(newItem); - return VDE_ERROR; - } - - return VDE_OK; - } - - case H263D_FTYPE_DEF: - { - vdeFrtSizeListItem_t *tailItem; - - if (lstTail(&store->sizeList, (void **) &tailItem) < 0) - return VDE_ERROR; - - /* If a default item exists */ - if (tailItem->width == VDEFRT_ALL_WIDTHS && - tailItem->height == VDEFRT_ALL_HEIGHTS) { - - if (tailItem->dealloc) - tailItem->dealloc((void *) tailItem->dataHandle); - - /* Overwrite its data handle */ - tailItem->dataHandle = item; - } - - else { - vdeFrtSizeListItem_t *newItem; - - newItem = (vdeFrtSizeListItem_t *) - vdeMalloc(sizeof(vdeFrtSizeListItem_t)); - if (!newItem) - return VDE_ERROR; - - newItem->width = VDEFRT_ALL_WIDTHS; - newItem->height = VDEFRT_ALL_HEIGHTS; - newItem->fSnapshot = 0; - newItem->dataHandle = item; - newItem->dealloc = removeItem; - - if (lstEnd(&store->sizeList) < 0) { - vdeDealloc(newItem); - return VDE_ERROR; - } - - if (lstAdd(&store->sizeList, newItem) < 0) { - vdeDealloc(newItem); - return VDE_ERROR; - } - } - - return VDE_OK; - } - - case H263D_FTYPE_SIZE: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - retValue = vdeFrtSeekSize(&store->sizeList, frameType->width, - frameType->height, &listItem); - if (retValue < 0) - return retValue; - - /* If a setting with the same size already exists */ - if (listItem) { - - if (listItem->dealloc) - listItem->dealloc((void *) listItem->dataHandle); - - /* Overwrite its data handle */ - listItem->dataHandle = item; - } - - else { - vdeFrtSizeListItem_t *newItem; - - if (lstHead(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - newItem = (vdeFrtSizeListItem_t *) - vdeMalloc(sizeof(vdeFrtSizeListItem_t)); - if (!newItem) - return VDE_ERROR; - - newItem->width = frameType->width; - newItem->height = frameType->height; - newItem->fSnapshot = 0; - newItem->dataHandle = item; - newItem->dealloc = removeItem; - - if (lstAdd(&store->sizeList, newItem) < 0) { - vdeDealloc(newItem); - return VDE_ERROR; - } - } - - return VDE_OK; - } - - case H263D_FTYPE_SIZE + H263D_FTYPE_SNAPSHOT: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - retValue = vdeFrtSeekItem(&store->sizeList, frameType->width, - frameType->height, frameType->fSnapshot, &listItem); - if (retValue < 0) - return retValue; - - /* If a setting with the same parameters already exists */ - if (listItem) { - - if (listItem->dealloc) - listItem->dealloc((void *) listItem->dataHandle); - - /* Overwrite its data handle */ - listItem->dataHandle = item; - } - - else { - vdeFrtSizeListItem_t *newItem; - - if (lstHead(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - newItem = (vdeFrtSizeListItem_t *) - vdeMalloc(sizeof(vdeFrtSizeListItem_t)); - if (!newItem) - return VDE_ERROR; - - newItem->width = frameType->width; - newItem->height = frameType->height; - newItem->fSnapshot = frameType->fSnapshot; - newItem->dataHandle = item; - newItem->dealloc = removeItem; - - if (lstAdd(&store->sizeList, newItem) < 0) { - vdeDealloc(newItem); - return VDE_ERROR; - } - } - - return VDE_OK; - - } - default: - return VDE_ERROR; - } -} - - -/* {{-output"vdeFrtRemoveItem.txt"}} */ -/* - * vdeFrtRemoveItem - * - * Parameters: - * store a pointer to a frame type store - * frameType specifies the frame type for the item to remove - * - * Function: - * This function removes an entry from the given frame type store. - * The entry corresponds to the given frame type. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeFrtRemoveItem(vdeFrtStore_t *store, h263dFrameType_t *frameType) -/* {{-output"vdeFrtRemoveItem.txt"}} */ -{ - switch (frameType->scope) { - case H263D_FTYPE_ALL: - { - int retValue; - - retValue = vdeFrtRemoveAll(store); - if (retValue < 0) - return retValue; - - return VDE_OK; - } - - case H263D_FTYPE_DEF: - { - vdeFrtSizeListItem_t *tailItem; - - if (lstTail(&store->sizeList, (void **) &tailItem) < 0) - return VDE_ERROR; - - /* If a default item exists */ - if (tailItem && tailItem->width == VDEFRT_ALL_WIDTHS && - tailItem->height == VDEFRT_ALL_HEIGHTS) { - - /* Remove it */ - if (lstRemove(&store->sizeList, (void **) &tailItem) < 0) - return VDE_ERROR; - - if (tailItem->dealloc) - tailItem->dealloc((void *) tailItem->dataHandle); - - vdeDealloc(tailItem); - } - - return VDE_OK; - } - - case H263D_FTYPE_SIZE: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - retValue = vdeFrtSeekSize(&store->sizeList, frameType->width, - frameType->height, &listItem); - if (retValue < 0) - return retValue; - - /* If an item with the same size already exists */ - if (listItem) { - - /* Remove it */ - if (lstRemove(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - if (listItem->dealloc) - listItem->dealloc((void *) listItem->dataHandle); - - vdeDealloc(listItem); - } - - return VDE_OK; - } - - case H263D_FTYPE_SIZE + H263D_FTYPE_SNAPSHOT: - { - int retValue; - vdeFrtSizeListItem_t *listItem; - - retValue = vdeFrtSeekItem(&store->sizeList, frameType->width, - frameType->height, frameType->fSnapshot, &listItem); - if (retValue < 0) - return retValue; - - /* If an item with the same parameters already exists */ - if (listItem) { - - /* Remove it */ - if (lstRemove(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - if (listItem->dealloc) - listItem->dealloc((void *) listItem->dataHandle); - - vdeDealloc(listItem); - } - return VDE_OK; - - } - - default: - return VDE_ERROR; - } -} - - -/* - * Local functions - */ - -/* - * vdeFrtRemoveAll - * This function removes all items from the given store. - */ - -static int vdeFrtRemoveAll(vdeFrtStore_t *store) -{ - vdeFrtSizeListItem_t *listItem; - - if (lstHead(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - do { - if (lstRemove(&store->sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - if (listItem) { - if (listItem->dealloc) - listItem->dealloc((void *) listItem->dataHandle); - vdeDealloc(listItem); - } - } while (listItem); - - return VDE_OK; -} - - -/* - * vdeFrtSeekSize - * This function seeks for the given width and height from the given - * size list. It returns the matching size list item (if there is one). - */ - -static int vdeFrtSeekSize(lst_t *sizeList, int width, int height, - vdeFrtSizeListItem_t **seekHit) -{ - vdeFrtSizeListItem_t *listItem; - - *seekHit = NULL; - - if (lstHead(sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - while (listItem) { - if (lstNext(sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - if (listItem && listItem->width == width && listItem->height == height) { - *seekHit = listItem; - break; - } - } - - return VDE_OK; -} - -/* - * vdeFrtSeekItem - * This function seeks for an item with the given parameters from the - * size list. It returns the matching list item (if there is one). - */ - -static int vdeFrtSeekItem(lst_t *sizeList, int width, int height, - u_char fSnapshot, vdeFrtSizeListItem_t **seekHit) -{ - vdeFrtSizeListItem_t *listItem; - - *seekHit = NULL; - - if (lstHead(sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - - while (listItem) { - - if (listItem && listItem->width == width && listItem->height == height && - listItem->fSnapshot == fSnapshot) { - *seekHit = listItem; - break; - } - if (lstNext(sizeList, (void **) &listItem) < 0) - return VDE_ERROR; - } - - return VDE_OK; -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vdeimb.cpp --- a/videoeditorengine/h263decoder/src/vdeimb.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Individual image buffer handling. -* -*/ - - -/* - * Includes - */ - - -#include "h263dConfig.h" -#include "vdeimb.h" - -#include "vde.h" - - -/* - * Global functions - */ - -/* {{-output"vdeImbAlloc.txt"}} */ -/* - * vdeImbAlloc - * - * Parameters: - * width width of the luminance image in pixels - * height height of the luminance image in pixels - * - * Function: - * This function allocates and initializes a new image buffer of - * requested size. - * - * Returns: - * a pointer to the created image buffer, - * or NULL if the function failed - * - * - */ - -vdeImb_t *vdeImbAlloc(int width, int height, int fYuvNeeded) -/* {{-output"vdeImbAlloc.txt"}} */ -{ - vdeImb_t *imb; - - imb = (vdeImb_t *) vdeMalloc(sizeof(vdeImb_t)); - if (imb == NULL) - return NULL; - memset(imb, 0, sizeof(vdeImb_t)); - - - imb->drawItem = renDriAlloc(width, height, fYuvNeeded); - if (imb->drawItem == NULL) - goto errRenDriAlloc; - { - int numMBsInPicture; - - numMBsInPicture = width * height / 256; - - imb->yQuantParams = (int *) vdeMalloc(numMBsInPicture * sizeof(int)); - if (imb->yQuantParams == NULL) - goto errYQuantParams; - - imb->uvQuantParams = (int *) vdeMalloc(numMBsInPicture * sizeof(int)); - if (imb->uvQuantParams == NULL) - goto errUVQuantParams; - - } - - return imb; - - /* Error situations: release everything in reverse order */ - -errUVQuantParams: - - vdeDealloc(imb->yQuantParams); -errYQuantParams: - - renDriFree(imb->drawItem); - -errRenDriAlloc: - - vdeDealloc(imb); - - return NULL; -} - - -/* {{-output"vdeImbCopyParameters.txt"}} */ -/* - * vdeImbCopyParameters - * - * Parameters: - * dstImb destination image buffer - * srcImb source image buffer - * - * Function: - * This function copies the srcImb structure to the dstImb structure. - * All other parameters are copied but the actual picture contents. - * The function handles nested structures correctly. - * - * Returns: - * (See vde.h for descriptions of return values.) - * VDE_OK - * VDE_ERROR - * - * - */ - -int vdeImbCopyParameters(vdeImb_t *dstImb, const vdeImb_t *srcImb) -/* {{-output"vdeImbCopyParameters.txt"}} */ -{ - /* drawItem */ - renDriCopyParameters(dstImb->drawItem, srcImb->drawItem); - - dstImb->fReferenced = srcImb->fReferenced; - dstImb->tr = srcImb->tr; - dstImb->trRef = srcImb->trRef; - - { - int numOfMBs = renDriNumOfMBs(srcImb->drawItem); - - /* yQuantParams */ - memcpy( - dstImb->yQuantParams, - srcImb->yQuantParams, - numOfMBs * sizeof(int)); - - /* uvQuantParams */ - memcpy( - dstImb->uvQuantParams, - srcImb->uvQuantParams, - numOfMBs * sizeof(int)); - - } - - return VDE_OK; -} - - -/* {{-output"vdeImbDealloc.txt"}} */ -/* - * vdeImbDealloc - * - * Parameters: - * imb a pointer to image buffer to destroy - * - * Function: - * This function deallocates the given image buffer. - * - * Returns: - * Nothing - * - * - */ - -void vdeImbDealloc(vdeImb_t *imb) -/* {{-output"vdeImbDealloc.txt"}} */ -{ - if (!imb) - return; - - if (imb->drawItem) - renDriFree(imb->drawItem); - - vdeDealloc(imb->yQuantParams); - vdeDealloc(imb->uvQuantParams); - - vdeDealloc(imb); -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vdeims.cpp --- a/videoeditorengine/h263decoder/src/vdeims.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,643 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Frame memory organization module. -* -*/ - - - - -/* - * Includes - */ - - -#include "h263dConfig.h" -#include "vdeims.h" - -#include "debug.h" -#include "vde.h" -#include "vdeimb.h" - - -/* - * Structs and typedefs - */ - -/* Structure for a single "Free" store */ -typedef struct { - LST_ITEM_SKELETON - - lifo_t freeStore; /* a stack of free image store items */ - int lumWidth; /* width of the items in freeStore */ - int lumHeight; /* height of the items in freeStore - (in luminance pixels) */ - int fYuvNeeded; -} vdeImsFreeStore_t; - - -/* - * Local function prototypes - */ - -static vdeImsItem_t *vdeImsAllocItem(int lumWidth, int lumHeight, int fYuvNeeded); - -static vdeImsFreeStore_t *vdeImsAllocFreeStore(int numFreeItems, - int lumWidth, int lumHeight, int fYuvNeeded); - -static int vdeImsDeallocFreeStore(vdeImsFreeStore_t *store); - -static int vdeImsGetFreeStore(lst_t *freeStoreList, int lumWidth, int lumHeight, - vdeImsFreeStore_t **freeStore); - - -/* - * Global functions - */ - -/* {{-output"vdeImsChangeReference.txt"}} */ -/* - * vdeImsChangeReference - * - * - * Parameters: - * store a pointer to an image store - * newItem new reference frame to replace a corresponding - * reference frame in the image store - * - * Function: - * This function is used to change a reference frame in the image store. - * The function is passed a new reference frame. Then, the function - * searches for a reference frame with the same TR as the passed frame - * (from the image store). If such a frame is found, the function - * takes the old referece frame away from the reference store and puts - * it to the free or idle store depending on whether the frame has already - * been displayed or not. The new reference frame is placed into - * the reference store. If a corresponding reference frame is not found - * from the image store, the function returns VDE_OK_NOT_AVAILABLE. - * - * This function is intended to be used together with error concealment - * methods capable of repairing past frames. - * - * Returns: - * VDE_OK if the function was successful - * VDE_OK_NOT_AVAILABLE the function behaved as expected but - * a requested frame was not found - * VDE_ERROR if an error occured - * - * - */ - -int vdeImsChangeReference(vdeIms_t *store, vdeImsItem_t *newItem) -/* {{-output"vdeImsChangeReference.txt"}} */ -{ - vdeImsItem_t *oldItem; /* old reference frame */ - - /* Note: This case may not be ever used, but it is supported for - consistency */ - - /* If the TRs of the reference frames do not match */ - if (store->refFrame->imb->tr == newItem->imb->tr) - /* Return with not found indication */ - return VDE_OK_NOT_AVAILABLE; - - /* Store the new reference to the image store */ - oldItem = store->refFrame; - store->refFrame = newItem; - - /* Add the old reference to the "Free" store */ - if (vdeImsPutFree(store, oldItem) < 0) - return VDE_ERROR; - - return VDE_OK; -} - - -/* {{-output"vdeImsClose.txt"}} */ -/* - * vdeImsClose - * - * - * Parameters: - * store a pointer to an image store - * - * Function: - * This function closes the given image store. - * Notice that the memory pointed by the given image store pointer is not - * deallocated but rather it is assumed that this memory is either static - * or externally deallocated. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeImsClose(vdeIms_t *store) -/* {{-output"vdeImsClose.txt"}} */ -{ - vdeImb_t *imb; - vdeImsFreeStore_t *freeStore; - vdeImsItem_t *pItem; - - /* freeStoreList */ - if (lstHead(&store->freeStoreList, (void **) &freeStore) < 0) - return VDE_ERROR; - - do { - if (lstRemove(&store->freeStoreList, (void **) &freeStore) < 0) - return VDE_ERROR; - - if (freeStore) { - if (vdeImsDeallocFreeStore(freeStore) < 0) - return VDE_ERROR; - } - } while (freeStore); - - if (lstClose(&store->freeStoreList) < 0) - return VDE_ERROR; - - if (store->refFrame) { - vdeImbDealloc(store->refFrame->imb); - vdeDealloc(store->refFrame); - } - - /* idleStore */ - if (lstHead(&store->idleStore, (void **) &pItem) < 0) - return VDE_ERROR; - - do { - if (lstRemove(&store->idleStore, (void **) &pItem) < 0) - return VDE_ERROR; - - if (pItem) { - imb = pItem->imb; - vdeDealloc(pItem); - vdeImbDealloc(imb); - } - } while (pItem); - - if (lstClose(&store->idleStore) < 0) - return VDE_ERROR; - - return VDE_OK; -} - - - -/* {{-output"vdeImsGetFree.txt"}} */ -/* - * vdeImsGetFree - * - * - * Parameters: - * store a pointer to an image store - * lumWidth width of the luminance image (in pixels) - * lumHeight height of the luminance image (in pixels) - * item a free image store item - * - * Function: - * This function is used to get a free frame memory (of requested size). - * If a free frame memory (image store item) does not exist, a new one - * is allocated and initialized. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeImsGetFree(vdeIms_t *store, int lumWidth, int lumHeight, - vdeImsItem_t **item) -/* {{-output"vdeImsGetFree.txt"}} */ -{ - vdeImsFreeStore_t *freeStore, *tmpFreeStore; - vdeImsItem_t *pItem; - - if (vdeImsGetFreeStore(&store->freeStoreList, lumWidth, lumHeight, - &freeStore) < 0) - return VDE_ERROR; - - if (freeStore) { - if (lifoGet(&freeStore->freeStore, (void **) &pItem) < 0) - return VDE_ERROR; - if (pItem) { - *item = pItem; - return VDE_OK; - } - else { - *item = vdeImsAllocItem(lumWidth, lumHeight, store->fYuvNeeded); - return VDE_OK; - } - } - - else { - freeStore = vdeImsAllocFreeStore(0, lumWidth, lumHeight, store->fYuvNeeded); - if (freeStore == NULL) - return VDE_ERROR; - - if (lstHead(&store->freeStoreList, (void **) &tmpFreeStore) < 0) { - vdeImsDeallocFreeStore(freeStore); - return VDE_ERROR; - } - - if (lstAdd(&store->freeStoreList, freeStore) < 0) { - vdeImsDeallocFreeStore(freeStore); - return VDE_ERROR; - } - - *item = vdeImsAllocItem(lumWidth, lumHeight, store->fYuvNeeded); - return VDE_OK; - } -} - - -/* {{-output"vdeImsGetReference.txt"}} */ -/* - * vdeImsGetReference - * - * - * Parameters: - * store a pointer to an image store - * mode VDEIMS_REF_LATEST = latest reference frame - * VDEIMS_REF_OLDEST = oldest reference frame - * VDEIMS_REF_TR = frame specified by tr, - * see also the explation for - * VDEIMS_GET_CLOSEST_REFERENCE - * in the module description at the beginning - * of this file - * tr if mode is equal to VDEIMS_REF_TR, - * this parameter specifies the TR (temporal - * reference) of the reference frame - * item used to return the specified reference frame - * - * Function: - * This function is used to get a reference frame memory (image store item). - * One can either query for the latest reference frame or for a frame - * having a certain temporal reference value. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeImsGetReference(vdeIms_t *store, int mode, int tr, vdeImsItem_t **item) -/* {{-output"vdeImsGetReference.txt"}} */ -{ - vdeAssert( - mode == VDEIMS_REF_LATEST || - mode == VDEIMS_REF_OLDEST || - mode == VDEIMS_REF_TR); - - switch (mode) { - case VDEIMS_REF_LATEST: - *item = store->refFrame; - break; - - case VDEIMS_REF_OLDEST: - *item = store->refFrame; - break; - - case VDEIMS_REF_TR: - /* This section of code returns the reference frame having the same - TR as requested. If there is no such TR, the code returns a NULL - frame. */ - if (store->refFrame->imb->tr == tr) - *item = store->refFrame; - else - *item = NULL; - break; - } - - return VDE_OK; -} - - -/* {{-output"vdeImsOpen.txt"}} */ -/* - * vdeImsOpen - * - * - * Parameters: - * store a pointer to an image store - * numFreeItems number of initial free image store items - * lumWidth width of the luminance image (in pixels) - * for free items - * lumHeight height of the luminance image (in pixels) - * for free items - * - * Function: - * This function initializes the given image store. The function allocates - * and initializes a given number of free image store items of given size. - * The Reference image store is initialized to carry multiple image store - * items, if the Reference Picture Selection mode is indicated. Otherwise, - * the Reference image store carries only one image store item at a time. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeImsOpen(vdeIms_t *store, int /*numFreeItems*/, int /*lumWidth*/, int /*lumHeight*/) -{ - vdeImsFreeStore_t *freeStore; - - store->refFrame = 0; - - if (lstOpen(&store->idleStore) < 0) - goto errIdleStore; - -// not ready to open freeStore yet - freeStore = NULL; - - if (lstOpen(&store->freeStoreList) < 0) - goto errOpenFreeStoreList; - - - return VDE_OK; - - /* Error cases */ - errOpenFreeStoreList: - - vdeImsDeallocFreeStore(freeStore); - - lstClose(&store->idleStore); - errIdleStore: - - return VDE_ERROR; -} - -void vdeImsSetYUVNeed(vdeIms_t *store, int fYuvNeeded) -{ - store->fYuvNeeded = fYuvNeeded; -} - -/* {{-output"vdeImsPut.txt"}} */ -/* - * vdeImsPut - * - * - * Parameters: - * store a pointer to an image store - * item image store item to put into the image store - * - * Function: - * This function is used to return a filled image store item into - * the image store. If the item is possibly referenced later on, it is - * stored into the Reference store. If the item is not referenced but - * it is going to be displayed, it is put into the Idle store. - * Otherwise, the item is put into the Free store. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeImsPut(vdeIms_t *store, vdeImsItem_t *item) -/* {{-output"vdeImsPut.txt"}} */ -{ - vdeImb_t *imb; - - imb = item->imb; - - /* If the item is referenced */ - if (imb->fReferenced) { - - /* If an old reference exists */ - if (store->refFrame) { - /* Add the old reference to the "Free" store */ - if (vdeImsPutFree(store, store->refFrame) < 0) - return VDE_ERROR; - } - - store->refFrame = item; - } - - /* Else (the item is not referenced) */ - else { - /* Add the item to the "Free" store */ - if (vdeImsPutFree(store, item) < 0) - return VDE_ERROR; - } - - return VDE_OK; -} - - -/* {{-output"vdeImsPutFree.txt"}} */ -/* - * vdeImsPutFree - * - * - * Parameters: - * store a pointer to an image store - * item image store item to put into the Free store - * - * Function: - * This function puts an image store item to a suitable Free store - * of the passed image store. It selects the Free store according to - * the image size or creates a new Free store if a suitable Free store - * does not already exist. - * - * One can use this function instead of vdeImsPut to explicitly discard - * an image store item (whereas for vdeImsPut, one would have to set - * the correct flags and pass a NULL renderer handle to get the same - * effect). - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR if an error occured - * - * - */ - -int vdeImsPutFree(vdeIms_t *store, vdeImsItem_t *item) -/* {{-output"vdeImsPutFree.txt"}} */ -{ - vdeImsFreeStore_t *freeStore, *tmpFreeStore; - int - lumWidth = renDriBitmapWidth(item->imb->drawItem), - lumHeight = renDriBitmapHeight(item->imb->drawItem); - - if (vdeImsGetFreeStore(&store->freeStoreList, lumWidth, - lumHeight, &freeStore) < 0) - return VDE_ERROR; - - if (freeStore == NULL) { - /* The same algorithm as in vdeImsGetFree */ - freeStore = vdeImsAllocFreeStore(0, lumWidth, lumHeight, store->fYuvNeeded); - if (freeStore == NULL) - return VDE_ERROR; - - if (lstHead(&store->freeStoreList, (void **) &tmpFreeStore) < 0) { - vdeImsDeallocFreeStore(freeStore); - return VDE_ERROR; - } - - if (lstAdd(&store->freeStoreList, freeStore) < 0) { - vdeImsDeallocFreeStore(freeStore); - return VDE_ERROR; - } - } - - if (lifoPut(&freeStore->freeStore, item) < 0) - return VDE_ERROR; - - return VDE_OK; -} - - - - -/* - * Local functions - */ - -/* - * vdeImsAllocItem - * This function allocates and initializes a new image store item - * of given size. - */ - -static vdeImsItem_t *vdeImsAllocItem(int lumWidth, int lumHeight, int fYuvNeeded) -{ - vdeImb_t *imb; - vdeImsItem_t *pItem; - - imb = vdeImbAlloc(lumWidth, lumHeight, fYuvNeeded); - if (imb == NULL) - return NULL; - - pItem = (vdeImsItem_t *) vdeMalloc(sizeof(vdeImsItem_t)); - if (pItem == NULL) { - vdeImbDealloc(imb); - return NULL; - } - - pItem->imb = imb; - - return pItem; -} - - -/* - * vdeImsAllocFreeStore - * This function allocates and initializes a new Free store. - * In addition, it allocates a given number of free image store items - * of given size and puts these items into the created Free store. - */ - -static vdeImsFreeStore_t *vdeImsAllocFreeStore(int numFreeItems, - int lumWidth, int lumHeight, int fYuvNeeded) -{ - int i; - vdeImsFreeStore_t *store; - vdeImsItem_t *pItem; - - store = (vdeImsFreeStore_t *) vdeMalloc(sizeof(vdeImsFreeStore_t)); - if (store == NULL) - return NULL; - - store->lumWidth = lumWidth; - store->lumHeight = lumHeight; - store->fYuvNeeded = fYuvNeeded; - - if (lifoOpen(&store->freeStore) < 0) { - vdeDealloc(store); - return NULL; - } - - for (i = 0; i < numFreeItems; i++) { - pItem = vdeImsAllocItem(lumWidth, lumHeight, fYuvNeeded); - if (pItem == NULL) - goto error; - - if (lifoPut(&store->freeStore, pItem) < 0) - goto error; - } - - return store; - - error: - if (pItem) - vdeDealloc(pItem); - vdeImsDeallocFreeStore(store); - return NULL; -} - - -/* - * vdeImsDeallocFreeStore - * This function deallocates a given Free store and all image store items - * which were in the store. - */ - -static int vdeImsDeallocFreeStore(vdeImsFreeStore_t *store) -{ - vdeImb_t *imb; - vdeImsItem_t *pItem; - - do { - if (lifoGet(&store->freeStore, (void **) &pItem) < 0) - return VDE_ERROR; - - if (pItem) { - imb = pItem->imb; - vdeDealloc(pItem); - vdeImbDealloc(imb); - } - } while (pItem); - - if (lifoClose(&store->freeStore) < 0) - return VDE_ERROR; - - vdeDealloc(store); - - return VDE_OK; -} - - - - -/* - * vdeImsGetFreeStore - * This function returns a pointer to a Free store which contains frames of - * requested size. The Free store is searched from a list of Free stores. - */ - -static int vdeImsGetFreeStore(lst_t *freeStoreList, int lumWidth, int lumHeight, - vdeImsFreeStore_t **freeStore) -{ - if (lstHead(freeStoreList, (void **) freeStore) < 0) - return VDE_ERROR; - - while (*freeStore && - ((*freeStore)->lumWidth != lumWidth || (*freeStore)->lumHeight != lumHeight)) { - if (lstNext(freeStoreList, (void **) freeStore) < 0) - return VDE_ERROR; - } - - return VDE_OK; -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vdemain.cpp --- a/videoeditorengine/h263decoder/src/vdemain.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,448 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video decoder engine main module. -* -*/ - - - - -/* - * Includes - */ - -#include "h263dConfig.h" - -#include "vdemain.h" -#include "renapi.h" -#include "rendri.h" -#include "h263dext.h" -#include "vde.h" - -#include "biblin.h" - - -/* - * Global functions - */ - -/* {{-output"vdeFree.txt"}} */ -/* - * vdeFree - * - * - * Parameters: - * Nothing - * - * Function: - * This function deinitializes this module. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR indicating a general error - * - * - */ - -int vdeFree(void) -/* {{-output"vdeFree.txt"}} */ -{ - if (vdcFree() < 0) - return VDE_ERROR; - - return VDE_OK; -} - - -/* {{-output"vdeGetLatestFrame.txt"}} */ -/* - * vdeGetLatestFrame - * - * - * Parameters: - * hInstance instance data - * - * ppy, ppu, ppv used to return Y, U and V frame pointers - * - * pLumWidth, pLumHeight used to return luminance image width and height - * Note these values can be counted on even if - * the function returns an error. - * - * pFrameNum used to return frame number - * - * Function: - * This function returns the latest correctly decoded frame - * (and some side-information). - * - * Note that no thread synchronization is used since the function - * is used only from the mobidntc.c and it is very likely that - * the same decoder instance is used only from a single calling - * thread at the same time. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR indicating a general error - */ - - -int vdeGetLatestFrame( - vdeHInstance_t hInstance, - u_char **ppy, u_char **ppu, u_char **ppv, - int *pLumWidth, int *pLumHeight, - int *pFrameNum) -/* {{-output"vdeGetLatestFrame.txt"}} */ -{ - int - retValue; - - vdeImb_t - *pImb; - - vdeImsItem_t - *pImsItem; - - vdeInstance_t - *instance = (vdeInstance_t *) hInstance; - - - vdeAssert(instance != NULL); - - /* Ensure that image width and height are returned anyway */ - *pLumWidth = instance->lumWidth; - *pLumHeight = instance->lumHeight; - - retValue = vdeImsGetReference( - &instance->imageStore, - VDEIMS_REF_LATEST, 0, - &pImsItem); - if (retValue < 0) - return retValue; - - if (!pImsItem) - return VDE_ERROR; - - pImb = pImsItem->imb; - - if (vdeImbYUV(pImb, ppy, ppu, ppv, pLumWidth, pLumHeight) < 0) - return VDE_ERROR; - - *pFrameNum = renDriFrameNumber(pImb->drawItem); - - return VDE_OK; -} - - - -/* {{-output"vdeInit.txt"}} */ -/* - * vdeInit - * - * - * Parameters: - * param a h263dOpen_t structure containing - * the initialization parameters - * - * Function: - * This function allocates and initializes an H.263 video decoder engine - * (VDE) instance. - * - * Returns: - * a handle to the new instance or - * NULL if the initialization fails - * - * - */ - -vdeHInstance_t vdeInit(h263dOpen_t *param) -/* {{-output"vdeInit.txt"}} */ -{ - vdeInstance_t *instance; - - vdeAssert(param); - vdeAssert(!param->fRPS || (param->fRPS && param->numReferenceFrames > 1)); - - instance = (vdeInstance_t *) - vdeMalloc(sizeof(vdeInstance_t) + param->freeSpace); - if (instance == NULL) - goto errInstanceAllocation; - memset(instance, 0, sizeof(vdeInstance_t)); - - if (param->lumWidth % 16) - param->lumWidth = (param->lumWidth / 16 + 1) * 16; - - if (param->lumHeight % 16) - param->lumHeight = (param->lumHeight / 16 + 1) * 16; - - if (vdeImsOpen(&instance->imageStore, param->numPreallocatedFrames, - param->lumWidth, param->lumHeight) < 0) - goto errVdeImsOpen; - - instance->vdcHInstance = vdcOpen(&instance->imageStore, - param->fRPS ? param->numReferenceFrames : 1, - (void *) instance); - if (!instance->vdcHInstance) - goto errVdcOpen; - - if (vdeFrtOpen(&instance->renStore) < 0) - goto errRenStore; - - if (vdeFrtOpen(&instance->startCallbackStore) < 0) - goto errStartCallbackStore; - - if (vdeFrtOpen(&instance->endCallbackStore) < 0) - goto errEndCallbackStore; - - - instance->lumWidth = param->lumWidth; - instance->lumHeight = param->lumHeight; - - return (vdeHInstance_t) instance; - - /* Error cases (release resources in reverse order) */ - -errEndCallbackStore: - - vdeFrtClose(&instance->startCallbackStore); -errStartCallbackStore: - - vdeFrtClose(&instance->renStore); -errRenStore: - - vdcClose(instance->vdcHInstance); -errVdcOpen: - - vdeImsClose(&instance->imageStore); -errVdeImsOpen: - - vdeDealloc(instance); -errInstanceAllocation: - - return NULL; -} - - -/* {{-output"vdeIsINTRA.txt"}} */ -/* - * vdeIsINTRA - * - * - * Parameters: - * hInstance handle of instance data - * frameStart pointer to memory chunk containing a frame - * frameLength number of bytes in frame - * - * Function: - * This function returns 1 if the passed frame is an INTRA frame. - * Otherwise the function returns 0. - * - * Note: - * This function does not use vdeque services since it is intended to be - * used in non-thread version of the codec only. - * - * Returns: - * See above. - */ - -int vdeIsINTRA( - vdeHInstance_t hInstance, - void *frameStart, - unsigned frameLength) -/* {{-output"vdeIsINTRA.txt"}} */ -{ - vdeInstance_t *instance = (vdeInstance_t *) hInstance; - - vdeAssert(instance != NULL); - - /* Note: We assume that vdeDetermineStreamType has been called to - decide whether the stream is MPEG-4 or H.263 */ - - if (instance->fMPEG4) - return vdcIsMPEGINTRA(instance->vdcHInstance, frameStart, frameLength); - else - return vdcIsINTRA(instance->vdcHInstance, frameStart, frameLength); -} - - -/* {{-output"vdeLoad.txt"}} */ -/* - * vdeLoad - * - * - * Parameters: - * rendererFileName file from which to get renderer functions - * - * Function: - * This function initializes this module. - * - * Renderer functions are dynamically loaded from the given file. - * If rendererFileName is NULL, renderer functions are expected to be - * statically linked. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR indicating a general error - * - * - */ - -int vdeLoad(const char * /*rendererFileName*/) -/* {{-output"vdeLoad.txt"}} */ -{ - - if (vdcLoad() < 0) - return VDE_ERROR; - - return VDE_OK; -} - - - - -/* {{-output"vdeSetInputBuffer.txt"}} */ -/* - * vdeSetInputBuffer - * - * - * Parameters: - * hInstance handle of instance data - * buffer a new bit buffer to use - * - * Function: - * This function sets the bit buffer to use for decoding. - * It is intended that this function is used mainly in applications - * where frames are provided one by one from applications. - * Some upper level function must create a bit buffer for each frame, - * pass a pointer to the created bit buffer to the decoder using this - * function and then decode the frame. - * - * Returns: - * VDE_OK if the function was successful - * VDE_ERROR indicating a general error - * - * - */ - -int vdeSetInputBuffer(vdeHInstance_t hInstance, bibBuffer_t *buffer) -/* {{-output"vdeSetInputBuffer.txt"}} */ -{ - vdeInstance_t *instance = (vdeInstance_t *) hInstance; - - if (instance == NULL) - return VDE_ERROR; - - instance->inBuffer = buffer; - - return VDE_OK; -} - - - -int vdeSetOutputBuffer(vdeHInstance_t hInstance, bibBuffer_t *buffer) -/* {{-output"vdeSetOutputBuffer.txt"}} */ -{ - vdeInstance_t *instance = (vdeInstance_t *) hInstance; - - if (instance == NULL) - return VDE_ERROR; - - instance->outBuffer = buffer; - - return VDE_OK; -} - -int vdeSetBufferEdit(vdeHInstance_t hInstance, bibBufferEdit_t *bufEdit) -/* {{-output"vdeSetOutputBuffer.txt"}} */ -{ - vdeInstance_t *instance = (vdeInstance_t *) hInstance; - - if (instance == NULL) - return VDE_ERROR; - - instance->bufEdit = bufEdit; - - return VDE_OK; -} - -int vdeSetVideoEditParams(vdeHInstance_t hInstance, int aColorEffect, TBool aGetDecodedFrame, - TInt aColorToneU, TInt aColorToneV) -{ - vdeInstance_t *instance = (vdeInstance_t *) hInstance; - - if (instance == NULL) - return VDE_ERROR; - - instance->iColorEffect = aColorEffect; - instance->iGetDecodedFrame = aGetDecodedFrame; - instance->iColorToneU = aColorToneU; - instance->iColorToneV = aColorToneV; - - return VDE_OK; -} - - - - - - - - - -/* {{-output"vdeShutDown.txt"}} */ -/* - * vdeShutDown - * - * - * Parameters: - * hInstance handle of instance data - * - * Function: - * This function has to be called in the end of each video sequence. - * It frees the resources (the VDE instance) allocated by vdeInit. - * - * Returns: - * VDE_OK if the closing was successful - * VDE_ERROR indicating a general error - * - * - */ - -int vdeShutDown(vdeHInstance_t hInstance) -/* {{-output"vdeShutDown.txt"}} */ -{ - int retValue = VDE_OK; - vdeInstance_t *instance = (vdeInstance_t *) hInstance; - - if (vdcClose(instance->vdcHInstance) < 0) - retValue = VDE_ERROR; - - if (vdeFrtClose(&instance->endCallbackStore) < 0) - retValue = VDE_ERROR; - - if (vdeFrtClose(&instance->startCallbackStore) < 0) - retValue = VDE_ERROR; - - if (vdeFrtClose(&instance->renStore) < 0) - retValue = VDE_ERROR; - - if (vdeImsClose(&instance->imageStore) < 0) - retValue = VDE_ERROR; - - vdeDealloc(instance); - - return retValue; -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vdeti.cpp --- a/videoeditorengine/h263decoder/src/vdeti.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,445 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Frame decoding function. -* -*/ - - - -/* - * Includes - */ - -#include "h263dconfig.h" -#include "vdeti.h" -#include "debug.h" -#include "sync.h" -#include "vde.h" -#include "vdemain.h" -#include "core.h" -/* MVE */ -#include "MPEG4Transcoder.h" - -/* - * Local function prototype - */ - -static int vdeSeekNextValidDecodingStartPosition( - vdeInstance_t *instance, CMPEG4Transcoder *hTranscoder); - - -/* - * Functions visible outside this module - */ - -/* {{-output"vdeDecodeFrame.txt"}} */ -/* - * vdeDecodeFrame - * - * Parameters: - * hInstance instance data - * - * Function: - * This function decodes the bitstream by using - * vdcDecodeFrame until it gets at least one decoded frame. It also shows - * the resulting frames (by calling renDraw). - * In addition, the function handles the parameter updating synchronization - * by calling the VDE Queue module. - * - * This function is intended to be called from the thread main function. - * It won't return until it gets a new decoded frame. If the bitstream - * is totally corrupted, this feature might cause a considerable delay - * in the execution of the thread main function. - * - * Returns: - * VDE_OK if the function was successful - * VDE_OK_EOS if the end of stream has been reached - * VDE_OK_BUT_FRAME_USELESS if the function behaved normally, but no - * decoding output was produced due to too - * corrupted input frame - * VDE_ERROR if a fatal error, from which the decoder - * cannot be restored, has occured - * VDE_ERROR_HALTED the instance is halted, it should be closed - * - * - */ - - -int vdeDecodeFrame(vdeHInstance_t hInstance, int /*aStartByteIndex*/, int /*aStartBitIndex*/, CMPEG4Transcoder *hTranscoder) -/* {{-output"vdeDecodeFrame.txt"}} */ -{ - int - sncCode, /* sync code from which to start decoding */ - numOutputFrames, /* number of output frames, 2 for PB-frames, - 1 otherwise */ - fOutputUseless, /* 1 if frame(s) too corrupted to display, - 0 otherwise */ - i, /* loop variable */ - vdcStatus, /* return value of vdcDecodeFrame or - vdcDecodeMPEGVop */ - fFullPictureFreeze = 0; /* set to 1 if full-picture freeze is - going on as described in section L.4 - of the H.263 recommendation */ - - vdeInstance_t - *instance = (vdeInstance_t *) hInstance; - /* pointer to instance structure */ - - /* MVE */ - int StartByteIndex ; - int StartBitIndex ; - - instance->fPrevFrameDecoded = 0; - - /* If the instance is in the EOS state */ - if (instance->state == VDE_STATE_EOS) { - - /* If MPEG-4 stream, visual_object_sequence_end_code terminates - a visual session, and therefore we return. - If H.263 stream, EOS (End of Sequence) has no semantics, and - therefore we return only if MoVi buffers wrapper indicates so. */ - if (instance->fMPEG4) - /* Return an indication that the stream has ended */ - return VDE_OK_EOS; - } - - /* If the instance is in the "Halted" state */ - if (instance->state == VDE_STATE_HALTED) { - - /* If the current frame is INTRA */ - if (vdcIsINTRA(instance->vdcHInstance, instance->inBuffer->baseAddr, 20)) { - /* Reset the state and try to decode */ - instance->state = VDE_STATE_MIDDLE; - deb("vdeDecodeFrame: Trying to recover from halted state.\n"); - } - - else { - deb("vdeDecodeFrame: ERROR - already halted.\n"); - /* Return an indication that the stream cannot be decoded further */ - return VDE_ERROR_HALTED; - } - } - - /* If the instance state indicates that we should resynchronize to INTRA - frame */ - if (instance->state == VDE_STATE_RESYNC) { - - /* If the current frame is INTRA */ - if (vdcIsINTRA(instance->vdcHInstance, instance->inBuffer->baseAddr, 20)) { - /* Reset the state and continue decoding */ - instance->state = VDE_STATE_MIDDLE; - } - - else - return VDE_OK; - } - - /* Read a synchronization code from the current position of the - bitstream or seek the next valid sync code to start decoding */ - sncCode = vdeSeekNextValidDecodingStartPosition(instance, hTranscoder); - - /* If error in seeking sync code */ - if (sncCode < 0) - /* Return error */ - return sncCode; - - /* Else if sync code not found - Note: Can only happen in "one frame per one input bit buffer" case, - i.e. not in videophone */ - else if (sncCode == SNC_NO_SYNC) - /* Note: One could send a INTRA picture request if such a service is - available. However, it is assumed that the service is not available - in this non-videophone application, and therefore no update is - requested. */ - - /* Return indication of useless (too corrupted) frame */ - return VDE_OK_BUT_FRAME_USELESS; - - /* Set the instance to the "Middle" state */ - instance->state = VDE_STATE_MIDDLE; - - /* If the synchronization code == EOS */ - if (sncCode == SNC_EOS) { - - /* Set the instance to the EOS state */ - instance->state = VDE_STATE_EOS; - - /* Return an indication that the stream ended */ - return VDE_OK_EOS; - } - - /* MVE */ - StartByteIndex = instance->inBuffer->getIndex; - StartBitIndex = instance->inBuffer->bitIndex; - - - - - /* Decode a frame */ - - if (instance->fMPEG4) { - - vdcStatus = vdcDecodeMPEGVop(instance->vdcHInstance, instance->inBuffer, - instance->outBuffer, instance->bufEdit, instance->iColorEffect, instance->iGetDecodedFrame, - StartByteIndex, StartBitIndex, hTranscoder); - } - else - { - - - vdcStatus = vdcDecodeFrame(instance->vdcHInstance, instance->inBuffer, - instance->outBuffer, instance->bufEdit, instance->iColorEffect,instance->iGetDecodedFrame, hTranscoder); - - } - - - if (vdcStatus < 0) { - deb("vdeDecodeFrame: ERROR - vdcDecodeFrame failed.\n"); - - instance->state = VDE_STATE_HALTED; - - if (vdcStatus == VDC_ERR_NO_INTRA) - return VDE_ERROR_NO_INTRA; - - return VDE_ERROR_HALTED; - } - - /* If EOS occured */ - if (vdcIsEOSReached(instance->vdcHInstance)) - instance->state = VDE_STATE_EOS; - - /* If the decoded frame is totally corrupted */ - if ((vdcStatus == VDC_OK_BUT_FRAME_USELESS) || (vdcStatus == VDC_OK_BUT_NOT_CODED)) { - - /* If continuous input buffer */ - - fOutputUseless = 1; - } - - else { - fOutputUseless = 0; - instance->fPrevFrameDecoded = 1; - } - - - /* If H.263 bitstream and decoding (partially) successful */ - if (!instance->fMPEG4 && !fOutputUseless) { - } - - /* - * Return decoded images to the image store and - * send them to Video Renderer if needed - */ - - numOutputFrames = vdcGetNumberOfOutputFrames(instance->vdcHInstance); - - /* Loop to handle each output frame separately */ - for (i = 0; i < numOutputFrames; i++) { - vdeImsItem_t *imsItem; - - imsItem = vdcGetImsItem(instance->vdcHInstance, i); - - vdeAssert(imsItem); - - /* If the frame is useless */ - if (fOutputUseless) { - - /* Return the image buffer to the "Free" store */ - if (vdeImsPutFree(&instance->imageStore, imsItem) < 0) { - deb("vdeDecodeFrame: ERROR - vdeImsPutFree failed.\n"); - instance->state = VDE_STATE_HALTED; - return VDE_ERROR_HALTED; - } - } - - /* Else the frame is ok */ - else { - - vdeImb_t *imb; - - vdeImsStoreItemToImageBuffer(imsItem, &imb); - - - /* If full-picture freeze requested */ - if (fFullPictureFreeze) { - - /* Return the image buffer to the image buffer store - but don't send it to the renderer */ - if (vdeImsPut(&instance->imageStore, imsItem) < 0) { - deb("vdeDecodeFrame: ERROR - vdeImsPut failed.\n"); - instance->state = VDE_STATE_HALTED; - return VDE_ERROR_HALTED; - } - } - - /* Else normal displaying */ - else { - h263dFrameType_t frameType; - int renStatus; - u_int32 renHandle; - - /* Get renderer for the output frame */ - frameType.scope = H263D_FTYPE_NDEF; - frameType.width = renDriBitmapWidth(imb->drawItem); - frameType.height = renDriBitmapHeight(imb->drawItem); - - renStatus = vdeFrtGetItem(&instance->renStore, &frameType, &renHandle); - - if (renStatus == VDE_OK_NOT_AVAILABLE) - renHandle = 0; - - - if (renStatus >= 0) { - /* Return the image buffer to the image buffer store - and send it to the renderer (if possible) */ - if (vdeImsPut(&instance->imageStore, imsItem) < 0) { - deb("vdeDecodeFrame: ERROR - vdeImsPut failed.\n"); - instance->state = VDE_STATE_HALTED; - return VDE_ERROR_HALTED; - } - } - - else { - deb("vdeDecodeFrame: ERROR - vdeFrtGetItem failed.\n"); - instance->state = VDE_STATE_HALTED; - return VDE_ERROR_HALTED; - } - } - - } - } - - // fatal errors were returned already earlier - switch ( vdcStatus ) - { - case VDC_OK_BUT_FRAME_USELESS: - { - return VDE_OK_BUT_FRAME_USELESS; - } -// break; - case VDC_OK_BUT_NOT_CODED: - { - return VDE_OK_BUT_NOT_CODED; - } -// break; - default: - { - break; -// return VDE_OK; - } - } - -return VDE_OK; -} - - -/* - * Local functions - */ - -/* - * vdeSeekNextValidDecodingStartPosition - * - * Parameters: - * instance instance data - * - * Function: - * This function seeks the next synchronization position from the bitstream - * (starting from the current position) from which the decoder can start - * decoding. - * - * Returns: - * VDE_ERROR if a fatal error, from which the decoder - * cannot be restored, has occured - * - * SNC_NO_SYNC if no suitable sync code was found - * (can happen only in non-videophone case - * where only one frame is in one bit input - * buffer) - * - * SNC_PSC H.263 Picture Start Code found - * - * SNC_EOS H.263 End of Sequence found or - * MPEG-4 EOB found - * - * SNC_GBSC H.263 GBSC found - * - * SNC_VOP MPEG-4 VOP - * SNC_GOV MPEG-4 GOV - * - * - */ - -static int vdeSeekNextValidDecodingStartPosition( - vdeInstance_t *instance, CMPEG4Transcoder *hTranscoder) -{ - int - sncCode = SNC_NO_SYNC; /* sync code in current position */ - int16 - error = 0; /* error code returned from sync module */ - - /* Note: For the first INTRA of the stream, - do the H.263 vs. non-H.263 stream decision in a higher level, - now assume that there has simply been a bit error in the header, - and one should try from the next PSC */ - - if (instance->fMPEG4) { - vdcInstance_t* vdcinst = (vdcInstance_t *) instance->vdcHInstance; - int fcode = vdcinst->pictureParam.fcode_forward; - - while (sncCode != SNC_VOP && - sncCode != SNC_GOV && - sncCode != SNC_EOB && - sncCode != SNC_VIDPACK) { - - sncCode = sncSeekMPEGStartCode(instance->inBuffer, (fcode ? fcode : 1), 1 /* VPs not relevant at this stage */, 0, &error); - if (error == ERR_BIB_NOT_ENOUGH_DATA) - return SNC_NO_SYNC; - else if (error) - return VDE_ERROR; - else if (sncCode == SNC_VOS) - { - /* Visual Object Sequence start code found, VOS + VO + VOL headers have to be parsed now.. */ - /* (The bitstream may contain multiple instances of VOS start codes before Visual - Object Sequence end code) */ - if (vdcDecodeMPEGVolHeader(vdcinst, instance->inBuffer, hTranscoder) != 0) - return VDE_ERROR; - } - } - - if (sncCode == SNC_EOB) - sncCode = SNC_EOS; - } - else - { - while ( - sncCode != SNC_PSC && - sncCode != SNC_EOS && - sncCode != SNC_GBSC ) { - - sncCode = sncSeekSync(instance->inBuffer, &error); - if (error == ERR_BIB_NOT_ENOUGH_DATA) - return SNC_NO_SYNC; - else if (error) - return VDE_ERROR; - } - } - - return sncCode; -} - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vdeti_mpeg.cpp --- a/videoeditorengine/h263decoder/src/vdeti_mpeg.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,114 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Input stream type determination. -* -*/ - - - - -/* - * Includes - */ - -#include "h263dConfig.h" - -#include "debug.h" -#include "sync.h" -#include "vde.h" -#include "vdemain.h" -#include "mpegcons.h" - -#include "core.h" - - -/* - * Functions visible outside this module - */ - -/* - * vdeDetermineStreamType - * - * Parameters: - * hInstance instance data - * - * Function: - * This function detects the stream type, looking at the start code - * (h.263 vs. MPEG-4) and sets the flag "fMPEG4" which is - * used for the configuration of the decoder. - * In case of an MPEG-4 stream calls the Video Object Header and the VOL Header - * decoding function to set initial parameters. - * - * Returns: - * VDE_OK if the stream type could be detected and - * it is supported - * VDE_ERROR_HALTED if the stream type couldn't be detected or - * the configuration is not supported - * VDE_ERROR if unrecoverable bitbuffer error occered - * - */ -int vdeDetermineStreamType(vdeHInstance_t hInstance, CMPEG4Transcoder *hTranscoder) -{ - vdeInstance_t *vdeinstance = (vdeInstance_t *) hInstance; - bibBuffer_t *inBuffer = vdeinstance->inBuffer; - - int numBitsGot, - bitErrorIndication = 0; - int16 error = 0; - u_int32 bits; - - bits = bibShowBits(32, inBuffer, &numBitsGot, &bitErrorIndication, &error); - if (error) - return VDE_ERROR; - - /* If PSC */ - if ((bits >> 10) == 32) { - vdeinstance->fMPEG4 = 0; - } - - /* Else check for Visual Sequence, Visual Object or Video Object start code */ - else if ((bits == MP4_VOS_START_CODE) || - (bits == MP4_VO_START_CODE) || - ((bits >> MP4_VID_ID_CODE_LENGTH) == MP4_VID_START_CODE) || - ((bits >> MP4_VOL_ID_CODE_LENGTH) == MP4_VOL_START_CODE)) { - - vdeinstance->fMPEG4 = 1; - - if (vdcDecodeMPEGVolHeader(vdeinstance->vdcHInstance, inBuffer, hTranscoder) != 0) - return VDE_ERROR; - - bits = bibShowBits(22, inBuffer, &numBitsGot, &bitErrorIndication, &error); - if (error) - return VDE_ERROR; - - /* Check if H.263 PSC follows the VOL header, in which case this is - MPEG-4 with short header and is decoded as H.263 */ - if ( bits == 32 ) { - vdeinstance->fMPEG4 = 0; - } - - } - - /* Else no H.263 and no MPEG-4 start code detected -> let's try H.263, - since MPEG-4 cannot anyway be decoded without starting header */ - else { - vdeinstance->fMPEG4 = 0; - } - - return VDE_OK; -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vedh263dimp.cpp --- a/videoeditorengine/h263decoder/src/vedh263dimp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,271 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* H.263 Decoder API implementation class. -* -*/ - - - -// INCLUDE FILES -#include "vde.h" -#include "h263dapi.h" -#include "vedh263dimp.h" -/* MVE */ -#include "MPEG4Transcoder.h" - -// An assertion macro wrapper to clean up the code a bit -#define DLASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CVedH263Dec"), EInternalAssertionFailure)) - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::CVedH263DecImp -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CVedH263DecImp::CVedH263DecImp(TSize aFrameSize, TInt /*aNumReferencePictures*/) -{ - iH263dHandle = 0; - iFrameSize = aFrameSize; -} - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CVedH263DecImp::ConstructL() -{ - - // Open a decoder instance - h263dOpen_t openParams; - openParams.numPreallocatedFrames = 1; - openParams.lumWidth = iFrameSize.iWidth; - openParams.lumHeight = iFrameSize.iHeight; - - openParams.fRPS = 0; // reference picture selection mode not in use - openParams.numReferenceFrames = 1; - openParams.freeSpace = 0; - iH263dHandle = h263dOpen(&openParams); - if (!iH263dHandle) - User::Leave(KErrGeneral); - -} - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -EXPORT_C CVedH263Dec* CVedH263Dec::NewL(const TSize aFrameSize, const TInt aNumReferencePictures) -{ - - CVedH263DecImp* self = new (ELeave) CVedH263DecImp(aFrameSize, aNumReferencePictures); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; -} - - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::~CVedH263DecImp -// Destructor -// ----------------------------------------------------------------------------- -// -CVedH263DecImp::~CVedH263DecImp() -{ - // Close the decoder instance if one has been opened - if (iH263dHandle) - { - h263dClose(iH263dHandle); - iH263dHandle = 0; - } - -} - - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::SetRendererL -// Sets the renderer object which the decoder will use -// ----------------------------------------------------------------------------- -// -void CVedH263DecImp::SetRendererL(MVideoRenderer* /*aRenderer*/) -{ - // this method is not supported any more - User::Panic(_L("CVedH263Dec - method not supported"), EInternalAssertionFailure); -} - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::SetPostFilterL -// Sets the post-filter to be used in decoding -// ----------------------------------------------------------------------------- -// -void CVedH263DecImp::SetPostFilterL(const TPostFilter /*aFilter*/) -{ - // this method is not supported any more - User::Panic(_L("CVedH263Dec - method not supported"), EInternalAssertionFailure); -} - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::GetYUVFrame -// Retrieves the YUV buffer for the last decoded frame -// ----------------------------------------------------------------------------- -// -TUint8* CVedH263DecImp::GetYUVFrame() -{ - // this method is not supported any more - User::Panic(_L("CVedH263Dec - method not supported"), EInternalAssertionFailure); - - return NULL; - -} - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::GetYUVBuffers -// Retrieves the Y/U/V buffers for the given frame -// ----------------------------------------------------------------------------- -// -TInt CVedH263DecImp::GetYUVBuffers(const TAny */*aFrame*/, TUint8*& /*aYFrame*/, TUint8*& /*aUFrame*/, - TUint8*& /*aVFrame*/, TSize& /*aFrameSize*/) -{ - // this method is not supported any more - User::Panic(_L("CVedH263Dec - method not supported"), EInternalAssertionFailure); - return KErrNotSupported; -} - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::DecodeFrameL -// Decodes / Transcodes a compressed frame -// ----------------------------------------------------------------------------- -// - -void CVedH263DecImp::DecodeFrameL(const TPtrC8& aInputBuffer, TPtr8& aOutputBuffer, - TBool& aFirstFrame, TInt& aBytesDecoded, - vdeDecodeParamters_t *aDecoderInfo) -{ - - TInt error = KErrNone; - - TInt bytesProduced = 0; - - error = h263dDecodeFrameL(iH263dHandle, (TAny*)aInputBuffer.Ptr(), (TAny*)aOutputBuffer.Ptr(), - aInputBuffer.Length(), (TUint8*)&aFirstFrame, &aBytesDecoded, - &bytesProduced, aDecoderInfo); - - aOutputBuffer.SetLength(bytesProduced); - - switch ( error ) - { - case H263D_ERROR_NO_INTRA: - { - User::Leave( EDecoderNoIntra ); - } - break; - case H263D_OK_BUT_FRAME_USELESS: - case H263D_OK_BUT_BIT_ERROR: - { - User::Leave( EDecoderCorrupted ); - } - break; - case H263D_OK: - case H263D_OK_EOS: - case H263D_OK_BUT_NOT_CODED: - { - // ok - return; - } - default: - { - User::Leave(EDecoderFailure); - } - break; - - } - -} - - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::DecodeFrameL -// Decodes / Transcodes a compressed frame -// ----------------------------------------------------------------------------- -// -void CVedH263DecImp::DecodeFrameL(const TPtrC8& /*aInputBuffer*/, TPtr8& /*aOutputBuffer*/, - TBool& /*aFirstFrame*/, TInt& /*aBytesDecoded*/, - const TColorEffect /*aColorEffect*/, - const TBool /*aGetDecodedFrame*/, TInt /*aFrameOperation*/, - TInt* /*aTrP*/, TInt* /*aTrD*/, TInt /*aVideoClipNumber*/, TInt /*aSMSpeed*/, - TInt /*aDataFormat*/) -{ - // this method is not supported any more - User::Panic(_L("CVedH263Dec - method not supported"), EInternalAssertionFailure); -} - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::DecodeFrameL -// Decodes a compressed frame -// ----------------------------------------------------------------------------- -// -void CVedH263DecImp::DecodeFrameL(const TPtrC8& /*aInputBuffer*/, TBool& /*aFirstFrame*/, TInt& /*aBytesDecoded*/, - TInt /*aDataFormat*/) -{ - // this method is not supported any more - User::Panic(_L("CVedH263Dec - method not supported"), EInternalAssertionFailure); -} - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::FrameValid -// Checks if the given frame is valid -// ----------------------------------------------------------------------------- -// -TBool CVedH263DecImp::FrameValid(const TAny */*aFrame*/) -{ - return ETrue; - -} - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::FrameRendered -// Returns the given frame to the decoder after it is no longer needed -// ----------------------------------------------------------------------------- -// -void CVedH263DecImp::FrameRendered(const TAny */*aFrame*/) -{ - // Return frame to the decoder rendering subsystem -} - -// ----------------------------------------------------------------------------- -// CVedH263DecImp::CheckVOSHeaderL -// Check and change the VOS header (resync marker bit needs to be set) -// ----------------------------------------------------------------------------- -// -TBool CVedH263DecImp::CheckVOSHeaderL(TPtrC8& aInputBuffer) -{ - return vdtChangeVosHeaderRegResyncL(aInputBuffer, aInputBuffer.Length()); - -} - - - - - -// End of file - - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/viddemux.cpp --- a/videoeditorengine/h263decoder/src/viddemux.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4111 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* H.263 bitstream parsing. -* -*/ - - - -/* - * Includes - */ - -#include "h263dConfig.h" -#include "viddemux.h" -#include "vdxint.h" -#include "debug.h" -#include "biblin.h" -/* MVE */ -#include "MPEG4Transcoder.h" - -/* - * Defines - */ - -#ifdef DEB_STDOUT -/* Use back-channel debug output file when printing back-channel related - messages. */ -#include -extern FILE *bcmDebFile; -#endif - - -/* - * Module-scope typedefs - */ - -/* Another type for VLC (variable length code) lookup tables used in - Annex I implementation.*/ -typedef struct { - u_char LAST; /* see section 5.4.2 of the H.263 recommendation */ - u_char RUN; /* to understand LAST, RUN and LEVEL */ - u_char LEVEL; - u_char len; /* actual length of code in bits */ -} vdxVLCTableNew_t; - - -/* - * Global constants - */ - -/* Used to convert a luminance block index defined in section 4.2.1 - of the H.263 recommendation to a coded block pattern mask (see sections - 5.3.4 and 5.3.5 of the H.263 recommendation. - See also macros section in viddemux.h. */ -const int vdxBlockIndexToCBPYMask[5] = {0, 8, 4, 2, 1}; -const int vdxYBlockIndexToCBPBMask[5] = {0, 32, 16, 8, 4}; - - -/* - * Local function prototypes - */ - -/* Picture Layer */ - -static int vdxActAfterIncorrectSEI( - bibBuffer_t *inBuffer, - int fPLUSPTYPE, - int *fLast, - int *bitErrorIndication); - -static void vdxStandardSourceFormatToFrameSize(int sourceFormat, int *width, int *height); - -/* Slice Layer */ -int vdxFrameSizeToPictureFormat(int width, int height); - -/* Macroblock Layer */ - -static int vdxGetIntraMode(bibBuffer_t *inBuffer,int *index, - int *bitErrorIndication); - -static int vdxUMVGetMVD(bibBuffer_t *inBuffer,int *mvdx10, - int *bitErrorIndication); - -static int vdxGetNormalMODB(bibBuffer_t *inBuffer, int *index, - int *bitErrorIndication); - -static int vdxGetImpPBMODB(bibBuffer_t *inBuffer, int *index, - int *bitErrorIndication); - - - - -/* - * Picture Layer Global Functions - */ - -/* {{-output"vdxGetPictureHeader.txt"}} */ -/* - * vdxGetPictureHeader - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * inpParam input parameters - * header output parameters: picture header - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the H.263 picture header. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - -int vdxGetPictureHeader( - bibBuffer_t *inBuffer, - const vdxGetPictureHeaderInputParam_t *inpParam, - vdxPictureHeader_t *header, - int *bitErrorIndication) -/* {{-output"vdxGetPictureHeader.txt"}} */ -{ - bibFlushBits_t - flushBits; - bibGetBits_t - getBits; - int - numBitsGot, - bits1To5OfPTYPE, - sourceFormat; - int16 - bibError = 0; - u_int32 tmp = 0; /* temporary variable for reading some redundant bits */ - - vdxAssert(inBuffer != NULL); - vdxAssert(inpParam != NULL); - vdxAssert(inpParam->flushBits != NULL); - vdxAssert(inpParam->getBits != NULL); - vdxAssert(header != NULL); - vdxAssert(bitErrorIndication != NULL); - - flushBits = inpParam->flushBits; - getBits = inpParam->getBits; - - memset(header, 0, sizeof(vdxPictureHeader_t)); - *bitErrorIndication = 0; - - /* Assume that the existence of a PSC has been checked, - it is the next code in the buffer, and - its byte alignment has been checked */ - - /* Flush stuffing (PSTUF) */ - if (inpParam->numStuffBits) { - flushBits(inpParam->numStuffBits, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - } - - /* Flush PSC */ - flushBits(22, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - /* PSC cannot contain fatal bit errors (checked earlier) */ - header->numBits += 22; - - *bitErrorIndication = 0; - - /* TR */ - header->tr = (int) getBits(8, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - header->numBits += 8; - - - #ifdef DEB_STDOUT - if (bcmDebFile) - deb1f(bcmDebFile, "TR %d\n", header->tr); - #endif - - /* The first 5 bits from PTYPE */ - bits1To5OfPTYPE = (int) getBits(5, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 5; - - - /* PTYPE bit 1 should be 1 */ - if ((bits1To5OfPTYPE & 16) == 0 ) { - deb0p("ERROR. PTYPE bit 1 invalid.\n"); - goto exitAfterBitError; - } - - /* PTYPE bit 2 should be 0 for distinction with H.261 */ - if (bits1To5OfPTYPE & 8) { - deb0p("ERROR. PTYPE bit 2 indicates H.261.\n"); - goto exitAfterBitError; - } - - /* PTYPE bit 3, Split Screen Indicator */ - header->fSplitScreen = ((bits1To5OfPTYPE & 4) > 0); - - /* PTYPE bit 4, Document camera indicator */ - header->fDocumentCamera = ((bits1To5OfPTYPE & 2) > 0); - - /* PTYPE bit 5, Freeze Picture Release */ - header->fFreezePictureRelease = (bits1To5OfPTYPE & 1); - - /* PTYPE bits 6 - 8, Source Format */ - sourceFormat = (int) getBits(3, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 3; - - - /* If H.263 version 1 */ - if (sourceFormat >= 1 && sourceFormat <= 5) { - int bits9To13OfPTYPE; - - header->fPLUSPTYPE = 0; - - vdxStandardSourceFormatToFrameSize(sourceFormat, &header->lumWidth, &header->lumHeight); - - /* PTYPE bits 9 - 13 */ - bits9To13OfPTYPE = (int) getBits(5, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 5; - - - /* PTYPE bit 9, Picture coding type */ - header->pictureType = ((bits9To13OfPTYPE & 16) > 0); - - /* PTYPE bit 10, Unrestricted motion vector mode */ - header->fUMV = ((bits9To13OfPTYPE & 8) > 0); - - /* PTYPE bit 11, Syntax-based Arithmetic Coding mode */ - header->fSAC = ((bits9To13OfPTYPE & 4) > 0); - - /* PTYPE bit 12, Advanced prediction mode */ - header->fAP = ((bits9To13OfPTYPE & 2) > 0); - - /* PTYPE bit 13, PB-frames mode */ - - /* If PTYPE bit 9 indicates a P-picture */ - if (header->pictureType) { - /* Check if it is actually a PB-picture */ - if (bits9To13OfPTYPE & 1) - header->pictureType = VDX_PIC_TYPE_PB; - } - - /* Else PTYPE bit 9 indicates an I-picture */ - else { - /* Check that bit 13 is 0 */ - if (bits9To13OfPTYPE & 1) { - deb0p("ERROR. PTYPE bit 9 and 13 mismatch.\n"); - goto exitAfterBitError; - } - } - } - - /* Else if H.263 version 2 (PLUSPTYPE) */ - else if (sourceFormat == 7) { - int bits4To9OfMPPTYPE; - - header->fPLUSPTYPE = 1; - - /* UFEP */ - header->ufep = (int) getBits(3, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 3; - - - if (header->ufep > 1) { - deb0p("ERROR. UFEP illegal.\n"); - goto exitAfterBitError; - } - - /* If UFEP = '001' */ - if (header->ufep) { - int bits4To18OfOPPTYPE; - - /* OPPTYPE bits 1 - 3, Source format */ - sourceFormat = (int) getBits(3, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 3; - - - - if (sourceFormat >= 1 && sourceFormat <= 5) { - header->fCustomSourceFormat = 0; - vdxStandardSourceFormatToFrameSize(sourceFormat, - &header->lumWidth, &header->lumHeight); - } - - else if (sourceFormat == 6) - header->fCustomSourceFormat = 1; - - else { - deb0p("ERROR. Source format illegal.\n"); - goto exitAfterBitError; - } - - /* OPPTYPE bits 4 - 18 */ - bits4To18OfOPPTYPE = (int) getBits(15, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 15; - - - /* OPPTYPE bit 4, Custom PCF */ - header->fCustomPCF = ((bits4To18OfOPPTYPE & 0x4000) > 0); - - /* OPPTYPE bit 5, Unrestricted Motion Vector mode */ - header->fUMV = ((bits4To18OfOPPTYPE & 0x2000) > 0); - - /* OPPTYPE bit 6, Syntax-based Arithmetic Coding mode */ - header->fSAC = ((bits4To18OfOPPTYPE & 0x1000) > 0); - - /* OPPTYPE bit 7, Advanced Prediction mode */ - header->fAP = ((bits4To18OfOPPTYPE & 0x0800) > 0); - - /* OPPTYPE bit 8, Advanced INTRA Coding mode */ - header->fAIC = ((bits4To18OfOPPTYPE & 0x0400) > 0); - - /* OPPTYPE bit 9, Deblocking filter mode */ - header->fDF = ((bits4To18OfOPPTYPE & 0x0200) > 0); - - /* OPPTYPE bit 10, Slice Structured mode */ - header->fSS = ((bits4To18OfOPPTYPE & 0x0100) > 0); - - /* OPPTYPE bit 11, Reference Picture Selection mode */ - header->fRPS = ((bits4To18OfOPPTYPE & 0x0080) > 0); - - /* OPPTYPE bit 12, Independent Segment Decoding mode */ - header->fISD = ((bits4To18OfOPPTYPE & 0x0040) > 0); - - /* OPPTYPE bit 13, Alternative Inter VLC mode */ - header->fAIV = ((bits4To18OfOPPTYPE & 0x0020) > 0); - - /* OPPTYPE bit 14, Modified Quantization mode */ - header->fMQ = ((bits4To18OfOPPTYPE & 0x0010) > 0); - - /* OPPTYPE bits 15 - 18 must be '1000' */ - if ((bits4To18OfOPPTYPE & 0x000F) != 8) { - deb0p("ERROR. OPPTYPE bits 15 - 18 illegal.\n"); - goto exitAfterBitError; - } - - /* Mode interaction restrictions, see section 5.1.4.6 of - the H.263 recommendation */ - if (header->fSAC && (header->fAIV || header->fMQ || header->fUMV)) { - deb0p("ERROR. Illegal bit pattern (section 5.1.4.6).\n"); - goto exitAfterBitError; - } - } - - /* MPPTYPE, bits 1 - 3, Picture type code */ - header->pictureType = (int) getBits(3, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 3; - - - if (header->pictureType >= 6) { - deb0p("ERROR. Picture type code illegal.\n"); - goto exitAfterBitError; - } - - /* MPPTYPE, bits 4 - 9 */ - bits4To9OfMPPTYPE = (int) getBits(6, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 6; - - - /* MPPTYPE bit 4, Reference Picture Resampling mode */ - header->fRPR = ((bits4To9OfMPPTYPE & 32) > 0); - - /* MPPTYPE bit 5, Reduced-Resolution Update mode */ - header->fRRU = ((bits4To9OfMPPTYPE & 16) > 0); - - /* RPR/RRU must not be set for I or EI-pictures. - (See section 5.1.4.5 of the H.263 recommendation.) */ - if ((header->fRPR || header->fRRU) && - (header->pictureType == VDX_PIC_TYPE_I || - header->pictureType == VDX_PIC_TYPE_EI)) { - deb0p("ERROR. RPR or RRU is set for I or EI.\n"); - goto exitAfterBitError; - } - - /* MPPTYPE bit 6, Rounding type */ - header->rtype = ((bits4To9OfMPPTYPE & 8) > 0); - - /* RTYPE must be 0 if other than P, Improved PB or EP picture - (see section 5.1.4.3 of the H.263 recommendation */ - - /* MPPTYPE bits 7 - 9, must be '001' */ - if ((bits4To9OfMPPTYPE & 7) != 1) { - deb0p("ERROR. MPPTYPE bits 7 - 9 illegal.\n"); - goto exitAfterBitError; - } - - /* CPM */ - header->cpm = (int) getBits(1, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 1; - - - if (header->cpm) { - /* PSBI */ - header->psbi = (int) getBits(2, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 2; - - - } - - if (header->fCustomSourceFormat) { - int parCode, fExtendedPAR = 0, pwi, phi; - - /* CPFMT bits 1 - 4, Pixel Aspect Ratio code */ - parCode = (int) getBits(4, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 4; - - - - switch (parCode) { - - case 1: /* Square */ - header->parWidth = 1; - header->parHeight = 1; - break; - - case 2: /* CIF for 4:3 picture */ - header->parWidth = 12; - header->parHeight = 11; - break; - - case 3: /* 525-type for 4:3 picture */ - header->parWidth = 10; - header->parHeight = 11; - break; - - case 4: /* CIF stretched for 16:9 picture */ - header->parWidth = 16; - header->parHeight = 11; - break; - - case 5: /* 525-type stretched for 16:9 picture */ - header->parWidth = 40; - header->parHeight = 33; - break; - - case 15: /* extended PAR */ - fExtendedPAR = 1; - break; - - default: - deb0p("ERROR. PAR code illegal.\n"); - goto exitAfterBitError; - } - - /* CPFMT bits 5 - 13, picture width indication */ - pwi = (int) getBits(9, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 9; - - - header->lumWidth = ((pwi + 1) <<2 /** 4*/); - - /* CPFMT bit 14 must be 1 */ - tmp = getBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - header->numBits += 1; - - - if ( tmp == 0 ) { - deb0p("ERROR. CPFMT bit 14 is 0.\n"); - goto exitAfterBitError; - } - - /* CPFMT bits 15 - 23, picture height indication */ - phi = (int) getBits(9, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 9; - - - if (phi == 0 || phi > 288) { - deb0p("ERROR. PHI illegal.\n"); - goto exitAfterBitError; - } - header->lumHeight = (phi <<2 /** 4*/); - - if (fExtendedPAR) { - /* EPAR bits 1 - 8, PAR Width */ - header->parWidth = (int) getBits(8, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 8; - - - if (header->parWidth == 0) { - deb0p("ERROR. PAR width illegal.\n"); - goto exitAfterBitError; - } - - /* EPAR bits 9 - 16, PAR Height */ - header->parHeight = (int) getBits(8, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 8; - - - if (header->parHeight == 0) { - deb0p("ERROR. PAR height illegal.\n"); - goto exitAfterBitError; - } - } - } /* endif (customSourceFormat) */ - - if (header->fCustomPCF) { - int clockConversionCode; - u_int32 clockDivisor, conversionFactor; - - /* CPCFC bit 1, Clock conversion code */ - clockConversionCode = (int) getBits(1, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 1; - - - if (clockConversionCode) - conversionFactor = 1001; - else - conversionFactor = 1000; - - /* CPCFC bits 2 - 8, Clock divisor */ - clockDivisor = getBits(7, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 7; - - - if (clockDivisor == 0) { - deb0p("ERROR. Illegal clock divisor.\n"); - goto exitAfterBitError; - } - - header->pcfRate = 1800000LU; - header->pcfScale = clockDivisor * conversionFactor; - } - - else { - /* CIF clock frequency */ - header->pcfRate = 2997; - header->pcfScale = 100; - } - - if (header->fCustomPCF || (!header->ufep && inpParam->fCustomPCF)) { - int etr; - - /* ETR */ - etr = (int) getBits(2, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 2; - - - - header->tr |= (etr << 8); - } - - if (header->fUMV) { - /* UUI */ - tmp = getBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - header->numBits += 1; - - - if ( tmp ) - header->fUMVLimited = 1; - - else { - tmp = getBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - header->numBits += 1; - - - if ( tmp ) - header->fUMVLimited = 0; - else { - /* '00' forbidden */ - deb0p("ERROR. Illegal UUI.\n"); - goto exitAfterBitError; - } - } - - - } - - if (header->fSS) { - /* SSS */ - tmp = (int) getBits(1, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - header->fRectangularSlices = tmp; - header->numBits += 1; - - header->fArbitrarySliceOrdering = (int) getBits(1, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 1; - - - /* Mode interaction restriction, see section 5.1.4.6 of - the H.263 recommendation */ - if (header->fISD && !header->fRectangularSlices) { - deb0p("ERROR. Illegal bit pattern (section 5.1.4.6).\n"); - goto exitAfterBitError; - } - } - - if (inpParam->fScalabilityMode) { - /* ELNUM */ - header->elnum = (int) getBits(4, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 4; - - } - - if (inpParam->fScalabilityMode && header->ufep) { - /* RLNUM */ - header->rlnum = (int) getBits(4, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 4; - - } - - if (header->fRPS) { - /* RPSMF */ - header->rpsMode = (int) getBits(3, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 3; - - - if (header->rpsMode < 4) { - deb0p("ERROR. Illegal RPSMF.\n"); - goto exitAfterBitError; - } - - header->rpsMode -= 4; /* 4..7 --> 0..3 */ - } - - /* If no OPPTYPE but RPS was previously on or RPS signaled in OPPTYPE */ - if ((inpParam->fRPS && header->ufep == 0) || header->fRPS) { - /* TRPI */ - header->trpi = (int) getBits(1, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 1; - - - if (header->trpi) { - /* TRP */ - header->trp = (int) getBits(10, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 10; - - - deb2f(bcmDebFile, "TRPI in picture header. TR = %d, TRP = %d.\n", - header->tr, header->trp); - } - - /* Code following the standard */ - - /* BCI */ - tmp = getBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - header->numBits += 1; - - - if ( tmp ) { - /* BCM not supported */ - deb0p("ERROR. BCM not supported.\n"); - goto exitAfterBitError; - } - - else { - tmp = getBits(1, inBuffer, &numBitsGot,bitErrorIndication, &bibError); - header->numBits += 1; - - - if ( !tmp ) { - /* BCI '00' is illegal */ - deb0p("ERROR. Illegal BCI.\n"); - goto exitAfterBitError; - } - } - - } - - if (header->fRPR) { - /* RPRP not supported */ - deb0p("ERROR. RPRP not supported.\n"); - goto exitAfterBitError; - } - } - - else { - deb0p("ERROR. Source format illegal.\n"); - goto exitAfterBitError; - } - - /* PQUANT */ - header->pquantPosition = header->numBits; - header->pquant = (int) getBits(5, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 5; - - - if (header->pquant == 0) { - deb0p("ERROR. PQUANT illegal.\n"); - goto exitAfterBitError; - } - - if (!header->fPLUSPTYPE) { - /* CPM */ - header->cpm = (int) getBits(1, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 1; - - - if (header->cpm) { - /* PSBI */ - header->psbi = (int) getBits(2, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 2; - - - } - } - - /* If PB-frame */ - if (header->pictureType == VDX_PIC_TYPE_PB || - header->pictureType == VDX_PIC_TYPE_IPB) { - - /* TRB */ - - /* If custom picture clock frequence is used */ - if (header->fCustomPCF || inpParam->fCustomPCF) { - header->trb = (int) getBits(5, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 5; - - - } - - else { - header->trb = (int) getBits(3, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 3; - - - } - - if (header->trb == 0) { - deb0p("ERROR. TRB illegal.\n"); - goto exitAfterBitError; - } - - /* DBQUANT */ - header->dbquant = (int) getBits(2, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - header->numBits += 2; - - - } - - - /* Check success and return */ - - - - /* If no error in bit buffer functions */ - if (!bibError) - return VDX_OK; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; - - exitAfterBitError: - if (bibError && bibError != ERR_BIB_NOT_ENOUGH_DATA) - return VDX_ERR_BIB; - return VDX_OK_BUT_BIT_ERROR; -} - - -/* {{-output"vdxFlushSEI.txt"}} */ -/* - * vdxFlushSEI - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function discards (flushes) all consequent PEI/PSUPP pairs. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - -int vdxFlushSEI( - bibBuffer_t *inBuffer, - int *bitErrorIndication ) -/* {{-output"vdxFlushSEI.txt"}} */ -{ - int - numBitsGot; - int16 - bibError = 0; - u_int32 - pei, - psupp; - - vdxAssert(inBuffer != NULL); - vdxAssert(bitErrorIndication != NULL); - - do { - /* PEI */ - pei = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - if (pei) { - /* PSUPP */ - psupp = bibGetBits(8, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - // ignore the value of psupp; this is flush-function - if ( psupp ) - { - } - - - } - } while (pei); - - return VDX_OK; - -} - - -/* {{-output"vdxGetSEI.txt"}} */ -/* - * vdxGetSEI - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * - * ftype FTYPE field as defined in table L.1 of H.263, - * -1 if the value is not valid - * - * dsize DSIZE as defined in section L.2 of H.263 - * - * parameterData an array of (min) 16 entries, - * filled with dsize octets of parameter data - * - * fLast set to 1 if the first PEI indicates that - * no PSUPPs follow. Otherwise 0. - * - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function gets supplemental enhancement information as defined - * in Annex L of H.263. - * - * Note: - * The start code emulation prevention necessity using "Do Nothing" function - * is not checked. See section L.3 of H.263 for more details. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - -int vdxGetSEI( - bibBuffer_t *inBuffer, - int *ftype, - int *dsize, - u_char *parameterData, - int *fLast, - int *bitErrorIndication) -/* {{-output"vdxGetSEI.txt"}} */ -{ - int - numBitsGot, - paramNum, - lftype, /* local FTYPE */ - ldsize; /* local DSZIE */ - int16 - bibError = 0; - u_int32 - pei; - - vdxAssert(inBuffer != NULL); - vdxAssert(ftype != NULL); - vdxAssert(dsize != NULL); - vdxAssert(parameterData != NULL); - vdxAssert(fLast != NULL); - vdxAssert(bitErrorIndication != NULL); - - *ftype = -1; - *dsize = 0; - - /* PEI */ - pei = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - if (pei) { - *fLast = 0; - - /* FTYPE */ - lftype = (int) bibGetBits(4, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - /* DSIZE */ - ldsize = (int) bibGetBits(4, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - } - - else { - *fLast = 1; - return VDX_OK; - } - - for (paramNum = 0; paramNum < ldsize; paramNum++) { - /* PEI */ - pei = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - if (!pei) { - deb0p("ERROR. DSIZE does not match with PEI.\n"); - *fLast = 1; - return VDX_OK_BUT_BIT_ERROR; - } - - /* PSUPP containing parameter data */ - parameterData[paramNum] = (u_char) bibGetBits(8, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - } - - *ftype = lftype; - *dsize = ldsize; - - return VDX_OK; - -} - - -/* {{-output"vdxGetAndParseSEI.txt"}} */ -/* - * vdxGetAndParseSEI - * - * Parameters: - * inBuffer pointer to bit buffer instance - * - * fPLUSPTYPE indicates if PLUSPTYPE is in use - * - * numScalabilityLayers -1 if the very first picture, - * 0 if Annex N scalability layers not in use, - * 2..15 if Annex N scalability layers in use - * - * sei parsed SEI data - * - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function gets supplemental enhancement information as defined - * in Annex L and W of H.263 and returns the parsed data. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - */ - -int vdxGetAndParseSEI( - bibBuffer_t *inBuffer, - int fPLUSPTYPE, - int numScalabilityLayers, - vdxSEI_t *sei, - int *bitErrorIndication) -/* {{-output"vdxGetAndParseSEI.txt"}} */ -{ - int - ret = VDX_OK, /* Temporary variable to carry return values */ - fSecondFTYPESet = 0, /* 1 = Extended FTYPE in use, - 0 = Annex L/W FTYPE in use, - see L.15 for further details */ - ftype, /* FTYPE as in section L.2 of H.263 */ - dsize, /* DSIZE as in section L.2 of H.263 */ - fLast, /* 1 if PEI is zero, 0 otherwise */ - cont = 0, /* CONT as in section W.6 of H.263 */ - ebit, /* EBIT as in section W.6 of H.263 */ - mtype, /* MTYPE as in section W.6 of H.263 */ - prevCONT = 0, /* CONT field in the previous picture msg */ - prevMTYPE = -1; /* MTYPE in the previous picture msg */ - - u_char - parameterData[16]; - - /* Initialize output data */ - sei->fFullPictureFreezeRequest = 0; - sei->fFullPictureSnapshot = 0; - sei->snapshotId = 0; - sei->snapshotStatus = 255; - sei->scalabilityLayer = -1; - sei->numScalabilityLayers = 0; - memset(sei->prevPicHeader, 0, VDX_MAX_BYTES_IN_PIC_HEADER); - sei->numBytesInPrevPicHeader = 0; - sei->numBitsInLastByteOfPrevPicHeader = 0; - sei->fPrevPicHeaderTooLarge = 0; - - do { - /* Get supplemental enhancement information */ - ret = vdxGetSEI(inBuffer, &ftype, &dsize, parameterData, &fLast, - bitErrorIndication); - - /* If fatal error or bit error */ - if (ret != VDX_OK) - return ret; - - /* If the previous FTYPE indicated Extended Function Type */ - if (fSecondFTYPESet) { - - /* Let's discard FTYPE/DSIZE and parameters as suggested in - section L.15 of H.263 Recommendation to allow backward - compatibility to to-be-defined set of extended FTYPEs. */ - - /* The next expected FTYPE is a normal one defined in Annex L/W. */ - fSecondFTYPESet = 0; - - continue; - } - - switch (ftype) { - - /* If "Reserved" */ - case 0: - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - break; - - /* If "Do Nothing" */ - case 1: - - if (dsize != 0) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Full-Picture Freeze Request */ - case 2: - if (dsize != 0) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - else - sei->fFullPictureFreezeRequest = 1; - - break; - - /* If Partial-Picture Freeze Request */ - case 3: - if (dsize != 4) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Resizing Partial-Picture Freeze Request */ - case 4: - if (dsize != 8) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Partial-Picture Freeze-Release Request */ - case 5: - if (dsize != 4) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Full-Picture Snapshot Tag */ - case 6: - if (dsize != 4) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - else { - int i; - sei->fFullPictureSnapshot = 1; - /* store 32-bit snapshot ID, first byte is the least significant */ - for (i = 0; i < 4; i++) - sei->snapshotId |= (parameterData[i] << (i<<3 /**8*/)); - } - - break; - - /* If Partial-Picture Snapshot Tag */ - case 7: - if (dsize != 8) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Video Time Segment Start Tag */ - case 8: - if (dsize != 4) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Video Time Segment End Tag */ - case 9: - if (dsize != 4) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Progressive Refinement Segment Start Tag */ - case 10: - if (dsize != 4) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Progressive Refinement Segment End Tag */ - case 11: - if (dsize != 4) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Chroma Keying Information */ - case 12: - if (dsize < 1 || dsize > 9) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Fixed-Point IDCT */ - case 13: - if (dsize != 1) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - break; - - /* If Picture Message */ - case 14: - /* DSIZE shall be at least 1 to carry CONT, EBIT, and MTYPE */ - if (dsize < 1) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - else { - cont = ( (parameterData[0] & 0x80) >> 7 ); - ebit = ( (parameterData[0] & 0x70) >> 4 ); - mtype = (parameterData[0] & 0x0f); - - if (mtype < 1 || mtype > 5) { - /* Non-text message, check restriction in W.6.2 */ - if (ebit != 0 && (cont == 1 || dsize == 1)) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - break; - } - } - - /* If the previous picture message indicated that the data - continues in the next picture message, but the current - message type differs from the previous one - (restricted in section W.6.1 of the H.263 Recommendation */ - if (prevCONT && mtype != prevMTYPE) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - break; - } - - /* If arbitrary binary data */ - if (mtype == 0) { - - /* Proprietary snapshot status indication */ - if (parameterData[1] == 83 && parameterData[2] == 115) { - if (dsize != 4) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - break; - } - sei->snapshotStatus = parameterData[3]; - } - - /* Proprietary Annex N scalability layer - indication */ - else if (parameterData[1] == 83 && parameterData[2] == 108) { - if (dsize != 4) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - break; - } - sei->scalabilityLayer = parameterData[3] >> 4; - sei->numScalabilityLayers = parameterData[3] & 15; - - /* If less than two scalability layers or - max number of scalability layers changes during - the sequence */ - if (sei->numScalabilityLayers < 2 || - (numScalabilityLayers >= 0 && - sei->numScalabilityLayers != - numScalabilityLayers)) { - - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - break; - } - } - } - - /* Else if Previous Picture Header Repetition */ - else if (mtype == 7) { - int - firstIndexToWrite, - numBytesToWrite; - - if (sei->numBytesInPrevPicHeader == 0) - /* The first two bytes of PSC = 0x00 0x00 */ - sei->numBytesInPrevPicHeader = 2; - - firstIndexToWrite = sei->numBytesInPrevPicHeader; - numBytesToWrite = dsize - 1; - sei->numBitsInLastByteOfPrevPicHeader = 8 - ebit; - - /* If buffer would overflow */ - if (firstIndexToWrite + numBytesToWrite > - VDX_MAX_BYTES_IN_PIC_HEADER) { - numBytesToWrite = - VDX_MAX_BYTES_IN_PIC_HEADER - firstIndexToWrite; - sei->numBitsInLastByteOfPrevPicHeader = 8; - sei->fPrevPicHeaderTooLarge = 1; - } - - if (numBytesToWrite) { - memcpy( - &sei->prevPicHeader[firstIndexToWrite], - ¶meterData[1], - numBytesToWrite); - - sei->numBytesInPrevPicHeader += numBytesToWrite; - } - } - - prevCONT = cont; - prevMTYPE = mtype; - } - break; - - /* If Extended Function Type */ - case 15: - if (dsize != 0) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - fSecondFTYPESet = 1; - - break; - } - } while (!fLast && ret == VDX_OK); - - /* If a picture message was not completed and the fault has not been - tracked earlier */ - if (prevCONT && ret == VDX_OK) { - ret = vdxActAfterIncorrectSEI( - inBuffer, fPLUSPTYPE, &fLast, bitErrorIndication); - } - - return ret; -} - - -/* - * GOB Layer Global Functions - */ - -/* {{-output"vdxGetGOBHeader.txt"}} */ -/* - * vdxGetGOBHeader - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * inpParam input parameters - * header output parameters: GOB header - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * Function: - * This function reads the H.263 GOB header. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - -int vdxGetGOBHeader( - bibBuffer_t *inBuffer, - const vdxGetGOBHeaderInputParam_t *inpParam, - vdxGOBHeader_t *header, - int *bitErrorIndication, - int aColorEffect, - int* aStartByteIndex, - int* aStartBitIndex, CMPEG4Transcoder *hTranscoder) -/* {{-output"vdxGetGOBHeader.txt"}} */ -{ - int - numBitsGot; - int16 - bibError = 0; - u_int32 - tmp = 0; /* temporary variable for reading some redundant bits */ - - vdxAssert(inBuffer != NULL); - vdxAssert(inpParam != NULL); - vdxAssert(header != NULL); - vdxAssert(bitErrorIndication != NULL); - - memset(header, 0, sizeof(vdxGOBHeader_t)); - *bitErrorIndication = 0; - - /* Assume that the existence of a GBSC has been checked, and - it is the next code in the buffer */ - - /* Flush stuffing (GSTUF) */ - if (inpParam->numStuffBits) - { - bibFlushBits(inpParam->numStuffBits, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - // if chroma has been removed and GSTUF is there, skip GSTUF bits to point to byte-aligned GBSC - if(aColorEffect==1 || aColorEffect==2) - { - (*aStartByteIndex)++; - *aStartBitIndex = 7; - } - } - - /* MVE */ - hTranscoder->H263GOBSliceHeaderBegin(); - - /* Flush GBSC */ - bibFlushBits(17, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - /* GBSC cannot contain fatal bit errors (checked earlier) */ - - /* GN */ - header->gn = (int) bibGetBits(5, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - /* If the GN field contains a fatal bit error or - the value of GN is not in the valid range 1..24. - This range is defined in section 5.2.3 of the standard. - - Notice that in general case one cannot assume that the maximum GN - of the picture is the same as in the previous picture (GOB) since - a picture header may have been lost and the header could have contained - an indication of a picture format change. Therefore we have to stick - to the overall maximum GN, equal to 24, here. */ - - if ( header->gn == 0 /* PSC */ || - header->gn > 24) { - deb0p("ERROR. GN illegal.\n"); - goto exitAfterBitError; - } - - if (inpParam->fCPM) { - /* GSBI */ - header->gsbi = (int) bibGetBits(2, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - } - /* GFID */ - header->gfid = (int) bibGetBits(2, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - /* GQUANT */ - header->gquant = (int) bibGetBits(5, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - if (header->gquant == 0) { - deb0p("ERROR. Illegal GQUANT.\n"); - goto exitAfterBitError; - } - - if (inpParam->fRPS) { - /* TRI */ - header->tri = (int) bibGetBits(1, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - /* If TR present */ - if (header->tri) { - /* TR */ - if (inpParam->fCustomPCF) - header->tr = (int) bibGetBits(10, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - else - header->tr = (int) bibGetBits(8, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - } - - /* TRPI */ - header->trpi = (int) bibGetBits(1, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - /* If TRP present */ - if (header->trpi) { - /* TRP */ - header->trp = (int) bibGetBits(10, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - deb2f(bcmDebFile, "TRPI in GOB header. GN = %d, TRP = %d.\n", - header->gn, header->trp); - } - - /* BCI */ - /* Code following the standard */ - - /* BCI */ - tmp = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - if ( tmp ) { - /* BCM not supported */ - deb0p("ERROR. BCM not supported.\n"); - goto exitAfterBitError; - } - - else { - tmp = bibGetBits(1, inBuffer, &numBitsGot,bitErrorIndication, &bibError); - - - if ( !tmp ) { - /* BCI '00' is illegal */ - deb0p("ERROR. Illegal BCI.\n"); - goto exitAfterBitError; - } - } - - - } - - /* Check success and return */ - - - /* If no error in bit buffer functions */ - if (!bibError) - return VDX_OK; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; - - exitAfterBitError: - if (bibError && bibError != ERR_BIB_NOT_ENOUGH_DATA) - return VDX_ERR_BIB; - - return VDX_OK_BUT_BIT_ERROR; -} - -/* - * Slice Layer Global Functions - */ - -/* {{-output"vdxGetSliceHeader.txt"}} */ -/* - * vdxGetSliceHeader - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * inpParam input parameters - * header output parameters: Slice header - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * Function: - * This function reads the H.263 Slice header. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - */ - -int vdxGetSliceHeader( - bibBuffer_t *inBuffer, - const vdxGetSliceHeaderInputParam_t *inpParam, - vdxSliceHeader_t *header, - int *bitErrorIndication) -/* {{-output"vdxGetSliceHeader.txt"}} */ -{ - int - numBitsGot; - int16 - bibError = 0; - u_int32 - tmp = 0; /* temporary variable for reading some redundant bits */ - - - vdxAssert(inBuffer != NULL); - vdxAssert(inpParam != NULL); - vdxAssert(header != NULL); - vdxAssert(bitErrorIndication != NULL); - - memset(header, 0, sizeof(vdxSliceHeader_t)); - *bitErrorIndication = 0; - - if (!inpParam->sliceHeaderAfterPSC) { - /* Flush stuffing (GSTUF) */ - if (inpParam->numStuffBits) - bibFlushBits(inpParam->numStuffBits, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - /* Flush SSC */ - /* Assume that the existence of a SSC has been checked, and - it is the next code in the buffer */ - - bibFlushBits(17, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - /* SSC cannot contain fatal bit errors (checked earlier) */ - } - - /* Read SEPB1 (K.2.3) */ - tmp = (int) bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - if (tmp != 1) { - deb0p("ERROR. SEPB1 illegal.\n"); - goto exitAfterBitError; - } - - /* SSBI */ - if ((inpParam->fCPM) && (!inpParam->sliceHeaderAfterPSC)) { - header->ssbi = (int) bibGetBits(4, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - /* If the SSBI field contains a fatal bit error or - the value of SSBI is not in the valid range 9..12. - This range is defined in Table K.1/H.263 */ - if ( tmp < 9 || - tmp > 12) { - deb0p("ERROR. SSBI illegal.\n"); - goto exitAfterBitError; - } - /* Set emulated GN value */ - header->gn = header->ssbi + 16; - /* Set sub-bitstream number */ - if (header->gn < 29) - header->sbn = header->ssbi - 9; - else - header->sbn = 3; - } - - - /* MBA */ - header->mba = (int) bibGetBits(inpParam->mbaFieldWidth, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - /* If the MBA field contains a fatal bit error or - the value of MBA is larger than Max Value defined in Table K.2/H.263 */ - if ( header->mba > inpParam->mbaMaxValue) { - deb0p("ERROR. MBA illegal.\n"); - goto exitAfterBitError; - } - - /* SEPB2 */ - if (inpParam->sliceHeaderAfterPSC) { - if (inpParam->fRectangularSlices) { - tmp = (int) bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - if (tmp != 1) { - deb0p("ERROR. SEPB1 illegal.\n"); - goto exitAfterBitError; - } - } - } - else { - if (inpParam->fCPM) { - if (inpParam->mbaFieldWidth > 9) { - tmp = (int) bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - if (tmp != 1) { - deb0p("ERROR. SEPB1 illegal.\n"); - goto exitAfterBitError; - } - } - } - else { - if (inpParam->mbaFieldWidth > 11) { - tmp = (int) bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - if (tmp != 1) { - deb0p("ERROR. SEPB1 illegal.\n"); - goto exitAfterBitError; - } - } - } - } - - /* SQUANT */ - if (!inpParam->sliceHeaderAfterPSC) { - header->squant = (int) bibGetBits(5, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - if ( bibError ) - return VDX_ERR_BIB; - - /* If the SQUANT field contains a fatal bit error or - the value of SQUANT is between 1 and 31 */ - if ( header->squant == 0) { - deb0p("ERROR. SQUANT illegal.\n"); - goto exitAfterBitError; - } - } - - /* SWI */ - if (inpParam->fRectangularSlices) { - header->swi = (int) bibGetBits(inpParam->swiFieldWidth, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - /* If the MBA field contains a fatal bit error or - the value of MBA is larger than Max Value defined in Table K.2/H.263 */ - if ( header->swi > inpParam->swiMaxValue) { - deb0p("ERROR. SWI illegal.\n"); - goto exitAfterBitError; - } - } - - /* Read SEPB3 */ - tmp = (int) bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - if (tmp != 1) { - deb0p("ERROR. SEPB3 illegal.\n"); - goto exitAfterBitError; - } - - /* GFID */ - if (!inpParam->sliceHeaderAfterPSC) { - header->gfid = (int) bibGetBits(2, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - } - - if (!inpParam->sliceHeaderAfterPSC && inpParam->fRPS) { - /* TRI */ - header->tri = (int) bibGetBits(1, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - /* If TR present */ - if (header->tri) { - /* TR */ -/* if (inpParam->fCustomPCF) - header->tr = (int) bibGetBits(10, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - else*/ - header->tr = (int) bibGetBits(8, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - } - - /* TRPI */ - header->trpi = (int) bibGetBits(1, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - /* If TRP present */ - if (header->trpi) { - /* TRP */ - header->trp = (int) bibGetBits(10, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - deb2f(bcmDebFile, "TRPI in GOB header. GN = %d, TRP = %d.\n", - header->gn, header->trp); - } - - /* BCI */ - /* Code following the standard */ - - /* BCI */ - tmp = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - if ( tmp ) { - /* BCM not supported */ - deb0p("ERROR. BCM not supported.\n"); - goto exitAfterBitError; - } - - else { - tmp = bibGetBits(1, inBuffer, &numBitsGot,bitErrorIndication, &bibError); - - - if ( !tmp ) { - /* BCI '00' is illegal */ - deb0p("ERROR. Illegal BCI.\n"); - goto exitAfterBitError; - } - } - - - } - - /* Check success and return */ - - - /* If no error in bit buffer functions */ - if (!bibError) - return VDX_OK; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; - exitAfterBitError: - if (bibError && bibError != ERR_BIB_NOT_ENOUGH_DATA) - return VDX_ERR_BIB; - - return VDX_OK_BUT_BIT_ERROR; -} -/* {{-output"vdxGetMBAandSWIValues.txt"}} */ -/* - * vdxGetIMBLayer - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * inpParam input parameters - * outParam output parameters - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * Function: - * This function reads the macroblock layer data of an INTRA macroblock. - * - * Returns: - * Nothing - * - */ - -void vdxGetMBAandSWIValues( - int width, - int height, - int fRRU, - int *mbaFieldWidth, - int *mbaMaxValue, - int *swiFieldWidth, - int *swiMaxValue - ) -{ - int - pictureFormat; - - pictureFormat = vdxFrameSizeToPictureFormat(width, height); - - if (fRRU) { - switch (pictureFormat) { - case 0: - /* sub-QCIF */ - *mbaFieldWidth = 5; - *mbaMaxValue = 11; - *swiFieldWidth = 3; - *swiMaxValue = 3; - break; - case 1: - /* QCIF */ - *mbaFieldWidth = 6; - *mbaMaxValue = 29; - *swiFieldWidth = 3; - *swiMaxValue = 5; - break; - case 2: - /* CIF */ - *mbaFieldWidth = 7; - *mbaMaxValue = 98; - *swiFieldWidth = 4; - *swiMaxValue = 10; - break; - case 3: - /* 4CIF */ - *mbaFieldWidth = 9; - *mbaMaxValue = 395; - *swiFieldWidth = 5; - *swiMaxValue = 21; - break; - case 4: - /* 16CIF */ - *mbaFieldWidth = 11; - *mbaMaxValue = 1583; - *swiFieldWidth = 6; - *swiMaxValue = 43; - break; - case 5: - /* 2048x1152 */ - *mbaFieldWidth = 12; - *mbaMaxValue = 2303; - *swiFieldWidth = 6; - *swiMaxValue = 63; - break; - } - } - else { - switch (pictureFormat) { - case 0: - /* sub-QCIF */ - *mbaFieldWidth = 6; - *mbaMaxValue = 47; - *swiFieldWidth = 4; - *swiMaxValue = 7; - break; - case 1: - /* QCIF */ - *mbaFieldWidth = 7; - *mbaMaxValue = 98; - *swiFieldWidth = 4; - *swiMaxValue = 10; - break; - case 2: - /* CIF */ - *mbaFieldWidth = 9; - *mbaMaxValue = 395; - *swiFieldWidth = 5; - *swiMaxValue = 21; - break; - case 3: - /* 4CIF */ - *mbaFieldWidth = 11; - *mbaMaxValue = 1583; - *swiFieldWidth = 6; - *swiMaxValue = 43; - break; - case 4: - /* 16CIF */ - *mbaFieldWidth = 13; - *mbaMaxValue = 6335; - *swiFieldWidth = 7; - *swiMaxValue = 87; - break; - case 5: - /* 2048x1152 */ - *mbaFieldWidth = 14; - *mbaMaxValue = 9215; - *swiFieldWidth = 7; - *swiMaxValue = 127; - break; - } - } -} - -/* - * Macroblock Layer Global Functions - */ - -/* {{-output"vdxGetIMBLayer.txt"}} */ -/* - * vdxGetIMBLayer - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * inpParam input parameters - * outParam output parameters - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * Function: - * This function reads the macroblock layer data of an INTRA macroblock. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - - -int vdxGetIMBLayer( - bibBuffer_t *inBuffer, - bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, - int /*aColorEffect*/, - int * /*aStartByteIndex*/, - int * /*aStartBitIndex*/, - TBool /*aGetDecodedFrame*/, - const vdxGetIMBLayerInputParam_t *inpParam, - vdxIMBLayer_t *outParam, - int *bitErrorIndication, CMPEG4Transcoder *hTranscoder) - -/* {{-output"vdxGetIMBLayer.txt"}} */ -{ - int - mcbpcIndex, - cbpyIndex, - retValue = VDX_OK, - fDQUANT = 0, - fINTRAMODE, - bitsGot = 0; - int16 bibError = 0; - - int StartByteIndex; - int StartBitIndex; - - vdxAssert(inBuffer != NULL); - vdxAssert(inpParam != NULL); - vdxAssert(outParam != NULL); - vdxAssert(bitErrorIndication != NULL); - - /* MVE */ - vdxIMBListItem_t *MBinstance; - // Create new MBInstance for the next MB - MBinstance = (vdxIMBListItem_t *) malloc(sizeof(vdxIMBListItem_t)); - if (!MBinstance) - { - deb("ERROR - vdxGetIMBLayer::MBinstance creation failed\n"); - return H263D_ERROR; - } - memset(MBinstance, 0, sizeof(vdxIMBListItem_t)); - - /* Loop while MCBPC indicates stuffing */ - do { - - StartByteIndex = inBuffer->getIndex; - StartBitIndex = inBuffer->bitIndex; - - /* MVE */ - VDT_SET_START_POSITION(MBinstance,0,inBuffer->getIndex,inBuffer->bitIndex); // 0: mcbpc - - retValue = vdxGetMCBPCIntra(inBuffer, &mcbpcIndex, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - /* MVE */ - /* remember to output the MB stufffing bits!! */ - if (mcbpcIndex == 8) - { - /* copy data from inbuffer to outbuffer */ - bufEdit->copyMode = CopyWhole; // copy whole - CopyStream(inBuffer,outBuffer,bufEdit,StartByteIndex,StartBitIndex); - } - } while (mcbpcIndex == 8); - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,0,inBuffer->getIndex,inBuffer->bitIndex); // 0: mcbpc - - /* CBPC (2 LSBs of MCBPC) */ - outParam->cbpc = mcbpcIndex & 3; - - /* DQUANT is given for MCBPC indexes 4..7 */ - fDQUANT = mcbpcIndex & 4; - - /* MB Type*/ - outParam->mbType = (mcbpcIndex <4)?3:4; - - /* INTRA_MODE */ - if (inpParam->fAIC) - { - retValue = vdxGetIntraMode(inBuffer,&fINTRAMODE,bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - outParam->predMode = fINTRAMODE; - } - - /* ac_pred_flag (1 bit) */ - if (inpParam->fMPEG4) { - outParam->ac_pred_flag = (u_char) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - } - - /* MVE */ - VDT_SET_START_POSITION(MBinstance,2,inBuffer->getIndex,inBuffer->bitIndex); // 2: cbpy - - /* CBPY */ - retValue = vdxGetCBPY(inBuffer, &cbpyIndex, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - outParam->cbpy = cbpyIndex; - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,2,inBuffer->getIndex,inBuffer->bitIndex); // 2: cbpy - VDT_SET_START_POSITION(MBinstance,1,inBuffer->getIndex,inBuffer->bitIndex); // 1: dquant - - if (fDQUANT) { - retValue = vdxUpdateQuant(inBuffer, inpParam->fMQ, inpParam->quant, - &outParam->quant, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - } - - /* Else no DQUANT */ - else - outParam->quant = inpParam->quant; - - /* Color Toning */ - hTranscoder->AfterMBLayer(outParam->quant); - -exitFunction: - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,1,inBuffer->getIndex,inBuffer->bitIndex); // 1: dquant - outParam->mcbpc = mcbpcIndex; - - MBinstance->mcbpc = mcbpcIndex; - MBinstance->quant = outParam->quant; - MBinstance->cbpc = outParam->cbpc; - MBinstance->cbpy = outParam->cbpy; - MBinstance->ac_pred_flag = outParam->ac_pred_flag; - MBinstance->dquant = fDQUANT ? outParam->quant - inpParam->quant : 0; - - hTranscoder->OneIMBDataStarted(MBinstance); - free(MBinstance); - - return retValue; -} - - -/* {{-output"vdxGetPPBMBLayer.txt"}} */ -/* - * vdxGetPPBMBLayer - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * inpParam input parameters - * outParam output parameters - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * Function: - * This function reads the macroblock layer data of an INTER macroblock. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - - -int vdxGetPPBMBLayer( - bibBuffer_t *inBuffer, - bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, - int /*aColorEffect*/, - int */*aStartByteIndex*/, - int */*aStartBitIndex*/, - TBool /*aGetDecodedFrame*/, - int * /*bwMBType*/, - const vdxGetPPBMBLayerInputParam_t *inpParam, - vdxPPBMBLayer_t *outParam, - int *bitErrorIndication, CMPEG4Transcoder *hTranscoder) - -/* {{-output"vdxGetPPBMBLayer.txt"}} */ -{ - static const int mbTypeToMBClass[6] = - {VDX_MB_INTER, VDX_MB_INTER, VDX_MB_INTER, - VDX_MB_INTRA, VDX_MB_INTRA, VDX_MB_INTER}; - - static const int mbTypeToDQUANTI[6] = - {0, 1, 0, 0, 1, 1}; - - int - numBitsGot, - retValue = VDX_OK, - mcbpc, - mbType, - mbClass, - fDQUANT = 0, - fMVD, - numMVs, - fCBPB, - fMVDB, - cbpyIndex, - fINTRAMODE; - int16 - bibError = 0; - u_int32 - bits; - - int StartByteIndex; - int StartBitIndex; - - vdxAssert(inBuffer != NULL); - vdxAssert(inpParam != NULL); - vdxAssert(inpParam->pictureType == VDX_PIC_TYPE_P || - inpParam->pictureType == VDX_PIC_TYPE_PB|| - inpParam->pictureType == VDX_PIC_TYPE_IPB); - vdxAssert(outParam != NULL); - vdxAssert(bitErrorIndication != NULL); - - /* MVE */ -// int startByteIndex = inBuffer->getIndex; -// int startBitIndex = inBuffer->bitIndex; - - vdxPMBListItem_t *MBinstance; - // Create new MBInstance for the next MB - MBinstance = (vdxPMBListItem_t *) malloc(sizeof(vdxPMBListItem_t)); - if (!MBinstance) - { - deb("ERROR - vdxGetPMBLayer::MBinstance creation failed\n"); - goto exitFunction; - } - memset(MBinstance, 0, sizeof(vdxPMBListItem_t)); - VDT_SET_START_POSITION(MBinstance,11,0,7); // 11: MB stuffing bits - VDT_SET_END_POSITION(MBinstance,11,0,7); // 11: MB stuffing bits - - /* Set default output values */ - memset(outParam, 0, sizeof(vdxPPBMBLayer_t)); - outParam->quant = inpParam->quant; - - /* Loop while MCBPC indicates stuffing */ - do { - - // note: stufffing includes COD+MCBPC in P frames - StartByteIndex = inBuffer->getIndex; - StartBitIndex = inBuffer->bitIndex; - - /* COD */ - bits = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - outParam->fCodedMB = (int) bits ^ 1; - - /* If not coded (i.e. if COD == 1) */ - if (bits) - goto exitFunction; - - /* Else coded (i.e. if COD == 0) */ - else { - /* MCBPC */ - - /* MVE */ - VDT_SET_START_POSITION(MBinstance,0,inBuffer->getIndex,inBuffer->bitIndex); // 0: mcbpc - - retValue = vdxGetMCBPCInter( - inBuffer, - inpParam->fPLUSPTYPE, - inpParam->fAP || inpParam->fDF, - inpParam->fFirstMBOfPicture, - &mcbpc, - bitErrorIndication); - - if (retValue != VDX_OK) - goto exitFunction; - - /* See section 5.3.2 of the H.263 recommendation to find out - the details of this illegal codeword check. */ - if (mcbpc == 20 && - inpParam->pictureType == VDX_PIC_TYPE_IPB && - inpParam->fCustomSourceFormat && - inpParam->fFirstMBOfPicture) - { - deb0p("ERROR. Illegal MCBPC stuffing.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* MVE */ - /* remember to output the MB stufffing bits!! */ - if (mcbpc == 20) - { - // copy data from inbuffer to outbuffer - bufEdit->copyMode = CopyWhole; // copy whole - CopyStream(inBuffer,outBuffer,bufEdit,StartByteIndex,StartBitIndex); - } - } - } while (mcbpc == 20); - - /* Decrease indexes > 20 to enable consistent MCBPC handling */ - if (mcbpc > 20) - mcbpc--; - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,0,inBuffer->getIndex,inBuffer->bitIndex); // 0: mcbpc - - /* CBPC (2 LSBs of MCBPC) */ - outParam->cbpc = mcbpc & 3; - - /* MCBPC --> MB type & included data elements */ - mbType = outParam->mbType = mcbpc / 4; - mbClass = outParam->mbClass = mbTypeToMBClass[mbType]; - fDQUANT = mbTypeToDQUANTI[mbType]; - /* MVD is included always for PB-frames and always if MB type is INTER */ - fMVD = inpParam->pictureType != VDX_PIC_TYPE_P || mbClass == VDX_MB_INTER; - numMVs = outParam->numMVs = - (fMVD) ? - ((mbType == 2 || mbType == 5) ? 4 : 1) : - 0; - - /* 4 MVs can be present only when in Advanced Prediction or Deblocking - Filter mode */ - if (numMVs == 4 && !inpParam->fAP && !inpParam->fDF) { - deb0p("ERROR. Illegal MCBPC.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* INTRA_MODE */ - if ((inpParam->fAIC)&&((mbType == 3) || (mbType == 4))) - { - retValue = vdxGetIntraMode(inBuffer,&fINTRAMODE,bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - outParam->predMode = fINTRAMODE; - } - - if (inpParam->pictureType == VDX_PIC_TYPE_PB) { - int modbIndex; - /* MODB */ - retValue = vdxGetNormalMODB(inBuffer, &modbIndex, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - fCBPB = (int) (modbIndex & 2); - fMVDB = outParam->fMVDB = (int) (modbIndex > 0); - } - else if (inpParam->pictureType == VDX_PIC_TYPE_IPB) - { - int modbIndex; - /* MODB in Improved PB mode */ - retValue = vdxGetImpPBMODB(inBuffer,&modbIndex,bitErrorIndication); - fCBPB = (int) (modbIndex & 1); - fMVDB = outParam->fMVDB = (int) ((modbIndex & 2)>>1); - outParam->IPBPredMode = (int) (modbIndex / 2); - } - else { - fCBPB = 0; - fMVDB = outParam->fMVDB = 0; - } - - if (fCBPB) { - /* CBPB */ - outParam->cbpb = (int) bibGetBits(6, inBuffer, &numBitsGot, - bitErrorIndication, &bibError); - - - } - else - outParam->cbpb = 0; - - /* ac_pred_flag (1 bit) */ - if (inpParam->fMPEG4) { - if (mbClass == VDX_MB_INTRA) { - outParam->ac_pred_flag = (u_char) bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - } - } - - /* MVE */ - VDT_SET_START_POSITION(MBinstance,2,inBuffer->getIndex,inBuffer->bitIndex); // 2: cbpy - - /* CBPY */ - retValue = vdxGetCBPY(inBuffer, &cbpyIndex, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - if (mbClass == VDX_MB_INTER) - /* Convert index to INTER CBPY */ - outParam->cbpy = 15 - cbpyIndex; - - else - outParam->cbpy = cbpyIndex; - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,2,inBuffer->getIndex,inBuffer->bitIndex); // 2: cbpy - VDT_SET_START_POSITION(MBinstance,1,inBuffer->getIndex,inBuffer->bitIndex); // 1: dquant - - if (fDQUANT) { - /* Get DQUANT and update QUANT */ - retValue = vdxUpdateQuant(inBuffer, inpParam->fMQ, inpParam->quant, - &outParam->quant, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - } - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,1,inBuffer->getIndex,inBuffer->bitIndex); // 1: dquant - VDT_SET_START_POSITION(MBinstance,10,inBuffer->getIndex,inBuffer->bitIndex); // 10: mv - - /* Color Toning */ - hTranscoder->AfterMBLayer(outParam->quant); - - - if (fMVD) { - int i; - - /* If no new Annex D is in use */ - if (!inpParam->fPLUSPTYPE || !inpParam->fUMV) { - - if (inpParam->fMPEG4) { - for (i = 0; i < numMVs; i++) { - retValue = vdxGetScaledMVD(inBuffer,inpParam->f_code,&outParam->mvdx[i],bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - retValue = vdxGetScaledMVD(inBuffer,inpParam->f_code,&outParam->mvdy[i],bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - } - } else { - for (i = 0; i < numMVs; i++) { - retValue = vdxGetMVD(inBuffer, &outParam->mvdx[i], bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - retValue = vdxGetMVD(inBuffer, &outParam->mvdy[i], bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - } - } - } - - else if (inpParam->fPLUSPTYPE && inpParam->fUMV) /* Annex D */ - { - for (i = 0; i < numMVs; i++) - { - retValue = vdxUMVGetMVD(inBuffer,&outParam->mvdx[i],bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - retValue = vdxUMVGetMVD(inBuffer,&outParam->mvdy[i],bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - if ((outParam->mvdx[i] == 5) && (outParam->mvdy[i] == 5)) - /* Read "Prevent Start Code Emulation bit" if 000000 occurs */ - { - bits = bibGetBits(1,inBuffer,&numBitsGot,bitErrorIndication, - &bibError); - - - if (!bits) { - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - } - } - } - } - - if (fMVDB) { - int i; - if (!inpParam->fPLUSPTYPE || !inpParam->fUMV) - { - retValue = vdxGetMVD(inBuffer,&outParam->mvdbx,bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - retValue = vdxGetMVD(inBuffer,&outParam->mvdby,bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - } - else if (inpParam->fPLUSPTYPE && inpParam->fUMV) /* Annex D */ - { - for (i = 0; i < numMVs; i++) - { - retValue = vdxUMVGetMVD(inBuffer,&outParam->mvdbx,bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - retValue = vdxUMVGetMVD(inBuffer,&outParam->mvdby,bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - if ((outParam->mvdbx == 5) && (outParam->mvdby == 5)) - /* Read "Prevent Start Code Emulation bit" if 000000 occurs */ - { - bits = bibGetBits(1,inBuffer,&numBitsGot,bitErrorIndication, - &bibError); - - if (!bits) { - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - } - } - } - } - - - -exitFunction: - - /* MVE */ - /* PB frame is not allowed !!! */ - VDT_SET_END_POSITION(MBinstance,10,inBuffer->getIndex,inBuffer->bitIndex); // 10: mv - outParam->mcbpc = mcbpc; - - for (int i = 0; i < outParam->numMVs; i++) - { - MBinstance->mvx[i] = outParam->mvdx[i]; - MBinstance->mvy[i] = outParam->mvdy[i]; - } - - MBinstance->mcbpc = outParam->mcbpc; - MBinstance->fCodedMB = (unsigned char)outParam->fCodedMB ; - MBinstance->mbType = outParam->mbType; - MBinstance->mbClass = outParam->mbClass; - MBinstance->quant = outParam->quant; - MBinstance->cbpc = outParam->cbpc; - MBinstance->cbpy = outParam->cbpy; - MBinstance->ac_pred_flag = outParam->ac_pred_flag; - MBinstance->numMVs = outParam->numMVs; - MBinstance->dquant = fDQUANT ? outParam->quant - inpParam->quant : 0; - - hTranscoder->OnePMBDataStarted(MBinstance); - free(MBinstance); - - return retValue; -} - - -/* - * Block Layer Global Functions - */ - -/* {{-output"vdxGetIntraDCTBlock.txt"}} */ -/* - * vdxGetIntraDCTBlock - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * fCodedBlock 0 if COD is 1, 1 if COD is 0 - * block DCT coefficients of the block - * in zigzag order - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * fMQ flag for Modified Quantization - * qp quantization parameter - * - * Function: - * This function gets the DCT coefficients for one INTRA block. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - -int vdxGetIntraDCTBlock( - bibBuffer_t *inBuffer, - int fCodedBlock, - int *block, - int *bitErrorIndication, - int fMQ, - int qp) -/* {{-output"vdxGetIntraDCTBlock.txt"}} */ -{ - int - numBitsGot, - retValue = VDX_OK; - int16 - bibError = 0; - u_int32 - bits; - - vdxAssert(inBuffer != NULL); - vdxAssert(block != NULL); - vdxAssert(bitErrorIndication != NULL); - - /* MVE */ - int fEscapeCodeUsed = 0; - - /* INTRADC */ - bits = bibGetBits(8, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - block[0] = (int) (bits << 3); - - /* If (FLC == 1111 1111) */ - if (block[0] == 2040) - block[0] = 1024; - - - if (fCodedBlock) - retValue = vdxGetDCTBlock(inBuffer, 1, 0, block, bitErrorIndication, fMQ,qp, &fEscapeCodeUsed); - - else - memset(block + 1, 0, 63 * sizeof(int)); - - return retValue; - - -} - - -/* {{-output"vdxGetDCTBlock.txt"}} */ -/* - * vdxGetDCTBlock - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * startIndex the first index in block where to put data - * fMPEG4EscapeCodes use MPEG-4 escape codes (3 alternatives) - * block array for block (length 64) - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * fMQ - * qp - * fEscapeCodeUsed - * Function: - * This function reads a block from bit buffer using Huffman codes listed - * in TCOEF table. The place, where the block is read is given as a - * pointer parameter. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - * - */ - -int vdxGetDCTBlock( - bibBuffer_t *inBuffer, - int startIndex, - u_char fMPEG4EscapeCodes, - int *block, - int *bitErrorIndication, - int fMQ, - int qp, - int *fEscapeCodeUsed) -/* {{-output"vdxGetDCTBlock.txt"}} */ -{ - /* Lookup tables: val field contains - 1 bit for LAST, 8 bits for RUN and 4 bits for LEVEL */ - static const vdxVLCTable_t tcoefTab0[] = { - {4225,7}, {4209,7}, {4193,7}, {4177,7}, {193,7}, {177,7}, - {161,7}, {4,7}, {4161,6}, {4161,6}, {4145,6}, {4145,6}, - {4129,6}, {4129,6}, {4113,6}, {4113,6}, {145,6}, {145,6}, - {129,6}, {129,6}, {113,6}, {113,6}, {97,6}, {97,6}, - {18,6}, {18,6}, {3,6}, {3,6}, {81,5}, {81,5}, - {81,5}, {81,5}, {65,5}, {65,5}, {65,5}, {65,5}, - {49,5}, {49,5}, {49,5}, {49,5}, {4097,4}, {4097,4}, - {4097,4}, {4097,4}, {4097,4}, {4097,4}, {4097,4}, {4097,4}, - {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, - {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, - {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, - {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, - {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, - {1,2}, {1,2}, {17,3}, {17,3}, {17,3}, {17,3}, - {17,3}, {17,3}, {17,3}, {17,3}, {17,3}, {17,3}, - {17,3}, {17,3}, {17,3}, {17,3}, {17,3}, {17,3}, - {33,4}, {33,4}, {33,4}, {33,4}, {33,4}, {33,4}, - {33,4}, {33,4}, {2,4}, {2,4}, {2,4}, {2,4}, - {2,4}, {2,4}, {2,4}, {2,4} - }; - - static const vdxVLCTable_t tcoefTab1[] = { - {9,10}, {8,10}, {4481,9}, {4481,9}, {4465,9}, {4465,9}, - {4449,9}, {4449,9}, {4433,9}, {4433,9}, {4417,9}, {4417,9}, - {4401,9}, {4401,9}, {4385,9}, {4385,9}, {4369,9}, {4369,9}, - {4098,9}, {4098,9}, {353,9}, {353,9}, {337,9}, {337,9}, - {321,9}, {321,9}, {305,9}, {305,9}, {289,9}, {289,9}, - {273,9}, {273,9}, {257,9}, {257,9}, {241,9}, {241,9}, - {66,9}, {66,9}, {50,9}, {50,9}, {7,9}, {7,9}, - {6,9}, {6,9}, {4353,8}, {4353,8}, {4353,8}, {4353,8}, - {4337,8}, {4337,8}, {4337,8}, {4337,8}, {4321,8}, {4321,8}, - {4321,8}, {4321,8}, {4305,8}, {4305,8}, {4305,8}, {4305,8}, - {4289,8}, {4289,8}, {4289,8}, {4289,8}, {4273,8}, {4273,8}, - {4273,8}, {4273,8}, {4257,8}, {4257,8}, {4257,8}, {4257,8}, - {4241,8}, {4241,8}, {4241,8}, {4241,8}, {225,8}, {225,8}, - {225,8}, {225,8}, {209,8}, {209,8}, {209,8}, {209,8}, - {34,8}, {34,8}, {34,8}, {34,8}, {19,8}, {19,8}, - {19,8}, {19,8}, {5,8}, {5,8}, {5,8}, {5,8} - }; - - static const vdxVLCTable_t tcoefTab2[] = { - {4114,11}, {4114,11}, {4099,11}, {4099,11}, {11,11}, {11,11}, - {10,11}, {10,11}, {4545,10}, {4545,10}, {4545,10}, {4545,10}, - {4529,10}, {4529,10}, {4529,10}, {4529,10}, {4513,10}, {4513,10}, - {4513,10}, {4513,10}, {4497,10}, {4497,10}, {4497,10}, {4497,10}, - {146,10}, {146,10}, {146,10}, {146,10}, {130,10}, {130,10}, - {130,10}, {130,10}, {114,10}, {114,10}, {114,10}, {114,10}, - {98,10}, {98,10}, {98,10}, {98,10}, {82,10}, {82,10}, - {82,10}, {82,10}, {51,10}, {51,10}, {51,10}, {51,10}, - {35,10}, {35,10}, {35,10}, {35,10}, {20,10}, {20,10}, - {20,10}, {20,10}, {12,11}, {12,11}, {21,11}, {21,11}, - {369,11}, {369,11}, {385,11}, {385,11}, {4561,11}, {4561,11}, - {4577,11}, {4577,11}, {4593,11}, {4593,11}, {4609,11}, {4609,11}, - {22,12}, {36,12}, {67,12}, {83,12}, {99,12}, {162,12}, - {401,12}, {417,12}, {4625,12}, {4641,12}, {4657,12}, {4673,12}, - {4689,12}, {4705,12}, {4721,12}, {4737,12}, {7167,7}, - {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, - {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, - {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, - {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, - {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, - {7167,7} - }; - - static const int inter_max_level[2][64] = { - {12, 6, 4, 3, 3, 3, 3, 2, - 2, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}, - - {3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0} - }; - - static const int inter_max_run0[13] = { 999, - 26, 10, 6, 2, 1, 1, - 0, 0, 0, 0, 0, 0 - }; - - static const int inter_max_run1[4] = { 999, 40, 1, 0 }; - - int - numBitsGot, /* number of bits got from bit buffer */ - retValue = VDX_OK, - code, /* bits got from bit buffer */ - index, /* index to zigzag table running from 1 to 63 */ - run, /* RUN code */ - level; /* LEVEL code */ - - int16 - bibError = 0; - - u_int32 - last, /* LAST code (see standard) */ - sign, /* sign for level */ - tmp; /* temporary variable for reading some redundant bits */ - - vdxVLCTable_t const *tab; /* pointer to lookup table */ - - vdxAssert(inBuffer != NULL); - vdxAssert(startIndex == 0 || startIndex == 1); - vdxAssert(block != NULL); - vdxAssert(bitErrorIndication != NULL); - - /* Reset all coefficients to zero in order to avoid writing - zeros one by one during run-length decoding */ - memset(&block[startIndex], 0, (64 - startIndex) * sizeof(int)); - - index = startIndex; - - /* MVE */ - *fEscapeCodeUsed = 0; - - do { - /* Read next codeword */ - code = (int) bibShowBits(12, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - /* Select the right table and index for the codeword */ - if (code >= 512) - tab = &tcoefTab0[(code >> 5) - 16]; - else if (code >= 128) - tab = &tcoefTab1[(code >> 2) - 32]; - else if (code >= 8) - tab = &tcoefTab2[code - 8]; - else { - deb("ERROR - illegal TCOEF\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* Flush the codeword from the buffer */ - bibFlushBits(tab->len, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - if (tab->val == 7167) /* ESCAPE */ - { - - - /* the following is modified for 3-mode escape */ - if(fMPEG4EscapeCodes) { - - int run_offset=0, - level_offset=0; - - code = (int) bibShowBits(2, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - if (code<=2) { - - /* escape modes: level or run is offset */ - if (code==2) run_offset=1; - else level_offset=1; - - /* Flush the escape code from the buffer */ - if (run_offset) - bibFlushBits(2, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - else - bibFlushBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - /* Read next codeword */ - code = (int) bibShowBits(12, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - - /* Select the right table and index for the codeword */ - if (code >= 512) - tab = &tcoefTab0[(code >> 5) - 16]; - else if (code >= 128) - tab = &tcoefTab1[(code >> 2) - 32]; - else if (code >= 8) - tab = &tcoefTab2[code - 8]; - else { - deb("ERROR - illegal TCOEF\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - bibFlushBits(tab->len, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - run = (tab->val >> 4) & 255; - level = tab->val & 15; - last = (tab->val >> 12) & 1; - - /* need to add back the max level */ - if (level_offset) - level = level + inter_max_level[last][run]; - else if (last) - run = run + inter_max_run1[level]+1; - else - run = run + inter_max_run0[level]+1; - - sign = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - - if (sign) - level = -level; - - } else { - - /* Flush the codeword from the buffer */ - bibFlushBits(2, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - - /* LAST */ - last = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - - /* RUN */ - run = (int) bibGetBits(6, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - /* MARKER BIT */ - tmp = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication,&bibError); - - - if(!tmp) { - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - /* LEVEL */ - level = (int) bibGetBits(12, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - /* MARKER BIT */ - tmp = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication,&bibError); - - - if ( !tmp ) { - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* 0000 0000 0000 and 1000 0000 0000 is forbidden unless in MQ mode */ - if (level == 0 || level == 2048) { - deb("ERROR - illegal level.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* Codes 1000 0000 0001 .. 1111 1111 1111 */ - if (level > 2048) - level -= 4096; - - } /* flc */ - - } else { /* !fMPEG4EscapeCodes */ - - /* MVE */ - *fEscapeCodeUsed = 1; - - /* LAST */ - last = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - /* RUN */ - run = (int) bibGetBits(6, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - /* LEVEL */ - level = (int) bibGetBits(8, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - /* Codes 1000 0001 .. 1111 1111 */ - if (level > 128) - level -= 256; - - - /* 0000 0000 is forbidden, 1000 0000 is forbidden unless in MQ mode */ - if (level == 0) { - deb("ERROR - illegal level.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - if (level == 128) - { - if (fMQ) - { - level = (int) bibGetBits(11,inBuffer,&numBitsGot, - bitErrorIndication,&bibError); - - - level = ((level&0x003F) <<5) | (level >> 6); - if (level>1023) level -= 2048; - - /* See section T.5 of the H.263 recommendation to understand - this restriction. */ - if (((level > -127) && (level < 127)) || (qp >= 8)) - { - deb("ERROR - illegal extended level.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - } - else - { - deb("ERROR - illegal level.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - } - } /* End fMPEG4EscapeCodes switch */ - } - - else { - run = (tab->val >> 4) & 255; - level = tab->val & 15; - last = (tab->val >> 12) & 1; - - sign = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - if (sign) - level = -level; - } - - /* If too many coefficients */ - if (index + run > 63) { - deb("ERROR - too many TCOEFs.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* Do run-length decoding */ - - /* Note: No need to set coeffs to zero since they are already reset - in the beginning of the function */ - index += run; - - block[index++] = level; - - } while (!last); - - exitFunction: - - /* Note: No need to set the rest of the coefficients to zero since - they are already reset in the beginning of the function */ - - if (!bibError) - return retValue; - - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - else if ( *bitErrorIndication ) { - return VDX_OK_BUT_BIT_ERROR; - } - else - return VDX_ERR_BIB; -} - - - -/* - * Picture Layer Local Functions - */ - -/* - * vdxActAfterIncorrectSEI - * - * Parameters: - * inBuffer B: Bit Buffer instance - * fPLUSPTYPE I: signals the existence of PLUSPTYPE - * fLast B: set to 1 if SEI flushed, - * otherwise not changed - * bitErrorIndication B: bit error indication, see biterr.h for - * the possible values - * - * Function: - * Problem: H.263 v1 did not specify FTYPE/DSIZE values, but rather - * any data can be transfered in PSUPP. Section 5.1.3 of - * H.263 Recommendation specifies that Annex L and Annex W supplemental - * enhancement functions can be used also if PLUSPTYPE is not in use. - * Consequently, if PLUSPTYPE is not in use and if the bit-stream - * violates FTYPE/DSIZE (or any other) rules defined in Annex L or - * Annex W, we do not know if the far-end encoder is transmitting - * proprietary PSUPP values (allowed in H.263 v1) or if a bit error - * has hit the SEI data that actually follows Annex L/W. - * - * This function is called after an illegal Annex L/W parameter has - * been detected. The function acts as follows: - * - If PLUSPTYPE is in use, there must be - * a bit error, and the function signals the error. - * - If PLUSPTYPE is not in use, there is - * a bit error or the far-end encoder uses proprietary PSUPP values. - * The function flushes all PSUPP fields and returns without error - * indication. - * NOTE: This scheme could be improved if the decoder knows that - * the far-end encoder is always following Annex L/W. - * - * Returns: - * VDX_OK - * VDX_OK_BUT_BIT_ERROR - * VDX_ERR - */ - -static int vdxActAfterIncorrectSEI( - bibBuffer_t *inBuffer, - int fPLUSPTYPE, - int *fLast, - int *bitErrorIndication) -{ - /* If Annex L/W is in use for sure */ - if (fPLUSPTYPE) { - - /* Return indication of bit error */ - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else Annex L/W is not necessarily on */ - else { - - /* We are out of sync due to bit error or - do not understand the non-standard PEI/PSUPP syntax - --> flush the rest of PEI/PSUPP pairs */ - - *fLast = 1; - - return vdxFlushSEI(inBuffer, bitErrorIndication); - } -} - - -/* - * vdxStandardSourceFormatToFrameSize - * - * - * Parameters: - * sourceFormat the three source format bits - * width luminance image width - * height luminance image height - * - * Function: - * This function converts the source format bits to luminance image size. - * - * Returns: - * Nothing. - * - * - * - */ - -static void vdxStandardSourceFormatToFrameSize(int sourceFormat, int *width, int *height) -{ - vdxAssert(sourceFormat >= 1 && sourceFormat <= 5); - - switch (sourceFormat) { - case 1: /* sub-QCIF */ - *width = 128; - *height = 96; - break; - case 2: /* QCIF */ - *width = 176; - *height = 144; - break; - case 3: /* CIF */ - *width = 352; - *height = 288; - break; - case 4: /* 4CIF */ - *width = 704; - *height = 576; - break; - case 5: /* 16 CIF */ - *width = 1408; - *height = 1152; - break; - } -} - - -/* - * Slice Layer Local Functions - */ - -/* - * vdxFrameSizeToPictureFormat - * - * - * Parameters: - * width luminance image width - * height luminance image height - * - * Function: - * This function converts luminance image size to picture format. - * - * Returns: - * Source format - * - * - */ - -int vdxFrameSizeToPictureFormat(int width, int /*height*/) -{ - if (width <= 128) - return 0; /* sub-QCIF */ - else if (width <= 176) - return 1; /* QCIF */ - else if (width <= 352) - return 2; /* CIF */ - else if (width <= 704) - return 3; /* 4CIF */ - else if (width <= 1408) - return 4; /* 16CIF */ - else if (width <= 2048) - return 5; /* 2048x1152 */ - else - return -1; /* Should never happen */ -} - -/* - * Macroblock Layer Local Functions - */ - -/* - * vdxGetCBPY - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * index index to the CBPY table of H.263 - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the CBPY code. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - -int vdxGetCBPY(bibBuffer_t *inBuffer, int *index, - int *bitErrorIndication) -{ - static const vdxVLCTable_t tabCBPY[48] = { - {-1,0}, {-1,0}, {6,6}, {9,6}, {8,5}, {8,5}, {4,5}, {4,5}, - {2,5}, {2,5}, {1,5}, {1,5}, {0,4}, {0,4}, {0,4}, {0,4}, - {12,4}, {12,4}, {12,4}, {12,4}, {10,4},{10,4},{10,4},{10,4}, - {14,4}, {14,4}, {14,4}, {14,4}, {5,4}, {5,4}, {5,4}, {5,4}, - {13,4}, {13,4}, {13,4}, {13,4}, {3,4}, {3,4}, {3,4}, {3,4}, - {11,4}, {11,4}, {11,4}, {11,4}, {7,4}, {7,4}, {7,4}, {7,4} - }; - - int bitsGot, code; - int16 ownError = 0; - - vdxAssert(inBuffer != NULL); - vdxAssert(index != NULL); - vdxAssert(bitErrorIndication != NULL); - - code = (int) bibShowBits(6, inBuffer, &bitsGot, bitErrorIndication, - &ownError); - - - if (code >= 48) { - /* bit pattern = 11xxxx */ - bibFlushBits(2, inBuffer, &bitsGot, bitErrorIndication, &ownError); - *index = 15; - return VDX_OK; - } - - if (code < 2) { - deb("vlcGetCBPY: ERROR - illegal code.\n"); - return VDX_OK_BUT_BIT_ERROR; - } - - bibFlushBits(tabCBPY[code].len, inBuffer, &bitsGot, bitErrorIndication, &ownError); - - *index = tabCBPY[code].val; - - if (ownError) - return VDX_ERR_BIB; - - return VDX_OK; -} - - -/* - * vdxGetMCBPCInter - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * fPLUSPTYPE flag to indicate if PLUSPTYPE is present - * fFourMVsPossible flag to indicate if four motion vectors per - * macroblock is allowed - * fFirstMBOfPicture flag to indicate if the current macroblock - * is the first one of the picture in scan-order - * index index to the MCBPC table for P-pictures - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the MCBPC code for P-pictures. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - * - */ - -int vdxGetMCBPCInter( - bibBuffer_t *inBuffer, - int fPLUSPTYPE, - int fFourMVsPossible, - int fFirstMBOfPicture, - int *index, - int *bitErrorIndication) -{ - static const vdxVLCTable_t tabMCBPCInter[256] = { - {-1,0}, /* 0 = illegal */ - {20,9}, /* 1 = 0000 0000 1 = stuffing */ - {19,9}, /* 2 = 0000 0001 0 */ - {18,9}, /* 3 = 0000 0001 1 */ - {17,9}, /* 4 = 0000 0010 0 */ - {7,9}, /* 5 = 0000 0010 1 */ - {14,8}, {14,8}, /* 6..7 = 0000 0011 x */ - {13,8}, {13,8}, /* 8..9 = 0000 0100 x */ - {11,8}, {11,8}, /* 10..11 = 0000 0101 x */ - {15,7}, {15,7}, {15,7}, {15,7}, /* 12..15 = 0000 011x x */ - {10,7}, {10,7}, {10,7}, {10,7}, /* 16..19 = 0000 100x x */ - { 9,7}, { 9,7}, { 9,7}, { 9,7}, /* 20..23 = 0000 101x x */ - { 6,7}, { 6,7}, { 6,7}, { 6,7}, /* 24..27 = 0000 110x x */ - { 5,7}, { 5,7}, { 5,7}, { 5,7}, /* 28..31 = 0000 111x x */ - {16,6}, {16,6}, {16,6}, {16,6}, - {16,6}, {16,6}, {16,6}, {16,6}, /* 32..39 = 0001 00xx x */ - { 3,6}, { 3,6}, { 3,6}, { 3,6}, - { 3,6}, { 3,6}, { 3,6}, { 3,6}, /* 40..47 = 0001 01xx x */ - {12,5}, {12,5}, {12,5}, {12,5}, {12,5}, {12,5}, - {12,5}, {12,5}, {12,5}, {12,5}, {12,5}, {12,5}, - {12,5}, {12,5}, {12,5}, {12,5}, /* 48..63 = 0001 1xxx x */ - { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, - { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, - { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, - { 2,4}, { 2,4}, { 2,4}, { 2,4}, { 2,4}, /* 64..95 = 0010 xxxx x */ - { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, - { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, - { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, - { 1,4}, { 1,4}, { 1,4}, { 1,4}, { 1,4}, /* 96..127 = 0011 xxxx x */ - {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, - {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, - {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, - {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, - {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, - {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, - {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, {8,3}, - {8,3}, {8,3}, /* 128..191 = 010x xxxx x */ - {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, - {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, - {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, - {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, - {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, - {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, - {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, {4,3}, - {4,3}, {4,3}, {4,3} /* 192..255 = 011x xxxx x */ - }; - - /* Indices 21 - 24 of the MCBPC table for P-pictures, - 4 least significant bits from the maximum of 13 are used for indexing */ - static const vdxVLCTable_t tabMCBPCInterIndices21To24[16] = { - {-1,0}, {-1,0}, {-1,0}, {-1,0}, - {-1,0}, {-1,0}, {-1,0}, {-1,0}, /* 0000 0000 00xx x, illegal */ - {21,11}, {21,11}, {21,11}, {21,11}, /* 0000 0000 010x x */ - {22,13}, /* 0000 0000 0110 0 */ - {-1,0}, /* 0000 0000 0110 1, illegal */ - {23,13}, /* 0000 0000 0111 0 */ - {24,13} /* 0000 0000 0111 1 */ - }; - - int bitsGot, code; - int16 ownError = 0; - - vdxAssert(inBuffer != NULL); - vdxAssert(index != NULL); - vdxAssert(bitErrorIndication != NULL); - - code = (int) bibShowBits(9, inBuffer, &bitsGot, bitErrorIndication, - &ownError); - - - /* If index == 0 */ - if (code >= 256) { - /* bit pattern = 1xxx xxxx x */ - bibFlushBits(1, inBuffer, &bitsGot, bitErrorIndication, &ownError); - *index = 0; - return VDX_OK; - } - - /* If illegal code or indices 21 - 24 */ - if (code == 0) { - /* 0000 0000 0 (indices 21 - 24 in MCBPC table for P-pictures) - can only be present if the conditions listed in section 5.3.2 of - the H.263 recommendation are fulfilled. Otherwise, the bit pattern - is considered an illegal codeword. */ - - /* If indices 21 - 24 */ - if (fPLUSPTYPE && fFourMVsPossible && !fFirstMBOfPicture) { - - /* Note: The following restriction is given in section 5.3.2 of - the H.263 recommendation: "Also, encoders shall not allow an MCBPC - code for macroblock type 5 to immediately follow seven consecutive - zeros in the bitstream (as can be caused by particular INTRADC codes - followed by COD=0), in order to prevent start code emulation." - This condition is not checked in the decoder, since it would require - relatively complex code structure and it is considered relatively - improbable. */ - - /* Read 13 bits */ - code = (int) bibShowBits(13, inBuffer, &bitsGot, bitErrorIndication, - &ownError); - - - /* Note: We already know that the first 9 bits are zero, thus code - cannot be larger than 15. */ - - *index = tabMCBPCInterIndices21To24[code].val; - - /* If illegal bit pattern */ - if (*index == -1) { - deb("vlcGetMCBPCInter: ERROR - illegal code.\n"); - return VDX_OK_BUT_BIT_ERROR; - } - - bibFlushBits(tabMCBPCInterIndices21To24[code].len, inBuffer, &bitsGot, - bitErrorIndication, &ownError); - } - - /* Else illegal code */ - else { - deb("vlcGetMCBPCInter: ERROR - illegal code.\n"); - return VDX_OK_BUT_BIT_ERROR; - } - } - - /* Else indices 1 - 20 */ - else { - bibFlushBits(tabMCBPCInter[code].len, inBuffer, &bitsGot, bitErrorIndication, &ownError); - - *index = tabMCBPCInter[code].val; - } - - - if (ownError) - return VDX_ERR_BIB; - - return VDX_OK; -} - - -/* - * vdxGetMCBPCIntra - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * index index to the MCBPC table for I-pictures - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the MCBPC code for I-pictures. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - -int vdxGetMCBPCIntra(bibBuffer_t *inBuffer, int *index, - int *bitErrorIndication) -{ - static const vdxVLCTable_t tabMCBPCIntra[64] = { - {-1,0}, /* illegal */ - {5,6}, - {6,6}, - {7,6}, - {4,4}, {4,4}, {4,4}, {4,4}, - {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, - {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, - {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3} - }; - - int bitsGot, code; - int16 ownError = 0; - - vdxAssert(inBuffer != NULL); - vdxAssert(index != NULL); - vdxAssert(bitErrorIndication != NULL); - - code = (int) bibShowBits(9, inBuffer, &bitsGot, bitErrorIndication, - &ownError); - - - if (code == 1) { - /* macroblock stuffing */ - bibFlushBits(9, inBuffer, &bitsGot, bitErrorIndication, &ownError); - *index = 8; - return VDX_OK; - } - - code >>= 3; /* remove unnecessary bits */ - - if (code == 0) { - deb("vlcGetMCBPCIntra: ERROR - illegal code.\n"); - return VDX_OK_BUT_BIT_ERROR; - } - - if (code >= 32) { - /* bit pattern = 1xxxxx */ - bibFlushBits(1, inBuffer, &bitsGot, bitErrorIndication, &ownError); - *index = 0; - return VDX_OK; - } - - bibFlushBits(tabMCBPCIntra[code].len, inBuffer, &bitsGot, bitErrorIndication, &ownError); - - *index = tabMCBPCIntra[code].val; - - if (ownError) - return VDX_ERR_BIB; - - return VDX_OK; -} - - -/* - * vdxGetMVD - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * mvdx10 the leftmost vector value from the motion - * vector VLC table multiplied by 10 to avoid - * non-integer numbers. - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the MVD code. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - -int vdxGetMVD(bibBuffer_t *inBuffer, int *mvdx10, - int *bitErrorIndication) -{ - static const vdxVLCTable_t tabMVD0[14] = { - {15,4}, /* 0001 0 */ - {-15,4}, /* 0001 1 */ - {10,3}, {10,3}, /* 0010 */ - {-10,3}, {-10,3}, /* 0011 */ - {5,2}, {5,2}, {5,2}, {5,2}, /* 010 */ - {-5,2}, {-5,2}, {-5,2}, {-5,2} /* 011 */ - }; - - static const vdxVLCTable_t tabMVD1[96] = { - {60,10}, {-60,10}, - {55,10}, {-55,10}, - {50,9}, {50,9}, {-50,9}, {-50,9}, - {45,9}, {45,9}, {-45,9}, {-45,9}, - {40,9}, {40,9}, {-40,9}, {-40,9}, - {35,7}, {35,7}, {35,7}, {35,7}, {35,7}, {35,7}, {35,7}, {35,7}, - {-35,7}, {-35,7}, {-35,7}, {-35,7}, {-35,7}, {-35,7}, {-35,7}, {-35,7}, - {30,7}, {30,7}, {30,7}, {30,7}, {30,7}, {30,7}, {30,7}, {30,7}, - {-30,7}, {-30,7}, {-30,7}, {-30,7}, {-30,7}, {-30,7}, {-30,7}, {-30,7}, - {25,7}, {25,7}, {25,7}, {25,7}, {25,7}, {25,7}, {25,7}, {25,7}, - {-25,7}, {-25,7}, {-25,7}, {-25,7}, {-25,7}, {-25,7}, {-25,7}, {-25,7}, - {20,6}, {20,6}, {20,6}, {20,6}, {20,6}, {20,6}, {20,6}, {20,6}, - {20,6}, {20,6}, {20,6}, {20,6}, {20,6}, {20,6}, {20,6}, {20,6}, - {-20,6}, {-20,6}, {-20,6}, {-20,6}, {-20,6}, {-20,6}, {-20,6}, {-20,6}, - {-20,6}, {-20,6}, {-20,6}, {-20,6}, {-20,6}, {-20,6}, {-20,6}, {-20,6} - }; - - static const vdxVLCTable_t tabMVD2[] = { - {160,12}, {-160,12}, {155,12}, {-155,12}, - {150,11}, {150,11}, {-150,11}, {-150,11}, - {145,11}, {145,11}, {-145,11}, {-145,11}, - {140,11}, {140,11}, {-140,11}, {-140,11}, - {135,11}, {135,11}, {-135,11}, {-135,11}, - {130,11}, {130,11}, {-130,11}, {-130,11}, - {125,11}, {125,11}, {-125,11}, {-125,11}, - {120,10}, {120,10}, {120,10}, {120,10}, - {-120,10}, {-120,10}, {-120,10}, {-120,10}, - {115,10}, {115,10}, {115,10}, {115,10}, - {-115,10}, {-115,10}, {-115,10}, {-115,10}, - {110,10}, {110,10}, {110,10}, {110,10}, - {-110,10}, {-110,10}, {-110,10}, {-110,10}, - {105,10}, {105,10}, {105,10}, {105,10}, - {-105,10}, {-105,10}, {-105,10}, {-105,10}, - {100,10}, {100,10}, {100,10}, {100,10}, - {-100,10}, {-100,10}, {-100,10}, {-100,10}, - {95,10}, {95,10}, {95,10}, {95,10}, - {-95,10}, {-95,10}, {-95,10}, {-95,10}, - {90,10}, {90,10}, {90,10}, {90,10}, - {-90,10}, {-90,10}, {-90,10}, {-90,10}, - {85,10}, {85,10}, {85,10}, {85,10}, - {-85,10}, {-85,10}, {-85,10}, {-85,10}, - {80,10}, {80,10}, {80,10}, {80,10}, - {-80,10}, {-80,10}, {-80,10}, {-80,10}, - {75,10}, {75,10}, {75,10}, {75,10}, - {-75,10}, {-75,10}, {-75,10}, {-75,10}, - {70,10}, {70,10}, {70,10}, {70,10}, - {-70,10}, {-70,10}, {-70,10}, {-70,10}, - {65,10}, {65,10}, {65,10}, {65,10}, - {-65,10}, {-65,10}, {-65,10}, {-65,10} - }; - int code, bitsGot; - int16 ownError = 0; - - vdxAssert(inBuffer != NULL); - vdxAssert(mvdx10 != NULL); - vdxAssert(bitErrorIndication != NULL); - - code = (int) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &ownError); - - - if (code) { - *mvdx10 = 0; - return VDX_OK; - } - - code = (int) bibShowBits(12, inBuffer, &bitsGot, bitErrorIndication, - &ownError); - - - if (code >= 512) { - code = (code >> 8) - 2; - bibFlushBits(tabMVD0[code].len, inBuffer, &bitsGot, bitErrorIndication, &ownError); - - *mvdx10 = tabMVD0[code].val; - return VDX_OK; - } - - if (code >= 128) { - code = (code >> 2) - 32; - bibFlushBits(tabMVD1[code].len, inBuffer, &bitsGot, bitErrorIndication, &ownError); - - - *mvdx10 = tabMVD1[code].val; - return VDX_OK; - } - - /* If illegal code, return bit error. - In Table 14/H.263, the illegal codes are 0000 0000 000x x and 0000 0000 0010 0. - In Table B-12/MPEG-4 Visual, Section B.1.3, 0000 0000 0010 0 is legal. - To simplify the source code, 0000 0000 0010 0 is considered legal in H.263 too */ - if ((code -= 4) < 0) { - deb("vlcGetMVD: ERROR - illegal code.\n"); - return VDX_OK_BUT_BIT_ERROR; - } - - bibFlushBits(tabMVD2[code].len, inBuffer, &bitsGot, bitErrorIndication, &ownError); - - - *mvdx10 = tabMVD2[code].val; - return VDX_OK; -} - - -/* - * vdxUMVGetMVD - * - * Parameters: - * inBuffer pointer to bit buffer instance - * mvdx10 the leftmost vector value from the motion - * vector VLC table multiplied by 10 to avoid - * non-integer numbers. - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the MVD code when unrestricted motion vector mode - * is in use and PLUSTYPE is present. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally,but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - */ - -static int vdxUMVGetMVD(bibBuffer_t *inBuffer,int *mvdx10, - int *bitErrorIndication) -{ - int code,bitsGot; - int16 ownError = 0; - int sign; - - vdxAssert(inBuffer != NULL); - vdxAssert(mvdx10 != NULL); - vdxAssert(bitErrorIndication != NULL); - - code = (int) bibGetBits(1,inBuffer,&bitsGot,bitErrorIndication,&ownError); - - - if (code) { - *mvdx10 = 0; - return VDX_OK; - } - - code = (int) bibGetBits(1,inBuffer,&bitsGot,bitErrorIndication,&ownError); - - code += 2; - - while (bibGetBits(1,inBuffer,&bitsGot,bitErrorIndication,&ownError) - ) - { - code <<=1; - code = code + bibGetBits(1,inBuffer,&bitsGot,bitErrorIndication,&ownError); - } - - - sign = (code & 0x0001)?-5:5; - code >>=1; - *mvdx10 = sign*code; - return VDX_OK; -} - -/* - * vdxGetNormalMODB - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * index index to the MODB table - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the MODB code. The function should be used - * in PB-frames mode (Annex G). - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - -static int vdxGetNormalMODB(bibBuffer_t *inBuffer, int *index, - int *bitErrorIndication) -{ - int bitsGot, code; - int16 ownError = 0; - - vdxAssert(inBuffer != NULL); - vdxAssert(index != NULL); - vdxAssert(bitErrorIndication != NULL); - - code = (int) bibShowBits(2, inBuffer, &bitsGot, bitErrorIndication, - &ownError); - - - if (code < 2) { - /* code = 0 */ - bibFlushBits(1, inBuffer, &bitsGot, bitErrorIndication, &ownError); - *index = 0; - return VDX_OK; - } - else { - /* code = 10 or 11 */ - bibFlushBits(2, inBuffer, &bitsGot, bitErrorIndication, &ownError); - *index = code - 1; - return VDX_OK; - } -} - -/* - * vdxGetImpPBMODB - * - * Parameters: - * inBuffer pointer to bit buffer instance - * index index to the MODB table - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the MODB code. This function should be used - * in improved PB-frames mode (Annex M). - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally,but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - */ - -static int vdxGetImpPBMODB(bibBuffer_t *inBuffer,int *index, - int *bitErrorIndication) -{ - int bitsGot,code; - int16 ownError = 0; - - vdxAssert(inBuffer != NULL); - vdxAssert(index != NULL); - vdxAssert(bitErrorIndication != NULL); - - code = (int) bibGetBits(1,inBuffer,&bitsGot,bitErrorIndication, - &ownError); - - - - if (code == 0) - { - /* Bidirectional Prediction: code = 0 */ - *index = 0; - return VDX_OK; - } - else - { - code = (int) bibGetBits(1,inBuffer,&bitsGot,bitErrorIndication, - &ownError); - - if (code == 0) - { - /* Bidirectional Prediction: code = 10 */ - *index = 1; - return VDX_OK; - } - else - { - code = (int) bibGetBits(1,inBuffer,&bitsGot,bitErrorIndication, - &ownError); - - - if (code == 0) - { - /* Forward Prediction: code = 110 */ - *index = 2; - return VDX_OK; - } - else - { - code = (int) bibGetBits(1,inBuffer,&bitsGot,bitErrorIndication, - &ownError); - - - if (code == 0) - { - /* Forward Prediction: code = 1110 */ - *index = 3; - return VDX_OK; - } - else - { - code = (int) bibGetBits(1,inBuffer,&bitsGot,bitErrorIndication, - &ownError); - - - /* Backward Prediction: code = 11110 or 11111 */ - *index = 4+code; - return VDX_OK; - } - } - } - } -} - -/* - * vdxUpdateQuant - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * fMQ non-zero if the Modified Quantization mode - * (Annex T) is in use, otherwise zero - * quant the quantization parameter for the previous - * macroblock - * newQuant the updated quantization parameter for - * the current macroblock - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the DQUANT field and updated the current quantization - * parameter appropriately. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - * - */ - -int vdxUpdateQuant( - bibBuffer_t *inBuffer, - int fMQ, - int quant, - int *newQuant, - int *bitErrorIndication) -{ - int - numBitsGot; - int16 - bibError = 0; - u_int32 - bits; - static const int changeOfQuant[2][32] = - {{0,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2, - -2,-2,-2,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3}, - {0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,1,-5}}; - - vdxAssert(inBuffer != NULL); - vdxAssert(newQuant != NULL); - vdxAssert(bitErrorIndication != NULL); - - /* DQUANT */ - if (!fMQ) { - bits = bibGetBits(2, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - - switch (bits) { - case 0: *newQuant = quant - 1; break; - case 1: *newQuant = quant - 2; break; - case 2: *newQuant = quant + 1; break; - case 3: *newQuant = quant + 2; break; - } - - /* Clip QUANT to legal range */ - if (*newQuant < 1) - *newQuant = 1; - else if (*newQuant > 31) - *newQuant = 31; - } - else - { - bits = bibGetBits(1,inBuffer,&numBitsGot,bitErrorIndication, - &bibError); - - - if (bits) - { - bits = bibGetBits(1,inBuffer,&numBitsGot,bitErrorIndication, - &bibError); - - *newQuant = quant + changeOfQuant[bits][quant]; - } - else - { - bits = bibGetBits(5,inBuffer,&numBitsGot,bitErrorIndication, - &bibError); - - *newQuant = bits; - } - } - - return VDX_OK; -} - - -/* - * vdxGetIntraMode - * - * Parameters: - * inBuffer pointer to bit buffer instance - * index index to the INTRA_MODE parameter for I-pictures - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the INTRA_MODE field from the MB header.. - * This field exists iff annex I is in use.. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally,but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - */ - - -static int vdxGetIntraMode(bibBuffer_t *inBuffer,int *index, - int *bitErrorIndication) - -{ - int bitsGot,code; - int16 ownError = 0; - - vdxAssert(inBuffer != NULL); - vdxAssert(index != NULL); - vdxAssert(bitErrorIndication != NULL); - - code = (int) bibShowBits(2,inBuffer,&bitsGot,bitErrorIndication, - &ownError); - - - if (code > 1) { - /* Bitpattern 1x */ - bibFlushBits(2,inBuffer,&bitsGot,bitErrorIndication,&ownError); - *index = code - 1; - return VDX_OK; - } - - bibFlushBits(1,inBuffer,&bitsGot,bitErrorIndication,&ownError); - *index = 0; - return VDX_OK; -} - - -/* - * Block Layer Local Functions - */ - - - - - -int vdxChangeBlackAndWhiteHeaderIntraIMB(bibBufferEdit_t *bufEdit, - int mcbpcIndex, - int StartByteIndex, - int StartBitIndex) -{ - int k, cur_index, new_index, cur_len, new_len, new_val; - - const tVLCTable sCBPCIType[9] = - { - {1, 1}, {1, 3}, {2, 3}, {3, 3}, {1, 4}, - {1, 6}, {2, 6}, {3, 6}, {1, 9} - }; - - // evaluate MCBPC parameters - int cur_cbpc = mcbpcIndex & 3; - int new_cbpc = 0; // cpbc=0 indicates chroma is 0 - int mbType = (mcbpcIndex <4)?3:4; - - // evaluate indices in table - cur_index = (mbType == 3 ? 0 : 4) + cur_cbpc; - new_index = (mbType == 3 ? 0 : 4) + new_cbpc; - - // retrieve values - cur_len = sCBPCIType[cur_index].length; - new_len = sCBPCIType[new_index].length; - new_val = sCBPCIType[new_index].code; - - // allocate memory for storing the parameters - if (!bufEdit->editParams) - { - bufEdit->editParams = (bibEditParams_t *) malloc(sizeof(bibEditParams_t)); - bufEdit->numChanges=1; - bufEdit->copyMode = CopyWithEdit/*CopyWithEdit*/; - } - k=bufEdit->numChanges-1; - bufEdit->copyMode = CopyWithEdit; - // store the new parameters - bufEdit->editParams[k].StartByteIndex = StartByteIndex; - bufEdit->editParams[k].StartBitIndex = StartBitIndex; - bufEdit->editParams[k].curNumBits = cur_len; - bufEdit->editParams[k].newNumBits = new_len; - bufEdit->editParams[k].newValue = new_val; - - return 0; -} - -int vdxChangeBlackAndWhiteHeaderInterPMB(bibBufferEdit_t *bufEdit, - int mcbpcIndex, - int StartByteIndex, - int StartBitIndex) -{ - int k, cur_index, new_index, cur_len, new_len, new_val; - - const tVLCTable sCBPCPType[21] = - { - {1, 1}, {3, 4}, {2, 4}, {5, 6}, - {3, 3}, {7, 7}, {6, 7}, {5, 9}, - {2, 3}, {5, 7}, {4, 7}, {5, 8}, - {3, 5}, {4, 8}, {3, 8}, {3, 7}, - {4, 6}, {4, 9}, {3, 9}, {2, 9}, - {1, 9} - }; - - // evaluate MCBPC parameters - int cur_cbpc = mcbpcIndex & 3; - int new_cbpc = 0; // cpbc=0 indicates chroma is 0 - int mbType; - - mbType = mcbpcIndex / 4; - - // evaluate indices in table - cur_index = mbType * 4 + cur_cbpc; - new_index = mbType * 4 + new_cbpc; - - // retrieve values - cur_len = sCBPCPType[cur_index].length; - new_len = sCBPCPType[new_index].length; - new_val = sCBPCPType[new_index].code; - - // allocate memory for storing the parameters - if (!bufEdit->editParams) - { - bufEdit->editParams = (bibEditParams_t *) malloc(sizeof(bibEditParams_t)); - bufEdit->numChanges=1; - bufEdit->copyMode = CopyWithEdit/*CopyWithEdit*/; - } - k=bufEdit->numChanges-1; - bufEdit->copyMode = CopyWithEdit/*CopyWithEdit*/; - // store the new parameters - bufEdit->editParams[k].StartByteIndex = StartByteIndex; - bufEdit->editParams[k].StartBitIndex = StartBitIndex; - bufEdit->editParams[k].curNumBits = cur_len; - bufEdit->editParams[k].newNumBits = new_len; - bufEdit->editParams[k].newValue = new_val; - - return mbType; -} - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/viddemux_mpeg.cpp --- a/videoeditorengine/h263decoder/src/viddemux_mpeg.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4687 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* MPEG-4 bitstream parsing. -* -*/ - - -/* - * Includes - */ - -#include "h263dConfig.h" -#include "viddemux.h" -#include "vdxint.h" -#include "mpegcons.h" -#include "sync.h" -#include "vdcaic.h" -#include "zigzag.h" -#include "debug.h" -#include "biblin.h" -/* MVE */ -#include "MPEG4Transcoder.h" -// <-- - -/* - * Local function prototypes - */ - -/* Macroblock Layer */ - -static int vdxGetIntraDCSize(bibBuffer_t *inBuffer, int compnum, int *IntraDCSize, - int *bitErrorIndication); - -static int vdxGetRVLCIndex(u_int32 bits, u_int32 *index, int *length, int intra_luma, - int *bitErrorIndication); - - -/* - * Picture Layer Global Functions - */ - - -/* - * - * vdxGetVolHeader - * - * Parameters: - * inBuffer pointer to bit buffer instance - * header output parameters: VOL header - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the VO and VOL header from inBuffer. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * VDX_ERR_NO_START_CODE if start code is not found - * VDX_ERR_NOT_SUPPORTED if VOL header - * - * - */ - -int vdxGetVolHeader( - bibBuffer_t *inBuffer, - vdxVolHeader_t *header, - int *bitErrorIndication, - int getInfo, int *aByteIndex, int *aBitIndex, CMPEG4Transcoder *hTranscoder) -{ - int bitsGot, sncCode, fUseDefaultVBVParams = 0, num_bits; - int16 bibError = 0; - u_int32 bits; - - memset(header, 0, sizeof(vdxVolHeader_t)); - *bitErrorIndication = 0; - - /* if Visual Object Sequence Start Code is present */ - bits = bibShowBits(MP4_VOS_START_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits == MP4_VOS_START_CODE) { - - /* vos_start_code */ - bibFlushBits(MP4_VOS_START_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - /* profile_and_level_indication (8 bits) */ - bits = bibGetBits(8, inBuffer, &bitsGot, bitErrorIndication, &bibError); - /* If fatal bit error occurred (lost segment/packet etc.) */ - /* - 1: Simple Profile Level 1 (from ISO/IEC 14496-2:1999/FPDAM4 [N4350] July 2001) - 2: Simple Profile Level 2 (from ISO/IEC 14496-2:1999/FPDAM4 [N4350] July 2001) - 3: Simple Profile Level 3 (from ISO/IEC 14496-2:1999/FPDAM4 [N4350] July 2001) - 8: Simple Profile Level 0 (from ISO/IEC 14496-2:1999/FPDAM4 [N5743] July 2003) - 9: Simple Profile Level 0b (from ISO/IEC 14496-2:1999/FPDAM4 [N5743] July 2003) - */ -#if 0 - // Disabled since some clips have this set incorrectly, and this is not used for anything important. - // Only simple profile clips seem to be available so this should not cause any harm. - // Further, it is still checked in vedVolReader which is always used before editing. It is not checked only when creating thumbnails - - - if (bits != 1 && bits != 2 && bits != 3 && bits != 8 && bits != 9) { - /* this is not a supported simple profile stream */ - deb("vdxGetMPEGVolHeader: ERROR - This is not a supported simple profile stream\n"); - goto notSupported; - } -#endif - if (bits != 8 && bits != 9) - header->profile_level = (int) bits; - else - header->profile_level = 0; - - /* User data if available */ - bits = bibShowBits(32, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits == MP4_USER_DATA_START_CODE) - { - if (!header->user_data) { - header->user_data = (char *) malloc(MAX_USER_DATA_LENGTH); - header->user_data_length = 0; - } - - if (vdxGetUserData(inBuffer, header->user_data, &(header->user_data_length), bitErrorIndication) != VDX_OK) - /* also bibError will be handled in exitAfterBitError */ - goto exitAfterBitError; - } - } - - /* if Visual Object Start Code is present */ - bits = bibShowBits(MP4_VO_START_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits == MP4_VO_START_CODE) { - - /* visual_object_start_code */ - bibFlushBits(MP4_VO_START_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - /* is_visual_object_identifier (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) { - - /* visual_object_ver_id (4 bits) */ - bits = bibGetBits(4, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits != 1) { - /* this is not an MPEG-4 version 1 stream */ - deb("vdxGetMPEGVolHeader: ERROR - This is not an MPEG-4 version 1 stream\n"); - goto notSupported; - } - - /* visual_object_priority (3 bits) */ - bits = bibGetBits(3, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->vo_priority = (int) bits; - - } else { - header->vo_priority = 0; - } - - /* visual_object_type (4 bits) */ - bits = bibGetBits(4, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits != 1) { - /* this is not a video object */ - deb("vdxGetMPEGVolHeader: ERROR - This is not a video object\n"); - goto notSupported; - } - - /* is_video_signal_type (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) { - - /* Note: The following fields in the bitstream give information about the - video signal type before encoding. These parameters don't influence the - decoding algorithm, but the composition at the output of the video decoder. - There is no normative requirement however to utilize this information - during composition, therefore until a way to utilize them is found in - MoViDe, these fields are just dummyly read, but not interpreted. - For interpretation see the MPEG-4 Visual standard */ - - /* video_format (3 bits) */ - bits = bibGetBits(3, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->video_format = (int) bits; - - /* video_range (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->video_range = (int) bits; - - /* colour_description (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) { - - /* colour_primaries (8 bits) */ - bits = bibGetBits(8, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->colour_primaries = (int) bits; - - /* transfer_characteristics (8 bits) */ - bits = bibGetBits(8, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->transfer_characteristics = (int) bits; - - /* matrix_coefficients (8 bits) */ - bits = bibGetBits(8, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->matrix_coefficients = (int) bits; - } else { - - header->colour_primaries = 1; /* default: ITU-R BT.709 */ - header->transfer_characteristics = 1; /* default: ITU-R BT.709 */ - header->matrix_coefficients = 1; /* default: ITU-R BT.709 */ - } - - } else { - - /* default values */ - header->video_format = 5; /* Unspecified video format */ - header->video_range = 0; /* Y range 16-235 pixel values */ - header->colour_primaries = 1; /* ITU-R BT.709 */ - header->transfer_characteristics = 1; /* ITU-R BT.709 */ - header->matrix_coefficients = 1; /* ITU-R BT.709 */ - } - - /* check the next start code */ - sncCode = sncCheckMpegSync(inBuffer, 0, &bibError); - - /* If User data is available */ - if (sncCode == SNC_USERDATA) - { - if (!header->user_data) { - header->user_data = (char *) malloc(MAX_USER_DATA_LENGTH); - header->user_data_length = 0; - } - - if (vdxGetUserData(inBuffer, header->user_data, &(header->user_data_length), bitErrorIndication) != VDX_OK) - /* also bibError will be handled in exitAfterBitError */ - goto exitAfterBitError; - - } else if (sncCode != SNC_VID) { - - deb("vdxGetMPEGVolHeader: ERROR. No Start code after VO header\n"); - goto exitAfterBitError; - } - } - - /* if Video Object Start Code is present */ - bits = bibShowBits(MP4_VID_START_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits == MP4_VID_START_CODE) { - /* video_object_start_code */ - bibFlushBits(MP4_VID_START_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - /* video_object_id */ - bits = bibGetBits(MP4_VID_ID_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->vo_id = (int) bits; - } - - /* MVE */ - /* dummy indication of the position before VOL start code, only for recoginition of shortheader */ - if (!getInfo) - { - hTranscoder->ErrorResilienceInfo(NULL, inBuffer->getIndex, inBuffer->bitIndex); - } - - /* vol_start_code */ - bits = bibShowBits(MP4_VOL_START_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if(bits != MP4_VOL_START_CODE) - { - /* If H.263 PSC, this is a short header stream, i.e. H.263 baseline */ - if ( (bits >> 6) == 32 ) { - return VDX_OK; - } else { - deb("vdxGetMPEGVolHeader: ERROR - Bitstream does not start with MP4_VOL_START_CODE\n"); - goto exitAfterBitError; - } - } - - bibFlushBits(MP4_VOL_START_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - /* vol_id */ - bits = bibGetBits(MP4_VOL_ID_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->vol_id = (int) bits; - - /* random_accessible_vol (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->random_accessible_vol = (u_char) bits; - - /* video_object_type_indication (8 bits) */ - bits = bibGetBits(8, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits != 1) { - /* this is not a simple video object stream */ - deb("vdxGetMPEGVolHeader: ERROR - This is not a simple video object stream\n"); - goto notSupported; - } - - /* is_object_layer_identifier (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) { - /* video_object_layer_verid (4 bits) */ - bits = bibGetBits(4, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits != 1) { - /* this is not an MPEG-4 version 1 stream */ - deb("vdxGetMPEGVolHeader: ERROR - This is not an MPEG-4 version 1 stream\n"); - goto notSupported; - } - - /* video_object_layer_priority (3 bits) */ - bits = bibGetBits(3, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->vo_priority = (int) bits; - } - - /* aspect_ratio_info: `0010`- 12:11 (625-type for 4:3 picture) */ - bits = bibGetBits(4, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->pixel_aspect_ratio = (int) bits; - - /* extended par */ - if (bits == 15) { - /* par_width */ - bits = bibGetBits(8, inBuffer, &bitsGot, bitErrorIndication, &bibError); - /* par_height */ - bits = bibGetBits(8, inBuffer, &bitsGot, bitErrorIndication, &bibError); - } - - /* vol_control_parameters flag */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) { - - /* chroma_format (2 bits) */ - bits = bibGetBits(2, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits != 1) { - goto exitAfterBitError; - } - - /* low_delay (1 bits) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - /* vbv_parameters (1 bits) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) { - - /* first_half_bitrate (15 bits) */ - bits = bibGetBits(15, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->bit_rate = (bits << 15); - - /* marker_bit */ - if (!bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError)) - goto exitAfterBitError; - - /* latter_half_bitrate (15 bits) */ - bits = bibGetBits(15, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->bit_rate += bits; - header->bit_rate *= 400; - - /* marker_bit */ - if (!bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError)) - goto exitAfterBitError; - - /* first_half_vbv_buffer_size (15 bits) */ - bits = bibGetBits(15, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->vbv_buffer_size = (bits << 3); - - /* marker_bit */ - if (!bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError)) - goto exitAfterBitError; - - /* latter_half_vbv_buffer_size (3 bits) */ - bits = bibGetBits(3, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->vbv_buffer_size += bits; - header->vbv_buffer_size <<= 14 /**= 16384*/; - - /* first_half_vbv_occupancy (11 bits) */ - bits = bibGetBits(11, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->vbv_occupancy = (bits << 15); - - /* marker_bit */ - if (!bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError)) - goto exitAfterBitError; - - /* latter_half_vbv_occupancy (15 bits) */ - bits = bibGetBits(15, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->vbv_occupancy += bits; - header->vbv_occupancy <<= 6 /**= 64*/; - - /* marker_bit */ - if (!bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError)) - goto exitAfterBitError; - - } else { - fUseDefaultVBVParams = 1; - } - } else { - fUseDefaultVBVParams = 1; - } - - if (fUseDefaultVBVParams) { - - /* default values */ - header->vbv_buffer_size = - ((header->profile_level == 0 || header->profile_level == 1) ? 5 : 20); - header->vbv_occupancy = header->vbv_buffer_size*170; - header->bit_rate = - ((header->profile_level == 0 || header->profile_level == 1) ? 64 : - ((header->profile_level == 2) ? 128 : 384)); - - header->vbv_occupancy <<= 6 /**= 64*/; - header->vbv_buffer_size <<= 14 /**= 16384*/; - header->bit_rate <<= 10 /**= 1024*/; - } - - /* vol_shape (2 bits) */ - bits = bibGetBits(2, inBuffer, &bitsGot, bitErrorIndication, &bibError); - /* rectangular_shape = '00' */ - if (bits != 0) { - deb("vdxGetMPEGVolHeader: ERROR - Not rectangular shape is not supported\n"); - goto notSupported; - } - - /* marker_bit */ - if (!bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError)) - goto exitAfterBitError; - - /* MVE */ - if (!getInfo) - { - hTranscoder->MPEG4TimerResolution(inBuffer->getIndex, inBuffer->bitIndex); - } - - /* time_increment_resolution */ - bits = bibGetBits(16, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->time_increment_resolution = (int) bits; - - /* marker_bit */ - if (!bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError)) - goto exitAfterBitError; - - /* fixed_vop_rate */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - /* MVE */ - header->fixed_vop_rate = (u_char)bits; - - /* fixed_vop_time_increment (1-15 bits) */ - if (bits) { - for (num_bits = 1; ((header->time_increment_resolution-1) >> num_bits) != 0; num_bits++) - { - } - - bits = bibGetBits(num_bits, inBuffer, &bitsGot, bitErrorIndication, &bibError); - } - - /* if rectangular_shape !always! */ - - /* marker_bit */ - if (!bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError)) - goto exitAfterBitError; - - /* vol_width (13 bits) */ - bits = bibGetBits(13, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->lumWidth = (int) bits; - - /* marker_bit */ - if (!bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError)) - goto exitAfterBitError; - - /* vol_height (13 bits) */ - bits = bibGetBits(13, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->lumHeight = (int) bits; - - /* endif rectangular_shape */ - - /* marker_bit */ - if (!bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError)) - goto exitAfterBitError; - - /* interlaced (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) - { - deb("vdxGetMPEGVolHeader: ERROR - Interlaced VOP not supported\n"); - goto notSupported; - } - - /* OBMC_disable */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (!bits) { - deb("vdxGetMPEGVolHeader: ERROR - Overlapped motion compensation not supported\n"); - goto notSupported; - } - - /* sprite_enable (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) { - deb("vdxGetMPEGVolHeader: ERROR - Sprites not supported\n"); - goto notSupported; - } - - /* not_8_bit (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) { - deb("vdxGetMPEGVolHeader: ERROR - Not 8 bits/pixel not supported\n"); - goto notSupported; - } - - /* quant_type (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) { - deb("vdxGetMPEGVolHeader: ERROR - H.263/MPEG-2 Quant Table switch not supported\n"); - goto notSupported; - } - - /* complexity_estimation_disable (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (!bits) { - deb("vdxGetMPEGVolHeader: ERROR - Complexity estimation header not supported\n"); - goto notSupported; - } - - /* MVE */ - if (!getInfo) - { - hTranscoder->ErrorResilienceInfo(NULL, inBuffer->getIndex, inBuffer->bitIndex); - } - else - { - *aByteIndex = inBuffer->getIndex; - *aBitIndex = inBuffer->bitIndex; - } - - /* resync_marker_disable (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->error_res_disable = (u_char) bits; - - /* data_partitioned (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->data_partitioned = (u_char) bits; - - if (header->data_partitioned) { - /* reversible_vlc (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - header->reversible_vlc = (u_char) bits; - } - - /* MVE */ - if (!getInfo) - { - hTranscoder->ErrorResilienceInfo(header, 0, 0); - } - - /* scalability (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if (bits) { - deb("vdxGetMPEGVolHeader: ERROR - Scalability not supported\n"); - goto notSupported; - } - - /* check the next start code */ - sncCode = sncCheckMpegSync(inBuffer, 0, &bibError); - - /* Removed since the VOL header may be followed by another header (H.245 & MPEG-4 signaling) - and sncCheckMpegSync does not recognize VOS start code - if (sncCode == SNC_NO_SYNC || bibError) - { - deb("vdxGetMPEGVolHeader: ERROR. No Start code after VOL header\n"); - goto exitAfterBitError; - } - */ - /* If User data is available */ - if (sncCode == SNC_USERDATA && !bibError) - { - if (!header->user_data) { - header->user_data = (char *) malloc(MAX_USER_DATA_LENGTH); - header->user_data_length = 0; - } - - if (vdxGetUserData(inBuffer, header->user_data, &(header->user_data_length), bitErrorIndication) != VDX_OK) - /* also bibError will be handled in exitAfterBitError */ - goto exitAfterBitError; - } - - /* If no error in bit buffer functions */ - if (!bibError) - return VDX_OK; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; - - exitAfterBitError: - if (bibError && bibError != ERR_BIB_NOT_ENOUGH_DATA) - return VDX_ERR_BIB; - - return VDX_OK_BUT_BIT_ERROR; - - notSupported: - return VDX_ERR_NOT_SUPPORTED; -} - -/* {{-output"vdxGetGovHeader.txt"}} */ -/* - * - * vdxGetGovHeader - * - * Parameters: - * inBuffer pointer to bit buffer instance - * header output parameters: picture header - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the GOV header from inBuffer. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * VDX_ERR_NO_START_CODE if start code is not found - * VDX_ERR_NOT_SUPPORTED if broken_link and closed_gov conflict - * - */ - -int vdxGetGovHeader( - bibBuffer_t *inBuffer, - vdxGovHeader_t *header, - int *bitErrorIndication) -/* {{-output"vdxGetGovHeader.txt"}} */ -{ - int tmpvar; - u_int32 bits; - int time_s; - int bitsGot, sncCode; - int16 bibError = 0; - - vdxAssert(inBuffer != NULL); - vdxAssert(header != NULL); - vdxAssert(bitErrorIndication != NULL); - - memset(header, 0, sizeof(vdxGovHeader_t)); - *bitErrorIndication = 0; - - /* group_start_code (32 bits) */ - bits = bibGetBits(32, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - if ( bibError ) - goto exitAfterBitError; - if( bits != MP4_GROUP_START_CODE ) - { - deb0p("ERROR. Bitstream does not start with MP4_GROUP_START_CODE\n"); - goto exitAfterBitError; - } - - /* time_code_hours (5 bits) */ - tmpvar = (int) bibGetBits(5, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - if ( bibError ) - goto exitAfterBitError; - - time_s= tmpvar*3600; - - /* time_code_minutes (6 bits) */ - tmpvar = (int) bibGetBits(6, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - if ( bibError ) - goto exitAfterBitError; - - time_s += tmpvar*60; - - /* marker_bit (1 bit) */ - tmpvar = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - if ( !tmpvar ) - goto exitAfterBitError; - - /* time_code_seconds (6 bits) */ - tmpvar = (int) bibGetBits(6, inBuffer, &bitsGot, bitErrorIndication, &bibError); - - time_s += tmpvar; - - /* closed_gov (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - header->closed_gov= (u_char) bits; - - /* broken_link (1 bit) */ - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - header->broken_link = (u_char) bits; - - if ( (header->closed_gov == 0)&&(header->broken_link == 1) ) - { - deb0p("ERROR. GOVHeader: closed_gov = 0\tbroken_link = 1\n"); - goto exitAfterBitError; - } - - /* Stuff the bits before the next start code */ - sncCode = sncCheckMpegSync(inBuffer, 1, &bibError); - if ((sncCode == SNC_NO_SYNC) || bibError) - { - deb0p("ERROR. No VOP Start code after GOV header\n"); - /* also bibError will be handled in exitAfterBitError */ - goto exitAfterBitError; - } - - /* If User data is available */ - if (sncCode == SNC_USERDATA) - { - if (!header->user_data) { - header->user_data = (char *) malloc(MAX_USER_DATA_LENGTH); - header->user_data_length = 0; - } - - if (vdxGetUserData(inBuffer, header->user_data, &(header->user_data_length), bitErrorIndication) != VDX_OK) - /* also bibError will be handled in exitAfterBitError */ - goto exitAfterBitError; - } - - header->time_stamp = time_s; - - /* If no error in bit buffer functions */ - if (!bibError) - return VDX_OK; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; - - exitAfterBitError: - if (bibError && bibError != ERR_BIB_NOT_ENOUGH_DATA) - return VDX_ERR_BIB; - - return VDX_OK_BUT_BIT_ERROR; - -} - -/* {{-output"vdxGetVopHeader.txt"}} */ -/* - * - * vdxGetVopHeader - * - * Parameters: - * inBuffer pointer to bit buffer instance - * inParam input parameters - * header output parameters: picture header - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the VOP header from inBuffer. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * VDX_ERR_NO_START_CODE if start code is not found - * VDX_ERR_NOT_SUPPORTED if broken_link and closed_gov conflict - * - * - */ - -int vdxGetVopHeader( - bibBuffer_t *inBuffer, - const vdxGetVopHeaderInputParam_t *inpParam, - vdxVopHeader_t *header, - int * ModuloByteIndex, - int * ModuloBitIndex, - int * ByteIndex, - int * BitIndex, - int *bitErrorIndication) -/* {{-output"vdxGetVopHeader.txt"}} */ -{ - - int tmpvar; - u_int32 bits; - int bitsGot; - int time_base_incr = 0, - num_bits; - int16 - bibError = 0; - - vdxAssert(inBuffer != NULL); - vdxAssert(header != NULL); - vdxAssert(bitErrorIndication != NULL); - - memset(header, 0, sizeof(vdxVopHeader_t)); - *bitErrorIndication = 0; - - /* vop_start_code (32 bits) */ - bits = bibGetBits(MP4_VOP_START_CODE_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitFunction; - - if( bits != MP4_VOP_START_CODE ) - { - deb0p("ERROR. Bitstream does not start with MP4_VOP_START_CODE\n"); - goto exitAfterBitError; - } - - *bitErrorIndication = 0; - - /* vop_prediction_type (2 bits) */ - bits = bibGetBits(2, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - if ( (bits != VDX_VOP_TYPE_P && bits != VDX_VOP_TYPE_I) ) - { - deb("ERROR. Not supported VOP prediction type\n"); - goto exitAfterBitError; - } - - header->coding_type = (u_char) bits; - - /* MVE */ - *ModuloByteIndex = inBuffer->numBytesRead; - *ModuloBitIndex = inBuffer->bitIndex; - - /* modulo_time_base (? bits) */ - tmpvar = (int) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - while( tmpvar == 1 && !bibError ) - { - tmpvar = (int) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - time_base_incr++; - } - if ( bibError ) - goto exitAfterBitError; - - header->time_base_incr = time_base_incr; - - /* marker_bit (1 bit) */ - tmpvar = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - if ( !tmpvar ) - goto exitAfterBitError; - - /* MVE */ - *ByteIndex = inBuffer->numBytesRead; - *BitIndex = inBuffer->bitIndex; - - /* vop_time_increment (1-16 bits) */ - for (num_bits = 1; ((inpParam->time_increment_resolution-1) >> num_bits) != 0; num_bits++) - { - } - - tmpvar = (int) bibGetBits(num_bits, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - header->time_inc = tmpvar; - - /* marker_bit (1 bit) */ - tmpvar = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - if ( !tmpvar ) - goto exitAfterBitError; - - /* vop_coded (1 bit) */ - header->vop_coded = (u_char) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - if ( !header->vop_coded ) { - goto exitAfterBitError; - } - - /* vop_rounding_type (1 bit) */ - if (header->coding_type == VDX_VOP_TYPE_P) - { - bits = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - header->rounding_type = (int) bits; - } else - header->rounding_type = 0; - - /* intra_dc_vlc_thr (3 bits) */ - bits = bibGetBits(3, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - header->intra_dc_vlc_thr = (int) bits; - - /* vop_quant (5 bits) */ - bits = bibGetBits(5, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - header->quant = (int) bits; - - /* vop_fcode_forward (3 bits) */ - if (header->coding_type == VDX_VOP_TYPE_P) - { - bits = bibGetBits(3, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - header->fcode_forward = (int) bits; - } else { - /* In case of an Intra Frame to calculate the length of the - VP resynchronization marker later on fcode_forward should be - assumed to have the value 1. */ - header->fcode_forward = 1; - } - - exitFunction: - - /* If no error in bit buffer functions */ - if (!bibError) - return VDX_OK; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; - - exitAfterBitError: - - if (bibError && bibError != ERR_BIB_NOT_ENOUGH_DATA) - return VDX_ERR_BIB; - - return VDX_OK_BUT_BIT_ERROR; - -} - -/* - * vdxGetUserData - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * user_data string of user data read byte-by-byte from - * the stream - * user_data_length number of bytes of user data - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads a string of bytes as user data from the bitsream - * It is called from te VOL header or GOV header - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ -int vdxGetUserData(bibBuffer_t *inBuffer, - char *user_data, int *user_data_length, - int *bitErrorIndication) -{ - int i; - u_int32 bits; - int bitsGot; - int16 ownError=0; - - /* user_data_start_code (32 bits) */ - bits = bibGetBits(32, inBuffer, &bitsGot, bitErrorIndication, &ownError); - if ( ownError ) - goto exitFunction; - - if (bits != MP4_USER_DATA_START_CODE) - { - deb0p("ERROR. Bitstream does not start with MP4_USER_DATA_START_CODE\n"); - goto exitFunction; - } - - /* read until start_code 0x000001 */ - for ( i=(*user_data_length); - (((bits = bibShowBits(24, inBuffer, &bitsGot, bitErrorIndication, &ownError)) != 0x000001)&&(ownError==0)); - i++ ) - { - bits = bibGetBits(8, inBuffer, &bitsGot, bitErrorIndication, &ownError); - if (ownError) - goto exitFunction; - - if (i=MAX_USER_DATA_LENGTH) ? MAX_USER_DATA_LENGTH : i++; - - exitFunction: - - /* If no error in bit buffer functions */ - if (!ownError) - return VDX_OK; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (ownError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; - -} - -/* - * Video Packet Layer Global Functions - */ - -/* {{-output"vdxGetVideoPacketHeader.txt"}} */ -/* - * - * vdxGetVideoPacketHeader - * - * Parameters: - * inBuffer pointer to bit buffer instance - * header output parameters: picture header - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads the Video Packet header from inBuffer. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * VDX_ERR_NO_START_CODE if start code is not found - * VDX_ERR_NOT_SUPPORTED if broken_link and closed_gov conflict - * - * - */ - -int vdxGetVideoPacketHeader( - bibBuffer_t *inBuffer, - const vdxGetVideoPacketHeaderInputParam_t *inpParam, - vdxVideoPacketHeader_t *header, - int *bitErrorIndication) -/* {{-output"vdxGetVideoPacketHeader.txt"}} */ -{ - int tmpvar, num_bits, bitsGot; - u_int32 bits; - int MBNumLength, - time_base_incr = 0; - int16 - bibError = 0; - - vdxAssert(inBuffer != NULL); - vdxAssert(header != NULL); - vdxAssert(bitErrorIndication != NULL); - - memset(header, 0, sizeof(vdxVideoPacketHeader_t)); - *bitErrorIndication = 0; - - /* resync marker */ - tmpvar = bibGetBits(16 + inpParam->fcode_forward, inBuffer, &bitsGot, - bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - if ( (int) tmpvar != MP4_RESYNC_MARKER ) - { - deb("ERROR. No Resync Marker found\n"); - goto exitAfterBitError; - } - - /* Macroblock Number */ - for (MBNumLength = 1; ((inpParam->numOfMBs-1) >> MBNumLength) != 0; MBNumLength++) - { - } - - header->currMBNum = (int) bibGetBits(MBNumLength, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - /* quant_scale (5 bits) */ - bits = bibGetBits(5, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - header->quant = (int) bits; - - /* header_extension_code (1 bit) */ - header->fHEC = (u_char) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - if(header->fHEC) { - /* modulo_time_base (? bits) */ - tmpvar = (int) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - while (tmpvar == 1 && !bibError) - { - tmpvar = (int) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - time_base_incr++; - } - if ( bibError ) - goto exitAfterBitError; - - header->time_base_incr = time_base_incr; - - /* marker_bit (1 bit) */ - tmpvar = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - if ( !tmpvar ) - goto exitAfterBitError; - - /* vop_time_increment (1-15 bits) */ - for (num_bits = 1; ((inpParam->time_increment_resolution-1) >> num_bits) != 0; num_bits++) - { - } - - tmpvar = (int) bibGetBits(num_bits, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - header->time_inc = tmpvar; - - /* marker_bit (1 bit) */ - tmpvar = bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - if (!tmpvar) - goto exitAfterBitError; - - /* vop_prediction_type (2 bits) */ - bits = bibGetBits(2, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - if ((bits != VDX_VOP_TYPE_P && bits != VDX_VOP_TYPE_I)) - { - deb("ERROR. Not supported VOP prediction type\n"); - goto exitAfterBitError; - } - - header->coding_type = (u_char) bits; - - /* intra_dc_vlc_thr (3 bits) */ - bits = bibGetBits(3, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - - header->intra_dc_vlc_thr = (int) bits; - - /* vop_fcode_forward (3 bits) */ - if (header->coding_type == VDX_VOP_TYPE_P) - { - bits = bibGetBits(3, inBuffer, &bitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitAfterBitError; - header->fcode_forward = (int) bits; - } else - header->fcode_forward = 1; - } - - /* Check success and return */ - - /* If no error in bit buffer functions */ - if (!bibError) - return VDX_OK; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; - - exitAfterBitError: - if (bibError && bibError != ERR_BIB_NOT_ENOUGH_DATA) - return VDX_ERR_BIB; - - return VDX_OK_BUT_BIT_ERROR; -} - -/* - * Macroblock Layer Global Functions - */ - -/* - * - * vdxGetDataPartitionedIMBLayer_Part1 - * - * Parameters: - * inBuffer input buffer - * inpParam input parameters - * MBList a double-linked list for soring - * MB parameters + DC values in the VP - * bitErrorIndication - * non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function gets the first (DC) partition of a data - * partitioned encoded Video Packet in an Intra-VOP. - * The parameters MCBPC, DQUANT and DC values of all the MBs - * in the VP are read and stored in the linked list. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * Error codes: - * error codes returned by bibFlushBits/bibGetBits/bibShowBits - * - * - */ - -int vdxGetDataPartitionedIMBLayer_Part1( - bibBuffer_t *inBuffer, bibBuffer_t *outBuffer, bibBufferEdit_t *bufEdit, - int aColorEffect, int *aStartByteIndex, int *aStartBitIndex, - CMPEG4Transcoder *hTranscoder, - const vdxGetDataPartitionedIMBLayerInputParam_t *inpParam, - dlst_t *MBList, - int *bitErrorIndication) -{ - - int mcbpcIndex, - retValue = VDX_OK, - fDQUANT, - new_quant, previous_quant, - bitsGot, - i, - IntraDC_size, - IntraDC_delta; - - /* MVE */ - int StartByteIndex; - int StartBitIndex; - - int16 error=0; - vdxIMBListItem_t *MBinstance = NULL; - - - vdxAssert(inpParam != NULL); - vdxAssert(inBuffer != NULL); - vdxAssert(bitErrorIndication != NULL); - - previous_quant = inpParam->quant; - - /* MVE */ - int stuffingStartByteIndex, stuffingStartBitIndex, stuffingEndByteIndex, stuffingEndBitIndex; - stuffingStartByteIndex = stuffingEndByteIndex = inBuffer->getIndex; - stuffingStartBitIndex = stuffingEndBitIndex = inBuffer->bitIndex; - - while (bibShowBits(MP4_DC_MARKER_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &error) != MP4_DC_MARKER && !error) - { - /* MVE */ - StartByteIndex = inBuffer->getIndex; - StartBitIndex = inBuffer->bitIndex; - - retValue = vdxGetMCBPCIntra(inBuffer, &mcbpcIndex, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - if (mcbpcIndex == 8) - { - /* MVE */ - stuffingEndByteIndex = inBuffer->getIndex; - stuffingEndBitIndex = inBuffer->bitIndex; - - continue; /* skip stuffing */ - } - - /* Create new MBInstance for the next MB */ - MBinstance = (vdxIMBListItem_t *) malloc(sizeof(vdxIMBListItem_t)); - if (!MBinstance) - { - deb("ERROR - MBinstance creation failed\n"); - retValue = H263D_ERROR; - goto exitFunction; - } - memset(MBinstance, 0, sizeof(vdxIMBListItem_t)); - - /* CBPC (2 LSBs of MCBPC) */ - MBinstance->cbpc = mcbpcIndex & 3; - - /* MVE */ - MBinstance->mcbpc = mcbpcIndex; - VDT_SET_START_POSITION(MBinstance,11,stuffingStartByteIndex,stuffingStartBitIndex); // 11: MB stuffing bits - VDT_SET_END_POSITION(MBinstance,11,stuffingEndByteIndex,stuffingEndBitIndex); // 11: MB stuffing bits - - VDT_SET_START_POSITION(MBinstance,0,StartByteIndex,StartBitIndex); // 0: mcbpc - VDT_SET_END_POSITION(MBinstance,0,inBuffer->getIndex,inBuffer->bitIndex); // 0: mcbpc - VDT_SET_START_POSITION(MBinstance,1,inBuffer->getIndex,inBuffer->bitIndex); // 1: dquant - - /* DQUANT is given for MCBPC indexes 4..7 */ - fDQUANT = mcbpcIndex & 4; - - if (fDQUANT) { - retValue = vdxUpdateQuant(inBuffer, 0, previous_quant, - &new_quant, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - } - /* Else no DQUANT */ - else - new_quant = previous_quant; - - MBinstance->dquant = fDQUANT ? new_quant - previous_quant : 0; - MBinstance->quant = previous_quant = new_quant; - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,1,inBuffer->getIndex,inBuffer->bitIndex); // 1: dquant - VDT_SET_START_POSITION(MBinstance,4,inBuffer->getIndex,inBuffer->bitIndex); // 4: intraDC - VDT_SET_START_POSITION(MBinstance,5,inBuffer->getIndex,inBuffer->bitIndex); // 5: intraDC - VDT_SET_START_POSITION(MBinstance,6,inBuffer->getIndex,inBuffer->bitIndex); // 6: intraDC - VDT_SET_START_POSITION(MBinstance,7,inBuffer->getIndex,inBuffer->bitIndex); // 7: intraDC - VDT_SET_START_POSITION(MBinstance,8,inBuffer->getIndex,inBuffer->bitIndex); // 8: intraDC - VDT_SET_START_POSITION(MBinstance,9,inBuffer->getIndex,inBuffer->bitIndex); // 9: intraDC - - VDT_SET_END_POSITION(MBinstance,4,inBuffer->getIndex,inBuffer->bitIndex); // 4: intraDC - VDT_SET_END_POSITION(MBinstance,5,inBuffer->getIndex,inBuffer->bitIndex); // 5: intraDC - VDT_SET_END_POSITION(MBinstance,6,inBuffer->getIndex,inBuffer->bitIndex); // 6: intraDC - VDT_SET_END_POSITION(MBinstance,7,inBuffer->getIndex,inBuffer->bitIndex); // 7: intraDC - VDT_SET_END_POSITION(MBinstance,8,inBuffer->getIndex,inBuffer->bitIndex); // 8: intraDC - VDT_SET_END_POSITION(MBinstance,9,inBuffer->getIndex,inBuffer->bitIndex); // 9: intraDC - - /* Color Toning */ - hTranscoder->AfterMBLayer(new_quant); - - - MBinstance->switched = aicIntraDCSwitch(inpParam->intra_dc_vlc_thr,new_quant); - - /* Intra_DC_Coeffs */ - if(!MBinstance->switched) { - for (i=0; i<6; i++) { - - /* MVE */ - VDT_SET_START_POSITION(MBinstance,i+4,inBuffer->getIndex,inBuffer->bitIndex); // 6: intraDC,chrominance - - retValue = vdxGetIntraDC(inBuffer, outBuffer, bufEdit, aColorEffect, aStartByteIndex, aStartBitIndex, - i, &IntraDC_size, &IntraDC_delta, bitErrorIndication); - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,i+4,inBuffer->getIndex,inBuffer->bitIndex); // 6: intraDC,chrominance - - if (retValue != VDX_OK) - goto exitFunction; - - MBinstance->DC[i] = IntraDC_delta; - } - } - - - /* Put MBinstance into the queue */ - dlstAddAfterCurr(MBList, MBinstance); - MBinstance = NULL; - - /* MVE */ - // begin another MB, record the position of MB stuffing - stuffingStartByteIndex = stuffingEndByteIndex = inBuffer->getIndex; - stuffingStartBitIndex = stuffingEndBitIndex = inBuffer->bitIndex; - - } - -exitFunction: - - if (MBinstance) - free(MBinstance); - - - /* If no error in bit buffer functions */ - if (!error) - return retValue; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (error == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; -} - -/* - * - * vdxGetDataPartitionedIMBLayer_Part2 - * - * Parameters: - * inBuffer input buffer - * MBList a double-linked list for soring - * MB parameters + DC values in the VP - * numMBsInVP number of MBs in this VP - * bitErrorIndication - * non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function gets the second (CBPY) partition of a data - * partitioned encoded Video Packet in an Intra-VOP. - * The parameters CBPY and ac_pred_flag of all the MBs - * in the VP are read and stored in the linked list. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * Error codes: - * error codes returned by bibFlushBits/bibGetBits/bibShowBits - * - * - * - */ - -int vdxGetDataPartitionedIMBLayer_Part2( - bibBuffer_t *inBuffer, bibBuffer_t */*outBuffer*/, bibBufferEdit_t */*bufEdit*/, - int /*aColorEffect*/, int */*aStartByteIndex*/, int */*aStartBitIndex*/, - dlst_t *MBList, - int numMBsInVP, - int *bitErrorIndication) -{ - - int cbpyIndex, - i, - retValue = VDX_OK, - bitsGot; - - int16 error=0; - u_char code; - vdxIMBListItem_t *MBinstance; - - vdxAssert(inBuffer != NULL); - vdxAssert(bitErrorIndication != NULL); - - /* get the first MB of the list */ - dlstHead(MBList, (void **) &MBinstance); - - /* Get ac_pred_flag and cbpy of all MBs in VP */ - for (i = 0; i < numMBsInVP; i++) - { - if (!MBinstance) - { - retValue = H263D_ERROR; - goto exitFunction; - } - - /* MVE */ - VDT_SET_START_POSITION(MBinstance,3,inBuffer->getIndex,inBuffer->bitIndex); // 3: ac_pred_flag - - /* ac_pred_flag (1 bit) */ - code = (u_char) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &error); - if (error) - goto exitFunction; - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,3,inBuffer->getIndex,inBuffer->bitIndex); // 3: ac_pred_flag - VDT_SET_START_POSITION(MBinstance,2,inBuffer->getIndex,inBuffer->bitIndex); // 2: cbpy - - /* CBPY */ - retValue = vdxGetCBPY(inBuffer, &cbpyIndex, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,2,inBuffer->getIndex,inBuffer->bitIndex); // 2: cbpy - - /* add the information to the MB data item. - If the Part1 of the VP was decoded without errors (all MBs were - attached to the list), MBinstance should always have a valid value. */ - if (MBinstance != NULL) { - MBinstance->ac_pred_flag = code; - MBinstance->cbpy = cbpyIndex; - - dlstNext(MBList, (void **) &MBinstance); - } - } - -exitFunction: - - - /* If no error in bit buffer functions */ - if (!error) - return retValue; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (error == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; -} - -/* - * - * vdxGetDataPartitionedPMBLayer_Part1 - * - * Parameters: - * inBuffer input buffer - * inpParam input parameters - * MBList a double-linked list for soring - * MB parameters + DC values in the VP - * bitErrorIndication - * non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function gets the first (Motion) partition of a data - * partitioned encoded Video Packet in an Inter-VOP. - * The parameters COD, MCBPC and motion vectors of all the MBs - * in the VP are read and stored in the linked list. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * Error codes: - * error codes returned by bibFlushBits/bibGetBits/bibShowBits - * - * - * - */ - - int vdxGetDataPartitionedPMBLayer_Part1( - bibBuffer_t *inBuffer, - bibBuffer_t */*outBuffer*/, bibBufferEdit_t */*bufEdit*/, - int /*aColorEffect*/, int */*aStartByteIndex*/, int */*aStartBitIndex*/, - const vdxGetDataPartitionedPMBLayerInputParam_t *inpParam, - dlst_t *MBList, - int *bitErrorIndication) - { - - static const int mbTypeToMBClass[6] = - {VDX_MB_INTER, VDX_MB_INTER, VDX_MB_INTER, - VDX_MB_INTRA, VDX_MB_INTRA, VDX_MB_INTER}; - - int mvdx, mvdy, - numMVs, - mcbpcIndex, - retValue = VDX_OK, - bitsGot; - - int16 error=0; - u_char code; - vdxPMBListItem_t *MBinstance = NULL; - - /* MVE */ - int StartByteIndex = 0; - int StartBitIndex = 0; - int stuffingStartByteIndex, stuffingStartBitIndex, stuffingEndByteIndex, stuffingEndBitIndex; - - stuffingStartByteIndex = stuffingEndByteIndex = inBuffer->getIndex; - stuffingStartBitIndex = stuffingEndBitIndex = inBuffer->bitIndex; - - vdxAssert(inpParam != NULL); - vdxAssert(inBuffer != NULL); - vdxAssert(bitErrorIndication != NULL); - - while (bibShowBits(MP4_MOTION_MARKER_COMB_LENGTH, inBuffer, &bitsGot, bitErrorIndication, &error) - != MP4_MOTION_MARKER_COMB && !error) - { - /* COD */ - code = (u_char) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &error); - if (error) - goto exitFunction; - - if (code == 0) - { - - /* MVE */ - StartByteIndex = inBuffer->getIndex; - StartBitIndex = inBuffer->bitIndex; - - /* MCBPC */ - retValue = vdxGetMCBPCInter( - inBuffer, - 0, /* No PLUSPTYPE present in MPEG-4 */ - 1, /* Four motion vectors always possible in MPEG-4 */ - 0, /* Flag to indicate if this is the first MB of a picture. - Since this value is used only for checking if - indices 21 - 24 are allowed in H.263, we don't have - to set this correctly. (Indices 21 - 24 are not allowed - in MPEG-4 at all.) */ - &mcbpcIndex, - bitErrorIndication); - - if (retValue != VDX_OK) - goto exitFunction; - - if (mcbpcIndex == 20) - { - /* MVE */ - stuffingEndByteIndex = inBuffer->getIndex; - stuffingEndBitIndex = inBuffer->bitIndex; - - continue; /* skip stuffing */ - } - - /* Indices > 20 not allowed */ - if (mcbpcIndex > 20) { - deb0p("vdxGetDataPartitionedPMBLayer_Part1: ERROR - Illegal code.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - - } - - /* Create new MBInstance for the MB */ - MBinstance = (vdxPMBListItem_t *) malloc(sizeof(vdxPMBListItem_t)); - if (!MBinstance) - { - deb("ERROR - MBinstance creation failed\n"); - goto exitFunction; - } - memset(MBinstance, 0, sizeof(vdxPMBListItem_t)); - - MBinstance->fCodedMB = (u_char) (code ^ 1); - - if (MBinstance->fCodedMB) - { - /* MCBPC */ - MBinstance->cbpc = mcbpcIndex; - - /* MCBPC --> MB type & included data elements */ - MBinstance->mbType = mcbpcIndex / 4; - MBinstance->mbClass = mbTypeToMBClass[MBinstance->mbType]; - - /* MVE */ - MBinstance->mcbpc = mcbpcIndex; - VDT_SET_START_POSITION(MBinstance,11,stuffingStartByteIndex,stuffingStartBitIndex); // 11: MB stuffing bits - VDT_SET_END_POSITION(MBinstance,11,stuffingEndByteIndex,stuffingEndBitIndex); // 11: MB stuffing bits - VDT_SET_START_POSITION(MBinstance,0,StartByteIndex,StartBitIndex); // MCBPC - VDT_SET_END_POSITION(MBinstance,0,inBuffer->getIndex,inBuffer->bitIndex); - - VDT_SET_START_POSITION(MBinstance,10,inBuffer->getIndex,inBuffer->bitIndex); // MVs - - /* MVD is included always for PB-frames and always if MB type is INTER */ - numMVs = MBinstance->numMVs = - (MBinstance->mbClass == VDX_MB_INTER) ? - ((MBinstance->mbType == 2 || MBinstance->mbType == 5) ? 4 : 1) : 0; - - if (numMVs) { - int i; - for (i = 0; i < numMVs; i++) { - retValue = vdxGetScaledMVD(inBuffer,inpParam->f_code,&mvdx,bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - retValue = vdxGetScaledMVD(inBuffer,inpParam->f_code,&mvdy,bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - MBinstance->mvx[i] = mvdx; - MBinstance->mvy[i] = mvdy; - } - } - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,10,inBuffer->getIndex,inBuffer->bitIndex); // MVs - - } - - /* MVE */ - // begin another MB, record the position of MB stuffing - stuffingStartByteIndex = stuffingEndByteIndex = inBuffer->getIndex; - stuffingStartBitIndex = stuffingEndBitIndex = inBuffer->bitIndex; - - /* Put MBinstance into the queue */ - dlstAddAfterCurr(MBList, MBinstance); - MBinstance = NULL; - } - -exitFunction: - - if (MBinstance) - free(MBinstance); - - - /* If no error in bit buffer functions */ - if (!error) - return retValue; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (error == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; - -} - - -/* - * - * vdxGetDataPartitionedPMBLayer_Part2 - * - * Parameters: - * inBuffer input buffer - * inpParam input parameters - * MBList a double-linked list for soring - * MB parameters + DC values in the VP - * bitErrorIndication - * non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function gets the second (CBPY) partition of a data - * partitioned encoded Video Packet in an Inter-VOP. - * The parameters CBPY, DQUANT and if Intra MB its DC coeffs - * of all the MBs in the VP are read and stored in the linked list. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * Error codes: - * error codes returned by bibFlushBits/bibGetBits/bibShowBits - * - * - * - */ - - int vdxGetDataPartitionedPMBLayer_Part2( - bibBuffer_t *inBuffer, - bibBuffer_t *outBuffer, - bibBufferEdit_t *bufEdit, - int aColorEffect, int *aStartByteIndex, int *aStartBitIndex, - CMPEG4Transcoder *hTranscoder, - const vdxGetDataPartitionedPMBLayerInputParam_t *inpParam, - dlst_t *MBList, - int *bitErrorIndication) - { - - static const int mbTypeToDQUANTI[6] = - {0, 1, 0, 0, 1, 1}; - - int fDQUANT, - cbpyIndex, - retValue = VDX_OK, - new_quant, previous_quant, - bitsGot, - i, - IntraDC_size, - IntraDC_delta; - - int16 error=0; - u_char code; - vdxPMBListItem_t *MBinstance; - - vdxAssert(inpParam != NULL); - vdxAssert(inBuffer != NULL); - vdxAssert(bitErrorIndication != NULL); - - previous_quant = inpParam->quant; - - /* Get ac_pred_flag and cbpy of all MBs in VP */ - for (dlstHead(MBList, (void **) &MBinstance); - MBinstance != NULL; - dlstNext(MBList, (void **) &MBinstance)) - { - - if (!MBinstance->fCodedMB) continue; - - /* MVE */ - VDT_SET_START_POSITION(MBinstance,3,inBuffer->getIndex,inBuffer->bitIndex); // 3 ac_pred_flag - - if (MBinstance->mbClass == VDX_MB_INTRA) { - - /* ac_pred_flag (1 bit) */ - code = (u_char) bibGetBits(1, inBuffer, &bitsGot, bitErrorIndication, &error); - if (error) - goto exitFunction; - - MBinstance->ac_pred_flag = code; - } - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,3,inBuffer->getIndex,inBuffer->bitIndex); // 3 ac_pred_flag - VDT_SET_START_POSITION(MBinstance,2,inBuffer->getIndex,inBuffer->bitIndex); // 2: cbpy - - /* CBPY */ - retValue = vdxGetCBPY(inBuffer, &cbpyIndex, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - - if (MBinstance->mbClass == VDX_MB_INTER) - /* Convert index to INTER CBPY */ - cbpyIndex = 15 - cbpyIndex; - - MBinstance->cbpy = cbpyIndex; - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,2,inBuffer->getIndex,inBuffer->bitIndex); // - VDT_SET_START_POSITION(MBinstance,1,inBuffer->getIndex,inBuffer->bitIndex); // 1: dquant - - /* DQUANT is given for MCBPC indexes 4..7 */ - fDQUANT = mbTypeToDQUANTI[MBinstance->mbType]; - - if (fDQUANT) { - retValue = vdxUpdateQuant(inBuffer, 0, previous_quant, - &new_quant, bitErrorIndication); - if (retValue != VDX_OK) - goto exitFunction; - } - /* Else no DQUANT */ - else - new_quant = previous_quant; - - MBinstance->dquant = fDQUANT ? new_quant - previous_quant : 0; - MBinstance->quant = previous_quant = new_quant; - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,1,inBuffer->getIndex,inBuffer->bitIndex); // 1: dquant - VDT_SET_START_POSITION(MBinstance,4,inBuffer->getIndex,inBuffer->bitIndex); // 4: intraDC - VDT_SET_START_POSITION(MBinstance,5,inBuffer->getIndex,inBuffer->bitIndex); // 5: intraDC - VDT_SET_START_POSITION(MBinstance,6,inBuffer->getIndex,inBuffer->bitIndex); // 6: intraDC - VDT_SET_START_POSITION(MBinstance,7,inBuffer->getIndex,inBuffer->bitIndex); // 7: intraDC - VDT_SET_START_POSITION(MBinstance,8,inBuffer->getIndex,inBuffer->bitIndex); // 8: intraDC - VDT_SET_START_POSITION(MBinstance,9,inBuffer->getIndex,inBuffer->bitIndex); // 9: intraDC - - VDT_SET_END_POSITION(MBinstance,4,inBuffer->getIndex,inBuffer->bitIndex); // 4: intraDC - VDT_SET_END_POSITION(MBinstance,5,inBuffer->getIndex,inBuffer->bitIndex); // 5: intraDC - VDT_SET_END_POSITION(MBinstance,6,inBuffer->getIndex,inBuffer->bitIndex); // 6: intraDC - VDT_SET_END_POSITION(MBinstance,7,inBuffer->getIndex,inBuffer->bitIndex); // 7: intraDC - VDT_SET_END_POSITION(MBinstance,8,inBuffer->getIndex,inBuffer->bitIndex); // 8: intraDC - VDT_SET_END_POSITION(MBinstance,9,inBuffer->getIndex,inBuffer->bitIndex); // 9: intraDC - - /* Color Toning */ - hTranscoder->AfterMBLayer(new_quant); - - if (MBinstance->mbClass == VDX_MB_INTRA) { - MBinstance->switched = aicIntraDCSwitch(inpParam->intra_dc_vlc_thr,new_quant); - - /* Intra_DC_Coeffs */ - if(!MBinstance->switched) { - for (i=0; i<6; i++) { - - /* MVE */ - VDT_SET_START_POSITION(MBinstance,i+4,inBuffer->getIndex,inBuffer->bitIndex); // 6: intraDC,chrominance - - retValue = vdxGetIntraDC(inBuffer, outBuffer, bufEdit, aColorEffect, aStartByteIndex, aStartBitIndex, - i, &IntraDC_size, &IntraDC_delta, bitErrorIndication); - - /* MVE */ - VDT_SET_END_POSITION(MBinstance,i+4,inBuffer->getIndex,inBuffer->bitIndex); // 6: intraDC,chrominance - - if (retValue != VDX_OK) - goto exitFunction; - MBinstance->DC[i] = IntraDC_delta; - } - } - } - } - -exitFunction: - - - /* If no error in bit buffer functions */ - if (!error) - return retValue; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (error == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; - -} - -/* - * Block Layer Global Functions - */ - -/* {{-output"vdxGetMPEGIntraDCTBlock.txt"}} */ -/* - * vdxGetMPEGIntraDCTBlock - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * startIndex the first index in block where to put data - * block DCT coefficients of the block - * in zigzag order - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function gets the DCT coefficients for one INTRA block. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - * - */ - -int vdxGetMPEGIntraDCTBlock( - bibBuffer_t *inBuffer, - int startIndex, - int *block, - int *bitErrorIndication) -/* {{-output"vdxGetMPEGIntraDCTBlock.txt"}} */ -{ - int - numBitsGot, - retValue = VDX_OK, - tmpvar; - int16 - bibError = 0; - - static const vdxVLCTable_t Intra_tcoefTab0[] = { - {0x10401, 7}, {0x10301, 7}, {0x00601, 7}, {0x10501, 7}, - {0x00701, 7}, {0x00202, 7}, {0x00103, 7}, {0x00009, 7}, - {0x10002, 6}, {0x10002, 6}, {0x00501, 6}, {0x00501, 6}, - {0x10201, 6}, {0x10201, 6}, {0x10101, 6}, {0x10101, 6}, - {0x00401, 6}, {0x00401, 6}, {0x00301, 6}, {0x00301, 6}, - {0x00008, 6}, {0x00008, 6}, {0x00007, 6}, {0x00007, 6}, - {0x00102, 6}, {0x00102, 6}, {0x00006, 6}, {0x00006, 6}, - {0x00201, 5}, {0x00201, 5}, {0x00201, 5}, {0x00201, 5}, - {0x00005, 5}, {0x00005, 5}, {0x00005, 5}, {0x00005, 5}, - {0x00004, 5}, {0x00004, 5}, {0x00004, 5}, {0x00004, 5}, - {0x10001, 4}, {0x10001, 4}, {0x10001, 4}, {0x10001, 4}, - {0x10001, 4}, {0x10001, 4}, {0x10001, 4}, {0x10001, 4}, - {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, - {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, - {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, - {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, - {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, - {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, - {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, - {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, {0x00001, 2}, - {0x00002, 3}, {0x00002, 3}, {0x00002, 3}, {0x00002, 3}, - {0x00002, 3}, {0x00002, 3}, {0x00002, 3}, {0x00002, 3}, - {0x00002, 3}, {0x00002, 3}, {0x00002, 3}, {0x00002, 3}, - {0x00002, 3}, {0x00002, 3}, {0x00002, 3}, {0x00002, 3}, - {0x00101, 4}, {0x00101, 4}, {0x00101, 4}, {0x00101, 4}, - {0x00101, 4}, {0x00101, 4}, {0x00101, 4}, {0x00101, 4}, - {0x00003, 4}, {0x00003, 4}, {0x00003, 4}, {0x00003, 4}, - {0x00003, 4}, {0x00003, 4}, {0x00003, 4}, {0x00003, 4}, - }; - - - static const vdxVLCTable_t Intra_tcoefTab1[] = { - {0x00012,10}, {0x00011,10}, {0x10e01, 9}, {0x10e01, 9}, - {0x10d01, 9}, {0x10d01, 9}, {0x10c01, 9}, {0x10c01, 9}, - {0x10b01, 9}, {0x10b01, 9}, {0x10a01, 9}, {0x10a01, 9}, - {0x10102, 9}, {0x10102, 9}, {0x10004, 9}, {0x10004, 9}, - {0x00c01, 9}, {0x00c01, 9}, {0x00b01, 9}, {0x00b01, 9}, - {0x00702, 9}, {0x00702, 9}, {0x00602, 9}, {0x00602, 9}, - {0x00502, 9}, {0x00502, 9}, {0x00303, 9}, {0x00303, 9}, - {0x00203, 9}, {0x00203, 9}, {0x00106, 9}, {0x00106, 9}, - {0x00105, 9}, {0x00105, 9}, {0x00010, 9}, {0x00010, 9}, - {0x00402, 9}, {0x00402, 9}, {0x0000f, 9}, {0x0000f, 9}, - {0x0000e, 9}, {0x0000e, 9}, {0x0000d, 9}, {0x0000d, 9}, - {0x10801, 8}, {0x10801, 8}, {0x10801, 8}, {0x10801, 8}, - {0x10701, 8}, {0x10701, 8}, {0x10701, 8}, {0x10701, 8}, - {0x10601, 8}, {0x10601, 8}, {0x10601, 8}, {0x10601, 8}, - {0x10003, 8}, {0x10003, 8}, {0x10003, 8}, {0x10003, 8}, - {0x00a01, 8}, {0x00a01, 8}, {0x00a01, 8}, {0x00a01, 8}, - {0x00901, 8}, {0x00901, 8}, {0x00901, 8}, {0x00901, 8}, - {0x00801, 8}, {0x00801, 8}, {0x00801, 8}, {0x00801, 8}, - {0x10901, 8}, {0x10901, 8}, {0x10901, 8}, {0x10901, 8}, - {0x00302, 8}, {0x00302, 8}, {0x00302, 8}, {0x00302, 8}, - {0x00104, 8}, {0x00104, 8}, {0x00104, 8}, {0x00104, 8}, - {0x0000c, 8}, {0x0000c, 8}, {0x0000c, 8}, {0x0000c, 8}, - {0x0000b, 8}, {0x0000b, 8}, {0x0000b, 8}, {0x0000b, 8}, - {0x0000a, 8}, {0x0000a, 8}, {0x0000a, 8}, {0x0000a, 8}, - }; - - static const vdxVLCTable_t Intra_tcoefTab2[] = { - {0x10007,11}, {0x10007,11}, {0x10006,11}, {0x10006,11}, - {0x00016,11}, {0x00016,11}, {0x00015,11}, {0x00015,11}, - {0x10202,10}, {0x10202,10}, {0x10202,10}, {0x10202,10}, - {0x10103,10}, {0x10103,10}, {0x10103,10}, {0x10103,10}, - {0x10005,10}, {0x10005,10}, {0x10005,10}, {0x10005,10}, - {0x00d01,10}, {0x00d01,10}, {0x00d01,10}, {0x00d01,10}, - {0x00503,10}, {0x00503,10}, {0x00503,10}, {0x00503,10}, - {0x00802,10}, {0x00802,10}, {0x00802,10}, {0x00802,10}, - {0x00403,10}, {0x00403,10}, {0x00403,10}, {0x00403,10}, - {0x00304,10}, {0x00304,10}, {0x00304,10}, {0x00304,10}, - {0x00204,10}, {0x00204,10}, {0x00204,10}, {0x00204,10}, - {0x00107,10}, {0x00107,10}, {0x00107,10}, {0x00107,10}, - {0x00014,10}, {0x00014,10}, {0x00014,10}, {0x00014,10}, - {0x00013,10}, {0x00013,10}, {0x00013,10}, {0x00013,10}, - {0x00017,11}, {0x00017,11}, {0x00018,11}, {0x00018,11}, - {0x00108,11}, {0x00108,11}, {0x00902,11}, {0x00902,11}, - {0x10302,11}, {0x10302,11}, {0x10402,11}, {0x10402,11}, - {0x10f01,11}, {0x10f01,11}, {0x11001,11}, {0x11001,11}, - {0x00019,12}, {0x0001a,12}, {0x0001b,12}, {0x00109,12}, - {0x00603,12}, {0x0010a,12}, {0x00205,12}, {0x00703,12}, - {0x00e01,12}, {0x10008,12}, {0x10502,12}, {0x10602,12}, - {0x11101,12}, {0x11201,12}, {0x11301,12}, {0x11401,12}, - {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, - {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, - {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, - {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, - {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, - {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, - {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, - {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, {0x01bff, 7}, - }; - - static const int intra_max_level[2][64] = { - {27, 10, 5, 4, 3, 3, 3, 3, - 2, 2, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - }, - - {8, 3, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 - } - }; - - static const int intra_max_run0[28] = { 999, 14, 9, 7, 3, 2, 1, - 1, 1, 1, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0 - }; - - static const int intra_max_run1[9] = { 999, 20, 6, - 1, 0, 0, - 0, 0, 0 - }; - - int - code, /* bits got from bit buffer */ - index, /* index to zigzag table running from 1 to 63 */ - run, /* RUN code */ - level; /* LEVEL code */ - - u_int32 - last, /* LAST code (see standard) */ - sign; /* sign for level */ - - vdxVLCTable_t const *tab; /* pointer to lookup table */ - - vdxAssert(inBuffer != NULL); - vdxAssert(startIndex == 0 || startIndex == 1); - vdxAssert(block != NULL); - vdxAssert(bitErrorIndication != NULL); - - index = startIndex; - - do { - code = (int) bibShowBits(12, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - deb("vdxGetDCTBlock: bibShowBits returned not enough data --> " - "try to use the data available.\n"); - code <<= 12 - numBitsGot; - bibError = 0; - } - else if (bibError ) { - goto exitFunction; - } - - /* Select the right table and index for the codeword */ - if (code >= 512) - tab = &Intra_tcoefTab0[(code >> 5) - 16]; - else if (code >= 128) - tab = &Intra_tcoefTab1[(code >> 2) - 32]; - else if (code >= 8) - tab = &Intra_tcoefTab2[code - 8]; - else { - deb("ERROR - illegal TCOEF\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* Flush the codeword from the buffer */ - bibFlushBits(tab->len, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - if (bibError) - goto exitFunction; - - /* the following is modified for 3-mode escape */ - if (tab->val == 7167) /* ESCAPE */ - { - - int run_offset=0, - level_offset=0; - - code = (int) bibShowBits(2, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - if (bibError) { - goto exitFunction; - } - - if (code<=2) { - - /* escape modes: level or run is offset */ - if (code==2) run_offset=1; - else level_offset=1; - - /* Flush the escape code from the buffer */ - if (run_offset) - bibFlushBits(2, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - else - bibFlushBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - - if (bibError) - goto exitFunction; - /* Read next codeword */ - code = (int) bibShowBits(12, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - deb("vdxGetDCTBlock: bibShowBits returned not enough data --> " - "try to use the data available.\n"); - code <<= 12 - numBitsGot; - bibError = 0; - } - else if (bibError) { - goto exitFunction; - } - - /* Select the right table and index for the codeword */ - if (code >= 512) - tab = &Intra_tcoefTab0[(code >> 5) - 16]; - else if (code >= 128) - tab = &Intra_tcoefTab1[(code >> 2) - 32]; - else if (code >= 8) - tab = &Intra_tcoefTab2[code - 8]; - else { - deb("ERROR - illegal TCOEF\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - bibFlushBits(tab->len, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - if (bibError) - goto exitFunction; - - run = (tab->val >> 8) & 255; - level = tab->val & 255; - last = (tab->val >> 16) & 1; - - /* need to add back the max level */ - if (level_offset) - level = level + intra_max_level[last][run]; - else if (last) - run = run + intra_max_run1[level]+1; - else - run = run + intra_max_run0[level]+1; - - sign = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - - if ( bibError ) - goto exitFunction; - - if (sign) - level = -level; - - } else { - - /* Flush the codeword from the buffer */ - bibFlushBits(2, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - if (bibError) - goto exitFunction; - - /* LAST */ - last = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if ( bibError ) - goto exitFunction; - /* RUN */ - run = (int) bibGetBits(6, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if ( bibError ) - goto exitFunction; - /* MARKER BIT */ - tmpvar = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication,&bibError); - if ( bibError ) - goto exitFunction; - if (!tmpvar) { - - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - /* LEVEL */ - level = (int) bibGetBits(12, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if ( bibError ) - goto exitFunction; - /* MARKER BIT */ - tmpvar = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication,&bibError); - if ( bibError ) - goto exitFunction; - if(!tmpvar) { - - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* 0000 0000 0000 and 1000 0000 0000 is forbidden unless in MQ mode */ - if (level == 0 || level == 2048) { - deb("ERROR - illegal level.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* Codes 1000 0000 0001 .. 1111 1111 1111 */ - if (level > 2048) - level -= 4096; - - } /* flc */ - } - else { - - run = (tab->val >> 8) & 255; - level = tab->val & 255; - last = (tab->val >> 16) & 1; - - sign = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - if ( bibError ) - goto exitFunction; - - if (sign) - level = -level; - } - - /* If too many coefficients */ - if (index + run > 63) { - deb("ERROR - too many TCOEFs.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* Do run-length decoding */ - while (run--) - block[index++] = 0; - - block[index++] = level; - - } while (!last); - - exitFunction: - - /* Set the rest of the coefficients to zero */ - while (index <= 63) { - block[index++] = 0; - } - - if (!bibError) - return retValue; - - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - else - return VDX_ERR_BIB; -} - -/* - * Macroblock Layer Local Functions - */ - -/* - * - * vdxGetScaledMVD - * - * - * Parameters: - * inBuffer input buffer - * f_code f_code for current Vop - * error error code - * *mvd10 returned MV value (10x) - * *bitErrorIndication - * - * Function: - * Calculates a component of a block (or MB) vector by decoding - * the magnitude & residual of the diff. vector, making the prediction, - * and combining the decoded diff. and the predicted values - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - */ - - -int vdxGetScaledMVD(bibBuffer_t *inBuffer, int f_code, - int *mvd10, int *bitErrorIndication) -{ - - int residual=0, vlc_code_mag=0; - int diff_vector, - retValue = VDX_OK, - numBitsGot; - int16 bibError = 0; - - /* decode component */ - retValue = vdxGetMVD(inBuffer,&vlc_code_mag,bitErrorIndication); - if (retValue < 0) - goto exitFunction; - - if ((f_code > 1) && (vlc_code_mag != 0)) - { - vlc_code_mag /= 5; - - residual = (int) - bibGetBits(f_code-1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - if (bibError) - goto exitFunction; - - diff_vector = ((abs(vlc_code_mag)-1)<<(f_code-1)) + residual + 1; - if (vlc_code_mag < 0) - diff_vector = -diff_vector; - - *mvd10 = diff_vector * 5; - } else - *mvd10 = vlc_code_mag; - - exitFunction: - - if (bibError) { - if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - return VDX_ERR_BIB; - } - - return retValue; -} - -/* - * vdxGetIntraDC - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * compnum number of the block component in the - * 4:2:2 YUV scheme - * (0..3) luma, (4..5) chroma - * IntraDCDelta the read Intra DC value (quantized) - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function gets the Intra DC value - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - * - */ - -int vdxGetIntraDC(bibBuffer_t *inBuffer, bibBuffer_t */*outBuffer*/, bibBufferEdit_t */*bufEdit*/, int /*aColorEffect*/, - int */*aStartByteIndex*/, int */*aStartBitIndex*/, int compnum, int *IntraDC_size, int *IntraDCDelta, - int *bitErrorIndication) -{ - u_int32 code; - int16 bibError=0; - int first_bit, - numBitsGot, - retValue, - IntraDCSize=0, - tmpvar; - - vdxAssert(inBuffer != NULL); - vdxAssert(IntraDCDelta != NULL); - vdxAssert(bitErrorIndication != NULL); - - /* read DC size 2 - 8 bits */ - retValue = vdxGetIntraDCSize(inBuffer, compnum, &IntraDCSize, bitErrorIndication); - if (retValue != VDX_OK) - return retValue; - - *IntraDC_size = IntraDCSize; - if (IntraDCSize == 0) { - - *IntraDCDelta = 0; - - } else { - - /* read delta DC 0 - 8 bits */ - code = bibGetBits(IntraDCSize,inBuffer,&numBitsGot,bitErrorIndication, &bibError); - - if (bibError) { - if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - return VDX_ERR_BIB; - } - - first_bit = code >> (IntraDCSize-1); - - if (first_bit == 0 ) - { /* negative delta INTRA DC */ - *IntraDCDelta = -1 * (int) (code ^ ((1 << IntraDCSize)-1)); - } - else - { /* positive delta INTRA DC */ - *IntraDCDelta = (int) code; - } - - if (IntraDCSize > 8) { - /* Marker Bit */ - tmpvar = bibGetBits(1,inBuffer,&numBitsGot,bitErrorIndication, &bibError); - if( !tmpvar ) { - return VDX_OK_BUT_BIT_ERROR; - } - } - } - - return VDX_OK; -} - -/* - * vdxGetIntraDCSize - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * compnum number of the block component in the - * 4:2:2 YUV scheme - * (0..3) luma, (4..5) chroma - * IntraDCSize Size of the following Intra DC FLC - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function gets the IntraDCSize VLC for luma or chroma - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - * - */ - -static int vdxGetIntraDCSize(bibBuffer_t *inBuffer, int compnum, int *IntraDCSize, - int *bitErrorIndication) -{ - u_int32 code; - int numBitsGot, - retValue = VDX_OK; - int16 - bibError = 0; - - if( compnum >=0 && compnum < 4 ) /* luminance block */ - { - code = bibShowBits(11, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - if (bibError && (bibError != ERR_BIB_NOT_ENOUGH_DATA)) { - return VDX_ERR_BIB; - } - - if ((bibError == ERR_BIB_NOT_ENOUGH_DATA) && (numBitsGot != 0)) { - code <<= (11-numBitsGot); - bibError = 0; - } - - if ( code == 1) - { - *IntraDCSize = 12; - bibFlushBits(11, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 11; - bibFlushBits(10, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 10; - bibFlushBits(9, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 9; - bibFlushBits(8, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 8; - bibFlushBits(7, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 7; - bibFlushBits(6, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 6; - bibFlushBits(5, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 5; - bibFlushBits(4, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 4; - bibFlushBits(3, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } else if (code == 2) { - *IntraDCSize = 3; - bibFlushBits(3, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } else if (code ==3) { - *IntraDCSize = 0; - bibFlushBits(3, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - if ( code == 2) - { - *IntraDCSize = 2; - bibFlushBits(2, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } else if (code == 3) { - *IntraDCSize = 1; - bibFlushBits(2, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - - } - else /* chrominance block */ - { - code = bibShowBits(12, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - if (bibError && (bibError != ERR_BIB_NOT_ENOUGH_DATA)) { - return VDX_ERR_BIB; - } - - if ((bibError == ERR_BIB_NOT_ENOUGH_DATA) && (numBitsGot != 0)) { - code <<= (12-numBitsGot); - bibError = 0; - } - - if ( code == 1) - { - *IntraDCSize = 12; - bibFlushBits(12, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 11; - bibFlushBits(11, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 10; - bibFlushBits(10, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 9; - bibFlushBits(9, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 8; - bibFlushBits(8, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 7; - bibFlushBits(7, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 6; - bibFlushBits(6, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 5; - bibFlushBits(5, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 4; - bibFlushBits(4, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - if ( code == 1) - { - *IntraDCSize = 3; - bibFlushBits(3, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - code >>= 1; - { - *IntraDCSize = 3-code; - bibFlushBits(2, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - goto exitFunction; - } - } - -exitFunction: - - /* If no error in bit buffer functions */ - if (!bibError) - return retValue; - - /* Else if ran out of data (i.e. decoding out of sync) */ - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - /* Else other error in bit buffer functions */ - else - return VDX_ERR_BIB; -} - -/* - * vdxGetRVLCIndex - * - * - * Parameters: - * bits input: the bits read from the stream - * index output: the RVLC table index corresponding - * to "bits" - * length output: length of the codeword - * intra_luma indicates an intra "1" or inter "0" Block - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function finds the RVLC table index (LAST,RUN.LEVEL) and length - * of the code belonging to the input codeword. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR no such codeword exists in the table - * - * - */ - -int vdxGetRVLCIndex( - u_int32 bits, - u_int32 *index, - int *length, - int intra_luma, - int *bitErrorIndication) -{ - - /* The indexes in the RVLC tables are written in equal RUN groups with - LEVEL increasing */ - - /* Intra RVLC table */ - static const vdxVLCTable_t RvlcTcoefTab0[] = { - /* [0] --> e.g.: RUN = 0; LEVEL = 1..27 */ - {1,3}, {2,3}, {3,4}, {4,5}, {5,6}, {6,6}, {7,7}, {8,8}, - {9,8}, {10,9}, {11,9}, {12,10}, {13,10}, {14,10}, {15,11}, {16,11}, - {17,11}, {18,12}, {19,12}, {20,13}, {21,13}, {22,12}, {23,13}, {24,14}, - {25,14}, {26,14}, {27,15}, - /* [27] */ - {257,4}, {258,5}, {259,7}, {260,8}, {261,8}, {262,9},{263,10},{264,11}, - {265,11},{266,12},{267,13},{268,14},{269,14}, - /* [40] */ - {513,5}, {514,7}, {515,9},{516,10},{517,11},{518,11},{519,13},{520,13}, - {521,13},{522,14},{523,14}, - /* [51] */ - {769,5}, {770,8}, {771,9},{772,11},{773,12},{774,13},{775,14},{776,14}, - {777,15}, - /* [60] */ - {1025,6},{1026,8},{1027,10},{1028,12},{1029,12},{1030,14}, - /* [66] */ - {1281,6},{1282,9},{1283,11},{1284,12},{1285,14},{1286,14}, - /* [72] */ - {1537,7},{1538,10},{1539,11},{1540,12},{1541,15}, - /* [77] */ - {1793,7},{1794,10},{1795,11},{1796,13},{1797,15}, - /* [82] */ - {2049,8},{2050,10},{2051,13},{2052,14}, - /* [86] */ - {2305,8},{2306,11},{2307,13},{2308,15}, - /* [90] */ - {2561,9},{2562,12}, - /* [92] */ - {2817,10},{2818,13}, - /* [94] */ - {3073,10},{3074,15}, - /* [96] */ - {3329,11}, - {3585,13}, - {3841,13}, - {4097,14}, - {4353,14}, - {4609,14}, - {4865,15}, - - /* [103] --> LAST = 1 */ - {65537,4},{65538,8},{65539,11},{65540,13},{65541,14}, - /* [108] */ - {65793,5},{65794,9},{65795,12},{65796,14},{65797,15}, - /* [113] */ - {66049,5},{66050,11},{66051,15}, - /* [116] */ - {66305,6},{66306,12}, - /* [118] */ - {66561,6},{66562,12}, - /* [120] */ - {66817,6},{66818,13}, - /* [122] */ - {67073,6},{67074,13}, - /* [124] */ - {67329,7},{67330,13}, - /* [126] */ - {67585,7},{67586,13}, - /* [128] */ - {67841,7},{67842,13}, - /* [130] */ - {68097,7},{68098,14}, - /* [132] */ - {68353,7},{68354,14}, - /* [134] */ - {68609,8},{68610,14}, - /* [136] */ - {68865,8},{68866,15}, - /* [138] */ - {69121,8}, - {69377,9}, - {69633,9}, - {69889,9}, - {70145,9}, - {70401,9}, - {70657,9}, - {70913,10}, - {71169,10}, - {71425,10}, - {71681,10}, - {71937,10}, - {72193,11}, - {72449,11}, - {72705,11}, - {72961,12}, - {73217,12}, - {73473,12}, - {73729,12}, - {73985,12}, - {74241,12}, - {74497,12}, - {74753,13}, - {75009,13}, - {75265,14}, - {75521,14}, - {75777,14}, - {76033,15}, - {76289,15}, - {76545,15}, - {76801,15}, - - /* [169] */ - {7167,4} /* last entry: escape code */ - -}; - - /* Inter RVLC table */ - static const vdxVLCTable_t RvlcTcoefTab1[] = { - /* [0] */ - {1,3}, {2,4}, {3,5}, {4,7}, {5,8}, {6,8}, {7,9}, {8,10}, - {9,10}, {10,11}, {11,11}, {12,12}, {13,13}, {14,13}, {15,13}, {16,13}, - {17,14}, {18,14}, {19,15}, - /* [19] */ - {257,3}, {258,6}, {259,8}, {260,9},{261,10},{262,11},{263,12},{264,13}, - {265,14},{266,14}, - /* [29] */ - {513,4}, {514,7}, {515,9},{516,11},{517,12},{518,14},{519,14}, - /* [36] */ - {769,5}, {770,8},{771,10},{772,12},{773,13},{774,14},{775,15}, - /* [43] */ - {1025,5},{1026,8},{1027,11},{1028,13},{1029,15}, - /* [48] */ - {1281,5},{1282,9},{1283,11},{1284,13}, - /* [52] */ - {1537,6},{1538,10},{1539,12},{1540,14}, - /* [56] */ - {1793,6},{1794,10},{1795,12},{1796,15}, - /* [60] */ - {2049,6},{2050,10},{2051,13}, - /* [63] */ - {2305,7},{2306,10},{2307,14}, - /* [66] */ - {2561,7},{2562,11}, - /* [68] */ - {2817,7},{2818,12}, - /* [70] */ - {3073,8},{3074,13}, - /* [72] */ - {3329,8},{3330,14}, - /* [74] */ - {3585,8},{3586,14}, - /* [76] */ - {3841,9},{3842,14}, - /* [78] */ - {4097,9},{4098,14}, - /* [80] */ - {4353,9},{4354,15}, - /* [82] */ - {4609,10}, - {4865,10}, - {5121,10}, - {5377,11}, - {5633,11}, - {5889,11}, - {6145,11}, - {6401,11}, - {6657,11}, - {6913,12}, - {7169,12}, - {7425,12}, - {7681,13}, - {7937,13}, - {8193,13}, - {8449,13}, - {8705,14}, - {8961,14}, - {9217,14}, - {9473,15}, - {9729,15}, - - /* [103] --> LAST = 1 */ - {65537,4},{65538,8},{65539,11},{65540,13},{65541,14}, - /* [108] */ - {65793,5},{65794,9},{65795,12},{65796,14},{65797,15}, - /* [113] */ - {66049,5},{66050,11},{66051,15}, - /* [116] */ - {66305,6},{66306,12}, - /* [118] */ - {66561,6},{66562,12}, - /* [120] */ - {66817,6},{66818,13}, - /* [122] */ - {67073,6},{67074,13}, - /* [124] */ - {67329,7},{67330,13}, - /* [126] */ - {67585,7},{67586,13}, - /* [128] */ - {67841,7},{67842,13}, - /* [130] */ - {68097,7},{68098,14}, - /* [132] */ - {68353,7},{68354,14}, - /* [134] */ - {68609,8},{68610,14}, - /* [136] */ - {68865,8},{68866,15}, - /* [138] */ - {69121,8}, - {69377,9}, - {69633,9}, - {69889,9}, - {70145,9}, - {70401,9}, - {70657,9}, - {70913,10}, - {71169,10}, - {71425,10}, - {71681,10}, - {71937,10}, - {72193,11}, - {72449,11}, - {72705,11}, - {72961,12}, - {73217,12}, - {73473,12}, - {73729,12}, - {73985,12}, - {74241,12}, - {74497,12}, - {74753,13}, - {75009,13}, - {75265,14}, - {75521,14}, - {75777,14}, - {76033,15}, - {76289,15}, - {76545,15}, - {76801,15}, - - /* [169] */ - {7167,4} /* last entry: escape code */ -}; - - vdxVLCTable_t const *tab; /* pointer to lookup table */ - - vdxAssert(bitErrorIndication != NULL); - - switch(bits) { - - case 0x0: - if (intra_luma) - tab = &RvlcTcoefTab0[169]; - else - tab = &RvlcTcoefTab1[169]; - break; - - case 0x1: - if (intra_luma) - tab = &RvlcTcoefTab0[27]; - else - tab = &RvlcTcoefTab1[1]; - break; - - case 0x4: - if (intra_luma) - tab = &RvlcTcoefTab0[40]; - else - tab = &RvlcTcoefTab1[2]; - break; - - case 0x5: - if (intra_luma) - tab = &RvlcTcoefTab0[51]; - else - tab = &RvlcTcoefTab1[36]; - break; - - case 0x6: - if (intra_luma) - tab = &RvlcTcoefTab0[0]; - else - tab = &RvlcTcoefTab1[0]; - break; - - case 0x7: - if (intra_luma) - tab = &RvlcTcoefTab0[1]; - else - tab = &RvlcTcoefTab1[19]; - break; - - case 0x8: - if (intra_luma) - tab = &RvlcTcoefTab0[28]; - else - tab = &RvlcTcoefTab1[43]; - break; - - case 0x9: - if (intra_luma) - tab = &RvlcTcoefTab0[3]; - else - tab = &RvlcTcoefTab1[48]; - break; - - case 0xa: - if (intra_luma) - tab = &RvlcTcoefTab0[2]; - else - tab = &RvlcTcoefTab1[29]; - break; - - case 0xb: - if (intra_luma) - tab = &RvlcTcoefTab0[103]; - else - tab = &RvlcTcoefTab1[103]; - break; - - case 0xc: - if (intra_luma) - tab = &RvlcTcoefTab0[60]; - else - tab = &RvlcTcoefTab1[20]; - break; - - case 0xd: - if (intra_luma) - tab = &RvlcTcoefTab0[66]; - else - tab = &RvlcTcoefTab1[52]; - break; - - case 0x12: - if (intra_luma) - tab = &RvlcTcoefTab0[108]; - else - tab = &RvlcTcoefTab1[108]; - break; - - case 0x13: - if (intra_luma) - tab = &RvlcTcoefTab0[113]; - else - tab = &RvlcTcoefTab1[113]; - break; - - case 0x14: - if (intra_luma) - tab = &RvlcTcoefTab0[4]; - else - tab = &RvlcTcoefTab1[56]; - break; - - case 0x15: - if (intra_luma) - tab = &RvlcTcoefTab0[5]; - else - tab = &RvlcTcoefTab1[60]; - break; - - case 0x18: - if (intra_luma) - tab = &RvlcTcoefTab0[116]; - else - tab = &RvlcTcoefTab1[116]; - break; - - case 0x19: - if (intra_luma) - tab = &RvlcTcoefTab0[118]; - else - tab = &RvlcTcoefTab1[118]; - break; - - case 0x1c: - if (intra_luma) - tab = &RvlcTcoefTab0[72]; - else - tab = &RvlcTcoefTab1[3]; - break; - - case 0x1d: - if (intra_luma) - tab = &RvlcTcoefTab0[77]; - else - tab = &RvlcTcoefTab1[30]; - break; - - case 0x22: - if (intra_luma) - tab = &RvlcTcoefTab0[120]; - else - tab = &RvlcTcoefTab1[120]; - break; - - case 0x23: - if (intra_luma) - tab = &RvlcTcoefTab0[122]; - else - tab = &RvlcTcoefTab1[122]; - break; - - case 0x2c: - if (intra_luma) - tab = &RvlcTcoefTab0[41]; - else - tab = &RvlcTcoefTab1[63]; - break; - - case 0x2d: - if (intra_luma) - tab = &RvlcTcoefTab0[29]; - else - tab = &RvlcTcoefTab1[66]; - break; - - case 0x34: - if (intra_luma) - tab = &RvlcTcoefTab0[6]; - else - tab = &RvlcTcoefTab1[68]; - break; - - case 0x35: - if (intra_luma) - tab = &RvlcTcoefTab0[124]; - else - tab = &RvlcTcoefTab1[124]; - break; - - case 0x38: - if (intra_luma) - tab = &RvlcTcoefTab0[126]; - else - tab = &RvlcTcoefTab1[126]; - break; - - case 0x39: - if (intra_luma) - tab = &RvlcTcoefTab0[128]; - else - tab = &RvlcTcoefTab1[128]; - break; - - case 0x3c: - if (intra_luma) - tab = &RvlcTcoefTab0[82]; - else - tab = &RvlcTcoefTab1[4]; - break; - - case 0x3d: - if (intra_luma) - tab = &RvlcTcoefTab0[86]; - else - tab = &RvlcTcoefTab1[5]; - break; - - case 0x42: - if (intra_luma) - tab = &RvlcTcoefTab0[130]; - else - tab = &RvlcTcoefTab1[130]; - break; - - case 0x43: - if (intra_luma) - tab = &RvlcTcoefTab0[132]; - else - tab = &RvlcTcoefTab1[132]; - break; - - case 0x5c: - if (intra_luma) - tab = &RvlcTcoefTab0[52]; - else - tab = &RvlcTcoefTab1[21]; - break; - - case 0x5d: - if (intra_luma) - tab = &RvlcTcoefTab0[61]; - else - tab = &RvlcTcoefTab1[37]; - break; - - case 0x6c: - if (intra_luma) - tab = &RvlcTcoefTab0[30]; - else - tab = &RvlcTcoefTab1[44]; - break; - - case 0x6d: - if (intra_luma) - tab = &RvlcTcoefTab0[31]; - else - tab = &RvlcTcoefTab1[70]; - break; - - case 0x74: - if (intra_luma) - tab = &RvlcTcoefTab0[7]; - else - tab = &RvlcTcoefTab1[72]; - break; - - case 0x75: - if (intra_luma) - tab = &RvlcTcoefTab0[8]; - else - tab = &RvlcTcoefTab1[74]; - break; - - case 0x78: - if (intra_luma) - tab = &RvlcTcoefTab0[104]; - else - tab = &RvlcTcoefTab1[104]; - break; - - case 0x79: - if (intra_luma) - tab = &RvlcTcoefTab0[134]; - else - tab = &RvlcTcoefTab1[134]; - break; - - case 0x7c: - if (intra_luma) - tab = &RvlcTcoefTab0[90]; - else - tab = &RvlcTcoefTab1[6]; - break; - - case 0x7d: - if (intra_luma) - tab = &RvlcTcoefTab0[67]; - else - tab = &RvlcTcoefTab1[22]; - break; - - case 0x82: - if (intra_luma) - tab = &RvlcTcoefTab0[136]; - else - tab = &RvlcTcoefTab1[136]; - break; - - case 0x83: - if (intra_luma) - tab = &RvlcTcoefTab0[138]; - else - tab = &RvlcTcoefTab1[138]; - break; - - case 0xbc: - if (intra_luma) - tab = &RvlcTcoefTab0[42]; - else - tab = &RvlcTcoefTab1[31]; - break; - - case 0xbd: - if (intra_luma) - tab = &RvlcTcoefTab0[53]; - else - tab = &RvlcTcoefTab1[49]; - break; - - case 0xdc: - if (intra_luma) - tab = &RvlcTcoefTab0[32]; - else - tab = &RvlcTcoefTab1[76]; - break; - - case 0xdd: - if (intra_luma) - tab = &RvlcTcoefTab0[9]; - else - tab = &RvlcTcoefTab1[78]; - break; - - case 0xec: - if (intra_luma) - tab = &RvlcTcoefTab0[10]; - else - tab = &RvlcTcoefTab1[80]; - break; - - case 0xed: - if (intra_luma) - tab = &RvlcTcoefTab0[109]; - else - tab = &RvlcTcoefTab1[109]; - break; - - case 0xf4: - if (intra_luma) - tab = &RvlcTcoefTab0[139]; - else - tab = &RvlcTcoefTab1[139]; - break; - - case 0xf5: - if (intra_luma) - tab = &RvlcTcoefTab0[140]; - else - tab = &RvlcTcoefTab1[140]; - break; - - case 0xf8: - if (intra_luma) - tab = &RvlcTcoefTab0[141]; - else - tab = &RvlcTcoefTab1[141]; - break; - - case 0xf9: - if (intra_luma) - tab = &RvlcTcoefTab0[142]; - else - tab = &RvlcTcoefTab1[142]; - break; - - case 0xfc: - if (intra_luma) - tab = &RvlcTcoefTab0[92]; - else - tab = &RvlcTcoefTab1[7]; - break; - - case 0xfd: - if (intra_luma) - tab = &RvlcTcoefTab0[94]; - else - tab = &RvlcTcoefTab1[8]; - break; - - case 0x102: - if (intra_luma) - tab = &RvlcTcoefTab0[143]; - else - tab = &RvlcTcoefTab1[143]; - break; - - case 0x103: - if (intra_luma) - tab = &RvlcTcoefTab0[144]; - else - tab = &RvlcTcoefTab1[144]; - break; - - case 0x17c: - if (intra_luma) - tab = &RvlcTcoefTab0[73]; - else - tab = &RvlcTcoefTab1[23]; - break; - - case 0x17d: - if (intra_luma) - tab = &RvlcTcoefTab0[78]; - else - tab = &RvlcTcoefTab1[38]; - break; - - case 0x1bc: - if (intra_luma) - tab = &RvlcTcoefTab0[83]; - else - tab = &RvlcTcoefTab1[53]; - break; - - case 0x1bd: - if (intra_luma) - tab = &RvlcTcoefTab0[62]; - else - tab = &RvlcTcoefTab1[57]; - break; - - case 0x1dc: - if (intra_luma) - tab = &RvlcTcoefTab0[43]; - else - tab = &RvlcTcoefTab1[61]; - break; - - case 0x1dd: - if (intra_luma) - tab = &RvlcTcoefTab0[33]; - else - tab = &RvlcTcoefTab1[64]; - break; - - case 0x1ec: - if (intra_luma) - tab = &RvlcTcoefTab0[11]; - else - tab = &RvlcTcoefTab1[82]; - break; - - case 0x1ed: - if (intra_luma) - tab = &RvlcTcoefTab0[12]; - else - tab = &RvlcTcoefTab1[83]; - break; - - case 0x1f4: - if (intra_luma) - tab = &RvlcTcoefTab0[13]; - else - tab = &RvlcTcoefTab1[84]; - break; - - case 0x1f5: - if (intra_luma) - tab = &RvlcTcoefTab0[145]; - else - tab = &RvlcTcoefTab1[145]; - break; - - case 0x1f8: - if (intra_luma) - tab = &RvlcTcoefTab0[146]; - else - tab = &RvlcTcoefTab1[146]; - break; - - case 0x1f9: - if (intra_luma) - tab = &RvlcTcoefTab0[147]; - else - tab = &RvlcTcoefTab1[147]; - break; - - case 0x1fc: - if (intra_luma) - tab = &RvlcTcoefTab0[96]; - else - tab = &RvlcTcoefTab1[9]; - break; - - case 0x1fd: - if (intra_luma) - tab = &RvlcTcoefTab0[87]; - else - tab = &RvlcTcoefTab1[10]; - break; - - case 0x202: - if (intra_luma) - tab = &RvlcTcoefTab0[148]; - else - tab = &RvlcTcoefTab1[148]; - break; - - case 0x203: - if (intra_luma) - tab = &RvlcTcoefTab0[149]; - else - tab = &RvlcTcoefTab1[149]; - break; - - case 0x2fc: - if (intra_luma) - tab = &RvlcTcoefTab0[68]; - else - tab = &RvlcTcoefTab1[24]; - break; - - case 0x2fd: - if (intra_luma) - tab = &RvlcTcoefTab0[74]; - else - tab = &RvlcTcoefTab1[32]; - break; - - case 0x37c: - if (intra_luma) - tab = &RvlcTcoefTab0[79]; - else - tab = &RvlcTcoefTab1[45]; - break; - - case 0x37d: - if (intra_luma) - tab = &RvlcTcoefTab0[54]; - else - tab = &RvlcTcoefTab1[50]; - break; - - case 0x3bc: - if (intra_luma) - tab = &RvlcTcoefTab0[44]; - else - tab = &RvlcTcoefTab1[67]; - break; - - case 0x3bd: - if (intra_luma) - tab = &RvlcTcoefTab0[45]; - else - tab = &RvlcTcoefTab1[85]; - break; - - case 0x3dc: - if (intra_luma) - tab = &RvlcTcoefTab0[34]; - else - tab = &RvlcTcoefTab1[86]; - break; - - case 0x3dd: - if (intra_luma) - tab = &RvlcTcoefTab0[35]; - else - tab = &RvlcTcoefTab1[87]; - break; - - case 0x3ec: - if (intra_luma) - tab = &RvlcTcoefTab0[14]; - else - tab = &RvlcTcoefTab1[88]; - break; - - case 0x3ed: - if (intra_luma) - tab = &RvlcTcoefTab0[15]; - else - tab = &RvlcTcoefTab1[89]; - break; - - case 0x3f4: - if (intra_luma) - tab = &RvlcTcoefTab0[16]; - else - tab = &RvlcTcoefTab1[90]; - break; - - case 0x3f5: - if (intra_luma) - tab = &RvlcTcoefTab0[105]; - else - tab = &RvlcTcoefTab1[105]; - break; - - case 0x3f8: - if (intra_luma) - tab = &RvlcTcoefTab0[114]; - else - tab = &RvlcTcoefTab1[114]; - break; - - case 0x3f9: - if (intra_luma) - tab = &RvlcTcoefTab0[150]; - else - tab = &RvlcTcoefTab1[150]; - break; - - case 0x3fc: - if (intra_luma) - tab = &RvlcTcoefTab0[91]; - else - tab = &RvlcTcoefTab1[11]; - break; - - case 0x3fd: - if (intra_luma) - tab = &RvlcTcoefTab0[63]; - else - tab = &RvlcTcoefTab1[25]; - break; - - case 0x402: - if (intra_luma) - tab = &RvlcTcoefTab0[151]; - else - tab = &RvlcTcoefTab1[151]; - break; - - case 0x403: - if (intra_luma) - tab = &RvlcTcoefTab0[152]; - else - tab = &RvlcTcoefTab1[152]; - break; - - case 0x5fc: - if (intra_luma) - tab = &RvlcTcoefTab0[69]; - else - tab = &RvlcTcoefTab1[33]; - break; - - case 0x5fd: - if (intra_luma) - tab = &RvlcTcoefTab0[75]; - else - tab = &RvlcTcoefTab1[39]; - break; - - case 0x6fc: - if (intra_luma) - tab = &RvlcTcoefTab0[55]; - else - tab = &RvlcTcoefTab1[54]; - break; - - case 0x6fd: - if (intra_luma) - tab = &RvlcTcoefTab0[64]; - else - tab = &RvlcTcoefTab1[58]; - break; - - case 0x77c: - if (intra_luma) - tab = &RvlcTcoefTab0[36]; - else - tab = &RvlcTcoefTab1[69]; - break; - - case 0x77d: - if (intra_luma) - tab = &RvlcTcoefTab0[17]; - else - tab = &RvlcTcoefTab1[91]; - break; - - case 0x7bc: - if (intra_luma) - tab = &RvlcTcoefTab0[18]; - else - tab = &RvlcTcoefTab1[92]; - break; - - case 0x7bd: - if (intra_luma) - tab = &RvlcTcoefTab0[21]; - else - tab = &RvlcTcoefTab1[93]; - break; - - case 0x7dc: - if (intra_luma) - tab = &RvlcTcoefTab0[110]; - else - tab = &RvlcTcoefTab1[110]; - break; - - case 0x7dd: - if (intra_luma) - tab = &RvlcTcoefTab0[117]; - else - tab = &RvlcTcoefTab1[117]; - break; - - case 0x7ec: - if (intra_luma) - tab = &RvlcTcoefTab0[119]; - else - tab = &RvlcTcoefTab1[119]; - break; - - case 0x7ed: - if (intra_luma) - tab = &RvlcTcoefTab0[153]; - else - tab = &RvlcTcoefTab1[153]; - break; - - case 0x7f4: - if (intra_luma) - tab = &RvlcTcoefTab0[154]; - else - tab = &RvlcTcoefTab1[154]; - break; - - case 0x7f5: - if (intra_luma) - tab = &RvlcTcoefTab0[155]; - else - tab = &RvlcTcoefTab1[155]; - break; - - case 0x7f8: - if (intra_luma) - tab = &RvlcTcoefTab0[156]; - else - tab = &RvlcTcoefTab1[156]; - break; - - case 0x7f9: - if (intra_luma) - tab = &RvlcTcoefTab0[157]; - else - tab = &RvlcTcoefTab1[157]; - break; - - case 0x7fc: - if (intra_luma) - tab = &RvlcTcoefTab0[97]; - else - tab = &RvlcTcoefTab1[12]; - break; - - case 0x7fd: - if (intra_luma) - tab = &RvlcTcoefTab0[98]; - else - tab = &RvlcTcoefTab1[13]; - break; - - case 0x802: - if (intra_luma) - tab = &RvlcTcoefTab0[158]; - else - tab = &RvlcTcoefTab1[158]; - break; - - case 0x803: - if (intra_luma) - tab = &RvlcTcoefTab0[159]; - else - tab = &RvlcTcoefTab1[159]; - break; - - case 0xbfc: - if (intra_luma) - tab = &RvlcTcoefTab0[93]; - else - tab = &RvlcTcoefTab1[14]; - break; - - case 0xbfd: - if (intra_luma) - tab = &RvlcTcoefTab0[84]; - else - tab = &RvlcTcoefTab1[15]; - break; - - case 0xdfc: - if (intra_luma) - tab = &RvlcTcoefTab0[88]; - else - tab = &RvlcTcoefTab1[26]; - break; - - case 0xdfd: - if (intra_luma) - tab = &RvlcTcoefTab0[80]; - else - tab = &RvlcTcoefTab1[40]; - break; - - case 0xefc: - if (intra_luma) - tab = &RvlcTcoefTab0[56]; - else - tab = &RvlcTcoefTab1[46]; - break; - - case 0xefd: - if (intra_luma) - tab = &RvlcTcoefTab0[46]; - else - tab = &RvlcTcoefTab1[51]; - break; - - case 0xf7c: - if (intra_luma) - tab = &RvlcTcoefTab0[47]; - else - tab = &RvlcTcoefTab1[62]; - break; - - case 0xf7d: - if (intra_luma) - tab = &RvlcTcoefTab0[48]; - else - tab = &RvlcTcoefTab1[71]; - break; - - case 0xfbc: - if (intra_luma) - tab = &RvlcTcoefTab0[37]; - else - tab = &RvlcTcoefTab1[94]; - break; - - case 0xfbd: - if (intra_luma) - tab = &RvlcTcoefTab0[19]; - else - tab = &RvlcTcoefTab1[95]; - break; - - case 0xfdc: - if (intra_luma) - tab = &RvlcTcoefTab0[20]; - else - tab = &RvlcTcoefTab1[96]; - break; - - case 0xfdd: - if (intra_luma) - tab = &RvlcTcoefTab0[22]; - else - tab = &RvlcTcoefTab1[97]; - break; - - case 0xfec: - if (intra_luma) - tab = &RvlcTcoefTab0[106]; - else - tab = &RvlcTcoefTab1[106]; - break; - - case 0xfed: - if (intra_luma) - tab = &RvlcTcoefTab0[121]; - else - tab = &RvlcTcoefTab1[121]; - break; - - case 0xff4: - if (intra_luma) - tab = &RvlcTcoefTab0[123]; - else - tab = &RvlcTcoefTab1[123]; - break; - - case 0xff5: - if (intra_luma) - tab = &RvlcTcoefTab0[125]; - else - tab = &RvlcTcoefTab1[125]; - break; - - case 0xff8: - if (intra_luma) - tab = &RvlcTcoefTab0[127]; - else - tab = &RvlcTcoefTab1[127]; - break; - - case 0xff9: - if (intra_luma) - tab = &RvlcTcoefTab0[129]; - else - tab = &RvlcTcoefTab1[129]; - break; - - case 0xffc: - if (intra_luma) - tab = &RvlcTcoefTab0[99]; - else - tab = &RvlcTcoefTab1[16]; - break; - - case 0xffd: - if (intra_luma) - tab = &RvlcTcoefTab0[100]; - else - tab = &RvlcTcoefTab1[17]; - break; - - case 0x1002: - if (intra_luma) - tab = &RvlcTcoefTab0[160]; - else - tab = &RvlcTcoefTab1[160]; - break; - - case 0x1003: - if (intra_luma) - tab = &RvlcTcoefTab0[161]; - else - tab = &RvlcTcoefTab1[161]; - break; - - case 0x17fc: - if (intra_luma) - tab = &RvlcTcoefTab0[101]; - else - tab = &RvlcTcoefTab1[27]; - break; - - case 0x17fd: - if (intra_luma) - tab = &RvlcTcoefTab0[85]; - else - tab = &RvlcTcoefTab1[28]; - break; - - case 0x1bfc: - if (intra_luma) - tab = &RvlcTcoefTab0[70]; - else - tab = &RvlcTcoefTab1[34]; - break; - - case 0x1bfd: - if (intra_luma) - tab = &RvlcTcoefTab0[65]; - else - tab = &RvlcTcoefTab1[35]; - break; - - case 0x1dfc: - if (intra_luma) - tab = &RvlcTcoefTab0[71]; - else - tab = &RvlcTcoefTab1[41]; - break; - - case 0x1dfd: - if (intra_luma) - tab = &RvlcTcoefTab0[57]; - else - tab = &RvlcTcoefTab1[55]; - break; - - case 0x1efc: - if (intra_luma) - tab = &RvlcTcoefTab0[58]; - else - tab = &RvlcTcoefTab1[65]; - break; - - case 0x1efd: - if (intra_luma) - tab = &RvlcTcoefTab0[49]; - else - tab = &RvlcTcoefTab1[73]; - break; - - case 0x1f7c: - if (intra_luma) - tab = &RvlcTcoefTab0[50]; - else - tab = &RvlcTcoefTab1[75]; - break; - - case 0x1f7d: - if (intra_luma) - tab = &RvlcTcoefTab0[38]; - else - tab = &RvlcTcoefTab1[77]; - break; - - case 0x1fbc: - if (intra_luma) - tab = &RvlcTcoefTab0[39]; - else - tab = &RvlcTcoefTab1[79]; - break; - - case 0x1fbd: - if (intra_luma) - tab = &RvlcTcoefTab0[23]; - else - tab = &RvlcTcoefTab1[98]; - break; - - case 0x1fdc: - if (intra_luma) - tab = &RvlcTcoefTab0[24]; - else - tab = &RvlcTcoefTab1[99]; - break; - - case 0x1fdd: - if (intra_luma) - tab = &RvlcTcoefTab0[25]; - else - tab = &RvlcTcoefTab1[100]; - break; - - case 0x1fec: - if (intra_luma) - tab = &RvlcTcoefTab0[107]; - else - tab = &RvlcTcoefTab1[107]; - break; - - case 0x1fed: - if (intra_luma) - tab = &RvlcTcoefTab0[111]; - else - tab = &RvlcTcoefTab1[111]; - break; - - case 0x1ff4: - if (intra_luma) - tab = &RvlcTcoefTab0[131]; - else - tab = &RvlcTcoefTab1[131]; - break; - - case 0x1ff5: - if (intra_luma) - tab = &RvlcTcoefTab0[133]; - else - tab = &RvlcTcoefTab1[133]; - break; - - case 0x1ff8: - if (intra_luma) - tab = &RvlcTcoefTab0[135]; - else - tab = &RvlcTcoefTab1[135]; - break; - - case 0x1ff9: - if (intra_luma) - tab = &RvlcTcoefTab0[162]; - else - tab = &RvlcTcoefTab1[162]; - break; - - case 0x1ffc: - if (intra_luma) - tab = &RvlcTcoefTab0[26]; - else - tab = &RvlcTcoefTab1[18]; - break; - - case 0x1ffd: - if (intra_luma) - tab = &RvlcTcoefTab0[59]; - else - tab = &RvlcTcoefTab1[42]; - break; - - case 0x2002: - if (intra_luma) - tab = &RvlcTcoefTab0[163]; - else - tab = &RvlcTcoefTab1[163]; - break; - - case 0x2003: - if (intra_luma) - tab = &RvlcTcoefTab0[164]; - else - tab = &RvlcTcoefTab1[164]; - break; - - case 0x2ffc: - if (intra_luma) - tab = &RvlcTcoefTab0[76]; - else - tab = &RvlcTcoefTab1[47]; - break; - - case 0x2ffd: - if (intra_luma) - tab = &RvlcTcoefTab0[81]; - else - tab = &RvlcTcoefTab1[59]; - break; - - case 0x37fc: - if (intra_luma) - tab = &RvlcTcoefTab0[89]; - else - tab = &RvlcTcoefTab1[81]; - break; - - case 0x37fd: - if (intra_luma) - tab = &RvlcTcoefTab0[95]; - else - tab = &RvlcTcoefTab1[101]; - break; - - case 0x3bfc: - if (intra_luma) - tab = &RvlcTcoefTab0[102]; - else - tab = &RvlcTcoefTab1[102]; - break; - - case 0x3bfd: - if (intra_luma) - tab = &RvlcTcoefTab0[112]; - else - tab = &RvlcTcoefTab1[112]; - break; - - case 0x3dfc: - if (intra_luma) - tab = &RvlcTcoefTab0[115]; - else - tab = &RvlcTcoefTab1[115]; - break; - - case 0x3dfd: - if (intra_luma) - tab = &RvlcTcoefTab0[137]; - else - tab = &RvlcTcoefTab1[137]; - break; - - case 0x3efc: - if (intra_luma) - tab = &RvlcTcoefTab0[165]; - else - tab = &RvlcTcoefTab1[165]; - break; - - case 0x3efd: - if (intra_luma) - tab = &RvlcTcoefTab0[166]; - else - tab = &RvlcTcoefTab1[166]; - break; - - case 0x3f7c: - if (intra_luma) - tab = &RvlcTcoefTab0[167]; - else - tab = &RvlcTcoefTab1[167]; - break; - - case 0x3f7d: - if (intra_luma) - tab = &RvlcTcoefTab0[168]; - else - tab = &RvlcTcoefTab1[168]; - break; - - default: - deb("ERROR - illegal RVLC TCOEF\n"); - return VDX_OK_BUT_BIT_ERROR; - } - - *index = tab->val; - *length = tab->len; - - return VDX_OK; -} - -/* - * vdxGetRVLCDCTBlock - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * startIndex the first index in block where to put data - * block array for block (length 64) - * fIntraBlock indicates an intra "1" or inter "0" Block - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads a block from bit buffer using Huffman codes listed - * in RVLC TCOEF table. The place, where the block is read is given as a - * pointer parameter. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - * - */ - -int vdxGetRVLCDCTBlock( - bibBuffer_t *inBuffer, - int startIndex, - int fIntraBlock, - int *block, - int *bitErrorIndication) -{ - int numBitsGot, - retValue = VDX_OK, - index = startIndex, /* index to zigzag table running from 1 to 63 */ - tmpvar; - u_int32 - bits, - RVLCIndex = 0, - RVLCLength = 0; - int16 - bibError = 0; - - int run, /* RUN code */ - level; /* LEVEL code */ - u_int32 - last, /* LAST code (see standard) */ - sign; /* sign for level */ - - vdxAssert(inBuffer != NULL); - vdxAssert(startIndex == 0 || startIndex == 1); - vdxAssert(block != NULL); - vdxAssert(bitErrorIndication != NULL); - - do { - - /* Read next codeword */ - bits = (int) bibShowBits(15, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - deb("vdxGetRVLCDCTBlock: bibShowBits returned not enough data --> " - "try to use the data available.\n"); - bits <<= (15 - numBitsGot); - bibError = 0; - } - else if (bibError ) { - deb("vdxGetRVLCDCTBlock: ERROR - bibShowBits failed.\n"); - goto exitFunction; - } - - /* Identifying the codeword in the read bits */ - { - int count, len = 1; - u_int32 mask = 0x4000; /* mask 100000000000000 */ - - if (bits & mask) { - count = 1; - for (len = 1; count > 0 && len < 15; len++) { - mask = mask >> 1; - if (bits & mask) - count--; - } - } else { - count = 2; - for (len = 1; count > 0 && len < 15; len++) { - mask = mask >> 1; - if (!(bits & mask)) - count--; - } - } - - if (len >= 15) { - deb("vdxGetRVLCDCTBlock:ERROR - illegal RVLC codeword.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - bits = bits & 0x7fff; - bits = bits >> (15 - (len + 1)); - } - - /* Get the RVLC table Index and length belonging to the codeword */ - if (vdxGetRVLCIndex(bits, &RVLCIndex, (int *) &RVLCLength, fIntraBlock, bitErrorIndication) != VDX_OK) - goto exitFunction; - - /* Flush the codeword from the buffer */ - bibFlushBits(RVLCLength, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - if (bibError) - goto exitFunction; - - if (RVLCIndex == 7167) /* ESCAPE */ - { - /* Flush the rest of the ESCAPE code from the buffer */ - bibFlushBits(1, inBuffer, &numBitsGot, bitErrorIndication, &bibError); - if (bibError) - goto exitFunction; - - /* LAST */ - last = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError) - goto exitFunction; - /* RUN */ - run = (int) bibGetBits(6, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError) - goto exitFunction; - /* MARKER BIT */ - tmpvar = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication,&bibError); - if (bibError) - goto exitFunction; - if (!tmpvar) { - deb("vdxGetRVLCDCTBlock:ERROR - Wrong marker bit.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - /* LEVEL */ - level = (int) bibGetBits(11, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError) - goto exitFunction; - if (level == 0) { - deb("vdxGetRVLCDCTBlock:ERROR - Escape level invalid.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - /* MARKER BIT */ - tmpvar = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication,&bibError); - if (bibError) - goto exitFunction; - if (!tmpvar) { - deb("vdxGetRVLCDCTBlock:ERROR - Wrong marker bit.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - /* SIGN */ - sign = bibGetBits(5, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError) - goto exitFunction; - - if (sign == 1) { - level = -level; - } else if (sign != 0) { - deb("vdxGetRVLCDCTBlock:ERROR - illegal sign.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - } else { - - last = (RVLCIndex >> 16) & 1; - run = (RVLCIndex >> 8) & 255; - level = RVLCIndex & 255; - - sign = bibGetBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError) - goto exitFunction; - - if (sign) - level = -level; - } - - /* If too many coefficients */ - if (index + run > 63) { - deb("vdxGetRVLCDCTBlock:ERROR - too many TCOEFs.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - /* Do run-length decoding */ - while (run--) - block[index++] = 0; - - block[index++] = level; - - } while (!last); - - exitFunction: - - /* Set the rest of the coefficients to zero */ - while (index <= 63) { - block[index++] = 0; - } - - if (!bibError) - return retValue; - - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } - - else - return VDX_ERR_BIB; -} - -/* - * vdxGetRVLCDCTBlockBackwards - * - * - * Parameters: - * inBuffer pointer to bit buffer instance - * startIndex the first index in block where to put data - * fIntraBlock indicates an intra "1" or inter "0" Block - * BitPosBeforeRVLC bit position of inBuffer before the RVLC block, - * indicates the point to stop decoding backwards - * block array for block (length 64) - * bitErrorIndication non-zero if a bit error has been detected - * within the bits accessed in this function, - * see biterr.h for possible values - * - * Function: - * This function reads a block in backwards direction from the bit buffer - * using Huffman codes listed in RVLC TCOEF table. The bit position of the - * buffer at return from the function is where the DCT data of the current - * block starts. - * - * Returns: - * VDX_OK the function was successful - * VDX_OK_BUT_BIT_ERROR the function behaved normally, but a bit error - * occured - * VDX_ERR_BIB an error occured when accessing bit buffer - * - * - * - */ - -int vdxGetRVLCDCTBlockBackwards( - bibBuffer_t *inBuffer, - int startIndex, - int fIntraBlock, -// u_int32 BitPosBeforeRVLC, - int *block, - int *bitErrorIndication) -{ - int numBitsGot, - retValue = VDX_OK, - index = 63; /* index to zigzag table running from 1 to 63 */ - u_int32 - bits, - RVLCIndex = 0, - RVLCLength = 0; - int16 - bibError = 0; - - int run, /* RUN code */ - level; /* LEVEL code */ - u_int32 - last, /* LAST code (see standard) */ - sign, /* sign for level */ - escape; - - vdxAssert(inBuffer != NULL); - vdxAssert(startIndex == 0 || startIndex == 1); - vdxAssert(block != NULL); - vdxAssert(bitErrorIndication != NULL); - - do { - /* SIGN */ - bibRewindBits(1, inBuffer, &bibError); - if (bibError) - goto exitFunction; - sign = bibShowBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError) { - goto exitFunction; - } - - /* Read next codeword */ - bibRewindBits(15, inBuffer, &bibError); - if (bibError) - goto exitFunction; - bits = (int) bibGetBits(15, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - deb("vdxGetRVLCDCTBlockBackwards: bibShowBits returned not enough data --> " - "try to use the data available.\n"); - bits <<= (15 - numBitsGot); - bibError = 0; - } - else if (bibError) { - deb("vdxGetRVLCDCTBlockBackwards: ERROR - bibGetBits failed.\n"); - goto exitFunction; - } - - /* Identifying the codeword in the read bits */ - { - int count, len = 1; - u_int32 mask = 2; /* mask 000000000000010 */ - - if (bits & mask) { - count = 1; - for (len = 1; count > 0 && len < 15; len++) { - mask = mask << 1; - if (bits & mask) - count--; - } - } else { - count = 2; - for (len = 1; count > 0 && len < 15; len++) { - mask = mask << 1; - if (!(bits & mask)) - count--; - } - } - - if (len >= 15) { - deb("vdxGetRVLCDCTBlockBackwards:ERROR - illegal RVLC codeword.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - bits = bits & (0x7fff >> (15 - (len + 1))); - } - - /* Get the RVLC table Index and length belonging to the codeword */ - if (vdxGetRVLCIndex(bits, &RVLCIndex, (int *) &RVLCLength, fIntraBlock, bitErrorIndication) != VDX_OK) - goto exitFunction; - - /* Flush the codeword from the buffer */ - bibRewindBits(RVLCLength, inBuffer, &bibError); - if (bibError) - goto exitFunction; - - if (RVLCIndex == 7167) /* ESCAPE */ - { - /* MARKER BIT */ - bibRewindBits(1, inBuffer, &bibError); - if (bibError) - goto exitFunction; - if(!bibShowBits(1, inBuffer, &numBitsGot, bitErrorIndication,&bibError) - || bibError ) { - deb("vdxGetRVLCDCTBlockBackwards:ERROR - Wrong marker bit.\n"); - if ( !bibError ) - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - /* LEVEL */ - bibRewindBits(11, inBuffer, &bibError); - if (bibError) - goto exitFunction; - level = (int) bibShowBits(11, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (level == 0 || bibError ) { - if (!bibError) { - deb("vdxGetRVLCDCTBlockBackwards:ERROR - Invalid Level.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - } - goto exitFunction; - } - /* MARKER BIT */ - bibRewindBits(1, inBuffer, &bibError); - if (bibError) - goto exitFunction; - if(!bibShowBits(1, inBuffer, &numBitsGot, bitErrorIndication,&bibError) - || bibError ) { - if ( !bibError ) { - deb("vdxGetRVLCDCTBlockBackwards:ERROR - Wrong marker bit.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - } - goto exitFunction; - } - /* RUN */ - bibRewindBits(6, inBuffer, &bibError); - if (bibError) - goto exitFunction; - run = (int) bibShowBits(6, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError) { - goto exitFunction; - } - /* LAST */ - bibRewindBits(1, inBuffer, &bibError); - if (bibError) - goto exitFunction; - last = bibShowBits(1, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError) { - goto exitFunction; - } - - /* Get the first ESCAPE code from the buffer */ - bibRewindBits(5, inBuffer, &bibError); - if (bibError) - goto exitFunction; - escape = bibShowBits(5, inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError) { - goto exitFunction; - } - - if (escape != 1) { - deb("vdxGetRVLCDCTBlockBackwards:ERROR - illegal escape code.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } - - RVLCLength += 25; - - } else { - - last = (RVLCIndex >> 16) & 1; - run = (RVLCIndex >> 8) & 255; - level = RVLCIndex & 255; - } - - if (sign) - level = -level; - - if (index == 63) { - if (!last) { - deb("vdxGetRVLCDCTBlockBackwards:ERROR - last TCOEFF problem.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - } else - last = 0; - } - - if (last) { - bibFlushBits((RVLCLength + 1), inBuffer, &numBitsGot, bitErrorIndication, - &bibError); - if (bibError) - goto exitFunction; - - } else if (index - run < startIndex) { - deb("vdxGetRVLCDCTBlockBackwards:ERROR - too many TCOEFFs.\n"); - retValue = VDX_OK_BUT_BIT_ERROR; - goto exitFunction; - - } else { - /* Do run-length decoding. Since we are decoding backwards, level has to be inserted first */ - block[index--] = level; - - while (run--) - block[index--] = 0; - - } - - } while (!last); - - exitFunction: - - { - int i; - for(i=startIndex,index++; i<=63; i++,index++) - block[i]= (index <= 63) ? block[index] : 0; - } - - - if (!bibError) - return retValue; - else if (bibError == ERR_BIB_NOT_ENOUGH_DATA) { - return VDX_OK_BUT_BIT_ERROR; - } else - return VDX_ERR_BIB; -} - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/h263decoder/src/vlb.cpp --- a/videoeditorengine/h263decoder/src/vlb.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1434 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation for MPEG4(H263) video transcoder. -* VLC encoding for RVLC -> VLC AC/DCT coeficients in the transcoder. -* -*/ - - -#include "biblin.h" -#include "common.h" - - -/* Run-length coding */ -typedef struct{ - int16 run; - int level; - int16 last; -} tEvent; - -/* Variable length coding */ -typedef struct{ - u_int16 code; - u_int16 length; -} tVLCTable; - - -/* - * Function Declarations - */ -int32 vlbPutACCoeffSVH(int32 coeffStart, int16* block, bibBuffer_t * outBuf, - int32 svh, int32 lastPos); -int32 vlbPutACVLCCoeff(bibBuffer_t *outBuf, tEvent *event, int32 svh); -int32 vlbPutDCCoeffCMT(int val, bibBuffer_t * outBuf, int32 blkCnt); -int32 vlbPutIntraACCoeffCMTDP(bibBuffer_t *outBuf, tEvent *event); -int32 vlbPutIntraACCoeffCMT(int32 coeffStart, int* block, bibBuffer_t * outBuf); -void vdtPutBits (void *outBuf, int numBits, unsigned int value); - - -/* - * Function Definitions - */ - - -/* {{-output"vlbPutBits.txt"}} */ -/* -* vlbPutBits -* -* Parameters: -* outBuf output buffer -* numBits number of bits to write -* value value to write -* -* Function: -* This function puts some bits to the output buffer -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vlbPutBits (bibBuffer_t *outBuf, - int32 numBits, - u_int32 value) -{ - // To be compatible with the old codes, I don't change the interface - vdtPutBits((void *)outBuf, numBits, value); -} - - -/* - * Look-up tables - */ - -/* INTRA VLC tables */ - -/* run == 0 && level < 28 */ -const tVLCTable vlbVLCTable1IntraAC[28] = -{ - {NOT_VALID,NOT_VALID}, {0x04,0x03}, {0x0c,0x04}, - {0x1e,0x05}, {0x1a,0x06}, {0x18,0x06}, {0x2a,0x07}, - {0x26,0x07}, {0x24,0x07}, {0x2e,0x08}, {0x3e,0x09}, - {0x3c,0x09}, {0x3a,0x09}, {0x4a,0x0a}, {0x48,0x0a}, - {0x46,0x0a}, {0x42,0x0a}, {0x42,0x0b}, {0x40,0x0b}, - {0x1e,0x0b}, {0x1c,0x0b}, {0x0e,0x0c}, {0x0c,0x0c}, - {0x40,0x0c}, {0x42,0x0c}, {0xa0,0x0d}, {0xa2,0x0d}, - {0xa4,0x0d} -}; - -/* run == 1 && level < 11 */ -const tVLCTable vlbVLCTable2IntraAC[11] = -{ - {NOT_VALID, NOT_VALID}, {0x1c,0x05}, {0x28,0x07}, - {0x2c,0x08}, {0x38,0x09}, {0x40,0x0a}, {0x3e,0x0a}, - {0x1a,0x0b}, {0x44,0x0c}, {0xa6,0x0d}, {0xaa,0x0d} -}; - -/* run == 2 && level < 6 */ -const tVLCTable vlbVLCTable3IntraAC[6] = -{ - {NOT_VALID, NOT_VALID}, {0x16,0x06}, {0x2a,0x08}, - {0x3c,0x0a}, {0x18,0x0b}, {0xac,0x0d} -}; - -/* run == 3 && level < 5 */ -const tVLCTable vlbVLCTable4IntraAC[5] = -{ - {NOT_VALID, NOT_VALID}, {0x22,0x07}, {0x36,0x09}, - {0x3a,0x0a}, {0x16,0x0b} -}; - -/* 4 <= run < 8 && level < 4 */ -const tVLCTable vlbVLCTable5IntraAC[4][4] = -{ - { - {NOT_VALID, NOT_VALID}, {0x20,0x07}, {0x44,0x0a}, - {0x14,0x0b} - }, - { - {NOT_VALID, NOT_VALID}, {0x1a,0x07}, {0x38,0x0a}, - {0x10,0x0b} - }, - { - {NOT_VALID, NOT_VALID}, {0x24,0x08}, {0x36,0x0a}, - {0xa8,0x0d} - }, - { - {NOT_VALID, NOT_VALID}, {0x28,0x08}, {0x34,0x0a}, - {0xae,0x0d} - } -}; - -/* 8 <= run < 10 && level < 3 */ -const tVLCTable vlbVLCTable6IntraAC[2][3] = -{ - { - {NOT_VALID, NOT_VALID}, {0x32,0x09}, {0x12,0x0b} - }, - { - {NOT_VALID, NOT_VALID}, {0x30,0x09}, {0x46,0x0c} - } -}; - -/* 10 <= run < 15 && level < 2 */ -const tVLCTable vlbVLCTable7IntraAC[5][2] = -{ - { - {NOT_VALID, NOT_VALID}, {0x2e,0x09} - }, - { - {NOT_VALID, NOT_VALID}, {0x32,0x0a} - }, - { - {NOT_VALID, NOT_VALID}, {0x30,0x0a} - }, - { - {NOT_VALID, NOT_VALID}, {0x0e,0x0b} - }, - { - {NOT_VALID, NOT_VALID}, {0xb0,0x0d} - } -}; - -/* run == 0 && level < 9 */ -const tVLCTable vlbVLCTable8IntraAC[9] = -{ - {NOT_VALID, NOT_VALID}, {0x0e,0x05}, {0x18,0x07}, - {0x2c,0x09}, {0x2e,0x0a}, {0x0c,0x0b}, {0x0a,0x0c}, - {0x08,0x0c}, {0xb2,0x0d} -}; - -/* run == 1 && level < 4 */ -const tVLCTable vlbVLCTable9IntraAC[4] = -{ - {NOT_VALID, NOT_VALID}, {0x1e,0x07}, {0x2c,0x0a}, - {0x0a,0x0b} -}; - -/* 2 <= run < 7 && level < 3 */ -const tVLCTable vlbVLCTable10IntraAC[5][3] = -{ - { - {NOT_VALID, NOT_VALID}, {0x1c,0x07}, {0x08,0x0b} - }, - { - {NOT_VALID, NOT_VALID}, {0x22,0x08}, {0x48,0x0c} - }, - { - {NOT_VALID, NOT_VALID}, {0x20,0x08}, {0x4a,0x0c} - }, - { - {NOT_VALID, NOT_VALID}, {0x26,0x08}, {0xb4,0x0d} - }, - { - {NOT_VALID, NOT_VALID}, {0x2a,0x09}, {0xb6,0x0d} - } -}; - -/* 7 <= run < 21 && level == 1 */ -const tVLCTable vlbVLCTable11IntraAC[14][2] = -{ - { - {NOT_VALID, NOT_VALID}, {0x28,0x09} - }, - { - {NOT_VALID, NOT_VALID}, {0x26,0x09} - }, - { - {NOT_VALID, NOT_VALID}, {0x34,0x09} - }, - { - {NOT_VALID, NOT_VALID}, {0x2a,0x0a} - }, - { - {NOT_VALID, NOT_VALID}, {0x28,0x0a} - }, - { - {NOT_VALID, NOT_VALID}, {0x26,0x0a} - }, - { - {NOT_VALID, NOT_VALID}, {0x24,0x0a} - }, - { - {NOT_VALID, NOT_VALID}, {0x22,0x0a} - }, - { - {NOT_VALID, NOT_VALID}, {0x4c,0x0c} - }, - { - {NOT_VALID, NOT_VALID}, {0x4e,0x0c} - }, - { - {NOT_VALID, NOT_VALID}, {0xb8,0x0d} - }, - { - {NOT_VALID, NOT_VALID}, {0xba,0x0d} - }, - { - {NOT_VALID, NOT_VALID}, {0xbc,0x0d} - }, - { - {NOT_VALID, NOT_VALID}, {0xbe,0x0d} - } -}; - - -/* Inter AC VLC tables */ - -const tVLCTable vlbVLCTable1InterAC[13] = -{ - {NOT_VALID, NOT_VALID}, - {0x04,0x03}, {0x1e,0x05}, {0x2a,0x07}, {0x2e,0x08}, - {0x3e,0x09}, {0x4a,0x0a}, {0x48,0x0a}, {0x42,0x0b}, - {0x40,0x0b}, {0x0e,0x0c}, {0x0c,0x0c}, {0x40,0x0c} -}; - -const tVLCTable vlbVLCTable2InterAC[7] = -{ - {NOT_VALID, NOT_VALID}, {0x0c,0x04}, {0x28,0x07}, - {0x3c,0x09}, {0x1e,0x0b}, {0x42,0x0c}, {0xa0,0x0d} -}; - -const tVLCTable vlbVLCTable3InterAC[5] = -{ - {NOT_VALID, NOT_VALID}, {0x1c,0x05}, {0x3a,0x09}, - {0x1c,0x0b}, {0xa2,0x0d} -}; - -const tVLCTable vlbVLCTable4InterAC[4][4] = -{ - { - {NOT_VALID, NOT_VALID}, {0x1a,0x06}, {0x46,0x0a}, - {0x1a,0x0b} - }, - { - {NOT_VALID, NOT_VALID}, {0x18,0x06}, {0x44,0x0a}, - {0xa4,0x0d} - }, - { - {NOT_VALID, NOT_VALID}, {0x16,0x06}, {0x18,0x0b}, - {0xa6,0x0d} - }, - { - {NOT_VALID, NOT_VALID}, {0x26,0x07}, {0x16,0x0b}, - {0xa8,0x0d} - } -}; - -const tVLCTable vlbVLCTable5InterAC[4][3] = -{ - { - {NOT_VALID, NOT_VALID}, {0x24,0x07}, {0x14,0x0b} - }, - { - {NOT_VALID, NOT_VALID}, {0x22,0x07}, {0x12,0x0b} - }, - { - {NOT_VALID, NOT_VALID}, {0x20,0x07}, {0x10,0x0b} - }, - { - {NOT_VALID, NOT_VALID}, {0x2c,0x08}, {0xaa,0x0d} - } -}; - -const tVLCTable vlbVLCTable6InterAC[16] = -{ - {0x2a,0x08}, {0x28,0x08}, {0x38,0x09}, {0x36,0x09}, - {0x42,0x0a}, {0x40,0x0a}, {0x3e,0x0a}, {0x3c,0x0a}, - {0x3a,0x0a}, {0x38,0x0a}, {0x36,0x0a}, {0x34,0x0a}, - {0x44,0x0c}, {0x46,0x0c}, {0xac,0x0d}, {0xae,0x0d} -}; - -const tVLCTable vlbVLCTable7InterAc[4] = -{ - {NOT_VALID, NOT_VALID}, {0x0e,0x05}, {0x32,0x0a}, - {0x0a,0x0c} -}; - -const tVLCTable vlbVLCTable8InterAC[3] = -{ - {NOT_VALID, NOT_VALID}, {0x1e,0x07}, {0x08,0x0c} -}; - -const tVLCTable vlbVLCTable9InterAC[39] = -{ - {0x1c,0x07}, {0x1a,0x07}, {0x18,0x07}, {0x26,0x08}, - {0x24,0x08}, {0x22,0x08}, {0x20,0x08}, {0x34,0x09}, - {0x32,0x09}, {0x30,0x09}, {0x2e,0x09}, {0x2c,0x09}, - {0x2a,0x09}, {0x28,0x09}, {0x26,0x09}, {0x30,0x0a}, - {0x2e,0x0a}, {0x2c,0x0a}, {0x2a,0x0a}, {0x28,0x0a}, - {0x26,0x0a}, {0x24,0x0a}, {0x22,0x0a}, {0x0e,0x0b}, - {0x0c,0x0b}, {0x0a,0x0b}, {0x08,0x0b}, {0x48,0x0c}, - {0x4a,0x0c}, {0x4c,0x0c}, {0x4e,0x0c}, {0xb0,0x0d}, - {0xb2,0x0d}, {0xb4,0x0d}, {0xb6,0x0d}, {0xb8,0x0d}, - {0xba,0x0d}, {0xbc,0x0d}, {0xbe,0x0d} -}; - - -const int8 vlbVLCRun0InterAC[64] = -{ - 0x0d, 0x07, 0x05, 0x04, 0x04, 0x04, 0x04, 0x03, - 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -const int8 vlbVLCRun1InterAC[64] = -{ - 0x04, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -/* other tables */ -const int8 vlbLMaxTableIntra[36] = -{ - 0x1b, 0x0a, 0x05, 0x04, 0x03, 0x03, - 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x08, 0x03, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 -}; - -const int8 vlbLMaxTableInter[68] = -{ - 0x0c, 0x06, 0x04, 0x03, 0x03, 0x03, - 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x03, 0x02, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01 -}; - -const int8 vlbRMaxTableIntra[35] = -{ - 0x0f, 0x0a, 0x08, 0x04, 0x03, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x15, 0x07, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01 -}; - -const int8 vlbRMaxTableInter[15] = -{ - 0x1b, 0x0b, 0x07, 0x03, 0x02, 0x02, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x29, 0x02, 0x01 -}; - - -const u_int32 vlbZigzagScan[64] = -{ - 0x00, 0x01, 0x08, 0x10, 0x09, 0x02, 0x03, 0x0a, - 0x11, 0x18, 0x20, 0x19, 0x12, 0x0b, 0x04, 0x05, - 0x0c, 0x13, 0x1a, 0x21, 0x28, 0x30, 0x29, 0x22, - 0x1b, 0x14, 0x0d, 0x06, 0x07, 0x0e, 0x15, 0x1c, - 0x23, 0x2a, 0x31, 0x38, 0x39, 0x32, 0x2b, 0x24, - 0x1d, 0x16, 0x0f, 0x17, 0x1e, 0x25, 0x2c, 0x33, - 0x3a, 0x3b, 0x34, 0x2d, 0x26, 0x1f, 0x27, 0x2e, - 0x35, 0x3c, 0x3d, 0x36, 0x2f, 0x37, 0x3e, 0x3f -}; - -const u_int32 vlbInvZigzagScan[64] = -{ - 0x00, 0x01, 0x05, 0x06, 0x0e, 0x0f, 0x1b, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1d, 0x2a, - 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2b, - 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2c, 0x35, - 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x36, - 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x3c, - 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3d, - 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3e, 0x3f -}; - - -const tVLCTable vlbLumaTableIntraDC[13] = -{ - {0x03,0x03}, {0x03,0x02}, {0x02,0x02}, {0x02,0x03}, - {0x01,0x03}, {0x01,0x04}, {0x01,0x05}, {0x01,0x06}, - {0x01,0x07}, {0x01,0x08}, {0x01,0x09}, {0x01,0x0a}, - {0x01,0x0b} -}; - -const tVLCTable vlbChromaTableIntraDC[13] = -{ - {0x03,0x02}, {0x02,0x02}, {0x01,0x02}, {0x01,0x03}, - {0x01,0x04}, {0x01,0x05}, {0x01,0x06}, {0x01,0x07}, - {0x01,0x08}, {0x01,0x09}, {0x01,0x0a}, {0x01,0x0b} -}; - -/* Array of pointers for AC VLC (INTER)tables */ -const tVLCTable * const vlbVLCTablePointer0[27] = -{ - vlbVLCTable1InterAC, - vlbVLCTable2InterAC, - vlbVLCTable3InterAC, - vlbVLCTable4InterAC[0], - vlbVLCTable4InterAC[1], - vlbVLCTable4InterAC[2], - vlbVLCTable4InterAC[3], - vlbVLCTable5InterAC[0], - vlbVLCTable5InterAC[1], - vlbVLCTable5InterAC[2], - vlbVLCTable5InterAC[3], - vlbVLCTable6InterAC - 0x01, // this pointer is going outside the range, but it is used only with condition (level < vlbVLCRun0InterAC[run]) which results having indexes > 0 and hence the array is never indexed below its base address - vlbVLCTable6InterAC , - vlbVLCTable6InterAC + 0x01, - vlbVLCTable6InterAC + 0x02, - vlbVLCTable6InterAC + 0x03, - vlbVLCTable6InterAC + 0x04, - vlbVLCTable6InterAC + 0x05, - vlbVLCTable6InterAC + 0x06, - vlbVLCTable6InterAC + 0x07, - vlbVLCTable6InterAC + 0x08, - vlbVLCTable6InterAC + 0x09, - vlbVLCTable6InterAC + 0x0a, - vlbVLCTable6InterAC + 0x0b, - vlbVLCTable6InterAC + 0x0c, - vlbVLCTable6InterAC + 0x0d, - vlbVLCTable6InterAC + 0x0e - -}; - -const tVLCTable * const vlbVLCTablePointer1[41] = -{ - vlbVLCTable7InterAc, - vlbVLCTable8InterAC, - vlbVLCTable9InterAC - 0x01, // this pointer is going outside the range, but it is used only with condition (level < vlbVLCRun1InterAC[run]) which results having indexes > 0 and hence the array is never indexed below its base address - vlbVLCTable9InterAC , - vlbVLCTable9InterAC + 0x01, - vlbVLCTable9InterAC + 0x02, - vlbVLCTable9InterAC + 0x03, - vlbVLCTable9InterAC + 0x04, - vlbVLCTable9InterAC + 0x05, - vlbVLCTable9InterAC + 0x06, - vlbVLCTable9InterAC + 0x07, - vlbVLCTable9InterAC + 0x08, - vlbVLCTable9InterAC + 0x09, - vlbVLCTable9InterAC + 0x0a, - vlbVLCTable9InterAC + 0x0b, - vlbVLCTable9InterAC + 0x0c, - vlbVLCTable9InterAC + 0x0d, - vlbVLCTable9InterAC + 0x0e, - vlbVLCTable9InterAC + 0x0f, - vlbVLCTable9InterAC + 0x10, - vlbVLCTable9InterAC + 0x11, - vlbVLCTable9InterAC + 0x12, - vlbVLCTable9InterAC + 0x13, - vlbVLCTable9InterAC + 0x14, - vlbVLCTable9InterAC + 0x15, - vlbVLCTable9InterAC + 0x16, - vlbVLCTable9InterAC + 0x17, - vlbVLCTable9InterAC + 0x18, - vlbVLCTable9InterAC + 0x19, - vlbVLCTable9InterAC + 0x1a, - vlbVLCTable9InterAC + 0x1b, - vlbVLCTable9InterAC + 0x1c, - vlbVLCTable9InterAC + 0x1d, - vlbVLCTable9InterAC + 0x1e, - vlbVLCTable9InterAC + 0x1f, - vlbVLCTable9InterAC + 0x20, - vlbVLCTable9InterAC + 0x21, - vlbVLCTable9InterAC + 0x22, - vlbVLCTable9InterAC + 0x23, - vlbVLCTable9InterAC + 0x24, - vlbVLCTable9InterAC + 0x25, -}; - -const int8 vlbVLCRun0IntraAC[64] = -{ - 0x1c, 0x0b, 0x06, 0x05, 0x04, 0x04, 0x04, 0x04, - 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -const int8 vlbVLCRun1IntraAC[64] = -{ - 0x09, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; - -/* array of table pointers for AC VLC INTRA tables*/ - -const tVLCTable * const vlbVLCTableIntraPointer0[15] = -{ - vlbVLCTable1IntraAC, - vlbVLCTable2IntraAC, - vlbVLCTable3IntraAC, - vlbVLCTable4IntraAC, - vlbVLCTable5IntraAC[0], - vlbVLCTable5IntraAC[1], - vlbVLCTable5IntraAC[2], - vlbVLCTable5IntraAC[3], - vlbVLCTable6IntraAC[0], - vlbVLCTable6IntraAC[1], - vlbVLCTable7IntraAC[0], - vlbVLCTable7IntraAC[1], - vlbVLCTable7IntraAC[2], - vlbVLCTable7IntraAC[3], - vlbVLCTable7IntraAC[4], -}; - -const tVLCTable * const vlbVLCTableIntraPointer1[21] = -{ - vlbVLCTable8IntraAC, - vlbVLCTable9IntraAC, - vlbVLCTable10IntraAC[0], - vlbVLCTable10IntraAC[1], - vlbVLCTable10IntraAC[2], - vlbVLCTable10IntraAC[3], - vlbVLCTable10IntraAC[4], - vlbVLCTable11IntraAC[0], - vlbVLCTable11IntraAC[1], - vlbVLCTable11IntraAC[2], - vlbVLCTable11IntraAC[3], - vlbVLCTable11IntraAC[4], - vlbVLCTable11IntraAC[5], - vlbVLCTable11IntraAC[6], - vlbVLCTable11IntraAC[7], - vlbVLCTable11IntraAC[8], - vlbVLCTable11IntraAC[9], - vlbVLCTable11IntraAC[10], - vlbVLCTable11IntraAC[11], - vlbVLCTable11IntraAC[12], - vlbVLCTable11IntraAC[13], -}; - - -/* {{-output"vdtPutIntraMBCMT.txt"}} */ -/* -* vdtPutIntraMBCMT -* -* Parameters: -* outBuf output buffer -* coeff pointer to the coefficients that must be in scanned order -* numTextureBits pointer to store the number of bits taken to encode the macro block. -* index block Index -* skipDC whether to skip INTRA DC -* skipAC whether to skip INTRA AC -* -* Function: -* This function forms the bitstream for INTRA macroblock in combined motion and -* texture mode for the transcoding module -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vdtPutIntraMBCMT(bibBuffer_t *outBuf, int *coeff, int *numTextureBits, int index, int skipDC, int skipAC) -{ - int32 textureBits; - textureBits = 0; - - // DC coefficient VLC - if (!skipDC) - { - textureBits += vlbPutDCCoeffCMT(coeff[0], outBuf, index); - } - - //AC coefficient VLC - if (!skipAC) - { - textureBits += vlbPutIntraACCoeffCMT(1, coeff, outBuf); - *numTextureBits = textureBits; - } - - return; -} - - -/* {{-output"vdtPutInterMBCMT.txt"}} */ -/* -* vdtPutInterMBCMT -* -* Parameters: -* outBuf output buffer -* coeff pointer to the coefficients that must be in scanned order -* numTextureBits pointer to store the number of bits taken to encode the macro block. -* svh flag to indicate short video header -* -* Function: -* This function forms the bitstream for INTER macroblock in combined motion and -* texture mode for the transcoding module -* -* Returns: -* Nothing. -* -* Error codes: -* None. -* -*/ -void vdtPutInterMBCMT(bibBuffer_t *outBuf, int coeffStart, int *coeff, int *numTextureBits, int svh) -{ - int32 textureBits; - int16 coeffInt16[64]; - - /* encode texture coefficients */ - textureBits = 0; - /* find out the last nonzero coeficients */ - int nonZeroDCT = 0; - for (int i = 0; i < 64; i++) - { - nonZeroDCT = coeff[i] != 0 ? i : nonZeroDCT; - coeffInt16[i] = (int16)coeff[i]; - } - textureBits += vlbPutACCoeffSVH(coeffStart, coeffInt16, outBuf, svh, nonZeroDCT); - *numTextureBits = textureBits; - - return; -} - - - -/* {{-output"vlbPutDCCoeffCMT.txt"}} */ -/* -* vlbPutDCCoeffCMT -* -* Parameters: -* outBuf output buffer -* val value of the DC coefficient -* blkCnt block number in the macro block -* -* Function: -* This function puts DC coefficient in CMT mode into the bitstream -* -* Returns: -* number of bits outputted. -* -* Error codes: -* None. -* -*/ -int32 vlbPutDCCoeffCMT(int val, bibBuffer_t * outBuf, int32 blkCnt) -{ - int32 absVal; - int32 numBits; - int32 size; - - absVal = ABS(val); - size = 0; - - while(absVal > 0) - { - size++; - absVal >>= 1; - } - - numBits = size; - if(blkCnt < 4) - { - vlbPutBits(outBuf, vlbLumaTableIntraDC[size].length, vlbLumaTableIntraDC[size].code); - numBits += vlbLumaTableIntraDC[size].length; - } - else - { - vlbPutBits(outBuf, vlbChromaTableIntraDC[size].length, vlbChromaTableIntraDC[size].code); - numBits += vlbChromaTableIntraDC[size].length; - } - - if(size) - { - if(val > 0) - { - vlbPutBits(outBuf, size, val); - } - else - { - absVal = ((1 << size) - 1); - vlbPutBits(outBuf, size, (absVal + val)); - } - } - - if(size > 8) - { - vlbPutBits(outBuf, 1, 1); - numBits++; - } - - return numBits; -} - - - -/* {{-output"vlbPutIntraACCoeffCMT.txt"}} */ -/* -* vlbPutIntraACCoeffCMT -* -* Parameters: -* outBuf output buffer -* coeffStart coefficient number from where the coding is to start -* block pointer to the texture block data -* -* Function: -* This function puts AC coefficients in CMT mode into the bitstream -* -* Returns: -* number of bits outputted. -* -* Error codes: -* None. -* -*/ -int32 vlbPutIntraACCoeffCMT(int32 coeffStart, int* block, bibBuffer_t * outBuf) -{ - tEvent prevEvent; - tEvent currEvent; - int32 i; - int32 numBits; - tEvent *prev = &prevEvent; - tEvent *curr = &currEvent; - int level; - - curr->run = 0; - prev->last = 0; - numBits = 0; - - for(i = coeffStart; i < 64; i++) - { - level = block[i]; - if(level == 0) - { - curr->run++; - } - else - { - prev->level = level; - prev->run = curr->run; - curr->run = 0; - break; - } - } - - for(i = i+1; i < 64; i++) - { - level = block[i]; - if(level == 0) - { - curr->run++; - } - else - { - numBits += vlbPutIntraACCoeffCMTDP(outBuf, &prevEvent); - prev->level = level; - prev->run = curr->run; - curr->run = 0; - } - } - - prev->last = 1; - numBits += vlbPutIntraACCoeffCMTDP(outBuf, &prevEvent); - - return numBits; -} - - - -/* {{-output"vlbFindRMax.txt"}} */ -/* -* vlbFindRMax -* -* Parameters: -* event pointer to the event being coded -* mbType macro block encoding type (INTER/INTRA) -* -* Function: -* This function finds RMAX value to subtract from run for escape coding -* when reversible VLC is OFF -* -* Returns: -* RMAX value -* -* Error codes: -* None. -* -*/ -int32 vlbFindRMax(tEvent *event, int16 mbType) -{ - int32 level; - - level = ABS(event->level); - - if(mbType == INTRA) - { - if(event->last == 0) - { - return level <= 27 ? vlbRMaxTableIntra[level - 1] : - NOT_VALID; - } - else - { - return level <= 8 ? vlbRMaxTableIntra[level + 26] : - NOT_VALID; - } - } - else - { - if (event->last == 0) - { - return level <= 12 ? vlbRMaxTableInter[level - 1] : - NOT_VALID; - } - else - { - return level <= 3 ? vlbRMaxTableInter[level + 11] - : NOT_VALID; - } - } -} - - - -/* {{-output"vlbFindLMax.txt"}} */ -/* -* vlbFindLMax -* -* Parameters: -* event pointer to the event being coded -* mbType macro block encoding type (INTER/INTRA) -* -* Function: -* This function finds LMAX value to subtract from run for escape coding -* when reversible VLC is OFF -* -* Returns: -* LMAX value -* -* Error codes: -* None. -* -*/ -int32 vlbFindLMax(tEvent *event, int16 mbType) -{ - if (mbType == INTRA) - { - if (event->last == 0) - { - if (event->run <= 14) - { - return vlbLMaxTableIntra[event->run]; - } - else - { - return NOT_VALID; - } - } - else - { - if (event->run <= 20) - { - return vlbLMaxTableIntra[event->run + 15]; - } - else - { - return NOT_VALID; - } - } - } - else - { - if (event->last == 0) - { - return event->run <= 26 ? vlbLMaxTableInter[event->run] : - NOT_VALID; - } - else - { - return event->run <= 40 ? vlbLMaxTableInter[event->run + 27] : - NOT_VALID; - } - } -} - - - -/* {{-output"vlbPutIntraACCoeffCMTDP.txt"}} */ -/* -* vlbPutIntraACCoeffCMTDP -* -* Parameters: -* outBuf output buffer -* event pointer to the event being coded -* -* Function: -* This function encodes AC coefficient for Intra blocks in combined motion texture - mode and data partitioned mode -* -* Returns: -* number of bits outputted. -* -* Error codes: -* None. -* -*/ -int32 vlbPutIntraACCoeffCMTDP(bibBuffer_t *outBuf, tEvent *event) -{ - int32 sign; - int32 level; - int32 run; - int32 status; - int32 count; - const tVLCTable *vlcTable=NULL; - int32 lmax; - int32 rmax; - - sign = (event->level >> 15) & (0x1); - level = ABS(event->level); - run = event->run; - count = 0; - - do - { - status = CODE_FOUND; - if(event->last == 0) - { - if(level < vlbVLCRun0IntraAC[run] ) - { - vlcTable = vlbVLCTableIntraPointer0[run]; - } - else - { - status = CODE_NOT_FOUND; - } - } - else - { - if(level < vlbVLCRun1IntraAC[run] ) - { - vlcTable = vlbVLCTableIntraPointer1[run]; - } - else - { - status = CODE_NOT_FOUND; - } - } - - if (status == CODE_NOT_FOUND) - { - switch (++count) - { - case 1: - { - lmax = vlbFindLMax(event, INTRA); - if (lmax == NOT_VALID) - { - count = 2; - } - else - { - level -= lmax; - break; - } - } - case 2: - { - rmax = vlbFindRMax(event, INTRA); - if (rmax != NOT_VALID) - { - level = ABS(event->level); - run = event->run - rmax; - break; - } - else - { - count = 3; - } - } - case 3: - { - status = CODE_FOUND; - } - } - } - - } while (status != CODE_FOUND); - - switch (count) - { - case 0: - vlbPutBits(outBuf, vlcTable[level].length, vlcTable[level].code | sign); - return vlcTable[level].length; - - case 1: - vlbPutBits(outBuf, ESCAPE_CODE_LENGTH_VLC, ESCAPE_CODE_VLC); - vlbPutBits(outBuf, 1, 0); - vlbPutBits(outBuf, vlcTable[level].length, vlcTable[level].code | sign); - return vlcTable[level].length + 1 + ESCAPE_CODE_LENGTH_VLC; - - case 2: - vlbPutBits(outBuf, ESCAPE_CODE_LENGTH_VLC, ESCAPE_CODE_VLC); - vlbPutBits(outBuf, 2, 0x2); - vlbPutBits(outBuf, vlcTable[level].length, vlcTable[level].code | sign); - return vlcTable[level].length + 2 + ESCAPE_CODE_LENGTH_VLC; - - case 3: - vlbPutBits(outBuf, ESCAPE_CODE_LENGTH_VLC, ESCAPE_CODE_VLC); - vlbPutBits(outBuf, 2, 0x3); - vlbPutBits(outBuf, 8, (event->last << 7) | (event->run << 1) | 1); - vlbPutBits(outBuf, 13, ((event->level & 0x0fff) << 1) | 1); - return 23 + ESCAPE_CODE_LENGTH_VLC; - - default: - return E_FAILURE; - } -} - - - -/* {{-output"vlbPutACCoeffSVH.txt"}} */ -/* -* vlbPutACCoeffSVH -* -* Parameters: -* outBuf output buffer -* coeffStart coefficient number from where the coding to be started -* block pointer to the texture block data. Coeficients must be in zigzag order -* svh flag indicating whether short video header mode is ON -* lastPos value of last non-zero position of block -* -* Function: -* This function puts AC coefficients in SVH mode into the bitstream -* -* Returns: -* number of bits outputted. -* -* Error codes: -* None. -* -*/ -int32 vlbPutACCoeffSVH(int32 coeffStart, int16* block, bibBuffer_t * outBuf, - int32 svh, int32 lastPos) - -{ - tEvent prevEvent; - tEvent currEvent; - int32 i; - int32 numBits; - tEvent *prev ; - tEvent *curr ; - int32 level; - int32 lastPosition = lastPos; - - prev = &prevEvent; - curr = &currEvent; - curr->run = 0; - prev->last = 0; - numBits = 0; - - for(i = coeffStart; i <= lastPosition; i++) - { - level = (int16)block[i]; - if(level == 0) - { - curr->run++; - } - else - { - // clip the coeff (MPEG-4 has larger range than H.263) requantization of the whole block is too complicated for this minor use case - if ( level < -127 ) - { - level = -127; - } - else if ( level > 127 ) - { - level = 127; - } - prev->level = level; - prev->run = curr->run; - curr->run = 0; - break; - } - } - - for(i = i+1; i <= lastPosition; i++) - { - level = (int16)block[i]; - if(level == 0) - { - curr->run++; - } - else - { - numBits += vlbPutACVLCCoeff(outBuf, &prevEvent,svh); - - // clip the coeff (MPEG-4 has larger range than H.263) requantization of the whole block is too complicated for this minor use case - if ( level < -127 ) - { - level = -127; - } - else if ( level > 127 ) - { - level = 127; - } - prev->level = level; - prev->run = curr->run; - curr->run = 0; - } - } - - prev->last = 1; - numBits += vlbPutACVLCCoeff(outBuf, &prevEvent,svh); - - return numBits; -} - - - -/* {{-output"vlbCodeACCoeffsSVHWithZigZag.txt"}} */ -/* -* vlbCodeACCoeffsSVHWithZigZag -* -* Parameters: -* outBuf output buffer -* coeffStart coefficient number from where the coding to be started -* block pointer to the texture block data. Coeficients must be in zigzag order -* svh flag indicating whether short video header mode is ON -* lastPos value of last non-zero position of block -* -* Function: -* This function puts AC coefficients in SVH mode with zigzag into the bitstream -* -* Returns: -* number of bits outputted. -* -* Error codes: -* None. -* -*/ -int32 vlbCodeACCoeffsSVHWithZigZag(int32 coeffStart, int16* block, bibBuffer_t * outBuf, - int32 svh, int32 lastPos) - -{ - tEvent prevEvent; - tEvent currEvent; - int32 i; - int32 numBits; - tEvent *prev ; - tEvent *curr ; - int32 level; - int32 lastPosition = vlbInvZigzagScan[lastPos]; - - prev = &prevEvent; - curr = &currEvent; - curr->run = 0; - prev->last = 0; - numBits = 0; - - for(i = coeffStart; i <= lastPosition; i++) - { - level = block[vlbZigzagScan[i]]; - if(level == 0) - { - curr->run++; - } - else - { - prev->level = level; - prev->run = curr->run; - curr->run = 0; - break; - } - } - - for(i = i+1; i <= lastPosition; i++) - { - level = block[vlbZigzagScan[i]]; - if(level == 0) - { - curr->run++; - } - else - { - numBits += vlbPutACVLCCoeff(outBuf, &prevEvent,svh); - prev->level = level; - prev->run = curr->run; - curr->run = 0; - } - } - - prev->last = 1; - numBits += vlbPutACVLCCoeff(outBuf, &prevEvent,svh); - - return numBits; -} - - - - -/* {{-output"vlbPutACVLCCoeff.txt"}} */ -/* -* vlbPutACVLCCoeff -* -* Parameters: -* outBuf output buffer -* event pointer to the event being coded -* svh flag indicating whether short video header mode is ON -* -* Function: -* This function encodes AC coefficients for Inter and Intra blocks in SVH mode and -* inter blocks in non-SVH mode -* -* Returns: -* number of bits outputted. -* -* Error codes: -* None. -* -*/ -int32 vlbPutACVLCCoeff(bibBuffer_t *outBuf, tEvent *event, int32 svh) -{ - int32 sign; - int32 run; - int32 level; - int32 status; - int32 count; - const tVLCTable *vlcTable= NULL; - int32 lmax; - int32 rmax; - - sign = (event->level >> 15) & (0x1); - level = ABS(event->level); - run = event->run; - count = 0; - - do - { - status = CODE_FOUND; - if(event->last == 0) - { - if(level < vlbVLCRun0InterAC[run] ) - { - vlcTable = vlbVLCTablePointer0[run]; - } - else - { - status = CODE_NOT_FOUND; - } - } - else - { - if(level < vlbVLCRun1InterAC[run] ) - { - vlcTable = vlbVLCTablePointer1[run]; - } - else - { - status = CODE_NOT_FOUND; - } - } - - if (status == CODE_NOT_FOUND) - { - if (svh == ON) - { - count = 4; - status = CODE_FOUND; - } - else - { - switch (++count) - { - case 1: - { - lmax = vlbFindLMax(event, INTER); - if (lmax == NOT_VALID) - { - count = 2; - } - else - { - level = ABS(event->level) - lmax; - break; - } - } - case 2: - { - rmax = vlbFindRMax(event, INTER); - if (rmax != NOT_VALID) - { - level = ABS(event->level); - run = event->run - rmax; - break; - } - else - { - count = 3; - } - } - case 3: - { - status = CODE_FOUND; - break; - } - default: - { - return E_FAILURE; - } - } - } - } - - } while (status != CODE_FOUND); - - switch (count) - { - case 0: - { - vlbPutBits(outBuf, vlcTable[level].length, vlcTable[level].code | sign); - return vlcTable[level].length; - } - case 1: - { - vlbPutBits(outBuf, ESCAPE_CODE_LENGTH_VLC, ESCAPE_CODE_VLC); - vlbPutBits(outBuf, 1, 0); - vlbPutBits(outBuf, vlcTable[level].length, vlcTable[level].code | sign); - return vlcTable[level].length + 1 + ESCAPE_CODE_LENGTH_VLC; - } - case 2: - { - vlbPutBits(outBuf, ESCAPE_CODE_LENGTH_VLC, ESCAPE_CODE_VLC); - vlbPutBits(outBuf, 2, 0x2); - vlbPutBits(outBuf, vlcTable[level].length, vlcTable[level].code | sign); - return vlcTable[level].length + 2 + ESCAPE_CODE_LENGTH_VLC; - } - case 3: - { - vlbPutBits(outBuf, ESCAPE_CODE_LENGTH_VLC, ESCAPE_CODE_VLC); - vlbPutBits(outBuf, 2, 0x3); - /* Fixed Length Coding of Events */ - vlbPutBits(outBuf, 8, (event->last << 7) | (event->run << 1) | 1); - vlbPutBits(outBuf, 13, ((event->level & 0x0fff) << 1) | 1); - return 23 + ESCAPE_CODE_LENGTH_VLC; - } - case 4: - { - vlbPutBits(outBuf, ESCAPE_CODE_LENGTH_VLC, ESCAPE_CODE_VLC); - vlbPutBits(outBuf, 7, (event->last << 6) | event->run); - vlbPutBits(outBuf, 8, event->level & 0x0ff); - return 15 + ESCAPE_CODE_LENGTH_VLC; - } - default: - { - return E_FAILURE; - } - } -} - -/* End of vlb.cpp */ - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/AACConstants.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/AACConstants.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef AACCONSTANTS_H -#define AACCONSTANTS_H - - -// length of a silent mono AAC frame -const TInt KSilentMonoAACFrameLenght = 6; - -// silent mono AAC frame -const TUint8 KSilentMonoAACFrame[KSilentMonoAACFrameLenght] = - { - 0, - 0, - 0, - 128, - 35, - 222 - }; - -// length of a silent stereo AAC frame -const TInt KSilentStereoAACFrameLenght = 8; - -// silent stereo AAC frame -const TUint8 KSilentStereoAACFrame[KSilentStereoAACFrameLenght] = - { - 33, - 0, - 64, - 0, - 4, - 0, - 0, - 71 - }; - - -// a class to encapsule info needed by AAC frame handler -class TAACFrameHandlerInfo - { - -public: - - TUint8 iNumChannels; - TUint8 iNumCouplingChannels; - TUint8 iSampleRateID; - TUint8 iProfileID; - TUint8 iIs960; - TUint8 isSBR; - TUint8 iIsParametricStereo; - }; - - -// AAC specific constants -enum -{ - SCE_ELEMENT = 0, - CPE_ELEMENT = 1, - LFE_ELEMENT = 3, - - LC_OBJECT = 1, - - LTP_OBJECT = 3, - - - - AAC_ADIF = 0, - - - AAC_ADTS = 1, - - AAC_MP4 = 2, - - TNS_TOOL = 1, - - LTP_TOOL = 2, - - PNS_TOOL = 4, - - MS_TOOL = 8, - IS_TOOL = 16, - - SBR_TOOL = 32, - - LAST_TOOL = 32768 -}; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/aac_tool.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/aac_tool.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - aac_tool.h - Interface to AAC tools. - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Audio-Visual Systems. - *************************************************************************/ - -#ifndef AAC_TOOLS_H_ -#define AAC_TOOLS_H_ - -/*-- Project Headers. --*/ -#include "defines.h" -#include "nok_bits.h" -#include "chandefs.h" - -#endif /*-- AAC_TOOLS_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/aacaud.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/aacaud.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - aacaud.h - Interface to AAC decoder. - - Author(s): Juha Ojanpera - Copyright (c) 2001-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef AACAUD_H_ -#define AACAUD_H_ - -/*-- Project Headers. --*/ -#include "tool.h" -#include "AACAPI.h" - -#endif /*-- AACAUD_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/aacdef.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/aacdef.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,167 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - aacdef.h - Interface to AAC core structures. - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef AACDEF_H_ -#define AACDEF_H_ - -/*-- Project Headers. --*/ -#include "chandefs.h" -#include "defines.h" -#include "dec_huf.h" - -/* - Purpose: Structure interface for window parameters. - Explanation: - */ -class CWindowInfo : public CBase -{ -public: - - static CWindowInfo* NewL(); - ~CWindowInfo(); - uint8 wnd; - uint8 max_sfb; - uint8 hasmask; - uint8 predBands; - PredType predType; - int16 prstflag[2]; - Wnd_Shape wshape[2]; - uint8* group;//[NSHORT]; - uint8* mask;//[MAXBANDS]; - int16* sfac;//[MAXBANDS]; - uint8* cb_map;//[MAXBANDS]; - int16* lpflag;//[MAXBANDS]; - -private: - - void ConstructL(); - CWindowInfo(); - -}; - -/* - Purpose: Information about the audio channel. - Explanation: - */ -class TCh_Info -{ -public: - - int16 present; /* Channel present. */ - int16 num_bins; /* # of active (i.e., nonzero) bins for this ch. */ - int16 tag; /* Element tag. */ - int16 cpe; /* 0 if single channel, 1 if channel pair. */ - int16 paired_ch; /* Index of paired channel in cpe. */ - int16 widx; /* Window element index for this channel. */ - - BOOL is_present; /* Intensity stereo is used. */ - BOOL pns_present; /* PNS is used. */ - BOOL tns_present; /* TNS is used. */ - BOOL parseCh; /* TRUE if channel only parsed not decoded. */ - - int16 ncch; /* Number of coupling channels for this ch. */ - int16 cch[CChansD]; /* Coupling channel idx. */ - int16 cc_dom[CChansD]; /* Coupling channel domain. */ - int16 cc_ind[CChansD]; /* Independently switched coupling channel flag. */ - CInfo *info; /* Block parameters for this channel. */ - - /*-- Huffman tables. --*/ - Huffman_DecInfo **huf; - Huffman_DecSfInfo *sf_huf; - -}; - - -/* - Purpose: Channel mapping information. - Explanation: - */ -class CMC_Info : public CBase -{ -public: - - static CMC_Info* NewL(); - ~CMC_Info(); - /* - * Max number of supported main and coulping channels. - */ - int16 maxnCh; - int16 maxnCCh; - - /* - * Audio channels (LFE, SCE, and CPE) up to 'maxnCh' will be decoded. - * All the other channels will be only parsed. 'dummyCh' is therefore - * the channel index into 'ch_info' structure which is used for the unused - * audio channels. 'dummyCCh' identifies the channel index for unused CCE - * channels. - */ - int16 dummyCh; - int16 dummyCCh; - - /* - * This will be set to 1 when the channel limit has been reached. - */ - int16 dummyAlways; - - /* - * These members identify how many audio channels (LFE, SCE, CPE, CCE) - * were found from the bitstream on a frame-by-frame basis. - */ - int16 nch; - int16 ncch; - - int16 cc_tag[1 << LEN_TAG]; /* Tags of valid CCE's. */ - int16 cc_ind[1 << LEN_TAG]; /* Independently switched CCE's. */ - uint8 profile; - uint8 sfreq_idx; - - int16 cur_prog; - int16 default_config; - - CSfb_Info* sfbInfo; - - TCh_Info ch_info[ChansD]; - -private: - - void ConstructL(); - CMC_Info(); - - -}; - -/* - Purpose: Pulse noiseless coding. - Explanation: - */ -typedef struct PulseInfoStr -{ - int16 number_pulse; - int16 pulse_start_sfb; - int16 pulse_data_present; - int16 pulse_amp[NUM_PULSE_LINES]; - int16 pulse_offset[NUM_PULSE_LINES]; - int16 pulse_position[NUM_PULSE_LINES]; - -} PulseInfo; - -#endif /*-- AACDEF_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/chandefs.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/chandefs.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,410 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - chandefs.h - Constants for AAC coder. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Audio-Visual Systems. - *************************************************************************/ - -#ifndef AAC_CHANDEFS_H_ -#define AAC_CHANDEFS_H_ - -/*-- Project Headers. --*/ -#include "defines.h" - -#define GAIN_START (40) -#define MAGIC_NUMBER (0.4054) -#define MAGIC_NUMBER2 (1.0f - MAGIC_NUMBER) -#define MAGIC_NUMBER3 (0.5f * MAGIC_NUMBER) -#define QSTEP_SIZE (7) -#define GAIN_FACTOR (1.0f / -0.25f) -#define IMAX_QUANT (1.0f / MAX_AAC_QUANT) -#define POWRAISE43 (4.0f / 3.0f) -#define ILOG2 (1.0f / log10(2.0f)) -#define LOG34 (log10(0.75f) * ILOG2) -#define SFCGAIN (16.0f / 3.0f) -#define QROUND_ERROR LOG2 (5.5f) -#define MAXCOEF_LOG2_16_3_MINUS_TWO (67.33239402f) -#define ILOG2_16_3 (17.71694984f) -#define LOG2(x) (log10(x) * ILOG2) - -enum -{ - /* - * Channels for 5.1 main profile configuration - * (modify for any desired decoder configuration) - */ - - /*-- Front channels: left, center, right --*/ - FChansD = 2, - - /*-- 1 if decoder has front center channel. --*/ - FCenterD = 0, - - /*-- Side channels: --*/ - SChansD = 0, - - /*-- Back channels: left surround, right surround. --*/ - BChansD = 0, - - /*-- 1 if decoder has back center channel. --*/ - BCenterD = 0, - - /*-- LFE channels. --*/ - LChansD = 0, - - /*-- Scratch space for parsing unused channels. --*/ - XChansD = 2, - - /*-- Total number of supported channels. --*/ - ChansD = FChansD + SChansD + BChansD + LChansD + XChansD, - - /*-- Independently switched coupling channels. --*/ - ICChansD = 0, - - /*-- Dependently switched coupling channels. --*/ - DCChansD = 0, - - /*-- Scratch space index for parsing unused coupling channels. --*/ - XCChansD = 1, - - /*-- Total number of supported CC channels. --*/ - CChansD = (ICChansD + DCChansD + XCChansD), - - - /*-- Block switching. --*/ - LN = 2048, - SN = 256, - LN2_960 = 960, - SN2_120 = 120, - LN2 = LN / 2, - SN2 = SN / 2, - NSHORT = LN / SN, - MAX_SBK = NSHORT, - NUM_WIN_SEQ = 4, - - /*-- Max number of scale factor bands. --*/ - MAXBANDS = 16 * NSHORT, - MAXLONGSFBBANDS = 51, - MAXSHORTSFBBANDS = 15, - - /*-- Maximum scale factor. --*/ - SFACBOOK_SIZE = 121, - MIDFAC = (SFACBOOK_SIZE - 1) / 2, - - /*-- Global gain must be positive. --*/ - SF_OFFSET = 100, - /*-- Quantization constants. --*/ - MAX_QUANT_VALUE = 8191, - - /*-- Huffman parameters. --*/ - ZERO_HCB = 0, - ESCBOOK = 11, - NSPECBOOKS = ESCBOOK + 1, - BOOKSCL = NSPECBOOKS, - NBOOKS = NSPECBOOKS + 1, - INTENSITY_HCB2 = 14, - INTENSITY_HCB = 15, - NOISE_HCB = 13, - NOISE_PCM_BITS = 9, - NOISE_PCM_OFFSET = (1 << (NOISE_PCM_BITS - 1)), - NOISE_OFFSET = 90, - RESERVED_HCB = 13, - SF_INDEX_OFFSET = 60, /*-- Offset for Huffman table indices of scalefactors. --*/ - - LONG_SECT_BITS = 5, - SHORT_SECT_BITS = 3, - - /*-- Program Configuration. --*/ - Main_Object = 0, - LC_Object = 1, - SSR_Object = 2, - LTP_Object = 3, - Scalable_Object = 4, - - Fs_48 = 3, - Fs_44 = 4, - Fs_32 = 5, - - /*-- Raw bitstream constants. --*/ - LEN_SE_ID = 3, - LEN_TAG = 4, - LEN_COM_WIN = 1, - LEN_ICS_RESERV = 1, - LEN_WIN_SEQ = 2, - LEN_WIN_SH = 1, - LEN_MAX_SFBL = 6, - LEN_MAX_SFBS = 4, - LEN_CB = 4, - LEN_SCL_PCM = 8, - LEN_SCL_PCM_MASK = (1 << LEN_SCL_PCM) - 1, - LEN_PRED_PRES = 1, - LEN_PRED_RST = 1, - LEN_PRED_RSTGRP = 5, - LEN_PRED_ENAB = 1, - LEN_MASK_PRES = 2, - LEN_MASK = 1, - - LEN_PULSE_NPULSE = 2, - LEN_PULSE_ST_SFB = 6, - LEN_PULSE_POFF = 5, - LEN_PULSE_PAMP = 4, - NUM_PULSE_LINES = 4, - PULSE_OFFSET_AMP = 4, - - LEN_IND_CCE_FLG = 1, - LEN_NCC = 3, - LEN_IS_CPE = 1, - LEN_CC_LR = 1, - LEN_CC_DOM = 1, - LEN_CC_SGN = 1, - LEN_CCH_GES = 2, - LEN_CCH_CGP = 1, - - LEN_D_ALIGN = 1, - LEN_D_CNT = 8, - LEN_D_ESC = 8, - LEN_F_CNT = 4, - LEN_F_ESC = 8, - LEN_NIBBLE = 4, - LEN_BYTE = 8, - LEN_PAD_DATA = 8, - - LEN_PC_COMM = 8, - - /*-- FILL --*/ - LEN_EX_TYPE = 4, - EX_FILL = 0, - EX_FILL_DATA = 1, - EX_DRC = 11, - - /*-- DRC --*/ - LEN_DRC_PL = 7, - LEN_DRC_PL_RESV = 1, - LEN_DRC_PCE_RESV = (8 - LEN_TAG), - LEN_DRC_BAND_INCR = 4, - LEN_DRC_BAND_RESV = 4, - LEN_DRC_BAND_TOP = 8, - LEN_DRC_SGN = 1, - LEN_DRC_MAG = 7, - DRC_BAND_MULT = 4, - - /*-- Channel elements. --*/ - ID_SCE = 0, - ID_CPE, - ID_CCE, - ID_LFE, - ID_DSE, - ID_PCE, - ID_FIL, - ID_END, - - FILL_VALUE = 0x55, - - /*-- Bit reservoir. --*/ - BIT_RESERVOIR_SIZE = 6144, - - /*-- Program configuration element --*/ - LEN_PROFILE = 2, - LEN_SAMP_IDX = 4, - LEN_NUM_ELE = 4, - LEN_NUM_LFE = 2, - LEN_NUM_DAT = 3, - LEN_NUM_CCE = 4, - LEN_MMIX_IDX = 2, - LEN_PSUR_ENAB = 1, - LEN_ELE_IS_CPE = 1, - LEN_IND_SW_CCE = 1, - LEN_COMMENT_BYTES = 8, - - /*-- LTP constants. --*/ - LTP_MAX_PRED_BANDS = 40, - LTP_COEF_BITS = 3, - LTP_LAG_BITS = 11, - - /*-- TNS constants. --*/ - TNS_MAX_FILT = 3, - TNS_MAX_COEFF_RES = 2, - TNS_MAX_COEFF = 32, - - TNS_MAX_ORDER = 12, - TNS_COEFF_RES_OFFSET = 3, - - /*-- BWP constants. --*/ - MAX_PGRAD = 2, - MINVAR = 1, - Q_ZERO = 0x0000, - Q_ONE = 0x3F80, - - /*-- PNS parameters. --*/ - MAX_DCT_LEN = 64, - NOISE_FREE_BANDS = 3, - NOISE_FREE_MASK = (1 << NOISE_FREE_BANDS) - 1, - /*-- Max length of DSE, bytes. --*/ - MAX_DBYTES = ((1 << LEN_D_CNT) + (1 << LEN_D_ESC)), - - /*-- size of exp cache table. --*/ - TEXP = 256, - TEXP_MASK = (TEXP - 1), - - /*-- Size of inv quant table. --*/ - MAX_AAC_QUANT = 255, - MAX_IQ_TBL = MAX_AAC_QUANT + 1, - IQ_MASK = (MAX_IQ_TBL - 1) -}; - -/* - Purpose: Mixing modes for CCE (coupling channel element). - Explanation: - */ -typedef enum CCmixMode -{ - CC_BEFORE_TNS, /* Dependently switched. */ - CC_AFTER_TNS, /* Dependently switched. */ - CC_TIME_MIX /* Independently switched. */ - -} CCmixMode; - -/* - Purpose: Window shapes. - Explanation: - */ -typedef enum WindowShape -{ - WS_SIN = 0, /* Sine window. */ - WS_KBD /* Kaiser-Bessel Derived window. */ - -} WindowShape; - -/* - Purpose: AAC predictor type. - Explanation: - */ -typedef enum PredType -{ - NO_PRED = 0, - BWAP_PRED, - LTP_PRED - -} PredType; - -/* - Purpose: Block types for transform coders using block switching. - Explanation: The first four describe the actual block type for each subband, - the rest of the declarations describe the block type for the - whole frame. */ -typedef enum AAC_WINDOW_TYPE -{ - ONLY_LONG_WND, - LONG_SHORT_WND, - ONLY_SHORT_WND, - SHORT_LONG_WND - -} AAC_WINDOW_TYPE, AacWindowType; - -/* - Purpose: Block sequence (long and short) parameters. - Explanation: - */ -class CInfo : public CBase - { - -public: - - static CInfo* NewL(); - ~CInfo(); - - int16 islong; - int16 nsbk; - int16 bins_per_bk; - int16 sfb_per_bk; - int16* bins_per_sbk; - int16* sfb_per_sbk; - const int16 *sbk_sfb_top[MAX_SBK]; - int16 *sfb_width_128; - int16* bk_sfb_top; - int16 num_groups; - int16* group_len; - int16* group_offs; - -private: - void ConstructL(); - CInfo(); - -}; - -/* - Purpose: Sampling rate dependent parameters. - Explanation: - */ -typedef struct Sr_InfoStr -{ - int32 samp_rate; - - int16 nsfb1024; - const int16 *SFbands1024; - - int16 nsfb128; - const int16 *SFbands128; - - int16 nsfb960; - const int16 *SFbands960; - - int16 nsfb120; - const int16 *SFbands120; - -} SR_Info; - -/* - Purpose: Sfb related information. - Explanation: - */ -class CSfb_Info : public CBase -{ - -public: - - static CSfb_Info* NewL(uint8 isEncoder = FALSE); - ~CSfb_Info(); - - CInfo *only_long_info; - CInfo *eight_short_info; - - CInfo *winmap[NUM_WIN_SEQ]; - int16 sfbwidth128[1 << LEN_MAX_SFBS]; - - /*-- Scalefactor offsets. --*/ - int16 *sect_sfb_offsetL; - int16 *sect_sfb_offsetS; - int16 *sfbOffsetTablePtr[2]; - int16 *sect_sfb_offsetS2[NSHORT]; - -private: - void ConstructL(uint8 isEncoder); - CSfb_Info(); - -}; - -/* - Purpose: Window shapes for this and previous frame. - Explanation: - */ -typedef struct Wnd_ShapeStr -{ - uint8 this_bk; - uint8 prev_bk; - -} Wnd_Shape; - -#endif /*-- AAC_CHANDEFS_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/dec_const.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/dec_const.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,375 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef DEC_CONST_H -#define DEC_CONST_H - - -#include "dec_huf.h" -#include "defines.h" - -const int16 cb_len[] = {81, 81, 81, 81, 81, 81, 64, 64, 169, 169, 289, 121}; - -/* - Purpose: AAC Huffman decoding codebook #1. - Explanation: - */ -const Huffman_DecCode dec_hftable1[] = { -{1, 0}, {6148, 17}, {1536, 23}, {384, 21}, {96, 18}, -{32, 20}, {128, 22}, {512, 19}, {2048, 16}, {7682, 104}, -{6528, 114}, {6240, 116}, {6176, 118}, {6272, 108}, {6656, 97}, -{1920, 105}, {1632, 119}, {1568, 111}, {1664, 100}, {480, 103}, -{416, 98}, {224, 101}, {160, 109}, {896, 99}, {608, 107}, -{544, 113}, {640, 112}, {3584, 96}, {2432, 106}, {2144, 117}, -{2080, 115}, {2176, 110}, {2560, 102}, {8066, 497}, {7808, 492}, -{6368, 491}, {7040, 481}, {6752, 496}, {6688, 502}, {6784, 490}, -{2016, 498}, {1952, 493}, {1760, 486}, {1696, 485}, {992, 489}, -{928, 484}, {736, 483}, {672, 499}, {3968, 487}, {3680, 495}, -{3616, 494}, {3712, 482}, {2464, 488}, {2272, 500}, {2944, 480}, -{2592, 501}, {2688, 503}, {7777, 1013}, {7712, 1008}, {6624, 1009}, -{6560, 1012}, {6304, 1014}, {2528, 1011}, {2208, 1015}, {2656, 1010}, -{8161, 2040}, {8096, 2045}, {7904, 2039}, {7840, 2037}, {7136, 2044}, -{7072, 2033}, {6880, 2034}, {6816, 2043}, {4064, 2046}, {4000, 2035}, -{3808, 2032}, {3744, 2042}, {3040, 2038}, {2976, 2041}, {2784, 2047}, -{2720, 2036}}; - -/* - Purpose: AAC Huffman decoding codebook #2. - Explanation: - */ -const Huffman_DecCode dec_hftable2[] = { -{3, 0}, {2049, 2}, {6145, 6}, {1536, 10}, {384, 8}, -{96, 9}, {32, 7}, {128, 11}, {512, 12}, {7681, 35}, -{6528, 45}, {6240, 32}, {6176, 43}, {6272, 40}, {6656, 27}, -{1920, 42}, {1632, 44}, {1568, 39}, {1664, 26}, {480, 36}, -{416, 31}, {224, 29}, {160, 48}, {896, 28}, {608, 30}, -{544, 41}, {640, 47}, {3584, 33}, {2432, 34}, {2144, 49}, -{2080, 38}, {2176, 37}, {2560, 46}, {8065, 111}, {6560, 112}, -{6368, 110}, {7040, 102}, {6784, 107}, {1952, 108}, {1760, 103}, -{928, 100}, {3968, 113}, {3712, 104}, {2464, 101}, {2208, 106}, -{2944, 114}, {2656, 105}, {2688, 109}, {7777, 235}, {7712, 234}, -{7808, 232}, {6624, 242}, {6304, 233}, {7072, 248}, {6752, 231}, -{6688, 241}, {2016, 236}, {1696, 245}, {992, 239}, {736, 243}, -{672, 240}, {3680, 244}, {3616, 230}, {3808, 247}, {2528, 238}, -{2272, 237}, {2592, 246}, {8161, 499}, {8096, 509}, {7904, 503}, -{7840, 506}, {7136, 505}, {6880, 500}, {6816, 501}, {4064, 508}, -{4000, 498}, {3744, 504}, {3040, 507}, {2976, 510}, {2784, 511}, -{2720, 502}}; - -/* - Purpose: AAC Huffman decoding codebook #3. - Explanation: - */ -const Huffman_DecCode dec_hftable3[] = { -{1, 0}, {35, 9}, {128, 11}, {512, 10}, {2048, 8}, -{161, 25}, {2560, 24}, {545, 53}, {640, 52}, {672, 55}, -{2080, 56}, {2176, 54}, {2688, 57}, {2209, 117}, {2592, 118}, -{2720, 116}, {65, 239}, {192, 240}, {3200, 242}, {4096, 238}, -{4608, 241}, {257, 491}, {288, 486}, {576, 495}, {704, 489}, -{768, 493}, {800, 487}, {1024, 494}, {1152, 492}, {1184, 498}, -{2816, 499}, {2848, 500}, {3072, 488}, {3232, 497}, {4224, 496}, -{4736, 490}, {321, 1010}, {832, 1011}, {1056, 1005}, {1312, 1016}, -{2112, 1014}, {2240, 1009}, {2304, 1003}, {2336, 1004}, {2752, 1007}, -{3104, 1002}, {3328, 1013}, {4128, 1015}, {4640, 1008}, {4768, 1006}, -{5248, 1012}, {1217, 2041}, {1280, 2040}, {2624, 2036}, {2880, 2038}, -{3360, 2035}, {4256, 2037}, {5120, 2034}, {5280, 2039}, {1345, 4088}, -{2368, 4084}, {3264, 4091}, {3392, 4092}, {4864, 4086}, {4896, 4090}, -{5152, 4085}, {5376, 4087}, {5408, 4089}, {1089, 8186}, {3136, 8188}, -{4352, 8187}, {4385, 16378}, {4672, 16380}, {4800, 16379}, {4161, 32766}, -{4288, 32765}, {4928, 32764}, {5312, 32763}, {5440, 32762}, {4417, 65535}, -{5184, 65534}}; - -/* - Purpose: AAC Huffman decoding codebook #4. - Explanation: - */ -const Huffman_DecCode dec_hftable4[] = { -{4, 7}, {160, 8}, {672, 1}, {2048, 5}, {2176, 9}, -{2208, 4}, {2560, 6}, {2592, 2}, {2688, 3}, {2720, 0}, -{33, 22}, {128, 24}, {512, 25}, {544, 23}, {640, 21}, -{2080, 20}, {802, 112}, {2752, 107}, {2848, 105}, {3200, 110}, -{3232, 106}, {4256, 111}, {4640, 109}, {4736, 108}, {4768, 104}, -{65, 246}, {192, 239}, {288, 243}, {576, 237}, {704, 226}, -{768, 240}, {1056, 241}, {1152, 238}, {1184, 228}, {2112, 242}, -{2240, 229}, {2304, 244}, {2336, 232}, {2624, 231}, {2816, 227}, -{3072, 235}, {3104, 230}, {4096, 245}, {4128, 236}, {4224, 234}, -{4608, 233}, {257, 495}, {1024, 494}, {2880, 499}, {3264, 500}, -{3360, 496}, {4800, 501}, {4896, 498}, {5280, 497}, {833, 1008}, -{1216, 1010}, {1312, 1007}, {2368, 1012}, {3136, 1014}, {3328, 1004}, -{3392, 1017}, {4288, 1015}, {4384, 1011}, {4672, 1016}, {4864, 1006}, -{5152, 1009}, {5248, 1005}, {5408, 1013}, {321, 2040}, {1088, 2042}, -{1280, 2038}, {1344, 2045}, {4160, 2043}, {4352, 2041}, {4928, 2036}, -{5120, 2039}, {5312, 2037}, {5376, 2046}, {5440, 2044}, {4417, 4095}, -{5184, 4094}}; - -/* - Purpose: AAC Huffman decoding codebook #5. - Explanation: - */ -const Huffman_DecCode dec_hftable5[] = { -{1, 0}, {4611, 8}, {288, 11}, {32, 10}, {512, 9}, -{4897, 26}, {4640, 25}, {800, 24}, {544, 27}, {5122, 112}, -{320, 115}, {64, 113}, {1024, 114}, {5633, 240}, {5408, 232}, -{5152, 236}, {4928, 234}, {4672, 238}, {352, 242}, {96, 243}, -{832, 239}, {576, 235}, {1312, 237}, {1056, 233}, {1536, 241}, -{5921, 488}, {5664, 492}, {5440, 498}, {5184, 496}, {4960, 491}, -{4704, 495}, {864, 494}, {608, 489}, {1344, 499}, {1088, 497}, -{1824, 493}, {1568, 490}, {6145, 1009}, {5952, 1000}, {5696, 1006}, -{5472, 1007}, {5216, 1002}, {384, 1008}, {1376, 1003}, {1120, 1005}, -{1856, 1001}, {1600, 1004}, {2048, 1011}, {2080, 1010}, {6465, 2036}, -{6432, 2024}, {6176, 2030}, {6208, 2041}, {5984, 2033}, {5728, 2034}, -{5248, 2035}, {4992, 2027}, {4736, 2029}, {128, 2025}, {896, 2031}, -{640, 2028}, {1408, 2038}, {1152, 2039}, {1888, 2032}, {1632, 2040}, -{2336, 2026}, {2112, 2037}, {6497, 4087}, {6240, 4088}, {6016, 4093}, -{5760, 4090}, {5504, 4084}, {1920, 4086}, {1664, 4089}, {2400, 4092}, -{2368, 4085}, {2144, 4091}, {6529, 8191}, {6272, 8189}, {2432, 8188}, -{2176, 8190}}; - -/* - Purpose: AAC Huffman decoding codebook #6. - Explanation: - */ -const Huffman_DecCode dec_hftable6[] = { -{4900, 8}, {4608, 4}, {4640, 6}, {288, 2}, {0, 0}, -{32, 3}, {800, 7}, {512, 1}, {544, 5}, {5442, 50}, -{5408, 39}, {5120, 40}, {5152, 38}, {5184, 49}, {4928, 46}, -{4672, 41}, {320, 45}, {64, 47}, {832, 43}, {576, 44}, -{1344, 48}, {1312, 36}, {1024, 42}, {1056, 37}, {1088, 51}, -{5921, 108}, {5632, 113}, {5664, 104}, {4960, 111}, {4704, 107}, -{352, 114}, {96, 115}, {864, 110}, {608, 109}, {1824, 106}, -{1536, 112}, {1568, 105}, {1600, 116}, {5953, 234}, {5696, 240}, -{5472, 239}, {5216, 235}, {1376, 238}, {1120, 236}, {1856, 237}, -{1632, 241}, {6465, 497}, {6432, 491}, {6144, 500}, {6176, 490}, -{6208, 496}, {5984, 485}, {5728, 486}, {5504, 499}, {5248, 503}, -{4992, 488}, {4736, 494}, {384, 495}, {128, 506}, {896, 487}, -{640, 492}, {1408, 505}, {1152, 498}, {1888, 484}, {2368, 502}, -{2336, 493}, {2048, 504}, {2080, 489}, {2112, 501}, {6497, 1021}, -{6240, 1020}, {6016, 1014}, {5760, 1015}, {1920, 1016}, {1664, 1018}, -{2400, 1017}, {2144, 1019}, {6529, 2046}, {6272, 2045}, {2432, 2047}, -{2176, 2044}}; - -/* - Purpose: AAC Huffman decoding codebook #7. - Explanation: - */ -const Huffman_DecCode dec_hftable7[] = { -{1, 0}, {34, 5}, {1024, 4}, {1057, 12}, {66, 55}, -{1088, 53}, {2048, 54}, {2080, 52}, {97, 116}, {1120, 113}, -{2112, 114}, {3072, 115}, {3104, 112}, {129, 242}, {1152, 236}, -{1184, 238}, {2144, 234}, {2176, 241}, {3136, 235}, {3168, 240}, -{4096, 243}, {4128, 237}, {5152, 239}, {161, 491}, {1216, 494}, -{1248, 501}, {2208, 489}, {2240, 499}, {3200, 497}, {3232, 496}, -{4160, 488}, {4192, 495}, {5120, 493}, {5184, 490}, {5216, 498}, -{6176, 492}, {6208, 500}, {193, 1005}, {2272, 1013}, {3264, 1004}, -{3296, 1018}, {4224, 1007}, {4256, 1009}, {4288, 1017}, {5248, 1011}, -{5280, 1016}, {6144, 1006}, {6240, 1012}, {6272, 1015}, {7200, 1008}, -{7232, 1010}, {7264, 1014}, {225, 2039}, {4320, 2043}, {5312, 2041}, -{5344, 2044}, {6304, 2040}, {7168, 2038}, {7296, 2042}, {7328, 2045}, -{6337, 4093}, {6368, 4094}, {7360, 4092}, {7392, 4095}}; - -/* - Purpose: AAC Huffman decoding codebook #8. - Explanation: - */ -const Huffman_DecCode dec_hftable8[] = { -{1059, 0}, {33, 5}, {1024, 3}, {1088, 4}, {2080, 2}, -{2112, 6}, {1, 14}, {64, 16}, {1120, 18}, {2048, 15}, -{2144, 20}, {3104, 17}, {3136, 19}, {97, 48}, {1152, 44}, -{2176, 46}, {3072, 47}, {3168, 42}, {3200, 50}, {4128, 43}, -{4160, 45}, {4192, 49}, {5184, 51}, {129, 111}, {1184, 106}, -{1216, 117}, {2208, 105}, {2240, 114}, {3232, 108}, {4096, 113}, -{4224, 109}, {4256, 112}, {5152, 104}, {5216, 107}, {5248, 110}, -{6176, 116}, {6208, 115}, {161, 241}, {1248, 248}, {2272, 245}, -{3264, 236}, {3296, 250}, {4288, 242}, {5120, 239}, {5280, 238}, -{5312, 249}, {6240, 237}, {6272, 240}, {6304, 246}, {7200, 243}, -{7232, 244}, {7264, 247}, {193, 506}, {4320, 505}, {6144, 504}, -{6336, 502}, {6368, 509}, {7296, 503}, {7328, 507}, {7360, 508}, -{225, 1022}, {5344, 1020}, {7168, 1021}, {7392, 1023}}; - -/* - Purpose: AAC Huffman decoding codebook #9. - Explanation: - */ -const Huffman_DecCode dec_hftable9[] = { -{1, 0}, {34, 5}, {1024, 4}, {1057, 12}, {66, 55}, -{1088, 53}, {2048, 54}, {2080, 52}, {1121, 114}, {2112, 113}, -{3104, 112}, {97, 231}, {1152, 234}, {1184, 237}, {2144, 232}, -{2176, 236}, {3072, 230}, {3136, 233}, {4128, 235}, {129, 478}, -{1216, 482}, {2208, 481}, {3168, 477}, {3200, 483}, {4096, 479}, -{4160, 476}, {4192, 486}, {5152, 480}, {5184, 484}, {6176, 485}, -{161, 974}, {192, 985}, {1248, 977}, {1280, 979}, {1312, 992}, -{2240, 975}, {2272, 989}, {2304, 987}, {3232, 978}, {3264, 988}, -{4224, 981}, {4256, 990}, {5120, 976}, {5216, 982}, {6208, 983}, -{7200, 984}, {7232, 993}, {8224, 980}, {8256, 986}, {9248, 991}, -{225, 1992}, {256, 1997}, {1344, 2008}, {2336, 2000}, {3296, 1996}, -{3328, 1994}, {3360, 2014}, {4288, 1995}, {4320, 2013}, {4352, 2012}, -{5248, 1989}, {5280, 2001}, {5312, 2011}, {5376, 2016}, {6144, 1988}, -{6240, 1990}, {6272, 1999}, {6304, 2010}, {7168, 2003}, {7264, 2004}, -{7296, 2009}, {8192, 2002}, {8288, 1991}, {8320, 2007}, {8352, 2018}, -{9216, 2017}, {9280, 1993}, {9312, 2006}, {10272, 1998}, {10304, 2005}, -{11296, 2015}, {289, 4040}, {320, 4061}, {1376, 4047}, {1408, 4053}, -{2368, 4039}, {2400, 4052}, {2432, 4068}, {3392, 4056}, {3424, 4074}, -{4384, 4045}, {4416, 4066}, {4448, 4071}, {5344, 4050}, {5408, 4057}, -{5440, 4075}, {6336, 4043}, {6368, 4058}, {6400, 4067}, {6432, 4073}, -{7328, 4051}, {7360, 4062}, {8384, 4046}, {8416, 4059}, {9344, 4042}, -{9376, 4048}, {9408, 4069}, {9440, 4070}, {10240, 4064}, {10336, 4038}, -{10368, 4049}, {10400, 4065}, {11264, 4072}, {11328, 4041}, {11360, 4055}, -{11392, 4060}, {12320, 4044}, {12352, 4054}, {12384, 4063}, {353, 8164}, -{384, 8172}, {3456, 8155}, {4480, 8161}, {5472, 8163}, {5504, 8169}, -{6464, 8166}, {6496, 8179}, {6528, 8183}, {7392, 8157}, {7424, 8153}, -{7456, 8162}, {7488, 8170}, {7520, 8177}, {7552, 8182}, {8448, 8152}, -{8480, 8174}, {8544, 8180}, {9472, 8171}, {9504, 8175}, {10432, 8160}, -{10464, 8168}, {10496, 8176}, {11424, 8156}, {11456, 8159}, {11488, 8173}, -{11520, 8181}, {12288, 8167}, {12416, 8158}, {12448, 8154}, {12480, 8165}, -{12512, 8178}, {8513, 16368}, {8576, 16370}, {9536, 16371}, {9568, 16372}, -{9600, 16373}, {10528, 16369}, {10560, 16376}, {10592, 16374}, {11552, 16377}, -{11584, 16379}, {12544, 16378}, {12576, 16375}, {12608, 16380}, {12640, 16381}, -{10625, 32764}, {11616, 32765}, {11648, 32766}, {12672, 32767}}; - -/* - Purpose: AAC Huffman decoding codebook #10. - Explanation: - */ -const Huffman_DecCode dec_hftable10[] = { -{1060, 0}, {1088, 1}, {2080, 2}, {33, 8}, {1024, 7}, -{1120, 9}, {2112, 6}, {2144, 12}, {3104, 11}, {3136, 10}, -{3168, 13}, {1, 34}, {64, 29}, {96, 38}, {1152, 32}, -{2048, 28}, {2176, 30}, {2208, 40}, {3072, 37}, {3200, 36}, -{4128, 33}, {4160, 31}, {4192, 35}, {4224, 39}, {5184, 41}, -{129, 95}, {1184, 84}, {1216, 96}, {2240, 91}, {3232, 87}, -{3264, 97}, {4096, 93}, {4256, 89}, {4288, 100}, {5152, 85}, -{5216, 86}, {5248, 88}, {5280, 98}, {6176, 94}, {6208, 90}, -{6240, 92}, {6272, 99}, {161, 211}, {1248, 213}, {1280, 220}, -{2272, 205}, {2304, 217}, {3296, 204}, {3328, 221}, {4320, 216}, -{4352, 223}, {5120, 209}, {5312, 206}, {5344, 224}, {5376, 226}, -{6304, 202}, {6336, 218}, {7200, 210}, {7232, 203}, {7264, 208}, -{7296, 215}, {7328, 219}, {8224, 212}, {8256, 207}, {8288, 214}, -{8320, 222}, {8352, 225}, {193, 463}, {1312, 468}, {2336, 462}, -{2368, 476}, {3360, 460}, {3392, 478}, {4384, 466}, {4416, 482}, -{5408, 474}, {6144, 457}, {6368, 455}, {6400, 458}, {6432, 480}, -{7168, 483}, {7360, 454}, {7392, 469}, {7424, 472}, {8192, 481}, -{8384, 464}, {8416, 470}, {9248, 461}, {9280, 456}, {9312, 459}, -{9344, 465}, {9376, 471}, {9408, 479}, {10272, 477}, {10304, 467}, -{10336, 473}, {10368, 475}, {11328, 484}, {225, 976}, {256, 983}, -{288, 1005}, {1344, 973}, {1376, 990}, {2400, 985}, {2432, 1009}, -{3424, 979}, {3456, 999}, {4448, 989}, {4480, 1006}, {5440, 980}, -{5472, 995}, {6464, 987}, {6496, 1000}, {7456, 970}, {7488, 986}, -{8448, 977}, {8480, 981}, {8512, 1010}, {9216, 1001}, {9440, 975}, -{9472, 992}, {9504, 1007}, {10240, 1003}, {10400, 978}, {10432, 972}, -{10464, 988}, {10496, 1002}, {11296, 974}, {11360, 971}, {11392, 984}, -{11424, 982}, {11456, 994}, {11488, 997}, {12320, 1004}, {12352, 991}, -{12384, 993}, {12416, 996}, {12448, 998}, {12480, 1008}, {321, 2032}, -{352, 2038}, {1408, 2023}, {5504, 2027}, {6528, 2028}, {7520, 2026}, -{7552, 2033}, {8544, 2030}, {8576, 2043}, {9536, 2022}, {9568, 2040}, -{10528, 2029}, {10560, 2035}, {10592, 2041}, {11264, 2034}, {11520, 2024}, -{11552, 2036}, {11584, 2037}, {11616, 2039}, {12288, 2042}, {12512, 2025}, -{12544, 2031}, {385, 4093}, {9600, 4090}, {10624, 4089}, {11648, 4091}, -{12576, 4088}, {12608, 4094}, {12640, 4092}, {12672, 4095}}; - -/* - Purpose: AAC Huffman decoding codebook #11. - Explanation: - */ -const Huffman_DecCode dec_hftable11[] = { -{4, 0}, {1056, 1}, {33, 6}, {1024, 5}, {1088, 8}, -{2080, 7}, {2112, 9}, {16896, 4}, {65, 25}, {1120, 20}, -{2048, 23}, {2144, 24}, {3104, 21}, {3136, 22}, {3168, 26}, -{97, 61}, {1152, 55}, {1184, 66}, {2176, 57}, {2208, 64}, -{3072, 60}, {3200, 59}, {3232, 68}, {4128, 54}, {4160, 56}, -{4192, 58}, {4224, 65}, {5152, 62}, {5184, 63}, {5216, 67}, -{5248, 69}, {129, 156}, {160, 198}, {1216, 146}, {1248, 175}, -{1536, 174}, {2240, 142}, {2272, 163}, {2304, 184}, {2560, 157}, -{3264, 145}, {3296, 165}, {3328, 190}, {3584, 148}, {4096, 154}, -{4256, 140}, {4288, 155}, {4320, 176}, {4352, 195}, {4608, 147}, -{5120, 191}, {5280, 158}, {5312, 167}, {5344, 185}, {5632, 159}, -{6176, 143}, {6208, 141}, {6240, 144}, {6272, 152}, {6304, 166}, -{6336, 182}, {6368, 196}, {6656, 168}, {7200, 171}, {7232, 164}, -{7264, 170}, {7296, 178}, {7328, 194}, {7360, 197}, {7680, 173}, -{8256, 189}, {8288, 188}, {8704, 180}, {9728, 183}, {10752, 186}, -{11776, 193}, {16416, 181}, {16448, 161}, {16480, 150}, {16512, 151}, -{16544, 149}, {16576, 153}, {16608, 160}, {16640, 162}, {16672, 172}, -{16704, 169}, {16736, 177}, {16768, 179}, {16800, 187}, {16832, 192}, -{193, 423}, {1280, 401}, {1312, 421}, {1344, 437}, {2336, 409}, -{2368, 428}, {2400, 449}, {3360, 406}, {3392, 430}, {3424, 441}, -{4384, 414}, {4416, 427}, {4448, 444}, {5376, 404}, {5408, 418}, -{5440, 442}, {5472, 451}, {6144, 416}, {6400, 415}, {6432, 431}, -{6464, 447}, {7168, 438}, {7392, 408}, {7424, 420}, {7456, 440}, -{8224, 402}, {8320, 398}, {8352, 407}, {8384, 410}, {8416, 419}, -{8448, 433}, {9248, 425}, {9280, 411}, {9312, 412}, {9344, 417}, -{9376, 426}, {9408, 429}, {9440, 435}, {10272, 443}, {10304, 424}, -{10336, 422}, {10368, 432}, {10400, 434}, {10432, 439}, {11328, 445}, -{11360, 436}, {11424, 452}, {12800, 400}, {13376, 446}, {13408, 448}, -{13824, 405}, {14848, 403}, {15872, 413}, {16384, 450}, {16864, 399}, -{225, 912}, {256, 962}, {288, 991}, {512, 910}, {1376, 926}, -{1408, 960}, {1440, 930}, {1472, 973}, {2432, 945}, {2464, 918}, -{2496, 958}, {2528, 970}, {3456, 929}, {3488, 913}, {3520, 933}, -{3552, 981}, {4480, 927}, {4512, 911}, {4544, 937}, {4576, 975}, -{5504, 934}, {5536, 935}, {5568, 955}, {5600, 980}, {6496, 921}, -{6528, 959}, {6560, 948}, {6592, 969}, {6624, 999}, {7488, 908}, -{7520, 932}, {7552, 964}, {7584, 966}, {7616, 989}, {7648, 1000}, -{8192, 943}, {8480, 909}, {8512, 920}, {8544, 951}, {8576, 979}, -{8608, 977}, {8640, 987}, {9216, 990}, {9472, 907}, {9504, 946}, -{9536, 952}, {9568, 974}, {9600, 993}, {9632, 992}, {10464, 923}, -{10496, 922}, {10528, 954}, {10560, 949}, {10592, 982}, {10656, 996}, -{11296, 928}, {11392, 906}, {11456, 914}, {11488, 938}, {11520, 944}, -{11552, 956}, {11584, 983}, {12320, 968}, {12352, 931}, {12384, 917}, -{12416, 925}, {12448, 940}, {12480, 942}, {12512, 965}, {12544, 984}, -{12576, 994}, {12608, 998}, {13344, 915}, {13440, 916}, {13472, 919}, -{13504, 941}, {13536, 963}, {13568, 961}, {13600, 978}, {14368, 957}, -{14400, 924}, {14432, 939}, {14464, 936}, {14496, 947}, {14528, 953}, -{14560, 976}, {14592, 995}, {14624, 997}, {15392, 988}, {15424, 950}, -{15456, 967}, {15488, 972}, {15520, 971}, {15552, 985}, {15584, 986}, -{321, 2022}, {352, 2035}, {416, 2028}, {1504, 2006}, {8672, 2013}, -{9664, 2002}, {9696, 2021}, {10240, 2019}, {10624, 2007}, {10688, 2008}, -{10720, 2026}, {11264, 2024}, {11616, 2004}, {11648, 2012}, {11680, 2011}, -{11712, 2005}, {11744, 2032}, {12288, 2043}, {12640, 2020}, {12672, 2023}, -{12704, 2016}, {12736, 2025}, {12768, 2039}, {13312, 2034}, {13632, 2010}, -{13664, 2009}, {13696, 2015}, {13728, 2027}, {13760, 2036}, {13792, 2042}, -{14336, 2040}, {14656, 2018}, {14688, 2014}, {14720, 2029}, {14752, 2033}, -{14784, 2041}, {14816, 2044}, {15616, 2003}, {15648, 2017}, {15680, 2030}, -{15712, 2031}, {15744, 2037}, {15776, 2038}, {385, 4091}, {448, 4090}, -{480, 4094}, {15360, 4093}, {15808, 4092}, {15840, 4095}}; - -/* - Purpose: AAC Huffman decoding codebook #12. - Explanation: Used for decoding of scalefactors. */ -const uint32 dec_hftable12[] = { -1006632961, 989855874, 973078881, 1023410496, 1040187776, 956302145, -1056965472, 922748737, 939525888, 1073743648, 1090520928, 905973537, -1107300096, 1124077376, 855646017, 872423168, 889200320, 1140858592, -1157635872, 822099713, 838876896, 1174421184, 1191198496, 771784481, - 788561632, 805338784, 1207991936, 1224769216, 1241546496, 721485601, - 755040000, 1258356384, 1275133568, 1291910848, 1308688096, 671219489, - 687996640, 704773824, 738328192, 1325530784, 1342308096, 637796065, - 654573216, 1359216256, 1375993536, 1392770816, 537394977, 554172064, - 570949344, 587726432, 604503744, 621280832, 1409810176, 1426587264, - 504364737, 521141984, 1460665984, 1494220448, 404749985, 438304320, - 455081568, 471858816, 488635936, 1444937216, 1478491840, 373292513, - 390069760, 423624128, 8387841, 25164992, 41942240, 58719392, - 327154816, 360709216, 1518337088, 83885729, 100662816, 117439904, - 134217408, 150994368, 167771616, 184548864, 201326464, 218103712, - 234880992, 251658176, 268435168, 285212416, 301989728, 318766880, - 352321344, 1543502624, 1560279872, 1577057120, 1593834368, 1610611616, -1627388864, 1644165888, 1660942912, 1677720160, 1694497408, 1711274656, -1728051904, 1744830016, 1761606624, 1778384096, 1795161344, 1811938592, -1828715840, 1845493088, 1862270144, 1879047168, 1895824416, 1912601664, -1929378912, 1946156160, 1962933408, 1979710176, 1996488064, 2013265536, -2030042720}; - -/* - Purpose: Array holding the AAC Huffman decoding codebooks. - Explanation: - -const Huffman_DecCode *dec_huffman_tables[] = { - dec_hftable1, dec_hftable2, dec_hftable3, dec_hftable4, dec_hftable5, - dec_hftable6, dec_hftable7, dec_hftable8, dec_hftable9, dec_hftable10, - dec_hftable11 -}; -*/ - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/dec_huf.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/dec_huf.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - dec_huf.h - AAC Huffman decoding declarations. - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef DEC_HUFFMAN_H_ -#define DEC_HUFFMAN_H_ - -/*-- Project Headers. --*/ -#include "defines.h" - -#define MAX_AAC_QHUFTABLES (11) - -/* - Purpose: Structure defining Huffman codeword values for - quantized spectral coefficients. - Explanation: - */ - -typedef struct Huffman_DecCodeStr -{ - uint16 huf_param; /* Quantized spectral coefficients. */ - uint16 codeword; /* Huffman codeword. */ - -} Huffman_DecCode; - -/* - Purpose: Structure defining Huffman codebook parameters for - quantized spectral coefficients. - Explanation: - */ -typedef struct Huffman_DecInfoStr -{ - int16 cb_len; /* Codebook size. */ - const Huffman_DecCode *huf; /* Codeword parameters for this codebook. */ - -} Huffman_DecInfo; - -/* - Purpose: Structure defining Huffman codebook parameters for - scalefactors. - Explanation: - */ -typedef struct Huffman_DecSfInfoStr -{ - int16 cb_len; /* Codebook size. */ - const uint32 *sf_param; /* Codeword parameters. */ - -} Huffman_DecSfInfo; - - - -/*-- Following functions are implemented in module 'dec_huftables.c'. --*/ -Huffman_DecInfo **LoadHuffmanDecTablesL(void); -void CloseHuffmanDecTables(Huffman_DecInfo **); -Huffman_DecSfInfo *LoadSfHuffmanTableL(void); -void CloseSfHuffmanTable(Huffman_DecSfInfo *sfHuf); - -#endif /*-- DEC_HUFFMAN_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/env_extr.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/env_extr.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* - \file - \brief Envelope extraction prototypes $Revision: 1.2.4.1 $ -*/ - -/************************************************************************** - env_extr.h - SBR bitstream demultiplexer interface + constants. - - Author(s): Juha Ojanpera - Copyright (c) 2004 by Nokia Research Center, Multimedia Technologies. - *************************************************************************/ - -#ifndef SBR_BITDEMUX_H_ -#define SBR_BITDEMUX_H_ - -/*-- Project Headers. --*/ -#include "sbr_codec.h" - -#define SBR_FREQ_SCALE_DEF (2) -#define SBR_ALTER_SCALE_DEF (1) -#define SBR_NOISE_BANDS_DEF (2) - -#define SBR_LIMITER_BANDS_DEF (2) -#define SBR_LIMITER_GAINS_DEF (2) -#define SBR_INTERPOL_FREQ_DEF (1) -#define SBR_SMOOTHING_LENGTH_DEF (1) - -#define SBR_AMP_RES_1_5 (0) -#define SBR_AMP_RES_3_0 (1) - -#define FIXFIX (0) -#define FIXVAR (1) -#define VARFIX (2) -#define VARVAR (3) - -#define SBR_UPSAMPLE_FAC (2) -#define NO_SYNTHESIS_CHANNELS (64) -#define NO_ANALYSIS_CHANNELS (NO_SYNTHESIS_CHANNELS / SBR_UPSAMPLE_FAC) -#define MAX_NOISE_ENVELOPES (2) -#define MAX_NOISE_COEFFS (8) -#define MAX_NUM_NOISE_VALUES (MAX_NOISE_ENVELOPES * MAX_NOISE_COEFFS) -#define MAX_NUM_LIMITERS (12) -#define MAX_ENVELOPES (8) -#define MAX_FREQ_COEFFS (48) -#define MAX_FREQ_COEFFS_FS44100 (35) -#define MAX_FREQ_COEFFS_FS48000 (32) -#define MAX_NUM_ENVELOPE_VALUES (MAX_ENVELOPES * MAX_FREQ_COEFFS) -#define MAX_INVF_BANDS (MAX_NOISE_COEFFS) -#define SBR_PARAMETRIC_STEREO_ID (2) - -/** - * SBR header status. - */ -typedef enum -{ - HEADER_OK, - HEADER_RESET, - CONCEALMENT, - HEADER_NOT_INITIALIZED - -} SBR_HEADER_STATUS; - -/** - * SBR codec status. - */ -typedef enum -{ - SBR_NOT_INITIALIZED, - UPSAMPLING, - SBR_ACTIVE - -} SBR_SYNC_STATE; - -/** - * SBR coupling modes. - */ -typedef enum -{ - COUPLING_OFF, - COUPLING_LEVEL, - COUPLING_BAL - -} COUPLING_MODE; - -/** - * Frequency scale tables for SBR. - */ -typedef struct FreqBandDataStr -{ - uint8 nSfb[2]; - uint8 nNfb; - uint8 numMaster; - uint8 noLimiterBands; - uint8 nInvfBands; - uint8 v_k_master[MAX_FREQ_COEFFS + 1]; - -} FreqBandData; - -/** - * SBR header element. - */ -typedef struct SbrHeaderDataStr -{ - SBR_SYNC_STATE syncState; - uint8 numberTimeSlots; - uint8 timeStep; - uint16 codecFrameSize; - int32 outSampleRate; - - uint8 ampResolution; - - uint8 startFreq; - uint8 stopFreq; - uint8 xover_band; - uint8 freqScale; - uint8 alterScale; - uint8 noise_bands; - - uint8 limiterBands; - uint8 limiterGains; - uint8 interpolFreq; - uint8 smoothingLength; - - FreqBandData *hFreqBandData; - -} SbrHeaderData; - -/** - * SBR frame info element. - */ -typedef struct FRAME_INFOStr -{ - uint8 frameClass; - uint8 nEnvelopes; - uint8 freqRes; - uint8 nNoiseEnvelopes; - -} FRAME_INFO; - -/** - * SBR grid info element. - */ -typedef struct SbrGridInfoStr -{ - uint8 bs_num_env; - - uint8 bs_pointer; - uint8 bs_num_rel[2]; - uint8 bs_var_board[2]; - uint8 bs_rel_board_0[4]; - uint8 bs_rel_board_1[4]; - -} SbrGridInfo; - -/** - * SBR frame data element. - */ -typedef struct SbrFrameDataStr -{ - uint8 dataPresent; - - FRAME_INFO frameInfo; - SbrGridInfo sbrGridInfo; - - uint8 domain_vec; - uint8 domain_vec_noise; - - uint16 sbr_invf_mode; - COUPLING_MODE coupling; - - uint8 isSinesPresent; - uint32 addHarmonics[2]; - - int8 iEnvelope[MAX_NUM_ENVELOPE_VALUES]; - int8 sbrNoiseFloorLevel[MAX_NUM_NOISE_VALUES]; - -} SbrFrameData; - -/** - * SBR extension data element. - */ -typedef struct SbrExtensionDataStr -{ - uint8 writePsData; - uint8 extensionDataPresent; - int16 byteCount; - uint8 extension_id; - int16 extDataBufLen; - uint8 *extensioData; - -} SbrExtensionData; - -/** - * Reads SBR single channel element. - * - * @param hHeaderData Handle to SBR header data - * @param hFrameData Handle to SBR frame data - * @param sbrExtData Handle to SBR extension data - * @param bs Input bitstream - * @param decVal Volume level adjustment factor - * @param isMono 1 if mono SBR bitstream, 0 otherwise - * @return Error code, 0 on success - * - */ -int16 -sbrGetSCE(SbrHeaderData *hHeaderData, - SbrFrameData *hFrameData, - SbrExtensionData *sbrExtData, - TBitStream *bs, - int16 decVal, - uint8 isMono); - -/** - * Reads SBR channel pair element. - * - * @param hHeaderData Handle to SBR header data - * @param hFrameDataLeft Handle to left channel SBR frame data - * @param hFrameDataRight Handle to right channel SBR frame data - * @param sbrExtData Handle to SBR extension data - * @param bs Input bitstream - * @param decVal Volume level adjustment factor - * @return Error code, 0 on success - * - */ -int16 -sbrGetCPE(SbrHeaderData *hHeaderData, - SbrFrameData *hFrameDataLeft, - SbrFrameData *hFrameDataRight, - SbrExtensionData *sbrExtData, - TBitStream *bs, - int16 decVal); - -/** - * Reads SBR header element. - * - * @param hHeaderData Handle to SBR header data - * @param bs Input bitstream - * @return Status of header processing, see status codes - * - */ -SBR_HEADER_STATUS -sbrGetHeaderData(SbrHeaderData *h_sbr_header, - TBitStream *bs); - -/** - * Initalizes SBR header element. - * - * @param hHeaderData Handle to SBR header data - * @param FreqBandData Handle to SBR frequency scale data - * @param sampleRate Sampling rate of AAC bitstream - * @param samplesPerFrame Number of samples in a frame (1024 or 960) - * - */ -void -initHeaderData(SbrHeaderData *headerData, - FreqBandData *FreqBandData, - int32 sampleRate, - int16 samplesPerFrame); - -/** - * Initalizes SBR frequency scale tables. - * - * @param hHeaderData Handle to SBR header data - * @return Error code, 0 on success - * - */ -int16 -resetFreqBandTables(SbrHeaderData *hHeaderData); - -FLOAT -FloatFR_logDualis(int16 a); - -FLOAT -FloatFR_getNumOctaves(int16 a, int16 b); - -#endif /*-- SBR_BITDEMUX_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/sbr_bitmux.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/sbr_bitmux.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* - \file - \brief SBR bitstream multiplexer interface $Revision: 1.1.1.1 $ -*/ - -/************************************************************************** - sbr_bitmux.cpp - TBitStream definitions for SBR encoder. - - Author(s): Juha Ojanpera - Copyright (c) 2004 by Nokia Research Center, Multimedia Technologies. - *************************************************************************/ - -#ifndef SBR_BITMUX_H_ -#define SBR_BITMUX_H_ - -/*-- Project Headers. --*/ -#include "env_extr.h" - -int16 -SBR_WriteHeaderData(SbrHeaderData *headerData, - TBitStream *bs, - uint8 writeFlag); - -int16 -SBR_WriteSCE(SbrHeaderData *headerData, - SbrFrameData *frameData, - SbrExtensionData *sbrExtData, - TBitStream *bs, - uint8 isMono, - uint8 writeFlag); - -int16 -SBR_WriteCPE(SbrHeaderData *headerData, - SbrFrameData *frameDataLeft, - SbrFrameData *frameDataRight, - SbrExtensionData *sbrExtData, - TBitStream *bs, - uint8 writeFlag); - -#endif /*-- SBR_BITMUX_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/sbr_codec.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/sbr_codec.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,314 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* - \file - \brief SBR codec interface $Revision: 1.1.1.1.4.1 $ -*/ - -/************************************************************************** - sbr_codec.h - SBR codec interface. - - Author(s): Juha Ojanpera - Copyright (c) 2004 by Nokia Research Center, Multimedia Technologies. - *************************************************************************/ - -#ifndef SBR_CODEC_H_ -#define SBR_CODEC_H_ - -/*-- Project Headers. --*/ -#include "nok_bits.h" -#include "defines.h" - -#pragma warning( disable : 4244) - -#define SBR_EXTENSION (13) /*-- 1101 --*/ -#define SBR_EXTENSION_CRC (14) /*-- 1110 --*/ -#define MAX_NR_ELEMENTS (2) -#define MAX_SBR_BYTES (128) - -/** - * Error codes for SBR processing. - */ -typedef enum -{ - SBRDEC_OK = 0, - SBRDEC_CONCEAL, - SBRDEC_NOSYNCH, - SBRDEC_ILLEGAL_PROGRAM, - SBRDEC_ILLEGAL_TAG, - SBRDEC_ILLEGAL_CHN_CONFIG, - SBRDEC_ILLEGAL_SECTION, - SBRDEC_ILLEGAL_SCFACTORS, - SBRDEC_ILLEGAL_PULSE_DATA, - SBRDEC_MAIN_PROFILE_NOT_IMPLEMENTED, - SBRDEC_GC_NOT_IMPLEMENTED, - SBRDEC_ILLEGAL_PLUS_ELE_ID, - SBRDEC_CREATE_ERROR, - SBRDEC_NOT_INITIALIZED - -} SBR_ERROR; - -/** - * SBR element tags, these are the same as used in AAC also. - */ -typedef enum -{ - SBR_ID_SCE = 0, - SBR_ID_CPE, - SBR_ID_CCE, - SBR_ID_LFE, - SBR_ID_DSE, - SBR_ID_PCE, - SBR_ID_FIL, - SBR_ID_END - -} SBR_ELEMENT_ID; - -/** - * Bitstream element for SBR payload data. - */ -typedef struct -{ - /** - * Length of payload data. - */ - int16 Payload; - - /** - * Channel element ID for the associated SBR data. - */ - int16 ElementID; - - /** - * Offset to the start of the channel element, in bits. - */ - int32 elementOffset; - - /** - * Length of the channel element, in bits. - */ - int32 chElementLen; - - /** - * Decoding status of SBR header. - */ - uint8 headerStatus; - - /** - * Type of SBR element (with or without CRC codeword). - */ - int16 ExtensionType; - - /** - * SBR bitstream data. - */ - uint8 *Data; - -} SbrElementStream; - -typedef struct -{ - int16 NrElements; - SbrElementStream sbrElement[MAX_NR_ELEMENTS]; - -} SbrBitStream; - -/** - * SBR handle. - */ -typedef struct SBR_Decoder_Instance SBR_Decoder; - -/** - * Creates SBR bitstream handle. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @return Handle to SBR bitstream handle - * - */ -SbrBitStream * -OpenSBRBitStreamL(void); - -/** - * Closes SBR bitstream handle. - * - * @param Bitstr Handle to SBR bitstream to be deleted - * @return NULL - * - */ -SbrBitStream * -CloseSBRBitStream(SbrBitStream *Bitstr); - -/** - * Creates SBR decoding/parsing handle. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param sampleRate Sample rate of the AAC bitstream - * @param samplesPerFrame Frame length of the AAC stream (1024 or 960) - * @param isStereo 1 if stereo AAC stream, 0 otherwise (=mono) - * @param isDualMono 1 if two single channel elements present in the AAC bistream, 0 otherwise - * @return Handle to SBR decoding/parsing handle - * - */ -SBR_Decoder * -OpenSBRDecoderL(int32 sampleRate, - int16 samplesPerFrame, - uint8 isStereo, - uint8 isDualMono); - -/** - * Closes SBR decoding handle. - * - * @param Bitstr Handle to SBR decoding/parsing to be deleted - * @return NULL - * - */ -SBR_Decoder * -CloseSBR(SBR_Decoder *self); - -/** - * Parses the SBR payload data and writes the modified bitstream element(s) - * to output AAC bitstream. - * - * @param bsIn Handle to AAC input bitstream - * @param bsOut Handle to AAC output bitstream - * @param self Handle to SBR parser - * @param Bitstr Handle to SBR bitstream element(s) - * @param decVal Volume level adjustment factor - * @return Number of bytes written to output bitstream - * - */ -int16 -ParseSBR(TBitStream *bsIn, - TBitStream *bsOut, - SBR_Decoder *self, - SbrBitStream *Bitstr, - int16 decVal); - -/** - * Chacks whether parametric stereo tool is enabled in the SBR elements. - * - * @param self Handle to SBR parser - * @param Bitstr Handle to SBR bitstream element(s) - * @return 1 if parametric stereo found, 0 otherwise - * - */ -uint8 -IsSBRParametricStereoEnabled(SBR_Decoder *self, SbrBitStream *Bitstr); - -/** - * Chacks whether SBR elements present in the bistream. - * - * @param Bitstr Handle to SBR bitstream element(s) - * @return 1 if SBR elements found, 0 otherwise - * - */ -uint8 -IsSBREnabled(SbrBitStream *Bitstr); - -/** - * Reads SBR payload data from AAC bitstream into SBR bitstream handle. - * - * @param bs Handle to AAC bitstream - * @param streamSBR Handle to SBR bitstream handle - * @param extension_type SBR payload type - * @param prev_element Channel element type prior the fill element - * @param dataCount Length of SBR payload data, in bytes - * @return 1 if SBR read, 0 otherwise (in which case the callee should read the data) - * - */ -int16 -ReadSBRExtensionData(TBitStream *bs, - SbrBitStream *streamSBR, - int16 extension_type, - int16 prev_element, - int16 dataCount); - -/** - * Initializes SBR handle for silence data generation. - * - * @param sbrDec Handle to SBR decoder - * @param isStereo 1 if stereo AAC stream, 0 otherwise (=mono) - * @param isParametricStereo 1 if parametric stereo should be included in the SBR data - * - */ -void -InitSBRSilenceData(SBR_Decoder *sbrDec, uint8 isStereo, uint8 isParametricStereo); - -/** - * Writes silence to SBR channel element. Please note that this method is supposed - * to be called inside AAC bitstream multiplexer and is therefore part of encoding. - * If you want to upgrade plain AAC bitstream to eAAC+, use 'GenerateSBRSilenceDataL()' - * first to generate the silence bits for SBR, then parse the AAC bitstream (so that the - * channel element positions and their length are known) and finally call - * 'WriteSBRSilence()' to write the output eAAC+ bitstream. - * - * @param sbrDecoder Handle to SBR codec - * @param bsOut Handle to output (AAC) bitstream - * @param isStereo 1 if stereo AAC stream, 0 otherwise (=mono) - * @return Length of SBR silence data, in bits - * - */ -int16 -WriteSBRSilenceElement(SBR_Decoder *sbrDecoder, TBitStream *bsOut, uint8 isStereo); - -/** - * Generates silence bits for SBR bitstream. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param OutBuffer Output buffer receiving silence data bits - * @param OutBufferSize Size of output buffer - * @param sampleRate Sample rate of the AAC bitstream - * @param isStereo 1 if stereo AAC stream, 0 otherwise (=mono) - * @param isParametricStereo 1 if parametric stereo should be included in the SBR data - * @return Length of SBR silence data, in bits - * - */ -int16 -GenerateSBRSilenceDataL(uint8 *OutBuffer, - int16 OutBufferSize, - int32 sampleRate, - uint8 isStereo, - uint8 isParametricStereo); - -/** - * Writes silence to the SBR part of the AAC bitstream. - * - * @param bsIn AAC input bitstream - * @param bsOut Output bitstream (AAC + SBR) - * @param streamSBR Handle to SBR bitstream element - * @param SbrBuffer Payload data to generate SBR silence - * @param SbrBits Length of SBR silence, in bits - * @return Length of AAC + SBR bitstream, in bytes - * - */ -int16 -WriteSBRSilence(TBitStream *bsIn, - TBitStream *bsOut, - SbrBitStream *streamSBR, - uint8 *SbrBuffer, - int16 SbrBits); - -#endif /*-- SBR_CODEC_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/sbr_rom.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/sbr_rom.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,92 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* - \file - \brief SBR ROM tables interface $Revision: 1.1.1.1.4.1 $ -*/ - -/************************************************************************** - sbr_rom.h - SBR ROM tables interface. - - Author(s): Juha Ojanpera - Copyright (c) 2004 by Nokia Research Center, Multimedia Technologies. - *************************************************************************/ - -#ifndef SBR_ROM_H_ -#define SBR_ROM_H_ - -/*-- Project Headers. --*/ -#include "env_extr.h" - -#define INV_INT_TABLE_SIZE (55) -#define LOG_DUALIS_TABLE_SIZE (65) -#define SBR_BIT_ARRAY_SIZE (8) - -extern const uint32 bitArray[SBR_BIT_ARRAY_SIZE]; - -extern const uint8 sbr_start_freq_16[16]; -extern const uint8 sbr_start_freq_22[16]; -extern const uint8 sbr_start_freq_24[16]; -extern const uint8 sbr_start_freq_32[16]; -extern const uint8 sbr_start_freq_44[16]; -extern const uint8 sbr_start_freq_48[16]; -extern const uint8 sbr_start_freq_64[16]; -extern const uint8 sbr_start_freq_88[16]; - -extern const FLOAT sbr_invIntTable[INV_INT_TABLE_SIZE]; -extern const FLOAT logDualisTable[LOG_DUALIS_TABLE_SIZE]; - -extern const FRAME_INFO sbr_staticFrameInfo[3]; - -extern const SbrHeaderData sbr_defaultHeader; - -extern const int8 sbr_huffBook_EnvLevel10T[120][2]; -extern const int8 sbr_huffBook_EnvLevel10F[120][2]; -extern const int8 sbr_huffBook_EnvBalance10T[48][2]; -extern const int8 sbr_huffBook_EnvBalance10F[48][2]; -extern const int8 sbr_huffBook_EnvLevel11T[62][2]; -extern const int8 sbr_huffBook_EnvLevel11F[62][2]; -extern const int8 sbr_huffBook_EnvBalance11T[24][2]; -extern const int8 sbr_huffBook_EnvBalance11F[24][2]; -extern const int8 sbr_huffBook_NoiseLevel11T[62][2]; -extern const int8 sbr_huffBook_NoiseBalance11T[24][2]; - -extern const int32 v_Huff_envelopeLevelC10T[121]; -extern const uint8 v_Huff_envelopeLevelL10T[121]; -extern const int32 v_Huff_envelopeLevelC10F[121]; -extern const uint8 v_Huff_envelopeLevelL10F[121]; -extern const int32 bookSbrEnvBalanceC10T[49]; -extern const uint8 bookSbrEnvBalanceL10T[49]; -extern const int32 bookSbrEnvBalanceC10F[49]; -extern const uint8 bookSbrEnvBalanceL10F[49]; -extern const int32 v_Huff_envelopeLevelC11T[63]; -extern const uint8 v_Huff_envelopeLevelL11T[63]; -extern const int32 v_Huff_envelopeLevelC11F[63]; -extern const uint8 v_Huff_envelopeLevelL11F[63]; -extern const uint16 bookSbrEnvBalanceC11T[25]; -extern const uint8 bookSbrEnvBalanceL11T[25]; -extern const uint16 bookSbrEnvBalanceC11F[25]; -extern const uint8 bookSbrEnvBalanceL11F[25]; -extern const uint16 v_Huff_NoiseLevelC11T[63]; -extern const uint8 v_Huff_NoiseLevelL11T[63]; -extern const uint16 bookSbrNoiseBalanceC11T[25]; -extern const uint8 bookSbrNoiseBalanceL11T[25]; - -#endif /*-- SBR_ROM_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/tool.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/tool.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,159 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - tool.h - Interface to AAC core structures. - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef AACTOOL_H_ -#define AACTOOL_H_ - -/*-- Project Headers. --*/ -#include "nok_bits.h" -#include "dec_huf.h" -#include "aacdef.h" - -/* - Purpose: LTP parameters for MPEG AAC. - Explanation: - */ -class CLTP_Info : public CBase -{ - -public: - - static CLTP_Info* NewL(); - ~CLTP_Info(); - - /*-- Max. sfb's used for this channel. --*/ - int16 max_sfb; - - /*-- Codebook index. --*/ - uint8 cbIdx; - - /*-- Boolean flag to indicate the presence of LTP. --*/ - int16 ltp_present; - - /*-- LTP lag. --*/ - int16* delay; - - /*-- Prediction status for each sfb. --*/ - uint32 sfbflags[2]; - -private: - - CLTP_Info(); - void ConstructL(); - -}; - -/* - Purpose: Structure interface for AAC decoding tools. - Explanation: - */ -class CToolInfo : public CBase -{ -public: - - static CToolInfo* NewL(); - ~CToolInfo(); - CLTP_Info *ltp; - int16* quant; - -private: - - void ConstructL(); - CToolInfo(); - -}; - -/* - Purpose: Structure interface for coupling channel. - Explanation: - */ -class CCInfo : public CBase -{ - -public: - static CCInfo* NewL(); - ~CCInfo(); - - CToolInfo* tool; - CWindowInfo* winInfo; - -private: - CCInfo(); - void ConstructL(); - -}; - -/* - Purpose: Information about the audio channel. - Explanation: - */ -class TEleList -{ -public: - int16 num_ele; - int16 ele_is_cpe[1 << LEN_TAG]; - int16 ele_tag[1 << LEN_TAG]; - -}; - -/* - Purpose: Mixing information for downmixing multichannel input - into two-channel output. - Explanation: - */ -class TMIXdown -{ -public: - int16 present; - int16 ele_tag; - int16 pseudo_enab; - -}; - - -/* - Purpose: Program configuration element. - Explanation: - */ -class TProgConfig -{ -public: - int16 tag; - int16 profile; - int16 sample_rate_idx; - - BOOL pce_present; - - TEleList front; - TEleList side; - TEleList back; - TEleList lfe; - TEleList data; - TEleList coupling; - - TMIXdown mono_mix; - TMIXdown stereo_mix; - TMIXdown matrix_mix; - - int16 num_comment_bytes; - -}; - -#endif /*-- AACTOOL_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/inc/tool2.h --- a/videoeditorengine/mp3aacManipLib/AACGain/inc/tool2.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - tool2.h - Interface to AAC decoding functions. - - Author(s): Juha Ojanpera - Copyright (c) 2003-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef AAC_FUNC_H_ -#define AAC_FUNC_H_ - -/*-- Project Headers. --*/ -#include "aacaud.h" -#include "tool.h" - -/* - * Sfb initialization. - */ -void -AACSfbInfoInit(CSfb_Info *sfb, uint8 sIndex, uint8 is960); - -int32 -AACSampleRate(uint8 sampleRateIdx); - - -/* - * Control of channel configuration. - */ -int16 -CCChIndex(CMC_Info *mip, int16 cpe, int16 tag); - -int16 -ChIndex(int16 nch, int16 tag, int16 wnd, CMC_Info *mip); - - -/* - * AAC syntactic channel elements. - */ -int16 -GetSCE(CAACAudDec *aac, TBitStream *bs, CMC_Info *mip, uint8 *gains, - uint32 *gainPos, uint32 bufBitOffset); - -int16 -GetCPE(CAACAudDec *aac, TBitStream *bs, CMC_Info *mip, uint8 *gains, - uint32 *gainPos, uint32 bufBitOffset); - -int16 -GetCCE(CAACAudDec *aac, TBitStream *bs, CMC_Info *mip, CCInfo **ccInfo); - -int16 -GetICS(TBitStream *bs, TCh_Info *cip, uint8 *group, uint8 max_sfb, - uint8 *cb_map, int16 *quant, int16 global_gain, - int16 *factors); - -int16 -GetICSInfo(TBitStream *bs, CWindowInfo *winInfo, CLTP_Info *ltp_left, CLTP_Info *ltp_right); - - -/* - * Huffman decoding interfaces. - */ -uint32 -GetHcb(Huffman_DecSfInfo *huf_info, TBitStream *bs); - -int16 -huf_sfac(TBitStream *bs, TCh_Info *cip, uint8 *group, uint8 *cb_map, - int16 global_gain, int16 *factors, uint8 max_sfb); - -int16 -huf_spec(TBitStream *bs, CInfo *info, int16 nsect, uint8 *sect, - int16 *quant, Huffman_DecInfo **huf, uint8 parseOnly); - - -/* - * Global gain element extraction and storage. - */ -int16 -GetSCEGain(CAACAudDec *aac, TBitStream *bs, uint8 *gains, - uint32 *gainPos, uint32 bufBitOffset); - -int16 -GetCPEGain(CAACAudDec *aac, TBitStream *bs, uint8 *gains, - uint32 *gainPos, uint32 bufBitOffset); - -#endif /*-- AAC_FUNC_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/Tool.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/Tool.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "Tool.h" - -CLTP_Info* CLTP_Info::NewL() - { - - CLTP_Info* self = new (ELeave) CLTP_Info(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - } - - -CLTP_Info::~CLTP_Info() - { - if (delay != 0) - delete[] delay; - } - -CLTP_Info::CLTP_Info() - { - - } - -void CLTP_Info::ConstructL() - { - delay = new (ELeave) int16[NSHORT]; - - } - - - -CToolInfo* CToolInfo::NewL() - { - - CToolInfo* self = new (ELeave) CToolInfo(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - } - -void CToolInfo::ConstructL() - { - quant = new (ELeave) int16[LN2]; - ltp = CLTP_Info::NewL(); - - } - -CToolInfo::CToolInfo() - { - - } - -CToolInfo::~CToolInfo() - { - - if (quant != 0) - { - delete [] quant; - } - - if (ltp != 0) - delete ltp; - - } - - -CCInfo* CCInfo::NewL() - { - CCInfo* self = new (ELeave) CCInfo(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - - } - -CCInfo::CCInfo() - { - - } - -CCInfo::~CCInfo() - { - if (tool != 0) delete tool; - if (winInfo != 0) delete winInfo; - } - -void CCInfo::ConstructL() - { - - tool = CToolInfo::NewL(); - winInfo = CWindowInfo::NewL(); - } - - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/aacaud.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/aacaud.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,973 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - aacaud.cpp - High level interface implementations for AAC decoder. - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- System Headers. --*/ -#include - -/*-- Project Headers. --*/ -#include "aacaud.h" -#include "dec_huf.h" -#include "tool2.h" - -CAACAudDec* CAACAudDec::NewL(int16 aNumCh, int16 aNumCCh) - { - CAACAudDec* self = new (ELeave) CAACAudDec(); - CleanupStack::PushL(self); - self->ConstructL(aNumCh, aNumCCh); - CleanupStack::Pop(self); - return self; - } - -void CAACAudDec::ConstructL(int16 aNumCh, int16 aNumCCh) - { - - //-----------------> - - int16 i, tmp; - - numCh = aNumCh; - numCCh = aNumCCh; - - /*-- Set the limit for the number of decoded audio elements. --*/ - if(numCh > ChansD - XChansD) - numCh = ChansD - XChansD; - - /*-- How many coupling channels are accepted ? --*/ - if(numCCh > CChansD - XCChansD) - numCCh = CChansD - XCChansD; - - /*-- # of channels outputted. --*/ - numOutCh = numCh; - - /*-- Allocate main channel elements. --*/ - tmp = (int16) (numCh + XChansD); - - winInfo = new (ELeave) CWindowInfo*[tmp]; - tool = new (ELeave) CToolInfo*[tmp]; - - windowAmount = tmp; - - for(i = 0; i < tmp; i++) - { - winInfo[i] = CWindowInfo::NewL(); - tool[i] = CToolInfo::NewL(); - } - - /*-- Allocate coupling channel elements. --*/ - tmp = (int16) (numCCh + XCChansD); - ccInfo = new (ELeave) CCInfo*[tmp]; - - for(i = 0; i < tmp; i++) - { - ccInfo[i] = CCInfo::NewL(); - } - - /*-- Get spectral codebooks parameters. --*/ - huf = LoadHuffmanDecTablesL(); - - /*-- Get scalefactor codebook parameters. --*/ - sf_huf = LoadSfHuffmanTableL(); - - mc_info = CMC_Info::NewL(); - - for(i = 0; i < ChansD; i++) - { - mc_info->ch_info[i].huf = huf; - mc_info->ch_info[i].sf_huf = sf_huf; - } - - //<------------------ - - } - -CAACAudDec::CAACAudDec() : tool(0), mc_info(0), ccInfo(0), winInfo(0), - huf(0), sf_huf(0) - { -#ifdef EAACPLUS_DECODER - sbrStream = NULL; - sbrDecInfo = NULL; -#endif /*-- EAACPLUS_DECODER --*/ - } - -CAACAudDec::~CAACAudDec() - { - - /*-- Allocate main channel elements. --*/ - TInt tmp = (int16) (numCh + XChansD); - TInt i = 0; - if (winInfo != 0) - { - for(i = 0; i < tmp; i++) - { - if (winInfo[i] != 0) delete winInfo[i]; - if (tool[i] != 0) delete tool[i]; - } - - delete[] winInfo; - } - - if (tool != 0) delete[] tool; - - - /*-- Allocate coupling channel elements. --*/ - tmp = (int16) (numCCh + XCChansD); - - if (ccInfo != 0) - { - for(i = 0; i < tmp; i++) - { - if (ccInfo[i] != 0) delete ccInfo[i]; - } - } - - if (ccInfo != 0) delete[] ccInfo; - - CloseHuffmanDecTables(huf); huf = NULL; - CloseSfHuffmanTable(sf_huf); sf_huf = NULL; - - if (mc_info != 0) delete mc_info; - - - sbrStream = CloseSBRBitStream(sbrStream); - sbrDecInfo = CloseSBR(sbrDecInfo); - - } - -/* - * Prepares Ch_Info structure for given audio element. The return value is - * channel index into 'mip->ch_into' structure. - */ -static INLINE int16 -enter_chn(int16 nch, int16 tag, int16 common_window, CMC_Info *mip) -{ - TCh_Info *cip; - BOOL parseCh; - int16 cidx = 0; - - /*-- Build configuration. --*/ - if(mip->nch + nch > (mip->maxnCh + 1) || mip->dummyAlways) - { - parseCh = FALSE; - cidx = mip->dummyCh; - mip->dummyAlways = TRUE; - } - else - { - parseCh = TRUE; - cidx = mip->nch; - mip->nch = (int16) (mip->nch + nch); - } - - if(nch == 1) /*-- SCE. --*/ - { - cip = &mip->ch_info[cidx]; - - cip->cpe = 0; - cip->ncch = 0; - cip->tag = tag; - cip->widx = cidx; - cip->present = 1; - cip->paired_ch = cidx; - cip->parseCh = parseCh; - } - else /*-- CPE. --*/ - { - /*-- Left. --*/ - cip = &mip->ch_info[cidx]; - cip->cpe = 1; - cip->ncch = 0; - cip->tag = tag; - cip->widx = cidx; - cip->present = 1; - cip->parseCh = parseCh; - cip->paired_ch = (int16) (cidx + 1); - - /*-- Right. ---*/ - cip = &mip->ch_info[cidx + 1]; - cip->cpe = 1; - cip->ncch = 0; - cip->tag = tag; - cip->present = 1; - cip->paired_ch = cidx; - cip->parseCh = parseCh; - cip->widx = (common_window) ? (int16) cidx : (int16) (cidx + 1); - } - - return (cidx); -} - -/* - * Retrieve appropriate channel index for the program and decoder configuration. - */ -int16 -ChIndex(int16 nch, int16 tag, int16 wnd, CMC_Info *mip) -{ - /* - * Channel index to position mapping for 5.1 configuration is : - * 0 center - * 1 left front - * 2 right front - * 3 left surround - * 4 right surround - * 5 lfe - */ - return (enter_chn(nch, tag, wnd, mip)); -} - -/* - * Given cpe and tag, returns channel index of SCE or left channel in CPE. - */ -int16 -CCChIndex(CMC_Info *mip, int16 cpe, int16 tag) -{ - int16 ch; - TCh_Info *cip = &mip->ch_info[0]; - - for(ch = 0; ch < mip->nch; ch++, cip++) - if(cip->cpe == cpe && cip->tag == tag) - return (ch); - - /* - * No match, so channel is not in this program. Just parse the channel(s). - */ - cip = &mip->ch_info[mip->dummyCh]; - cip->cpe = cpe; - cip->widx = mip->dummyCh; - cip->parseCh = TRUE; - - return (mip->dummyCh); -} - -/* - * Checks continuity of configuration from one block to next. - */ -static INLINE void -ResetMCInfo(CMC_Info *mip) -{ - /*-- Reset channels counts. --*/ - mip->nch = 0; - mip->ncch = 0; - mip->dummyAlways = 0; -} - -/* - * Deletes resources allocated to the specified AAC decoder. - */ -EXPORT_C CAACAudDec * -DeleteAACAudDec(CAACAudDec *aac) -{ - if(aac) - { - delete (aac); - aac = 0; - } - - return (NULL); -} - -/* - * Creates handle to AAC decoder core. The input parameters are - * the number of main ('numCh') and coupling ('numCCh') channels - * to be supported. - * - * Return AAC decoder handle on success, NULL on failure. - */ -EXPORT_C void -CreateAACAudDecL(CAACAudDec*& aDecHandle, int16 numCh, int16 numCCh) -{ - aDecHandle = CAACAudDec::NewL(numCh, numCCh); - - return; -} - -/* - * Creates handle to eAAC+ decoder. - */ -EXPORT_C uint8 -CreateAACPlusAudDecL(CAACAudDec *aDecHandle, int16 sampleRateIdx, uint8 isStereo, uint8 isDualMono) -{ - - int32 sampleRate = AACSampleRate(sampleRateIdx); - - aDecHandle->sbrStream = OpenSBRBitStreamL(); - aDecHandle->sbrDecInfo = OpenSBRDecoderL(sampleRate, 1024, isStereo, isDualMono); - - return (1); - - -} - -/* - * Prepares AAC core engine for decoding. The input parameters are the - * AAC profile ID (or object type in case MPEG-4 AAC) and the sampling - * rate index. - */ -EXPORT_C void -InitAACAudDec(CAACAudDec *aac, int16 profile, int16 sampleRateIdx, uint8 is960) -{ - int16 i, j; - CMC_Info *mip; - PredType predType; - - mip = aac->mc_info; - - mip->profile = (uint8) profile; - mip->sfreq_idx = (uint8) sampleRateIdx; - - mip->cur_prog = -1; - mip->default_config = 1; - - /* - * Set channel restrictions so that we know how to handle - * unused channel elements. - */ - mip->maxnCh = aac->numCh; - mip->dummyCh = mip->maxnCh; - mip->maxnCCh = aac->numCCh; - mip->dummyCCh = mip->maxnCCh; - - /*-- Initialize sfb parameters. --*/ - AACSfbInfoInit(mip->sfbInfo, mip->sfreq_idx, is960); - - ResetAACAudDec(aac); - - /*-- How many bands used for prediction (BWAP or LTP). --*/ - if(profile == LTP_Object) - { - predType = LTP_PRED; - j = LTP_MAX_PRED_BANDS; - } - else - { - j = 0; - predType = NO_PRED; - } - - for(i = 0; i < aac->numCh + XChansD; i++) - { - aac->winInfo[i]->predBands = (uint8) j; - aac->winInfo[i]->predType = predType; - } - for(i = 0; i < aac->numCCh + XCChansD; i++) - { - aac->ccInfo[i]->winInfo->predBands = (uint8) j; - aac->ccInfo[i]->winInfo->predType = predType; - } - - aac->samplesPerFrame = (is960) ? (int16) LN2_960 : (int16) LN2; -} - -/* - * Resets internal members from the specified AAC decoder core. - */ -EXPORT_C void -ResetAACAudDec(CAACAudDec *aac) -{ - int16 i; - CMC_Info *mip; - CWindowInfo *winInfo; - - mip = aac->mc_info; - - /*-- Reset some modules. --*/ - ResetMCInfo(mip); - - /* - * Assume that the first window shape is of type Kaiser-Bessel - * Derived (KBD). If not, then we use it anyway. The mismatch - * in the first frame is not of prime importance. - */ - - for(i = 0; i < aac->numCh; i++) - { - //tool = aac->tool[i]; - winInfo = aac->winInfo[i]; - - winInfo->wshape[0].prev_bk = WS_KBD; - winInfo->wshape[1].prev_bk = WS_KBD; - } - - for(i = 0; i < aac->numCCh; i++) - { - //tool = aac->ccInfo[i]->tool; - - aac->ccInfo[i]->winInfo->wshape[0].prev_bk = WS_KBD; - aac->ccInfo[i]->winInfo->wshape[1].prev_bk = WS_KBD; - } -} - -/* - * Reads data stream element from the specified bitstream. - * - * Returns # of read bits. - */ -static INLINE int16 -GetDSE(TBitStream *bs) -{ - int16 align_flag, cnt, bitsRead; - - bitsRead = (int16) BsGetBitsRead(bs); - - // read tag - BsGetBits(bs, LEN_TAG); - align_flag = (int16) BsGetBits(bs, LEN_D_ALIGN); - cnt = (int16) BsGetBits(bs, LEN_D_CNT); - - if(cnt == (1 << LEN_D_CNT) - 1) - cnt = (int16) (cnt + BsGetBits(bs, LEN_D_ESC)); - - if(align_flag) BsByteAlign(bs); - - BsSkipNBits(bs, cnt << 3); - - bitsRead = (int16) (BsGetBitsRead(bs) - bitsRead); - - return (bitsRead); -} - -/* - * Reads fill element from the bitstream. - */ -int32 -CAACAudDec::extension_payload(TBitStream *bs, int32 cnt, uint32 prevEleID) -{ - uint8 extType = (uint8) BsGetBits(bs, LEN_EX_TYPE); - - switch(extType) - { - case EX_FILL_DATA: - default: - if(sbrStream && !ReadSBRExtensionData(bs, sbrStream, extType, prevEleID, cnt)) - { - - BsGetBits(bs, LEN_NIBBLE); - BsSkipNBits(bs, (cnt - 1) << 3); - break; - - } - else if (!sbrStream) - { - BsGetBits(bs, LEN_NIBBLE); - BsSkipNBits(bs, (cnt - 1) << 3); - break; - - } - - - - } - - return (cnt); -} - -/* - * Reads fill data from the bitstream. - */ -void -CAACAudDec::GetFIL(TBitStream *bs, uint32 prevEleID) -{ - int32 cnt; - - cnt = BsGetBits(bs, LEN_F_CNT); - if(cnt == (1 << LEN_F_CNT) - 1) - cnt += BsGetBits(bs, LEN_F_ESC) - 1; - - while(cnt > 0) - cnt -= extension_payload(bs, cnt, prevEleID); -} - -/* - * Reads program configuration element from the specified bitstream. - */ -int16 -GetPCE(TBitStream *bs, TProgConfig *p) -{ - int16 i; - - p->pce_present = TRUE; - p->tag = (int16) BsGetBits(bs, LEN_TAG); - p->profile = (int16) BsGetBits(bs, LEN_PROFILE); - p->sample_rate_idx = (int16) BsGetBits(bs, LEN_SAMP_IDX); - p->front.num_ele = (int16) BsGetBits(bs, LEN_NUM_ELE); - p->side.num_ele = (int16) BsGetBits(bs, LEN_NUM_ELE); - p->back.num_ele = (int16) BsGetBits(bs, LEN_NUM_ELE); - p->lfe.num_ele = (int16) BsGetBits(bs, LEN_NUM_LFE); - p->data.num_ele = (int16) BsGetBits(bs, LEN_NUM_DAT); - p->coupling.num_ele = (int16) BsGetBits(bs, LEN_NUM_CCE); - - p->mono_mix.present = (int16) BsGetBits(bs, 1); - if(p->mono_mix.present == 1) - p->mono_mix.ele_tag = (int16) BsGetBits(bs, LEN_TAG); - - p->stereo_mix.present = (int16) BsGetBits(bs, 1); - if(p->stereo_mix.present == 1) - p->stereo_mix.ele_tag = (int16) BsGetBits(bs, LEN_TAG); - - p->matrix_mix.present = (int16) BsGetBits(bs, 1); - if(p->matrix_mix.present == 1) - { - p->matrix_mix.ele_tag = (int16) BsGetBits(bs, LEN_MMIX_IDX); - p->matrix_mix.pseudo_enab = (int16) BsGetBits(bs, LEN_PSUR_ENAB); - } - - for(i = 0; i < p->front.num_ele; i++) - { - p->front.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE); - p->front.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - } - - for(i = 0; i < p->side.num_ele; i++) - { - p->side.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE); - p->side.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - } - - for(i = 0; i < p->back.num_ele; i++) - { - p->back.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE); - p->back.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - } - - for(i = 0; i < p->lfe.num_ele; i++) - { - p->lfe.ele_is_cpe[i] = 0; - p->lfe.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - } - - for(i = 0; i < p->data.num_ele; i++) - { - p->data.ele_is_cpe[i] = 0; - p->data.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - } - - for(i = 0; i < p->coupling.num_ele; i++) - { - p->coupling.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE); - p->coupling.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG); - } - - BsByteAlign(bs); - - p->num_comment_bytes = (int16) BsGetBits(bs, LEN_COMMENT_BYTES); - BsSkipNBits(bs, p->num_comment_bytes << 3); - - return (p->tag); -} - -/** - * Saves the start position of the channel element within the AAC frame. - */ -static void -SaveSBRChannelElementPos(SbrBitStream *sbrStream, uint32 bitOffset, uint32 ele_id) -{ - if(sbrStream->NrElements < MAX_NR_ELEMENTS) - { - /*-- Save starting position of the channel element. --*/ - sbrStream->sbrElement[sbrStream->NrElements].elementOffset = bitOffset - 3; - sbrStream->sbrElement[sbrStream->NrElements].ElementID = ele_id; - } -} - -/** - * Saves the length of the channel element within the AAC frame. - */ -static void -SaveSBRChannelElementLen(SbrBitStream *sbrStream, uint32 presentPos) -{ - if(sbrStream->NrElements < MAX_NR_ELEMENTS) - { - /*-- Save length of the channel element. --*/ - sbrStream->sbrElement[sbrStream->NrElements].chElementLen = - presentPos - sbrStream->sbrElement[sbrStream->NrElements].elementOffset; - } -} -/************************************************************************** - Title : CountAACChunkLength - - Purpose : Counts the number of bytes reserved for the payload part of - current AAC frame. This functions should only be called if - no other methods exist to determine the payload legth - (e.g., ADIF does not include this kind of information). - - Usage : y = CountAACChunkLength(bs, aac, bytesInFrame) - - Input : bs - input bitstream - aac - AAC decoder parameters - - Output : y - status of operation - bytesInFrame - # of bytes reserved for this frame - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C int16 -CountAACChunkLength(TBitStream *bs, CAACAudDec *aac, int16 *bytesInFrame) -{ - uint32 bitsRead; - int16 frameStatus; - - /*-- Save the status of input bitstream. --*/ - bitsRead = BsGetBitsRead(bs); - - /*-- Parse the frame. --*/ - frameStatus = (!GetAACGlobalGains(bs, aac, 15, NULL, NULL)) ? (int16) 0 : (int16) 1; - ResetMCInfo(aac->mc_info); - - /*-- Determine the # of bytes for this frame. --*/ - bitsRead = BsGetBitsRead(bs) - bitsRead; - *bytesInFrame = (int16) ((bitsRead >> 3) + ((bitsRead & 0x7) ? 1 : 0)); - - return (frameStatus); -} - -/************************************************************************** - Title : GetAACGlobalGains - - Purpose : Extracts 'global_gain' bitstream elements from the specified - AAC data buffer. - - Usage : y = GetAACGlobalGains(bs, aac, nBufs, globalGain, globalGainPos) - - Input : bs - input bitstream - aac - AAC decoder handle - nBufs - # of gain buffers present - - Output : y - # of gain elements extracted - globalGain - 'global_gain' elements - globalGainPos - position location (in bits) of each gain value. - This information is used when storing the gain - elements back to bitstream. - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C uint8 -GetAACGlobalGains(TBitStream* bs, CAACAudDec *aac, uint8 nBufs, uint8 *globalGain, uint32 *globalGainPos) -{ - uint8 numGains; - uint8 loopControl; - TProgConfig progCfg; - CMC_Info *mip = aac->mc_info; - uint32 ele_id, prevEleID, bufBitOffset; - - numGains = 0; - loopControl = 0; - prevEleID = ID_END; - bufBitOffset = BsGetBitsRead(bs); - - /*-- Reset some modules. --*/ - ResetMCInfo(mip); - - /*-- No SBR elements present by default. --*/ - if(aac->sbrStream) - aac->sbrStream->NrElements = 0; - - /*-- Loop until termination code found. --*/ - while((ele_id = BsGetBits(bs, LEN_SE_ID)) != ID_END) - { - int16 parserErr; - - if(loopControl > 64) break; - - /*-- Get audio syntactic element. --*/ - switch(ele_id) - { - /*-- Single and lfe channel. --*/ - case ID_SCE: - case ID_LFE: - if((numGains + 1) > nBufs) break; - - if(aac->sbrStream) - SaveSBRChannelElementPos(aac->sbrStream, BsGetBitsRead(bs) - bufBitOffset, ele_id); - - if(globalGain) - parserErr = GetSCEGain(aac, bs, &globalGain[numGains], &globalGainPos[numGains], bufBitOffset); - else - parserErr = GetSCE(aac, bs, mip, NULL, NULL, 0); - - if(parserErr < 0) - goto f_out; - numGains += 1; - - if(aac->sbrStream) - SaveSBRChannelElementLen(aac->sbrStream, BsGetBitsRead(bs)); - break; - - /*-- Channel pair element. --*/ - case ID_CPE: - if((numGains + 2) > nBufs) break; - if(aac->sbrStream) - SaveSBRChannelElementPos(aac->sbrStream, BsGetBitsRead(bs) - bufBitOffset, ele_id); - - if(globalGain) - parserErr = GetCPEGain(aac, bs, &globalGain[numGains], &globalGainPos[numGains], bufBitOffset); - else - parserErr = GetCPE(aac, bs, mip, NULL, NULL, 0); - - if(parserErr < 0) - goto f_out; - numGains += 2; - - if(aac->sbrStream) - SaveSBRChannelElementLen(aac->sbrStream, BsGetBitsRead(bs)); - break; - - /*-- Coupling channel. --*/ - case ID_CCE: - if(GetCCE(aac, bs, mip, aac->ccInfo) < 0) - goto f_out; - break; - - /*-- Data element. --*/ - case ID_DSE: - loopControl++; - GetDSE(bs); - break; - - /*-- Program config element. --*/ - case ID_PCE: - loopControl++; - GetPCE(bs, &progCfg); - break; - - /*-- Fill element. --*/ - case ID_FIL: - loopControl++; - TInt error; - TRAP( error, aac->GetFIL(bs, prevEleID) ); - if (error != KErrNone) - goto f_out; - break; - - default: - goto f_out; - } - - prevEleID = ele_id; - - bufBitOffset = BsGetBitsRead(bs) - bufBitOffset; - } - - BsByteAlign(bs); - -f_out: - - return (numGains); -} - -/* - * Stores 'global_gain' bitstream elements to AAC data buffer. - */ -INLINE void -SetAACGain(TBitStream* bs, uint32 gainPos, uint8 globalGains) -{ - BsSkipNBits(bs, gainPos); - BsPutBits(bs, LEN_SCL_PCM, globalGains); -} - -/* - * Saves modified 'global_gain' bitstream elements to specified AAC data buffer. - */ -EXPORT_C void -SetAACGlobalGains(TBitStream* bs, uint8 numGains, uint8 *globalGain, uint32 *globalGainPos) -{ - int16 i; - TBitStream bsIn; - - BsSaveBufState(bs, &bsIn); - - /*-- Store the gain element back to bitstream. --*/ - for(i = 0; i < numGains; i++) - SetAACGain(bs, globalGainPos[i], globalGain[i]); - - -} - -/* - * Retrieves sample rate index corresponding to the specified sample rate. - */ -INLINE uint8 -GetSampleRateIndex(int32 sampleRate) -{ - uint8 sIndex = 0xF; - - switch(sampleRate) - { - case 96000: - sIndex = 0x0; - break; - - case 88200: - sIndex = 0x1; - break; - - case 64000: - sIndex = 0x2; - break; - - case 48000: - sIndex = 0x3; - break; - - case 44100: - sIndex = 0x4; - break; - - case 32000: - sIndex = 0x5; - break; - - case 24000: - sIndex = 0x6; - break; - - case 22050: - sIndex = 0x7; - break; - - case 16000: - sIndex = 0x8; - break; - - case 12000: - sIndex = 0x9; - break; - - case 11025: - sIndex = 0xa; - break; - - case 8000: - sIndex = 0xb; - break; - } - - return (sIndex); -} - -INLINE int16 -WriteGASpecificConfig(TBitStream *bsOut, int16 bitsWritten, int16 frameLen) -{ - /*-- Frame length flag (1024-point or 960-point MDCT). --*/ - bitsWritten += 1; - BsPutBits(bsOut, 1, (frameLen == LN2) ? 0 : 1); - - /*-- No core coder. --*/ - bitsWritten += 1; - BsPutBits(bsOut, 1, 0); - - /*-- No extension flag. --*/ - bitsWritten += 1; - BsPutBits(bsOut, 1, 0); - - return (bitsWritten); -} - - - -EXPORT_C int16 -AACGetMP4ConfigInfo(int32 sampleRate, uint8 profile, uint8 nChannels, - int16 frameLen, uint8 *pBuf, uint8 nBytesInBuf) -{ - TBitStream bsOut; - int16 nConfigBytes, bitsWritten; - - BsInit(&bsOut, pBuf, nBytesInBuf); - - /*-- Object type. --*/ - bitsWritten = 5; - BsPutBits(&bsOut, 5, profile + 1); - - /*-- Sample rate index. --*/ - bitsWritten += 4; - BsPutBits(&bsOut, 4, GetSampleRateIndex(sampleRate)); - if(GetSampleRateIndex(sampleRate) == 0xF) - { - bitsWritten += 24; - BsPutBits(&bsOut, 24, sampleRate); - } - - /*-- # of channels. --*/ - bitsWritten += 4; - BsPutBits(&bsOut, 4, nChannels); - - /*-- Write GA specific info. --*/ - bitsWritten = WriteGASpecificConfig(&bsOut, bitsWritten, frameLen); - - nConfigBytes = int16 ((bitsWritten & 7) ? (bitsWritten >> 3) + 1 : (bitsWritten >> 3)); - - return (nConfigBytes); -} - -/* - * Saves modified 'global_gain' bitstream elements to specified AAC data buffer. - */ -EXPORT_C void -SetAACPlusGlobalGains(TBitStream* bs, TBitStream* bsOut, CAACAudDec *aac, int16 gainChangeValue, - uint8 numGains, uint8 *globalGain, uint32 *globalGainPos) - { - int16 i; - TBitStream bsIn; - - BsSaveBufState(bs, &bsIn); - - /*-- Store the gain element back to bitstream. --*/ - for(i = 0; i < numGains; i++) - { - SetAACGain(bs, globalGainPos[i], globalGain[i]); - } - - - if(aac->sbrStream && aac->sbrDecInfo) - { - - if(aac->sbrStream->NrElements) - { - ParseSBR(&bsIn, bsOut, aac->sbrDecInfo, aac->sbrStream, gainChangeValue); - } - - - } - - } - - -EXPORT_C uint8 -IsAACParametricStereoEnabled(CAACAudDec *aac) - { - - return (IsSBRParametricStereoEnabled(aac->sbrDecInfo, aac->sbrStream)); - - } - -EXPORT_C uint8 -IsAACSBREnabled(CAACAudDec *aac) - { - - return (IsSBREnabled(aac->sbrStream)); - - - } diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/aacdef.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/aacdef.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "aacdef.h" - -CWindowInfo* CWindowInfo::NewL() - { - - CWindowInfo* self = new (ELeave) CWindowInfo(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - } -CWindowInfo::~CWindowInfo() - { - if (group != 0) delete[] group; - if (mask != 0) delete[] mask; - if (sfac != 0) delete[] sfac; - if (cb_map != 0) delete[] cb_map; - if (lpflag != 0) delete[] lpflag; - - } - -CWindowInfo::CWindowInfo() - { - - } - -void CWindowInfo::ConstructL() - { - - group = new (ELeave) uint8[NSHORT]; - mask = new (ELeave) uint8[MAXBANDS]; - sfac = new (ELeave) int16[MAXBANDS]; - cb_map = new (ELeave) uint8[MAXBANDS]; - lpflag= new (ELeave) int16[MAXBANDS]; - - } - -CMC_Info* CMC_Info::NewL() - { - - CMC_Info* self = new (ELeave) CMC_Info(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - } -CMC_Info::~CMC_Info() - { - if (sfbInfo != 0) delete sfbInfo; - } - -CMC_Info::CMC_Info() - { - - } - -void CMC_Info::ConstructL() - { - sfbInfo = CSfb_Info::NewL(); - - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/chandefs.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/chandefs.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,161 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "chandefs.h" - -CInfo* CInfo::NewL() - { - - CInfo* self = new (ELeave) CInfo(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - } - -void CInfo::ConstructL() - { - - bins_per_sbk = new (ELeave) int16[MAX_SBK]; - sfb_per_sbk = new (ELeave) int16[MAX_SBK]; - bk_sfb_top = new (ELeave) int16[200]; - group_len = new (ELeave) int16[NSHORT]; - group_offs = new (ELeave) int16[NSHORT]; - - } - -CInfo::CInfo() - { - - } - -CInfo::~CInfo() - { - - if (bins_per_sbk != 0) delete[] bins_per_sbk; - if (sfb_per_sbk != 0) delete[] sfb_per_sbk; - if (bk_sfb_top != 0) delete[] bk_sfb_top; - if (group_len != 0) delete[] group_len; - if (group_offs != 0) delete[] group_offs; - - } - - -CSfb_Info* CSfb_Info::NewL(uint8 isEncoder) - { - - CSfb_Info* self = new (ELeave) CSfb_Info(); - CleanupStack::PushL(self); - self->ConstructL(isEncoder); - CleanupStack::Pop(self); - return self; - - } - -void CSfb_Info::ConstructL(uint8 isEncoder) - { - - only_long_info = CInfo::NewL(); - eight_short_info = CInfo::NewL(); - - if(isEncoder) - { - int16 i; - - /*-- Allocate SFB data. --*/ - sect_sfb_offsetL = (int16 *) new (ELeave) int16[MAXLONGSFBBANDS]; - - sect_sfb_offsetS = (int16 *) new (ELeave) int16[MAXSHORTSFBBANDS]; - - for(i = 0; i < NSHORT; i++) - { - sect_sfb_offsetS2[i] = (int16 *) new (ELeave) int16[MAXSHORTSFBBANDS]; - } - - } - - } - -CSfb_Info::CSfb_Info() - { - int16 i; - - only_long_info = 0; - eight_short_info = 0; - - /*-- Scalefactor offsets. --*/ - sect_sfb_offsetL = 0; - sect_sfb_offsetS = 0; - sfbOffsetTablePtr[0] = sfbOffsetTablePtr[1] = 0; - - for(i = 0; i < NSHORT; i++) - { - sect_sfb_offsetS2[i] = 0; - } - - - } - -CSfb_Info::~CSfb_Info() - - { - int16 i; - - if (only_long_info != 0) - { - delete only_long_info; - only_long_info = 0; - - } - - if (eight_short_info != 0) - { - delete eight_short_info; - eight_short_info = 0; - - } - - if(sect_sfb_offsetL != 0) - { - delete[] sect_sfb_offsetL; - sect_sfb_offsetL = 0; - - } - - if(sect_sfb_offsetS != 0) - { - delete[] sect_sfb_offsetS; - sect_sfb_offsetS = 0; - - } - - for(i = 0; i < NSHORT; i++) - { - if(sect_sfb_offsetS2[i] != 0) - { - delete[] sect_sfb_offsetS2[i]; - sect_sfb_offsetS2[i] = 0; - - } - } - - } diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/coupling.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/coupling.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - coupling.cpp - Coupling channel implementations (parsing only!). - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- System Headers. --*/ -#include - -/*-- Project Headers. --*/ -#include "tool2.h" -#include "defines.h" - -int16 -GetCCE(CAACAudDec *aac, TBitStream *bs, CMC_Info *mip, CCInfo **ccInfo) -{ - TCh_Info cip; - CToolInfo *tool; - CWindowInfo *ccWin; - int16 i, j, tag, cidx, ch, nele, nch; - int16 shared[2 * ((LEN_NCC << 3) + 1)], global_gain; - - ZERO_MEMORY(&cip, sizeof(TCh_Info)); - - /*-- Get (dummy) channel index for this coupling channel. --*/ - cidx = mip->dummyCCh; - - tool = ccInfo[cidx]->tool; - ccWin = ccInfo[cidx]->winInfo; - - tag = (int16) BsGetBits(bs, LEN_TAG); - mip->cc_ind[cidx] = (int16) BsGetBits(bs, LEN_IND_SW_CCE); - - /*-- Coupled (target) elements. --*/ - ZERO_MEMORY(shared, sizeof(shared)); - nele = (int16) BsGetBits(bs, LEN_NCC); - for(i = 0, nch = 0; i < nele + 1; i++) - { - int16 cpe; - - cpe = (int16) BsGetBits(bs, LEN_IS_CPE); - tag = (int16) BsGetBits(bs, LEN_TAG); - ch = CCChIndex(mip, cpe, tag); - - if(!cpe) - shared[nch++] = 0; - else - { - int16 cc_l = (int16) BsGetBits(bs, LEN_CC_LR); - int16 cc_r = (int16) BsGetBits(bs, LEN_CC_LR); - j = (int16) ((cc_l << 1) | cc_r); - - switch(j) - { - /*-- Shared gain list. --*/ - case 0: - shared[nch] = 1; - shared[nch + 1] = 1; - nch += 2; - break; - - /*-- Left channel gain list. --*/ - case 1: - shared[nch] = 0; - nch += 1; - break; - - /*-- Right channel gain list. --*/ - case 2: - shared[nch] = 0; - nch += 1; - break; - - /*-- Two gain lists. --*/ - case 3: - shared[nch] = 0; - shared[nch + 1] = 0; - nch += 2; - break; - - default: - shared[nch] = 0; - shared[nch + 1] = 0; - break; - } - } - } - - int16 cc_dom = (int16) BsGetBits(bs, LEN_CC_DOM); - int16 cc_gain_ele_sign = (int16) BsGetBits(bs, LEN_CC_SGN); - int16 scl_idx = (int16) BsGetBits(bs, LEN_CCH_GES); - - /*-- Global gain. --*/ - global_gain = (int16) BsGetBits(bs, LEN_SCL_PCM); - - /*-- Side information. --*/ - if(!GetICSInfo(bs, ccWin, tool->ltp, NULL)) - return (-1); - - cip.info = mip->sfbInfo->winmap[ccWin->wnd]; - - /*-- Channel parameters. --*/ - if (cip.sf_huf == 0) return (-1); - if(!GetICS(bs, &cip, ccWin->group, ccWin->max_sfb, ccWin->cb_map, - tool->quant, global_gain, ccWin->sfac)) - return (-1); - - /*-- Coupling for first target channel(s) is already at correct scale. --*/ - ch = shared[0] ? (int16) 2 : (int16) 1; - - /*-- Bitstreams for target channel scale factors. --*/ - for( ; ch < nch; ch++) - { - /*-- If needed, get common gain elment present. --*/ - int16 cgep = (mip->cc_ind[cidx]) ? (int16) 1 : (int16) BsGetBits(bs, LEN_CCH_CGP); - - if(cgep) - int16 fac = (int16) (GetHcb(aac->sf_huf, bs) - MIDFAC); - - /*-- Must be dependently switched CCE. --*/ - else - if(!huf_sfac(bs, &cip, ccWin->group, ccWin->cb_map, 0, ccWin->sfac, ccWin->max_sfb)) - return (-1); - } - - return (TRUE); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/dec_huftables.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/dec_huftables.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - dec_huftables.cpp - Huffman tables for AAC decoder. - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- Project Headers. --*/ -#include "dec_huf.h" -#include "defines.h" -#include "dec_const.h" - -/************************************************************************** - Internal Objects - *************************************************************************/ - -/* - Purpose: Number of Huffman items within each codebook. - Explanation: - */ - - -/* - * Deletes resources allocated to the Huffman codebooks. - */ -void -CloseHuffmanDecTables(Huffman_DecInfo **huf) -{ - if(huf) - { - int16 i; - - for(i = 0; i < MAX_AAC_QHUFTABLES; i++) - { - if(huf[i] != 0) - delete huf[i]; - huf[i] = NULL; - } - - delete[] huf; - huf = NULL; - } -} - -/************************************************************************** - Title: LoadHuffmanDecTablesL - - Purpose: Loads Huffman spectral codebooks for AAC decoder. - - Usage: y = LoadHuffmanDecTablesL() - - Output: y - spectral codebooks - - Author(s): Juha Ojanpera - *************************************************************************/ - -Huffman_DecInfo ** -LoadHuffmanDecTablesL(void) -{ - - /* - Purpose: Array holding the AAC Huffman decoding codebooks. - Explanation: - */ -const Huffman_DecCode *dec_huffman_tables[] = { - dec_hftable1, dec_hftable2, dec_hftable3, dec_hftable4, dec_hftable5, - dec_hftable6, dec_hftable7, dec_hftable8, dec_hftable9, dec_hftable10, - dec_hftable11 -}; - - - int16 i; - Huffman_DecInfo **huf; - const Huffman_DecCode **hf_code; - - huf = (Huffman_DecInfo **) new (ELeave) Huffman_DecInfo*[MAX_AAC_QHUFTABLES]; - CleanupStack::PushL(huf); - - ZERO_MEMORY(huf, MAX_AAC_QHUFTABLES * sizeof(Huffman_DecInfo *)); - - hf_code = dec_huffman_tables; - for(i = 0; i < MAX_AAC_QHUFTABLES; i++) - { - huf[i] = (Huffman_DecInfo *) new (ELeave) Huffman_DecInfo[1]; - CleanupStack::PushL(huf[i]); - - ZERO_MEMORY(huf[i], sizeof(Huffman_DecInfo)); - - huf[i]->huf = hf_code[i]; - - huf[i]->cb_len = cb_len[i]; - } - - CleanupStack::Pop(MAX_AAC_QHUFTABLES + 1); - - return (huf); -} - -/* - * Deletes resources allocated to the Huffman scalefactor codebook. - */ -void -CloseSfHuffmanTable(Huffman_DecSfInfo *sfHuf) -{ - if(sfHuf) - { - delete sfHuf; - sfHuf = NULL; - } -} - -/************************************************************************** - Title: LoadSfHuffmanTableL - - Purpose: Loads Huffman scalefactor codebook for AAC decoder. - - Usage: y = LoadSfHuffmanTableL() - - Output: y - scalefactor codebook - - Author(s): Juha Ojanpera - *************************************************************************/ - -Huffman_DecSfInfo * -LoadSfHuffmanTableL(void) -{ - Huffman_DecSfInfo *huf; - - huf = (Huffman_DecSfInfo *) new (ELeave) Huffman_DecSfInfo[1]; - - ZERO_MEMORY(huf, sizeof(Huffman_DecSfInfo)); - - huf->cb_len = cb_len[11]; - - huf->sf_param = dec_hftable12; - - return (huf); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/huffdec1.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/huffdec1.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,454 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - huffdec1.cpp - Bit parsing routines for decoding LFE, SCE and CPE audio elements. - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- Project Headers. --*/ -#include "tool.h" -#include "tool2.h" - -#define SCE_START_BITS (LEN_TAG + LEN_SCL_PCM) -#define CPE_START_BITS (LEN_TAG + LEN_COM_WIN) - -/************************************************************************** - Title: getmask - - Purpose: Reads MS mask and MS flag bits from the bitstream. - - Usage: y = getmask(bs, info, group, max_sfb, mask) - - Input: bs - bitstream parameters - info - block (long/short) parameters - group - grouping info for short blocks - max_sfb - # of sfb's present in the channel pair - - Output: y - value of MS mask in the bitstream - mask - flag bit for each sfb (only if y == 1) - - Author(s): Juha Ojanpera - *************************************************************************/ - -INLINE int16 -getmask(TBitStream *bs, CInfo *info, uint8 *group, uint8 max_sfb, uint8 *mask) -{ - int16 b, i, mp; - - mp = (int16) BsGetBits(bs, LEN_MASK_PRES); - - /*--Get mask. --*/ - if(mp == 1) - { - for(b = 0; b < info->nsbk; b = *group++) - { - int16 sfb; - uint32 tmp, flag; - -#if 1 - /* - * Speed up the reading of the flags. - */ - sfb = max_sfb; - if(sfb > 32) sfb = 32; - flag = 1 << (sfb - 1); - tmp = BsGetBits(bs, sfb); - - for(i = 0; i < sfb; i++, mask++, flag >>= 1) - *mask = (tmp & flag) ? (uint8) 1 : (uint8) 0; - - if(sfb == 32) - { - sfb = int16(max_sfb - 32); - flag = 1 << (sfb - 1); - tmp = BsGetBits(bs, sfb); - - for( ; i < max_sfb; i++, mask++, flag >>= 1) - *mask = (tmp & flag) ? (uint8) 1 : (uint8) 0; - } - -#else - for(i = 0; i < max_sfb; i++, mask++) - *mask = (uint8) BsGetBits(bs, LEN_MASK); - mask += info->sfb_per_sbk[0] - i; -#endif - } - } - else if(mp == 2) - { - for(b = 0; b < info->nsbk; b = *group++) - { - SET_MEMORY(mask, max_sfb, 1); - mask += info->sfb_per_sbk[0]; - } - } - else - { - for(b = 0; b < info->nsbk; b = *group++) - { - ZERO_MEMORY(mask, max_sfb); - mask += info->sfb_per_sbk[0]; - } - } - - return (mp); -} - -/************************************************************************** - Object Definitions - *************************************************************************/ - -/************************************************************************** - Title: GetSCE - - Purpose: Decodes LFE/SCE audio element from the bitstream. - - Usage: y = GetSCE(aac, bs, mip, gains, gainPos, bufBitOffset) - - Input: bs - bitstream parameters - bufBitOffset - # of bits read read so far - - Output: y - 0 on success, -1 otherwise - mip - ch_info - channel mapping parameters - aac - winInfo - block/window parameters for each channel - toolInfo - quant - quantized spectral coefficients - gains - 'global_gain' bitstream element - gainPos - location of 'global_gain' within the bitstream - - Author(s): Juha Ojanpera - *************************************************************************/ - -int16 -GetSCE(CAACAudDec *aac, TBitStream *bs, CMC_Info *mip, uint8 *gains, - uint32 *gainPos, uint32 bufBitOffset) -{ - int16 ch, global_gain; - CWindowInfo **winInfo; - CToolInfo **toolInfo; - CWindowInfo *win; - CToolInfo *tool; - TCh_Info *cip; - uint32 tmp; - - toolInfo = aac->tool; - winInfo = aac->winInfo; - - tmp = BsGetBits(bs, SCE_START_BITS); - - ch = ChIndex(1, (int16) (tmp >> LEN_SCL_PCM), 0, mip); - cip = &mip->ch_info[ch]; - tool = toolInfo[ch]; - win = winInfo[ch]; - - /*-- Global gain. --*/ - global_gain = (int16) (tmp & 0xFF); - - /*-- Save global gain element and its position. --*/ - if(gainPos) - { - gains[0] = (uint8) global_gain; - gainPos[0] = BsGetBitsRead(bs) - bufBitOffset - LEN_SCL_PCM; - } - - if(!GetICSInfo(bs, win, tool->ltp, NULL)) return (-1); - - cip->info = mip->sfbInfo->winmap[win->wnd]; - - win->hasmask = 0; - tool = toolInfo[ch]; - - if(!GetICS(bs, cip, win->group, win->max_sfb, win->cb_map, - tool->quant, global_gain, win->sfac)) - return (-1); - - return (0); -} - -/************************************************************************** - Title: GetCPE - - Purpose: Decodes CPE audio element from the bitstream. - - Usage: y = GetCPE(aac, bs, mip, gains, gainPos, bufBitOffset - - Input: bs - bitstream parameters - bufBitOffset - # of bits read read so far - - Output: y - 0 on success, -1 otherwise - mip - ch_info - channel mapping parameters - aac - winInfo - block/window parameters for each channel - toolInfo - quant - quantized spectral coefficients - gains - 'global_gain' bitstream element - gainPos - location of 'global_gain' within the bitstream - - Author(s): Juha Ojanpera - *************************************************************************/ - -int16 -GetCPE(CAACAudDec *aac, TBitStream *bs, CMC_Info *mip, uint8 *gains, - uint32 *gainPos, uint32 bufBitOffset) -{ - int16 i, common_window, ch; - CWindowInfo **winInfo; - CToolInfo **toolInfo; - int16 global_gain; - CWindowInfo *win; - CToolInfo **tool; - TCh_Info *cip; - - toolInfo = aac->tool; - winInfo = aac->winInfo; - - uint16 tmp = (uint16) BsGetBits(bs, CPE_START_BITS); - - common_window = (int16) (tmp & 0x1); - - ch = ChIndex(2, (int16) (tmp >> 1), common_window, mip); - - if(common_window) - { - win = winInfo[ch]; - - if(!GetICSInfo(bs, win, toolInfo[ch]->ltp, toolInfo[ch + 1]->ltp)) - return (-1); - - win->hasmask = (uint8) getmask(bs, mip->sfbInfo->winmap[win->wnd], win->group, win->max_sfb, win->mask); - } - else - winInfo[ch]->hasmask = winInfo[ch + 1]->hasmask = 0; - - tool = toolInfo + ch; - cip = &mip->ch_info[ch]; - for(i = ch; i < ch + 2; i++, cip++, tool++) - { - CWindowInfo *wi = winInfo[i]; - - win = winInfo[cip->widx]; - - /*-- Global gain. --*/ - global_gain = (int16) BsGetBits(bs, LEN_SCL_PCM); - - /*-- Save global gain element and its position. --*/ - if(gainPos) - { - gains[i - ch] = (uint8) global_gain; - gainPos[i - ch] = BsGetBitsRead(bs) - bufBitOffset - LEN_SCL_PCM; - bufBitOffset = BsGetBitsRead(bs); - } - - if(!common_window) - if(!GetICSInfo(bs, win, (*tool)->ltp, NULL)) - return (-1); - - cip->info = mip->sfbInfo->winmap[win->wnd]; - - if(!GetICS(bs, cip, win->group, win->max_sfb, wi->cb_map, - (*tool)->quant, global_gain, wi->sfac)) - return (-1); - } - - return (0); -} - -/************************************************************************** - Title : LTP_Decode - - Purpose : Decodes the bitstream elements for LTP tool. - - Usage : LTP_Decode(bs, ltp_info, max_sfb) - - Input : bs - input bitstream - max_sfb - # scalefactor bands to be used for current frame - - Output : ltp_info - LTP parameters for this channel - - Author(s) : Juha Ojanpera - *************************************************************************/ - -INLINE void -LTP_Decode(TBitStream *bs, CLTP_Info *ltp_info, int16 max_sfb) -{ - /* - Purpose: 1 bits is used to indicate the presence of LTP. */ -#define LEN_LTP_DATA_PRESENT 1 - -/* - Purpose: # of bits used for the pitch lag. */ -#define LEN_LTP_LAG 11 - -/* - Purpose: # of bits used for the gain value. */ -#define LEN_LTP_COEF 3 - - ltp_info->ltp_present = (uint8) BsGetBits(bs, LEN_LTP_DATA_PRESENT); - if(ltp_info->ltp_present) - { - uint32 bits = BsGetBits(bs, LEN_LTP_LAG + LEN_LTP_COEF); - - /*-- LTP lag. --*/ - ltp_info->delay[0] = (int16) (bits >> LEN_LTP_COEF); - - /*-- LTP gain. --*/ - ltp_info->cbIdx = (uint8) (bits & 0x7); - - /*-- Sfb flags. --*/ - ltp_info->max_sfb = max_sfb; - if(max_sfb < 33) - ltp_info->sfbflags[0] = BsGetBits(bs, max_sfb); - else - { - ltp_info->sfbflags[0] = BsGetBits(bs, 32); - ltp_info->sfbflags[1] = BsGetBits(bs, (int16) (max_sfb - 32)); - } - } -} - -/************************************************************************** - Title: GetICSInfo - - Purpose: Reads side information for individual channel element. - Individual channel elements within channel pair element may - share this information. - - Usage: y = GetICSInfo(bs, winInfo, ltp_left, ltp_right) - - Input: bs - bitstream parameters - - Output: y - # of sfb's present in this channel - winInfo : - wnd - window type for this channel - wshape - window shape for this channel - group - grouping of short blocks - lpflag - BWAP prediction flags for each sfb - prstflag - reset flags for BWAP - ltp_left - LTP parameters for left channel of the audio element - ltp_right - LTP parameters for right channel of the audio element - - Author(s): Juha Ojanpera - *************************************************************************/ - -int16 -GetICSInfo(TBitStream *bs, CWindowInfo *winInfo, CLTP_Info *ltp_left, CLTP_Info *ltp_right) -{ -#define INFO_BITS (LEN_ICS_RESERV + LEN_WIN_SEQ + LEN_WIN_SH + LEN_MAX_SFBL + LEN_PRED_PRES) - int16 i, j; - uint32 tmp; - - tmp = BsGetBits(bs, INFO_BITS); - winInfo->wnd = (uint8) ((tmp >> 8) & 0x3); - winInfo->wshape[0].this_bk = (uint8) ((tmp >> 7) & 0x1); - - /*-- Max scalefactor, scalefactor grouping and prediction flags. --*/ - winInfo->prstflag[0] = 0; - if(winInfo->wnd == 2) - { - tmp <<= 4; - tmp |= BsGetBits(bs, 4); - winInfo->max_sfb = (uint8) ((tmp >> 7) & 0xF); - if(winInfo->max_sfb > MAXLONGSFBBANDS) return (FALSE); - - /*-- Get grouping info for short blocks. --*/ - j = 0; - if(!(tmp & 64)) winInfo->group[j++] = 1; - if(!(tmp & 32)) winInfo->group[j++] = 2; - if(!(tmp & 16)) winInfo->group[j++] = 3; - if(!(tmp & 8)) winInfo->group[j++] = 4; - if(!(tmp & 4)) winInfo->group[j++] = 5; - if(!(tmp & 2)) winInfo->group[j++] = 6; - if(!(tmp & 1)) winInfo->group[j++] = 7; - winInfo->group[j] = NSHORT; - - /*-- Prediction (BWAP) is disabled. --*/ - winInfo->lpflag[0] = 0; - } - else - { - winInfo->group[0] = 1; - winInfo->max_sfb = (uint8) ((tmp >> 1) & 0x3F); - if(winInfo->max_sfb > MAXLONGSFBBANDS) return (FALSE); - - if(winInfo->predType == BWAP_PRED) - { - /*-- Read BWAP predictor parameters. --*/ - winInfo->lpflag[0] = (uint8) (tmp & 0x1); - if(winInfo->lpflag[0]) - { - /*-- Predictor reset pattern. --*/ - winInfo->prstflag[0] = (uint8) BsGetBits(bs, LEN_PRED_RST); - if(winInfo->prstflag[0]) - winInfo->prstflag[1] = (uint8) BsGetBits(bs, LEN_PRED_RSTGRP); - - /*-- Sfb flags for each predictor band. --*/ - j = (winInfo->max_sfb < winInfo->predBands) ? winInfo->max_sfb : winInfo->predBands; - - for(i = 1; i < j + 1; i++) - winInfo->lpflag[i] = (uint8) BsGetBits(bs, LEN_PRED_ENAB); - - for(; i < winInfo->predBands + 1; i++) - winInfo->lpflag[i] = 0; - } - } - - else if(winInfo->predType == LTP_PRED) - { - /*-- Is LTP used in this channel ? --*/ - ltp_left->ltp_present = (uint8) (tmp & 1); - if(ltp_left->ltp_present) - { - int16 nbands = MIN(winInfo->max_sfb, winInfo->predBands); - LTP_Decode(bs, ltp_left, nbands); - if(ltp_right) - LTP_Decode(bs, ltp_right, nbands); - } - else if(ltp_right) ltp_right->ltp_present = 0; - } - - /*-- Bitstream syntax error. --*/ - else if(tmp & 0x1) return (FALSE); - } - - return (TRUE); -} - -/* - * Retrieves 'global_gain' bitstream elements from single channel element. - */ -int16 -GetSCEGain(CAACAudDec *aac, TBitStream *bs, uint8 *gains, uint32 *gainPos, uint32 bufBitOffset) -{ - return GetSCE(aac, bs, aac->mc_info, gains, gainPos, bufBitOffset); -} - -/* - * Retrieves 'global_gain' bitstream elements from channel pair element. - */ -int16 -GetCPEGain(CAACAudDec *aac, TBitStream *bs, uint8 *gains, uint32 *gainPos, uint32 bufBitOffset) -{ - return GetCPE(aac, bs, aac->mc_info, gains, gainPos, bufBitOffset); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/huffdec2.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/huffdec2.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,320 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - huffdec2.cpp - Bit parsing routines for decoding individual channel elements. - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- Project Headers. --*/ -#include "tool2.h" - -/************************************************************************** - Title: calc_gsfb_table - - Purpose: Calculates reordering parameters for short blocks. - - Usage: calc_gsfb_table(info, group) - - Input: info - block (long/short) parameters - group - grouping info for short blocks - - Author(s): Juha Ojanpera - *************************************************************************/ - -INLINE void -calc_gsfb_table(CInfo *info, uint8 *group) -{ - int16 group_offset, group_idx, offset; - int16 sfb, len, *group_offset_p; - - /*-- First calc the group length. --*/ - group_offset = 0; - group_idx = 0; - do - { - info->group_len[group_idx] = (int16) (group[group_idx] - group_offset); - group_offset = group[group_idx]; - group_idx++; - } - while(group_offset < NSHORT); - - info->num_groups = group_idx; - group_offset_p = info->bk_sfb_top; - offset = 0; - for(group_idx = 0; group_idx < info->num_groups; group_idx++) - { - len = info->group_len[group_idx]; - for(sfb = 0; sfb < info->sfb_per_sbk[group_idx]; sfb++) - { - offset += info->sfb_width_128[sfb] * len; - *group_offset_p++ = offset; - } - } -} - -/************************************************************************** - Title: get_pulse_nc - - Purpose: Reads pulse data from the bitstream. - - Usage: get_pulse_nc(bs, pulse_info) - - Input: bs - bitstream parameters - - Output: pulse_info - pulse data parameters for this channel - - Author(s): Juha Ojanpera - *************************************************************************/ - -INLINE void -get_pulse_nc(TBitStream *bs, PulseInfo *pulse_info) -{ - int16 i, mask; - - mask = (1 << LEN_PULSE_PAMP) - 1; - pulse_info->number_pulse = (int16) BsGetBits(bs, LEN_PULSE_NPULSE); - pulse_info->pulse_start_sfb = (int16) BsGetBits(bs, LEN_PULSE_ST_SFB); - - for(i = 0; i < pulse_info->number_pulse + 1; i++) - { - uint32 codeword; - - codeword = BsGetBits(bs, LEN_PULSE_POFF + LEN_PULSE_PAMP); - - pulse_info->pulse_offset[i] = (int16) (codeword >> LEN_PULSE_PAMP); - pulse_info->pulse_amp[i] = (int16) (codeword & mask); - } -} - -/************************************************************************** - Title: huf_cb - - Purpose: Reads the Huffman codebook number and boundaries for each section. - - Usage: y = huf_cb(bs, sect, info, tot_sfb, max_sfb, cb_map) - - Input: bs - bitstream parameters - info - block (long/short) parameters - tot_sfb - total # of sfb's present - max_sfb - max # of sfb's per block present - - Output: y - # of sections - sect - sectioning info (cb, cb_length; cb, cb_length; ...) - cb_map - Huffman codebook number for each sfb - - Author(s): Juha Ojanpera - *************************************************************************/ - -INLINE int16 -huf_cb(TBitStream *bs, uint8 *sect, CInfo *info, int16 tot_sfb, uint8 max_sfb, uint8 *cb_map) -{ - int16 nsect, n, base, bits, len, cb, diff, cb_len, bot; - - bits = (info->islong) ? (int16) LONG_SECT_BITS : (int16) SHORT_SECT_BITS; - - nsect = 0; - len = (int16) ((1 << bits) - 1); - diff = info->sfb_per_sbk[0] - max_sfb; - - for(bot = base = 0; base < tot_sfb && nsect < tot_sfb; ) - { - *sect++ = uint8(cb = BsGetBits(bs, LEN_CB)); - - n = BsGetBits(bs, bits); - while(n == len && base < tot_sfb) - { - base += len; - n = BsGetBits(bs, bits); - } - base += n; - *sect++ = uint8(base); - nsect++; - - cb_len = base - bot; SET_MEMORY(cb_map, cb_len, cb); cb_map += cb_len; - - if(base == max_sfb) - { - base += diff; - if(info->islong) break; - - if(diff) - { - *sect++ = 0; *sect++ = uint8(base); - ZERO_MEMORY(cb_map, diff); cb_map += diff; - nsect++; - } - max_sfb += info->sfb_per_sbk[0]; - } - bot = base; - } - - if(base != tot_sfb || nsect > tot_sfb) - nsect = -1; - - return (nsect); -} - -/************************************************************************** - Title: TNS_Decode - - Purpose: Reads TNS bitstream elements. - - Usage: TNS_Decode(bs, info) - - Input: bs - bitstream parameters - info - block (long/short) parameters - - Author(s): Juha Ojanpera - *************************************************************************/ - -INLINE void -TNS_Decode(TBitStream *bs, CInfo *info) -{ - int16 f, s, res, res2, nBlockBits, nOrderBits, nOrderBitsMask; - - nBlockBits = (!info->islong) ? (int16) 4 : (int16) 6; - nOrderBits = (!info->islong) ? (int16) 3 : (int16) 5; - nOrderBitsMask = (int16) ((1 << nOrderBits) - 1); - - for(s = 0; s < info->nsbk; s++) - { - int16 nTnsFilt; - - nTnsFilt = (int16) BsGetBits(bs, (!info->islong) ? (int16) 1 : (int16) 2); - if(!nTnsFilt) - continue; - - res = (int16) (BsGetBits(bs, 1) + 3); - for(f = nTnsFilt; f > 0; f--) - { - int16 t, order; - - t = (int16) BsGetBits(bs, (int16) (nBlockBits + nOrderBits)); - order = (int16) (t & nOrderBitsMask); - - if(order) - { - t = (int16) BsGetBits(bs, 2); - res2 = (int16) (res - (t & 0x1)); - - BsSkipNBits(bs, res2 * order); - } - } - } -} - -/************************************************************************** - Title: GetICS - - Purpose: Decodes individual channel elements. - - Usage: y = GetICS(bs, cip, group, max_sfb, cb_map, coef, gain, factors) - - Input: bs - bitstream parameters - cip : - info - block (long/short) parameters - group - grouping info for short blocks - max_sfb - max # of sfb's present - gain - start value for scalefactor decoding - - Output: y - TRUE on success, FALSE otherwise - cb_map - Huffman codebook number for each sfb - factors - scalefactors for this channel - cip : - is_present - TRUE if IS is used, FALSE otherwise - tns_present - TRUE if TNS is used, FALSE otherwise - - Author(s): Juha Ojanpera -*************************************************************************/ - -int16 -GetICS(TBitStream *bs, TCh_Info *cip, uint8 *group, uint8 max_sfb, uint8 *cb_map, - int16 *quant, int16 gain, int16 *factors) -{ - CInfo *info; - int16 nsect; - PulseInfo pulse_info; - uint8 sect[(MAXBANDS + 1) << 1]; - - info = cip->info; - - /*-- Calculate total number of sfb for this grouping. --*/ - if(max_sfb == 0) - { - nsect = 0; - ZERO_MEMORY(cb_map, MAXBANDS); - ZERO_MEMORY(factors, MAXBANDS * sizeof(int16)); - } - else - { - int16 tot_sfb = info->sfb_per_sbk[0]; - if(!info->islong) - { - int16 i = 0; - while(group[i++] < info->nsbk) - tot_sfb += info->sfb_per_sbk[0]; - - /*-- Calculate band offsets. --*/ - calc_gsfb_table(info, group); - } - - /*-- Section data. --*/ - nsect = huf_cb(bs, sect, info, tot_sfb, max_sfb, cb_map); - if(nsect < 0) return (FALSE); - - /*-- Scalefactor data. --*/ - if(!huf_sfac(bs, cip, group, cb_map, gain, factors, max_sfb)) - return (FALSE); - } - - cip->tns_present = FALSE; - pulse_info.pulse_data_present = FALSE; - - /*-- PULSE noiseless coding. --*/ - pulse_info.pulse_data_present = (BOOL) BsGetBits(bs, 1); - if(pulse_info.pulse_data_present) - { - if(info->islong) - get_pulse_nc(bs, &pulse_info); - else - return (FALSE); - } - - /*-- TNS data. --*/ - if(BsGetBits(bs, 1)) - { - cip->tns_present = TRUE; - TNS_Decode(bs, info); - } - - /*-- Gain control. --*/ - if(BsGetBits(bs, 1)) - return (FALSE); - - /*-- Quantized spectral data. --*/ - if(!(!nsect && max_sfb)) - cip->num_bins = huf_spec(bs, info, nsect, sect, quant, cip->huf, 1); - else - return (FALSE); - - return (TRUE); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/huffdec3.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/huffdec3.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,491 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - huffdec3.cpp - Huffman decoding and inverse scaling routines for AAC decoder. - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- Projetc Headers. --*/ -#include "tool2.h" -#include "dec_huf.h" - -/************************************************************************** - Title: DecodeSpectralCodeword - - Purpose: Decodes one spectral Huffman codeword from the bitstream. - - Usage: y = DecodeSpectralCodeword(huf_info, bs) - - Input: huf_info - Huffman codebook parameters - bs - bitstream parameters - - Output: y - decoded Huffman index - - Author(s): Juha Ojanpera - *************************************************************************/ - -INLINE uint32 -DecodeSpectralCodeword(Huffman_DecInfo *huf_info, TBitStream *bs) -{ - int16 len; - int32 codeword, items; - const Huffman_DecCode *huf_code; - - items = 1; - huf_code = huf_info->huf; - - /*-- The first 5 LSB bits contain the length of codeword. --*/ - codeword = (int32) BsGetBits(bs, (int16)(huf_code->huf_param & 31)); - - while(items < huf_info->cb_len && codeword != huf_code->codeword) - { - items++; - huf_code++; - - len = (int16) (huf_code->huf_param & 31); - if(len) - { - codeword <<= len; - codeword |= BsGetBits(bs, len); - } - } - - /*-- Remove the length part from the decoded symbol. --*/ - return (huf_code->huf_param >> 5); -} - -const uint32 hCbBitMask[20] = -{0x0, 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, -0x1FFFL, 0x3FFFL, 0x7FFFL, 0xFFFFL, 0x1FFFFL, 0x3FFFFL, 0x7FFFFL}; - -/************************************************************************** - Title: DecodeSfCodeword - - Purpose: Decodes one scalefactor Huffman codeword from the bitstream. - - Usage: y = DecodeCodeword(huf_info, bs) - - Input: huf_info - Huffman codebook parameters - bs - bitstream parameters - - Output: y - decoded Huffman index - - Explanation: The Huffman parameters are packed as follows : - - bits 0 - 4 : Length of codeword - 5 - 23 : Huffman codeword - 24 - 31 : Huffman symbol - - Author(s): Juha Ojanpera - *************************************************************************/ - -INLINE uint32 -DecodeSfCodeword(Huffman_DecSfInfo *huf_info, TBitStream *bs) -{ -#define SFCW_MASK ((1 << 19) - 1) -#define EXTRACT_SFCW(x) ((x >> 5) & SFCW_MASK) - int16 bitsLeft; - uint32 lookaheadBits; - int32 codeword, len, items; - const uint32 *sf_param = huf_info->sf_param; - - items = 1; - - /*-- Maximum codeword length is 19 bits! --*/ - lookaheadBits = BsLookAhead(bs, 19); - bitsLeft = (int16) (19 - (*sf_param & 31)); - codeword = lookaheadBits >> bitsLeft; - - while(items < huf_info->cb_len && codeword != (int32) EXTRACT_SFCW(*sf_param)) - { - items++; - sf_param++; - - len = (int16) (*sf_param & 31); - if(len) - { - bitsLeft -= len; - codeword <<= len; - codeword |= (lookaheadBits >> bitsLeft) & hCbBitMask[len]; - } - } - - BsSkipNBits(bs, 19 - bitsLeft); - - return (*sf_param >> 24); -} - -uint32 -GetHcb(Huffman_DecSfInfo *huf_info, TBitStream *bs) -{ - return (DecodeSfCodeword(huf_info, bs)); -} - -/************************************************************************** - Title: huf_sfac - - Purpose: Reads scalefactors from the bitstream. - - Usage: y = huf_sfac(bs, cip, group, cb_map, global_gain, factors, max_sfb) - - Input: bs - bitstream parameters - cip : - info - block (long/short) parameters - group - grouping info - cb_map - codebook for each sfb - global_gain - start value for the difference decoding of scalefactors - max_sfb - max # of sfb's present in this channel - - Output: y - TRUE on success, FALSE otherwise - cip : - is_present - TRUE if IS stereo is used, FALSE otherwise - - Author(s): Juha Ojanpera - *************************************************************************/ - -int16 -huf_sfac(TBitStream *bs, TCh_Info *cip, uint8 *group, uint8 *cb_map, - int16 global_gain, int16 *factors, uint8 max_sfb) -{ - Huffman_DecSfInfo *sf_huf; - int16 i, b, bb, n, is_pos; - int16 noise_pcm_flag, noise_nrg; - - sf_huf = cip->sf_huf; - - noise_pcm_flag = 1; - - /* - * Scale factors are dpcm relative to global gain, - * intensity positions are dpcm relative to zero - */ - is_pos = 0; - noise_nrg = (int16) (global_gain - NOISE_OFFSET); - cip->is_present = cip->pns_present = FALSE; - - /*-- Get scale factors. --*/ - n = cip->info->sfb_per_sbk[0]; - for(b = 0, bb = 0; b < cip->info->nsbk; ) - { - b = *group++; - for(i = 0; i < max_sfb; i++) - { - switch(cb_map[i]) - { - /*-- Zero book. --*/ - case ZERO_HCB: - factors[i] = 0; - break; - - /*-- Invalid books. --*/ - case BOOKSCL: - return (FALSE); - - /*-- Intensity books. --*/ - case INTENSITY_HCB: - case INTENSITY_HCB2: - cip->is_present = TRUE; - is_pos = (int16) (is_pos + DecodeSfCodeword(sf_huf, bs) - MIDFAC); - factors[i] = is_pos; - break; - - /*-- Noise books. --*/ - case NOISE_HCB: - cip->pns_present = TRUE; - if(noise_pcm_flag) - { - noise_pcm_flag = 0; - noise_nrg = (int16) (noise_nrg + BsGetBits(bs, NOISE_PCM_BITS) - NOISE_PCM_OFFSET); - } - else - noise_nrg = (int16) (noise_nrg + DecodeSfCodeword(sf_huf, bs) - MIDFAC); - - factors[i] = noise_nrg; - break; - - /*-- Spectral books. --*/ - default: - global_gain = (int16) (global_gain + DecodeSfCodeword(sf_huf, bs) - MIDFAC); - factors[i] = (int16) (global_gain & TEXP_MASK); - break; - } - } - - /*-- Expand short block grouping. --*/ - if(!cip->info->islong) - for(bb++; bb < b; bb++) - { - COPY_MEMORY(factors + n, factors, n * sizeof(int16)); - factors += n; - } - cb_map += n; factors += n; - } - - return (TRUE); -} - -/************************************************************************** - Title: unpack_index... - - Purpose: Translates Huffman index into n-tuple spectral values. - - Usage: unpack_index(index, quant) - - Input: index - decoded Huffman index - - Output: quant - quantized spectral values - - Explanation: The index contains already the translated n-tuple spectral - values due to computational reasons. The unpacking routines - will only extract the codebook dependent bit fields within - 'index' to obtain the quantized values. - - Author(s): Juha Ojanpera - *************************************************************************/ - -/* - * 2-tuple, quantized values are unsigned. - */ -INLINE void -unpack_index2noOff(uint32 index, int16 *quant) -{ - quant[0] = (index >> 5) & 31; quant[1] = index & 31; -} - -/* - * 2-tuple, quantized values are signed. - */ -INLINE void -unpack_index2Off(uint32 index, int16 *quant) -{ - quant[0] = (index >> 4) & 7; if(index & 128) quant[0] = -quant[0]; - quant[1] = index & 7; if(index & 8) quant[1] = -quant[1]; -} - -/* - * 4-tuple, quantized values are unsigned. - */ -INLINE void -unpack_index4noOff(uint32 index, int16 *quant) -{ - quant[0] = (index >> 6) & 3; quant[1] = (index >> 4) & 3; - quant[2] = (index >> 2) & 3; quant[3] = index & 3; -} - -/* - * 4-tuple, quantized values are signed. - */ -INLINE void -unpack_index4Off(uint32 index, int16 *quant) -{ - quant[0] = (index >> 6) & 1; if(index & 128) quant[0] = -quant[0]; - quant[1] = (index >> 4) & 1; if(index & 32) quant[1] = -quant[1]; - quant[2] = (index >> 2) & 1; if(index & 8) quant[2] = -quant[2]; - quant[3] = index & 1; if(index & 2) quant[3] = -quant[3]; -} - -/* - * Reads, at maximum, 2 sign bits from the bitstream. - */ -INLINE void -get_sign_bits2(int16 *q, TBitStream *bs) -{ - /*-- 1 signals negative, as in 2's complement. --*/ - if(q[0]) { if(BsGetBits(bs, 1)) q[0] = -q[0]; } - if(q[1]) { if(BsGetBits(bs, 1)) q[1] = -q[1]; } -} - -/* - * Reads, at maximum, 4 sign bits from the bitstream. - */ -INLINE void -get_sign_bits4(int16 *q, TBitStream *bs) -{ - /*-- 1 signals negative, as in 2's complement. --*/ - if(q[0]) { if(BsGetBits(bs, 1)) q[0] = -q[0]; } - if(q[1]) { if(BsGetBits(bs, 1)) q[1] = -q[1]; } - if(q[2]) { if(BsGetBits(bs, 1)) q[2] = -q[2]; } - if(q[3]) { if(BsGetBits(bs, 1)) q[3] = -q[3]; } -} - -/************************************************************************** - Title: getescape - - Purpose: Decodes escape sequences for codebook 11. - - Usage: y = getescape(bs, q) - - Input: bs - bitstream parameters - q - decoded quantized value (0-16) - - Output: y - actual quantized value - - Author(s): Juha Ojanpera - *************************************************************************/ - -INLINE int16 -getescape(TBitStream *bs, int16 q) -{ - int16 i; - - i = q; - - /*-- Value 16 is used to indicate that the actual value is escape coded. --*/ - if(q == 16 || q == -16) - { - /* - * The length of escape sequence, according to the AAC standard, - * is less than 24 bits. - */ - for(i = 4; i < 24; i++) - if(BsGetBits(bs, 1) == 0) - break; - - i = (int16) (BsGetBits(bs, i) + (1 << i)); - if(q < 0) - i = -i; - } - - return (i); -} - -/************************************************************************** - Title: huf_spec - - Purpose: Huffman decodes and inverse scales quantized spectral values. - - Usage: y = huf_spec(bs, info, nsect, sect, quant, huf, parseOnly) - - Input: bs - bitstream parameters - info - block (long/short) parameters - nsect - # of sections present in this channel - sect - sectioning (codebook and length of section) info - huf - Spectral Huffman tables - parseOnly - 1 if bitstream need to be only parsed, 0 otherwise - - Output: y - # of spectral bins decoded - quant - quantized spectral coefficients - - Author(s): Juha Ojanpera - *************************************************************************/ - -int16 -huf_spec(TBitStream *bs, CInfo *info, int16 nsect, uint8 *sect, int16 *quant, - Huffman_DecInfo **huf, uint8 parseOnly) -{ - uint32 temp; - int16 i, j, k, stop, *qp; - - qp = quant; - for(k = 0, i = nsect; i; i--, sect += 2) - { - register Huffman_DecInfo *huf_info; - int16 table = sect[0]; - int16 top = sect[1]; - - if(top > 200 || top < 1) goto error_exit; - - stop = info->bk_sfb_top[top - 1]; - - switch(table) - { - /*-- 4-tuple signed quantized coefficients. --*/ - case 1: - case 2: - huf_info = huf[table - 1]; - for (j = k; j < stop; j += 4, qp += 4) - { - temp = DecodeSpectralCodeword(huf_info, bs); - if(!parseOnly) unpack_index4Off(temp, qp); - } - break; - - /*-- 4-tuple unsigned quantized coefficients. --*/ - case 3: - case 4: - huf_info = huf[table - 1]; - for (j = k; j < stop; j += 4, qp += 4) - { - temp = DecodeSpectralCodeword(huf_info, bs); - unpack_index4noOff(temp, qp); - get_sign_bits4(qp, bs); - } - break; - - /*-- 2-tuple unsigned quantized coefficients. --*/ - case 5: - case 6: - huf_info = huf[table - 1]; - for (j = k; j < stop; j += 2, qp += 2) - { - temp = DecodeSpectralCodeword(huf_info, bs); - if(!parseOnly) unpack_index2Off(temp, qp); - } - break; - - /*-- 2-tuple signed quantized coefficients. --*/ - case 7: - case 8: - case 9: - case 10: - huf_info = huf[table - 1]; - for (j = k; j < stop; j += 2, qp += 2) - { - temp = DecodeSpectralCodeword(huf_info, bs); - unpack_index2noOff(temp, qp); - get_sign_bits2(qp, bs); - } - break; - - /*-- 2-tuple signed quantized coefficients (escape codebook). --*/ - case 11: - huf_info = huf[table - 1]; - for (j = k; j < stop; j += 2, qp += 2) - { - temp = DecodeSpectralCodeword(huf_info, bs); - unpack_index2noOff(temp, qp); - get_sign_bits2(qp, bs); - qp[0] = getescape(bs, qp[0]); - qp[1] = getescape(bs, qp[1]); - } - break; - - default: - if(stop > k) - { - if(!parseOnly) ZERO_MEMORY(qp, (stop - k) * sizeof(int16)); - qp = quant + stop; - } - else goto error_exit; - break; - } - k = stop; - } - - if(!parseOnly) if(k < LN2) ZERO_MEMORY(quant + k, (LN2 - k) * sizeof(int16)); - - return (k); - - error_exit: - - return (0); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/nok_bits2.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/nok_bits2.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,677 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - nok_bits2.c - Bitstream subroutines. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2003 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/************************************************************************** - External Objects Needed - *************************************************************************/ - -/*-- Project Headers --*/ -#include "nok_bits.h" - -/************************************************************************** - Internal Objects - *************************************************************************/ - -#ifdef USE_ASSERT -#define BITSASSERT(x) { \ - MY_ASSERT(UpdateBufIdx(bs) == 1); \ -} -#else -#define BITSASSERT(x) { \ - UpdateBufIdx(bs); \ -} -#endif - -//typedef uint32 (*GETBITS_FUNCTION)(BitStream *bs, int16 n); - -const uint32 bitMask[] = -{0x0, 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, - 0x1FFFL, 0x3FFFL, 0x7FFFL, 0xFFFFL, 0x1FFFFL, 0x3FFFFL, 0x7FFFFL, 0xFFFFFL, - 0x1FFFFFL, 0x3FFFFFL, 0x7FFFFFL, 0xFFFFFFL, 0x1FFFFFFL, 0x3FFFFFFL, 0x7FFFFFFL, - 0xFFFFFFFL, 0x1FFFFFFFL, 0x3FFFFFFFL, 0x7FFFFFFFL, 0xFFFFFFFFL}; - - - -/* - * Updates the read index of the bit buffer. - */ -static INLINE int16 -UpdateBufIdx(TBitStream *bs) -{ - bs->buf_index++; - bs->buf_index = MOD_OPCODE(bs->buf_index, bs->buf_mask); - bs->slots_read++; -#if 0 - if(bs->slots_read == bs->buf_len) - return (0); -#endif - - return (1); -} - -/* - * Writes at most 8 bits to the bit buffer. - */ -void -PutBits(TBitStream *bs, uint16 n, uint32 word) -{ - uint8 *buf = (bs->mode == BIT8) ? bs->bit_buffer : bs->dsp_buffer; - /* - * The number of bits left in the current buffer slot is too low. - * Therefore, the input word needs to be splitted into two parts. - * Each part is stored separately. - */ - int16 tmp = bs->bit_counter - n; - if(tmp < 0) - { - /*-- Zero those bits that are to be modified. --*/ - buf[bs->buf_index] &= ~bitMask[bs->bit_counter]; - - /*-- Store the upper (MSB) part to the bitstream buffer. --*/ - tmp = -tmp; - buf[bs->buf_index] |= (word >> tmp); - - /* - * Explicitly update the bitstream buffer index. No need to - * test whether the bit counter is zero since it is known - * to be zero at this point. - */ - BITSASSERT(bs); - bs->bit_counter = bs->slotBits; - - /*-- Store the lower (LSB) part to the bitstream buffer. --*/ - bs->bit_counter = int16(bs->bit_counter - tmp); - buf[bs->buf_index] &= bitMask[bs->bit_counter]; - buf[bs->buf_index] |= ((word & bitMask[tmp]) << bs->bit_counter); - } - else - { - /* - * Obtain the bit mask for the part that is to be modified. For example, - * 'bit_counter' = 5 - * 'n' = 3, - * 'tmp' = 2 - * - * x x x m m m x x (x = ignore, m = bits to be modified) - * - * mask : - * - * 1 1 1 0 0 0 1 1 - * - */ - buf[bs->buf_index] &= (~bitMask[bs->bit_counter]) | bitMask[tmp]; - bs->bit_counter = tmp; - buf[bs->buf_index] |= (word << bs->bit_counter); - } - - /*-- Update the bitstream buffer index. --*/ - if(bs->bit_counter == 0) - { - BITSASSERT(bs); - bs->bit_counter = bs->slotBits; - } -} - -/* - * Reads at most 8 bits from the bit buffer. - */ -uint32 -GetBits(TBitStream *bs, int16 n) -{ - int16 idx; - uint32 tmp; - - idx = bs->bit_counter - n; - if(idx < 0) - { - /* Mask the unwanted bits to zero. */ - tmp = (bs->bit_buffer[bs->buf_index] & bitMask[bs->bit_counter]) << -idx; - - /* Update the bitstream buffer. */ - BITSASSERT(bs); - bs->bit_counter = bs->slotBits + idx; - tmp |= (bs->bit_buffer[bs->buf_index] >> bs->bit_counter) & bitMask[-idx]; - } - else - { - bs->bit_counter = idx; - tmp = (bs->bit_buffer[bs->buf_index] >> bs->bit_counter) & bitMask[n]; - } - - /* Update the bitstream buffer index. */ - if(bs->bit_counter == 0) - { - BITSASSERT(bs); - bs->bit_counter = bs->slotBits; - } - - return (tmp); -} - -/* - * Reads at most 16 bits from the bit buffer. - */ -uint32 -GetBitsDSP(TBitStream *bs, int16 n) -{ - int16 idx; - uint32 tmp; - - idx = bs->bit_counter - n; - if(idx < 0) - { - /* Mask the unwanted bits to zero. */ - tmp = (bs->dsp_buffer[bs->buf_index] & bitMask[bs->bit_counter]) << -idx; - - /* Update the bitstream buffer. */ - BITSASSERT(bs); - bs->bit_counter = bs->slotBits + idx; - tmp |= (bs->dsp_buffer[bs->buf_index] >> bs->bit_counter) & bitMask[-idx]; - } - else - { - bs->bit_counter = idx; - tmp = (bs->dsp_buffer[bs->buf_index] >> bs->bit_counter) & bitMask[n]; - } - - /* Update the bitstream buffer index. */ - if(bs->bit_counter == 0) - { - BITSASSERT(bs); - bs->bit_counter = bs->slotBits; - } - - return (tmp); -} - -//typedef uint32 (*GETBITS_FUNCTION)(BitStream *bs, int16 n); -//static GETBITS_FUNCTION GetFunc[2] = {GetBits, GetBitsDSP}; - -/* - * Returns the size of the buffer. - */ -EXPORT_C uint32 BsGetBufSize(TBitStream *bs) -{ return (bs->buf_len); } - -/* - * Returns the size of the original buffer. Note that it is - * possible that the update procedure of the bit buffer - * (which is up to the implementor to specify), reduces the size - * temporarily for some reasons. - */ -EXPORT_C uint32 BsGetBufOriginalSize(TBitStream *bs) -{ -#ifndef BITSMODULO_BUFFER - return (bs->buf_mask + 1); -#else - return (bs->buf_mask); -#endif -} - -/* - * Returns the number of bits read. - */ -EXPORT_C uint32 BsGetBitsRead(TBitStream *bs) -{ return (bs->bits_read); } - -/* - * Increments the value that describes how many - * bits are read from the bitstream. - */ -EXPORT_C void BsSetBitsRead(TBitStream *bs, uint32 bits_read) -{ bs->bits_read += bits_read; } - -/* - * Clears the value that describes how many - * bits are read from the bitstream. - */ -EXPORT_C void BsClearBitsRead(TBitStream *bs) -{ bs->bits_read = 0; } - -/* - * Returns the number of unread elements in the bit buffer. - */ -EXPORT_C uint32 BsSlotsLeft(TBitStream *bs) -{ return ((bs->buf_len < bs->slots_read) ? 0 : bs->buf_len - bs->slots_read); } - -/* - * Resets the bitstream. - */ -EXPORT_C void BsReset(TBitStream *bs) -{ - bs->buf_index = 0; - bs->buf_writeIndex = 0; - bs->bit_counter = bs->slotBits; - bs->slots_read = 0; - bs->bits_read = 0; -} - -/* - * Updates the bitstream values according to the given input parameter. - */ -EXPORT_C void BsBufferUpdate(TBitStream *bs, int32 bytesRead) -{ - int32 diff = bs->bits_read - (bytesRead << 3); - - bs->buf_len = (bs->buf_len - bs->slots_read) + bytesRead; - bs->slots_read = 0; - - if(diff < 0) - bs->bits_read = -diff; - else - bs->bits_read = diff; -} - -/************************************************************************** - Title : BsInit - - Purpose : Initializes the bit buffer. - - Usage : BsInit(bs, bit_buffer, size) - - Input : bs - bitstream structure - bit_buffer - address of bit buffer - size - size of buffer - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C void -BsInit(TBitStream *bs, uint8 *bit_buffer, uint32 size) -{ - bs->dsp_buffer = NULL; - bs->bit_buffer = bit_buffer; - bs->mode = BIT8; -#ifndef BITSMODULO_BUFFER - bs->buf_mask = size - 1; -#else - bs->buf_mask = size; -#endif - bs->buf_len = size; - bs->slotBits = sizeof(uint8) << 3; - BsReset(bs); -} - -void -BsInit2(TBitStream *bs, DSP_BYTE *dsp_buffer, uint32 size) -{ - bs->dsp_buffer = dsp_buffer; - bs->bit_buffer = NULL; - bs->mode = BIT16; -#ifndef BITSMODULO_BUFFER - bs->buf_mask = size - 1; -#else - bs->buf_mask = size; -#endif - bs->buf_len = size; - bs->slotBits = sizeof(DSP_BYTE) << 3; - BsReset(bs); -} - -/************************************************************************** - Title : BsByteAlign - - Purpose : Byte aligns the bit counter of the buffer. - - Usage : y = BsByteAlign(bs) - - Input : bs - bitstream parameters - - Output : y - # of bits read - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C int16 -BsByteAlign(TBitStream *bs) -{ - int16 bits_to_byte_align; - - bits_to_byte_align = bs->bit_counter & 7; - if(bits_to_byte_align) - BsSkipBits(bs, bits_to_byte_align); - - return (bits_to_byte_align); -} - -/************************************************************************** - Title : BsLookAhead - - Purpose : Looks ahead for the next 'n' bits from the bit buffer and - returns the read 'n' bits. - - Usage : y = BsLookAhead(bs, n) - - Input : bs - bitstream parameters - n - number of bits to be read from the bit buffer - - Output : y - bits read - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C uint32 -BsLookAhead(TBitStream *bs, int16 n) -{ - TBitStream bs_tmp; - uint32 dword; - - /*-- Save the current state. --*/ - COPY_MEMORY(&bs_tmp, bs, sizeof(TBitStream)); - - dword = BsGetBits(bs, n); - - /*-- Restore the original state. --*/ - COPY_MEMORY(bs, &bs_tmp, sizeof(TBitStream)); - - return (dword); -} - -/************************************************************************** - Title : BsPutBits - - Purpose : Writes bits to the bit buffer. - - Usage : BsPutBits(bs, n, word); - - Input : bs - bitstream parameters - n - number of bits to write - word - bits to write - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C void -BsPutBits(TBitStream *bs, int16 n, uint32 word) -{ - int16 rbits; - - BsSetBitsRead(bs, n); - - /*-- Mask the unwanted bits to zero, just for safety. --*/ - word &= bitMask[n]; - - while(n) - { - rbits = (n > (int16)bs->slotBits) ? bs->slotBits : n; - n -= rbits; - PutBits(bs, rbits, ((word >> n) & bitMask[rbits])); - } -} - -/************************************************************************** - Title : BsPutBitsByteAlign - - Purpose : Byte aligns the write buffer. - - Usage : y = BsPutBitsByteAlign(bs) - - Input : bs - bitstream parameters - - Output : y - # of bits written - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C int16 -BsPutBitsByteAlign(TBitStream *bs) -{ - int16 bits_to_byte_align; - - bits_to_byte_align = bs->bit_counter & 7; - if(bits_to_byte_align) - BsPutBits(bs, bits_to_byte_align, 0); - - return (bits_to_byte_align); -} - -/************************************************************************** - Title : BsGetBits - - Purpose : Reads bits from the bit buffer. - - Usage : y = BsGetBits(bs, n); - - Input : bs - bitstream parameters - n - number of bits to be read - - Output : y - bits read - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C uint32 -BsGetBits(TBitStream *bs, int16 n) -{ - int16 rbits = 0; - uint32 value = 0; - - BsSetBitsRead(bs, n); - - while(n) - { - rbits = (n > (int16)bs->slotBits) ? bs->slotBits : n; - value <<= rbits; - - // modified by Ali Ahmaniemi 7.6.04 - - if (bs->mode == BIT8) - { - value |= GetBits(bs, rbits); - } - else - { - value |= GetBitsDSP(bs, rbits); - } - - //value |= GetFunc[bs->mode](bs, rbits); - n -= rbits; - } - - return (value); -} - -/************************************************************************** - Title : BsSkipBits - - Purpose : Advances the bit buffer index. - - Usage : BsSkipBits(bs, n); - - Input : bs - bitstream parameters - n - number of bits to be discarded - - Explanation : The maximum number of bits that can be discarded is 'bs->slotBits'. - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C void -BsSkipBits(TBitStream *bs, int16 n) -{ - int16 idx; - -#ifdef USE_ASSERT - MY_ASSERT(n < ((int16)bs->slotBits + 1)); -#endif - - BsSetBitsRead(bs, n); - - idx = bs->bit_counter - n; - if(idx < 0) - { - BITSASSERT(bs); - bs->bit_counter = bs->slotBits + idx; - } - else - bs->bit_counter = idx; - - if(bs->bit_counter == 0) - { - BITSASSERT(bs); - bs->bit_counter = bs->slotBits; - } -} - -/************************************************************************** - Title : BsSkipNbits - - Purpose : Same as 'BsSkipBits' with the exception that the number - of bits to be discarded can be of any value. - - Usage : BsSkipNbits(bs, n); - - Input : bs - bitstream parameters - n - number of bits to be discarded - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C void -BsSkipNBits(TBitStream *bs, int32 n) -{ - int32 slots, bits_left, scale; - -#ifdef BYTE_16bit - scale = (bs->mode == BIT8) ? 3 : 4; -#else - scale = 3; -#endif - slots = (n >> scale); - BsSetBitsRead(bs, slots << scale); - bs->buf_index += slots; - bs->buf_index = MOD_OPCODE(bs->buf_index, bs->buf_mask); - bs->slots_read += slots; - bits_left = n - (slots << scale); - if(bits_left) - BsSkipBits(bs, (int16) bits_left); -} - -/************************************************************************** - Title : BsCopyBytes - - Purpose : Copies 'bytesToCopy' bytes from the bit buffer (starting from - the current read index) to the specified output buffer. - - Usage : y = BsCopyBytes(bs, outBuf, bytesToCopy) - - Input : bs - bitstream to be copied - bytesToCopy - # of bytes to copy - - Output : y - # of bytes copied - outBuf - copied bytes - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C uint32 -BsCopyBytes(TBitStream *bs, uint8 *outBuf, uint32 bytesToCopy) -{ - uint32 i; - uint8 *buf0 = (bs->mode == BIT8) ? bs->bit_buffer : bs->dsp_buffer; - - for(i = bs->buf_index; i < (bytesToCopy + bs->buf_index); i++, outBuf++) - *outBuf = buf0[MOD_OPCODE(i, bs->buf_mask)]; - - return (i - bs->buf_index); -} - -/************************************************************************** - Title : BsCopyBits - - Purpose : Copies 'bitsToCopy' bits from the source bit buffer (starting from - the current read index) to the specified destination bit buffer. - - Usage : y = BsCopyBits(bsSrc, bsDst, bitsToCopy) - - Input : bsSrc - source bit buffer - bytesToCopy - # of bits to copy - - Output : bsDst - destination bit buffer - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C void -BsCopyBits(TBitStream *bsSrc, TBitStream *bsDst, int32 bitsToCopy) -{ - int32 i, nBytes; - - nBytes = bitsToCopy >> 3; - - for(i = 0; i < nBytes; i++) - BsPutBits(bsDst, 8, BsGetBits(bsSrc, 8)); - - i = bitsToCopy - (i << 3); - if(i > 0) BsPutBits(bsDst, (int16) i, BsGetBits(bsSrc, (uint16) i)); -} - -/************************************************************************** - Title : BsRewindNBits - - Purpose : Rewinds the bit buffer 'nBits' bits. - - Usage : BsRewindNbits(br, nBits) - - Input : br - bitstream parameters - nBits - number of bits to rewind - - Author(s) : Juha Ojanpera - *************************************************************************/ - -EXPORT_C void -BsRewindNBits(TBitStream *bs, uint32 nBits) -{ - int32 tmp; - int16 new_buf_idx, new_bit_idx; - - new_buf_idx = (int16) (nBits / bs->slotBits); - new_bit_idx = (int16) (nBits % bs->slotBits); - - tmp = bs->bit_counter + new_bit_idx; - if(tmp > (int16)bs->slotBits) - { - new_buf_idx++; - bs->bit_counter = tmp - bs->slotBits; - } - else - bs->bit_counter += new_bit_idx; - - bs->buf_index = MOD_OPCODE(bs->buf_index, bs->buf_mask); - tmp = bs->buf_index - new_buf_idx; - if(tmp > 0) - bs->buf_index = tmp; - else - bs->buf_index = MOD_OPCODE(bs->buf_len + tmp, bs->buf_mask); - - bs->bits_read -= nBits; -} - -EXPORT_C void -BsSaveBufState(TBitStream *bsSrc, TBitStream *bsDst) -{ - COPY_MEMORY(bsDst, bsSrc, sizeof(TBitStream)); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/sbr_bitmux.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/sbr_bitmux.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,749 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* - \file - \brief SBR bitstream multiplexer implementation $Revision: 1.1.1.1 $ -*/ - -/************************************************************************** - sbr_bitmux.cpp - Bitstream implementations for SBR encoder. - - Author(s): Juha Ojanpera - Copyright (c) 2004 by Nokia Research Center, Multimedia Technologies. - *************************************************************************/ - -/*-- Project Headers. --*/ -#include "sbr_rom.h" -#include "sbr_bitmux.h" - -#define CODE_BOOK_SCF_LAV10 (60) -#define CODE_BOOK_SCF_LAV11 (31) -#define CODE_BOOK_SCF_LAV_BALANCE11 (12) -#define CODE_BOOK_SCF_LAV_BALANCE10 (24) - -/** - * Writes SBR header data. - */ -int16 -SBR_WriteHeaderData(SbrHeaderData *h_sbr_header, TBitStream *bs, uint8 writeFlag) -{ - int16 bitsWritten; - uint8 headerExtra1, headerExtra2; - - bitsWritten = 1 + 4 + 4 + 3 + 2 + 2; - - if(writeFlag) - { - BsPutBits(bs, 1, h_sbr_header->ampResolution); - BsPutBits(bs, 4, h_sbr_header->startFreq); - BsPutBits(bs, 4, h_sbr_header->stopFreq); - BsPutBits(bs, 3, h_sbr_header->xover_band); - BsPutBits(bs, 2, 0); - } - - headerExtra1 = 0; - if(h_sbr_header->freqScale != SBR_FREQ_SCALE_DEF || - h_sbr_header->alterScale != SBR_ALTER_SCALE_DEF || - h_sbr_header->noise_bands != SBR_NOISE_BANDS_DEF) - headerExtra1 = 1; - - headerExtra2 = 0; - if(h_sbr_header->limiterBands != SBR_LIMITER_BANDS_DEF || - h_sbr_header->limiterGains != SBR_LIMITER_GAINS_DEF || - h_sbr_header->interpolFreq != SBR_INTERPOL_FREQ_DEF || - h_sbr_header->smoothingLength != SBR_SMOOTHING_LENGTH_DEF) - headerExtra2 = 1; - - if(writeFlag) - { - BsPutBits(bs, 1, headerExtra1); - BsPutBits(bs, 1, headerExtra2); - } - - if(headerExtra1) - { - bitsWritten += 5; - - if(writeFlag) - { - BsPutBits(bs, 2, h_sbr_header->freqScale); - BsPutBits(bs, 1, h_sbr_header->alterScale); - BsPutBits(bs, 2, h_sbr_header->noise_bands); - } - } - - if(headerExtra2) - { - bitsWritten += 6; - - if(writeFlag) - { - BsPutBits(bs, 2, h_sbr_header->limiterBands); - BsPutBits(bs, 2, h_sbr_header->limiterGains); - BsPutBits(bs, 1, h_sbr_header->interpolFreq); - BsPutBits(bs, 1, h_sbr_header->smoothingLength); - } - } - - return (bitsWritten); -} - -/** - * Writes additional sinusoidal data for SBR. - */ -int16 -SBR_WriteSinusoidalData(SbrFrameData *hFrameData, TBitStream *bs, int16 nSfb, uint8 writeFlag) -{ - int16 bitsWritten; - - bitsWritten = 1; - if(writeFlag) - { - if(hFrameData->isSinesPresent) - BsPutBits(bs, 1, 1); - else - BsPutBits(bs, 1, 0); - } - - if(hFrameData->isSinesPresent) - { - bitsWritten += nSfb; - - if(writeFlag) - { - int16 wSfb; - - wSfb = (nSfb > 32) ? 32 : nSfb; - - BsPutBits(bs, wSfb, hFrameData->addHarmonics[0]); - if(nSfb > 32) - { - wSfb = nSfb - 32; - BsPutBits(bs, wSfb, hFrameData->addHarmonics[1]); - } - } - } - - - return (bitsWritten); -} - -/** - * Writes envelope direction coding data. - */ -int16 -SBR_WriteDTDFData(SbrFrameData *frameData, TBitStream *bs, uint8 writeFlag) -{ - int16 bitsWritten; - - bitsWritten = frameData->frameInfo.nEnvelopes + frameData->frameInfo.nNoiseEnvelopes; - - if(writeFlag) - { - BsPutBits(bs, frameData->frameInfo.nEnvelopes, frameData->domain_vec); - BsPutBits(bs, frameData->frameInfo.nNoiseEnvelopes, frameData->domain_vec_noise); - } - - return (bitsWritten); -} - -/** - * Writes envelope data for SBR. - */ -int16 -SBR_WriteEnvelopeData(SbrHeaderData *hHeaderData, SbrFrameData *frameData, - TBitStream *bs, uint8 writeFlag) -{ - const uint8 *hCbBits_f, *hCbBits_t; - const int32 *hCb_f = 0, *hCb_t = 0; - const uint16 *hCb_f0 = 0, *hCb_t0 = 0; - uint8 no_band[MAX_ENVELOPES], hCbIndexOffset; - int16 i, j, k, offset, start_bits, bitsWritten, start_bits_balance, ampRes; - - ampRes = hHeaderData->ampResolution; - if(frameData->frameInfo.frameClass == FIXFIX && frameData->frameInfo.nEnvelopes == 1) - ampRes = SBR_AMP_RES_1_5; - - if(ampRes == SBR_AMP_RES_3_0) - { - start_bits = 6; - start_bits_balance = 5; - } - else - { - start_bits = 7; - start_bits_balance = 6; - } - - k = SBR_BIT_ARRAY_SIZE - frameData->frameInfo.nEnvelopes; - for(i = 0; i < frameData->frameInfo.nEnvelopes; i++, k++) - { - uint8 resValue = (frameData->frameInfo.freqRes & bitArray[k]) ? 1 : 0; - - no_band[i] = hHeaderData->hFreqBandData->nSfb[resValue]; - } - - /* - * Indexing of the codebooks needs some effort in order to same ROM memory... - */ - if(frameData->coupling == COUPLING_BAL) - { - if(ampRes == SBR_AMP_RES_1_5) - { - hCb_f = bookSbrEnvBalanceC10F; - hCbBits_f = bookSbrEnvBalanceL10F; - - hCb_t = bookSbrEnvBalanceC10T; - hCbBits_t = bookSbrEnvBalanceL10T; - - hCbIndexOffset = CODE_BOOK_SCF_LAV_BALANCE10; - } - else - { - hCb_f0 = bookSbrEnvBalanceC11F; - hCbBits_f = bookSbrEnvBalanceL11F; - - hCb_t0 = bookSbrEnvBalanceC11T; - hCbBits_t = bookSbrEnvBalanceL11T; - - hCbIndexOffset = CODE_BOOK_SCF_LAV_BALANCE11; - } - } - else - { - if(ampRes == SBR_AMP_RES_1_5) - { - hCb_f = v_Huff_envelopeLevelC10F; - hCbBits_f = v_Huff_envelopeLevelL10F; - - hCb_t = v_Huff_envelopeLevelC10T; - hCbBits_t = v_Huff_envelopeLevelL10T; - - hCbIndexOffset = CODE_BOOK_SCF_LAV10; - } - else - { - hCb_f = v_Huff_envelopeLevelC11F; - hCbBits_f = v_Huff_envelopeLevelL11F; - - hCb_t = v_Huff_envelopeLevelC11T; - hCbBits_t = v_Huff_envelopeLevelL11T; - - hCbIndexOffset = CODE_BOOK_SCF_LAV11; - } - } - - k = SBR_BIT_ARRAY_SIZE - frameData->frameInfo.nEnvelopes; - for(j = 0, offset = 0, bitsWritten = 0; j < frameData->frameInfo.nEnvelopes; j++, k++) - { - int16 index; - uint8 codValue; - - codValue = frameData->domain_vec & bitArray[k]; - - if(!codValue) - { - index = frameData->iEnvelope[offset]; - index = MAX(0, index); - - if(frameData->coupling == COUPLING_BAL) - { - index = MIN(index, (1 << start_bits_balance) - 1); - - bitsWritten += start_bits_balance; - if(writeFlag) BsPutBits(bs, start_bits_balance, index); - } - else - { - index = MIN(index, (1 << start_bits) - 1); - - bitsWritten += start_bits; - if(writeFlag) BsPutBits(bs, start_bits, index); - } - } - - for(i = (1 - ((codValue) ? 1 : 0)); i < no_band[j]; i++) - { - uint32 codeWord; - - index = frameData->iEnvelope[offset + i]; - index = (index < 0) ? MAX(index, -hCbIndexOffset) : MIN(index, hCbIndexOffset); - index += hCbIndexOffset; - - if(!codValue) - { - bitsWritten += hCbBits_f[index]; - if(writeFlag) - { - if(frameData->coupling == COUPLING_BAL && ampRes != SBR_AMP_RES_1_5) - codeWord = hCb_f0[index]; - else - codeWord = hCb_f[index]; - - BsPutBits(bs, hCbBits_f[index], codeWord); - } - } - else - { - bitsWritten += hCbBits_t[index]; - if(writeFlag) - { - if(frameData->coupling == COUPLING_BAL && ampRes != SBR_AMP_RES_1_5) - codeWord = hCb_t0[index]; - else - codeWord = hCb_t[index]; - - BsPutBits(bs, hCbBits_t[index], codeWord); - } - } - } - - offset += no_band[j]; - } - - return (bitsWritten); -} - -/** - * Writes noise data for SBR. - */ -int16 -SBR_WriteNoiseData(SbrHeaderData *hHeaderData, SbrFrameData *frameData, - TBitStream *bs, uint8 writeFlag) -{ - uint8 hCbIndexOffset; - const int32 *hCb_f = 0; - const uint16 *hCb_f0 = 0, *hCb_t = 0; - const uint8 *hCbBits_f, *hCbBits_t; - int16 i, k, noNoiseBands, bitsWritten; - - noNoiseBands = hHeaderData->hFreqBandData->nNfb; - - if(frameData->coupling == COUPLING_BAL) - { - hCb_f0 = bookSbrEnvBalanceC11F; - hCbBits_f = bookSbrEnvBalanceL11F; - - hCb_t = bookSbrNoiseBalanceC11T; - hCbBits_t = bookSbrNoiseBalanceL11T; - - hCbIndexOffset = CODE_BOOK_SCF_LAV_BALANCE11; - } - else - { - hCb_f = v_Huff_envelopeLevelC11F; - hCbBits_f = v_Huff_envelopeLevelL11F; - - hCb_t = v_Huff_NoiseLevelC11T; - hCbBits_t = v_Huff_NoiseLevelL11T; - - hCbIndexOffset = CODE_BOOK_SCF_LAV11; - } - - k = SBR_BIT_ARRAY_SIZE - frameData->frameInfo.nNoiseEnvelopes; - for(i = 0, bitsWritten = 0; i < frameData->frameInfo.nNoiseEnvelopes; i++, k++) - { - int16 j, index; - uint8 codValue; - - codValue = frameData->domain_vec_noise & bitArray[k]; - - if(!codValue) - { - bitsWritten += 5; - if(writeFlag) - BsPutBits(bs, 5, frameData->sbrNoiseFloorLevel[i * noNoiseBands]); - - for(j = 1; j < noNoiseBands; j++) - { - index = frameData->sbrNoiseFloorLevel[i * noNoiseBands + j]; - index = (index < 0) ? MAX(index, -hCbIndexOffset) : MIN(index, hCbIndexOffset); - index += hCbIndexOffset; - - bitsWritten += hCbBits_f[index]; - if(writeFlag) - { - uint32 codeWord = (frameData->coupling == COUPLING_BAL) ? hCb_f0[index] : hCb_f[index]; - BsPutBits(bs, hCbBits_f[index], codeWord); - } - } - } - else - { - for(j = 0; j < noNoiseBands; j++) - { - index = frameData->sbrNoiseFloorLevel[i * noNoiseBands + j]; - index = (index < 0) ? MAX(index, -hCbIndexOffset) : MIN(index, hCbIndexOffset); - index += hCbIndexOffset; - - bitsWritten += hCbBits_t[index]; - if(writeFlag) BsPutBits(bs, hCbBits_t[index], hCb_t[index]); - } - } - } - - return (bitsWritten); -} - -/** - * Writes dummy (=silence) data for parametric stereo part of SBR. - */ -int16 -SBR_WriteParametricStereoData(TBitStream *bs, uint8 writeFlag) -{ - int16 bitsWritten = 0; - - /*-- Write header flag. --*/ - bitsWritten += 1; - if(writeFlag) BsPutBits(bs, 1, 1); - - /*-- Write 'enable_iid' element. --*/ - bitsWritten += 1; - if(writeFlag) BsPutBits(bs, 1, 0); - - /*-- Write 'enable_icc' element. --*/ - bitsWritten += 1; - if(writeFlag) BsPutBits(bs, 1, 0); - - /*-- Write 'enable_ext' element. --*/ - bitsWritten += 1; - if(writeFlag) BsPutBits(bs, 1, 0); - - /*-- Write frame class. --*/ - bitsWritten += 1; - if(writeFlag) BsPutBits(bs, 1, 0); - - /*-- Write envelope index. --*/ - bitsWritten += 2; - if(writeFlag) BsPutBits(bs, 2, 0); - - return (bitsWritten); -} - -/** - * Writes extension data for SBR. - */ -int16 -SBR_WritetExtendedData(TBitStream *bs, SbrExtensionData *extData, uint8 writeFlag) -{ - uint8 writeExt; - int16 bitsWritten = 0; - - writeExt = (extData->writePsData || extData->extensionDataPresent) ? 1 : 0; - - bitsWritten += 1; - if(writeFlag) BsPutBits(bs, 1, writeExt); - - if(writeExt) - { - int16 i, nBitsLeft, cnt, byteCount; - - byteCount = (extData->writePsData) ? 2 : extData->byteCount; - cnt = (byteCount >= 15) ? 15 : byteCount; - - bitsWritten += 4; - if(writeFlag) BsPutBits(bs, 4, cnt); - - if(cnt == 15) - { - int16 diff; - - diff = byteCount - 15; - - bitsWritten += 8; - if(writeFlag) BsPutBits(bs, 8, diff); - } - - nBitsLeft = byteCount << 3; - - while(nBitsLeft > 7) - { - nBitsLeft -= 2; - bitsWritten += 2; - if(writeFlag) BsPutBits(bs, 2, (extData->writePsData) ? 2 : extData->extension_id); - - cnt = nBitsLeft >> 3; - bitsWritten += cnt << 3; - if(writeFlag) - { - if(extData->writePsData) - { - SBR_WriteParametricStereoData(bs, writeFlag); - BsPutBits(bs, 1, 0); /*-- This will byte align the data. --*/ - } - else - for(i = 0; i < cnt; i++) - BsPutBits(bs, 8, extData->extensioData[i]); - } - - nBitsLeft -= cnt << 3; - } - - bitsWritten += nBitsLeft; - if(writeFlag) BsPutBits(bs, nBitsLeft, 0); - } - - return (bitsWritten); -} - -/** - * Writes envelope coding grid for SBR. - */ -int16 -SBR_WriteGridInfo(TBitStream *bs, SbrFrameData *frameData, uint8 writeFlag) -{ - FRAME_INFO *frameInfo; - SbrGridInfo *sbrGridInfo; - int16 pointer_bits, nEnv, bitsWritten, k; - - nEnv = 0; - bitsWritten = 0; - frameInfo = &frameData->frameInfo; - sbrGridInfo = &frameData->sbrGridInfo; - - bitsWritten += 2; - if(writeFlag) BsPutBits(bs, 2, frameInfo->frameClass); - - switch(frameInfo->frameClass) - { - case FIXFIX: - bitsWritten += 2; - if(writeFlag) BsPutBits(bs, 2, sbrGridInfo->bs_num_env); - - bitsWritten += 1; - if(writeFlag) - BsPutBits(bs, 1, frameInfo->freqRes & 0x1); - break; - - case FIXVAR: - case VARFIX: - bitsWritten += 2; - if(writeFlag) BsPutBits(bs, 2, sbrGridInfo->bs_var_board[0]); - - bitsWritten += 2; - if(writeFlag) BsPutBits(bs, 2, sbrGridInfo->bs_num_env); - - bitsWritten += sbrGridInfo->bs_num_env << 1; - if(writeFlag) - for(k = 0; k < sbrGridInfo->bs_num_env; k++) - BsPutBits(bs, 2, sbrGridInfo->bs_rel_board_0[k]); - - pointer_bits = (int16) (FloatFR_logDualis(sbrGridInfo->bs_num_env + 2) + 0.992188f); - - bitsWritten += pointer_bits; - if(writeFlag) BsPutBits(bs, pointer_bits, sbrGridInfo->bs_pointer); - - bitsWritten += sbrGridInfo->bs_num_env + 1; - break; - } - - switch(frameInfo->frameClass) - { - case FIXVAR: - if(writeFlag) - { - uint8 tmp = 0, tmp2 = frameInfo->freqRes; - for(k = sbrGridInfo->bs_num_env; k >= 0; k--) - { - tmp <<= 1; - tmp |= tmp2 & 0x1; - tmp2 >>= 1; - } - BsPutBits(bs, sbrGridInfo->bs_num_env + 1, tmp); - } - break; - - case VARFIX: - if(writeFlag) - BsPutBits(bs, sbrGridInfo->bs_num_env + 1, frameInfo->freqRes); - break; - - case VARVAR: - bitsWritten += 8; - if(writeFlag) - { - BsPutBits(bs, 2, sbrGridInfo->bs_var_board[0]); - BsPutBits(bs, 2, sbrGridInfo->bs_var_board[1]); - BsPutBits(bs, 2, sbrGridInfo->bs_num_rel[0]); - BsPutBits(bs, 2, sbrGridInfo->bs_num_rel[1]); - } - - nEnv = sbrGridInfo->bs_num_rel[0] + sbrGridInfo->bs_num_rel[1] + 1; - - bitsWritten += sbrGridInfo->bs_num_rel[0] << 1; - if(writeFlag) - for(k = 0; k < sbrGridInfo->bs_num_rel[0]; k++) - BsPutBits(bs, 2, sbrGridInfo->bs_rel_board_0[k]); - - bitsWritten += sbrGridInfo->bs_num_rel[1] << 1; - if(writeFlag) - for(k = 0; k < sbrGridInfo->bs_num_rel[1]; k++) - BsPutBits(bs, 2, sbrGridInfo->bs_rel_board_1[k]); - - pointer_bits = (int16) (FloatFR_logDualis(nEnv + 1) + 0.992188f); - - bitsWritten += pointer_bits; - if(writeFlag) BsPutBits(bs, pointer_bits, sbrGridInfo->bs_pointer); - - bitsWritten += nEnv; - if(writeFlag) - BsPutBits(bs, nEnv, frameInfo->freqRes); - break; - } - - return (bitsWritten); -} - -int16 -SBR_WriteSCE(SbrHeaderData *hHeaderData, SbrFrameData *hFrameData, - SbrExtensionData *sbrExtData, TBitStream *bs, - uint8 isMono, uint8 writeFlag) -{ - int16 bitsWritten; - - /*-- No reserved bits. --*/ - bitsWritten = 1; - if(writeFlag) BsPutBits(bs, 1, hFrameData->dataPresent); - - bitsWritten += (hFrameData->dataPresent) ? 4 : 0; - if(hFrameData->dataPresent) - if(writeFlag) BsPutBits(bs, 4, 0); - - /*-- Write grid info. --*/ - bitsWritten += SBR_WriteGridInfo(bs, hFrameData, writeFlag); - - /*-- Write direction info for the envelope coding. --*/ - bitsWritten += SBR_WriteDTDFData(hFrameData, bs, writeFlag); - - /*-- Write inverse filtering modes. --*/ - bitsWritten += hHeaderData->hFreqBandData->nInvfBands << 1; - if(writeFlag) - BsPutBits(bs, hHeaderData->hFreqBandData->nInvfBands << 1, hFrameData->sbr_invf_mode); - - /*-- Write envelope values. --*/ - bitsWritten += SBR_WriteEnvelopeData(hHeaderData, hFrameData, bs, writeFlag); - - /*-- Write noise floor values. --*/ - bitsWritten += SBR_WriteNoiseData(hHeaderData, hFrameData, bs, writeFlag); - - /*-- Write additional sinusoidals, if any. --*/ - bitsWritten += SBR_WriteSinusoidalData(hFrameData, bs, hHeaderData->hFreqBandData->nSfb[1], writeFlag); - - /* - * Write extended data info, this is only in case of mono since parameters - * for parametric stereo are decoded via the data extension. In case of stereo - * do nothing. - */ - if(!isMono) - { - bitsWritten += 1; - if(writeFlag) BsPutBits(bs, 1, 0); - } - else - bitsWritten += SBR_WritetExtendedData(bs, sbrExtData, writeFlag); - - return (bitsWritten); -} - -int16 -SBR_WriteCPE(SbrHeaderData *hHeaderData, SbrFrameData *hFrameDataLeft, - SbrFrameData *hFrameDataRight, SbrExtensionData *sbrExtData, - TBitStream *bs, uint8 writeFlag) -{ - int16 bitsWritten; - - /*-- No reserved bits. --*/ - bitsWritten = 1; - if(writeFlag) BsPutBits(bs, 1, 0); - bitsWritten += (hFrameDataLeft->dataPresent) ? 8 : 0; - if(hFrameDataLeft->dataPresent) - if(writeFlag) BsPutBits(bs, 8, 0); - - bitsWritten += 1; - if(writeFlag) - { - if(hFrameDataLeft->coupling) - BsPutBits(bs, 1, 1); - else - BsPutBits(bs, 1, 0); - } - - /*-- Write grid info (left channel). --*/ - bitsWritten += SBR_WriteGridInfo(bs, hFrameDataLeft, writeFlag); - - /*-- Write grid info (right channel). --*/ - if(!hFrameDataLeft->coupling) - bitsWritten += SBR_WriteGridInfo(bs, hFrameDataRight, writeFlag); - - /*-- Write direction info for the envelope coding (left channel). --*/ - bitsWritten += SBR_WriteDTDFData(hFrameDataLeft, bs, writeFlag); - - /*-- Write direction info for the envelope coding (right channel). --*/ - bitsWritten += SBR_WriteDTDFData(hFrameDataRight, bs, writeFlag); - - /*-- Write inverse filtering modes. --*/ - bitsWritten += hHeaderData->hFreqBandData->nInvfBands << 1; - if(writeFlag) - BsPutBits(bs, hHeaderData->hFreqBandData->nInvfBands << 1, hFrameDataLeft->sbr_invf_mode); - - if(hFrameDataLeft->coupling) - { - /*-- Write envelope values. --*/ - bitsWritten += SBR_WriteEnvelopeData(hHeaderData, hFrameDataLeft, bs, writeFlag); - - /*-- Write noise floor values. --*/ - bitsWritten += SBR_WriteNoiseData(hHeaderData, hFrameDataLeft, bs, writeFlag); - - /*-- Write envelope values. --*/ - bitsWritten += SBR_WriteEnvelopeData(hHeaderData, hFrameDataRight, bs, writeFlag); - } - else - { - bitsWritten += hHeaderData->hFreqBandData->nInvfBands << 1; - if(writeFlag) - BsPutBits(bs, hHeaderData->hFreqBandData->nInvfBands << 1, hFrameDataRight->sbr_invf_mode); - - /*-- Write envelope values. --*/ - bitsWritten += SBR_WriteEnvelopeData(hHeaderData, hFrameDataLeft, bs, writeFlag); - - /*-- Write envelope values. --*/ - bitsWritten += SBR_WriteEnvelopeData(hHeaderData, hFrameDataRight, bs, writeFlag); - - /*-- Write noise floor values. --*/ - bitsWritten += SBR_WriteNoiseData(hHeaderData, hFrameDataLeft, bs, writeFlag); - } - - /*-- Write noise floor values. --*/ - bitsWritten += SBR_WriteNoiseData(hHeaderData, hFrameDataRight, bs, writeFlag); - - /*-- Write additional sinusoidals, if any. --*/ - bitsWritten += SBR_WriteSinusoidalData(hFrameDataLeft, bs, hHeaderData->hFreqBandData->nSfb[1], writeFlag); - bitsWritten += SBR_WriteSinusoidalData(hFrameDataRight, bs, hHeaderData->hFreqBandData->nSfb[1], writeFlag); - - /*-- No extended data. --*/ -#if 0 - bitsWritten += 1; - if(writeFlag) BsPutBits(bs, 1, 0); -#else - bitsWritten += SBR_WritetExtendedData(bs, sbrExtData, writeFlag); -#endif /*-- 0 --*/ - - return (bitsWritten); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/sbr_codec.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/sbr_codec.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,748 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* - \file - \brief SBR codec implementation $Revision: 1.1.1.1.4.1 $ -*/ - -/************************************************************************** - sbr_codec.cpp - SBR codec implementation. - - Author(s): Juha Ojanpera - Copyright (c) 2004 by Nokia Research Center, Multimedia Technologies. - *************************************************************************/ - -/*-- Project Headers. --*/ -#include "sbr_codec.h" -#include "env_extr.h" -#include "sbr_rom.h" -#include "sbr_bitmux.h" - -struct SBR_Decoder_Instance -{ - SbrFrameData *frameData[2]; - SbrHeaderData *sbrHeader[2]; - FreqBandData *freqBandData[2]; - - SbrExtensionData *sbrExtData; - -}; - - -FLOAT -FloatFR_logDualis(int16 a) -{ - return (logDualisTable[a]); -} - -FLOAT -FloatFR_getNumOctaves(int16 a, int16 b) -{ - return (FloatFR_logDualis(b) - FloatFR_logDualis(a)); -} - -int16 -ReadSBRExtensionData(TBitStream *bs, SbrBitStream *streamSBR, - int16 extension_type, int16 prev_element, - int16 dataCount) -{ - int16 i, sbrPresent; - - sbrPresent = 0; - if(!(prev_element == SBR_ID_SCE || prev_element == SBR_ID_CPE)) - return (sbrPresent); - - if(!(extension_type == SBR_EXTENSION || extension_type == SBR_EXTENSION_CRC)) - return (sbrPresent); - - if(dataCount < MAX_SBR_BYTES && streamSBR->NrElements < MAX_NR_ELEMENTS) - { - streamSBR->sbrElement[streamSBR->NrElements].Data[0] = (uint8) BsGetBits(bs, 4); - - for(i = 1; i < dataCount; i++) - streamSBR->sbrElement[streamSBR->NrElements].Data[i] = (uint8) BsGetBits(bs, 8); - - streamSBR->sbrElement[streamSBR->NrElements].ExtensionType = extension_type; - streamSBR->sbrElement[streamSBR->NrElements].Payload = dataCount; - streamSBR->NrElements += 1; - sbrPresent = 1; - } - - return (sbrPresent); -} - -SbrBitStream * -CloseSBRBitStream(SbrBitStream *Bitstr) -{ - if(Bitstr) - { - int16 i; - - for(i = 0; i < MAX_NR_ELEMENTS; i++) - { - if(Bitstr->sbrElement[i].Data != 0) - delete[] Bitstr->sbrElement[i].Data; - Bitstr->sbrElement[i].Data = NULL; - } - - - delete Bitstr; - Bitstr = NULL; - } - - return (NULL); -} - -SbrBitStream * -OpenSBRBitStreamL(void) -{ - int16 i; - SbrBitStream *Bitstr; - - /*-- Create SBR bitstream handle. --*/ - Bitstr = (SbrBitStream *) new (ELeave) SbrBitStream[1]; - CleanupStack::PushL(Bitstr); - - ZERO_MEMORY(Bitstr, sizeof(SbrBitStream)); - - /*-- Create payload handle for each supported element. --*/ - for(i = 0; i < MAX_NR_ELEMENTS; i++) - { - Bitstr->sbrElement[i].Data = (uint8 *) new (ELeave) uint8[MAX_SBR_BYTES]; - CleanupStack::PushL(Bitstr->sbrElement[i].Data); - - ZERO_MEMORY(Bitstr->sbrElement[i].Data, MAX_SBR_BYTES); - } - - CleanupStack::Pop(MAX_NR_ELEMENTS + 1); /*-- 'Bitstr->sbrElement[i].Data' + 'Bitstr' --*/ - - return (Bitstr); -} - -/*! - \brief Set up SBR decoder - - \return Handle -*/ -SBR_Decoder * -OpenSBRDecoderL(int32 sampleRate, int16 samplesPerFrame, uint8 isStereo, uint8 isDualMono) -{ - uint8 nPops; - SBR_Decoder *sbrDecoder; - - /*-- Create main handle. --*/ - sbrDecoder = (SBR_Decoder *) new (ELeave) SBR_Decoder[1]; - CleanupStack::PushL(sbrDecoder); nPops = 1; - - ZERO_MEMORY(sbrDecoder, sizeof(SBR_Decoder)); - - /*-- Create frame data for mono or left channel. --*/ - sbrDecoder->frameData[0] = (SbrFrameData *) new (ELeave) SbrFrameData[1]; - CleanupStack::PushL(sbrDecoder->frameData[0]); nPops++; - - ZERO_MEMORY(sbrDecoder->frameData[0], sizeof(SbrFrameData)); - - /*-- Create frame data for right channel. --*/ - if(isStereo) - { - sbrDecoder->frameData[1] = (SbrFrameData *) new (ELeave) SbrFrameData[1]; - CleanupStack::PushL(sbrDecoder->frameData[1]); nPops++; - - ZERO_MEMORY(sbrDecoder->frameData[1], sizeof(SbrFrameData)); - } - - /*-- Create header data. --*/ - sbrDecoder->sbrHeader[0] = (SbrHeaderData *) new (ELeave) SbrHeaderData[1]; - CleanupStack::PushL(sbrDecoder->sbrHeader[0]); nPops++; - - ZERO_MEMORY(sbrDecoder->sbrHeader[0], sizeof(SbrHeaderData)); - - /* - * Create header data for dual channel if so needed. Remember that in - * dual channel mode individual channels are not jointly coded, - * each channel element is coded separately. Thus, also header data - * can change between frames of the individual channels. - */ - if(isDualMono) - { - sbrDecoder->sbrHeader[1] = (SbrHeaderData *) new (ELeave) SbrHeaderData[1]; - CleanupStack::PushL(sbrDecoder->sbrHeader[1]); nPops++; - - ZERO_MEMORY(sbrDecoder->sbrHeader[1], sizeof(SbrHeaderData)); - } - - /*-- Create frequency band tables for mono or left channel. --*/ - sbrDecoder->freqBandData[0] = (FreqBandData *) new (ELeave) FreqBandData[1]; - CleanupStack::PushL(sbrDecoder->freqBandData[0]); nPops++; - - ZERO_MEMORY(sbrDecoder->freqBandData[0], sizeof(FreqBandData)); - - /*-- Create frequency band data for dual channel. --*/ - if(isDualMono) - { - sbrDecoder->freqBandData[1] = (FreqBandData *) new (ELeave) FreqBandData[1]; - CleanupStack::PushL(sbrDecoder->freqBandData[1]); nPops++; - - ZERO_MEMORY(sbrDecoder->sbrHeader[1], sizeof(FreqBandData)); - } - - /*-- Create extension data handle. --*/ - sbrDecoder->sbrExtData = (SbrExtensionData *) new (ELeave) SbrExtensionData[1]; - CleanupStack::PushL(sbrDecoder->sbrExtData); nPops++; - - ZERO_MEMORY(sbrDecoder->sbrExtData, sizeof(SbrExtensionData)); - - /* - * Create data buffer for extension data. Data for parametric stereo - * will be stored here. Can exist only in mono mode. - */ - if(!isStereo && !isDualMono) - { - sbrDecoder->sbrExtData->extDataBufLen = 128; - sbrDecoder->sbrExtData->extensioData = (uint8 *) new (ELeave) uint8[sbrDecoder->sbrExtData->extDataBufLen]; - CleanupStack::PushL(sbrDecoder->sbrExtData->extensioData); nPops++; - - ZERO_MEMORY(sbrDecoder->sbrExtData->extensioData, sbrDecoder->sbrExtData->extDataBufLen); - } - - /*-- Initialize header(s) with default values. --*/ - initHeaderData(sbrDecoder->sbrHeader[0], sbrDecoder->freqBandData[0], sampleRate, samplesPerFrame); - if(isDualMono) - initHeaderData(sbrDecoder->sbrHeader[1], sbrDecoder->freqBandData[1], sampleRate, samplesPerFrame); - - CleanupStack::Pop(nPops); - - return (sbrDecoder); -} - -/*! - \brief Close SBR decoder resources - - \return NULL -*/ - -SBR_Decoder * -CloseSBR(SBR_Decoder *sbrDecoder) -{ - if(sbrDecoder) - { - if(sbrDecoder->frameData[0] != 0) - delete sbrDecoder->frameData[0]; - sbrDecoder->frameData[0] = NULL; - - if(sbrDecoder->frameData[1] != 0) - delete sbrDecoder->frameData[1]; - sbrDecoder->frameData[1] = NULL; - - if(sbrDecoder->sbrHeader[0] != 0) - delete sbrDecoder->sbrHeader[0]; - sbrDecoder->sbrHeader[0] = NULL; - - if(sbrDecoder->sbrHeader[1] != 0) - delete sbrDecoder->sbrHeader[1]; - sbrDecoder->sbrHeader[1] = NULL; - - if(sbrDecoder->freqBandData[0] != 0) - delete sbrDecoder->freqBandData[0]; - sbrDecoder->freqBandData[0] = NULL; - - if(sbrDecoder->freqBandData[1] != 0) - delete sbrDecoder->freqBandData[1]; - sbrDecoder->freqBandData[1] = NULL; - - if(sbrDecoder->sbrExtData != 0) - { - if(sbrDecoder->sbrExtData->extensioData != 0) - delete[] sbrDecoder->sbrExtData->extensioData; - sbrDecoder->sbrExtData->extensioData = NULL; - - delete sbrDecoder->sbrExtData; - } - sbrDecoder->sbrExtData = NULL; - - delete sbrDecoder; - sbrDecoder = NULL; - } - - return (NULL); -} - -int32 -SBR_WritePayload(TBitStream *bs, SbrFrameData *frameData[2], - SbrHeaderData *hHeaderData, SbrExtensionData *sbrExtData, - uint8 headerStatus, uint8 isStereo, uint8 writeFlag) -{ - int32 bitsWritten; - - /*-- Write header flag. --*/ - bitsWritten = 1; - if(writeFlag) BsPutBits(bs, 1, headerStatus); - - /*-- Write header data. --*/ - if(headerStatus) - bitsWritten += SBR_WriteHeaderData(hHeaderData, bs, writeFlag); - - /*-- Write payload data. --*/ - if(hHeaderData->syncState == SBR_ACTIVE) - { - if(isStereo) - bitsWritten += SBR_WriteCPE(hHeaderData, frameData[0], frameData[1], sbrExtData, bs, writeFlag); - else - bitsWritten += SBR_WriteSCE(hHeaderData, frameData[0], sbrExtData, bs, 1, writeFlag); - } - - return (bitsWritten); -} - -INLINE int32 -WriteSBR(TBitStream *bs, SbrFrameData *frameData[2], SbrHeaderData *hHeaderData, - SbrExtensionData *sbrExtData, uint8 isStereo, uint8 headerPresent, - uint8 writeFlag) -{ - int32 bitsWritten; - - bitsWritten = 0; - - /*-- Write extension tag. --*/ - bitsWritten += 4; - if(writeFlag) BsPutBits(bs, 4, SBR_EXTENSION); - - /*-- Write actual SBR payload. --*/ - bitsWritten += SBR_WritePayload(bs, frameData, hHeaderData, sbrExtData, headerPresent, isStereo, writeFlag); - - /*-- Byte align. --*/ - if(bitsWritten & 0x7) - { - uint8 bitsLeft = (uint8) (8 - (bitsWritten & 0x7)); - - bitsWritten += bitsLeft; - if(writeFlag) BsPutBits(bs, bitsLeft, 0); - } - - return (bitsWritten); -} - -/* - * Writes dummy payload data. - */ -INLINE int32 -WriteDummyPayload(TBitStream *bs, int32 nDummyBytes) -{ - int32 i, nBitsWritten; - - nBitsWritten = 4; - BsPutBits(bs, 4, 0); - - nBitsWritten += 4; - BsPutBits(bs, 4, 0); - for(i = 0; i < (nDummyBytes - 1); i++) - { - nBitsWritten += 8; - BsPutBits(bs, 8, 0xA5); - } - - return (nBitsWritten); -} - -/* - * Writes the length of AAC Fill Element (FIL) as specified in the standard. - */ -INLINE int32 -WriteAACFilLength(TBitStream *bs, int32 nFilBytes) -{ - int32 cnt, nBitsWritten; - - nBitsWritten = 0; - cnt = (nFilBytes >= 15) ? 15 : nFilBytes; - - nBitsWritten += 4; - BsPutBits(bs, 4, cnt); - if(cnt == 15) - { - int32 diff; - - diff = nFilBytes - 15 + 1; - - nBitsWritten += 8; - BsPutBits(bs, 8, diff); - } - - return (nBitsWritten); -} - -int32 -WriteSBRExtensionData2(TBitStream *bsOut, SbrFrameData *frameData[2], - SbrHeaderData *hHeaderData, SbrExtensionData *sbrExtData, - uint8 isStereo, uint8 headerPresent) -{ - int32 bitsWritten, nFilBytes; - - /*-- Write fill element code. --*/ - BsPutBits(bsOut, 3, 0x6); - - /*-- Count SBR part. --*/ - bitsWritten = WriteSBR(NULL, frameData, hHeaderData, sbrExtData, isStereo, headerPresent, 0); - nFilBytes = bitsWritten >> 3; - - /*-- Write length of FIL element. --*/ - WriteAACFilLength(bsOut, nFilBytes); - - /*-- Write SBR data. --*/ - if(nFilBytes > 0) - { - bitsWritten = WriteSBR(bsOut, frameData, hHeaderData, sbrExtData, isStereo, headerPresent, 1); - nFilBytes -= bitsWritten >> 3; - } - - /*-- Write dummy data if needed. --*/ - if(nFilBytes > 0) - { - /*-- Write fill element code. --*/ - BsPutBits(bsOut, 3, 0x6); - - /*-- Write length of FIL element. --*/ - bitsWritten += WriteAACFilLength(bsOut, nFilBytes); - - WriteDummyPayload(bsOut, nFilBytes); - } - - return (BsGetBitsRead(bsOut)); -} - -int32 -WriteSBRExtensionData(TBitStream *bsIn, TBitStream *bsOut, int16 bitOffset, - SBR_Decoder *sbrDecoder, - SbrHeaderData *hHeaderData, - uint8 isStereo, - uint8 headerPresent) -{ - int32 bitsWritten; - - /*-- Locate start position for SBR data within the buffer. --*/ - BsCopyBits(bsIn, bsOut, bitOffset); - - bitsWritten = BsGetBitsRead(bsOut); - - WriteSBRExtensionData2(bsOut, sbrDecoder->frameData, hHeaderData, sbrDecoder->sbrExtData, isStereo, headerPresent); - - bitsWritten = BsGetBitsRead(bsOut) - bitsWritten; - - return (bitsWritten); -} - -int16 -WriteSBRSilenceElement(SBR_Decoder *sbrDecoder, TBitStream *bsOut, uint8 isStereo) -{ - int32 bitsWritten; - - bitsWritten = BsGetBitsRead(bsOut); - - WriteSBRExtensionData2(bsOut, sbrDecoder->frameData, sbrDecoder->sbrHeader[0], sbrDecoder->sbrExtData, isStereo, 1); - - bitsWritten = BsGetBitsRead(bsOut) - bitsWritten; - - return (bitsWritten); -} - -void -InitSBRSilenceData(SBR_Decoder *sbrDecoder, uint8 isStereo, uint8 isParametricStereo) -{ - sbrDecoder->sbrHeader[0]->startFreq = 15; - sbrDecoder->sbrHeader[0]->stopFreq = 14; - - sbrDecoder->frameData[0]->frameInfo.nEnvelopes = 1; - sbrDecoder->frameData[0]->frameInfo.nNoiseEnvelopes = 1; - if(isStereo) - { - sbrDecoder->frameData[1]->frameInfo.nEnvelopes = 1; - sbrDecoder->frameData[1]->frameInfo.nNoiseEnvelopes = 1; - } - - sbrDecoder->sbrExtData->writePsData = (uint8) ((isParametricStereo) ? 1 : 0); - - resetFreqBandTables(sbrDecoder->sbrHeader[0]); - sbrDecoder->sbrHeader[0]->syncState = SBR_ACTIVE; -} - -int16 -GenerateSBRSilenceDataL(uint8 *OutBuffer, int16 OutBufferSize, int32 sampleRate, - uint8 isStereo, uint8 isParametricStereo) -{ - int16 sbrBits; - TBitStream bsOut; - SBR_Decoder *sbrDecoder; - - sbrDecoder = OpenSBRDecoderL(sampleRate, 1024, isStereo, 0); - - InitSBRSilenceData(sbrDecoder, isStereo, isParametricStereo); - - BsInit(&bsOut, OutBuffer, OutBufferSize); - - sbrBits = (int16) WriteSBRExtensionData2(&bsOut, sbrDecoder->frameData, sbrDecoder->sbrHeader[0], sbrDecoder->sbrExtData, isStereo, 1); - - return (sbrBits); -} - -int16 -WriteSBRExtensionSilenceData(TBitStream *bsOut, uint8 *SbrBuffer, - int16 SbrBits, uint8 writeTerminationCode) -{ - TBitStream bsSbr; - int16 bitsWritten; - - /*-- Initialize bitstream parser. --*/ - BsInit(&bsSbr, SbrBuffer, (SbrBits + 8) >> 3); - - /*-- Write the silence data. --*/ - BsCopyBits(&bsSbr, bsOut, SbrBits); - - /*-- Write termination code. --*/ - if(writeTerminationCode) - BsPutBits(bsOut, 3, 0x7); - - bitsWritten = BsGetBitsRead(bsOut); - - if(writeTerminationCode) - { - /*-- Byte align. --*/ - if(bitsWritten & 0x7) - { - int16 bitsLeft = 8 - (bitsWritten & 0x7); - - bitsWritten += bitsLeft; - BsPutBits(bsOut, bitsLeft, 0); - } - } - - return (bitsWritten); -} - -uint8 -ParseSBRPayload(SBR_Decoder *self, SbrHeaderData *hHeaderData, - SbrElementStream *sbrElement, int16 decVal, - uint8 isStereo) -{ - TBitStream bs; - - /*-- Initialize bitstream. --*/ - BsInit(&bs, sbrElement->Data, sbrElement->Payload); - - /*-- Remove invalid data from bit buffer. --*/ - BsGetBits(&bs, 4); - - /*-- CRC codeword present? --*/ - if(sbrElement->ExtensionType == SBR_EXTENSION_CRC) - BsGetBits(&bs, 10); - - /*-- Header present? --*/ - sbrElement->headerStatus = (uint8) BsGetBits(&bs, 1); - - /*-- Read header data. --*/ - if(sbrElement->headerStatus) - { - SBR_HEADER_STATUS headerStatus; - - headerStatus = sbrGetHeaderData(hHeaderData, &bs); - if(headerStatus == HEADER_RESET) - { - int16 err; - - /*-- Reset values. --*/ - err = resetFreqBandTables(hHeaderData); - if(err == 0) hHeaderData->syncState = SBR_ACTIVE; - } - } - - /*-- Read payload data. --*/ - if(hHeaderData->syncState == SBR_ACTIVE) - { - /*-- Read channel pair element related data. --*/ - if(isStereo) - sbrGetCPE(hHeaderData, self->frameData[0], self->frameData[1], self->sbrExtData, &bs, decVal); - - /*-- Read mono data. --*/ - else - sbrGetSCE(hHeaderData, self->frameData[0], self->sbrExtData, &bs, decVal, 1); - } - - return (1); -} - -/*! - \brief SBR bitstream parsing - - \return Number of bytes written to output bitstream -*/ -int16 -ParseSBR(TBitStream *bsIn, TBitStream *bsOut, SBR_Decoder *self, - SbrBitStream *Bitstr, int16 decVal) -{ - int32 i, bitsWritten = BsGetBitsRead(bsOut); - - /* - * Write frame bits from the start of frame till - * the start of 1st channel element. - */ - BsCopyBits(bsIn, bsOut, Bitstr->sbrElement[0].elementOffset); - - if(Bitstr->NrElements) - { - int16 SbrFrameOK, dualMono; - - SbrFrameOK = 1; - dualMono = (Bitstr->NrElements == 2) ? 1 : 0; - - for(i = 0; i < Bitstr->NrElements; i++) - { - uint8 stereo; - SbrElementStream *sbrElement; - - sbrElement = &Bitstr->sbrElement[i]; - - if(sbrElement->Payload < 1) - continue; - - stereo = 0; - - switch(sbrElement->ElementID) - { - case SBR_ID_SCE: - stereo = 0; - break; - - case SBR_ID_CPE: - stereo = 1; - break; - - default: - SbrFrameOK = 0; - break; - } - - if(SbrFrameOK) - { - ParseSBRPayload(self, self->sbrHeader[dualMono ? i : 0], sbrElement, decVal, stereo); - - WriteSBRExtensionData(bsIn, bsOut, sbrElement->chElementLen, self, - self->sbrHeader[dualMono ? i : 0], - stereo, sbrElement->headerStatus); - - if(i < (Bitstr->NrElements - 1)) - { - int32 endElement, startNextElement; - - endElement = sbrElement->elementOffset + sbrElement->chElementLen; - startNextElement = Bitstr->sbrElement[i + 1].elementOffset; - - BsSkipNBits(bsIn, startNextElement - endElement); - } - } - } - - /*-- Write termination code. --*/ - BsPutBits(bsOut, 3, 0x7); - - bitsWritten = BsGetBitsRead(bsOut) - bitsWritten; - - /*-- Byte align. --*/ - if(bitsWritten & 0x7) - { - uint8 bitsLeft = (uint8) (8 - (bitsWritten & 0x7)); - - bitsWritten += bitsLeft; - BsPutBits(bsOut, bitsLeft, 0); - } - } - - return (int16) (bitsWritten >> 3); -} - -uint8 -IsSBRParametricStereoEnabled(SBR_Decoder *self, SbrBitStream *Bitstr) -{ - uint8 isParamStereoPresent; - - isParamStereoPresent = 0; - - if(self && Bitstr->NrElements == 1) - { - SbrElementStream *sbrElement; - - sbrElement = &Bitstr->sbrElement[0]; - - if(sbrElement->Payload > 0 && sbrElement->ElementID == SBR_ID_SCE) - { - ParseSBRPayload(self, self->sbrHeader[0], sbrElement, 0, 0); - - if(self->sbrExtData->extensionDataPresent) - if(self->sbrExtData->extension_id == SBR_PARAMETRIC_STEREO_ID) - isParamStereoPresent = 1; - } - } - - return (isParamStereoPresent); -} - -uint8 -IsSBREnabled(SbrBitStream *Bitstr) -{ - uint8 isSBR; - - isSBR = (Bitstr && Bitstr->NrElements) ? 1 : 0; - - return (isSBR); -} - -int16 -WriteSBRSilence(TBitStream *bsIn, TBitStream *bsOut, SbrBitStream *streamSBR, - uint8 *SbrBuffer, int16 SbrBits) -{ - int32 i; - - /* - * Write frame bits from the start of frame till - * the start of 1st channel element. - */ - BsCopyBits(bsIn, bsOut, streamSBR->sbrElement[0].elementOffset); - - /*-- Write channel element. --*/ - BsCopyBits(bsIn, bsOut, streamSBR->sbrElement[0].chElementLen); - - for(i = 0; i < streamSBR->NrElements; i++) - { - uint8 writeEndCode = (i == (streamSBR->NrElements - 1)) ? 1 : 0; - - WriteSBRExtensionSilenceData(bsOut, SbrBuffer, SbrBits, writeEndCode); - - if(i < (streamSBR->NrElements - 1)) - { - int32 endElement, startNextElement; - - endElement = streamSBR->sbrElement[i].elementOffset + streamSBR->sbrElement[i].chElementLen; - startNextElement = streamSBR->sbrElement[i + 1].elementOffset; - - BsSkipNBits(bsIn, startNextElement - endElement); - - BsCopyBits(bsIn, bsOut, streamSBR->sbrElement[i + 1].chElementLen); - } - } - - return (int16) (BsGetBitsRead(bsOut) >> 3); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/sbr_demux.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/sbr_demux.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,594 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* - \file - \brief SBR codec implementation $Revision: 1.1.1.1.4.1 $ -*/ - -/************************************************************************** - sbr_demux.cpp - SBR bitstream demultiplexer implementations. - - Author(s): Juha Ojanpera - Copyright (c) 2004 by Nokia Research Center, Multimedia Technologies. - *************************************************************************/ - -/*-- Project Headers. --*/ -#include "sbr_rom.h" -#include "env_extr.h" - -typedef const int8 (*Huffman)[2]; - -/* - \brief Decodes Huffman codeword from TBitStream - - \return Decoded Huffman value. -*/ -int16 -DecodeHuffmanCW(Huffman h, TBitStream *bs) -{ - int16 value, bit, index = 0; - - while(index >= 0) - { - bit = (int16) BsGetBits(bs, 1); - index = h[index][bit]; - } - - value = index + 64; - - return (value); -} - -/* - \brief Reads direction control data from TBitStream -*/ -void -sbrGetDTDFData(SbrFrameData *frameData, TBitStream *bs) -{ - frameData->domain_vec = (uint8) BsGetBits(bs, frameData->frameInfo.nEnvelopes); - frameData->domain_vec_noise = (uint8) BsGetBits(bs, frameData->frameInfo.nNoiseEnvelopes); -} - -/* - \brief Reads noise-floor-level data from TBitStream -*/ -void -sbrGetNoiseFloorData(SbrHeaderData *headerData, SbrFrameData *frameData, TBitStream *bs) -{ - int16 i, j, k, noNoiseBands; - Huffman hcb_noiseF, hcb_noise; - - noNoiseBands = headerData->hFreqBandData->nNfb; - - if(frameData->coupling == COUPLING_BAL) - { - hcb_noise = (Huffman) &sbr_huffBook_NoiseBalance11T; - hcb_noiseF = (Huffman) &sbr_huffBook_EnvBalance11F; - } - else - { - hcb_noise = (Huffman) &sbr_huffBook_NoiseLevel11T; - hcb_noiseF = (Huffman) &sbr_huffBook_EnvLevel11F; - } - - k = SBR_BIT_ARRAY_SIZE - frameData->frameInfo.nNoiseEnvelopes; - for(i = 0; i < frameData->frameInfo.nNoiseEnvelopes; i++, k++) - { - uint8 codValue; - int16 index = i * noNoiseBands; - - codValue = frameData->domain_vec_noise & bitArray[k]; - - if(!codValue) - { - frameData->sbrNoiseFloorLevel[index++] = (int16) BsGetBits(bs, 5); - - for(j = 1; j < noNoiseBands; j++, index++) - frameData->sbrNoiseFloorLevel[index] = DecodeHuffmanCW(hcb_noiseF, bs); - } - else - { - for(j = 0; j < noNoiseBands; j++, index++) - frameData->sbrNoiseFloorLevel[index] = DecodeHuffmanCW(hcb_noise, bs); - } - } -} - -/* - \brief Reads envelope data from TBitStream - - \return One on success. -*/ -int16 -sbrGetEnvelope(SbrHeaderData *headerData, SbrFrameData *frameData, TBitStream *bs, int16 decVal) -{ - Huffman hcb_t, hcb_f; - uint8 no_band[MAX_ENVELOPES]; - int16 i, j, k, delta, offset, ampRes; - int16 start_bits, start_bits_balance; - - ampRes = headerData->ampResolution; - if(frameData->frameInfo.frameClass == FIXFIX && frameData->frameInfo.nEnvelopes == 1) - ampRes = SBR_AMP_RES_1_5; - - if(ampRes == SBR_AMP_RES_3_0) - { - start_bits = 6; - start_bits_balance = 5; - } - else - { - start_bits = 7; - start_bits_balance = 6; - } - - k = SBR_BIT_ARRAY_SIZE - frameData->frameInfo.nEnvelopes; - for(i = 0; i < frameData->frameInfo.nEnvelopes; i++, k++) - { - uint8 resValue = (frameData->frameInfo.freqRes & bitArray[k]) ? 1 : 0; - - no_band[i] = headerData->hFreqBandData->nSfb[resValue]; - } - - if(frameData->coupling == COUPLING_BAL) - { - if(ampRes == SBR_AMP_RES_1_5) - { - hcb_t = (Huffman) &sbr_huffBook_EnvBalance10T; - hcb_f = (Huffman) &sbr_huffBook_EnvBalance10F; - } - else - { - hcb_t = (Huffman) &sbr_huffBook_EnvBalance11T; - hcb_f = (Huffman) &sbr_huffBook_EnvBalance11F; - } - } - else - { - if(ampRes == SBR_AMP_RES_1_5) - { - hcb_t = (Huffman) &sbr_huffBook_EnvLevel10T; - hcb_f = (Huffman) &sbr_huffBook_EnvLevel10F; - } - else - { - hcb_t = (Huffman) &sbr_huffBook_EnvLevel11T; - hcb_f = (Huffman) &sbr_huffBook_EnvLevel11F; - } - } - - decVal = (ampRes) ? decVal : decVal << 1; - - k = SBR_BIT_ARRAY_SIZE - frameData->frameInfo.nEnvelopes; - for(j = 0, offset = 0; j < frameData->frameInfo.nEnvelopes; j++, k++) - { - uint8 codValue = frameData->domain_vec & bitArray[k]; - - if(!codValue) - { - if(frameData->coupling == COUPLING_BAL) - frameData->iEnvelope[offset] = (int16) BsGetBits(bs, start_bits_balance); - else - { - frameData->iEnvelope[offset] = (int16) BsGetBits(bs, start_bits); - - frameData->iEnvelope[offset] -= decVal; - if(frameData->iEnvelope[offset] < 0) - frameData->iEnvelope[offset] = 0; - } - } - - for(i = (1 - ((codValue) ? 1 : 0)); i < no_band[j]; i++) - { - if(!codValue) - delta = DecodeHuffmanCW(hcb_f, bs); - else - { - delta = DecodeHuffmanCW(hcb_t, bs); - - if(i == 0) - delta -= decVal; - } - - frameData->iEnvelope[offset + i] = delta; - } - - offset += no_band[j]; - } - - return (1); -} - -/* - \brief Extracts the frame information from the TBitStream - - \return One on success -*/ -int16 -sbrReadGridInfo(TBitStream *bs, SbrHeaderData *headerData, SbrFrameData *frameData) -{ - uint8 tmp; - FRAME_INFO *frameInfo; - SbrGridInfo *sbrGridInfo; - int16 pointer_bits, nEnv, k, staticFreqRes; - - nEnv = 0; - frameInfo = &frameData->frameInfo; - sbrGridInfo = &frameData->sbrGridInfo; - - frameInfo->frameClass = (uint8) BsGetBits(bs, 2); - - switch(frameInfo->frameClass) - { - case FIXFIX: - sbrGridInfo->bs_num_env = (uint8) BsGetBits(bs, 2); - staticFreqRes = (int16) BsGetBits(bs, 1); - nEnv = (int16) (1 << sbrGridInfo->bs_num_env); - - if(sbrGridInfo->bs_num_env < 3 && headerData->numberTimeSlots == 16) - COPY_MEMORY(frameInfo, &(sbr_staticFrameInfo[sbrGridInfo->bs_num_env]), sizeof(FRAME_INFO)); - - if(!staticFreqRes) - frameInfo->freqRes = 0; - break; - - case FIXVAR: - case VARFIX: - sbrGridInfo->bs_var_board[0] = (uint8) BsGetBits(bs, 2); - sbrGridInfo->bs_num_env = (uint8) BsGetBits(bs, 2); - nEnv = sbrGridInfo->bs_num_env + 1; - - for(k = 0; k < sbrGridInfo->bs_num_env; k++) - sbrGridInfo->bs_rel_board_0[k] = (uint8) BsGetBits(bs, 2); - - pointer_bits = (int16) (FloatFR_logDualis(sbrGridInfo->bs_num_env + 2) + 0.992188f); - sbrGridInfo->bs_pointer = (uint8) BsGetBits(bs, pointer_bits); - break; - } - - switch(frameInfo->frameClass) - { - case FIXVAR: - frameInfo->freqRes = 0; - tmp = (uint8) BsGetBits(bs, sbrGridInfo->bs_num_env + 1); - for(k = sbrGridInfo->bs_num_env; k >= 0; k--) - { - frameInfo->freqRes <<= 1; - frameInfo->freqRes |= tmp & 0x1; - tmp >>= 1; - } - break; - - case VARFIX: - frameInfo->freqRes = (uint8) BsGetBits(bs, sbrGridInfo->bs_num_env + 1); - break; - - case VARVAR: - sbrGridInfo->bs_var_board[0] = (uint8) BsGetBits(bs, 2); - sbrGridInfo->bs_var_board[1] = (uint8) BsGetBits(bs, 2); - sbrGridInfo->bs_num_rel[0] = (uint8) BsGetBits(bs, 2); - sbrGridInfo->bs_num_rel[1] = (uint8) BsGetBits(bs, 2); - - nEnv = sbrGridInfo->bs_num_rel[0] + sbrGridInfo->bs_num_rel[1] + 1; - - for(k = 0; k < sbrGridInfo->bs_num_rel[0]; k++) - sbrGridInfo->bs_rel_board_0[k] = (uint8) BsGetBits(bs, 2); - - for(k = 0; k < sbrGridInfo->bs_num_rel[1]; k++) - sbrGridInfo->bs_rel_board_1[k] = (uint8) BsGetBits(bs, 2); - - pointer_bits = (int16) (FloatFR_logDualis(nEnv + 1) + 0.992188f); - sbrGridInfo->bs_pointer = (int16) BsGetBits(bs, pointer_bits); - - frameInfo->freqRes = (uint8) BsGetBits(bs, nEnv); - break; - } - - frameInfo->nEnvelopes = (uint8) nEnv; - frameInfo->nNoiseEnvelopes = (nEnv == 1) ? 1 : 2; - - return (1); -} - -/* - \brief Initializes SBR header data -*/ -void -initHeaderData(SbrHeaderData *headerData, FreqBandData *freqBandData, - int32 sampleRate, int16 samplesPerFrame) -{ - FreqBandData *hFreq = freqBandData; - - COPY_MEMORY(headerData, &sbr_defaultHeader, sizeof(SbrHeaderData)); - - headerData->hFreqBandData = hFreq; - headerData->codecFrameSize = samplesPerFrame; - headerData->outSampleRate = SBR_UPSAMPLE_FAC * sampleRate; - headerData->numberTimeSlots = samplesPerFrame >> (4 + headerData->timeStep); -} - -/* - \brief Reads header data from TBitStream - - \return Processing status - HEADER_RESET or HEADER_OK -*/ -SBR_HEADER_STATUS -sbrGetHeaderData(SbrHeaderData *h_sbr_header, TBitStream *bs) -{ - SbrHeaderData lastHeader; - uint8 headerExtra1, headerExtra2; - - COPY_MEMORY(&lastHeader, h_sbr_header, sizeof(SbrHeaderData)); - - h_sbr_header->ampResolution = (uint8) BsGetBits(bs, 1); - h_sbr_header->startFreq = (uint8) BsGetBits(bs, 4); - h_sbr_header->stopFreq = (uint8) BsGetBits(bs, 4); - h_sbr_header->xover_band = (uint8) BsGetBits(bs, 3); - - BsGetBits(bs, 2); - - headerExtra1 = (uint8) BsGetBits(bs, 1); - headerExtra2 = (uint8) BsGetBits(bs, 1); - - if(headerExtra1) - { - h_sbr_header->freqScale = (uint8) BsGetBits(bs, 2); - h_sbr_header->alterScale = (uint8) BsGetBits(bs, 1); - h_sbr_header->noise_bands = (uint8) BsGetBits(bs, 2); - } - else - { - h_sbr_header->freqScale = SBR_FREQ_SCALE_DEF; - h_sbr_header->alterScale = SBR_ALTER_SCALE_DEF; - h_sbr_header->noise_bands = SBR_NOISE_BANDS_DEF; - } - - if(headerExtra2) - { - h_sbr_header->limiterBands = (uint8) BsGetBits(bs, 2); - h_sbr_header->limiterGains = (uint8) BsGetBits(bs, 2); - h_sbr_header->interpolFreq = (uint8) BsGetBits(bs, 1); - h_sbr_header->smoothingLength = (uint8) BsGetBits(bs, 1); - } - else - { - h_sbr_header->limiterBands = SBR_LIMITER_BANDS_DEF; - h_sbr_header->limiterGains = SBR_LIMITER_GAINS_DEF; - h_sbr_header->interpolFreq = SBR_INTERPOL_FREQ_DEF; - h_sbr_header->smoothingLength = SBR_SMOOTHING_LENGTH_DEF; - } - - if(h_sbr_header->syncState != SBR_ACTIVE || - lastHeader.startFreq != h_sbr_header->startFreq || - lastHeader.stopFreq != h_sbr_header->stopFreq || - lastHeader.xover_band != h_sbr_header->xover_band || - lastHeader.freqScale != h_sbr_header->freqScale || - lastHeader.alterScale != h_sbr_header->alterScale || - lastHeader.noise_bands != h_sbr_header->noise_bands) - return (HEADER_RESET); /*-- New settings --*/ - - return (HEADER_OK); -} - -/* - \brief Reads additional harmonics parameters - - \return Number of bits read -*/ -static int16 -sbrGetSineData(SbrHeaderData *headerData, SbrFrameData *frameData, TBitStream *bs) -{ - int16 bitsRead; - - bitsRead = 1; - frameData->isSinesPresent = (uint8) BsGetBits(bs, 1); - - if(frameData->isSinesPresent) - { - int16 rSfb; - - bitsRead += headerData->hFreqBandData->nSfb[1]; - - rSfb = (headerData->hFreqBandData->nSfb[1] > 32) ? 32 : headerData->hFreqBandData->nSfb[1]; - - frameData->addHarmonics[0] = (uint8) BsGetBits(bs, rSfb); - - if(headerData->hFreqBandData->nSfb[1] > 32) - { - rSfb = headerData->hFreqBandData->nSfb[1] - 32; - frameData->addHarmonics[1] = (uint8) BsGetBits(bs, rSfb); - } - } - - return (bitsRead); -} - -/* - \brief Reads extension data from the TBitStream -*/ -static void -sbrReadExtensionData(TBitStream *bs, SbrExtensionData *sbrExtData, uint8 isMono) -{ - sbrExtData->writePsData = 0; - sbrExtData->extensionDataPresent = (uint8) BsGetBits(bs, 1); - - if(sbrExtData->extensionDataPresent) - { - int16 i, nBitsLeft, cnt; - - cnt = (int16) BsGetBits(bs, 4); - if(cnt == 15) - cnt += (int16) BsGetBits(bs, 8); - - sbrExtData->byteCount = MIN(cnt, sbrExtData->extDataBufLen); - - nBitsLeft = cnt << 3; - - while(nBitsLeft > 7) - { - sbrExtData->extension_id = (uint8) BsGetBits(bs, 2); - - if(!(sbrExtData->extension_id == SBR_PARAMETRIC_STEREO_ID && isMono)) - sbrExtData->extension_id = 0; - else - sbrExtData->writePsData = 1; - - nBitsLeft -= 2; - - cnt = (int16) ((uint16) nBitsLeft >> 3); - - if(sbrExtData->extDataBufLen) - { - for(i = 0; i < MIN(cnt, sbrExtData->extDataBufLen); i++) - sbrExtData->extensioData[i] = (uint8) BsGetBits(bs, 8); - - for( ; i < cnt; i++) - BsGetBits(bs, 8); - } - else - for(i = 0; i < cnt; i++) - BsGetBits(bs, 8); - - nBitsLeft -= cnt << 3; - } - - BsGetBits(bs, nBitsLeft); - } -} - -/* - \brief Reads TBitStream elements of one channel - - \return One on success -*/ -int16 -sbrGetSCE(SbrHeaderData *headerData, SbrFrameData *frameData, - SbrExtensionData *sbrExtData, TBitStream *bs, - int16 decVal, uint8 isMono) -{ - frameData->coupling = COUPLING_OFF; - - /*-- Data present. --*/ - frameData->dataPresent = (int16) BsGetBits(bs, 1); - if(frameData->dataPresent) BsGetBits(bs, 4); - - /*-- Read grid info. --*/ - sbrReadGridInfo(bs, headerData, frameData); - - /*-- Read direction info for envelope decoding. --*/ - sbrGetDTDFData(frameData, bs); - - /*-- Read inverse filtering modes. --*/ - frameData->sbr_invf_mode = (uint8) BsGetBits(bs, headerData->hFreqBandData->nInvfBands << 1); - - /*-- Read Huffman coded envelope values. --*/ - sbrGetEnvelope(headerData, frameData, bs, decVal); - - /*-- Read noise data. --*/ - sbrGetNoiseFloorData(headerData, frameData, bs); - - /*-- Read sine data, if any. --*/ - sbrGetSineData(headerData, frameData, bs); - - /*-- Read extension data, if any. --*/ - sbrReadExtensionData(bs, sbrExtData, isMono); - - return (1); -} - -/* - \brief Reads TBitStream elements of a channel pair - - \return One on success -*/ -int16 -sbrGetCPE(SbrHeaderData *headerData, SbrFrameData *frameDataLeft, - SbrFrameData *frameDataRight, SbrExtensionData *sbrExtData, - TBitStream *bs, int16 decVal) -{ - /*-- Data present. -*/ - frameDataLeft->dataPresent = (uint8) BsGetBits(bs, 1); - if(frameDataLeft->dataPresent) - BsGetBits(bs, 8); - - /*-- Coupling mode. --*/ - if(BsGetBits(bs, 1)) - { - frameDataLeft->coupling = COUPLING_LEVEL; - frameDataRight->coupling = COUPLING_BAL; - } - else - { - frameDataLeft->coupling = COUPLING_OFF; - frameDataRight->coupling = COUPLING_OFF; - } - - /*-- Read grid info (left channel). --*/ - sbrReadGridInfo(bs, headerData, frameDataLeft); - - /*-- Read grid info (right channel). --*/ - if(frameDataLeft->coupling) - COPY_MEMORY(&frameDataRight->frameInfo, &frameDataLeft->frameInfo, sizeof(FRAME_INFO)); - else - sbrReadGridInfo(bs, headerData, frameDataRight); - - /*-- Read direction info for envelope decoding. --*/ - sbrGetDTDFData(frameDataLeft, bs); - sbrGetDTDFData(frameDataRight, bs); - - /*-- Read inverse filtering modes for left channel. --*/ - frameDataLeft->sbr_invf_mode = (uint8) BsGetBits(bs, headerData->hFreqBandData->nInvfBands << 1); - - if(frameDataLeft->coupling) - { - frameDataRight->sbr_invf_mode = frameDataLeft->sbr_invf_mode; - - /*-- Read Huffman coded envelope + noise values for left channel. --*/ - sbrGetEnvelope(headerData, frameDataLeft, bs, decVal); - sbrGetNoiseFloorData(headerData, frameDataLeft, bs); - - /*-- Read Huffman coded envelope for right channel. --*/ - sbrGetEnvelope(headerData, frameDataRight, bs, decVal); - } - else - { - /*-- Read inverse filtering modes for right channel. --*/ - frameDataRight->sbr_invf_mode = (uint8) BsGetBits(bs, headerData->hFreqBandData->nInvfBands << 1); - - /*-- Read Huffman coded envelope values. --*/ - sbrGetEnvelope(headerData, frameDataLeft, bs, decVal); - sbrGetEnvelope(headerData, frameDataRight, bs, decVal); - - /*-- Read noise data for left channel. --*/ - sbrGetNoiseFloorData(headerData, frameDataLeft, bs); - } - - /*-- Read noise data for right channel. --*/ - sbrGetNoiseFloorData(headerData, frameDataRight, bs); - - /*-- Read additional sines, if any. --*/ - sbrGetSineData(headerData, frameDataLeft, bs); - sbrGetSineData(headerData, frameDataRight, bs); - - /*-- Read extension data, if any. --*/ - sbrReadExtensionData(bs, sbrExtData, 0); - - return (1); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/sbr_freq_sca.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/sbr_freq_sca.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,443 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* - \file - \brief Frequency scale calculation $Revision: 1.2.4.1 $ -*/ - -/************************************************************************** - sbr_freq_sca.cpp - SBR frequency scale calculations. - - Author(s): Juha Ojanpera - Copyright (c) 2004 by Nokia Research Center, Multimedia Technologies. - *************************************************************************/ - -/*-- System Headers. --*/ -#include - -/*-- Project Headers. --*/ -#include "sbr_rom.h" - -const int16 MAX_OCTAVE = 29; -const int16 MAX_SECOND_REGION = 50; -const FLOAT WARP_FACTOR = 25200.0f / 32768.0f; - -/*! - \brief Sorting routine -*/ -void -shellsort(uint8 *in, uint8 n) -{ - int16 i, j, v, w, inc = 1; - - do - { - inc = 3 * inc + 1; - - } while (inc <= n); - - do - { - inc = inc / 3; - - for(i = inc; i < n; i++) - { - v = in[i]; - j = i; - - while((w = in[j - inc]) > v) - { - in[j] = w; - j -= inc; - if(j < inc) - break; - } - in[j] = v; - } - - } while(inc > 1); -} - -/*! - \brief Calculate number of SBR bands between start and stop band - - \return number of bands -*/ -static int16 -numberOfBands(FLOAT bpo, int16 start, int16 stop, int16 warpFlag) -{ - int16 num_bands; - FLOAT num_bands_div2; - - num_bands_div2 = 0.5f * FloatFR_getNumOctaves(start, stop) * bpo; - if(warpFlag) num_bands_div2 *= WARP_FACTOR; - - num_bands_div2 += 0.5f; - num_bands = (int16) num_bands_div2; - num_bands <<= 1; - - return (num_bands); -} - -/*! - \brief Calculate width of SBR bands - -*/ -static void -CalcBands(uint8 *diff, uint8 start, uint8 stop, uint8 num_bands) -{ - FLOAT exact, bandfactor; - int16 i, previous, current; - - previous = start; - exact = (FLOAT) start; - - Math::Pow(bandfactor, stop * sbr_invIntTable[start], sbr_invIntTable[num_bands]); - - for(i = 1; i <= num_bands; i++) - { - exact *= bandfactor; - current = (int16) (exact + 0.5f); - diff[i - 1] = current - previous; - previous = current; - } -} - -/*! - \brief Calculate cumulated sum vector from delta vector -*/ -static void -cumSum(uint8 start_value, uint8* diff, uint8 length, uint8 *start_adress) -{ - int16 i; - - start_adress[0] = start_value; - for(i = 1; i <= length; i++) - start_adress[i] = start_adress[i - 1] + diff[i - 1]; -} - -/*! - \brief Adapt width of frequency bands in the second region -*/ -static int16 -modifyBands(uint8 max_band_previous, uint8 * diff, uint8 length) -{ - int16 change = max_band_previous - diff[0]; - - if(change > (diff[length - 1] - diff[0]) / 2) - change = (diff[length - 1] - diff[0]) / 2; - - diff[0] += change; - diff[length - 1] -= change; - shellsort(diff, length); - - return (0); -} - -/*! - \brief Retrieve QMF-band where the SBR range starts - - \return Number of start band -*/ -static int16 -getStartBand(int32 fs, uint8 startFreq) -{ - int16 band; - - switch(fs) - { - case 96000: - case 88200: - band = sbr_start_freq_88[startFreq]; - break; - - case 64000: - band = sbr_start_freq_64[startFreq]; - break; - - case 48000: - band = sbr_start_freq_48[startFreq]; - break; - - case 44100: - band = sbr_start_freq_44[startFreq]; - break; - - case 32000: - band = sbr_start_freq_32[startFreq]; - break; - - case 24000: - band = sbr_start_freq_24[startFreq]; - break; - - case 22050: - band = sbr_start_freq_22[startFreq]; - break; - - case 16000: - band = sbr_start_freq_16[startFreq]; - break; - - default: - band = -1; - break; - } - - return (band); -} - -/*! - \brief Generates master frequency tables - - \return errorCode, 0 if successful -*/ -int16 -sbrdecUpdateFreqScale(uint8 * v_k_master, uint8 *numMaster, SbrHeaderData *hHeaderData) -{ - int32 fs; - FLOAT bpo; - int16 err, dk, k2_achived, k2_diff, incr; - uint8 k0, k2, k1, i, num_bands0, num_bands1; - uint8 diff_tot[MAX_OCTAVE + MAX_SECOND_REGION], *diff0, *diff1; - - diff0 = diff_tot; - diff1 = diff_tot + MAX_OCTAVE; - - incr = k1 = dk = err = 0; - fs = hHeaderData->outSampleRate; - - k0 = getStartBand(fs, hHeaderData->startFreq); - - if(hHeaderData->stopFreq < 14) - { - switch(fs) - { - case 48000: - k1 = 21; - break; - - case 44100: - k1 = 23; - break; - - case 32000: - case 24000: - k1 = 32; - break; - - case 22050: - k1 = 35; - break; - - case 16000: - k1 = 48; - break; - - default: - return (1); - } - - CalcBands(diff0, k1, 64, 13); - shellsort(diff0, 13); - cumSum(k1, diff0, 13, diff1); - k2 = diff1[hHeaderData->stopFreq]; - } - else - { - if(hHeaderData->stopFreq == 14) - k2 = 2 * k0; - else - k2 = 3 * k0; - } - - if(k2 > NO_SYNTHESIS_CHANNELS) - k2 = NO_SYNTHESIS_CHANNELS; - - if(((k2 - k0) > MAX_FREQ_COEFFS) || (k2 <= k0) ) - return (2); - - if(fs == 44100 && ((k2 - k0) > MAX_FREQ_COEFFS_FS44100)) - return (3); - - if(fs >= 48000 && ((k2 - k0) > MAX_FREQ_COEFFS_FS48000)) - return (4); - - if(hHeaderData->freqScale>0) - { - if(hHeaderData->freqScale == 1) - bpo = 12.0f; - else - { - if(hHeaderData->freqScale == 2) - bpo = 10.0f; - else - bpo = 8.0f; - } - - if(1000 * k2 > 2245 * k0) - { - k1 = 2 * k0; - num_bands0 = numberOfBands(bpo, k0, k1, 0); - num_bands1 = numberOfBands(bpo, k1, k2, hHeaderData->alterScale); - - if(num_bands0 < 1) - return (5); - - if(num_bands1 < 1) - return (6); - - CalcBands(diff0, k0, k1, num_bands0); - shellsort(diff0, num_bands0); - - if(diff0[0] == 0) - return (7); - - cumSum(k0, diff0, num_bands0, v_k_master); - CalcBands(diff1, k1, k2, num_bands1); - shellsort(diff1, num_bands1); - - if(diff0[num_bands0-1] > diff1[0]) - { - err = modifyBands(diff0[num_bands0 - 1], diff1, num_bands1); - if(err) return (8); - } - - cumSum(k1, diff1, num_bands1, &v_k_master[num_bands0]); - *numMaster = num_bands0 + num_bands1; - } - else - { - k1 = k2; - - num_bands0 = numberOfBands(bpo, k0, k1, 0); - if(num_bands0 < 1) - return (9); - - CalcBands(diff0, k0, k1, num_bands0); - shellsort(diff0, num_bands0); - if(diff0[0] == 0) - return (10); - - cumSum(k0, diff0, num_bands0, v_k_master); - *numMaster = num_bands0; - } - } - else - { - if(hHeaderData->alterScale == 0) - { - dk = 1; - num_bands0 = (k2 - k0) & 254; - } - else - { - dk = 2; - num_bands0 = (((k2 - k0) >> 1) + 1) & 254; - } - - if(num_bands0 < 1) - return (11); - - k2_achived = k0 + num_bands0 * dk; - k2_diff = k2 - k2_achived; - - for(i = 0;i < num_bands0; i++) - diff_tot[i] = dk; - - if(k2_diff < 0) - { - incr = 1; - i = 0; - } - - if(k2_diff > 0) - { - incr = -1; - i = num_bands0 - 1; - } - - while(k2_diff != 0) - { - diff_tot[i] = diff_tot[i] - incr; - i = i + incr; - k2_diff = k2_diff + incr; - } - - cumSum(k0, diff_tot, num_bands0, v_k_master); - - *numMaster = num_bands0; - } - - if(*numMaster < 1) - return (12); - - return (0); -} - -/*! - \brief Reset frequency band tables - - \return error code, 0 on success -*/ -int16 -resetFreqBandTables(SbrHeaderData *hHeaderData) -{ - uint8 nBandsHi; - int16 err, k2, kx, intTemp; - FreqBandData *hFreq = hHeaderData->hFreqBandData; - - err = sbrdecUpdateFreqScale(hFreq->v_k_master, &hFreq->numMaster, hHeaderData); - if(err) return (err); - - if(hHeaderData->xover_band > hFreq->numMaster) - return (13); - - nBandsHi = hFreq->numMaster - hHeaderData->xover_band; - - hFreq->nSfb[0] = ((nBandsHi & 1) == 0) ? nBandsHi >> 1 : (nBandsHi + 1) >> 1; - hFreq->nSfb[1] = nBandsHi; - - k2 = hFreq->v_k_master[nBandsHi - hHeaderData->xover_band]; - kx = hFreq->v_k_master[hHeaderData->xover_band]; - - if(hHeaderData->noise_bands == 0) - hFreq->nNfb = 1; - else - { - FLOAT temp; - - temp = FloatFR_getNumOctaves(kx,k2); - temp = temp * (FLOAT) hHeaderData->noise_bands; - intTemp = (int16) (temp + 0.5f); - - if(intTemp == 0) - intTemp = 1; - - hFreq->nNfb = intTemp; - } - - hFreq->nInvfBands = hFreq->nNfb; - - if(hFreq->nNfb > MAX_NOISE_COEFFS) - return (14); - - return (0); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/sbr_rom.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/sbr_rom.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,621 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* - \file - \brief SBR ROM tables (constant data) $Revision: 1.1.1.1.4.3 $ -*/ - -/************************************************************************** - sbr_rom.cpp - SBR ROM tables (constant data). - - Author(s): Juha Ojanpera - Copyright (c) 2004 by Nokia Research Center, Multimedia Technologies. - *************************************************************************/ - -/*-- System Headers. --*/ -#include "sbr_rom.h" - -const uint32 bitArray[SBR_BIT_ARRAY_SIZE] = {128, 64, 32, 16, 8, 4, 2, 1}; - -const uint8 sbr_start_freq_16[16] = {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}; -const uint8 sbr_start_freq_22[16] = {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 28, 30}; -const uint8 sbr_start_freq_24[16] = {11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 29, 32}; -const uint8 sbr_start_freq_32[16] = {10, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 29, 32}; -const uint8 sbr_start_freq_44[16] = { 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 23, 25, 28, 32}; -const uint8 sbr_start_freq_48[16] = { 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 24, 27, 31}; -const uint8 sbr_start_freq_64[16] = { 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 21, 23, 26, 30}; -const uint8 sbr_start_freq_88[16] = { 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 20, 23, 27, 31}; - - -/* Lookup-table for inverse of integers */ -const FLOAT sbr_invIntTable[INV_INT_TABLE_SIZE] = { - 0.0f, - 1.0f, - 1.0f / 2.0f, - 1.0f / 3.0f, - 1.0f / 4.0f, - 1.0f / 5.0f, - 1.0f / 6.0f, - 1.0f / 7.0f, - 1.0f / 8.0f, - 1.0f / 9.0f, - 1.0f / 10.0f, - 1.0f / 11.0f, - 1.0f / 12.0f, - 1.0f / 13.0f, - 1.0f / 14.0f, - 1.0f / 15.0f, - 1.0f / 16.0f, - 1.0f / 17.0f, - 1.0f / 18.0f, - 1.0f / 19.0f, - 1.0f / 20.0f, - 1.0f / 21.0f, - 1.0f / 22.0f, - 1.0f / 23.0f, - 1.0f / 24.0f, - 1.0f / 25.0f, - 1.0f / 26.0f, - 1.0f / 27.0f, - 1.0f / 28.0f, - 1.0f / 29.0f, - 1.0f / 30.0f, - 1.0f / 31.0f, - 1.0f / 32.0f, - 1.0f / 33.0f, - 1.0f / 34.0f, - 1.0f / 35.0f, - 1.0f / 36.0f, - 1.0f / 37.0f, - 1.0f / 38.0f, - 1.0f / 39.0f, - 1.0f / 40.0f, - 1.0f / 41.0f, - 1.0f / 42.0f, - 1.0f / 43.0f, - 1.0f / 44.0f, - 1.0f / 45.0f, - 1.0f / 46.0f, - 1.0f / 47.0f, - 1.0f / 48.0f, - 1.0f / 49.0f, - 1.0f / 50.0f, - 1.0f / 51.0f, - 1.0f / 52.0f, - 1.0f / 53.0f, - 1.0f / 54.0f -}; - -const FLOAT logDualisTable[LOG_DUALIS_TABLE_SIZE] = { - -1.0f, 0.000000000000000f, 1.000000000000000f, - 1.584962500721156f, 2.000000000000000f, 2.321928094887363f, - 2.584962500721156f, 2.807354922057604f, 3.000000000000000f, - 3.169925001442313f, 3.321928094887363f, 3.459431618637297f, - 3.584962500721157f, 3.700439718141092f, 3.807354922057604f, - 3.906890595608519f, 4.000000000000000f, 4.087462841250340f, - 4.169925001442312f, 4.247927513443585f, 4.321928094887363f, - 4.392317422778761f, 4.459431618637297f, 4.523561956057013f, - 4.584962500721156f, 4.643856189774725f, 4.700439718141093f, - 4.754887502163469f, 4.807354922057605f, 4.857980995127572f, - 4.906890595608519f, 4.954196310386876f, 5.000000000000000f, - 5.044394119358453f, 5.087462841250340f, 5.129283016944966f, - 5.169925001442312f, 5.209453365628950f, 5.247927513443586f, - 5.285402218862249f, 5.321928094887363f, 5.357552004618084f, - 5.392317422778761f, 5.426264754702098f, 5.459431618637297f, - 5.491853096329675f, 5.523561956057013f, 5.554588851677638f, - 5.584962500721156f, 5.614709844115208f, 5.643856189774725f, - 5.672425341971496f, 5.700439718141093f, 5.727920454563200f, - 5.754887502163469f, 5.781359713524660f, 5.807354922057605f, - 5.832890014164742f, 5.857980995127573f, 5.882643049361842f, - 5.906890595608519f, 5.930737337562887f, 5.954196310386876f, - 5.977279923499917f, 6.000000000000000f, -}; - - -/* - \name FrameInfoDefaults - - Predefined envelope positions for the FIX-FIX case (static framing) -*/ -//@{ -//const FRAME_INFO sbr_frame_info1_16 = {0, 1, 1, 1}; -//const FRAME_INFO sbr_frame_info2_16 = {0, 2, 3, 2}; -//const FRAME_INFO sbr_frame_info4_16 = {0, 4, 15, 2}; -//const FRAME_INFO *sbr_staticFrameInfo[3] = -//{&sbr_frame_info1_16, &sbr_frame_info2_16, &sbr_frame_info4_16}; -const FRAME_INFO sbr_staticFrameInfo[3] = -{ - {0, 1, 1, 1}, - {0, 2, 3, 2}, - {0, 4, 15, 2} -}; - - -//@} - -/* - Default values for the time before the first SBR header is read -*/ -const SbrHeaderData sbr_defaultHeader = -{ - SBR_NOT_INITIALIZED, - 16, - 2, - 1024, - 44100, - SBR_AMP_RES_3_0, - 5, - 0, - 0, - SBR_FREQ_SCALE_DEF, - SBR_ALTER_SCALE_DEF, - SBR_NOISE_BANDS_DEF, - SBR_LIMITER_BANDS_DEF, - SBR_LIMITER_GAINS_DEF, - SBR_INTERPOL_FREQ_DEF, - SBR_SMOOTHING_LENGTH_DEF, - - NULL -}; - - -/* - \name SBR_HuffmanTables - - SBR Huffman Table Overview: \n - \n - o envelope level, 1.5 dB: \n - 1) sbr_huffBook_EnvLevel10T[120][2] \n - 2) sbr_huffBook_EnvLevel10F[120][2] \n - \n - o envelope balance, 1.5 dB: \n - 3) sbr_huffBook_EnvBalance10T[48][2] \n - 4) sbr_huffBook_EnvBalance10F[48][2] \n - \n - o envelope level, 3.0 dB: \n - 5) sbr_huffBook_EnvLevel11T[62][2] \n - 6) sbr_huffBook_EnvLevel11F[62][2] \n - \n - o envelope balance, 3.0 dB: \n - 7) sbr_huffBook_EnvBalance11T[24][2] \n - 8) sbr_huffBook_EnvBalance11F[24][2] \n - \n - o noise level, 3.0 dB: \n - 9) sbr_huffBook_NoiseLevel11T[62][2] \n - -) (sbr_huffBook_EnvLevel11F[62][2] is used for freq dir)\n - \n - o noise balance, 3.0 dB: \n - 10) sbr_huffBook_NoiseBalance11T[24][2]\n - -) (sbr_huffBook_EnvBalance11F[24][2] is used for freq dir)\n - \n - (1.5 dB is never used for noise) - -*/ -//@{ -const int8 sbr_huffBook_EnvLevel10T[120][2] = { - { 1, 2 }, { -64, -65 }, { 3, 4 }, { -63, -66 }, - { 5, 6 }, { -62, -67 }, { 7, 8 }, { -61, -68 }, - { 9, 10 }, { -60, -69 }, { 11, 12 }, { -59, -70 }, - { 13, 14 }, { -58, -71 }, { 15, 16 }, { -57, -72 }, - { 17, 18 }, { -73, -56 }, { 19, 21 }, { -74, 20 }, - { -55, -75 }, { 22, 26 }, { 23, 24 }, { -54, -76 }, - { -77, 25 }, { -53, -78 }, { 27, 34 }, { 28, 29 }, - { -52, -79 }, { 30, 31 }, { -80, -51 }, { 32, 33 }, - { -83, -82 }, { -81, -50 }, { 35, 57 }, { 36, 40 }, - { 37, 38 }, { -88, -84 }, { -48, 39 }, { -90, -85 }, - { 41, 46 }, { 42, 43 }, { -49, -87 }, { 44, 45 }, - { -89, -86 }, {-124,-123 }, { 47, 50 }, { 48, 49 }, - {-122,-121 }, {-120,-119 }, { 51, 54 }, { 52, 53 }, - {-118,-117 }, {-116,-115 }, { 55, 56 }, {-114,-113 }, - {-112,-111 }, { 58, 89 }, { 59, 74 }, { 60, 67 }, - { 61, 64 }, { 62, 63 }, {-110,-109 }, {-108,-107 }, - { 65, 66 }, {-106,-105 }, {-104,-103 }, { 68, 71 }, - { 69, 70 }, {-102,-101 }, {-100, -99 }, { 72, 73 }, - { -98, -97 }, { -96, -95 }, { 75, 82 }, { 76, 79 }, - { 77, 78 }, { -94, -93 }, { -92, -91 }, { 80, 81 }, - { -47, -46 }, { -45, -44 }, { 83, 86 }, { 84, 85 }, - { -43, -42 }, { -41, -40 }, { 87, 88 }, { -39, -38 }, - { -37, -36 }, { 90, 105 }, { 91, 98 }, { 92, 95 }, - { 93, 94 }, { -35, -34 }, { -33, -32 }, { 96, 97 }, - { -31, -30 }, { -29, -28 }, { 99, 102 }, { 100, 101 }, - { -27, -26 }, { -25, -24 }, { 103, 104 }, { -23, -22 }, - { -21, -20 }, { 106, 113 }, { 107, 110 }, { 108, 109 }, - { -19, -18 }, { -17, -16 }, { 111, 112 }, { -15, -14 }, - { -13, -12 }, { 114, 117 }, { 115, 116 }, { -11, -10 }, - { -9, -8 }, { 118, 119 }, { -7, -6 }, { -5, -4 } -}; - -const int8 sbr_huffBook_EnvLevel10F[120][2] = { - { 1, 2 }, { -64, -65 }, { 3, 4 }, { -63, -66 }, - { 5, 6 }, { -67, -62 }, { 7, 8 }, { -68, -61 }, - { 9, 10 }, { -69, -60 }, { 11, 13 }, { -70, 12 }, - { -59, -71 }, { 14, 16 }, { -58, 15 }, { -72, -57 }, - { 17, 19 }, { -73, 18 }, { -56, -74 }, { 20, 23 }, - { 21, 22 }, { -55, -75 }, { -54, -53 }, { 24, 27 }, - { 25, 26 }, { -76, -52 }, { -77, -51 }, { 28, 31 }, - { 29, 30 }, { -50, -78 }, { -79, -49 }, { 32, 36 }, - { 33, 34 }, { -48, -47 }, { -80, 35 }, { -81, -82 }, - { 37, 47 }, { 38, 41 }, { 39, 40 }, { -83, -46 }, - { -45, -84 }, { 42, 44 }, { -85, 43 }, { -44, -43 }, - { 45, 46 }, { -88, -87 }, { -86, -90 }, { 48, 66 }, - { 49, 56 }, { 50, 53 }, { 51, 52 }, { -92, -42 }, - { -41, -39 }, { 54, 55 }, {-105, -89 }, { -38, -37 }, - { 57, 60 }, { 58, 59 }, { -94, -91 }, { -40, -36 }, - { 61, 63 }, { -20, 62 }, {-115,-110 }, { 64, 65 }, - {-108,-107 }, {-101, -97 }, { 67, 89 }, { 68, 75 }, - { 69, 72 }, { 70, 71 }, { -95, -93 }, { -34, -27 }, - { 73, 74 }, { -22, -17 }, { -16,-124 }, { 76, 82 }, - { 77, 79 }, {-123, 78 }, {-122,-121 }, { 80, 81 }, - {-120,-119 }, {-118,-117 }, { 83, 86 }, { 84, 85 }, - {-116,-114 }, {-113,-112 }, { 87, 88 }, {-111,-109 }, - {-106,-104 }, { 90, 105 }, { 91, 98 }, { 92, 95 }, - { 93, 94 }, {-103,-102 }, {-100, -99 }, { 96, 97 }, - { -98, -96 }, { -35, -33 }, { 99, 102 }, { 100, 101 }, - { -32, -31 }, { -30, -29 }, { 103, 104 }, { -28, -26 }, - { -25, -24 }, { 106, 113 }, { 107, 110 }, { 108, 109 }, - { -23, -21 }, { -19, -18 }, { 111, 112 }, { -15, -14 }, - { -13, -12 }, { 114, 117 }, { 115, 116 }, { -11, -10 }, - { -9, -8 }, { 118, 119 }, { -7, -6 }, { -5, -4 } -}; - -const int8 sbr_huffBook_EnvBalance10T[48][2] = { - { -64, 1 }, { -63, 2 }, { -65, 3 }, { -62, 4 }, - { -66, 5 }, { -61, 6 }, { -67, 7 }, { -60, 8 }, - { -68, 9 }, { 10, 11 }, { -69, -59 }, { 12, 13 }, - { -70, -58 }, { 14, 28 }, { 15, 21 }, { 16, 18 }, - { -57, 17 }, { -71, -56 }, { 19, 20 }, { -88, -87 }, - { -86, -85 }, { 22, 25 }, { 23, 24 }, { -84, -83 }, - { -82, -81 }, { 26, 27 }, { -80, -79 }, { -78, -77 }, - { 29, 36 }, { 30, 33 }, { 31, 32 }, { -76, -75 }, - { -74, -73 }, { 34, 35 }, { -72, -55 }, { -54, -53 }, - { 37, 41 }, { 38, 39 }, { -52, -51 }, { -50, 40 }, - { -49, -48 }, { 42, 45 }, { 43, 44 }, { -47, -46 }, - { -45, -44 }, { 46, 47 }, { -43, -42 }, { -41, -40 } -}; - -const int8 sbr_huffBook_EnvBalance10F[48][2] = { - { -64, 1 }, { -65, 2 }, { -63, 3 }, { -66, 4 }, - { -62, 5 }, { -61, 6 }, { -67, 7 }, { -68, 8 }, - { -60, 9 }, { 10, 11 }, { -69, -59 }, { -70, 12 }, - { -58, 13 }, { 14, 17 }, { -71, 15 }, { -57, 16 }, - { -56, -73 }, { 18, 32 }, { 19, 25 }, { 20, 22 }, - { -72, 21 }, { -88, -87 }, { 23, 24 }, { -86, -85 }, - { -84, -83 }, { 26, 29 }, { 27, 28 }, { -82, -81 }, - { -80, -79 }, { 30, 31 }, { -78, -77 }, { -76, -75 }, - { 33, 40 }, { 34, 37 }, { 35, 36 }, { -74, -55 }, - { -54, -53 }, { 38, 39 }, { -52, -51 }, { -50, -49 }, - { 41, 44 }, { 42, 43 }, { -48, -47 }, { -46, -45 }, - { 45, 46 }, { -44, -43 }, { -42, 47 }, { -41, -40 } -}; - -const int8 sbr_huffBook_EnvLevel11T[62][2] = { - { -64, 1 }, { -65, 2 }, { -63, 3 }, { -66, 4 }, - { -62, 5 }, { -67, 6 }, { -61, 7 }, { -68, 8 }, - { -60, 9 }, { 10, 11 }, { -69, -59 }, { 12, 14 }, - { -70, 13 }, { -71, -58 }, { 15, 18 }, { 16, 17 }, - { -72, -57 }, { -73, -74 }, { 19, 22 }, { -56, 20 }, - { -55, 21 }, { -54, -77 }, { 23, 31 }, { 24, 25 }, - { -75, -76 }, { 26, 27 }, { -78, -53 }, { 28, 29 }, - { -52, -95 }, { -94, 30 }, { -93, -92 }, { 32, 47 }, - { 33, 40 }, { 34, 37 }, { 35, 36 }, { -91, -90 }, - { -89, -88 }, { 38, 39 }, { -87, -86 }, { -85, -84 }, - { 41, 44 }, { 42, 43 }, { -83, -82 }, { -81, -80 }, - { 45, 46 }, { -79, -51 }, { -50, -49 }, { 48, 55 }, - { 49, 52 }, { 50, 51 }, { -48, -47 }, { -46, -45 }, - { 53, 54 }, { -44, -43 }, { -42, -41 }, { 56, 59 }, - { 57, 58 }, { -40, -39 }, { -38, -37 }, { 60, 61 }, - { -36, -35 }, { -34, -33 } -}; - -const int8 sbr_huffBook_EnvLevel11F[62][2] = { - { -64, 1 }, { -65, 2 }, { -63, 3 }, { -66, 4 }, - { -62, 5 }, { -67, 6 }, { 7, 8 }, { -61, -68 }, - { 9, 10 }, { -60, -69 }, { 11, 12 }, { -59, -70 }, - { 13, 14 }, { -58, -71 }, { 15, 16 }, { -57, -72 }, - { 17, 19 }, { -56, 18 }, { -55, -73 }, { 20, 24 }, - { 21, 22 }, { -74, -54 }, { -53, 23 }, { -75, -76 }, - { 25, 30 }, { 26, 27 }, { -52, -51 }, { 28, 29 }, - { -77, -79 }, { -50, -49 }, { 31, 39 }, { 32, 35 }, - { 33, 34 }, { -78, -46 }, { -82, -88 }, { 36, 37 }, - { -83, -48 }, { -47, 38 }, { -86, -85 }, { 40, 47 }, - { 41, 44 }, { 42, 43 }, { -80, -44 }, { -43, -42 }, - { 45, 46 }, { -39, -87 }, { -84, -40 }, { 48, 55 }, - { 49, 52 }, { 50, 51 }, { -95, -94 }, { -93, -92 }, - { 53, 54 }, { -91, -90 }, { -89, -81 }, { 56, 59 }, - { 57, 58 }, { -45, -41 }, { -38, -37 }, { 60, 61 }, - { -36, -35 }, { -34, -33 } -}; - -const int8 sbr_huffBook_EnvBalance11T[24][2] = { - { -64, 1 }, { -63, 2 }, { -65, 3 }, { -66, 4 }, - { -62, 5 }, { -61, 6 }, { -67, 7 }, { -68, 8 }, - { -60, 9 }, { 10, 16 }, { 11, 13 }, { -69, 12 }, - { -76, -75 }, { 14, 15 }, { -74, -73 }, { -72, -71 }, - { 17, 20 }, { 18, 19 }, { -70, -59 }, { -58, -57 }, - { 21, 22 }, { -56, -55 }, { -54, 23 }, { -53, -52 } -}; - -const int8 sbr_huffBook_EnvBalance11F[24][2] = { - { -64, 1 }, { -65, 2 }, { -63, 3 }, { -66, 4 }, - { -62, 5 }, { -61, 6 }, { -67, 7 }, { -68, 8 }, - { -60, 9 }, { 10, 13 }, { -69, 11 }, { -59, 12 }, - { -58, -76 }, { 14, 17 }, { 15, 16 }, { -75, -74 }, - { -73, -72 }, { 18, 21 }, { 19, 20 }, { -71, -70 }, - { -57, -56 }, { 22, 23 }, { -55, -54 }, { -53, -52 } -}; - -const int8 sbr_huffBook_NoiseLevel11T[62][2] = { - { -64, 1 }, { -63, 2 }, { -65, 3 }, { -66, 4 }, - { -62, 5 }, { -67, 6 }, { 7, 8 }, { -61, -68 }, - { 9, 30 }, { 10, 15 }, { -60, 11 }, { -69, 12 }, - { 13, 14 }, { -59, -53 }, { -95, -94 }, { 16, 23 }, - { 17, 20 }, { 18, 19 }, { -93, -92 }, { -91, -90 }, - { 21, 22 }, { -89, -88 }, { -87, -86 }, { 24, 27 }, - { 25, 26 }, { -85, -84 }, { -83, -82 }, { 28, 29 }, - { -81, -80 }, { -79, -78 }, { 31, 46 }, { 32, 39 }, - { 33, 36 }, { 34, 35 }, { -77, -76 }, { -75, -74 }, - { 37, 38 }, { -73, -72 }, { -71, -70 }, { 40, 43 }, - { 41, 42 }, { -58, -57 }, { -56, -55 }, { 44, 45 }, - { -54, -52 }, { -51, -50 }, { 47, 54 }, { 48, 51 }, - { 49, 50 }, { -49, -48 }, { -47, -46 }, { 52, 53 }, - { -45, -44 }, { -43, -42 }, { 55, 58 }, { 56, 57 }, - { -41, -40 }, { -39, -38 }, { 59, 60 }, { -37, -36 }, - { -35, 61 }, { -34, -33 } -}; - -const int8 sbr_huffBook_NoiseBalance11T[24][2] = { - { -64, 1 }, { -65, 2 }, { -63, 3 }, { 4, 9 }, - { -66, 5 }, { -62, 6 }, { 7, 8 }, { -76, -75 }, - { -74, -73 }, { 10, 17 }, { 11, 14 }, { 12, 13 }, - { -72, -71 }, { -70, -69 }, { 15, 16 }, { -68, -67 }, - { -61, -60 }, { 18, 21 }, { 19, 20 }, { -59, -58 }, - { -57, -56 }, { 22, 23 }, { -55, -54 }, { -53, -52 } -}; -//@} - -const int32 v_Huff_envelopeLevelC10T[121] = { - 0x0003FFD6, 0x0003FFD7, 0x0003FFD8, 0x0003FFD9, 0x0003FFDA, 0x0003FFDB, 0x0007FFB8, 0x0007FFB9, - 0x0007FFBA, 0x0007FFBB, 0x0007FFBC, 0x0007FFBD, 0x0007FFBE, 0x0007FFBF, 0x0007FFC0, 0x0007FFC1, - 0x0007FFC2, 0x0007FFC3, 0x0007FFC4, 0x0007FFC5, 0x0007FFC6, 0x0007FFC7, 0x0007FFC8, 0x0007FFC9, - 0x0007FFCA, 0x0007FFCB, 0x0007FFCC, 0x0007FFCD, 0x0007FFCE, 0x0007FFCF, 0x0007FFD0, 0x0007FFD1, - 0x0007FFD2, 0x0007FFD3, 0x0001FFE6, 0x0003FFD4, 0x0000FFF0, 0x0001FFE9, 0x0003FFD5, 0x0001FFE7, - 0x0000FFF1, 0x0000FFEC, 0x0000FFED, 0x0000FFEE, 0x00007FF4, 0x00003FF9, 0x00003FF7, 0x00001FFA, - 0x00001FF9, 0x00000FFB, 0x000007FC, 0x000003FC, 0x000001FD, 0x000000FD, 0x0000007D, 0x0000003D, - 0x0000001D, 0x0000000D, 0x00000005, 0x00000001, 0x00000000, 0x00000004, 0x0000000C, 0x0000001C, - 0x0000003C, 0x0000007C, 0x000000FC, 0x000001FC, 0x000003FD, 0x00000FFA, 0x00001FF8, 0x00003FF6, - 0x00003FF8, 0x00007FF5, 0x0000FFEF, 0x0001FFE8, 0x0000FFF2, 0x0007FFD4, 0x0007FFD5, 0x0007FFD6, - 0x0007FFD7, 0x0007FFD8, 0x0007FFD9, 0x0007FFDA, 0x0007FFDB, 0x0007FFDC, 0x0007FFDD, 0x0007FFDE, - 0x0007FFDF, 0x0007FFE0, 0x0007FFE1, 0x0007FFE2, 0x0007FFE3, 0x0007FFE4, 0x0007FFE5, 0x0007FFE6, - 0x0007FFE7, 0x0007FFE8, 0x0007FFE9, 0x0007FFEA, 0x0007FFEB, 0x0007FFEC, 0x0007FFED, 0x0007FFEE, - 0x0007FFEF, 0x0007FFF0, 0x0007FFF1, 0x0007FFF2, 0x0007FFF3, 0x0007FFF4, 0x0007FFF5, 0x0007FFF6, - 0x0007FFF7, 0x0007FFF8, 0x0007FFF9, 0x0007FFFA, 0x0007FFFB, 0x0007FFFC, 0x0007FFFD, 0x0007FFFE, - 0x0007FFFF -}; - -const uint8 v_Huff_envelopeLevelL10T[121] = { - 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000011, 0x00000012, 0x00000010, 0x00000011, 0x00000012, 0x00000011, - 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000F, 0x0000000E, 0x0000000E, 0x0000000D, - 0x0000000D, 0x0000000C, 0x0000000B, 0x0000000A, 0x00000009, 0x00000008, 0x00000007, 0x00000006, - 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000003, 0x00000004, 0x00000005, - 0x00000006, 0x00000007, 0x00000008, 0x00000009, 0x0000000A, 0x0000000C, 0x0000000D, 0x0000000E, - 0x0000000E, 0x0000000F, 0x00000010, 0x00000011, 0x00000010, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013 -}; - -const int32 v_Huff_envelopeLevelC10F[121] = { - 0x0007FFE7, 0x0007FFE8, 0x000FFFD2, 0x000FFFD3, 0x000FFFD4, 0x000FFFD5, 0x000FFFD6, 0x000FFFD7, - 0x000FFFD8, 0x0007FFDA, 0x000FFFD9, 0x000FFFDA, 0x000FFFDB, 0x000FFFDC, 0x0007FFDB, 0x000FFFDD, - 0x0007FFDC, 0x0007FFDD, 0x000FFFDE, 0x0003FFE4, 0x000FFFDF, 0x000FFFE0, 0x000FFFE1, 0x0007FFDE, - 0x000FFFE2, 0x000FFFE3, 0x000FFFE4, 0x0007FFDF, 0x000FFFE5, 0x0007FFE0, 0x0003FFE8, 0x0007FFE1, - 0x0003FFE0, 0x0003FFE9, 0x0001FFEF, 0x0003FFE5, 0x0001FFEC, 0x0001FFED, 0x0001FFEE, 0x0000FFF4, - 0x0000FFF3, 0x0000FFF0, 0x00007FF7, 0x00007FF6, 0x00003FFA, 0x00001FFA, 0x00001FF9, 0x00000FFA, - 0x00000FF8, 0x000007F9, 0x000003FB, 0x000001FC, 0x000001FA, 0x000000FB, 0x0000007C, 0x0000003C, - 0x0000001C, 0x0000000C, 0x00000005, 0x00000001, 0x00000000, 0x00000004, 0x0000000D, 0x0000001D, - 0x0000003D, 0x000000FA, 0x000000FC, 0x000001FB, 0x000003FA, 0x000007F8, 0x000007FA, 0x000007FB, - 0x00000FF9, 0x00000FFB, 0x00001FF8, 0x00001FFB, 0x00003FF8, 0x00003FF9, 0x0000FFF1, 0x0000FFF2, - 0x0001FFEA, 0x0001FFEB, 0x0003FFE1, 0x0003FFE2, 0x0003FFEA, 0x0003FFE3, 0x0003FFE6, 0x0003FFE7, - 0x0003FFEB, 0x000FFFE6, 0x0007FFE2, 0x000FFFE7, 0x000FFFE8, 0x000FFFE9, 0x000FFFEA, 0x000FFFEB, - 0x000FFFEC, 0x0007FFE3, 0x000FFFED, 0x000FFFEE, 0x000FFFEF, 0x000FFFF0, 0x0007FFE4, 0x000FFFF1, - 0x0003FFEC, 0x000FFFF2, 0x000FFFF3, 0x0007FFE5, 0x0007FFE6, 0x000FFFF4, 0x000FFFF5, 0x000FFFF6, - 0x000FFFF7, 0x000FFFF8, 0x000FFFF9, 0x000FFFFA, 0x000FFFFB, 0x000FFFFC, 0x000FFFFD, 0x000FFFFE, - 0x000FFFFF -}; - -const uint8 v_Huff_envelopeLevelL10F[121] = { - 0x00000013, 0x00000013, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, - 0x00000014, 0x00000013, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000013, 0x00000014, - 0x00000013, 0x00000013, 0x00000014, 0x00000012, 0x00000014, 0x00000014, 0x00000014, 0x00000013, - 0x00000014, 0x00000014, 0x00000014, 0x00000013, 0x00000014, 0x00000013, 0x00000012, 0x00000013, - 0x00000012, 0x00000012, 0x00000011, 0x00000012, 0x00000011, 0x00000011, 0x00000011, 0x00000010, - 0x00000010, 0x00000010, 0x0000000F, 0x0000000F, 0x0000000E, 0x0000000D, 0x0000000D, 0x0000000C, - 0x0000000C, 0x0000000B, 0x0000000A, 0x00000009, 0x00000009, 0x00000008, 0x00000007, 0x00000006, - 0x00000005, 0x00000004, 0x00000003, 0x00000002, 0x00000002, 0x00000003, 0x00000004, 0x00000005, - 0x00000006, 0x00000008, 0x00000008, 0x00000009, 0x0000000A, 0x0000000B, 0x0000000B, 0x0000000B, - 0x0000000C, 0x0000000C, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E, 0x00000010, 0x00000010, - 0x00000011, 0x00000011, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, - 0x00000012, 0x00000014, 0x00000013, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, - 0x00000014, 0x00000013, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000013, 0x00000014, - 0x00000012, 0x00000014, 0x00000014, 0x00000013, 0x00000013, 0x00000014, 0x00000014, 0x00000014, - 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, - 0x00000014 -}; - -const int32 bookSbrEnvBalanceC10T[49] = { - 0x0000FFE4, 0x0000FFE5, 0x0000FFE6, 0x0000FFE7, 0x0000FFE8, 0x0000FFE9, 0x0000FFEA, - 0x0000FFEB, 0x0000FFEC, 0x0000FFED, 0x0000FFEE, 0x0000FFEF, 0x0000FFF0, 0x0000FFF1, - 0x0000FFF2, 0x0000FFF3, 0x0000FFF4, 0x0000FFE2, 0x00000FFC, 0x000007FC, 0x000001FE, - 0x0000007E, 0x0000001E, 0x00000006, 0x00000000, 0x00000002, 0x0000000E, 0x0000003E, - 0x000000FE, 0x000007FD, 0x00000FFD, 0x00007FF0, 0x0000FFE3, 0x0000FFF5, 0x0000FFF6, - 0x0000FFF7, 0x0000FFF8, 0x0000FFF9, 0x0000FFFA, 0x0001FFF6, 0x0001FFF7, 0x0001FFF8, - 0x0001FFF9, 0x0001FFFA, 0x0001FFFB, 0x0001FFFC, 0x0001FFFD, 0x0001FFFE, 0x0001FFFF -}; - -const uint8 bookSbrEnvBalanceL10T[49] = { - 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, - 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010, - 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x0000000C, 0x0000000B, 0x00000009, - 0x00000007, 0x00000005, 0x00000003, 0x00000001, 0x00000002, 0x00000004, 0x00000006, - 0x00000008, 0x0000000B, 0x0000000C, 0x0000000F, 0x00000010, 0x00000010, 0x00000010, - 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000011, 0x00000011, 0x00000011, - 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011, 0x00000011 -}; - -const int32 bookSbrEnvBalanceC10F[49] = { - 0x0003FFE2, 0x0003FFE3, 0x0003FFE4, 0x0003FFE5, 0x0003FFE6, 0x0003FFE7,0x0003FFE8, - 0x0003FFE9, 0x0003FFEA, 0x0003FFEB, 0x0003FFEC, 0x0003FFED, 0x0003FFEE, 0x0003FFEF, - 0x0003FFF0, 0x0000FFF7, 0x0001FFF0, 0x00003FFC, 0x000007FE, 0x000007FC, 0x000000FE, - 0x0000007E, 0x0000000E, 0x00000002, 0x00000000, 0x00000006, 0x0000001E, 0x0000003E, - 0x000001FE, 0x000007FD, 0x00000FFE, 0x00007FFA, 0x0000FFF6, 0x0003FFF1, 0x0003FFF2, - 0x0003FFF3, 0x0003FFF4, 0x0003FFF5, 0x0003FFF6, 0x0003FFF7, 0x0003FFF8, 0x0003FFF9, - 0x0003FFFA, 0x0003FFFB, 0x0003FFFC, 0x0003FFFD, 0x0003FFFE, 0x0007FFFE, 0x0007FFFF -}; - -const uint8 bookSbrEnvBalanceL10F[49] = { - 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, - 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, - 0x00000012, 0x00000010, 0x00000011, 0x0000000E, 0x0000000B, 0x0000000B, 0x00000008, - 0x00000007, 0x00000004, 0x00000002, 0x00000001, 0x00000003, 0x00000005, 0x00000006, - 0x00000009, 0x0000000B, 0x0000000C, 0x0000000F, 0x00000010, 0x00000012, 0x00000012, - 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, - 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000013, 0x00000013 -}; - -const int32 v_Huff_envelopeLevelC11T[63] = { - 0x0003FFED, 0x0003FFEE, 0x0007FFDE, 0x0007FFDF, 0x0007FFE0, 0x0007FFE1, 0x0007FFE2, - 0x0007FFE3, 0x0007FFE4, 0x0007FFE5, 0x0007FFE6, 0x0007FFE7, 0x0007FFE8, 0x0007FFE9, - 0x0007FFEA, 0x0007FFEB, 0x0007FFEC, 0x0001FFF4, 0x0000FFF7, 0x0000FFF9, 0x0000FFF8, - 0x00003FFB, 0x00003FFA, 0x00003FF8, 0x00001FFA, 0x00000FFC, 0x000007FC, 0x000000FE, - 0x0000003E, 0x0000000E, 0x00000002, 0x00000000, 0x00000006, 0x0000001E, 0x0000007E, - 0x000001FE, 0x000007FD, 0x00001FFB, 0x00003FF9, 0x00003FFC, 0x00007FFA, 0x0000FFF6, - 0x0001FFF5, 0x0003FFEC, 0x0007FFED, 0x0007FFEE, 0x0007FFEF, 0x0007FFF0, 0x0007FFF1, - 0x0007FFF2, 0x0007FFF3, 0x0007FFF4, 0x0007FFF5, 0x0007FFF6, 0x0007FFF7, 0x0007FFF8, - 0x0007FFF9, 0x0007FFFA, 0x0007FFFB, 0x0007FFFC, 0x0007FFFD, 0x0007FFFE, 0x0007FFFF -}; - -const uint8 v_Huff_envelopeLevelL11T[63] = { - 0x00000012, 0x00000012, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000011, 0x00000010, 0x00000010, 0x00000010, - 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000D, 0x0000000C, 0x0000000B, 0x00000008, - 0x00000006, 0x00000004, 0x00000002, 0x00000001, 0x00000003, 0x00000005, 0x00000007, - 0x00000009, 0x0000000B, 0x0000000D, 0x0000000E, 0x0000000E, 0x0000000F, 0x00000010, - 0x00000011, 0x00000012, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, - 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000013 -}; - -const int32 v_Huff_envelopeLevelC11F[63] = { - 0x000FFFF0, 0x000FFFF1, 0x000FFFF2, 0x000FFFF3, 0x000FFFF4, 0x000FFFF5, 0x000FFFF6, - 0x0003FFF3, 0x0007FFF5, 0x0007FFEE, 0x0007FFEF, 0x0007FFF6, 0x0003FFF4, 0x0003FFF2, - 0x000FFFF7, 0x0007FFF0, 0x0001FFF5, 0x0003FFF0, 0x0001FFF4, 0x0000FFF7, 0x0000FFF6, - 0x00007FF8, 0x00003FFB, 0x00000FFD, 0x000007FD, 0x000003FD, 0x000001FD, 0x000000FD, - 0x0000003E, 0x0000000E, 0x00000002, 0x00000000, 0x00000006, 0x0000001E, 0x000000FC, - 0x000001FC, 0x000003FC, 0x000007FC, 0x00000FFC, 0x00001FFC, 0x00003FFA, 0x00007FF9, - 0x00007FFA, 0x0000FFF8, 0x0000FFF9, 0x0001FFF6, 0x0001FFF7, 0x0003FFF5, 0x0003FFF6, - 0x0003FFF1, 0x000FFFF8, 0x0007FFF1, 0x0007FFF2, 0x0007FFF3, 0x000FFFF9, 0x0007FFF7, - 0x0007FFF4, 0x000FFFFA, 0x000FFFFB, 0x000FFFFC, 0x000FFFFD, 0x000FFFFE, 0x000FFFFF -}; - -const uint8 v_Huff_envelopeLevelL11F[63] = { - 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, - 0x00000012, 0x00000013, 0x00000013, 0x00000013, 0x00000013, 0x00000012, 0x00000012, - 0x00000014, 0x00000013, 0x00000011, 0x00000012, 0x00000011, 0x00000010, 0x00000010, - 0x0000000F, 0x0000000E, 0x0000000C, 0x0000000B, 0x0000000A, 0x00000009, 0x00000008, - 0x00000006, 0x00000004, 0x00000002, 0x00000001, 0x00000003, 0x00000005, 0x00000008, - 0x00000009, 0x0000000A, 0x0000000B, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000F, - 0x0000000F, 0x00000010, 0x00000010, 0x00000011, 0x00000011, 0x00000012, 0x00000012, - 0x00000012, 0x00000014, 0x00000013, 0x00000013, 0x00000013, 0x00000014, 0x00000013, - 0x00000013, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014, 0x00000014 -}; - -const uint16 bookSbrEnvBalanceC11T[25] = { - 0x00001FF2, 0x00001FF3, 0x00001FF4, 0x00001FF5, 0x00001FF6, 0x00001FF7, 0x00001FF8, - 0x00000FF8, 0x000000FE, 0x0000007E, 0x0000000E, 0x00000006, 0x00000000, 0x00000002, - 0x0000001E, 0x0000003E, 0x000001FE, 0x00001FF9, 0x00001FFA, 0x00001FFB, 0x00001FFC, - 0x00001FFD, 0x00001FFE, 0x00003FFE, 0x00003FFF -}; - -const uint8 bookSbrEnvBalanceL11T[25] = { - 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, - 0x0000000C, 0x00000008, 0x00000007, 0x00000004, 0x00000003, 0x00000001, 0x00000002, - 0x00000005, 0x00000006, 0x00000009, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, - 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E -}; - -const uint16 bookSbrEnvBalanceC11F[25] = { - 0x00001FF7, 0x00001FF8, 0x00001FF9, 0x00001FFA, 0x00001FFB, 0x00003FF8, 0x00003FF9, - 0x000007FC, 0x000000FE, 0x0000007E, 0x0000000E, 0x00000002, 0x00000000, 0x00000006, - 0x0000001E, 0x0000003E, 0x000001FE, 0x00000FFA, 0x00001FF6, 0x00003FFA, 0x00003FFB, - 0x00003FFC, 0x00003FFD, 0x00003FFE, 0x00003FFF -}; - -const uint8 bookSbrEnvBalanceL11F[25] = { - 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E, - 0x0000000B, 0x00000008, 0x00000007, 0x00000004, 0x00000002, 0x00000001, 0x00000003, - 0x00000005, 0x00000006, 0x00000009, 0x0000000C, 0x0000000D, 0x0000000E, 0x0000000E, - 0x0000000E, 0x0000000E, 0x0000000E, 0x0000000E -}; - -const uint16 v_Huff_NoiseLevelC11T[63] = { - 0x00001FCE, 0x00001FCF, 0x00001FD0, 0x00001FD1, 0x00001FD2, 0x00001FD3, 0x00001FD4, - 0x00001FD5, 0x00001FD6, 0x00001FD7, 0x00001FD8, 0x00001FD9, 0x00001FDA, 0x00001FDB, - 0x00001FDC, 0x00001FDD, 0x00001FDE, 0x00001FDF, 0x00001FE0, 0x00001FE1, 0x00001FE2, - 0x00001FE3, 0x00001FE4, 0x00001FE5, 0x00001FE6, 0x00001FE7, 0x000007F2, 0x000000FD, - 0x0000003E, 0x0000000E, 0x00000006, 0x00000000, 0x00000002, 0x0000001E, 0x000000FC, - 0x000003F8, 0x00001FCC, 0x00001FE8, 0x00001FE9, 0x00001FEA, 0x00001FEB, 0x00001FEC, - 0x00001FCD, 0x00001FED, 0x00001FEE, 0x00001FEF, 0x00001FF0, 0x00001FF1, 0x00001FF2, - 0x00001FF3, 0x00001FF4, 0x00001FF5, 0x00001FF6, 0x00001FF7, 0x00001FF8, 0x00001FF9, - 0x00001FFA, 0x00001FFB, 0x00001FFC, 0x00001FFD, 0x00001FFE, 0x00003FFE, 0x00003FFF -}; - -const uint8 v_Huff_NoiseLevelL11T[63] = { - 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, - 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, - 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, - 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000B, 0x00000008, - 0x00000006, 0x00000004, 0x00000003, 0x00000001, 0x00000002, 0x00000005, 0x00000008, - 0x0000000A, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, - 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, - 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, - 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000D, 0x0000000E, 0x0000000E -}; - -const uint16 bookSbrNoiseBalanceC11T[25] = { - 0x000000EC, 0x000000ED, 0x000000EE, 0x000000EF, 0x000000F0, 0x000000F1, 0x000000F2, - 0x000000F3, 0x000000F4, 0x000000F5, 0x0000001C, 0x00000002, 0x00000000, 0x00000006, - 0x0000003A, 0x000000F6, 0x000000F7, 0x000000F8, 0x000000F9, 0x000000FA, 0x000000FB, - 0x000000FC, 0x000000FD, 0x000000FE, 0x000000FF -}; - -const uint8 bookSbrNoiseBalanceL11T[25] = { - 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008, - 0x00000008, 0x00000008, 0x00000008, 0x00000005, 0x00000002, 0x00000001, 0x00000003, - 0x00000006, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008, - 0x00000008, 0x00000008, 0x00000008, 0x00000008 -}; diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/AACGain/src/sfbdata.cpp --- a/videoeditorengine/mp3aacManipLib/AACGain/src/sfbdata.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,265 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - sfbdata.cpp - Sfb table definitions for AAC. - - Author(s): Juha Ojanpera - Copyright (c) 2000-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- Project Headers. --*/ -#include "aacdef.h" - -/* - Purpose: Sfb widths (long and short block) for each sampling rate. - Explanation: Supports frame lengths 1024 and 960. */ - -const int16 sfb_96_1024[] = { - 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 64, 72, 80, 88, 96, - 108, 120, 132, 144, 156, 172, 188, 212, 240, 276, 320, 384, 448, 512, 576, - 640, 704, 768, 832, 896, 960, 1024}; - -const int16 sfb_96_128[] = {4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128}; -const int16 sfb_96_120[] = {4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 120}; - -const int16 sfb_64_1024[] = { - 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 64, 72, 80, 88, 100, - 112, 124, 140, 156, 172, 192, 216, 240, 268, 304, 344, 384, 424, 464, 504, - 544, 584, 624, 664, 704, 744, 784, 824, 864, 904, 944, 984, 1024}; -const int16 sfb_64_960[] = { - 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 64, 72, 80, 88, 100, - 112, 124, 140, 156, 172, 192, 216, 240, 268, 304, 344, 384, 424, 464, 504, - 544, 584, 624, 664, 704, 744, 784, 824, 864, 904, 944, 960}; - -const int16 sfb_64_128[] = {4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128}; -const int16 sfb_64_120[] = {4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 120}; - -const int16 sfb_48_1024[] = { - 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72, 80, 88, 96, 108, 120, - 132, 144, 160, 176, 196, 216, 240, 264, 292, 320, 352, 384, 416, 448, 480, - 512, 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 1024}; -const int16 sfb_48_960[] = { - 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72, 80, 88, 96, 108, 120, - 132, 144, 160, 176, 196, 216, 240, 264, 292, 320, 352, 384, 416, 448, 480, - 512, 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 960, 0}; - -const int16 sfb_48_128[] = -{4, 8, 12, 16, 20, 28, 36, 44, 56, 68, 80, 96, 112, 128}; -const int16 sfb_48_120[] = -{4, 8, 12, 16, 20, 28, 36, 44, 56, 68, 80, 96, 112, 120}; - -const int16 sfb_32_1024[] = { - 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72, 80, 88, 96, 108, 120, - 132, 144, 160, 176, 196, 216, 240, 264, 292, 320, 352, 384, 416, 448, 480, - 512, 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 960, - 992, 1024}; -const int16 sfb_32_960[] = -{ 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 48, 56, 64, 72, 80, 88, 96, 108, 120, - 132, 144, 160, 176, 196, 216, 240, 264, 292, 320, 352, 384, 416, 448, 480, - 512, 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 960, 0}; - -const int16 sfb_24_1024[] = { - 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 52, 60, 68, 76, 84, 92, 100, 108, - 116, 124, 136, 148, 160, 172, 188, 204, 220, 240, 260, 284, 308, 336, 364, - 396, 432, 468, 508, 552, 600, 652, 704, 768, 832, 896, 960, 1024}; - -const int16 sfb_24_128[] = -{ 4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 64, 76, 92, 108, 128}; -const int16 sfb_24_120[] = -{ 4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 64, 76, 92, 108, 120}; - -const int16 sfb_16_1024[] = { - 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 100, 112, 124, 136, 148, 160, - 172, 184, 196, 212, 228, 244, 260, 280, 300, 320, 344, 368, 396, 424, 456, - 492, 532, 572, 616, 664, 716, 772, 832, 896, 960, 1024}; - -const int16 sfb_16_128[] = -{ 4, 8, 12, 16, 20, 24, 28, 32, 40, 48, 60, 72, 88, 108, 128}; -const int16 sfb_16_120[] = -{ 4, 8, 12, 16, 20, 24, 28, 32, 40, 48, 60, 72, 88, 108, 120}; - -const int16 sfb_8_1024[] = { - 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144, 156, 172, 188, 204, 220, - 236, 252, 268, 288, 308, 328, 348, 372, 396, 420, 448, 476, 508, 544, 580, - 620, 664, 712, 764, 820, 880, 944, 1024}; -const int16 sfb_8_960[] = -{ 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144, 156, 172, 188, 204, - 220, 236, 252, 268, 288, 308, 328, 348, 372, 396, 420, 448, 476, 508, 544, - 580, 620, 664, 712, 764, 820, 880, 944, 960}; - -const int16 sfb_8_128[] = -{ 4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 60, 72, 88, 108, 128}; -const int16 sfb_8_120[] = -{ 4, 8, 12, 16, 20, 24, 28, 36, 44, 52, 60, 72, 88, 108, 120}; - -/* - Purpose: Block parameters for each sampling rate. - Explanation: - */ -const SR_Info AAC_sampleRateInfo[(1 << LEN_SAMP_IDX)] = { - - /* 96000 */ - {96000, 41, sfb_96_1024, 12, sfb_96_128, 40, sfb_96_1024, 12, sfb_96_120}, - - /* 88200 */ - {88200, 41, sfb_96_1024, 12, sfb_96_128, 40, sfb_96_1024, 12, sfb_96_120}, - - /* 64000 */ - {64000, 47, sfb_64_1024, 12, sfb_64_128, 46, sfb_64_960, 12, sfb_64_120}, - - /* 48000 */ - {48000, 49, sfb_48_1024, 14, sfb_48_128, 49, sfb_48_960, 14, sfb_48_120}, - - /* 44100 */ - {44100, 49, sfb_48_1024, 14, sfb_48_128, 49, sfb_48_960, 14, sfb_48_120}, - - /* 32000 */ - {32000, 51, sfb_32_1024, 14, sfb_48_128, 49, sfb_32_960, 14, sfb_48_120}, - - /* 24000 */ - {24000, 47, sfb_24_1024, 15, sfb_24_128, 46, sfb_24_1024, 15, sfb_24_120}, - - /* 22050 */ - {22050, 47, sfb_24_1024, 15, sfb_24_128, 46, sfb_24_1024, 15, sfb_24_120}, - - /* 16000 */ - {16000, 43, sfb_16_1024, 15, sfb_16_128, 42, sfb_16_1024, 15, sfb_16_120}, - - /* 12000 */ - {12000, 43, sfb_16_1024, 15, sfb_16_128, 42, sfb_16_1024, 15, sfb_16_120}, - - /* 11025 */ - {11025, 43, sfb_16_1024, 15, sfb_16_128, 42, sfb_16_1024, 15, sfb_16_120}, - - /* 8000 */ - { 8000, 40, sfb_8_1024, 15, sfb_8_128, 40, sfb_8_960, 15, sfb_8_120}, - - {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}}; - -/* - * Retrieves AAC sample rate corresponding to the specified sample rate index. - */ -int32 -AACSampleRate(uint8 sampleRateIdx) -{ - int32 sampleRate = 0; - - if(sampleRateIdx > 0 && sampleRateIdx < 12) - sampleRate = AAC_sampleRateInfo[sampleRateIdx].samp_rate; - - return (sampleRate); -} - -/* - * Initializes SFB and sample rate tables for the specified AAC encoder. - */ -void -AACSfbInfoInit(CSfb_Info *sfb, uint8 sIndex, uint8 is960) -{ - CInfo *ip; - const SR_Info *sip; - const int16 *sfbands; - int16 i, j, k, n, ws; - - sip = &AAC_sampleRateInfo[sIndex]; - - /*-- Long block info. --*/ - ip = sfb->only_long_info; - sfb->winmap[ONLY_LONG_WND] = ip; - - ip->nsbk = 1; - ip->islong = 1; - ip->bins_per_bk = (int16) ((is960) ? LN2_960 : LN2); - for(i = 0; i < ip->nsbk; i++) - { - if(is960) - { - ip->sfb_per_sbk[i] = sip->nsfb960; - ip->sbk_sfb_top[i] = sip->SFbands960; - } - else - { - ip->sfb_per_sbk[i] = sip->nsfb1024; - ip->sbk_sfb_top[i] = sip->SFbands1024; - } - } - ip->sfb_width_128 = NULL; - ip->num_groups = 1; - ip->group_len[0] = 1; - ip->group_offs[0] = 0; - - /*-- Short block info. --*/ - ip = sfb->eight_short_info; - sfb->winmap[ONLY_SHORT_WND] = ip; - - ip->islong = 0; - ip->nsbk = NSHORT; - ip->bins_per_bk = (int16) ((is960) ? LN2_960 : LN2); - for(i = 0; i < ip->nsbk; i++) - { - if(is960) - { - ip->sfb_per_sbk[i] = sip->nsfb120; - ip->sbk_sfb_top[i] = sip->SFbands120; - } - else - { - ip->sfb_per_sbk[i] = sip->nsfb128; - ip->sbk_sfb_top[i] = sip->SFbands128; - } - } - - /*-- Construct sfb width table. --*/ - ip->sfb_width_128 = sfb->sfbwidth128; - for(i = 0, j = 0, n = ip->sfb_per_sbk[0]; i < n; i++) - { - k = ip->sbk_sfb_top[0][i]; - ip->sfb_width_128[i] = (int16) (k - j); - j = k; - } - - /*-- Common to long and short. --*/ - for(ws = 0; ws < NUM_WIN_SEQ; ws++) - { - if(ws == 1 || ws == 3) - continue; - - ip = sfb->winmap[ws]; - ip->sfb_per_bk = 0; - for(i = 0, k= 0, n = 0; i < ip->nsbk; i++) - { - /*-- Compute bins_per_sbk. --*/ - ip->bins_per_sbk[i] = (int16) (ip->bins_per_bk / ip->nsbk); - - /*-- Compute sfb_per_bk. --*/ - ip->sfb_per_bk = (int16) (ip->sfb_per_bk + ip->sfb_per_sbk[i]); - - /*-- Construct default (non-interleaved) bk_sfb_top[]. --*/ - sfbands = ip->sbk_sfb_top[i]; - for(j = 0; j < ip->sfb_per_sbk[i]; j++) - ip->bk_sfb_top[j + k] = (int16) (sfbands[j] + n); - - n = (int16) (n + ip->bins_per_sbk[i]); - k = (int16) (k + ip->sfb_per_sbk[i]); - } - } - - sfb->winmap[1] = sfb->winmap[ONLY_LONG_WND]; - sfb->winmap[3] = sfb->winmap[ONLY_LONG_WND]; -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/inc/mp3tables.h --- a/videoeditorengine/mp3aacManipLib/MP3Gain/inc/mp3tables.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,388 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - mp3tables.cpp - Tables for layer III. - - Author(s): Juha Ojanpera - Modified: Ali Ahmaniemi - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef MP3TABLES_H -#define MP3TABLES_H - -/*-- Project Headers. --*/ -#include "mpaud.h" - -/* - Purpose: Grouping of the scalefactors of long and short blocks. - Explanation: - */ -const SFBITS_DATA sfbtable = {{0, 6, 11, 16, 21}, {0, 6, 12} }; - -/* - Purpose: Number of bits used for the scalefactors. - Explanation: - */ -const int16 slen[2][16] = { -{0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4}, -{0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3}}; - -/* - Purpose: Number of scalefactor bands for MPEG-2 LSF and MPEG-2.5 - bit streams. - Explanation: - */ -const uint8 nr_of_sfb_block[6][3][4] = { -{{ 6, 5, 5, 5}, { 9, 9, 9, 9}, { 6, 9, 9, 9}}, -{{ 6, 5, 7, 3}, { 9, 9, 12, 6}, { 6, 9, 12, 6}}, -{{11, 10, 0, 0}, {18, 18, 0, 0}, {15, 18, 0, 0}}, -{{ 7, 7, 7, 0}, {12, 12, 12, 0}, { 6, 15, 12, 0}}, -{{ 6, 6, 6, 3}, {12, 9, 9, 6}, { 6, 12, 9, 6}}, -{{ 8, 8, 5, 0}, {15, 12, 9, 0}, { 6, 18, 9, 0}}}; - -/* - Purpose: Length of each Huffman table. - Explanation: - */ -const int16 huf_tree_len[] = -{0, 4, 9, 9, 0, 16, 16, 36, 36, 36, 64, 64, 64, 256, 0, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 16}; - -/* - Purpose: Number of extra bits for each Huffman table. - Explanation: - */ -const int16 linbits[] = -{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 8, 10, 13, 4, 5, - 6, 7, 8, 9, 11, 13, 0, 0}; - - -/* - The following tables contain all the necessary information needed for - Huffman decoding of MPEG-1/MPEG-2 Layer III compliant stream. - - Tables 'huff_symbolsxx' contain the x and y values and the length of the - corresponding Huffman codewords. The first 5 bits hold the length of the - Huffman codeword. Next 4 bits hold y-value and the remaining bits hold the - x-value. The length is actually the difference between the current and the - previous length. - - Tables 'huff_cwordsxx' hold the Huffman codewords. Note these values are - sorted according to their length. - - For more information see function 'decode_codeword()'. -*/ - -/* Table 1 */ -const int16 huff_symbols1[] = {1, 513, 33, 544}; -const int16 huff_cwords1[] = {1, 1, 1, 0}; - -/* Table 2 */ -const int16 huff_symbols2[] = {1, 34, 512, 544, 578, 1024, 1056, 65, 1088}; -const int16 huff_cwords2[] = {1, 2, 3, 1, 1, 3, 2, 1, 0}; - -/* Table 3 */ -const int16 huff_symbols3[] = {2, 32, 544, 513, 578, 1024, 1056, 65, 1088}; -const int16 huff_cwords3[] = {3, 2, 1, 1, 1, 3, 2, 1, 0}; - -/* Table 5 */ -const int16 huff_symbols5[] = {1, 34, 512, 544, 67, 576, 1024, 1056, 1568, 97, - 608, 1088, 1536, 1600, 1121, 1632}; -const int16 huff_cwords5[] = {1, 2, 3, 1, 6, 4, 7, 5, 1, 5, 4, 7, 6, 1, 1, 0}; - -/* Table 6 */ -const int16 huff_symbols6[] = {546, 1, 32, 512, 577, 1024, 1056, 65, 608, 1088, - 1568, 1121, 1536, 1600, 97, 1632}; -const int16 huff_cwords6[] = {2, 7, 3, 6, 3, 5, 4, 5, 2, 4, 3, 1, 3, 2, 1, 0}; - -/* Table 7 */ -const int16 huff_symbols7[] = -{1, 34, 512, 545, 1057, 65,576, 1024, 609, 640, 1088, 1536, 1568, 2048, 2080, - 97, 128, 672, 1120, 1152, 1600, 2112, 2560, 2592, 161, 1184, 1632, 1664, 1696, - 2144, 2176, 2624, 2209, 2656, 2688, 2720}; -const int16 huff_cwords7[] = -{1, 2, 3, 3, 4, 10, 7, 11, 10, 5, 13, 12, 11, 7, 6, 19, 16, 3, 17, 8, 18, 9, 6, - 4, 10, 4, 15, 11, 2, 14, 3, 5, 1, 3, 2, 0}; - -/* Table 8 */ -const int16 huff_symbols8[] = -{2, 544, 33, 512, 577, 1056, 66, 1024, 1088, 2081, 97, 128, 608, 640, 672, 1120, - 1152, 1536, 1568, 1600, 2048, 2112, 2592, 161, 1184, 1632, 1664, 2144, 2560, - 2624, 2656, 1697, 2176, 2208, 2689, 2720}; -const int16 huff_cwords8[] = -{3, 1, 4, 5, 2, 3, 6, 7, 5, 5, 18, 12, 16, 9, 3, 14, 7, 19, 17, 15, 13, 8, 4, 5, - 3, 13, 10, 11, 12, 4, 1, 4, 5, 1, 1, 0}; - -/* Table 9 */ -const int16 huff_symbols9[] = -{3, 32, 512, 544, 577, 1024, 1056, 65, 608, 1088, 1568, 97, 640, 1120, 1536, - 1600, 2080, 1153, 1632, 1664, 2048, 2112, 2144, 2592, 129, 672, 1184, 1696, - 2176, 2560, 2624, 2656, 161, 2208, 2688, 2720}; -const int16 huff_cwords9[] = -{7, 5, 6, 4, 5, 7, 6, 9, 5, 8, 6, 14, 6, 8, 15, 9, 7, 8, 10, 5, 11, 9, 6, 4, 15, - 7, 5, 1, 4, 14, 6, 2, 7, 1, 6, 0}; - -/* Table 10 */ -const int16 huff_symbols10[] = -{1, 34, 512, 545, 66, 576, 1024, 1056, 609, 1088, 1536, 1568, 97, 640, 704, 736, - 1120, 1600, 2048, 2080, 3072, 3104, 3616, 129, 160, 192, 672, 1152, 1216, 1248, - 1632, 1728, 2112, 2560, 2592, 3136, 3584, 3648, 225, 1184, 1664, 1696, 1760, - 2144, 2176, 2208, 2240, 2272, 2624, 2656, 2752, 3168, 3200, 3232, 3680, 3712, - 2689, 2720, 2784, 3264, 3296, 3744, 3776, 3808}; -const int16 huff_cwords10[] = -{1, 2, 3, 3, 10, 8, 11, 9, 12, 15, 14, 13, 23, 18, 12, 7, 21, 22, 20, 19, 14, - 13, 8, 35, 30, 12, 21, 32, 19, 6, 34, 18, 33, 31, 22, 10, 9, 7, 17, 40, 46, 23, - 7, 47, 27, 22, 9, 3, 41, 26, 5, 11, 16, 6, 8, 4, 21, 20, 3, 5, 1, 4, 2, 0}; - -/* Table 11 */ -const int16 huff_symbols11[] = -{2, 33, 512, 544, 577, 65, 1024, 1056, 609, 1088, 1568, 97, 704, 1120, 1536, - 1600, 3104, 3136, 3616, 129, 192, 640, 672, 736, 1152, 1216, 1248, 1664, 1728, - 2048, 2080, 2112, 2560, 2592, 3072, 3168, 3584, 3648, 161, 224, 1184, 1632, - 1760, 2144, 2176, 2240, 2624, 3200, 3680, 1697, 2208, 2272, 2656, 2688, 2752, - 3232, 3264, 3296, 3712, 3744, 3776, 3808, 2721, 2784}; -const int16 huff_cwords11[] = -{3, 4, 5, 3, 4, 10, 11, 7, 10, 13, 11, 24, 11, 18, 25, 19, 12, 9, 4, 34, 21, 32, - 17, 10, 30, 20, 5, 27, 12, 35, 33, 31, 28, 26, 14, 13, 11, 6, 33, 15, 31, 59, - 5, 58, 30, 7, 32, 14, 6, 18, 16, 5, 19, 17, 8, 9, 4, 1, 6, 3, 2, 0, 15, 14}; - -/* Table 12 */ -const int16 huff_symbols12[] = -{35, 512, 544, 1, 576, 1056, 65, 608, 1024, 1088, 1568, 1121, 1536, 1600, 1632, - 2080, 97, 640, 672, 1152, 1216, 1664, 2048, 2112, 2144, 2592, 3104, 3136, 129, - 704, 736, 1184, 1248, 1696, 1728, 1760, 2176, 2208, 2240, 2560, 2624, 2656, - 2688, 2752, 3072, 3168, 3200, 3616, 3648, 161, 192, 224, 2272, 2720, 2784, - 3232, 3264, 3584, 3680, 3712, 3744, 3776, 3297, 3808}; -const int16 huff_cwords12[] = -{6, 7, 5, 9, 6, 7, 16, 9, 17, 11, 10, 14, 17, 15, 12, 13, 33, 23, 16, 21, 10, - 18, 32, 22, 19, 17, 12, 11, 41, 26, 11, 30, 7, 28, 14, 5, 18, 16, 9, 40, 31, - 29, 17, 4, 27, 15, 10, 12, 8, 39, 38, 26, 5, 13, 2, 7, 4, 27, 12, 6, 3, 1, 1, - 0}; - -/* Table 13 */ -const int16 huff_symbols13[] = -{1, 514, 33, 544, 66, 576, 1024, 1056, 97, 608, 1088, 1536, 1568, 2080, 129, - 640, 672, 1120, 1600, 2048, 2592, 4128, 161, 192, 256, 704, 736, 768, 800, - 1152, 1184, 1280, 1632, 1664, 2112, 2144, 2560, 2624, 3072, 3104, 3616, 4096, - 4160, 4640, 225, 288, 832, 864, 1216, 1248, 1312, 1344, 1696, 1728, 1760, 1792, - 2176, 2208, 2304, 2656, 2688, 2720, 3136, 3168, 3584, 3648, 4192, 4224, 4608, - 4672, 4704, 5120, 5152, 5184, 5664, 5696, 321, 352, 896, 1376, 1408, 1824, - 1856, 1888, 1920, 2240, 2272, 2336, 2368, 2752, 2784, 2816, 2848, 2912, 3200, - 3232, 3264, 3296, 3328, 3680, 3712, 3744, 4256, 4288, 4736, 4768, 4800, 5216, - 5248, 5632, 5728, 6144, 6176, 6208, 6688, 385, 416, 928, 960, 992, 1440, 1952, - 2400, 2432, 2880, 3360, 3392, 3424, 3776, 3808, 3840, 3872, 4320, 4352, 4384, - 4416, 4864, 5280, 5312, 5376, 5760, 5792, 5824, 5856, 6240, 6272, 6336, 6656, - 6720, 7200, 7232, 7680, 7712, 449, 480, 1472, 1504, 1984, 2016, 2464, 2496, - 2944, 2976, 3456, 3488, 3904, 3936, 3968, 4448, 4480, 4832, 4896, 4928, 5344, - 5408, 5472, 5888, 5920, 5952, 6304, 6368, 6752, 6784, 6816, 7168, 7264, 7296, - 7328, 7744, 2529, 3008, 3040, 3520, 3552, 4000, 4512, 4960, 4992, 5024, 5440, - 5504, 5984, 6400, 6432, 6848, 6880, 6912, 6944, 6976, 7392, 7424, 7776, 7808, - 7840, 7904, 4545, 4576, 5088, 5536, 6016, 6048, 6080, 6464, 6496, 6528, 7008, - 7072, 7360, 7488, 7520, 7552, 7872, 7936, 7968, 4033, 4064, 5056, 5568, 6112, - 6560, 6592, 6624, 7040, 7104, 7136, 7616, 7648, 8000, 8032, 8160, 5601, 7456, - 7584, 8097, 8065, 8128}; -const int16 huff_cwords13[] = -{1, 3, 5, 4, 14, 12, 15, 13, 21, 19, 23, 22, 20, 16, 34, 31, 26, 36, 37, 35, 27, - 20, 51, 46, 42, 44, 33, 31, 24, 59, 49, 29, 61, 56, 60, 57, 58, 50, 47, 45, 34, - 43, 30, 25, 71, 52, 32, 24, 77, 65, 40, 30, 79, 73, 64, 43, 97, 75, 54, 96, 76, - 70, 78, 74, 72, 56, 44, 55, 53, 41, 37, 35, 33, 31, 25, 23, 68, 52, 31, 40, 27, - 76, 56, 37, 26, 114, 91, 73, 55, 93, 84, 77, 58, 29, 115, 94, 90, 79, 69, 95, - 92, 85, 78, 72, 44, 59, 54, 57, 42, 53, 38, 34, 32, 28, 21, 67, 44, 35, 22, 14, - 33, 31, 41, 48, 79, 83, 71, 50, 91, 90, 86, 73, 87, 78, 61, 46, 66, 82, 72, 47, - 70, 60, 51, 36, 39, 49, 30, 45, 34, 23, 20, 16, 15, 43, 19, 42, 16, 25, 14, 53, - 23, 74, 49, 59, 38, 77, 65, 51, 54, 37, 81, 76, 57, 80, 58, 21, 55, 26, 34, 75, - 52, 64, 56, 50, 48, 39, 36, 35, 17, 24, 41, 17, 36, 15, 44, 30, 54, 37, 18, 55, - 22, 23, 48, 40, 49, 45, 31, 19, 12, 21, 16, 27, 25, 20, 11, 20, 16, 11, 26, 27, - 14, 9, 52, 28, 18, 15, 7, 53, 13, 10, 6, 29, 17, 12, 43, 42, 39, 38, 7, 17, 9, - 5, 10, 6, 3, 4, 2, 16, 8, 1, 22, 23, 1, 1, 1, 0}; - -/* Table 15 */ -const int16 huff_symbols15[] = -{3, 544, 33, 512, 65, 576, 1024, 1056, 1088, 609, 1120, 1536, 1568, 1600, 2080, - 97, 128, 640, 672, 1152, 1184, 1632, 1664, 2048, 2112, 2144, 2592, 2624, 3104, - 161, 704, 736, 768, 1216, 1248, 1280, 1696, 1728, 2176, 2208, 2560, 2656, 2688, - 2720, 3136, 3168, 3200, 3616, 3648, 4128, 4160, 4640, 193, 224, 256, 800, 832, - 1312, 1344, 1760, 1792, 1824, 2240, 2272, 2304, 2336, 2752, 2784, 2816, 2848, - 3072, 3232, 3264, 3296, 3328, 3584, 3680, 3712, 3744, 3776, 4096, 4192, 4224, - 4256, 4288, 4608, 4672, 4704, 4736, 4768, 5152, 5184, 5216, 5664, 5696, 5728, - 6208, 289, 320, 864, 896, 928, 1376, 1408, 1856, 1888, 1920, 2368, 2400, 2432, - 2880, 2912, 3360, 3392, 3424, 3808, 3840, 3872, 3904, 3936, 4320, 4352, 4384, - 4416, 4800, 4832, 4864, 5120, 5248, 5280, 5312, 5344, 5376, 5632, 5760, 5792, - 5824, 5856, 6176, 6240, 6272, 6304, 6688, 6720, 6752, 6784, 353, 384, 416, 960, - 992, 1440, 1472, 1504, 1952, 1984, 2016, 2464, 2496, 2528, 2944, 2976, 3008, - 3456, 3488, 3968, 4000, 4032, 4448, 4480, 4896, 4928, 4960, 4992, 5408, 5440, - 5472, 5504, 5888, 5920, 5952, 5984, 6144, 6336, 6368, 6400, 6432, 6464, 6496, - 6656, 6816, 6848, 6880, 6912, 7200, 7232, 7264, 7296, 7328, 7360, 7392, 7712, - 7744, 7776, 7808, 7840, 7872, 449, 3040, 3520, 3552, 4064, 4512, 4544, 4576, - 5024, 5056, 5088, 5536, 5600, 6016, 6048, 6080, 6528, 6560, 6944, 6976, 7008, - 7040, 7072, 7168, 7424, 7456, 7488, 7520, 7616, 7680, 7904, 7936, 7968, 8000, - 8032, 481, 5568, 6112, 6592, 6624, 7104, 7136, 7552, 7584, 7648, 8064, 8096, - 8128, 8160}; -const int16 huff_cwords15[] = -{7, 5, 12, 13, 18, 16, 19, 17, 15, 27, 24, 29, 28, 25, 22, 53, 47, 46, 36, 41, - 34, 43, 39, 52, 42, 40, 37, 35, 32, 76, 61, 51, 42, 59, 48, 40, 63, 55, 67, 57, - 77, 66, 58, 52, 60, 56, 50, 53, 49, 43, 41, 34, 124, 108, 89, 70, 52, 64, 50, - 93, 76, 59, 95, 79, 72, 57, 91, 74, 62, 48, 125, 92, 78, 65, 55, 109, 94, 88, - 75, 66, 90, 77, 73, 63, 56, 71, 67, 60, 58, 49, 53, 51, 47, 42, 40, 37, 30, - 123, 108, 83, 65, 41, 78, 62, 93, 72, 54, 89, 69, 49, 79, 63, 87, 71, 51, 122, - 91, 73, 56, 42, 92, 77, 66, 47, 88, 76, 67, 109, 90, 82, 58, 57, 48, 86, 70, - 64, 52, 43, 68, 55, 50, 46, 44, 39, 38, 34, 119, 107, 81, 59, 36, 80, 56, 33, - 75, 50, 29, 66, 46, 27, 90, 62, 40, 73, 51, 64, 44, 21, 67, 48, 106, 71, 54, - 38, 72, 57, 41, 23, 70, 55, 42, 25, 118, 74, 65, 49, 39, 24, 16, 91, 63, 52, - 45, 31, 60, 58, 53, 47, 43, 32, 22, 37, 34, 30, 28, 20, 17, 122, 38, 70, 30, - 25, 53, 36, 20, 39, 23, 15, 27, 9, 29, 18, 11, 22, 13, 52, 28, 19, 14, 8, 123, - 37, 24, 17, 12, 2, 71, 26, 21, 16, 10, 6, 63, 62, 11, 14, 7, 9, 3, 15, 10, 1, - 8, 6, 2, 0}; - -/* Table 16 */ -const int16 huff_symbols16[] = -{1, 514, 33, 544, 66, 576, 1024, 1056, 609, 1088, 1568, 97, 640, 992, 1120, - 1536, 1600, 2080, 2592, 7712, 7744, 8160, 129, 160, 480, 672, 704, 736, 1152, - 1184, 1504, 1632, 1664, 2048, 2112, 2144, 2528, 2560, 2624, 2656, 3104, 3136, - 3616, 7680, 7776, 7808, 193, 224, 768, 800, 832, 1216, 1248, 1312, 1696, 1728, - 1760, 2016, 2176, 2208, 2688, 3040, 3072, 3168, 3552, 3584, 3648, 3680, 4064, - 4096, 4128, 4160, 4576, 4640, 4672, 5184, 5600, 7840, 7872, 7904, 257, 288, - 320, 864, 928, 1280, 1344, 1376, 1408, 1792, 1824, 2240, 2272, 2304, 2720, - 2752, 2816, 3200, 3232, 3264, 3296, 3712, 3744, 3776, 4192, 4224, 4256, 4608, - 4704, 4736, 5088, 5120, 5152, 5216, 5664, 5696, 5728, 6112, 6624, 7136, 7232, - 7648, 7936, 7968, 8000, 8032, 8064, 8096, 8128, 353, 384, 416, 896, 960, 1440, - 1472, 1856, 1888, 1920, 2336, 2368, 2400, 2784, 2848, 2880, 3328, 3360, 3392, - 3424, 3808, 3840, 4288, 4320, 4768, 4800, 5248, 5280, 5312, 5344, 5632, 5760, - 5792, 6144, 6176, 6208, 6240, 6272, 6688, 6720, 6752, 7264, 449, 1952, 1984, - 2432, 2464, 2496, 2912, 2944, 2976, 3456, 3488, 3872, 3904, 3936, 3968, 4352, - 4384, 4416, 4448, 4832, 4864, 4896, 4928, 4992, 5056, 5376, 5824, 6048, 6304, - 6336, 6368, 6400, 6784, 6816, 7168, 7200, 7360, 3009, 3520, 4480, 4512, 4544, - 4960, 5024, 5408, 5440, 5472, 5568, 5856, 5888, 5920, 5952, 5984, 6016, 6080, - 6464, 6496, 6528, 6560, 6656, 6848, 6880, 6912, 7296, 7328, 7392, 7424, 7616, - 4001, 4032, 5504, 5536, 6432, 6976, 7008, 7040, 7104, 7456, 7520, 7584, 6593, - 6944, 7488, 7073, 7552}; -const int16 huff_cwords16[] = -{1, 3, 5, 4, 14, 12, 15, 13, 20, 23, 21, 44, 35, 9, 38, 45, 39, 36, 30, 10, 7, - 3, 74, 63, 17, 62, 53, 47, 67, 58, 16, 69, 64, 75, 68, 65, 9, 66, 59, 56, 54, - 52, 48, 12, 11, 10, 110, 93, 83, 75, 68, 103, 90, 72, 114, 99, 87, 26, 115, - 101, 102, 16, 111, 100, 10, 98, 91, 88, 8, 85, 84, 81, 7, 76, 73, 67, 4, 17, - 11, 9, 172, 149, 138, 119, 107, 161, 127, 117, 110, 158, 140, 179, 164, 155, - 185, 173, 142, 184, 178, 160, 133, 165, 157, 148, 159, 156, 143, 154, 141, 131, - 11, 139, 129, 125, 120, 118, 115, 6, 4, 2, 102, 0, 13, 12, 10, 7, 5, 3, 1, 242, - 225, 195, 201, 207, 209, 206, 252, 212, 199, 264, 246, 226, 265, 253, 232, 257, - 244, 228, 217, 261, 248, 260, 249, 256, 245, 247, 233, 229, 219, 243, 227, 223, - 202, 224, 222, 218, 216, 211, 210, 208, 187, 376, 387, 365, 395, 382, 362, 400, - 388, 378, 385, 366, 407, 397, 372, 380, 427, 401, 392, 383, 426, 406, 394, 384, - 359, 352, 393, 396, 223, 389, 386, 381, 364, 370, 379, 377, 369, 358, 445, 715, - 727, 713, 708, 735, 710, 743, 737, 720, 439, 746, 742, 736, 721, 712, 706, 436, - 443, 707, 440, 437, 747, 734, 723, 714, 726, 722, 711, 709, 434, 889, 884, 885, - 882, 888, 883, 877, 876, 865, 866, 871, 870, 1728, 1735, 1734, 3459, 3458}; - -/* Table 24 */ -const int16 huff_symbols24[] = -{4, 32, 512, 544, 8160, 577, 1056, 65, 608, 1024, 1088, 1568, 97, 640, 1120, - 1152, 1504, 1536, 1600, 1632, 2016, 2080, 2112, 2528, 2592, 3040, 3552, 7712, - 7744, 7776, 7808, 7840, 7872, 7904, 7936, 7968, 8000, 129, 672, 704, 992, 1184, - 1216, 1664, 1696, 1728, 2048, 2144, 2176, 2208, 2240, 2624, 2656, 2688, 2720, - 3104, 3136, 3168, 3200, 3616, 3648, 3680, 4064, 4576, 5088, 5600, 6112, 6624, - 7136, 7648, 7680, 8032, 8064, 8096, 8128, 161, 192, 480, 736, 768, 800, 1248, - 1280, 1312, 1344, 1760, 1792, 1824, 1856, 2272, 2304, 2336, 2560, 2752, 2784, - 2816, 2848, 3072, 3232, 3264, 3296, 3328, 3712, 3744, 3776, 3808, 4128, 4160, - 4192, 4224, 4256, 4288, 4320, 4352, 4640, 4672, 4704, 4736, 4768, 4800, 5152, - 5184, 5216, 5248, 5696, 5728, 5760, 225, 256, 832, 864, 896, 928, 960, 1376, - 1408, 1440, 1888, 1920, 1952, 1984, 2368, 2400, 2432, 2464, 2880, 2912, 2944, - 2976, 3008, 3360, 3392, 3424, 3456, 3488, 3584, 3840, 3872, 3904, 3936, 3968, - 4096, 4384, 4416, 4448, 4480, 4608, 4832, 4864, 4896, 4928, 4960, 5280, 5312, - 5344, 5376, 5408, 5440, 5664, 5792, 5824, 5856, 5888, 5920, 5952, 6176, 6208, - 6240, 6272, 6304, 6336, 6368, 6400, 6432, 6688, 6720, 6752, 6784, 6816, 6848, - 6880, 7200, 7232, 7264, 7296, 7328, 7360, 289, 320, 352, 384, 416, 1472, 2496, - 3520, 4000, 4032, 4512, 4544, 4992, 5024, 5056, 5120, 5472, 5504, 5536, 5568, - 5632, 5984, 6016, 6048, 6080, 6144, 6464, 6496, 6528, 6560, 6592, 6656, 6912, - 6944, 6976, 7008, 7040, 7072, 7104, 7392, 7424, 7456, 7488, 7520, 7552, 7584, - 7616, 449, 7168}; -const int16 huff_cwords24[] = -{15, 13, 14, 12, 3, 21, 22, 46, 38, 47, 41, 39, 80, 71, 74, 68, 18, 81, 75, 70, - 16, 72, 69, 14, 66, 12, 10, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 146, 130, 122, - 42, 128, 120, 134, 125, 116, 147, 135, 127, 118, 112, 129, 126, 119, 114, 123, - 121, 117, 113, 115, 111, 109, 17, 16, 11, 10, 6, 4, 2, 0, 43, 7, 5, 3, 1, 262, - 248, 88, 216, 209, 198, 221, 207, 194, 182, 220, 204, 190, 178, 210, 200, 188, - 263, 214, 202, 192, 180, 249, 215, 206, 195, 185, 211, 203, 196, 187, 212, 208, - 205, 201, 193, 186, 177, 169, 199, 197, 191, 189, 181, 174, 184, 183, 179, 175, - 171, 168, 164, 434, 426, 327, 345, 319, 297, 279, 340, 315, 295, 325, 311, 293, - 271, 352, 323, 306, 285, 341, 317, 301, 281, 262, 347, 330, 308, 291, 272, 435, - 353, 332, 313, 298, 283, 427, 320, 303, 286, 268, 335, 333, 321, 305, 289, 275, - 344, 331, 314, 304, 290, 277, 346, 318, 309, 299, 287, 276, 263, 322, 316, 312, - 307, 302, 292, 284, 269, 261, 300, 296, 294, 288, 282, 273, 266, 280, 278, 274, - 267, 264, 259, 669, 653, 649, 621, 517, 541, 540, 520, 531, 381, 514, 377, 521, - 379, 371, 668, 530, 383, 373, 366, 652, 513, 375, 368, 362, 648, 512, 376, 370, - 364, 359, 620, 515, 380, 374, 369, 365, 361, 357, 382, 378, 372, 367, 363, 360, - 358, 356, 1032, 1033}; - -/* Table 32 */ -const int16 huff_symbols32[] = -{1, 35, 64, 128, 256, 97, 192, 288, 320, 384, 161, 224, 352, 416, 448, 480}; -const int16 huff_cwords32[] = {1, 5, 4, 6, 7, 5, 4, 3, 6, 7, 5, 4, 0, 2, 3, 1}; - -/* - Purpose: Pre-emphasis table. - Explanation: - */ -const uint8 pretab[22] = {0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0}; - -/* - Purpose: Scalefactor band boundaries. - Explanation: - */ -const SFBAND_DATA sfBandIndex[9] = {{ - /* MPEG-2 LSF */ -{0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, -{0,4,8,12,18,24,32,42,56,74,100,132,174,192}}, /* 22050 Hz */ -{ -{0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576}, -{0,4,8,12,18,26,36,48,62,80,104,136,180,192}}, /* 24000 Hz */ -{ -{0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, -{0,4,8,12,18,26,36,48,62,80,104,134,174,192}}, /* 16000 Hz */ -{ - /* MPEG-1 */ -{0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576}, -{0,4,8,12,16,22,30,40,52,66,84,106,136,192}}, /* 44100 Hz */ -{ -{0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576}, - {0,4,8,12,16,22,28,38,50,64,80,100,126,192}}, /* 48000 Hz */ -{ -{0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576}, - {0,4,8,12,16,22,30,42,58,78,104,138,180,192}}, /* 32000 Hz */ -{ - /* MPEG-2.5 */ -{0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, -{0,4,8,12,18,26,36,48,62,80,104,134,174,192}}, /* 11025 Hz */ -{ -{0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, - {0,4,8,12,18,26,36,48,62,80,104,134,174,192}}, /* 12000 Hz */ -{ -{0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576}, - {0,8,16,24,36,52,72,96,124,160,162,164,166,192}}}; /* 8000 Hz */ - -/* Frame length of each sampling frequency. */ -const int32 framelength[6] = {26, 24, 36, 52, 48, 72}; - -const int32 s_freq[3][4] = { {22050, 24000, 16000, 0}, {44100L, 48000L, 32000, 0}, - {11025, 12000, 8000, 0}}; - -const int16 bitrate[2][15] = { -/* Bit rates for MPEG-2 LSF. */ -{ 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160}, -/* Bit rates for MPEG-1. */ -{ 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320} -}; - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/inc/mp3tool.h --- a/videoeditorengine/mp3aacManipLib/MP3Gain/inc/mp3tool.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - mp3tool.h - Interface to MP3 core structures. - - Author(s): Juha Ojanpera - Copyright (c) 2004 by Nokia Research Center, Audio-Visual Systems. - *************************************************************************/ - -#ifndef MP3TOOL_H_ -#define MP3TOOL_H_ - -/*-- Project Headers. --*/ -#include "nok_bits.h" -#include "mpaud.h" - -/* - * Low level implementations for the mp3 engine. - */ - -/*-- Implementations defined in module 'layer3.cpp'. --*/ -BOOL III_get_side_info(CMPAudDec *mp, TBitStream *bs); -void III_get_scale_factors(CMP_Stream *mp, int16 gr, int16 ch); -void L3WriteSideInfo(TBitStream *bs, CIII_Side_Info *sideInfo, TMPEG_Header *header); - -/*-- Implementations defined in module 'l3huffman.cpp'. */ -void InitL3Huffman(CHuffman *huf); -int16 III_huffman_decode(CMPAudDec *mp, int16 gr, int16 ch, int32 part2); - -/*-- Implementations defined in module 'l3sfb.cpp'. */ -void III_SfbDataInit(CIII_SfbData *sfbData, TMPEG_Header *header); - -#endif /*-- MP3TOOL_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/inc/mpaud.h --- a/videoeditorengine/mp3aacManipLib/MP3Gain/inc/mpaud.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - mpaud.h - Interface for the mp3 decoder core. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef MP_AUD_H_ -#define MP_AUD_H_ - -/************************************************************************** - External Objects Needed - *************************************************************************/ - -/*-- Project Headers --*/ -#include "nok_bits.h" -#include "defines.h" -#include "auddef.h" -#include "mpif.h" -#include "Mp3API.h" - -/************************************************************************** - External Objects Provided - *************************************************************************/ - -/************************************************************************** - Common structure definitions for all layers - *************************************************************************/ - -/* - Purpose: Parent Structure for mp1, mp2, and mp3 frames. - Explanation: - */ -class CMPAudDec; -class TMpTransportHandle; - -int16 -L3BitReservoir(CMPAudDec *mp); - -uint8 -GetLayer3Version(TMpTransportHandle *tHandle); - -#endif /*-- MP_AUD_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/inc/mpheader.h --- a/videoeditorengine/mp3aacManipLib/MP3Gain/inc/mpheader.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - mpheader.h - MPEG-1 and MPEG-2 bit field (header) parsing functions. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef MPHEADER_H_ -#define MPHEADER_H_ - -/*-- Project Headers. --*/ -#include "mpaud.h" -#include "mp3tables.h" -#include "defines.h" - -/* Checks whether window switching is used in layer III. */ -inline BOOL win_switch(TGranule_Info *gr_info) -{ return ((BOOL)(gr_info->flags & WINDOW_SWITCHING_FLAG)); } - -/* Checks whether short blocks are used in layer III. */ -inline BOOL short_block(TGranule_Info *gr_info) -{ return ((gr_info->flags & 3) == 2); } - -/* Checks whether mixed blocks are present in layer III. */ -inline BOOL mixed_block(TGranule_Info *gr_info) -{ return ((BOOL)(gr_info->flags & MIXED_BLOCK_FLAG)); } - -/* Checks whether 'scalefac_scale' bit is set in layer III. */ -inline BOOL scalefac_scale(TGranule_Info *gr_info) -{ return ((BOOL)((gr_info->flags & SCALEFAC_SCALE) ? 1 : 0)); } - -/* Returns the status of 'pre_flag' bit of layer III. */ -inline BOOL pre_flag(TGranule_Info *gr_info) -{ return ((BOOL)((gr_info->flags & PRE_FLAG) ? 1 : 0)); } - -/*-- Common header parsing functions. --*/ - -/* MPEG-1 or MPEG-2 */ -inline int16 version(TMPEG_Header *mpheader) -{return ((BOOL)((mpheader->header >> 19) & 1));} - -/* Checks whether the current stream is of type MPEG-2.5. */ -inline BOOL mp25version(TMPEG_Header *mpheader) -{ return ((BOOL)((mpheader->header & 0x100000) ? FALSE : TRUE)); } - -/* Layer (1, 2 or 3) */ -inline int16 layer_number(TMPEG_Header *mpheader) -{ return (int16)((4 - (mpheader->header >> 17) & 3)); } - -/* Checks if error protection is used in the bitstream. */ -inline BOOL error_protection(TMPEG_Header *mpheader) -{ return (!((mpheader->header >> 16) & 1)); } - -/* Sampling frequency index */ -inline int16 sfreq(TMPEG_Header *mpheader) -{ return (int16)((mpheader->header >> 10) & 3);} - -/* Checks whether padding bit is set. */ -inline BOOL padding(TMPEG_Header *mpheader) -{ return (BOOL)((mpheader->header >> 9) & 1); } - -/* Checks if private bit is set. */ -inline BOOL private_bit(TMPEG_Header *mpheader) -{ return (BOOL)((mpheader->header >> 8) & 1); } - -/* Mono, stereo, joint or dual */ -inline int16 mode(TMPEG_Header *mpheader) -{ return (int16)((mpheader->header >> 6) & 3); } - -/* Value of mode extension field */ -inline int16 mode_extension(TMPEG_Header *mpheader) -{ return (int16)((mpheader->header >> 4) & 3); } - -/* Checks whether copyright bit is set. */ -inline BOOL copyright(TMPEG_Header *mpheader) -{ return (BOOL)((mpheader->header >> 3) & 1); } - -/* Checks whether original bit. */ -inline BOOL original(TMPEG_Header *mpheader) -{ return (BOOL)((mpheader->header >> 2) & 1); } - -/* Value of bitrate field */ -inline int16 bit_rate_idx(TMPEG_Header *mpheader) -{ return ((int16)((mpheader->header >> 12) & 0xF)); } - -/* Bitrate */ -inline int16 bit_rate(TMPEG_Header *mpheader) -{ return (bitrate[version(mpheader)][(int16)((mpheader->header >> 12) & 0xF)]); } - -/* Number of channels; 1 for mono, 2 for stereo */ -inline int16 channels(TMPEG_Header *mpheader) -{ return ((int16)((mode(mpheader) == MPG_MD_MONO) ? (int16)1 : (int16)2));} - -inline const int16 *GetBitRateTable(TMPEG_Header *mpheader) -{ return (&bitrate[version(mpheader)][0]); } - -/* Sampling frequency */ -inline int32 frequency(TMPEG_Header *mpheader) -{ return (s_freq[(mpheader->header & 0x100000) ? version(mpheader):2][sfreq(mpheader)]); } - -/* Frame length in milliseconds */ -inline int32 GetFrameTime(TMPEG_Header *mpheader) -{ return (framelength[sfreq(mpheader) + (mp25version(mpheader)) * 3]); } - -#endif /* MPHEADER_H_ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/inc/mpif.h --- a/videoeditorengine/mp3aacManipLib/MP3Gain/inc/mpif.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - mpif.h - Interchange format interface for MPEG Layer I/II/III. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef MP_AIF_H_ -#define MP_AIF_H_ - -/*-- Project Headers. --*/ -#include "defines.h" -#include "auddef.h" -#include "mstream.h" -#include "MP3API.h" -#include "AACAPI.h" - - -/* - Purpose: Parent structure for error checking. - Explanation: The number of bits that are protected varies between different - versions (MPEG-1, MPEG-2). */ -/* -typedef struct CRC_Check -{ - uint8 bufLen; // Length of 'crc_payload' - int16 crc; // CRC error-check word. - -} CRC_Check; -*/ - - - -/* - * Implemented interfaces. - */ -class TMpTransportHandle; - -void -mpInitTransport(TMpTransportHandle *tHandle); - -SEEK_STATUS -mpSyncTransport(TMpTransportHandle *tHandle, uint8 *syncBuf, - uint32 syncBufLen, uint32 *readBits); - -int16 -GetSideInfoSlots(TMpTransportHandle *tHandle); - -int16 -GetSideInfoSlots(TMPEG_Header *header); - -int16 -MP_SeekSync(TMpTransportHandle *tHandle, uint8 *syncBuf, - uint32 syncBufLen, int16 *readBytes, - int16 *frameBytes, int16 *headerBytes, - uint8 initMode); - -int16 -MP_FreeMode(TMpTransportHandle *tHandle, uint8 *syncBuf, - uint32 syncBufLen, int16 *readBytes, - int16 *frameBytes, int16 *headerBytes); - -int16 -MP_EstimateBitrate(TMpTransportHandle *tHandle, uint8 isVbr); - -uint32 -MP_FileLengthInMs(TMpTransportHandle *tHandle, int32 fileSize); - -int32 -MP_GetSeekOffset(TMpTransportHandle *tHandle, int32 seekPos); - -int32 -MP_GetFrameTime(TMpTransportHandle *tHandle); - - - -#endif /*-- MP_AIF_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/inc/param.h --- a/videoeditorengine/mp3aacManipLib/MP3Gain/inc/param.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef DECPARAM_H_ -#define DECPARAM_H_ - -/*-- Project Headers --*/ -#include "defines.h" - -/* - Purpose: The # of filter branches of the polyphase filterbank - to be discarded. By default 2 lowest and highest branches - will be discarded. - Explanation: - */ -#define WINDOW_PRUNING_START_IDX 2 - -/* - Purpose: Parameters that control the decoding complexity. - Explanation: - */ -typedef struct Out_ComplexityStr -{ - BOOL no_antialias; /* If TRUE, no alias-reduction is performed. */ - int16 subband_pairs; /* # of subband pairs for alias-reduction. */ - int16 imdct_subbands; /* # of IMDCT subbands. */ - -} Out_Complexity; - -/* - Purpose: Parameters that control the output stream. - Explanation: - */ -typedef struct Out_ParamStr -{ - int32 sampling_frequency; /* Output sampling frequency. */ - int16 num_out_channels; /* # of output channels. */ - int16 decim_factor; /* Decimation factor. */ - int16 num_samples; /* # of output samples per subband. */ - int16 num_out_samples; /* Total # of output samples per frame. */ - - /* - * Specifies how many window coefficients are discarded from the synthesis - * window. In units of 'SBLIMIT' samples. The start index can vary - * between 0 and 'NUM_SUBWIN', but if you don't want to reduce the overall - * audio quality, the default value 2 (or 0) should be used. - */ - int16 window_pruning_idx; - int16 num_subwindows; - int16 window_offset; - -} Out_Param; - -/* - Purpose: Mapping of above structures into one common structure. - Explanation: - */ -typedef struct Out_InfoStr -{ - Out_Param *out_param; - Out_Complexity *out_complex; - -} Out_Info; - -#endif /* DECPARAM_H_ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/src/l3huffman.cpp --- a/videoeditorengine/mp3aacManipLib/MP3Gain/src/l3huffman.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,378 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - l3huffman.cpp - Huffman decoding subroutines for layer III. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/************************************************************************** - External Objects Needed - *************************************************************************/ - -/*-- Project Headers --*/ -#include "mpaud.h" -#include "mp3tables.h" - -/************************************************************************** - Internal Objects - *************************************************************************/ - -/* - Purpose: Table to hold the Huffman symbol codebooks. - Explanation: - -const int16 *huff_symbols_tbl[] = { -NULL, huff_symbols1, huff_symbols2, huff_symbols3, NULL, huff_symbols5, -huff_symbols6, huff_symbols7, huff_symbols8, huff_symbols9, huff_symbols10, -huff_symbols11, huff_symbols12, huff_symbols13, NULL, huff_symbols15, -huff_symbols16, huff_symbols24, huff_symbols32}; - - - Purpose: Table to hold the Huffman codeword codebooks. - Explanation: - - -const int16 *huff_cwords_tbl[] = { -NULL, huff_cwords1, huff_cwords2, huff_cwords3, NULL, huff_cwords5, -huff_cwords6, huff_cwords7, huff_cwords8, huff_cwords9, huff_cwords10, -huff_cwords11, huff_cwords12, huff_cwords13, NULL, huff_cwords15, huff_cwords16, -huff_cwords24, huff_cwords32}; -*/ - -/************************************************************************** - Title : InitL3Huffman - - Purpose : Allocates resources for layer III Huffman decoding. - - Usage : InitL3Huffman(huf) - - Output : huf - Huffman tables - - Author(s) : Juha Ojanpera - *************************************************************************/ - -void -InitL3Huffman(CHuffman *huf) -{ - int16 i, j; - - - /* - Purpose: Table to hold the Huffman symbol codebooks. - Explanation: - */ -const int16 *huff_symbols_tbl[] = { -NULL, huff_symbols1, huff_symbols2, huff_symbols3, NULL, huff_symbols5, -huff_symbols6, huff_symbols7, huff_symbols8, huff_symbols9, huff_symbols10, -huff_symbols11, huff_symbols12, huff_symbols13, NULL, huff_symbols15, -huff_symbols16, huff_symbols24, huff_symbols32}; - -/* - Purpose: Table to hold the Huffman codeword codebooks. - Explanation: - */ -const int16 *huff_cwords_tbl[] = { -NULL, huff_cwords1, huff_cwords2, huff_cwords3, NULL, huff_cwords5, -huff_cwords6, huff_cwords7, huff_cwords8, huff_cwords9, huff_cwords10, -huff_cwords11, huff_cwords12, huff_cwords13, NULL, huff_cwords15, huff_cwords16, -huff_cwords24, huff_cwords32}; - - - for(i = 0; i < 33; i++) - { - huf[i].tree_len = huf_tree_len[i]; - huf[i].linbits = linbits[i]; - } - - for(i = 0; i < 16; i++) - { - huf[i].codeword = huff_cwords_tbl[i]; - huf[i].packed_symbols = huff_symbols_tbl[i]; - } - - j = i; - while(j < 24) - { - huf[j].codeword = huff_cwords_tbl[i]; - huf[j].packed_symbols = huff_symbols_tbl[i]; - j++; - } - - i++; - while(j < 32) - { - huf[j].codeword = huff_cwords_tbl[i]; - huf[j].packed_symbols = huff_symbols_tbl[i]; - j++; - } - - i++; - huf[j].codeword = huff_cwords_tbl[i]; - huf[j].packed_symbols = huff_symbols_tbl[i]; -} - - -/************************************************************************** - Title : L3decode_codeword - - Purpose : Decodes one Huffman codeword from the bitstream and returns - the corresponding symbol. - - Usage : L3decode_codeword(br, h) - - Input : br - bitstream parameters - h - Huffman table to be utilized - - Explanation : This decoding routine works only if the codewords are - sorted according to their length, i.e, the codeword that has - the minimum length appears first in the Huffman table, the - length of the second codeword in the table is either greater - or equal than the first one and so on. - - Author(s) : Juha Ojanpera - *************************************************************************/ - -INLINE int16 -L3decode_codeword(TBitStream *br, CHuffman *h) -{ - const int16 *h_len = h->packed_symbols; - const int16 *h_codeword = h->codeword; - uint16 clen, items; - uint16 shift, N = 19; /* N = 19 maximum codeword length */ - uint32 cand_codeword; - uint32 codeword; - - /* Read the maximum codeword. */ - cand_codeword = BsLookAhead(br, N); - - /* - * Length of the codeword that has the - * highest probability. - */ - shift = N - (*h_len & 31); - - /* Candidate codeword for the first codebook entry. */ - codeword = cand_codeword >> shift; - - /* - * Sequentially goes through the whole Huffman table - * until a match has been found. - */ - items = 1; - while(items < h->tree_len && codeword != (uint16)*h_codeword) - { - h_len++; - h_codeword++; - items++; - - /* How many bits the codeword need to be updated. */ - clen = *h_len & 31; - if(clen) - { - shift -= clen; - - /* New candidate codeword. */ - codeword = cand_codeword >> shift; - } - } - - /* # of bits actually read. */ - BsSkipNBits(br, N - shift); - - /* Decoded Huffman symbol. */ - return (*h_len >> 5); -} - -/************************************************************************** - Layer III subroutines for decoding spectral samples. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -int16 -III_huffman_decode(CMP_Stream *mp, int16 gr, int16 ch, int32 part2) -{ - int16 i, x, region1Start, region2Start, table_num, limit; - int16 *quant, count1Len; - TGranule_Info *gr_info; - - /* Quantized spectral samples. */ - quant = mp->frame->ch_quant[ch]; - - /* Granule info for this frame. */ - gr_info = mp->side_info->ch_info[ch]->gr_info[gr]; - - /* Find region boundaries. */ - region1Start = mp->side_info->sfbData->sfbLong[gr_info->region0_count + 1]; - region2Start = mp->side_info->sfbData->sfbLong[gr_info->region0_count + - gr_info->region1_count + 2]; - - /* - * How many samples actually need to be Huffman decoded. - */ - limit = mp->side_info->sfbData->bandLimit; - if(gr_info->big_values > limit) - gr_info->big_values = limit; - - /* Read bigvalues area. */ - int16 section1 = MIN(gr_info->big_values, region1Start); - if(section1 > 0) - { - pairtable(mp, section1, gr_info->table_select[0], quant); - quant += section1; - } - - int16 section2 = MIN(gr_info->big_values, region2Start) - region1Start; - if(section2 > 0) - { - pairtable(mp, section2, gr_info->table_select[1], quant); - quant += section2; - } - - int16 section3 = gr_info->big_values - region2Start; - if(section3 > 0) - { - pairtable(mp, section3, gr_info->table_select[2], quant); - quant += section3; - } - - count1Len = 0; - i = gr_info->big_values; - part2 += gr_info->part2_3_length; - - /* Check whether the samples between -1,...,1 need to be Huffman decoded. */ - if(i < limit) - { - /* Read count1 area. */ - table_num = 32 + ((gr_info->flags & COUNT_1_TABLE_SELECT) ? 1 : 0); - - x = quadtable(mp, i, part2, table_num, quant, limit); - count1Len = x - i; - quant += count1Len; - count1Len >>= 2; - i = x; - } - - if(BsGetBitsRead(mp->br) > (uint32)part2) - { - count1Len--; - quant -= 4; i -= 4; - BsRewindNBits(mp->br, BsGetBitsRead(mp->br) - part2); - } - - /* Dismiss stuffing Bits */ - if(BsGetBitsRead(mp->br) < (uint32)part2) - BsSkipNBits(mp->br, part2 - BsGetBitsRead(mp->br)); - - gr_info->zero_part_start = (i < limit) ? i : limit; - - return (count1Len); -} - -void -pairtable(CMP_Stream *mp, int16 section_length, int16 table_num, int16 *quant) -{ - register CHuffman *h = &mp->huffman[table_num]; - - if(h->tree_len == 0) - Mem::Fill(quant, section_length << 1 /** sizeof(int16)*/, 0); - else - { - if(h->linbits) - { - register int16 *q = quant; - - for(int16 i = 0; i < section_length; i += 2, q += 2) - { - uint32 codeword = L3decode_codeword(mp->br, h); - - /* Unpack coefficients. */ - *q = codeword >> 4; - q[1] = codeword & 15; - - /* Read extra bits (if needed) and sign bits (if needed). */ - if(*q == 15) - *q += BsGetBits(mp->br, h->linbits); - if(*q) - *q = (BsGetBits(mp->br, 1)) ? -*q : *q; - - if(q[1] == 15) - q[1] += BsGetBits(mp->br, h->linbits); - if(q[1]) - q[1] = (BsGetBits(mp->br, 1)) ? -q[1] : q[1]; - } - } - else /* no linbits */ - { - register int16 *q = quant; - - for(int16 i = 0; i < section_length; i += 2, q += 2) - { - uint32 codeword = L3decode_codeword(mp->br, h); - - /* Unpack coefficients. */ - *q = codeword >> 4; - q[1] = codeword & 15; - - /* Read extra bits (not needed) and sign bits (if needed). */ - if(*q) - *q = (BsGetBits(mp->br, 1)) ? -*q : *q; - - if(q[1]) - q[1] = (BsGetBits(mp->br, 1)) ? -q[1] : q[1]; - } - } - } -} - -int16 -quadtable(CMP_Stream *mp, int16 start, int16 part2, int16 table_num, int16 *quant, - int16 max_sfb_bins) -{ - int16 i; - register int16 *q = quant; - - for(i = start; (BsGetBitsRead(mp->br) < (uint32)part2 && i < max_sfb_bins); - i += 4, q += 4) - { - uint32 codeword; - uint16 mask = 8, sbits = 0; - - if(table_num == 33) - codeword = 15 - BsGetBits(mp->br, 4); - else - codeword = L3decode_codeword(mp->br, &mp->huffman[table_num]); - - /* Unpack coefficients. */ - *q = (codeword >> 3) & 1; - q[1] = (codeword >> 2) & 1; - q[2] = (codeword >> 1) & 1; - q[3] = codeword & 1; - - /* Sign bits. */ - codeword = BsLookAhead(mp->br, 4); - if(*q) { sbits++; *q = (codeword & mask) ? -*q : *q; mask >>= 1; } - if(q[1]) { sbits++; q[1] = (codeword & mask) ? -q[1] : q[1]; mask >>= 1; } - if(q[2]) { sbits++; q[2] = (codeword & mask) ? -q[2] : q[2]; mask >>= 1; } - if(q[3]) { sbits++; q[3] = (codeword & mask) ? -q[3] : q[3]; mask >>= 1; } - if(sbits) BsSkipBits(mp->br, sbits); - } - - return (i); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/src/l3sfb.cpp --- a/videoeditorengine/mp3aacManipLib/MP3Gain/src/l3sfb.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,171 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - l3sfb.cpp - Scalefactor band (sfb) implementations for layer III. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- Project Headers. --*/ -#include "mp3tables.h" -#include "mpaud.h" -#include "mpheader.h" - -/************************************************************************** - External Objects Needed - *************************************************************************/ - -/************************************************************************** - Internal Objects - *************************************************************************/ - -static const int16 *III_sfbOffsetLong(TMPEG_Header *header); - -static const int16 *III_sfbOffsetShort(TMPEG_Header *header); - -static const int16 *III_sfbWidthTblShort(int16 *sfb_offset, int16 *sfb_width); - -/************************************************************************** - Title : III_SfbDataInit - - Purpose : Initializes the sfb parameters. - - Usage : III_SfbDataInit(sfbData, header) - - Input : sfbData - sfb parameters - header - mp3 header parameters - - Author(s) : Juha Ojanpera - *************************************************************************/ - -void -III_SfbDataInit(CIII_SfbData *sfbData, TMPEG_Header *header) -{ - COPY_MEMORY(sfbData->sfbOffsetLong, III_sfbOffsetLong(header), - (MAX_LONG_SFB_BANDS + 1) * sizeof(int16)); - - sfbData->sfbLong = sfbData->sfbOffsetLong; - - COPY_MEMORY(sfbData->sfbOffsetShort, III_sfbOffsetShort(header), - (MAX_SHORT_SFB_BANDS + 1) * sizeof(int16)); - - sfbData->sfbShort = sfbData->sfbOffsetShort; - - COPY_MEMORY(sfbData->sfbWidthShort, - III_sfbWidthTblShort(sfbData->sfbShort, sfbData->sfbWidthShort), - (MAX_SHORT_SFB_BANDS + 1) * sizeof(int16)); - - sfbData->sfbWidth = sfbData->sfbWidthShort; - - sfbData->bandLimit = MAX_MONO_SAMPLES; -} - -/************************************************************************** - Title : III_BandLimit - - Purpose : Saves the bandlimit value for Huffman decoding. - - Usage : III_BandLimit(sfbData, decim_factor) - - Input : sfbData - sfb parameters - binLimit - number of spectral bins to be decoded from each channel - - Author(s) : Juha Ojanpera - *************************************************************************/ - -void -III_BandLimit(CIII_SfbData *sfbData, uint16 binLimit) -{ - sfbData->bandLimit = binLimit; -} - - -/************************************************************************** - Title : III_sfbOffsetLong - - Purpose : Obtains the scalefactor table for long blocks. - - Usage : y = III_sfbOffsetLong(header) - - Input : header - mp3 header parameters - - Output : y - scalefactor boundaries for long blocks - - Author(s) : Juha Ojanpera - *************************************************************************/ - -const int16 * -III_sfbOffsetLong(TMPEG_Header *header) -{ - int16 fidx, mp25idx = (int16) (6 * mp25version(header)); - - fidx = (int16) (mp25idx + 3 * version(header) + sfreq(header)); - - return (&sfBandIndex[fidx].l[0]); -} - - -/************************************************************************** - Title : III_sfbOffsetShort - - Purpose : Obtains the scalefactor table for short blocks. - - Usage : y = III_sfbOffsetShort(header) - - Input : header - mp3 header parameters - - Output : y - scalefactor boundaries for short blocks - - Author(s) : Juha Ojanpera - *************************************************************************/ - -const int16 * -III_sfbOffsetShort(TMPEG_Header *header) -{ - int16 mp25idx = (int16) (6 * mp25version(header)); - - return (&sfBandIndex[mp25idx + 3 * version(header) + sfreq(header)].s[0]); -} - - -/************************************************************************** - Title : III_sfbWidthTblShort - - Purpose : Obtains the scalefactor width table for short blocks. - - Usage : y = III_sfbWidthTblShort(sfb_offset, sfb_width) - - Input : sfb_offset - offset table of short blocks - sfb_width - address of buffer to receive the sfb widths - - Output : y - sfb width table for short blocks - - Author(s) : Juha Ojanpera - *************************************************************************/ - -const int16 * -III_sfbWidthTblShort(int16 *sfb_offset, int16 *sfb_width) -{ - for(int16 i = 0; i < MAX_SHORT_SFB_BANDS; i++) - sfb_width[i] = (int16) (sfb_offset[i + 1] - sfb_offset[i]); - - return (sfb_width); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/src/layer3.cpp --- a/videoeditorengine/mp3aacManipLib/MP3Gain/src/layer3.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,733 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** -layer3.cpp - MPEG-1, MPEG-2 LSF and MPEG-2.5 layer III bitstream parsing. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. -*************************************************************************/ - -/************************************************************************** -External Objects Needed -*************************************************************************/ - -/*-- Project Headers --*/ -#include "mpaud.h" -#include "mpheader.h" -#include "mp3tables.h" - - - -//uint8 scalefac_buffer[54]; - -/************************************************************************** -Title : III_get_side_info - - Purpose : Reads Layer III side information from the bitstream. - - Usage : y = III_get_side_info(mp, bs) - - Input : mp - MP3 decoder handle - bs - input bitstream - - Output : y - TRUE on success, FALSE otherwise - - Author(s) : Juha Ojanpera -*************************************************************************/ - - -BOOL -III_get_side_info(CMP_Stream *mp, TBitStream *bs) -{ - uint16 i, j, k, flag; - TGranule_Info *gr_info; - - /*-- Get the protected bits for the crc error checking. --*/ - if(bs->dsp_buffer) - { - int16 sideLen = (GetSideInfoSlots(mp->header) >> 1) + 1; - - if(bs->bit_counter == 8) - for(i = bs->buf_index, j = 0; j < sideLen; i++, j++) - { - DSP_BYTE wTmp = bs->dsp_buffer[MOD_OPCODE(i, bs->buf_mask)] << 8; - wTmp |= (bs->dsp_buffer[MOD_OPCODE((i + 1), bs->buf_mask)] >> 8) & 255; - mp->mp3_crc.crc_payload[j + 2] = wTmp; - } - else - for(i = bs->buf_index, j = 0; j < sideLen; i++, j++) - mp->mp3_crc.crc_payload[j + 2] = bs->dsp_buffer[MOD_OPCODE(i, bs->buf_mask)]; - } - - if(version(mp->header) == MPEG_AUDIO_ID) /* MPEG-1 */ - { - mp->side_info->main_data_begin = BsGetBits(bs, 9); - if(channels(mp->header) == 1) - { - mp->side_info->private_bits = BsGetBits(bs, 5); - for(i = 0; i < 4; i++) - mp->side_info->scfsi[0][i] = BsGetBits(bs, 1); - } - else - { - mp->side_info->private_bits = BsGetBits(bs, 3); - for(i = 0; i < 2; i++) - for(j = 0; j < 4; j++) - mp->side_info->scfsi[i][j] = int16(BsGetBits(bs, 1)); - } - - for(i = 0; i < 2; i++) - { - for(j = 0; j < channels(mp->header); j++) - { - gr_info = mp->side_info->ch_info[j]->gr_info[i]; - - gr_info->part2_3_length = BsGetBits(bs, 12); - gr_info->big_values = BsGetBits(bs, 9) << 1; - gr_info->global_gain = BsGetBits(bs, 8); - gr_info->scalefac_compress = BsGetBits(bs, 4); - - gr_info->flags = 0; - gr_info->flags |= (BsGetBits(bs, 1)) ? WINDOW_SWITCHING_FLAG : 0; - - if(win_switch(gr_info)) - { - /* block_type */ - gr_info->flags |= BsGetBits(bs, 2); - - /* mixed_block_flag */ - flag = BsGetBits(bs, 1); - gr_info->flags |= (flag) ? MIXED_BLOCK_FLAG : 0; - - for(k = 0; k < 2; k++) - gr_info->table_select[k] = BsGetBits(bs, 5); - - for(k = 0; k < 3; k++) - gr_info->subblock_gain[k] = BsGetBits(bs, 3); - - /* Set region_count parameters since they are implicit in this case. */ - if((gr_info->flags & 3) == 0) - return (FALSE); /* This will trigger resync */ - else - if(short_block(gr_info) && !mixed_block(gr_info)) - { - gr_info->block_mode = SHORT_BLOCK_MODE; - gr_info->region0_count = 7; - } - else - { - if(short_block(gr_info) && mixed_block(gr_info)) - return (FALSE); /* mixed block are not allowed => resync */ - else - gr_info->block_mode = LONG_BLOCK_MODE; - - gr_info->region0_count = 7; - } - - gr_info->region1_count = 20 - gr_info->region0_count; - } - else - { - gr_info->block_mode = LONG_BLOCK_MODE; - for(k = 0; k < 3; k++) - gr_info->table_select[k] = BsGetBits(bs, 5); - gr_info->region0_count = BsGetBits(bs, 4); - gr_info->region1_count = BsGetBits(bs, 3); - - gr_info->flags &= ~(uint32)3; /* block_type == 0 (LONG) */ - } - - flag = BsGetBits(bs, 3); - gr_info->flags |= (flag & 4) ? PRE_FLAG : 0; - gr_info->flags |= (flag & 2) ? SCALEFAC_SCALE : 0; - gr_info->flags |= (flag & 1) ? COUNT_1_TABLE_SELECT : 0; - } - } - } - else /* MPEG-2 LSF and MPEG-2.5 */ - { - mp->side_info->main_data_begin = BsGetBits(bs, 8); - - if(channels(mp->header) == 1) - mp->side_info->private_bits = BsGetBits(bs, 1); - else - mp->side_info->private_bits = BsGetBits(bs, 2); - - for(i = 0; i < channels(mp->header); i++) - { - gr_info = mp->side_info->ch_info[i]->gr_info[0]; - - gr_info->part2_3_length = BsGetBits(bs, 12); - gr_info->big_values = BsGetBits(bs, 9) << 1; - gr_info->global_gain = BsGetBits(bs, 8); - gr_info->scalefac_compress = BsGetBits(bs, 9); - gr_info->flags = 0; - gr_info->flags |= (BsGetBits(bs, 1)) ? WINDOW_SWITCHING_FLAG : 0; - - if(win_switch(gr_info)) - { - /* block_type */ - gr_info->flags |= BsGetBits(bs, 2); - - /* mixed_block_flag */ - flag = BsGetBits(bs, 1); - gr_info->flags |= (flag) ? MIXED_BLOCK_FLAG : 0; - - for(k = 0; k < 2; k++) - gr_info->table_select[k] = BsGetBits(bs, 5); - - for(k = 0; k < 3; k++) - gr_info->subblock_gain[k] = BsGetBits(bs, 3); - - /* Set region_count parameters since they are implicit in this case. */ - if((gr_info->flags & 3) == 0) - return (FALSE); - else - if(short_block(gr_info) && !mixed_block(gr_info)) - { - gr_info->block_mode = SHORT_BLOCK_MODE; - gr_info->region0_count = 5; - } - else - { - if(short_block(gr_info) && mixed_block(gr_info)) - return (FALSE); - else - gr_info->block_mode = LONG_BLOCK_MODE; - - gr_info->region0_count = 7; - } - - gr_info->region1_count = 20 - gr_info->region0_count; - } - else - { - gr_info->block_mode = LONG_BLOCK_MODE; - for(k = 0; k < 3; k++) - gr_info->table_select[k] = BsGetBits(bs, 5); - gr_info->region0_count = BsGetBits(bs, 4); - gr_info->region1_count = BsGetBits(bs, 3); - - gr_info->flags &= ~(uint32)3; /* block_type == 0 (LONG) */ - } - - flag = BsGetBits(bs, 2); - gr_info->flags |= (flag & 2) ? SCALEFAC_SCALE : 0; - gr_info->flags |= (flag & 1) ? COUNT_1_TABLE_SELECT : 0; - } - } - - return (TRUE); -} - -/* -* Writes layer 3 side information (excluding granule specific info) -* to the specified bitstream. For writing granule specific -* parameters 'L3WriteGranule()' function should be used. -*/ -INLINE void -L3WriteCommonSideInfo(TBitStream *bs, CIII_Side_Info *sideInfo, TMPEG_Header *header) -{ - int16 bits; - uint32 dWord; - - bits = 9; - dWord = sideInfo->main_data_begin; - - /*-- MPEG-1. --*/ - if(version(header) == MPEG_AUDIO_ID) - { - if(channels(header) == 1) - { - bits = 18; - dWord <<= 5; dWord |= sideInfo->private_bits; - dWord <<= 1; dWord |= sideInfo->scfsi[0][0]; - dWord <<= 1; dWord |= sideInfo->scfsi[0][1]; - dWord <<= 1; dWord |= sideInfo->scfsi[0][2]; - dWord <<= 1; dWord |= sideInfo->scfsi[0][3]; - } - else - { - bits = 20; - dWord <<= 3; dWord |= sideInfo->private_bits; - dWord <<= 1; dWord |= sideInfo->scfsi[0][0]; - dWord <<= 1; dWord |= sideInfo->scfsi[0][1]; - dWord <<= 1; dWord |= sideInfo->scfsi[0][2]; - dWord <<= 1; dWord |= sideInfo->scfsi[0][3]; - dWord <<= 1; dWord |= sideInfo->scfsi[1][0]; - dWord <<= 1; dWord |= sideInfo->scfsi[1][1]; - dWord <<= 1; dWord |= sideInfo->scfsi[1][2]; - dWord <<= 1; dWord |= sideInfo->scfsi[1][3]; - } - } - - /*-- MPEG-2 LSF, MPEG-2.5. --*/ - else - { - if(channels(header) == 1) - { bits = 9; dWord <<= 1; } - else - { bits = 10; dWord <<= 2; } - - dWord |= sideInfo->private_bits; - } - - BsPutBits(bs, bits, dWord); -} - -/* -* Writes granule specific parameters to the specified bitstream. -* Please note that the MPEG frame may contain more than one granule -* depending on the number of channels and version. So this function -* may need to be called multiple times. -*/ -INLINE void -L3WriteGranule(TBitStream *bs, TGranule_Info *gr_info, BOOL mpeg1) -{ - uint32 dWord; - - dWord = gr_info->part2_3_length << 9; - dWord |= gr_info->big_values >> 1; - dWord <<= 8; dWord |= gr_info->global_gain; - - BsPutBits(bs, 29, dWord); - - dWord = gr_info->scalefac_compress << 1; - if(win_switch(gr_info)) - { - dWord |= 1; - dWord <<= 2; dWord |= (gr_info->flags & 3); - dWord <<= 1; if(mixed_block(gr_info)) dWord |= 1; - dWord <<= 5; dWord |= gr_info->table_select[0]; - dWord <<= 5; dWord |= gr_info->table_select[1]; - dWord <<= 3; dWord |= gr_info->subblock_gain[0]; - dWord <<= 3; dWord |= gr_info->subblock_gain[1]; - dWord <<= 3; dWord |= gr_info->subblock_gain[2]; - } - else - { - dWord <<= 5; dWord |= gr_info->table_select[0]; - dWord <<= 5; dWord |= gr_info->table_select[1]; - dWord <<= 5; dWord |= gr_info->table_select[2]; - dWord <<= 4; dWord |= gr_info->region0_count; - dWord <<= 3; dWord |= gr_info->region1_count; - } - - if(mpeg1) { dWord <<= 1; if(pre_flag(gr_info)) dWord |= 1; } - else { BsPutBits(bs, 32, dWord); dWord = 0; } - - dWord <<= 1; if(scalefac_scale(gr_info)) dWord |= 1; - dWord <<= 1; if(gr_info->flags & COUNT_1_TABLE_SELECT) dWord |= 1; - - BsPutBits(bs, (mpeg1) ? 30 : 2, dWord); -} - -/* -* Writes layer 3 side info to the specified bitstream. The side info -* in this context includes the header and the actual side info -* parameters. -*/ -void -L3WriteSideInfo(TBitStream *bs, CIII_Side_Info *sideInfo, TMPEG_Header *header) -{ - BOOL mpeg1; - int16 i, j, max_gr; - - mpeg1 = (version(header) == MPEG_AUDIO_ID) ? TRUE : FALSE; - max_gr = (mpeg1) ? 2 : 1; - - /*-- Write common side info. --*/ - L3WriteCommonSideInfo(bs, sideInfo, header); - - /*-- Write granule parameters. --*/ - for(i = 0; i < max_gr; i++) - for(j = 0; j < channels(header); j++) - { - TGranule_Info *gr_info = sideInfo->ch_info[j]->gr_info[i]; - L3WriteGranule(bs, gr_info, mpeg1); - } -} - -/************************************************************************** -Title : III_get_LSF_scale_data - - Purpose : Decodes scalafactors of MPEG-2 LSF and MPEG-2.5 bitstreams. - - Usage : III_get_LSF_scale_data(mp, gr, ch) - - Input : mp - MP3 stream parameters - gr - granule number - ch - channel number (left or right) - - Explanation : - - - Author(s) : Juha Ojanpera -*************************************************************************/ - -static void -III_get_LSF_scale_data(CMP_Stream *mp, int16 gr, int16 ch, uint8* scalefac_buffer) -{ - int16 i, j, k, m = 0; - int16 blocktypenumber = 0, blocknumber = 0; - int16 scalefac_comp, int_scalefac_comp, new_slen[4] = {0, 0, 0, 0}; - TGranule_Info *gr_info; - - gr_info = mp->side_info->ch_info[ch]->gr_info[gr]; - scalefac_comp = gr_info->scalefac_compress; - - switch(gr_info->block_mode) - { - case SHORT_BLOCK_MODE: - blocktypenumber = 1; - break; - - case LONG_BLOCK_MODE: - blocktypenumber = 0; - break; - - default: - break; - } - - if(!((mode_extension(mp->header) == 1 || - mode_extension(mp->header) == 3) && ch == 1)) - { - - if(scalefac_comp < 400) - { - new_slen[0] = (scalefac_comp >> 4) / 5; - new_slen[1] = (scalefac_comp >> 4) % 5; - new_slen[2] = (scalefac_comp & 15) >> 2; - new_slen[3] = (scalefac_comp & 3); - - blocknumber = 0; - m = 4; - } - else if(scalefac_comp < 500) - { - scalefac_comp -= 400; - - new_slen[0] = (scalefac_comp >> 2) / 5; - new_slen[1] = (scalefac_comp >> 2) % 5; - new_slen[2] = scalefac_comp & 3; - - blocknumber = 1; - m = 3; - } - else /*if(scalefac_comp < 512)*/ - { - scalefac_comp -= 500; - - new_slen[0] = scalefac_comp / 3; - new_slen[1] = scalefac_comp % 3; - - gr_info->flags |= (uint32)PRE_FLAG; /* pre_flag = 1 */ - - blocknumber = 2; - m = 2; - } - } - - if(((mode_extension(mp->header) == 1 || - mode_extension(mp->header) == 3) && ch == 1)) - { - - int_scalefac_comp = scalefac_comp >> 1; - - if(int_scalefac_comp < 180) - { - int16 tmp = int_scalefac_comp % 36; - - new_slen[0] = int_scalefac_comp / 36; - new_slen[1] = tmp / 6; - new_slen[2] = tmp % 6; - - blocknumber = 3; - m = 3; - } - else if(int_scalefac_comp < 244) - { - int_scalefac_comp -= 180; - - new_slen[0] = (int_scalefac_comp & 63) >> 4; - new_slen[1] = (int_scalefac_comp & 15) >> 2; - new_slen[2] = int_scalefac_comp & 3; - - blocknumber = 4; - m = 3; - } - else /*if(int_scalefac_comp < 255)*/ - { - int_scalefac_comp -= 244; - - new_slen[0] = int_scalefac_comp / 3; - new_slen[1] = int_scalefac_comp % 3; - - blocknumber = 5; - m = 2; - } - - TIS_Info *is_info = &mp->side_info->is_info; - is_info->is_len[0] = (1 << new_slen[0]) - 1; - is_info->is_len[1] = (1 << new_slen[1]) - 1; - is_info->is_len[2] = (1 << new_slen[2]) - 1; - is_info->nr_sfb[0] = nr_of_sfb_block[blocknumber][blocktypenumber][0]; - is_info->nr_sfb[1] = nr_of_sfb_block[blocknumber][blocktypenumber][1]; - is_info->nr_sfb[2] = nr_of_sfb_block[blocknumber][blocktypenumber][2]; - - } - - - Mem::Fill(scalefac_buffer, 54, 0); - - - for(i = k = 0; i < m; i++) - { - - if(new_slen[i] != 0) - for(j = 0; j < nr_of_sfb_block[blocknumber][blocktypenumber][i]; j++, k++) - { - - - - scalefac_buffer[k] = BsGetBits(mp->br, new_slen[i]); - - - } - else - { - - - if (i < 4) - { - k += nr_of_sfb_block[blocknumber][blocktypenumber][i]; - } - else - { - k += 0; - } - - } - - } - -} - -/************************************************************************** -Title : III_get_scale_factors - -Purpose : Reads the scale factors of layer III. - -Usage : III_get_scale_factors(mp, gr, ch) - -Input : mp - MP3 stream parameters -gr - granule number -ch - channel number (left or right) - -Author(s) : Juha Ojanpera -*************************************************************************/ - -void III_get_scale_factors(CMP_Stream *mp, int16 gr, int16 ch) - { - uint8 *sf[3]; - int16 i, sfb, bits, idx; - TGranule_Info *gr_info; - CIII_Scale_Factors *scale_fac; - - uint8* scalefac_buffer = NULL; - TRAPD(error, scalefac_buffer = new (ELeave) uint8[54]); - if (error != KErrNone) - return; - - Mem::Fill(scalefac_buffer, 54, 0); - - gr_info = mp->side_info->ch_info[ch]->gr_info[gr]; - - scale_fac = mp->side_info->ch_info[ch]->scale_fac; - - idx = 0; - if(mp->side_info->lsf) - { - III_get_LSF_scale_data(mp, gr, ch, scalefac_buffer); - } - - - switch(gr_info->block_mode) - { - case SHORT_BLOCK_MODE: - sf[0] = scale_fac->scalefac_short[0]; - sf[1] = scale_fac->scalefac_short[1]; - sf[2] = scale_fac->scalefac_short[2]; - if(mp->side_info->lsf) - for(sfb = 0; sfb < 12; sfb++) - { - *sf[0]++ = scalefac_buffer[idx++]; - *sf[1]++ = scalefac_buffer[idx++]; - *sf[2]++ = scalefac_buffer[idx++]; - } - else - for(i = 0; i < 2; i++) - { - bits = slen[i][gr_info->scalefac_compress]; - if(bits) - for(sfb = sfbtable.s[i]; sfb < sfbtable.s[i + 1]; sfb++) - { - *sf[0]++ = BsGetBits(mp->br, bits); - *sf[1]++ = BsGetBits(mp->br, bits); - *sf[2]++ = BsGetBits(mp->br, bits); - } - else - for(sfb = sfbtable.s[i]; sfb < sfbtable.s[i + 1]; sfb++) - { - *sf[0]++ = 0; *sf[1]++ = 0; *sf[2]++ = 0; - } - } - break; - - case LONG_BLOCK_MODE: - sf[0] = scale_fac->scalefac_long; - - - if(mp->side_info->lsf) - for(i = 0; i < 21; i++) - *sf[0]++ = scalefac_buffer[idx++]; - else - for(i = 0; i < 4; i++) - { - - if(mp->side_info->scfsi[ch][i] == 0 || gr == 0) - { - bits = slen[i >> 1][gr_info->scalefac_compress]; - if(bits) - for(sfb = sfbtable.l[i]; sfb < sfbtable.l[i + 1]; sfb++) - { - - *sf[0]++ = BsGetBits(mp->br, bits); - - } - else - for(sfb = sfbtable.l[i]; sfb < sfbtable.l[i + 1]; sfb++) - *sf[0]++ = 0; - } - else - sf[0] += sfbtable.l[i + 1] - sfbtable.l[i]; - } - break; - - default: - break; - } - - delete[] scalefac_buffer; - -} - - -void - init_III_reorder(int16 reorder_idx[2][MAX_MONO_SAMPLES], int16 *sfb_table, - int16 *sfb_width_table) -{ - int32 sfb, sfb_start, i; - int32 window, freq, src_line, des_line; - - for(i = sfb = 0; sfb < MAX_SHORT_SFB_BANDS; sfb++) - { - sfb_start = sfb_table[sfb]; - - for(window = 0; window < 3; window++) - for(freq = 0; freq < sfb_width_table[sfb]; freq++) - { - src_line = sfb_start * 3 + window * sfb_width_table[sfb] + freq; - des_line = (sfb_start * 3) + window + (freq * 3); - - reorder_idx[0][i] = - ((des_line / SSLIMIT) * SSLIMIT) + (des_line % SSLIMIT); - - reorder_idx[1][i++] = - ((src_line / SSLIMIT) * SSLIMIT) + (src_line % SSLIMIT); - } - } -} - - - -/************************************************************************** -Title : III_reorder - - Purpose : Re-orders the input frame if short blocks are present. - - Usage : III_reorder(mp, gr, ch) - - Input : mp - MP3 stream parameters - ch - channel number (left or right) - gr - granule number - - Explanation : - - - Author(s) : Juha Ojanpera -*************************************************************************/ - -void - III_reorder(CMP_Stream *mp, int16 ch, int16 gr) -{ - int16 i, sb_start; - register int16 *id1, *id2; - - FLOAT* xr = NULL; - TRAPD(error, xr = new (ELeave) FLOAT[MAX_MONO_SAMPLES]); - if (error != KErrNone) - return; - - register FLOAT *src, *dst; - - if(mp->side_info->ch_info[ch]->gr_info[gr]->block_mode == LONG_BLOCK_MODE) - { - delete[] xr; - return; - - } - - sb_start = 0; - - id1 = &mp->reorder_idx[0][sb_start]; - id2 = &mp->reorder_idx[1][sb_start]; - - /* - * First re-order the short block to a temporary buffer - * and then copy back to the input buffer. Not fully optimal, - * a better way would be perhaps to do the re-ordering during the - * dequantization but to my opinion that would complicate the code - * too much. We also have to remember that short blocks do not occur - * very frequently, so the penalty of having a separate re-ordering - * routine is not so time consuming from the overall decoder complexity - * point of view. - */ - src = &mp->buffer->ch_reconstructed[ch][0]; - dst = &xr[0]; - - for(i = sb_start; i < MAX_MONO_SAMPLES; i++) - dst[*id1++] = src[*id2++]; - - /* Copy back. */ - for(i = sb_start; i < MAX_MONO_SAMPLES; i++) - src[i] = dst[i]; - - delete[] xr; -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/src/mpaud.cpp --- a/videoeditorengine/mp3aacManipLib/MP3Gain/src/mpaud.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - mpaud.cpp - MPEG-1, MPEG-2 LSF and MPEG-2.5 layer III bitstream decoder. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- project headers --*/ -#include "mpaud.h" -#include "mpheader.h" -#include "mp3tool.h" - -/************************************************************************** - Internal Objects - *************************************************************************/ - -/************************************************************************** - Title : L3BitReservoir - - Purpose : Layer III bit reservoir subroutine. - - Usage : y = L3BitReservoir(mp) - - Input : mp - mp3 stream parameters - - Output : y - # of bytes discarded from the bit reservoir buffer. - Value -1 indicates that an error has occured during - decoding (invalid bitstream syntax found) - - Explanation : Return value -1 should be regarded as a fatal error in the - sense that decoding of current frame should not be continued. - Instead, the decoder should be re-initialized. - - Author(s) : Juha Ojanpera - *************************************************************************/ - -INLINE int16 -L3BitReservoir(CMPAudDec *mp) -{ - int16 bytes_to_discard; - int16 flush_main; - int32 bits_read; - TBitStream *br; - - br = &mp->br; - - /*------------ Start of bit reservoir processing. ------------------*/ - - if(mp->WasSeeking == FALSE) - { - /*-- Byte alignment. --*/ - bits_read = BsGetBitsRead(br); - flush_main = (int16) (bits_read & 7); - if(flush_main) - BsSkipBits(br, (int16) (8 - flush_main)); - - /* - * Determine how many bits were left from the previous frame. - */ - if(mp->SkipBr == FALSE) - { - BsClearBitsRead(br); - BsSetBitsRead(br, (mp->PrevSlots << 3) - bits_read); - } - - /* - * Determine how many bytes need to be discarded from the previous - * frame to find the start of next frame. - */ - bytes_to_discard = (int16) ((BsGetBitsRead(br) >> 3) - mp->side_info->main_data_begin); - - /*-- Reset the bit reservoir bit counter. --*/ - BsClearBitsRead(br); - - /*-- # of slots available for this frame. --*/ - mp->PrevSlots = (int16) (mp->mpFileFormat->mainDataSlots + mp->side_info->main_data_begin); - - if(bytes_to_discard < 0) - { - BsClearBitsRead(br); - BsSetBitsRead(br, mp->mpFileFormat->mainDataSlots << 3); - mp->SkipBr = TRUE; - return (-1); - } - - mp->SkipBr = FALSE; - - if(bytes_to_discard) - { - mp->PrevSlots = (int16) (mp->PrevSlots + bytes_to_discard); - BsSkipNBits(br, bytes_to_discard << 3); - } - } - else - { - bytes_to_discard = 0; - - /*-- # of slots available for this frame. --*/ - mp->PrevSlots = (int16) (mp->mpFileFormat->mainDataSlots + mp->side_info->main_data_begin); - - mp->SkipBr = FALSE; - mp->WasSeeking = FALSE; - - if(mp->side_info->main_data_begin) - BsRewindNBits(br, mp->side_info->main_data_begin << 3); - - /*-- Reset the bit reservoir bit counter. --*/ - BsClearBitsRead(br); - } - /*-------------- End of bit reservoir processing. ------------------*/ - - return (bytes_to_discard); -} - -/************************************************************************** - Title : DeleteMPAudDec - - Purpose : Releases resources allocated to the mp3 decoder core. - - Usage : y = DeleteMPAudDec(mpAud) - - Input : mpAud - Layer I/II/III decoder core - - Output : y - NULL - - Author(s) : Juha Ojanpera - *************************************************************************/ - - -INLINE uint8 -GetLayer3Version(TMpTransportHandle *tHandle) -{ - uint8 mp_version; - - /* - * Which version of mp3 ? - */ - if(version(&tHandle->header)) - mp_version = 1; /*-- MPEG-1 --*/ - else if(!mp25version(&tHandle->header)) - mp_version = 2; /*-- MPEG-2 --*/ - else - mp_version = 3; /*-- MPEG-2.5 --*/ - - return (mp_version); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/MP3Gain/src/mpif.cpp --- a/videoeditorengine/mp3aacManipLib/MP3Gain/src/mpif.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,909 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - mpif.cpp - MPEG-1, MPEG-2 LSF and MPEG-2.5 file format implementations. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -/*-- project headers --*/ -#include "mpif.h" -//#include "auddef.h" -#include "mpheader.h" -#include "nok_bits.h" -#include "mstream.h" - - -/************************************************************************** - Internal Objects - *************************************************************************/ - -/* - Purpose: Sync lost after 16384 bytes. - Explanation: - */ -#define SYNC_THRESHOLD (16384 << 3) - -/************************************************************************** - Title : main_data_slots - - Purpose : Computes the number of bytes for the layer III payload. The - payload consists of the scalefactors and quantized data of - the channel(s). - - Usage : y = main_data_slots(mp) - - Input : mp - mp3 file format parameters - - Output : y - # of payload bytes for this frame - - Author(s) : Juha Ojanpera - *************************************************************************/ - -INLINE int32 -main_data_slots(TMpTransportHandle *tHandle) -{ - int16 nSlots; - - if(bit_rate(&tHandle->header)) - { - nSlots = tHandle->SlotTable[bit_rate_idx(&tHandle->header)]; - - if(padding(&tHandle->header)) - nSlots++; - if(error_protection(&tHandle->header)) - nSlots -= 2; - } - else - { - nSlots = tHandle->FreeFormatSlots; - - if(padding(&tHandle->header)) - nSlots++; - } - - return(nSlots); -} - -/* - * Maximum # of bits needed for the header. Note that only - * 20 bits are read since 12 bits were read already when - * locating the start of frame. 16 bits are needed for - * the optional CRC codeword. - */ -#define MAX_MP_HEADER_SIZE (20 + 16) - -/************************************************************************** - Title : decode_header - - Purpose : Reads header information (excluding syncword) from the bitstream. - - Usage : decode_header(tHandle, bs) - - Input : tHandle - file format parser - bs - input bitstream - - Explanation : Header information is commmon to all layers. Note also that - this function doesn't interprete the fields of the header. - - Author(s) : Juha Ojanpera - *************************************************************************/ - -INLINE SEEK_STATUS -decode_header(TMpTransportHandle *tHandle, TBitStream *bs) -{ - uint32 header, bitsLeft; - - bitsLeft = (BsGetBufSize(bs) << 3) - BsGetBitsRead(bs); - if(bitsLeft < MAX_MP_HEADER_SIZE) - return (SYNC_BITS_OUT); - - /*-- Read rest of the header bits. --*/ - tHandle->headerOld.header = tHandle->header.header; - header = (!tHandle->mpeg25) << HEADER_BITS; - header |= BsGetBits(bs, HEADER_BITS); - tHandle->header.header = header; - - /*-- Read CRC codeword. --*/ - if(error_protection(&tHandle->header)) - tHandle->crc.crc = (int16) BsGetBits(bs, 16); - - return (SYNC_FOUND); -} - -/************************************************************************** - Title : GetSideInfoSlots - - Purpose : Retrieves the amount of side info for layer III stream. - - Usage : y = GetSideInfoSlots(tHandle) - - Input : tHandle - file format parser - - Output : y - # of side info bytes - - Author(s) : Juha Ojanpera - *************************************************************************/ - -int16 -GetSideInfoSlots(TMpTransportHandle *tHandle) -{ - int16 nSlots = 0; - - if(version(&tHandle->header) != MPEG_PHASE2_LSF) - nSlots = (channels(&tHandle->header) == 1) ? (int16) 17 : (int16) 32; - else - nSlots = (channels(&tHandle->header) == 1) ? (int16) 9 : (int16) 17; - - return (nSlots); -} - -int16 -GetSideInfoSlots(TMPEG_Header *header) -{ - int16 nSlots = 0; - - if(version(header) != MPEG_PHASE2_LSF) - nSlots = (channels(header) == 1) ? 17 : 32; - else - nSlots = (channels(header) == 1) ? 9 : 17; - - return (nSlots); -} - -/************************************************************************** - Title : GetSlotSize - - Purpose : Retrieves the amount of frame data for layer III stream. - - Usage : y = GetSlotSize(tHandle) - - Input : tHandle - file format parser - - Output : y - # of frame data bytes - - Author(s) : Juha Ojanpera - *************************************************************************/ - -static INLINE int16 -GetSlotSize(TMpTransportHandle *tHandle) -{ - int16 ave_slots; - - if(bit_rate(&tHandle->header)) - ave_slots = (int16) tHandle->aveFrameLen; - else - { - ave_slots = (int16) (tHandle->FreeFormatSlots + GetSideInfoSlots(tHandle)); - if(error_protection(&tHandle->header)) - ave_slots += 2; - ave_slots += 4; - } - - return (ave_slots); -} - -INLINE int32 * -GetSeekOffset(TMpTransportHandle *tHandle, int32 *seekValues) -{ - int16 main_data; - int32 frameOffset, byte_offset; - - /* - * Some reinitialization need to be performed after file pointer has been - * moved to the new postion. For this reason, the total number of frames - * to be skipped does not correspond exactly to the given time offset. - * However, after reinitialization the playback position should be the correct. - */ - byte_offset = GetSlotSize(tHandle); - main_data = (int16) ((version(&tHandle->header) == MPEG_PHASE2_LSF) ? 256 : 512); - frameOffset = (byte_offset) ? main_data / byte_offset : 0; - - if(byte_offset) - if(main_data % byte_offset) - frameOffset++; - - seekValues[0] = frameOffset; - seekValues[1] = byte_offset; - - return (seekValues); -} - -/* - * Estimates the bitrate of the mp3 stream from the size of the - * payload + side info + header. The accuracy of the computed - * bitrate depends very much on the accuracy of the average frame - * size. - */ -int16 -MP_EstimateBitrate(TMpTransportHandle *tHandle, uint8 isVbr) -{ - int16 bitRate; - - if(!bit_rate(&tHandle->header) || isVbr) - { - FLOAT div; - - div = (FLOAT) ((version(&tHandle->header) == MPEG_PHASE2_LSF) ? 72 : 144); - bitRate = (int16) (((frequency(&tHandle->header) / 1000.0f) * GetSlotSize(tHandle) / div) + 0.5f); - } - else - bitRate = bit_rate(&tHandle->header); - - return (bitRate); -} - -/* - * Returns the length of the track in milliseconds. - */ -uint32 -MP_FileLengthInMs(TMpTransportHandle *tHandle, int32 fileSize) -{ - FLOAT frames = fileSize / (FLOAT) GetSlotSize(tHandle); - - return (uint32) (frames * GetFrameTime(&tHandle->header) + 0.5f); -} - -/* - * Returns the byte offset corresponding to the specified seeking position. - */ -int32 -MP_GetSeekOffset(TMpTransportHandle *tHandle, int32 seekPos) -{ - FLOAT numFrames; - int32 seekValues[2], frameOffset, byte_offset; - - GetSeekOffset(tHandle, seekValues); - - frameOffset = seekValues[0]; - byte_offset = seekValues[1]; - - numFrames = seekPos / (FLOAT) GetFrameTime(&tHandle->header); - if(numFrames < frameOffset) - frameOffset = 0; - - /*-- Total offset. --*/ - byte_offset = (int32) ((byte_offset * (numFrames - frameOffset)) + 0.5f); - - return (byte_offset); -} - -/* - * Returns the duration of each frame in milliseconds. - */ -int32 -MP_GetFrameTime(TMpTransportHandle *tHandle) -{ - return (GetFrameTime(&tHandle->header)); -} - -/* - * Checks if the specified mp3 stream is using free format - * i.e., bitrate is not specified in the header part - * of the frame. - * - * Return TRUE if bitrate not specified, FALSE otherwise - */ -BOOL -IsMP3FreeFormat(TMpTransportHandle *tHandle) -{ - return (bit_rate(&tHandle->header) == 0); -} - -/************************************************************************** - Title : FillDataSlotTable - - Purpose : Pre-computes (to avoid division operation during decoding) - the payload size of layer III for all bitrates. This function - should be called once the start of 1st frame has been located. - - Usage : y = FillDataSlotTable(tHandle) - - Input : tHandle - file format parser - - Author(s) : Juha Ojanpera - *************************************************************************/ - -INLINE void -FillDataSlotTable(TMpTransportHandle *tHandle) -{ - int16 nSlots; - const int16 *brTbl; - - brTbl = GetBitRateTable(&tHandle->header); - - /* - * index 0 is free format and index 14 illegal bitrate. - */ - for(int16 i = 1; i < 15; i++) - { - nSlots = (int16)((144 * brTbl[i]) / (frequency(&tHandle->header) / 1000.0f)); - - if(version(&tHandle->header) == MPEG_PHASE2_LSF) - nSlots >>= 1; - - nSlots = (int16) (nSlots - GetSideInfoSlots(tHandle) - 4); - tHandle->SlotTable[i] = nSlots; - } -} - -/************************************************************************** - Title : SeekSync - - Purpose : Seeks for a byte aligned sync word in the bitstream and - places the bitstream pointer right after the sync word. - - Usage : y = SeekSync(mp, bs_mcu, bufMapper, execState) - - Input : mp - mp3 stream parameters - bs_mcu - bitstream parameters - execState - exec status of this function - - Output : y : - SYNC_BITS_OUT - bit buffer need to be updated - SYNC_LOST - start of next frame was not found - SYNC_FOUND - OK to decode next frame - - Author(s) : Juha Ojanpera - *************************************************************************/ - -INLINE SEEK_STATUS -SeekSync(TMpTransportHandle *tHandle, TBitStream *bs_mcu, ExecState *execState) -{ -#define PRESYNCBITS (MP_SYNC_WORD_LENGTH + 8) -#define POSTSYNCBITS (MAX_MP_HEADER_SIZE + 1) - - uint32 hdr, bits_left; - BOOL exitCheck = TRUE; - int32 sync_cand, bits_read; - - bits_left = (BsSlotsLeft(bs_mcu) - 1) << 3; - - if(execState->execMode == GLITCH_FREE && bits_left > PRESYNCBITS) - { - bits_left -= (BsByteAlign(bs_mcu) + (bits_read = tHandle->syncInfo.sync_length)); - sync_cand = BsGetBits(bs_mcu, tHandle->syncInfo.sync_length); - } - else if(execState->execMode == GLITCH_FREE) - { - execState->execMode = GLITCH_FREE; - - return (SYNC_BITS_OUT); - } - else - { - sync_cand = (int32)execState->a0_u32[0]; - bits_read = (int32)execState->a0_u32[1]; - } - - while(exitCheck) - { - while(sync_cand != tHandle->syncInfo.sync_word && - bits_read < SYNC_THRESHOLD && bits_left) - { - bits_read++; - bits_left--; - sync_cand = (sync_cand << 1) & tHandle->syncInfo.sync_mask; - sync_cand |= (int16) BsGetBits(bs_mcu, 1); - } - - if(bits_read > SYNC_THRESHOLD) - return (SYNC_LOST); - else if(bits_left < POSTSYNCBITS) - { - execState->execMode = GLITCH0; - execState->a0_u32[0] = sync_cand; - execState->a0_u32[1] = bits_read; - - return (SYNC_BITS_OUT); - } - else - { - bits_read++; - bits_left--; - sync_cand = (sync_cand << 1) & tHandle->syncInfo.sync_mask; - sync_cand |= (int16) BsGetBits(bs_mcu, 1); - - tHandle->mpeg25 = !(sync_cand & 0x1); - - /* Check the next frame header. */ - hdr = (!tHandle->mpeg25) << HEADER_BITS; - tHandle->header.header = hdr | BsLookAhead(bs_mcu, HEADER_BITS); - - /* Detect false frame boundaries. */ - switch(tHandle->syncInfo.sync_status) - { - case LAYER3_STREAM: - if(HEADER_MASK(tHandle->header.header) == HEADER_MASK(tHandle->headerOld.header) && - sfreq(&tHandle->header) != 3 && LAYER_MASK(tHandle->header.header) == 0x1) - { - if(tHandle->FreeFormatSlots == 0) - { - if(bit_rate(&tHandle->header)) - exitCheck = FALSE; - } - else exitCheck = FALSE; - } - break; - - case INIT_LAYER3_STREAM: - if(!(version(&tHandle->header) && mp25version(&tHandle->header))) - { - if(sfreq(&tHandle->header) != 3 && LAYER_MASK(tHandle->header.header) == 0x1 && bit_rate_idx(&tHandle->header) != 15) - { - tHandle->headerOld.header = tHandle->header.header; - tHandle->syncInfo.sync_status = LAYER3_STREAM; - exitCheck = FALSE; - } - } - break; - - default: - break; - } - } - } - - execState->execMode = GLITCH_FREE; - - return (SYNC_FOUND); -} - -/************************************************************************** - Title : FindFreeFormatSlotCount - - Purpose : Determines the size of the payload of a free format stream. - - Usage : y = FindFreeFormatSlotCount(mpDec, bs_mcu, execState) - - Input : mpDec - mp3 stream parameters - bs_mcu - bitstream parameters - execState - exec status of this function - - Output : y : - SYNC_BITS_OUT - bit buffer need to be updated - SYNC_LOST - stream is undecodable - SYNC_FOUND - OK to start playback - - Author(s) : Juha Ojanpera - *************************************************************************/ - -INLINE SEEK_STATUS -FreeFormat(TMpTransportHandle *tHandle, TBitStream *bs_mcu, ExecState *execState) -{ - int16 exitCheck; - TMPEG_Header oldHeader; - uint16 sync_cand; - uint32 bits_read, bits_left; - - tHandle->FreeFormatSlots = 0; - - if(execState->execMode == GLITCH_FREE) - { - int16 nSlots, minBytes; - - nSlots = GetSideInfoSlots(tHandle); - minBytes = (uint16) (nSlots + 7); - if((BsSlotsLeft(bs_mcu) - 1) < (uint16) minBytes) - { - execState->execMode = GLITCH_FREE; - return (SYNC_BITS_OUT); - } - - /*-- Read 1st header. --*/ - decode_header(tHandle, bs_mcu); - oldHeader.header = tHandle->header.header; - - /*-- Skip side info part. --*/ - BsSkipNBits(bs_mcu, nSlots << 3); - - sync_cand = (uint16) BsGetBits(bs_mcu, tHandle->syncInfo.sync_length); - bits_read = tHandle->syncInfo.sync_length; - } - else - { - sync_cand = (uint16) execState->a0_u32[0]; - bits_read = (uint32) execState->a0_u32[1]; - oldHeader.header = (uint32)execState->a0_u32[2]; - } - - exitCheck = 1; - bits_left = (BsSlotsLeft(bs_mcu) - 1) << 3; - //mask = (uint16) ((1 << (tHandle->syncInfo.sync_length - 1)) - 1); - - while(exitCheck) - { - while(sync_cand != tHandle->syncInfo.sync_word && bits_left) - { - bits_read++; - bits_left--; - sync_cand = (uint16) ((sync_cand << 1) & tHandle->syncInfo.sync_mask); - sync_cand |= (uint16) BsGetBits(bs_mcu, 1); - } - - if(bits_left < (HEADER_BITS + 1)) - { - execState->a0_u32[0] = sync_cand; - execState->a0_u32[1] = bits_read; - execState->a0_u32[2] = oldHeader.header; - execState->execMode = GLITCH0; - - return (SYNC_BITS_OUT); - } - else - { - uint32 hdr; - - bits_read++; - bits_left--; - sync_cand = (sync_cand << 1) & tHandle->syncInfo.sync_mask; - sync_cand |= (int16) BsGetBits(bs_mcu, 1); - - tHandle->mpeg25 = !(sync_cand & 0x1); - - /* Check the next frame header. */ - hdr = (!tHandle->mpeg25) << HEADER_BITS; - tHandle->header.header = hdr | BsLookAhead(bs_mcu, HEADER_BITS); - - /* - * Detect false frame boundraries. We could use header macros here - * to speed up the comparison but since this function is called only - * once (before playback/editing starts) the advantages of macros are - * negligible. - */ - if(channels(&tHandle->header) == channels(&oldHeader) && - sfreq(&tHandle->header) == sfreq(&oldHeader) && - bit_rate(&tHandle->header) == bit_rate(&oldHeader) && - layer_number(&tHandle->header) == layer_number(&oldHeader) && - version(&tHandle->header) == version(&oldHeader) && - mode(&tHandle->header) == mode(&oldHeader) && - error_protection(&tHandle->header) == error_protection(&oldHeader)) - exitCheck = 0; - - /* The payload size cannot be determined. */ - else if(bits_read > SYNC_THRESHOLD) - return (SYNC_LOST); - } - } - - /*-- Determine the size of the payload data. --*/ - if(bits_read != 0) - { - bits_read -= (tHandle->syncInfo.sync_length + 1); - tHandle->FreeFormatSlots = (int16) (bits_read >> 3); - - if(padding(&oldHeader)) - tHandle->FreeFormatSlots -= 1; - } - else - { - tHandle->FreeFormatSlots = -1; - - return (SYNC_LOST); - } - - execState->execMode = GLITCH_FREE; - tHandle->transportType = GET_MPSYNC_STREAM; - tHandle->syncInfo.sync_status = INIT_LAYER3_STREAM; - - return (SYNC_FOUND); -} - -/************************************************************************** - Title : mpSyncTransport - - Purpose : Sync layer interface for MPEG Layer I/II/III file formats. - - Usage : y = mpSyncTransport(tHandle, syncBuf, syncBufLen, readBits) - - Input : tHandle - handle to MPEG Layer I/II/III parser - syncBuf - handle to sync layer buffer - syncBufLen - # of bytes present in sync layer buffer - - Output : y - status of operation - SYNC_BITS_OUT - the sync layer buffer needs to be updated - SYNC_LOST - function failed - SYNC_FOUND - sync layer processing successfull - readBits - # of bits read from sync layer buffer - - Author(s) : Juha Ojanpera - *************************************************************************/ - - -SEEK_STATUS -mpSyncTransport(TMpTransportHandle *tHandle, uint8 *syncBuf, - uint32 syncBufLen, uint32 *readBits) -{ - BOOL hitExit; - ExecState *execState; - TBitStream m_Bitstream; - SEEK_STATUS frameStatus; - - *readBits = 0; - hitExit = FALSE; - frameStatus = SYNC_LOST; - execState = &tHandle->execState; - - BsInit(&m_Bitstream, syncBuf, syncBufLen); - - if(tHandle->offsetBits) - BsSkipNBits(&m_Bitstream, tHandle->offsetBits); - tHandle->offsetBits = 0; - - while(hitExit == FALSE) - { - uint32 tmp; - uint8 syncByte(0); - - switch(tHandle->transportType) - { - case INIT_MP_STREAM: - frameStatus = SYNC_LOST; - tHandle->transportType = GET_1ST_MPSYNC_STREAM; - break; - - case GET_1ST_MPSYNC_STREAM: - /* - * Locate sync and on succes, switch to read - * the headers values. - */ - frameStatus = SeekSync(tHandle, &m_Bitstream, execState); - if((frameStatus == SYNC_FOUND) && IsMP3FreeFormat(tHandle)) - { - hitExit = TRUE; - frameStatus = SYNC_MP3_FREE; - tHandle->offsetBits = (int16) (BsGetBitsRead(&m_Bitstream) & 0x7); - } - else if(frameStatus == SYNC_FOUND) - tHandle->transportType = GET_MPHEADER_STREAM; - else - { - hitExit = TRUE; - if(frameStatus != SYNC_LOST) - { - /* - * The sync search locates the syncword which is at the - * start of the header (1st 12 bits). Also in order to - * make the search reliable, the rest of the header bits - * are also checked via lookahead by the sync routine. - * Because of this it is possible that the input buffer - * may run out of bits in the lookahead part. In that case - * the input buffer needs to be updated. The number of bytes - * to be updated are calculated based on the number of read - * bits. Thus, in the worst case, the update process will - * throw away the 1st 8 bits from the syncword. This is - * something we don't want to experience since subsequent - * processing relies on the fact that the whole header can - * be read from the input buffer once the start of the frame - * has been found. That's why we reduce the update size of the - * input buffer (shown below). - */ - tmp = BsGetBitsRead(&m_Bitstream); - syncByte = syncBuf[MAX(0, ((int32) (tmp >> 3) - 1))]; - if((tmp & 0x7) && syncByte == 0xFF) - { - /*-- Keep the previous byte in the buffer as it may be part of header. --*/ - tHandle->offsetBits = (int16) (8 + (tmp & 0x7)); - - tmp -= 8; - BsClearBitsRead(&m_Bitstream); - BsSetBitsRead(&m_Bitstream, tmp); - } - else tHandle->offsetBits = (int16) (tmp & 0x7); - } - } - break; - - case GET_MPSYNC_STREAM: - /* - * Locate sync and on succes, switch to read - * the headers values. - */ - frameStatus = SeekSync(tHandle, &m_Bitstream, execState); - if(frameStatus == SYNC_FOUND) - tHandle->transportType = GET_MPHEADER_STREAM; - else - { - hitExit = TRUE; - if(frameStatus != SYNC_LOST) - { - /*-- See explanation above. --*/ - tmp = BsGetBitsRead(&m_Bitstream); - syncByte = syncBuf[MAX(0, ((int32) (tmp >> 3) - 1))]; - if((tmp & 0x7) && syncByte == 0xFF) - { - /*-- Keep the previous byte in the buffer as it may be part of header. --*/ - tHandle->offsetBits = (int16) (8 + (tmp & 0x7)); - - tmp -= 8; - BsClearBitsRead(&m_Bitstream); - BsSetBitsRead(&m_Bitstream, tmp); - } - else tHandle->offsetBits = (int16) (tmp & 0x7); - } - } - break; - - case GET_MPHEADER_STREAM: - /* - * Read headers values and on success, switch the state back - * to sync search for next frame. - */ - hitExit = TRUE; - frameStatus = decode_header(tHandle, &m_Bitstream); - if(frameStatus == SYNC_FOUND) - tHandle->transportType = GET_MPSYNC_STREAM; - else if(frameStatus != SYNC_LOST) - { - /*-- Don't loose the syncword... --*/ - tmp = BsGetBitsRead(&m_Bitstream); - syncByte = syncBuf[MAX(0, ((int32) (tmp >> 3) - 1))]; - if((tmp & 0x7) && syncByte == 0xFF) - { - /*-- Keep the previous byte in the buffer as it may be part of header. --*/ - tHandle->offsetBits = (int16) (8 + (tmp & 0x7)); - - tmp -= 8; - BsClearBitsRead(&m_Bitstream); - BsSetBitsRead(&m_Bitstream, tmp); - } - else tHandle->offsetBits = (int16) (tmp & 0x7); - } - break; - - default: - hitExit = TRUE; - frameStatus = SYNC_LOST; - break; - } - } - - *readBits = BsGetBitsRead(&m_Bitstream); - - return (frameStatus); -} - -/* - * Returns the # of bytes reserved for the Layer I/II/III payload part of current frame. - */ -INLINE int16 -mpGetTranportFrameLength(TMpTransportHandle *tHandle) -{ - int16 frameBytes; - - tHandle->mainDataSlots = 0; - - switch(tHandle->transportType) - { - case GET_MPSYNC_STREAM: - case GET_MPHEADER_STREAM: - tHandle->mainDataSlots = (int16) main_data_slots(tHandle); - frameBytes = (int16) (tHandle->mainDataSlots + GetSideInfoSlots(tHandle)); - break; - - default: - frameBytes = 0; - break; - } - - return (frameBytes); -} - -/* - * Initializes MPEG Layer I/II/III transport handle. - */ -void -mpInitTransport(TMpTransportHandle *tHandle) -{ - ZERO_MEMORY(tHandle, sizeof(TMpTransportHandle)); - - tHandle->syncInfo.sync_word = (int16) SYNC_WORD; - tHandle->syncInfo.sync_length = (int16) MP_SYNC_WORD_LENGTH; - tHandle->syncInfo.sync_mask = (uint16) ((1 << tHandle->syncInfo.sync_length) - 1); - tHandle->syncInfo.sync_status = INIT_LAYER3_STREAM; - tHandle->transportType = INIT_MP_STREAM; - tHandle->execState.execMode = GLITCH_FREE; - tHandle->offsetBits = 0; -} - -/************************************************************************** - Title : MP_SeekSync - - Purpose : Interface to layer I/II/III frame search implementation. - - Usage : y = MP_SeekSync(tHandle, syncBuf, syncBufLen, readBytes, - frameBytes, headerBytes, initMode) - - Input : tHandle - layer I/II/III transport handle - syncBuf - input buffer - syncBufLen - length of 'sync_buf' - initMode - '1' when searching the 1st frame, '0' otherwise - - Output : y - status of operation - frameBytes - # of bytes reserved for the payload part of the frame - readBytes - # of bytes read from the buffer - headerBytes - # of bytes reserved for the header part of the frame - - Author(s) : Juha Ojanpera - *************************************************************************/ - -int16 -MP_SeekSync(TMpTransportHandle *tHandle, uint8 *syncBuf, uint32 syncBufLen, - int16 *readBytes, int16 *frameBytes, int16 *headerBytes, - uint8 initMode) -{ - uint32 readBits; - SEEK_STATUS syncSeekStatus; - - syncSeekStatus = mpSyncTransport(tHandle, syncBuf, syncBufLen, &readBits); - if(initMode && syncSeekStatus == SYNC_FOUND) - FillDataSlotTable(tHandle); - - *readBytes = (int16) (readBits >> 3); - *frameBytes = (int16) mpGetTranportFrameLength(tHandle); - *headerBytes = (int16) ((error_protection(&tHandle->header) ? 2 : 0) + 4); - - return (int16) (syncSeekStatus); -} - -/************************************************************************** - Title : MP_FreeMode - - Purpose : Interface for determining the frame/payload size of free format - layer III bitstream. - - Usage : y = MP_FreeMode(tHandle, syncBuf, syncBufLen, readBytes, - frameBytes, headerBytes) - - Input : tHandle - layer I/II/III transport handle - syncBuf - input buffer - syncBufLen - length of 'sync_buf' - - Output : y - status of operation - frameBytes - # of bytes reserved for the payload part of the frames - readBytes - # of bytes read from the buffer - headerBytes - # of bytes reserved for the header part of the frame - - Author(s) : Juha Ojanpera - *************************************************************************/ - -int16 -MP_FreeMode(TMpTransportHandle *tHandle, uint8 *syncBuf, uint32 syncBufLen, - int16 *readBytes, int16 *frameBytes, int16 *headerBytes) -{ - TBitStream m_Bitstream; - SEEK_STATUS syncSeekStatus; - - BsInit(&m_Bitstream, syncBuf, syncBufLen); - - if(tHandle->offsetBits) - BsSkipNBits(&m_Bitstream, tHandle->offsetBits); - tHandle->offsetBits = 0; - - syncSeekStatus = FreeFormat(tHandle, &m_Bitstream, &tHandle->execState); - if(syncSeekStatus == SYNC_BITS_OUT) - tHandle->offsetBits = (int16) (BsGetBitsRead(&m_Bitstream) & 0x7); - - *readBytes = (int16) (BsGetBitsRead(&m_Bitstream) >> 3); - *frameBytes = (int16) mpGetTranportFrameLength(tHandle); - *headerBytes = (int16) ((error_protection(&tHandle->header) ? 2 : 0) + 4); - - return (int16) (syncSeekStatus); -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/bwins/aedmp3aaclibu.def --- a/videoeditorengine/mp3aacManipLib/bwins/aedmp3aaclibu.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -EXPORTS - ??1CMPAudDec@@UAE@XZ @ 1 NONAME ; CMPAudDec::~CMPAudDec(void) - ??1CMp3Edit@@UAE@XZ @ 2 NONAME ; CMp3Edit::~CMp3Edit(void) - ?AACGetMP4ConfigInfo@@YAFHEEFPAEE@Z @ 3 NONAME ; short AACGetMP4ConfigInfo(int, unsigned char, unsigned char, short, unsigned char *, unsigned char) - ?BsBufferUpdate@@YAXPAVTBitStream@@H@Z @ 4 NONAME ; void BsBufferUpdate(class TBitStream *, int) - ?BsByteAlign@@YAFPAVTBitStream@@@Z @ 5 NONAME ; short BsByteAlign(class TBitStream *) - ?BsClearBitsRead@@YAXPAVTBitStream@@@Z @ 6 NONAME ; void BsClearBitsRead(class TBitStream *) - ?BsCopyBits@@YAXPAVTBitStream@@0H@Z @ 7 NONAME ; void BsCopyBits(class TBitStream *, class TBitStream *, int) - ?BsCopyBytes@@YAIPAVTBitStream@@PAEI@Z @ 8 NONAME ; unsigned int BsCopyBytes(class TBitStream *, unsigned char *, unsigned int) - ?BsGetBits@@YAIPAVTBitStream@@F@Z @ 9 NONAME ; unsigned int BsGetBits(class TBitStream *, short) - ?BsGetBitsRead@@YAIPAVTBitStream@@@Z @ 10 NONAME ; unsigned int BsGetBitsRead(class TBitStream *) - ?BsGetBufOriginalSize@@YAIPAVTBitStream@@@Z @ 11 NONAME ; unsigned int BsGetBufOriginalSize(class TBitStream *) - ?BsGetBufSize@@YAIPAVTBitStream@@@Z @ 12 NONAME ; unsigned int BsGetBufSize(class TBitStream *) - ?BsInit2@@YAXPAVTBitStream@@PAEI@Z @ 13 NONAME ; void BsInit2(class TBitStream *, unsigned char *, unsigned int) - ?BsInit@@YAXPAVTBitStream@@PAEI@Z @ 14 NONAME ; void BsInit(class TBitStream *, unsigned char *, unsigned int) - ?BsLookAhead@@YAIPAVTBitStream@@F@Z @ 15 NONAME ; unsigned int BsLookAhead(class TBitStream *, short) - ?BsPutBits@@YAXPAVTBitStream@@FI@Z @ 16 NONAME ; void BsPutBits(class TBitStream *, short, unsigned int) - ?BsPutBitsByteAlign@@YAFPAVTBitStream@@@Z @ 17 NONAME ; short BsPutBitsByteAlign(class TBitStream *) - ?BsReset@@YAXPAVTBitStream@@@Z @ 18 NONAME ; void BsReset(class TBitStream *) - ?BsRewindNBits@@YAXPAVTBitStream@@I@Z @ 19 NONAME ; void BsRewindNBits(class TBitStream *, unsigned int) - ?BsSaveBufState@@YAXPAVTBitStream@@0@Z @ 20 NONAME ; void BsSaveBufState(class TBitStream *, class TBitStream *) - ?BsSetBitsRead@@YAXPAVTBitStream@@I@Z @ 21 NONAME ; void BsSetBitsRead(class TBitStream *, unsigned int) - ?BsSkipBits@@YAXPAVTBitStream@@F@Z @ 22 NONAME ; void BsSkipBits(class TBitStream *, short) - ?BsSkipNBits@@YAXPAVTBitStream@@H@Z @ 23 NONAME ; void BsSkipNBits(class TBitStream *, int) - ?BsSlotsLeft@@YAIPAVTBitStream@@@Z @ 24 NONAME ; unsigned int BsSlotsLeft(class TBitStream *) - ?CountAACChunkLength@@YAFPAVTBitStream@@PAVCAACAudDec@@PAF@Z @ 25 NONAME ; short CountAACChunkLength(class TBitStream *, class CAACAudDec *, short *) - ?CreateAACAudDecL@@YAXAAPAVCAACAudDec@@FF@Z @ 26 NONAME ; void CreateAACAudDecL(class CAACAudDec * &, short, short) - ?CreateAACPlusAudDecL@@YAEPAVCAACAudDec@@FEE@Z @ 27 NONAME ; unsigned char CreateAACPlusAudDecL(class CAACAudDec *, short, unsigned char, unsigned char) - ?DeleteAACAudDec@@YAPAVCAACAudDec@@PAV1@@Z @ 28 NONAME ; class CAACAudDec * DeleteAACAudDec(class CAACAudDec *) - ?EstimateBitrate@CMp3Edit@@QBEFPAVTMpTransportHandle@@E@Z @ 29 NONAME ; short CMp3Edit::EstimateBitrate(class TMpTransportHandle *, unsigned char) const - ?FileLengthInMs@CMp3Edit@@QBEIPAVTMpTransportHandle@@H@Z @ 30 NONAME ; unsigned int CMp3Edit::FileLengthInMs(class TMpTransportHandle *, int) const - ?FreeMode@CMp3Edit@@QBEFPAVTMpTransportHandle@@PAEIPAF22@Z @ 31 NONAME ; short CMp3Edit::FreeMode(class TMpTransportHandle *, unsigned char *, unsigned int, short *, short *, short *) const - ?GetAACGlobalGains@@YAEPAVTBitStream@@PAVCAACAudDec@@EPAEPAI@Z @ 32 NONAME ; unsigned char GetAACGlobalGains(class TBitStream *, class CAACAudDec *, unsigned char, unsigned char *, unsigned int *) - ?GetFrameTime@CMp3Edit@@QBEHPAVTMpTransportHandle@@@Z @ 33 NONAME ; int CMp3Edit::GetFrameTime(class TMpTransportHandle *) const - ?GetMPGlobalGains@CMp3Edit@@QAEEPAVTBitStream@@PAVTMpTransportHandle@@PAEPAI@Z @ 34 NONAME ; unsigned char CMp3Edit::GetMPGlobalGains(class TBitStream *, class TMpTransportHandle *, unsigned char *, unsigned int *) - ?GetSeekOffset@CMp3Edit@@QBEHPAVTMpTransportHandle@@H@Z @ 35 NONAME ; int CMp3Edit::GetSeekOffset(class TMpTransportHandle *, int) const - ?Init@CMPAudDec@@QAEXPAVTMpTransportHandle@@@Z @ 36 NONAME ; void CMPAudDec::Init(class TMpTransportHandle *) - ?InitAACAudDec@@YAXPAVCAACAudDec@@FFE@Z @ 37 NONAME ; void InitAACAudDec(class CAACAudDec *, short, short, unsigned char) - ?InitTransport@CMp3Edit@@QBEXPAVTMpTransportHandle@@@Z @ 38 NONAME ; void CMp3Edit::InitTransport(class TMpTransportHandle *) const - ?IsAACParametricStereoEnabled@@YAEPAVCAACAudDec@@@Z @ 39 NONAME ; unsigned char IsAACParametricStereoEnabled(class CAACAudDec *) - ?IsAACSBREnabled@@YAEPAVCAACAudDec@@@Z @ 40 NONAME ; unsigned char IsAACSBREnabled(class CAACAudDec *) - ?NewL@CMPAudDec@@SAPAV1@XZ @ 41 NONAME ; class CMPAudDec * CMPAudDec::NewL(void) - ?NewL@CMp3Edit@@SAPAV1@XZ @ 42 NONAME ; class CMp3Edit * CMp3Edit::NewL(void) - ?ResetAACAudDec@@YAXPAVCAACAudDec@@@Z @ 43 NONAME ; void ResetAACAudDec(class CAACAudDec *) - ?SeekSync@CMp3Edit@@QBEFPAVTMpTransportHandle@@PAEIPAF22E@Z @ 44 NONAME ; short CMp3Edit::SeekSync(class TMpTransportHandle *, unsigned char *, unsigned int, short *, short *, short *, unsigned char) const - ?SetAACGlobalGains@@YAXPAVTBitStream@@EPAEPAI@Z @ 45 NONAME ; void SetAACGlobalGains(class TBitStream *, unsigned char, unsigned char *, unsigned int *) - ?SetAACPlusGlobalGains@@YAXPAVTBitStream@@0PAVCAACAudDec@@FEPAEPAI@Z @ 46 NONAME ; void SetAACPlusGlobalGains(class TBitStream *, class TBitStream *, class CAACAudDec *, short, unsigned char, unsigned char *, unsigned int *) - ?SetMPGlobalGains@CMp3Edit@@QAEXPAVTBitStream@@EPAEPAI@Z @ 47 NONAME ; void CMp3Edit::SetMPGlobalGains(class TBitStream *, unsigned char, unsigned char *, unsigned int *) - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/eabi/aedmp3aaclibu.def --- a/videoeditorengine/mp3aacManipLib/eabi/aedmp3aaclibu.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -EXPORTS - _Z10BsCopyBitsP10TBitStreamS0_i @ 1 NONAME - _Z10BsSkipBitsP10TBitStreams @ 2 NONAME - _Z11BsByteAlignP10TBitStream @ 3 NONAME - _Z11BsCopyBytesP10TBitStreamPhj @ 4 NONAME - _Z11BsLookAheadP10TBitStreams @ 5 NONAME - _Z11BsSkipNBitsP10TBitStreami @ 6 NONAME - _Z11BsSlotsLeftP10TBitStream @ 7 NONAME - _Z12BsGetBufSizeP10TBitStream @ 8 NONAME - _Z13BsGetBitsReadP10TBitStream @ 9 NONAME - _Z13BsRewindNBitsP10TBitStreamj @ 10 NONAME - _Z13BsSetBitsReadP10TBitStreamj @ 11 NONAME - _Z13InitAACAudDecP10CAACAudDecssh @ 12 NONAME - _Z14BsBufferUpdateP10TBitStreami @ 13 NONAME - _Z14BsSaveBufStateP10TBitStreamS0_ @ 14 NONAME - _Z14ResetAACAudDecP10CAACAudDec @ 15 NONAME - _Z15BsClearBitsReadP10TBitStream @ 16 NONAME - _Z15DeleteAACAudDecP10CAACAudDec @ 17 NONAME - _Z15IsAACSBREnabledP10CAACAudDec @ 18 NONAME - _Z16CreateAACAudDecLRP10CAACAudDecss @ 19 NONAME - _Z17GetAACGlobalGainsP10TBitStreamP10CAACAudDechPhPj @ 20 NONAME - _Z17SetAACGlobalGainsP10TBitStreamhPhPj @ 21 NONAME - _Z18BsPutBitsByteAlignP10TBitStream @ 22 NONAME - _Z19AACGetMP4ConfigInfoihhsPhh @ 23 NONAME - _Z19CountAACChunkLengthP10TBitStreamP10CAACAudDecPs @ 24 NONAME - _Z20BsGetBufOriginalSizeP10TBitStream @ 25 NONAME - _Z20CreateAACPlusAudDecLP10CAACAudDecshh @ 26 NONAME - _Z21SetAACPlusGlobalGainsP10TBitStreamS0_P10CAACAudDecshPhPj @ 27 NONAME - _Z28IsAACParametricStereoEnabledP10CAACAudDec @ 28 NONAME - _Z6BsInitP10TBitStreamPhj @ 29 NONAME - _Z7BsResetP10TBitStream @ 30 NONAME - _Z9BsGetBitsP10TBitStreams @ 31 NONAME - _Z9BsPutBitsP10TBitStreamsj @ 32 NONAME - _ZN8CMp3Edit16GetMPGlobalGainsEP10TBitStreamP18TMpTransportHandlePhPj @ 33 NONAME - _ZN8CMp3Edit16SetMPGlobalGainsEP10TBitStreamhPhPj @ 34 NONAME - _ZN8CMp3Edit4NewLEv @ 35 NONAME - _ZN8CMp3EditD0Ev @ 36 NONAME - _ZN8CMp3EditD1Ev @ 37 NONAME - _ZN8CMp3EditD2Ev @ 38 NONAME - _ZN9CMPAudDec4InitEP18TMpTransportHandle @ 39 NONAME - _ZN9CMPAudDec4NewLEv @ 40 NONAME - _ZN9CMPAudDecD0Ev @ 41 NONAME - _ZN9CMPAudDecD1Ev @ 42 NONAME - _ZN9CMPAudDecD2Ev @ 43 NONAME - _ZNK8CMp3Edit12GetFrameTimeEP18TMpTransportHandle @ 44 NONAME - _ZNK8CMp3Edit13GetSeekOffsetEP18TMpTransportHandlei @ 45 NONAME - _ZNK8CMp3Edit13InitTransportEP18TMpTransportHandle @ 46 NONAME - _ZNK8CMp3Edit14FileLengthInMsEP18TMpTransportHandlei @ 47 NONAME - _ZNK8CMp3Edit15EstimateBitrateEP18TMpTransportHandleh @ 48 NONAME - _ZNK8CMp3Edit8FreeModeEP18TMpTransportHandlePhjPsS3_S3_ @ 49 NONAME - _ZNK8CMp3Edit8SeekSyncEP18TMpTransportHandlePhjPsS3_S3_h @ 50 NONAME - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/group/aedmp3aacLib.mmp --- a/videoeditorengine/mp3aacManipLib/group/aedmp3aacLib.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include - - -TARGET aedmp3aaclib.dll -TARGETTYPE dll -UID 0x1000008d 0x10204BF3 - -VENDORID VID_DEFAULT -CAPABILITY CAP_GENERAL_DLL - -NOEXPORTLIBRARY - -SOURCEPATH ../src - -SOURCE AudPanic.cpp -SOURCE mp3API.cpp -SOURCE mstream.cpp - -SOURCEPATH ../AACGain/src - -SOURCE aacaud.cpp -SOURCE dec_huftables.cpp -SOURCE huffdec1.cpp -SOURCE huffdec2.cpp -SOURCE huffdec3.cpp -SOURCE coupling.cpp -SOURCE sfbdata.cpp -SOURCE nok_bits2.cpp -SOURCE Tool.cpp -SOURCE aacdef.cpp -SOURCE chandefs.cpp -SOURCE sbr_bitmux.cpp -SOURCE sbr_demux.cpp -SOURCE sbr_codec.cpp -SOURCE sbr_freq_sca.cpp -SOURCE sbr_rom.cpp - -SOURCEPATH ../MP3Gain/src - -SOURCE mpif.cpp -SOURCE l3huffman.cpp -SOURCE l3sfb.cpp -SOURCE layer3.cpp -SOURCE mpaud.cpp - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/libc - -USERINCLUDE ../inc -USERINCLUDE ../AACGain/inc -USERINCLUDE ../MP3Gain/inc -USERINCLUDE ../../AudioEditorEngine/Inc - -LIBRARY euser.lib - -// End of File - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/group/aedmp3aacLibLib.mmp --- a/videoeditorengine/mp3aacManipLib/group/aedmp3aacLibLib.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -TARGET aedmp3aaclib.lib -TARGETTYPE IMPLIB -UID 0x1000008d 0x10204BF3 - -// End of File - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/group/bld.inf --- a/videoeditorengine/mp3aacManipLib/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES -aedmp3aacLib.mmp -aedmp3aacLibLib.mmp diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/inc/AACAPI.h --- a/videoeditorengine/mp3aacManipLib/inc/AACAPI.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef _MP3AACMANIPLIB_H_ -#define _MP3AACMANIPLIB_H_ - -#include "tool.h" -#include "sbr_codec.h" - -/* - Purpose: AAC decoder core. - Explanation: - - - Implemented in aacaud.cpp -*/ - -class CAACAudDec : public CBase -{ - -public: - - static CAACAudDec* NewL(int16 aNumCh, int16 aNumCCh); - ~CAACAudDec(); - - void GetFIL(TBitStream *bs, uint32 prevEleID); - int32 extension_payload(TBitStream *bs, int32 cnt, uint32 prevEleID); - - int16 numCh; - int16 numCCh; - int16 numOutCh; - int16 samplesPerFrame; - - CToolInfo **tool; - CMC_Info* mc_info; - CCInfo **ccInfo; - CWindowInfo **winInfo; - - /*-- Huffman tables. --*/ - Huffman_DecInfo **huf; - Huffman_DecSfInfo *sf_huf; - - SbrBitStream *sbrStream; - SBR_Decoder *sbrDecInfo; - -private: - void ConstructL(int16 aNumCh, int16 aNumCCh); - CAACAudDec(); - - TInt windowAmount; - -}; - -/* -* Methods for AAC gain manipulation --------------> -*/ - -/*-- Closes AAC decoder handle. --*/ -IMPORT_C CAACAudDec * -DeleteAACAudDec(CAACAudDec *aac); - -/*-- Creates AAC decoder handle. --*/ -IMPORT_C void -CreateAACAudDecL(CAACAudDec*& aDecHandle, int16 numCh, int16 numCCh); - - -/*-- Creates (e)AAC+ decoder handle. --*/ -IMPORT_C uint8 -CreateAACPlusAudDecL(CAACAudDec *aDecHandle, int16 sampleRateIdx, uint8 isStereo, uint8 isDualMono); - - -/*-- Initializes AAC decoder handle. --*/ -IMPORT_C void -InitAACAudDec(CAACAudDec *aac, int16 profile, int16 sampleRateIdx, uint8 is960); - -/*-- Resets AAC decoder handle. --*/ -IMPORT_C void -ResetAACAudDec(CAACAudDec *aac); - -/*-- Counts AAC frame length (and parses the frame at same cost). --*/ -IMPORT_C int16 -CountAACChunkLength(TBitStream *bs, CAACAudDec *aac, int16 *bytesInFrame); - -/*-- Stores global gain values. --*/ -IMPORT_C void -SetAACGlobalGains(TBitStream* bs, - uint8 numGains, uint8 *globalGain, uint32 *globalGainPos); - - -IMPORT_C void -SetAACPlusGlobalGains(TBitStream* bs, TBitStream* bsOut, CAACAudDec *aac, int16 gainChangeValue, - uint8 numGains, uint8 *globalGain, uint32 *globalGainPos); - - -/*-- Extracts global gain values. --*/ -IMPORT_C uint8 -GetAACGlobalGains(TBitStream* bs, CAACAudDec *aac, uint8 nBufs, uint8 *globalGain, uint32 *globalGainPos); - -/** - * - * Retrieves decoder specific information for the - * specified AAC encoder configuration. This information should be - * placed in the MP4/3GP header to describe the encoder - * parameters for the AAC decoder at the receiving end. - * - * @param aacInfo Handle to AAC configuration information - * @param pBuf Pointer to decoder specific information buffer - * @param nBytesInBuf Size of 'pBuf' - * - * @return Number of bytes in 'pBuf' - */ -IMPORT_C int16 -AACGetMP4ConfigInfo(int32 sampleRate, uint8 profile, uint8 nChannels, int16 frameLen, - uint8 *pBuf, uint8 nBytesInBuf); - - -/*-- Checks whether parametric stereo enabled in the AAC bitstream. --*/ -IMPORT_C uint8 -IsAACParametricStereoEnabled(CAACAudDec *aac); - - - -/*-- Checks whether SBR enabled in the AAC bitstream. --*/ -IMPORT_C uint8 -IsAACSBREnabled(CAACAudDec *aac); - - -/* -* <------- Methods for AAC gain manipulation -*/ - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/inc/Mp3API.h --- a/videoeditorengine/mp3aacManipLib/inc/Mp3API.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,208 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef _MP3API_ -#define _MP3API_ - - -#include "defines.h" -#include "mstream.h" - - - - - -/* - Purpose: Structure interface for MP1/2/3 transport stream. - Explanation: - */ -class TMpTransportHandle -{ -public: - - TMPEG_Header header; - TMPEG_Header headerOld; - - int16 SlotTable[15]; - int16 FreeFormatSlots; /*-- Number of bytes in free format frame. */ - - int16 mainDataSlots; /*-- Payload size. */ - - BOOL ms_stereo; /* MS (Mid/Side) stereo used. */ - BOOL is_stereo; /* Intensity stereo used. */ - BOOL lsf; /* MPEG-2 LSF stream present. */ - BOOL mpeg25; /* MPEG-2.5 stream present. */ - - /*-- Transport stream to be used/in use. --*/ - SYNC_STATUS transportType; - SyncInfo syncInfo; - - /*-- Exec state when seeking next MPx frame. --*/ - int16 offsetBits; - ExecState execState; - - /*-- CRC codeword. --*/ - TCRC_Check crc; - - /*-- Average number of bytes reserved for each frame. --*/ - int32 aveFrameLen; - -}; - - -/** - * Data structure for mp3 frame search. - */ -class TMpFrameState -{ -public: - /** - * Number of read bytes when searching start of frame. - * This value is within the input buffer and also the header - * is read after start of frame has been found. - */ - int16 readBytes; - - /** - * Number of header bytes present for current MP3 frame. - */ - int16 headerBytes; - - /** - * Number of payload bytes for current MP3 frame. The total frame - * size is 'headerBytes' + 'frameBytes'. - */ - int16 frameBytes; - - /** - * Total number of bytes read when searching the start of frame. - */ - int32 totalReadBytes; - -}; - - - - -/* - Purpose: Parameters of core engine. - Explanation: - */ -class CMPAudDec : public CBase -{ -public: - - IMPORT_C static CMPAudDec* NewL(); - IMPORT_C ~CMPAudDec(); - IMPORT_C void Init(TMpTransportHandle *aMpFileFormat); - - /*-- Common to all layers. --*/ - uint8 *bitReserv; - TMPEG_Frame *frame; - - /*-- Layer III specific parameters. --*/ - TBitStream br; - CHuffman *huffman; - CIII_Side_Info *side_info; - - int16 PrevSlots; - //int32 FrameStart; - BOOL SkipBr; - BOOL WasSeeking; - - /*-- Transport handle. --*/ - TMpTransportHandle *mpFileFormat; - - -private: - - CMPAudDec(); - void ConstructL(); - -}; - -class CMp3Edit : public CBase - { - -public: - - IMPORT_C static CMp3Edit* NewL(); - IMPORT_C ~CMp3Edit(); - - IMPORT_C uint32 - FileLengthInMs(TMpTransportHandle *tHandle, int32 fileSize) const; - - IMPORT_C int32 - GetSeekOffset(TMpTransportHandle *tHandle, int32 seekPos) const; - - IMPORT_C int32 - GetFrameTime(TMpTransportHandle *tHandle) const; - - IMPORT_C void - InitTransport(TMpTransportHandle *tHandle) const; - - IMPORT_C int16 - SeekSync(TMpTransportHandle *tHandle, uint8 *syncBuf, - uint32 syncBufLen, int16 *readBytes, - int16 *frameBytes, int16 *headerBytes, - uint8 initMode) const; - - IMPORT_C int16 - FreeMode(TMpTransportHandle *tHandle, uint8 *syncBuf, - uint32 syncBufLen, int16 *readBytes, - int16 *frameBytes, int16 *headerBytes) const; - - IMPORT_C int16 - EstimateBitrate(TMpTransportHandle *tHandle, uint8 isVbr) const; - - - - - /*-- Closes MPEG Layer I/II/III decoder handle. --*/ - IMPORT_C CMPAudDec * - DeleteMPAudDec(CMPAudDec *mpAud); - - /*-- Creates MPEG Layer I/II/III decoder handle. --*/ - IMPORT_C CMPAudDec * - CreateMPAudDec(void); - - /*-- Initializes MPEG Layer I/II/III decoder handle. --*/ - IMPORT_C void - InitMPAudDec(CMPAudDec *mpAud, TMpTransportHandle *mpFileFormat); - - /*-- Resets MPEG Layer I/II/III decoder handle. --*/ - IMPORT_C void - ResetMPAudDec(CMPAudDec *mpAud); - - /*-- Stores global gain values. --*/ - IMPORT_C void - SetMPGlobalGains(TBitStream *bs, uint8 numGains, uint8 *globalGain, uint32 *gainPos); - - /*-- Extracts global gain values. --*/ - IMPORT_C uint8 - GetMPGlobalGains(TBitStream *bs, TMpTransportHandle *tHandle, uint8 *globalGain, uint32 *gainPos); - -private: - - void ConstructL(); - CMp3Edit(); - - }; - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/inc/Mp3MixAPI.h --- a/videoeditorengine/mp3aacManipLib/inc/Mp3MixAPI.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef MP3MIXAPI__H -#define MP3MIXAPI__H - -#include "ProcInFileHandler.h" -#include "ProcOutFileHandler.h" -#include "imdct2.h" -#include "editdef.h" - - -class CImdct2; - -class CMp3Mix : public CBase - { - -public: - - IMPORT_C static CMp3Mix* NewL(); - IMPORT_C ~CMp3Mix(); - - IMPORT_C TBool StartMixingL(CProcInFileHandler* aMP3InFileHandler1, - TInt aStartPosMilli1, - CProcInFileHandler* aMP3InFileHandler2, - TInt aStartPosMilli2, - CProcOutFileHandler* aMP3OutFileHandler, - TInt aBitrateShort, - TInt aBitrateLong, - TInt& aMixingDuration); - - IMPORT_C TBool MixFrameL(HBufC8* aMP3InBuffer1, HBufC8* aMP3InBuffer2, TInt& aFramesProcessed); - - IMPORT_C TBool StopMixing(); - - - static TBool WriteL(TDesC& aMessage); - TBool WriteFloatsL(FLOAT* aArray, TInt aLen) const; - TBool WriteIntsL(TInt16* aArray, TInt aLen); - - - -private: - - void ConstructL(); - CMp3Mix(); - - CProcInFileHandler* iIn1; - CProcInFileHandler* iIn2; - CProcOutFileHandler* iOut1; - TAudioMixerInputInfo* iInfo; - CEditorAPIHandle* iEditorAPIHandle1; - CEditorAPIHandle* iEditorAPIHandle2; - TUint iFrameCount1; - TUint iFrameCount2; - - CEditorChunk* iChunk1; - CEditorChunk* iChunk2; - - - TUint iFramesMixed; - - CL3MixerHelper* iL3Mix; - CImdct2* imdct2; - - TInt iMixingDuration; - - RFile* iFile; - RFs* iFs; - TBool iFileOpened; - HBufC8* iWriteBuffer; - - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/inc/ProcConstants.h --- a/videoeditorengine/mp3aacManipLib/inc/ProcConstants.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,964 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* Copyright (C) 2004 Nokia Corporation. */ - -#ifndef __PROCCONSTANTS_H__ -#define __PROCCONSTANTS_H__ - -#include - -const TInt KAmrBitRates[] = - { - 4750, - 5150, - 5900, - 6700, - 7400, - 7950, - 10200, - 12200 - }; - -// bit locations for fixed codebook gains - -// subframe 1, bitrate 12.2 kBit/s -const TUint8 KAmrGains122_1[] = {59+8,63+8,67+8,92+8,104+8}; -// subframe 2, bitrate 12.2 kBit/s -const TUint8 KAmrGains122_2[] = {60+8,64+8,68+8,93+8,105+8}; -// subframe 3, bitrate 12.2 kBit/s -const TUint8 KAmrGains122_3[] = {61+8,65+8,69+8,94+8,106+8}; -// subframe 4, bitrate 12.2 kBit/s -const TUint8 KAmrGains122_4[] = {62+8,66+8,70+8,95+8,107+8}; - -// subframe 1, bitrate 7.95 kBit/s -const TUint8 KAmrGains795_1[] = {23+8,27+8,31+8,59+8,83+8}; -// subframe 2, bitrate 7.95 kBit/s -const TUint8 KAmrGains795_2[] = {24+8,28+8,32+8,60+8,84+8}; -// subframe 3, bitrate 7.95 kBit/s -const TUint8 KAmrGains795_3[] = {25+8,29+8,33+8,61+8,85+8}; -// subframe 4, bitrate 7.95 kBit/s -const TUint8 KAmrGains795_4[] = {26+8,30+8,34+8,62+8,86+8}; - - -// subframe 1, bitrate 10.2 kBit/s -const TUint8 KAmrGains102_1[] = {33+8,53+8,83+8,34+8,35+8,82+8,84+8}; -// subframe 2, bitrate 10.2 kBit/s -const TUint8 KAmrGains102_2[] = {36+8,54+8,86+8,37+8,38+8,85+8,87+8}; -// subframe 3, bitrate 10.2 kBit/s -const TUint8 KAmrGains102_3[] = {39+8,55+8,89+8,40+8,41+8,88+8,90+8}; -// subframe 4, bitrate 10.2 kBit/s -const TUint8 KAmrGains102_4[] = {42+8,56+8,92+8,43+8,44+8,91+8,93+8}; - - -// subframe 1, bitrate 7.4 kBit/s -const TUint8 KAmrGains740_1[] = {27+8,31+8,78+8,35+8,39+8,57+8,68+8}; -// subframe 2, bitrate 7.4 kBit/s -const TUint8 KAmrGains740_2[] = {28+8,32+8,79+8,36+8,40+8,58+8,69+8}; -// subframe 3, bitrate 7.4 kBit/s -const TUint8 KAmrGains740_3[] = {29+8,33+8,80+8,37+8,41+8,59+8,70+8}; -// subframe 4, bitrate 7.4 kBit/s -const TUint8 KAmrGains740_4[] = {30+8,34+8,81+8,38+8,42+8,60+8,71+8}; - - -// subframe 1, bitrate 6.7 kBit/s -const TUint8 KAmrGains670_1[] = {35+8,85+8,66+8,41+8,45+8,55+8,74+8}; -// subframe 2, bitrate 6.7 kBit/s -const TUint8 KAmrGains670_2[] = {36+8,84+8,67+8,42+8,46+8,56+8,75+8}; -// subframe 3, bitrate 6.7 kBit/s -const TUint8 KAmrGains670_3[] = {37+8,83+8,68+8,43+8,47+8,57+8,76+8}; -// subframe 4, bitrate 6.7 kBit/s -const TUint8 KAmrGains670_4[] = {38+8,82+8,69+8,44+8,48+8,58+8,77+8}; - - -// subframe 1, bitrate 5.9 kBit/s -const TUint8 KAmrGains590_1[] = {76+8,55+8,51+8,47+8,37+8,29+8}; -// subframe 2, bitrate 5.9 kBit/s -const TUint8 KAmrGains590_2[] = {77+8,56+8,52+8,48+8,38+8,30+8}; -// subframe 3, bitrate 5.9 kBit/s -const TUint8 KAmrGains590_3[] = {78+8,57+8,53+8,49+8,39+8,31+8}; -// subframe 4, bitrate 5.9 kBit/s -const TUint8 KAmrGains590_4[] = {79+8,58+8,54+8,50+8,40+8,32+8}; - - - -// subframe 1, bitrate 5.15 kBit/s -const TUint8 KAmrGains515_1[] = {55+8,45+8,36+8,26+8,25+8,24+8}; -// subframe 2, bitrate 5.15 kBit/s -const TUint8 KAmrGains515_2[] = {56+8,46+8,37+8,29+8,28+8,27+8}; -// subframe 3, bitrate 5.15 kBit/s -const TUint8 KAmrGains515_3[] = {57+8,47+8,38+8,32+8,31+8,30+8}; -// subframe 4, bitrate 5.15 kBit/s -const TUint8 KAmrGains515_4[] = {58+8,48+8,39+8,35+8,34+8,33+8}; - - -//subframes 1 & s, bitrate 4.75 kBit/s -const TUint8 KAmrGains475_1_2[] = {49+8,48+8,47+8,46+8,31+8,30+8,29+8,28+8}; -const TUint8 KAmrGains475_3_4[] = {43+8,42+8,41+8,40+8,35+8,34+8,33+8,32+8}; - - -// Gain table 12.2 kBit/s and 7.95 kBit/s, scalar quantized -const TInt KAmrGainTable122[] = - { - 159, - 206, - 268, - 349, - 419, - 482, - 554, - 637, - 733, - 842, - 969, - 1114, - 1281, - 1473, - 1694, - 1948, - 2241, - 2577, - 2963, - 3408, - 3919, - 4507, - 5183, - 5960, - 6855, - 7883, - 9065, - 10425, - 12510, - 16263, - 21142, - 27485 - }; - -const TInt KAmrLargestGain122 = 27485; - -// Gain table, 10.2, 6.70 and 7.40 kBit/s vector quantized - -// index = 0...127 -// KAmrGainTable[2*index] = g_pitch -// KAmrGainTable[2*index+1] = g_fac (fixed codebook gain) - -const TInt KAmrGainTable102[] = - { -//g_pit, g_fac - 577, 662, - 806, 1836, - 3109, 1052, - 4181, 1387, - 2373, 1425, - 3248, 1985, - 1827, 2320, - 941, 3314, - 2351, 2977, - 3616, 2420, - 3451, 3096, - 2955, 4301, - 1848, 4500, - 3884, 5416, - 1187, 7210, - 3083, 9000, - 7384, 883, - 5962, 1506, - 5155, 2134, - 7944, 2009, - 6507, 2250, - 7670, 2752, - 5952, 3016, - 4898, 3764, - 6989, 3588, - 8174, 3978, - 6064, 4404, - 7709, 5087, - 5523, 6021, - 7769, 7126, - 6060, 7938, - 5594, 11487, - 10581, 1356, - 9049, 1597, - 9794, 2035, - 8946, 2415, - 10296, 2584, - 9407, 2734, - 8700, 3218, - 9757, 3395, - 10177, 3892, - 9170, 4528, - 10152, 5004, - 9114, 5735, - 10500, 6266, - 10110, 7631, - 8844, 8727, - 8956, 12496, - 12924, 976, - 11435, 1755, - 12138, 2328, - 11388, 2368, - 10700, 3064, - 12332, 2861, - 11722, 3327, - 11270, 3700, - 10861, 4413, - 12082, 4533, - 11283, 5205, - 11960, 6305, - 11167, 7534, - 12128, 8329, - 10969, 10777, - 10300, 17376, - 13899, 1681, - 12580, 2045, - 13265, 2439, - 14033, 2989, - 13452, 3098, - 12396, 3658, - 13510, 3780, - 12880, 4272, - 13533, 4861, - 12667, 5457, - 13854, 6106, - 13031, 6483, - 13557, 7721, - 12957, 9311, - 13714, 11551, - 12591, 15206, - 15113, 1540, - 15072, 2333, - 14527, 2511, - 14692, 3199, - 15382, 3560, - 14133, 3960, - 15102, 4236, - 14332, 4824, - 14846, 5451, - 15306, 6083, - 14329, 6888, - 15060, 7689, - 14406, 9426, - 15387, 9741, - 14824, 14271, - 13600, 24939, - 16396, 1969, - 16817, 2832, - 15713, 2843, - 16104, 3336, - 16384, 3963, - 16940, 4579, - 15711, 4599, - 16222, 5448, - 16832, 6382, - 15745, 7141, - 16326, 7469, - 16611, 8624, - 17028, 10418, - 15905, 11817, - 16878, 14690, - 16515, 20870, - 18142, 2083, - 19401, 3178, - 17508, 3426, - 20054, 4027, - 18069, 4249, - 18952, 5066, - 17711, 5402, - 19835, 6192, - 17950, 7014, - 21318, 7877, - 17910, 9289, - 19144, 9290, - 20517, 11381, - 18075, 14485, - 19999, 17882, - 18842, 32764 - }; - -const TInt KAmrLargestGain102 = 32764; - - -// Gain table, 5.9 and 5.15 kBit/s vector quantized - -// index = 0...127 -// KAmrGainTable[2*index] = g_pitch -// KAmrGainTable[2*index+1] = g_fac (fixed codebook gain) - -const TInt KAmrGainTable590[] = - { -//g_pit, g_fac - 10813, 28753, - 20480, 2785, - 18841, 6594, - 6225, 7413, - 17203, 10444, - 21626, 1269, - 21135, 4423, - 11304, 1556, - 19005, 12820, - 17367, 2498, - 17858, 4833, - 9994, 2498, - 17530, 7864, - 14254, 1884, - 15892, 3153, - 6717, 1802, - 18186, 20193, - 18022, 3031, - 16711, 5857, - 8847, 4014, - 15892, 8970, - 18022, 1392, - 16711, 4096, - 8192, 655, - 15237, 13926, - 14254, 3112, - 14090, 4669, - 5406, 2703, - 13434, 6553, - 12451, 901, - 12451, 2662, - 3768, 655, - 14745, 23511, - 19169, 2457, - 20152, 5079, - 6881, 4096, - 20480, 8560, - 19660, 737, - 19005, 4259, - 7864, 2088, - 11468, 12288, - 15892, 1474, - 15728, 4628, - 9175, 1433, - 16056, 7004, - 14827, 737, - 15073, 2252, - 5079, 1228, - 13271, 17326, - 16547, 2334, - 15073, 5816, - 3932, 3686, - 14254, 8601, - 16875, 778, - 15073, 3809, - 6062, 614, - 9338, 9256, - 13271, 1761, - 13271, 3522, - 2457, 1966, - 11468, 5529, - 10485, 737, - 11632, 3194, - 1474, 778 - }; - -const TInt KAmrLargestGain590 = 23511; - - -// index = 0...127 -// KAmrGainTable[4*index] = g_pitch(even frame) -// KAmrGainTable[4*index+1] = g_fac(even frame) -// KAmrGainTable[4*index+2] = g_pitch(odd frame) -// KAmrGainTable[4*index+3] = g_fac(odd frame) - - -const TInt KAmrGainTable475[] = - { -//g_pit(0), g_fac(0), g_pit(1), g_fac(1) - 812, 128, 542, 140, - 2873, 1135, 2266, 3402, - 2067, 563, 12677, 647, - 4132, 1798, 5601, 5285, - 7689, 374, 3735, 441, - 10912, 2638, 11807, 2494, - 20490, 797, 5218, 675, - 6724, 8354, 5282, 1696, - 1488, 428, 5882, 452, - 5332, 4072, 3583, 1268, - 2469, 901, 15894, 1005, - 14982, 3271, 10331, 4858, - 3635, 2021, 2596, 835, - 12360, 4892, 12206, 1704, - 13432, 1604, 9118, 2341, - 3968, 1538, 5479, 9936, - 3795, 417, 1359, 414, - 3640, 1569, 7995, 3541, - 11405, 645, 8552, 635, - 4056, 1377, 16608, 6124, - 11420, 700, 2007, 607, - 12415, 1578, 11119, 4654, - 13680, 1708, 11990, 1229, - 7996, 7297, 13231, 5715, - 2428, 1159, 2073, 1941, - 6218, 6121, 3546, 1804, - 8925, 1802, 8679, 1580, - 13935, 3576, 13313, 6237, - 6142, 1130, 5994, 1734, - 14141, 4662, 11271, 3321, - 12226, 1551, 13931, 3015, - 5081, 10464, 9444, 6706, - 1689, 683, 1436, 1306, - 7212, 3933, 4082, 2713, - 7793, 704, 15070, 802, - 6299, 5212, 4337, 5357, - 6676, 541, 6062, 626, - 13651, 3700, 11498, 2408, - 16156, 716, 12177, 751, - 8065, 11489, 6314, 2256, - 4466, 496, 7293, 523, - 10213, 3833, 8394, 3037, - 8403, 966, 14228, 1880, - 8703, 5409, 16395, 4863, - 7420, 1979, 6089, 1230, - 9371, 4398, 14558, 3363, - 13559, 2873, 13163, 1465, - 5534, 1678, 13138, 14771, - 7338, 600, 1318, 548, - 4252, 3539, 10044, 2364, - 10587, 622, 13088, 669, - 14126, 3526, 5039, 9784, - 15338, 619, 3115, 590, - 16442, 3013, 15542, 4168, - 15537, 1611, 15405, 1228, - 16023, 9299, 7534, 4976, - 1990, 1213, 11447, 1157, - 12512, 5519, 9475, 2644, - 7716, 2034, 13280, 2239, - 16011, 5093, 8066, 6761, - 10083, 1413, 5002, 2347, - 12523, 5975, 15126, 2899, - 18264, 2289, 15827, 2527, - 16265, 10254, 14651, 11319, - 1797, 337, 3115, 397, - 3510, 2928, 4592, 2670, - 7519, 628, 11415, 656, - 5946, 2435, 6544, 7367, - 8238, 829, 4000, 863, - 10032, 2492, 16057, 3551, - 18204, 1054, 6103, 1454, - 5884, 7900, 18752, 3468, - 1864, 544, 9198, 683, - 11623, 4160, 4594, 1644, - 3158, 1157, 15953, 2560, - 12349, 3733, 17420, 5260, - 6106, 2004, 2917, 1742, - 16467, 5257, 16787, 1680, - 17205, 1759, 4773, 3231, - 7386, 6035, 14342, 10012, - 4035, 442, 4194, 458, - 9214, 2242, 7427, 4217, - 12860, 801, 11186, 825, - 12648, 2084, 12956, 6554, - 9505, 996, 6629, 985, - 10537, 2502, 15289, 5006, - 12602, 2055, 15484, 1653, - 16194, 6921, 14231, 5790, - 2626, 828, 5615, 1686, - 13663, 5778, 3668, 1554, - 11313, 2633, 9770, 1459, - 14003, 4733, 15897, 6291, - 6278, 1870, 7910, 2285, - 16978, 4571, 16576, 3849, - 15248, 2311, 16023, 3244, - 14459, 17808, 11847, 2763, - 1981, 1407, 1400, 876, - 4335, 3547, 4391, 4210, - 5405, 680, 17461, 781, - 6501, 5118, 8091, 7677, - 7355, 794, 8333, 1182, - 15041, 3160, 14928, 3039, - 20421, 880, 14545, 852, - 12337, 14708, 6904, 1920, - 4225, 933, 8218, 1087, - 10659, 4084, 10082, 4533, - 2735, 840, 20657, 1081, - 16711, 5966, 15873, 4578, - 10871, 2574, 3773, 1166, - 14519, 4044, 20699, 2627, - 15219, 2734, 15274, 2186, - 6257, 3226, 13125, 19480, - 7196, 930, 2462, 1618, - 4515, 3092, 13852, 4277, - 10460, 833, 17339, 810, - 16891, 2289, 15546, 8217, - 13603, 1684, 3197, 1834, - 15948, 2820, 15812, 5327, - 17006, 2438, 16788, 1326, - 15671, 8156, 11726, 8556, - 3762, 2053, 9563, 1317, - 13561, 6790, 12227, 1936, - 8180, 3550, 13287, 1778, - 16299, 6599, 16291, 7758, - 8521, 2551, 7225, 2645, - 18269, 7489, 16885, 2248, - 17882, 2884, 17265, 3328, - 9417, 20162, 11042, 8320, - 1286, 620, 1431, 583, - 5993, 2289, 3978, 3626, - 5144, 752, 13409, 830, - 5553, 2860, 11764, 5908, - 10737, 560, 5446, 564, - 13321, 3008, 11946, 3683, - 19887, 798, 9825, 728, - 13663, 8748, 7391, 3053, - 2515, 778, 6050, 833, - 6469, 5074, 8305, 2463, - 6141, 1865, 15308, 1262, - 14408, 4547, 13663, 4515, - 3137, 2983, 2479, 1259, - 15088, 4647, 15382, 2607, - 14492, 2392, 12462, 2537, - 7539, 2949, 12909, 12060, - 5468, 684, 3141, 722, - 5081, 1274, 12732, 4200, - 15302, 681, 7819, 592, - 6534, 2021, 16478, 8737, - 13364, 882, 5397, 899, - 14656, 2178, 14741, 4227, - 14270, 1298, 13929, 2029, - 15477, 7482, 15815, 4572, - 2521, 2013, 5062, 1804, - 5159, 6582, 7130, 3597, - 10920, 1611, 11729, 1708, - 16903, 3455, 16268, 6640, - 9306, 1007, 9369, 2106, - 19182, 5037, 12441, 4269, - 15919, 1332, 15357, 3512, - 11898, 14141, 16101, 6854, - 2010, 737, 3779, 861, - 11454, 2880, 3564, 3540, - 9057, 1241, 12391, 896, - 8546, 4629, 11561, 5776, - 8129, 589, 8218, 588, - 18728, 3755, 12973, 3149, - 15729, 758, 16634, 754, - 15222, 11138, 15871, 2208, - 4673, 610, 10218, 678, - 15257, 4146, 5729, 3327, - 8377, 1670, 19862, 2321, - 15450, 5511, 14054, 5481, - 5728, 2888, 7580, 1346, - 14384, 5325, 16236, 3950, - 15118, 3744, 15306, 1435, - 14597, 4070, 12301, 15696, - 7617, 1699, 2170, 884, - 4459, 4567, 18094, 3306, - 12742, 815, 14926, 907, - 15016, 4281, 15518, 8368, - 17994, 1087, 2358, 865, - 16281, 3787, 15679, 4596, - 16356, 1534, 16584, 2210, - 16833, 9697, 15929, 4513, - 3277, 1085, 9643, 2187, - 11973, 6068, 9199, 4462, - 8955, 1629, 10289, 3062, - 16481, 5155, 15466, 7066, - 13678, 2543, 5273, 2277, - 16746, 6213, 16655, 3408, - 20304, 3363, 18688, 1985, - 14172, 12867, 15154, 15703, - 4473, 1020, 1681, 886, - 4311, 4301, 8952, 3657, - 5893, 1147, 11647, 1452, - 15886, 2227, 4582, 6644, - 6929, 1205, 6220, 799, - 12415, 3409, 15968, 3877, - 19859, 2109, 9689, 2141, - 14742, 8830, 14480, 2599, - 1817, 1238, 7771, 813, - 19079, 4410, 5554, 2064, - 3687, 2844, 17435, 2256, - 16697, 4486, 16199, 5388, - 8028, 2763, 3405, 2119, - 17426, 5477, 13698, 2786, - 19879, 2720, 9098, 3880, - 18172, 4833, 17336, 12207, - 5116, 996, 4935, 988, - 9888, 3081, 6014, 5371, - 15881, 1667, 8405, 1183, - 15087, 2366, 19777, 7002, - 11963, 1562, 7279, 1128, - 16859, 1532, 15762, 5381, - 14708, 2065, 20105, 2155, - 17158, 8245, 17911, 6318, - 5467, 1504, 4100, 2574, - 17421, 6810, 5673, 2888, - 16636, 3382, 8975, 1831, - 20159, 4737, 19550, 7294, - 6658, 2781, 11472, 3321, - 19397, 5054, 18878, 4722, - 16439, 2373, 20430, 4386, - 11353, 26526, 11593, 3068, - 2866, 1566, 5108, 1070, - 9614, 4915, 4939, 3536, - 7541, 878, 20717, 851, - 6938, 4395, 16799, 7733, - 10137, 1019, 9845, 964, - 15494, 3955, 15459, 3430, - 18863, 982, 20120, 963, - 16876, 12887, 14334, 4200, - 6599, 1220, 9222, 814, - 16942, 5134, 5661, 4898, - 5488, 1798, 20258, 3962, - 17005, 6178, 17929, 5929, - 9365, 3420, 7474, 1971, - 19537, 5177, 19003, 3006, - 16454, 3788, 16070, 2367, - 8664, 2743, 9445, 26358, - 10856, 1287, 3555, 1009, - 5606, 3622, 19453, 5512, - 12453, 797, 20634, 911, - 15427, 3066, 17037, 10275, - 18883, 2633, 3913, 1268, - 19519, 3371, 18052, 5230, - 19291, 1678, 19508, 3172, - 18072, 10754, 16625, 6845, - 3134, 2298, 10869, 2437, - 15580, 6913, 12597, 3381, - 11116, 3297, 16762, 2424, - 18853, 6715, 17171, 9887, - 12743, 2605, 8937, 3140, - 19033, 7764, 18347, 3880, - 20475, 3682, 19602, 3380, - 13044, 19373, 10526, 23124 -}; - -const TInt KAmrLargestGain475 = 26526; - - -// KAmrGaindB2Gamma[0] is gamma*10000 at -127 dB -// KAmrGaindB2Gamma[1] is gamma*10000 at -126 dB -// KAmrGaindB2Gamma[127] is gamma*10000 at 0 dB -// KAmrGaindB2Gamma[128] is gamma*10000 at 1 dB -// KAmrGaindB2Gamma[255] is gamma*10000 at 128 dB - -const TInt KAmrGain_dB2Gamma[] = - - { -53, -55, -58, -60, -62, -65, -68, -71, -74, -77, -80, -83, -87, -91, -94, -98, -103, -107, -111, -116, -121, -126, -131, -137, -143, -149, -155, -161, -168, -175, -183, -190, -198, -207, -215, -225, -234, -244, -254, -265, -276, -288, -300, -312, -325, -339, -353, -368, -384, -400, -417, -435, -453, -472, -492, -512, -534, -557, -580, -604, -630, -656, -684, -713, -743, -774, -807, -841, -876, -913, -952, -992, -1034, -1077, -1122, -1170, -1219, -1270, -1324, -1380, -1438, -1498, -1562, -1627, -1696, -1767, -1842, -1919, -2000, -2084, -2172, -2264, -2359, -2459, -2562, -2670, -2783, -2900, -3022, -3149, -3282, -3420, -3564, -3714, -3871, -4034, -4204, -4381, -4566, -4758, -4958, -5167, -5385, -5612, -5848, -6095, -6351, -6619, -6898, -7188, -7491, -7807, -8136, -8478, -8836, -9208, -9596, -10000, -10421, -10860, -11318, -11795, -12292, -12809, -13349, -13911, -14497, -15108, -15745, -16408, -17099, -17820, -18570, -19353, -20168, -21017, -21903, -22826, -23787, -24789, -25834, -26922, -28056, -29238, -30470, -31754, -33091, -34485, -35938, -37452, -39030, -40674, -42388, -44173, -46034, -47974, -49995, -52101, -54296, -56583, -58967, -61451, -64040, -66738, -69549, -72479, -75533, -78715, -82031, -85487, -89088, -92841, -96753, -100829, -105076, -109503, -114116, -118924, -123934, -129155, -134596, -140266, -146175, -152334, -158751, -165439, -172409, -179672, -187241, -195129, -203350, -211917, -220844, -230148, -239844, -249948, -260478, -271451, -282887, -294804, -307224, -320167, -333655, -347711, -362360, -377625, -393534, -410113, -427390, -445395, -464159, -483713, -504091, -525327, -547459, -570522, -594557, -619605, -645708, -672910, -701258, -730801, -761589, -793673, -827109, -861954, -898266, -936108, -975545, -1016643, -1059472, -1104106, -1150620, -1199093, -1249609, -1302253, -1357114, -1414287, -1473869, -1535960, -1600667, -1668101, -1738375, -1811609, -1887929, - }; - - - - -/* - * definition of modes for decoder - */ -enum Mode - { - MR475 = 0, - MR515, - MR59, - MR67, - MR74, - MR795, - MR102, - MR122, - MRDTX, - N_MODES /* number of (SPC) modes */ - }; - - - -class TProcessingEvent - { - -public: - - RArray iAllIndexes; // -1 = silence - TInt32 iPosition; //global position in milliseconds - TBool iCutIn; //true = cutIn, false = cutOut - TInt iChangedClipIndex; - - static TInt TProcessingEvent::Compare(const TProcessingEvent& c1, const TProcessingEvent& c2) - { - - if (c1.iPosition > c2.iPosition) - { - return 1; - } - else if (c1.iPosition < c2.iPosition) - { - return -1; - } - else - { - return 0; - } - } - - }; - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/inc/auddef.h --- a/videoeditorengine/mp3aacManipLib/inc/auddef.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,354 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - auddef.h - Constants and general declarations for MPEG type of audio formats. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef MPAUD_DEF_H_ -#define MPAUD_DEF_H_ - -/*- Project Headers. --*/ -#include "defines.h" - - -/************************************************************************** - External Objects Provided - *************************************************************************/ - -/*-- General MPx Definitions. --*/ -/* -#ifndef PI -#define PI (3.14159265358979) -#endif -#define MPEG_AUDIO_ID (1) -#define MPEG_PHASE2_LSF (0) -#define SBLIMIT (32) -#define SSLIMIT (18) -#define MAX_MONO_SAMPLES (SBLIMIT * SSLIMIT) -#define HAN_SIZE (512) -#define NUM_SUBWIN (16) -#define SCALE (32768L) -#define SYNC_WORD ((long) 0x7ff) - -#define HEADER_BITS (20) -#define MAX_LONG_SFB_BANDS (22) -#define MAX_SHORT_SFB_BANDS (13) -#define MAX_BITRESER_SIZE (512) -#define CRC_MAX_PAYLOAD (34) -*/ -#define MP_SYNC_WORD_LENGTH (11) -/*-- MPEG Header Definitions - Mode Values --*/ -#define MPG_MD_STEREO (0) -#define MPG_MD_JOINT_STEREO (1) -#define MPG_MD_DUAL_CHANNEL (2) -#define MPG_MD_MONO (3) - -/*-- Channel definitions. --*/ -#define MONO_CHAN (0) -#define MAX_CHANNELS (2) -#define LEFT_CHANNEL (MONO_CHAN) -#define RIGHT_CHANNEL (MONO_CHAN + 1) - -/* - Purpose: Masks those bit fields from the header to zero that - do not remain fixed from frame to frame. - Explanation: Following fields are assumed to be fixed : - * 12th bit from the sync word - * version - * layer description - * sampling rate - * channel mode (layer 3 only) - * copyright bit - * original bit - * de-emphasis - - Following fields can vary from frame to frame : - * protection bit - * bit rate - * padding bit - * private bit - * channel mode extension - */ -#define HEADER_MASK(header) ((uint32)header & 0x001E0CCF) - -/* - Purpose: Macro to extract layer description. - Explanation: This is the bit value, use MP_Header::layer_number method - to interpret this value. */ -#define LAYER_MASK(header) (((uint32)header >> 17) & 3) - -/* - Purpose: Frame detection status. - Explanation: - */ -typedef enum SEEK_STATUS -{ - SYNC_FOUND = 0, - SYNC_LOST, - SYNC_BITS_OUT, - SYNC_MP3_FREE - -} SEEK_STATUS; - -/* - Purpose: Sync layer codes. - Explanation: - */ -typedef enum SYNC_STATUS -{ - LAYER1_STREAM, - LAYER2_STREAM, - LAYER3_STREAM, - - INIT_LAYER1_STREAM, - INIT_LAYER2_STREAM, - INIT_LAYER3_STREAM, - - INIT_MP_STREAM, - GET_1ST_MPSYNC_STREAM, - GET_MPSYNC_STREAM, - GET_MPHEADER_STREAM, - - INIT_AAC_STREAM, - ADTS_STREAM, - GET_ADTSSYNC_STREAM, - GET_ADTSHEADER_STREAM - -} SYNC_STATUS; - -/* - Purpose: Bitrate modes. - Explanation: - */ -/* -typedef enum BrType -{ - UNKNOWN, - CBR, - VBR, - FREE - -} BrType; -*/ -/* - Purpose: - Explanation: - */ -typedef enum GLITCH -{ - GLITCH_FREE, - GLITCH0, - GLITCH1 - -} GLITCH; - -/* - Purpose: Message definitions. - Explanation: - */ -typedef enum MsgType -{ - NO_MESSAGES, - UPDATE_BUFFER, - SEEK_BUFFER, - GET_POSITION, - GET_SIZE - -} MsgType; - - -/* - Purpose: Definition of generic message parameter. - Explanation: - */ -typedef uint32 MsgParam; - -/* - Purpose: Message structure of the decoder and/or player. - Explanation: - */ -typedef struct MsgStr -{ - MsgType msgType; - MsgParam msgInParam; - MsgParam msgOutParam; - -} Msg; - -/* - Purpose: Execution state for user specified functions. - Explanation: - */ -typedef struct ExecStateStr -{ - GLITCH execMode; - int16 a0_s16[3]; - uint32 a0_u32[3]; - Msg *msg; - -} ExecState; - -/* - Purpose: Parent structure for sync layer processing. - Explanation: - */ -typedef struct SyncInfoStr -{ - int16 sync_length; /* Length of sync word. */ - int16 sync_word; /* Synchronization word. */ - int16 sync_mask; /* Bitmask for sync word detection. */ - SYNC_STATUS sync_status; /* Which layer we supposed to be decoding. */ - -} SyncInfo; - -enum -{ - VBR_MODE = 1, - FILE_SIZE_KNOWN = 2 -}; - -/* - Purpose: Frame detection status. - Explanation: - */ -/* - -CAN BE FOUND IN auddef.h -typedef enum SEEK_STATUS -{ - SYNC_FOUND, - SYNC_LOST, - SYNC_BITS_OUT - -} SEEK_STATUS; -*/ -/* - Purpose: State of the decoder. - Explanation: - */ -typedef enum DecState -{ - STATE_UNDEFINED, - DEC_INIT, - DEC_INIT_COMPLETE, - FIND_FIRST_FRAME, - FIND_FRAME, - FIND_PAYLOAD, - FIND_AVERAGE_BR, - DECODE_FRAME, - CORRUPTED_FRAME, - GET_PAYLOAD, - RESTART_AFTER_VBR, - DECODE_FRAME_CORRUPTED - -} DecState; - -/* - Purpose: Supported UI features. - Explanation: - */ -typedef enum UIMode -{ - UI_UNDEFINED, - UI_PLAY, - UI_STOP, - UI_WIND_FORWARD, - UI_WIND_BACKWARD, - UI_REPEAT_LOOP - -} UIMode; - -/* - Purpose: A-B repeat. - Explanation: - */ -typedef enum MARKER_ID -{ - RESET_MARKERS = -1, - A_MARKER, - B_MARKER - -} MARKER_ID; - -/* - Purpose: Bitrate modes. - Explanation: - */ - -typedef enum BrType -{ - UNKNOWN, - CBR, - VBR, - FREE - -} BrType; - - -/* - Purpose: Playback quality mappings. - Explanation: - */ -typedef enum QUALITY -{ - FULL_QUALITY, - HALF_QUALITY, - QUARTER_QUALITY - -} QUALITY; - -/* - Purpose: Error codes of the player. - Explanation: - */ -typedef enum MP3_ERROR -{ - AUDIO_OK = 0, - AUDIO_ERROR_CRC, - AUDIO_INVALID_LAYER, - AUDIO_INVALID_SYNTAX, - AUDIO_FREE_FORMAT_ERROR, - AUDIO_FREE_FORMAT_BR_ERROR, - AUDIO_BUFFER_TOO_SMALL - -} MP3_Error; - -/* - Purpose: General info about the file/stream. - Explanation: - */ -typedef struct TrackInfoStr -{ - int32 frequency; - int16 bitRate; - int16 numChannels; - int32 lengthInms; - uint32 numFrames; - BrType brType; - -} TrackInfo; - -/* - Purpose: Playback quality parameters and general init info. - Explanation: - */ -typedef struct InitParamStr -{ - uint8 out_channels; - uint8 decim_factor; - uint8 window_pruning; - uint8 alias_subbands; - uint8 imdct_subbands; - uint32 specFreqBinLimit; - - int16 bitrate; - int32 VBRframesLimit; - -} InitParam; - - - - -#endif /*-- MPAUD_DEF_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/inc/defines.h --- a/videoeditorengine/mp3aacManipLib/inc/defines.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - defines.h - Global data prototypes, compile switches etc. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2003 by Nokia Research Center, Speech and Audio Systems. - *************************************************************************/ - -#ifndef DEFINES_H_ -#define DEFINES_H_ - -#ifdef NOT_SYMBIAN_OS - -/*-- Header files to be included. --*/ -#include -#include -#include -#include - -/*-- Data types. --*/ -typedef short int16; -typedef unsigned short uint16; -typedef float FLOAT; -#ifdef NATIVE64 -typedef unsigned int uint32; -typedef int int32; -#else -typedef unsigned long uint32; -typedef long int32; -#endif -typedef int BOOL; -typedef unsigned char uint8; - -#ifdef HAS_INLINE -#define INLINE inline -#else -#ifdef HAS_C_INLINE -#define INLINE __inline -#else -#define INLINE -#endif -#endif - -#define GET_CHUNK(x) (memset(malloc(x), 0, x)) -#define SWAP_INT16(x) ((((uint32)x >> 8) & 0xFF) | ((uint32)x << 8)) -#define SAFE_DELETE(x) if(x) free(x); x = NULL -#define IS_ERROR(x) if(x == NULL) goto error_exit; -#define ZERO_MEMORY(x, y) memset(x, 0, y) -#define COPY_MEMORY(x, y, z) memcpy(x, y, z) -#define SET_MEMORY(x, y, z) memset(x, z, y) - -#else - -/*-- System Headers. --*/ -#include -#include -#include - -//#include -//#include - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -/*-- Data types. --*/ -typedef TInt8 int8; -typedef TUint8 uint8; -typedef TInt16 int16; -typedef TUint16 uint16; -typedef TInt int32; -typedef TUint uint32; -typedef TUint8 BOOL; -typedef TReal FLOAT; - -#define INLINE inline - -#define GET_CHUNK(x) User::LeaveIfNull(User::Alloc(x)) -#define GET_SYMBIAN_CHUNK(x) x::NewL() - -#define IS_ERROR(x) -#define SAFE_DELETE(x) if(x) User::Free(x); x = NULL -#define SAFE_SYMBIAN_DELETE(x) if(x != 0) delete x; x = 0 - -#define ZERO_MEMORY(x, y) Mem::FillZ(x, y) -#define COPY_MEMORY(x, y, z) Mem::Copy(x, y, z) -#define SET_MEMORY(x, y, z) Mem::Fill(x, y, TChar((TUint) z)) - - -/*-- AAC definitions. --*/ -#define LTP_PROFILE -#define MONO_VERSION -#define STEREO_VERSION -#define AAC_ADIF_FORMAT -#define AAC_ADTS_FORMAT -#define AAC_INDEX_TABLES - -#define FAST_MIX - - -#endif /*-- NOT_SYMBIAN_OS --*/ - -#ifndef TRUE -#define TRUE (1) -#endif -#ifndef FALSE -#define FALSE (0) -#endif - -/*-- Some Useful Macros. --*/ -#ifdef MIN -#undef MIN -#endif -#define MIN(A, B) ((A) < (B) ? (A) : (B)) - -#ifdef MAX -#undef MAX -#endif -#define MAX(A, B) ((A) > (B) ? (A) : (B)) - -#endif /*-- DEFINES_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/inc/mp3def.h --- a/videoeditorengine/mp3aacManipLib/inc/mp3def.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef MP3_DEF_H_ -#define MP3_DEF_H_ - -/*- Project Headers. --*/ -#include "defines.h" - -/************************************************************************** - External Objects Provided - *************************************************************************/ - -/*-- General MPx Definitions. --*/ -#ifndef PI -#define PI (3.14159265358979) -#endif -#define MPEG_AUDIO_ID (1) -#define MPEG_PHASE2_LSF (0) -#define SBLIMIT (32) -#define SSLIMIT (18) -#define MAX_MONO_SAMPLES (SBLIMIT * SSLIMIT) -#define HAN_SIZE (512) -#define NUM_SUBWIN (16) -#define SCALE (32768L) -#define SYNC_WORD ((long) 0x7ff) -#define SYNC_WORD_LENGTH (11) -#define HEADER_BITS (20) -#define MAX_LONG_SFB_BANDS (22) -#define MAX_SHORT_SFB_BANDS (13) -#define MIN_MP3FRAMELEN (1440) -#define MAX_BITRESER_SIZE (512) -#define CRC_MAX_PAYLOAD (34) - -/*-- MPEG Header Definitions - Mode Values --*/ -#define MPG_MD_STEREO (0) -#define MPG_MD_JOINT_STEREO (1) -#define MPG_MD_DUAL_CHANNEL (2) -#define MPG_MD_MONO (3) - -/*-- Some Useful Macros. --*/ -#ifdef MIN -#undef MIN -#endif -#define MIN(A, B) ((A) < (B) ? (A) : (B)) - -#ifdef MAX -#undef MAX -#endif -#define MAX(A, B) ((A) > (B) ? (A) : (B)) - -/*-- Channel definitions. --*/ -#define MONO_CHAN (0) -//#define MAX_CHANNELS (2) -#define LEFT_CHANNEL (MONO_CHAN) -#define RIGHT_CHANNEL (MONO_CHAN + 1) - -/* - Purpose: Masks those bit fields from the header to zero that - do not remain fixed from frame to frame. - Explanation: Following fields are assumed to be fixed : - * 12th bit from the sync word - * version - * layer description - * sampling rate - * channel mode (layer 3 only) - * copyright bit - * original bit - * de-emphasis - - Following fields can vary from frame to frame : - * protection bit - * bit rate - * padding bit - * private bit - * channel mode extension - */ -#define HEADER_MASK(header) ((uint32)header & 0x001E0CCF) - -/* - Purpose: Macro to extract layer description. - Explanation: This is the bit value, use MP_Header::layer_number method - to interpret this value. */ -#define LAYER_MASK(header) (((uint32)header >> 17) & 3) - -/* - Purpose: Layer III flags. - Explanation: - */ -typedef enum LayerIIIFlags -{ - WINDOW_SWITCHING_FLAG = 4, - MIXED_BLOCK_FLAG = 8, - PRE_FLAG = 16, - SCALEFAC_SCALE = 32, - COUNT_1_TABLE_SELECT = 64 - -} Layer_III_Flags; - -/* - Purpose: Stereo modes for layer III. - Explanation: - */ -typedef enum StereoMode -{ - ONLY_MONO, - ONLY_STEREO, - MS_STEREO, - IS_STEREO, - LSF_IS_STEREO - -} StereoMode; - -/* - Purpose: Block types for layer III. - Explanation: The first four describe the actual block type for each subband, - the rest of the declarations describe the block type for the - whole frame. */ - -typedef enum MP3_WINDOW_TYPE -{ - ONLY_LONG_WINDOW, - LONG_SHORT_WINDOW, - ONLY_SHORT_WINDOW, - SHORT_LONG_WINDOW, - MIXED_BLOCK_MODE, - SHORT_BLOCK_MODE, - LONG_BLOCK_MODE - -} MP3_WINDOW_TYPE, MP3WindowType; - -/* - Purpose: Structure to hold scalefactor band parameters. - Explanation: - */ -typedef struct SFBAND_DATA_STR -{ - int16 l[23]; /* long block. */ - int16 s[14]; /* short block. */ - -} SFBAND_DATA; - -/* - Purpose: Number of bits reserved for decoding each group - of scalefactors. - Explanation: - */ -typedef struct SFBITS_DATA_STR -{ - int16 l[5]; - int16 s[3]; - -} SFBITS_DATA; - -/* - Purpose: Sync seek code. - Explanation: - */ -typedef enum MIX_SYNC_STATUS -{ - LAYER1_STREAM_MIX, - LAYER2_STREAM_MIX, - LAYER3_STREAM_MIX, - FIRST_FRAME_WITH_LAYER1, - FIRST_FRAME_WITH_LAYER2, - FIRST_FRAME_WITH_LAYER3 - -} MIX_SYNC_STATUS; - -#endif /* MP3_DEF_H_ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/inc/mstream.h --- a/videoeditorengine/mp3aacManipLib/inc/mstream.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,666 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef MP_STREAM_H_ -#define MP_STREAM_H_ - -/************************************************************************** - External Objects Needed - *************************************************************************/ - -/*-- Project Headers --*/ -#include "nok_bits.h" -#include "defines.h" -#include "param.h" -#include "mp3def.h" -#include "auddef.h" -#include - - - -/************************************************************************** - External Objects Provided - *************************************************************************/ - -/************************************************************************** - Common structure definitions for all layers - *************************************************************************/ - -/* - Purpose: Parent structure for error checking. - Explanation: The number of bits that are protected varies between different - versions (MPEG-1, MPEG-2). */ -class TCRC_Check -{ -public: - uint8 crc_payload[CRC_MAX_PAYLOAD]; /* Protected bits. */ - uint16 bufLen; /* Length of 'crc_payload' */ - int16 crc; /* CRC error-check word. */ - -}; - -/* - Purpose: Parent structure for mp1, mp2, and mp3 header. - Explanation: - */ - -class TMPEG_Header -{ -public: - uint32 header; // Header bits. - -}; - -/* - Purpose: Parent Structure for mp1, mp2, and mp3 frames. - Explanation: - */ -class TMPEG_Frame -{ -public: - uint8 *scale_factors; /* Scale factor of each subband and group. */ - int16 *quant; /* Quantized spectral data for this frame. */ - int16 *ch_quant[MAX_CHANNELS]; /* Channel pointers. */ - -}; - - /* - Purpose: Parent Structure for mp1, mp2, and mp3 buffer. - Explanation: - */ -class TMPEG_Buffer -{ -public: - FLOAT *synthesis_buffer[MAX_CHANNELS]; /* Samples for windowing. */ - int16 buf_idx[MAX_CHANNELS]; /* Start index for windowing. */ - int16 dct_idx[MAX_CHANNELS]; /* DCT buffer index. */ - FLOAT *reconstructed; /* Dequantized samples. */ - FLOAT *ch_reconstructed[MAX_CHANNELS]; /* Channel pointers. */ - -}; - - /* - Purpose: Parent Structure for frame detection. - Explanation: - */ -class TSyncInfoMix -{ -public: - int16 sync_length; /* Length of sync word. */ - int16 sync_word; /* Synchronization word. */ - int16 sync_mask; /* Bitmask for sync word detection. */ - MIX_SYNC_STATUS sync_status; /* Which layer we supposed to be decoding. */ - -}; - -/************************************************************************** - Structure definitions applicable only to layer III - *************************************************************************/ -/* - Purpose: Parent Structure for layer III Granule Info. - Explanation: - */ -class TGranule_Info -{ -public: - uint8 global_gain; - uint8 flags; - uint8 table_select[3]; - uint8 subblock_gain[3]; - uint8 region0_count; - uint8 region1_count; - int32 part2_3_length; - int32 big_values; - int32 scalefac_compress; - MP3_WINDOW_TYPE block_mode; - int16 zero_part_start; - -}; - -/* - Purpose: Parent Structure for layer III Scale Factors. - Explanation: - */ -class CIII_Scale_Factors : public CBase -{ - -public: - - uint8 *scalefac_long; /* Scalefactors for long blocks. */ - uint8 *scalefac_short[3]; /* Scalefactors for short blocks. */ - - -}; - -/* - Purpose: Parent Structure for layer III Channel Info. - Explanation: - */ -class CIII_Channel_Info : public CBase -{ -public: - - static CIII_Channel_Info* NewL(); - ~CIII_Channel_Info(); - TGranule_Info *gr_info[2]; /* Granule info for this channel. */ - CIII_Scale_Factors *scale_fac; /* Scalefactors for this channel. */ - -private: - void ConstructL(); - CIII_Channel_Info(); - -}; - -/* - Purpose: Structure to hold MPEG-2 IS stereo positions. - Explanation: - */ -class TIS_Info -{ -public: - int16 is_len[3]; - int16 nr_sfb[3]; - -}; - -/* - Purpose: Structure to hold scalefactor band tables - and related parameters. - Explanation: - */ -class CIII_SfbData : public CBase -{ -public: - - static CIII_SfbData* NewL(); - ~CIII_SfbData(); - - /* Scalefactor band boundaries for long and short blocks. */ - int16* sfbOffsetLong; - int16* sfbOffsetShort; - - /* Scalefactor band widths for short blocks. */ - int16* sfbWidthShort; - - int16 *sfbLong; /* Pointer to long sfb offset table. */ - int16 *sfbShort; /* Pointer to short sfb offset table. */ - int16 *sfbWidth; /* Pointer to short sfb width table. */ - int16 bandLimit; /* # of spectral bins to be decoded. */ - -private: - void ConstructL(); - CIII_SfbData(); - -}; - -/* - Purpose: Structure to map the file parameters into - total length, average bitrate, etc. - Explanation: - */ -class TMP_BrInfo -{ -public: - BOOL vbr; /* TRUE for VBR files, FALSE otherwise. */ - BOOL tmp; /* Used for counting the verage bitrate. */ - BOOL true_br; /* The 'start_br' represents the true bitrate. */ - BOOL free_br; /* Free format flag. */ - uint32 cum_br; /* Cumulative bitrate. */ - uint32 cum_frames; /* Cumulative # of frames. */ - uint16 start_br; /* Initial and/or average bitrate. */ - -}; - -/* - Purpose: Parent Structure for Layer III Side Information. - Explanation: - */ -class CIII_Side_Info : public CBase -{ -public: - - static CIII_Side_Info* NewL(); - ~CIII_Side_Info(); - - /*-- Side information read from the bit stream. --*/ - uint8 private_bits; - uint8 scfsi[2][4]; - int32 main_data_begin; - CIII_Channel_Info *ch_info[MAX_CHANNELS]; - - /*-- General side information. --*/ - StereoMode *s_mode_long; /* Stereo modes for long blocks. */ - StereoMode *s_mode_short[3];/* Stereo modes for short blocks. */ - - int16 max_gr; /* Number of granules within each stream frame.*/ - BOOL ms_stereo; /* MS (Mid/Side) stereo used. */ - BOOL is_stereo; /* Intensity stereo used. */ - BOOL lsf; /* MPEG-2 LSF stream present. */ - BOOL mpeg25; /* MPEG-2.5 stream present. */ - int16 sb_limit; - TIS_Info is_info; - CIII_SfbData* sfbData; - -private: - void ConstructL(); - CIII_Side_Info(); - -}; - -/* - Purpose: Parent Structure for Huffman Decoding. - Explanation: This structure can be used if dynamic memory allocation - is not available or if memory consumption is important. - At worst we have to process the number of codewords equal to - the size of the codebook. */ -class CHuffman : public CBase -{ -public: - int16 tree_len; /* Size of the Huffman tree. */ - int16 linbits; /* Number of extra bits. */ - const int16 *codeword; /* Huffman codewords. */ - const int16 *packed_symbols; /* x, y and length of the corresponding codeword. */ - -}; - -/* - Purpose: Structure for buffer handling. - Explanation: - */ -class CMCUBuf : public CBase -{ -public: - - static CMCUBuf* NewL(TInt aBufLen); - ~CMCUBuf(); - - TBitStream *bs; /* Bitstream parser. */ - uint32 bufOffset; /* Current file or buffer offset. */ - uint32 bufLen; /* Length of 'mcuBufbits', in bytes. */ - uint32 writeIdx; /* Write index of the buffer. */ - uint32 readSlots; /* Bytes read from the buffer. */ - uint8 *mcuBufbits; /* Buffer for the compressed bits. */ - -private: - - void ConstructL(TInt aBufLen); - CMCUBuf(); - -}; - -/* - Purpose: More definitions for the buffer handling. - Explanation: - */ -typedef enum StreamMode -{ - IS_UNKNOWN, - IS_FILE, - IS_STREAM, - READ_MODE, - WRITE_MODE, - APPEND_MODE - -} StreamMode; - - -/* - Purpose: Structure implementing ring buffer. - Explanation: - */ -class CRingBuffer : public CBase -{ -public: - TBitStream *bs; /* Bit parser for the 'bitBuffer'. */ - uint32 bufLen; /* Length of 'bitBuffer', in bytes. */ - uint32 readIdx; /* Read index. */ - uint8 *bitBuffer; /* Buffer holding encoded data. */ - -}; - -/* - Purpose: Layer 3 bitstream formatter (encoder side). - The header+side info and payload are in separate - buffers. The output mp3 frames are a combination - of these two buffers. - Explanation: - */ -class CL3FormatBitstream : public CBase -{ -public: - static CL3FormatBitstream* NewL(uint16 sideInfoEntries, - uint16 sideInfoBytes, uint32 dataBytesBuffer); - - - ~CL3FormatBitstream(); - - void L3FormatBitstreamAddMainDataEntry(uint16 dataBytes); - void L3FormatBitstreamAddMainDataBits(uint32 dataBits); - uint32 L3WriteOutFrame(uint8 *outBuf); - /* Number of bits present in 'frameData'. */ - uint32 numDataBits; - - /* Number of bytes reserved for payload part of the frame. */ - uint16 *payloadBytes; - - /* Read index to field 'payloadBytes'. */ - uint16 payloadReadIdx; - - /* Write index to field 'payloadBytes'. */ - uint16 payloadWriteIdx; - - /* Number of items in field 'payloadBytes'. */ - uint16 numPayloads; - - /* Payload data for layer 3 frames. */ - CRingBuffer *frameData; - - - /* Number of frames present in 'frameHeader'. */ - uint32 framesPresent; - - /* Number of bytes reserved for side info per frame (fixed value). */ - uint16 sideInfoBytes; - - /* Buffer holding header and side info frames. */ - CRingBuffer *frameHeader; - -private: - - void ConstructL(uint16 sideInfoEntries, uint16 sideInfoBytes, uint32 dataBytesBuffer); - CL3FormatBitstream(); -}; - -/* - Purpose: Bitrate of the mixer. - Explanation: - */ -class TL3BitRate -{ -public: - /*-- Bitrate of mixed stream and index of the rate. --*/ - uint16 bitRate; - uint8 bitRateIdx; - - /*-- Status of padding bit in frame header. --*/ - uint8 padding; - - /*-- Number of bytes available for a frame. --*/ - uint16 frameBytes; - - /*-- Fractional part of the bytes reserved for each frame. --*/ - FLOAT frac_SpF; - FLOAT slot_lag; - -}; - -class THuffmanData -{ -public: - /* # of bits reserved for 'hufWord'. */ - uint8 hufBits; - /* total # of bits reserved for codeword + sign bits + linbits. */ - uint8 hufBitsCount; - /* Huffman codeword. */ - uint16 hufWord; - -}; - -/* - Purpose: Huffman table parameters for layer 3. - Explanation: - */ -class CHuffmanCodTab : public CBase -{ -public: - uint8 xlen; - uint8 ylen; - uint8 linbits; - uint8 xoffset; - uint16 linmax; - THuffmanData *hData; - -}; - -/* - Purpose: # of pair and quadruple tables. - Explanation: - */ -#define L3HUFPAIRTBLS (31) -#define L3HUFFQUADTBLS ( 2) - -/* - Purpose: Parent structure to hold layer 3 Huffman - coding parameters. - Explanation: - */ -class CL3HuffmanTab : public CBase -{ -public: - - static CL3HuffmanTab* NewL(); - ~CL3HuffmanTab(); - - THuffmanData *quadTable[L3HUFFQUADTBLS]; // Tables 32 - 33. - CHuffmanCodTab *pairTable[L3HUFPAIRTBLS]; // Tables 1 - 31. - - CHuffmanCodTab* tree; - -private: - CL3HuffmanTab(); - void ConstructL(); - -}; - -/* - Purpose: Helper parameters for mp3 mixer. - Explanation: - */ -class CL3MixerHelper : public CBase -{ -public: - /*-------- Encoding related parameters. --------*/ - - /*-- Scalefactor encoding patterns for LSF streams. --*/ - uint8 blkNum; - uint8 slen[4]; - uint8 blkTypeNum; - int16 numRegions; - - /*-- Huffman tables for layer 3. --*/ - CL3HuffmanTab *l3Huf; - - /*-- Bitstream formatter for layer 3 encoder. --*/ - CL3FormatBitstream *l3bs; - - /*-- Window sequence of previous frame. --*/ - MP3_WINDOW_TYPE winTypeOld[MAX_CHANNELS]; - - /*-- Window sequence of previous frame (source stream). --*/ - uint32 winTypeIdx; - MP3_WINDOW_TYPE *winTypeCurrentFrame; - MP3_WINDOW_TYPE *winTypePreviousFrame; - MP3_WINDOW_TYPE *winTypePrt[MAX_CHANNELS]; - MP3_WINDOW_TYPE _winTypeOld1[2 * MAX_CHANNELS]; - MP3_WINDOW_TYPE _winTypeOld2[2 * MAX_CHANNELS]; - - /*-- Overlap buffer for MDCT. --*/ - FLOAT** L3EncOverlapBuf;//[MAX_CHANNELS][MAX_MONO_SAMPLES]; - FLOAT* L3EncOverlapBufMem; - - /*-- Granule parameters of previous frame. --*/ - TGranule_Info *grInfoSave[MAX_CHANNELS]; - - - /*-- Scalefactors of previous frame. --*/ - CIII_Scale_Factors *scaleFacSave[MAX_CHANNELS]; - - /*-- Spectrum limit of previous frame. --*/ - int16 specBinsPresent; - - /*-- Scalefactor selection information of previous frame. --*/ - BOOL IsScfsi; - uint8 scfsi[2][4]; - - /*-- Number of bits unused (bit reservoir). --*/ - uint32 bitPool; - - /*-- Level adjustment for the spectrum to be mixed. --*/ - FLOAT mixGain; - - /*-- Level adjustment for the mixed spectrum. --*/ - FLOAT overallGain; - - /*-- Level adjustment for the global gain. --*/ - int16 gainDec; - - /*-- Number of spectral bins to be mixed. --*/ - int16 mixSpectralBins; - - - /*-------- Bitrate related parameters. --------*/ - - /*-- Bytes reserved for side info. --*/ - int16 sideInfoBytes; - - /*-- Bitrate mappings. --*/ - BOOL needVBR; - uint32 brIdx; - TL3BitRate *l3br; - TL3BitRate *_l3br[2]; - TL3BitRate l3brLong; - TL3BitRate l3brShort; - uint32 numFramesLong; - uint32 numFramesShort; - - /*-- # of bytes reserved for the payload part of current frame. --*/ - int16 nSlots; - - /*-- 'main_data_begin' for next frame. --*/ - int16 main_data_begin; - - /*-- Max value of 'main_data_begin'. --*/ - int16 max_br_value; - -}; - - -/* - Purpose: Stream seeking constants. - Explanation: - */ -typedef enum StreamPos -{ - CURRENT_POS, - START_POS, - END_POS - -} StreamPos; - -/* - Purpose: Parameters of core engine. - Explanation: - */ -class CMP_Stream : public CBase -{ - -public: - /*-- Common to all layers. --*/ - TBitStream *bs; - TMPEG_Header *header; - TMPEG_Header headerOld; - TMPEG_Frame *frame; - TMPEG_Buffer *buffer; - TSyncInfoMix syncInfo; - TMP_BrInfo brInfo; - TCRC_Check mp3_crc; - - /*-- Layer III specific parameters. --*/ - TBitStream *br; - CIII_Side_Info *side_info; - CHuffman *huffman; - FLOAT *spectrum[MAX_CHANNELS][SBLIMIT]; - uint16 OverlapBufPtr[MAX_CHANNELS]; - FLOAT OverlapBlck[2][MAX_CHANNELS][MAX_MONO_SAMPLES]; - /* - Purpose: Indices for reordering the short blocks. - Explanation: First row describes the destination and second row - the source index. */ - int16 reorder_idx[2][MAX_MONO_SAMPLES]; - - /*-- Common complexity reduction and output stream parameters. --*/ - Out_Complexity *complex; - Out_Param *out_param; - - int16 idx_increment; - int16 FreeFormatSlots; - int16 PrevSlots; - int32 FrameStart; - BOOL SkipBr; - BOOL WasSeeking; - int16 SlotTable[15]; - int16 FrameTable[15]; - int32 PrevStreamInfo[2]; - - -}; - - -BOOL InitBrInfo(CMP_Stream *mp, TMP_BrInfo *brInfo); -inline void SetBitrate(CMP_Stream *mp, int16 br) -{ mp->brInfo.cum_br += br; mp->brInfo.cum_frames++; } -BOOL CountAveBr(CMP_Stream *mp, TBitStream *bs_mcu, TMP_BrInfo *brInfo); -void FinishAveBr(TMP_BrInfo *brInfo, BOOL FullCount); - -/* Implementations defined in module 'mstream.cpp'. */ -CMP_Stream *GetMP3HandleL(void); -void ReleaseMP3Decoder(CMP_Stream *mp); -int32 main_data_slots(CMP_Stream *mp); -void decode_header(CMP_Stream *mp, TBitStream *bs); -void MP3DecPrepareInit(CMP_Stream *mp, Out_Param *out_param, - Out_Complexity *complex, DSP_BYTE *br_buffer, - uint32 br_size); -void MP3DecCompleteInit(CMP_Stream *mp, int16 *frameBytes); - -/* Implementations defined in module 'mp3.cpp'. */ -SEEK_STATUS FreeFormat(CMP_Stream *mp, TBitStream *bs_mcu, - ExecState *execState, int16 *nSlots); -SEEK_STATUS SeekSync(CMP_Stream *mp, TBitStream *bs_mcu, - ExecState *execState, int16 *frameBytes); -void ReInitEngine(CMP_Stream *mp); -void ResetEngine(CMP_Stream *mp); -MP3_Error DecodeFrame(CMP_Stream *mp, int16 *pcm_sample, int16 idx_increment); -int16 L3BitReservoir(CMP_Stream *mp); - -/* Implementations defined in module 'sfb.cpp'. */ -void III_SfbDataInit(CIII_SfbData *sfbData, TMPEG_Header *header); -void III_BandLimit(CIII_SfbData *sfbData, uint16 binLimit); - - -/* - * Low level implementations for the mp3 engine. - */ - -/* Implementations defined in module 'layer3.cpp'. */ -BOOL III_get_side_info(CMP_Stream *mp, TBitStream *bs); -void III_get_scale_factors(CMP_Stream *mp, int16 gr, int16 ch); -void init_III_reorder(int16 reorder_idx[2][MAX_MONO_SAMPLES], - int16 *sfb_table, int16 *sfb_width_table); -void III_reorder(CMP_Stream *mp, int16 ch, int16 gr); - -/* Implementations defined in module 'mp3_q.cpp'. */ -void III_dequantize(CMP_Stream *mp, int16 gr); - -/* Implementations defined in module 'stereo.cpp'. */ -void III_stereo_mode(CMP_Stream *mp, int16 gr); - -/* Implementations defined in module 'huffman.cpp'. */ -int16 III_huffman_decode(CMP_Stream *mp, int16 gr, int16 ch, int32 part2); -void -pairtable(CMP_Stream *mp, int16 section_length, int16 table_num, int16 *quant); -int16 -quadtable(CMP_Stream *mp, int16 start, int16 part2, int16 table_num, int16 *quant, - int16 max_sfb_bins); - -void init_huffman(CHuffman *h); - -/*-- Include encoder interface. --*/ -#ifdef L3ENC -//#include "l3enc.h" -#endif /*-- L3ENC --*/ - -#endif /* MP_STREAM_H_ */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/inc/nok_bits.h --- a/videoeditorengine/mp3aacManipLib/inc/nok_bits.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - nok_bits.h - Interface for bitstream handling. - - Author(s): Juha Ojanpera - Copyright (c) 1999-2004 by Nokia Research Center, Audio-Visual Systems. - *************************************************************************/ - -#ifndef NOKBITSTREAM_H_ -#define NOKBITSTREAM_H_ - -/*-- Project Headers. --*/ -#include "defines.h" - -/*-- Bitstream supports any length... --*/ -#define BITSMODULO_BUFFER - -#ifndef BITSMODULO_BUFFER -#define MOD_OPCODE(x, y) (x & y) -#else -#define MOD_OPCODE(x, y) (x % y) -#endif /*-- MODULO_BUFFER --*/ - -const uint32 bsBitMask[] = -{0x0, 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, - 0x1FFFL, 0x3FFFL, 0x7FFFL, 0xFFFFL, 0x1FFFFL, 0x3FFFFL, 0x7FFFFL, 0xFFFFFL, - 0x1FFFFFL, 0x3FFFFFL, 0x7FFFFFL, 0xFFFFFFL, 0x1FFFFFFL, 0x3FFFFFFL, 0x7FFFFFFL, - 0xFFFFFFFL, 0x1FFFFFFFL, 0x3FFFFFFFL, 0x7FFFFFFFL, 0xFFFFFFFFL}; - -#ifdef BYTE_16bit -typedef uint16 DSP_BYTE; -#else -typedef uint8 DSP_BYTE; -#endif - -/** - * Data structure for accessing bits from input bitstram. - */ -typedef enum BYTE_MODE -{ - BIT8 = 0, - BIT16 - -} BYTE_MODE; - -#define MAX_BUFS (1) - -typedef struct BufMapperStr -{ - uint8 numBufs; - uint8 **bsBuf; - uint32 *bsBufLen; - uint32 *bytesRead; - -} BufMapper; - -class TBitStream -{ -public: - - - /** - * Bitstream (modulo/ring) buffer. */ - DSP_BYTE *dsp_buffer; - uint8 *bit_buffer; - - /** - * Number of bits in the data type. - */ - int16 slotBits; - - /* Which bit buffer is to be used. */ - BYTE_MODE mode; - - /** - * Size of the buffer. - */ - uint32 buf_len; - - /** - * Bit counter. - */ - int16 bit_counter; - - /** - * Read index. - */ - uint32 buf_index; - - /** - * Write index. - */ - uint32 buf_writeIndex; - - /** - * Bitmask for 'buf_index'. - */ - uint32 buf_mask; - - /** - * Number of bytes read from the buffer. This field will be used to check - * whether there are enough bits in the buffer to result a successfull - * decoding of current frame. - */ - uint32 slots_read; - - /** - * Number of bits read from the buffer. This will be resetted on a call-by-call - * basis and therefore gives the number of bits that each call read from - * the buffer. The buffer is updated according to this value. - */ - uint32 bits_read; - -}; - -/** - * Bitstream manipulation methods. - */ - - -/** - * Initializes input bitstream. - * - * @param bs Bitstream handle - * @param bit_buffer Input bitstream - * @param size Size of input bitstream in bytes - */ -IMPORT_C void BsInit(TBitStream *bs, uint8 *bit_buffer, uint32 size); - -IMPORT_C void BsInit1(TBitStream *bs, uint8 *bit_buffer, uint32 size); - -IMPORT_C void BsInit2(TBitStream *bs, DSP_BYTE *dsp_buffer, uint32 size); - - -/** - * Retrieves size of bitstream in bytes. - * - * @param bs Bitstream handle - * - * @return Size of bitstream - */ -IMPORT_C uint32 BsGetBufSize(TBitStream *bs); - -IMPORT_C uint32 BsGetBufOriginalSize(TBitStream *bs); - -/** - * Retrieves number of bits read from the bitstream. - * - * @param bs Bitstream handle - */ -IMPORT_C uint32 BsGetBitsRead(TBitStream *bs); - -IMPORT_C void BsSetBitsRead(TBitStream *bs, uint32 bits_read); -IMPORT_C void BsClearBitsRead(TBitStream *bs); - -/** - * Resets bitstream. - * - * @param bs Bitstream handle - */ -IMPORT_C void BsReset(TBitStream *bs); - -/** - * Retrieves the number of bytes left in the bitstream. - * - * @param bs Bitstream handle - * - * @return Number of bytes left in the bitstream - */ -IMPORT_C uint32 BsSlotsLeft(TBitStream *bs); - -/** - * Appends bits from one bitstream to another bitstream. - * - * @param bs Source btstream handle - * @param br Destination btstream handle - * @param n Number of bytes to copy - */ -IMPORT_C void BsMoveBytes(TBitStream *bs, TBitStream *br, int16 n); - -/** - * Appends bits from one specified buffer to bitstream. - * - * @param bs Destination btstream handle - * @param outBuf Source buffer - * @param bytesToCopy Number of bytes to copy - * - * @return Number of bytes appended - */ -IMPORT_C uint32 BsCopyBytes(TBitStream *bs, uint8 *outBuf, uint32 bytesToCopy); - -/** - * Appends bits from one source to destination bitstream. - * - * @param bs Destination btstream handle - * @param outBuf Source bitstream handle - * @param bitsToCopy Number of bits to copy - */ -IMPORT_C void -BsCopyBits(TBitStream *bsSrc, TBitStream *bsDst, int32 bitsToCopy); - -/** - * Rewinds the read index of the bitstream. - * - * @param bs Bitstream handle - * @param n Number of bits to rewind - */ -IMPORT_C void BsRewindNBits(TBitStream *bs, uint32 nBits); - -IMPORT_C void BsBufferUpdate(TBitStream *bs, int32 bytesRead); - -IMPORT_C void BsSaveBufState(TBitStream *bsSrc, TBitStream *bsDst); - -/** - * Writes bits to bitstream. - * - * @param bs Bitstream handle - * @param n Number of bits to write - * @param word Data bits to write - */ -IMPORT_C void BsPutBits(TBitStream *bs, int16 n, uint32 word); - -/** - * Byte aligns bitstream by writing '0' bits. - * - * @param bs Bitstream handle - * - * @return Number of bits written - */ -IMPORT_C int16 BsPutBitsByteAlign(TBitStream *bs); - -/** - * Reads bits from bitstream. - * - * @param bs Bitstream handle - * @param n Number of bits to read - * - * @return Read data bits - */ -IMPORT_C uint32 BsGetBits(TBitStream *bs, int16 n); - -/** - * Byte aligns bitstream by advanding read index. - * - * @param bs Bitstream handle - * - * @return Number of bits skipped - */ -IMPORT_C int16 BsByteAlign(TBitStream *bs); - -/** - * Reads bits from bitstream without updating read index. - * - * @param bs Bitstream handle - * @param n Number of bits to lookahead - * - * @return Read data bits - */ -IMPORT_C uint32 BsLookAhead(TBitStream *bs, int16 n); - -/** - * Advances bitstream read index (8 bits at maximum!). - * - * @param bs Bitstream handle - * @param n Number of bits to skip. Note that this can at maximum be 8 bits! - */ -IMPORT_C void BsSkipBits(TBitStream *bs, int16 n); - -/** - * Advances bitstream read index. - * - * @param bs Bitstream handle - * @param n Number of bits to skip - */ -IMPORT_C void BsSkipNBits(TBitStream *bs, int32 n); - -#endif /*-- BITSTREAM_H_ --*/ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/src/AudPanic.cpp --- a/videoeditorengine/mp3aacManipLib/src/AudPanic.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* Copyright (C) 2004 Nokia Corporation. */ - -#include "AudPanic.h" - - -void TAudPanic::Panic(TCode aCode) - { - User::Panic(_L("Audio Editor Eng"), aCode); - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/src/Mp3API.cpp --- a/videoeditorengine/mp3aacManipLib/src/Mp3API.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,409 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "Mp3API.h" -#include "mpif.h" -#include "mpaud.h" -#include "mpheader.h" -#include "mp3tool.h" - - - - -// Exception handler for FLOATS -void handler(TExcType /*aType*/) -{ -#ifndef __WINS__ -// CMp3Mix::WriteL(_L("Exception cought!!!")); -#endif - -} - -//const int16 Kmp3BufSize = 8; - -EXPORT_C CMp3Edit* CMp3Edit::NewL() - { - - CMp3Edit* self = new (ELeave) CMp3Edit(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - } - -void CMp3Edit::ConstructL() - { - - } - - -EXPORT_C CMp3Edit::~CMp3Edit() - { - - } - -CMp3Edit::CMp3Edit() - { - - } - - -EXPORT_C uint32 -CMp3Edit::FileLengthInMs(TMpTransportHandle *tHandle, int32 fileSize) const - { - return MP_FileLengthInMs(tHandle, fileSize); - } - -EXPORT_C int32 -CMp3Edit::GetSeekOffset(TMpTransportHandle *tHandle, int32 seekPos) const - { - return MP_GetSeekOffset(tHandle, seekPos); - } - -EXPORT_C int32 -CMp3Edit::GetFrameTime(TMpTransportHandle *tHandle) const - { - return MP_GetFrameTime(tHandle); - } - -EXPORT_C void -CMp3Edit::InitTransport(TMpTransportHandle *tHandle) const - { - - mpInitTransport(tHandle); - } - -EXPORT_C int16 -CMp3Edit::SeekSync(TMpTransportHandle *tHandle, uint8 *syncBuf, - uint32 syncBufLen, int16 *readBytes, - int16 *frameBytes, int16 *headerBytes, - uint8 initMode) const - - { - - return MP_SeekSync(tHandle, syncBuf, - syncBufLen, readBytes, - frameBytes, headerBytes, - initMode); - } - -EXPORT_C int16 -CMp3Edit::FreeMode(TMpTransportHandle *tHandle, uint8 *syncBuf, - uint32 syncBufLen, int16 *readBytes, - int16 *frameBytes, int16 *headerBytes) const - { - return MP_FreeMode(tHandle, syncBuf, - syncBufLen, readBytes, - frameBytes, headerBytes); - } - -EXPORT_C int16 -CMp3Edit::EstimateBitrate(TMpTransportHandle *tHandle, uint8 isVbr) const - { - return MP_EstimateBitrate(tHandle, isVbr) ; - - } - - - -/* - * Saves modified 'global_gain' bitstream elements to specified layer I/II/III data buffer. - */ -EXPORT_C void -CMp3Edit::SetMPGlobalGains(TBitStream *bs, uint8 numGains, uint8 *globalGain, uint32 *gainPos) -{ - int16 i; - - /*-- Store the gain element back to bitstream. --*/ - for(i = 0; i < numGains; i++) - { - BsSkipNBits(bs, gainPos[i]); - BsPutBits(bs, 8, globalGain[i]); - } -} - - - -EXPORT_C uint8 -CMp3Edit::GetMPGlobalGains(TBitStream *bs, TMpTransportHandle *tHandle, uint8 *globalGain, uint32 *gainPos) -{ - uint32 bufBitOffset; - uint8 numGains, nVersion, nChannels; - - numGains = 0; - nVersion = (uint8) version(&tHandle->header); - nChannels =(uint8) channels(&tHandle->header); - - bufBitOffset = BsGetBitsRead(bs); - - /*-- Get the gain for each channel and granule. --*/ - switch(nVersion) - { - /*-- MPEG-1. --*/ - case 1: - switch(nChannels) - { - /* - * Mono frame consists of 2 granules. - */ - case 1: - numGains = 2; - - /*-- Left channel, granules 0 and granule 1. --*/ - BsSkipNBits(bs, 0x27); - gainPos[0] = BsGetBitsRead(bs) - bufBitOffset; - globalGain[0] = (uint8) BsGetBits(bs, 8); - BsSkipNBits(bs, 0x33); - gainPos[1] = 0x33; - globalGain[1] = (uint8) BsGetBits(bs, 8); - break; - - /* - * Two channels, 2 granules. - */ - case 2: - numGains = 4; - - /*-- Left and right channel, granule 0. --*/ - BsSkipNBits(bs, 0x29); - gainPos[0] = BsGetBitsRead(bs) - bufBitOffset; - globalGain[0] = (uint8) BsGetBits(bs, 8); - BsSkipNBits(bs, 0x33); - gainPos[1] = 0x33; - globalGain[1] = (uint8) BsGetBits(bs, 8); - - /*-- Left and right channel, granule 1. --*/ - BsSkipNBits(bs, 0x33); - gainPos[2] = 0x33; - globalGain[2] = (uint8) BsGetBits(bs, 8); - BsSkipNBits(bs, 0x33); - gainPos[3] = 0x33; - globalGain[3] = (uint8) BsGetBits(bs, 8); - break; - } - break; - - /*-- MPEG-2 LSF and MPEG-2.5. --*/ - default: - switch(nChannels) - { - /* - * Mono channel, 1 granule. - */ - case 1: - numGains = 1; - BsSkipNBits(bs, 0x1E); - gainPos[0] = BsGetBitsRead(bs) - bufBitOffset; - globalGain[0] = (uint8) BsGetBits(bs, 8); - break; - - /* - * Two channels, 1 granule. - */ - case 2: - numGains = 2; - BsSkipNBits(bs, 0x1F); - gainPos[0] = BsGetBitsRead(bs) - bufBitOffset; - globalGain[0] = (uint8) BsGetBits(bs, 8); - BsSkipNBits(bs, 0x37); - gainPos[1] = 0x37; - globalGain[1] = (uint8) BsGetBits(bs, 8); - break; - } - break; - } - - - return (numGains); -} - -EXPORT_C CMPAudDec* CMPAudDec::NewL() - { - CMPAudDec* self = new (ELeave) CMPAudDec(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - - } - -CMPAudDec::CMPAudDec() - { - - - } - -EXPORT_C CMPAudDec::~CMPAudDec() - { - - - int16 i; - - /* --Scalefactors. --*/ - if (frame->scale_factors != 0) delete[] frame->scale_factors; - - /*-- Quantized samples. --*/ - if (frame->quant != 0) delete[] frame->quant; - - /*-- Huffman codebooks. --*/ - if (huffman != 0) delete[] huffman; - - /*-- Layer III side info. --*/ - if(side_info) - { - for(i = 0; i < MAX_CHANNELS; i++) - { - int16 j; - - if(side_info->ch_info[i]) - { - if (side_info->ch_info[i]->scale_fac != 0) delete side_info->ch_info[i]->scale_fac; - - for(j = 0; j < 2; j++) - if (side_info->ch_info[i]->gr_info[j] != 0) delete side_info->ch_info[i]->gr_info[j]; - } - if (side_info->ch_info[i] != 0) delete side_info->ch_info[i]; - } - - if (side_info->s_mode_long != 0) delete[] side_info->s_mode_long; - - for(i = 0; i < 3; i++) - if (side_info->s_mode_short[i] != 0) delete[] side_info->s_mode_short[i]; - - if (side_info != 0) delete side_info; - } - - if (frame != 0) delete frame; - if (bitReserv != 0) delete[] bitReserv; - - - - } - -void CMPAudDec::ConstructL() - { - - int16 i, j, groups; - - /*-- Create handle. --*/ - - /*-- Create bit reservoir buffer. --*/ - bitReserv = new (ELeave) uint8[4 * MAX_BITRESER_SIZE]; - ZERO_MEMORY(bitReserv, 4 * MAX_BITRESER_SIZE * sizeof(uint8)); - - BsInit(&br, bitReserv, 4 * MAX_BITRESER_SIZE); - - /*-- Create frame parameters. --*/ - frame = new (ELeave) TMPEG_Frame; - - /*-- Create side info parameters. --*/ - side_info = CIII_Side_Info::NewL(); - - /*-- Create scalefactors. --*/ - frame->scale_factors = new (ELeave) uint8[MAX_CHANNELS * SBLIMIT * 3]; - ZERO_MEMORY(frame->scale_factors, MAX_CHANNELS * SBLIMIT * 3 * sizeof(uint8)); - - - /*-- Create L3 side info. --*/ - for(i = 0; i < MAX_CHANNELS; i++) - { - - side_info->ch_info[i] = CIII_Channel_Info::NewL(); - - for(j = 0; j < 2; j++) - { - side_info->ch_info[i]->gr_info[j] = new (ELeave) TGranule_Info; - - } - } - - side_info->s_mode_long = new (ELeave) StereoMode[22]; - - ZERO_MEMORY(side_info->s_mode_long, 22 * sizeof(StereoMode)); - - for(i = 0; i < 3; i++) - { - side_info->s_mode_short[i] = new (ELeave) StereoMode[13]; //GET_CHUNK(13 * sizeof(StereoMode)); - ZERO_MEMORY(side_info->s_mode_short[i], 13 * sizeof(StereoMode)); - } - - /*-- Initialize scalefactors. --*/ - for(i = j = 0; i < MAX_CHANNELS; i++) - { - uint8 idx[] = {0, 23, 36, 49, 62, 85, 98, 111}; - - CIII_Scale_Factors *scale_fac; - - side_info->ch_info[i]->scale_fac = new (ELeave) CIII_Scale_Factors(); - - scale_fac = side_info->ch_info[i]->scale_fac; - - scale_fac->scalefac_long = frame->scale_factors + idx[j++]; - scale_fac->scalefac_short[0] = frame->scale_factors + idx[j++]; - scale_fac->scalefac_short[1] = frame->scale_factors + idx[j++]; - scale_fac->scalefac_short[2] = frame->scale_factors + idx[j++]; - } - - groups = MAX_MONO_SAMPLES * MAX_CHANNELS; - - /*-- Create buffer for quantized samples. --*/ - frame->quant = new (ELeave) int16[groups + 10];//(int16 *) GET_CHUNK((groups + 10) * sizeof(int16)); - - ZERO_MEMORY(frame->quant, (groups + 10) * sizeof(int16)); - - for(i = 0; i < MAX_CHANNELS; i++) - frame->ch_quant[i] = frame->quant + i * MAX_MONO_SAMPLES; - - /*-- Create Huffman handle. --*/ - huffman = new (ELeave) CHuffman[33];// *) GET_CHUNK(33 * sizeof(CHuffman)); - - /*-- Get the Huffman codebooks. --*/ - InitL3Huffman(huffman); - - } - - /*-- Initializes MPEG Layer I/II/III decoder handle. --*/ -EXPORT_C void -CMPAudDec::Init(TMpTransportHandle *aMpFileFormat) -{ - mpFileFormat = aMpFileFormat; - - /*-- MPEG-1 --*/ - if(version(&mpFileFormat->header) == MPEG_AUDIO_ID) - { - side_info->lsf = FALSE; - side_info->max_gr = 2; - } - - /*-- MPEG-2 LSF or MPEG-2.5 --*/ - else - { - side_info->lsf = TRUE; - side_info->max_gr = 1; - } - - /*-- Get the scalefactor band related parameters. --*/ - III_SfbDataInit(side_info->sfbData, &mpFileFormat->header); -} - - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/src/mp3aacManip.cpp --- a/videoeditorengine/mp3aacManipLib/src/mp3aacManip.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* Copyright (C) 2004 Nokia Corporation. */ - -#include - - -EXPORT_C TInt E32Dll(TDllReason) - { - return KErrNone; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/mp3aacManipLib/src/mstream.cpp --- a/videoeditorengine/mp3aacManipLib/src/mstream.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,565 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/************************************************************************** - External Objects Needed - *************************************************************************/ - -/*-- Project Headers --*/ -#include "mstream.h" -#include "mpheader.h" -#include "mp3Tool.h" - - - -CIII_Channel_Info* CIII_Channel_Info::NewL() - { - - - CIII_Channel_Info* self = new (ELeave) CIII_Channel_Info(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -void CIII_Channel_Info::ConstructL() - { - - } - -CIII_Channel_Info::CIII_Channel_Info() - { - - - } - -CIII_Channel_Info::~CIII_Channel_Info() - { - - - } - - -CIII_SfbData* CIII_SfbData::NewL() - { - - CIII_SfbData* self = new (ELeave) CIII_SfbData(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -void CIII_SfbData::ConstructL() - { - sfbOffsetLong = new (ELeave) int16[MAX_LONG_SFB_BANDS + 1]; - sfbOffsetShort = new (ELeave) int16[MAX_SHORT_SFB_BANDS + 1]; - sfbWidthShort = new (ELeave) int16[MAX_SHORT_SFB_BANDS + 1]; - } - -CIII_SfbData::CIII_SfbData() - { - - - } - -CIII_SfbData::~CIII_SfbData() - { - if (sfbOffsetLong != 0) delete[] sfbOffsetLong; - if (sfbOffsetShort != 0) delete[] sfbOffsetShort; - if (sfbWidthShort != 0) delete[] sfbWidthShort; - - } - -CIII_Side_Info* CIII_Side_Info::NewL() - { - - CIII_Side_Info* self = new (ELeave) CIII_Side_Info(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -void CIII_Side_Info::ConstructL() - { - sfbData = GET_SYMBIAN_CHUNK(CIII_SfbData); - - } - -CIII_Side_Info::CIII_Side_Info() - { - - } - -CIII_Side_Info::~CIII_Side_Info() - { - if (sfbData != 0) SAFE_SYMBIAN_DELETE(sfbData); - - } - -CMCUBuf* CMCUBuf::NewL(TInt aBufLen) - { - - CMCUBuf* self = new (ELeave) CMCUBuf(); - CleanupStack::PushL(self); - self->ConstructL(aBufLen); - CleanupStack::Pop(self); - return self; - } - -void CMCUBuf::ConstructL(TInt aBufLen) - { - - bs = new (ELeave) TBitStream(); - - mcuBufbits = new (ELeave) uint8[aBufLen]; - - - } - -CMCUBuf::CMCUBuf() - { - - } - -CMCUBuf::~CMCUBuf() - { - - if (bs != 0) delete bs; - if (mcuBufbits != 0) - { - delete[] mcuBufbits; - mcuBufbits = 0; - } - - } - -/************************************************************************** - Title : decode_header - - Purpose : Reads header information (excluding syncword) from the bitstream. - - Usage : decode_header(mp) - - Input : mp - mp3 bitstream parameters - - Explanation : Header information is commmon to all layers. Note also that - this function doesn't interprete the fields of the header. - - Author(s) : Juha Ojanpera - *************************************************************************/ - -void -decode_header(CMP_Stream *mp, TBitStream *bs) -{ - uint32 header; - - mp->headerOld.header = mp->header->header; - header = (!mp->side_info->mpeg25) << HEADER_BITS; - header |= BsGetBits(bs, HEADER_BITS); - mp->header->header = header; - - /*-- Store the header bits 16-31 for CRC error checking. --*/ - mp->mp3_crc.crc_payload[0] = (uint8)((header >> 8) & 255); - mp->mp3_crc.crc_payload[1] = (uint8) (header & 255); - - if(error_protection(mp->header)) - mp->mp3_crc.crc = (int16)(BsGetBits(bs, 16)); -} - -/************************************************************************** - Title : FillDataSlotTable - - Purpose : Pre-computes (to avoid division operation during decoding) - the payload size of layer III for all bitrates. - - Usage : y = FillDataSlotTable(mp) - - Input : mp - mp3 stream parameters - - Author(s) : Juha Ojanpera - *************************************************************************/ - -void -FillDataSlotTable(CMP_Stream *mp) -{ - const int16 *brTbl; - int16 nSlots; - - brTbl = GetBitRateTable(mp->header); - /* - * index 0 is free format and index 14 illegal bitrate. - */ - for(int16 i = 1; i < 15; i++) - { - nSlots = (int16)((144 * brTbl[i]) / (frequency(mp->header) / 1000.0f)); - - if(version(mp->header) == MPEG_PHASE2_LSF) - nSlots >>= 1; - - mp->FrameTable[i] = nSlots; - - nSlots = (int16)(nSlots - (GetSideInfoSlots(mp->header) + 4)); - mp->SlotTable[i] = nSlots; - } -} - -/************************************************************************** - Title : main_data_slots - - Purpose : Computes the number of bytes for the layer III payload. The - payload consists of the scalefactors and quantized data of - the channel(s). - - Usage : y = main_data_slots(mp) - - Input : mp - mp3 stream parameters - - Output : y - # of payload bytes for this frame - - Author(s) : Juha Ojanpera - *************************************************************************/ - -int32 -main_data_slots(CMP_Stream *mp) -{ - int16 nSlots; - - if(bit_rate(mp->header)) - { - nSlots = mp->SlotTable[bit_rate_idx(mp->header)]; - - if(padding(mp->header)) - nSlots++; - if(error_protection(mp->header)) - nSlots -= 2; - } - else - { - nSlots = mp->FreeFormatSlots; - - if(padding(mp->header)) - nSlots++; - } - - return(nSlots); -} - -/************************************************************************** - Title : ReleaseMP3Decoder - - Purpose : Releases resources allocated to the mp3 decoder core. - - Usage : ReleaseMP3Decoder(mp) - - Input : mp - mp3 decoder core - - Author(s) : Juha Ojanpera - *************************************************************************/ - -void -ReleaseMP3Decoder(CMP_Stream *mp) - { - int16 i, j; - - if(mp) - { - /* Scalefactors. */ - SAFE_DELETE(mp->frame->scale_factors); - - /* Quantized samples. */ - SAFE_DELETE(mp->frame->quant); - - /* Synthesis buffer. */ - for(i = 0; i < MAX_CHANNELS; i++) - { - SAFE_DELETE(mp->buffer->synthesis_buffer[i]); - } - - - /* Dequantized samples. */ - SAFE_DELETE(mp->buffer->reconstructed); - - /* Huffman codebooks. */ - SAFE_DELETE(mp->huffman); - - if(mp->side_info) - { - for(i = 0; i < MAX_CHANNELS; i++) - { - SAFE_DELETE(mp->side_info->ch_info[i]->scale_fac); - - for(j = 0; j < 2; j++) - { - SAFE_DELETE(mp->side_info->ch_info[i]->gr_info[j]); - } - - - SAFE_SYMBIAN_DELETE(mp->side_info->ch_info[i]); - } - - SAFE_DELETE(mp->side_info->s_mode_long); - - for(i = 0; i < 3; i++) - { - SAFE_DELETE(mp->side_info->s_mode_short[i]); - } - - - SAFE_SYMBIAN_DELETE(mp->side_info); - } - - SAFE_DELETE(mp->header); - SAFE_DELETE(mp->frame); - SAFE_DELETE(mp->buffer); - SAFE_DELETE(mp->br); -// SAFE_DELETE(mp->bs); - } - } - -/************************************************************************** - Title : GetMP3Handle - - Purpose : Returns mp3 decoder core handle to the callee. - - Usage : GetMP3Handle() - - Output : mp - handle of mp3 decoder core - - Author(s) : Juha Ojanpera - *************************************************************************/ - -CMP_Stream * -GetMP3HandleL(void) -{ - int16 i, j, groups, idx[] = {0, 23, 36, 49, 62, 85, 98, 111}; - CIII_Scale_Factors *scale_fac; - CMP_Stream *mp; - - //mp = (CMP_Stream *) GET_CHUNK(sizeof(CMP_Stream)); - - mp = new (ELeave) CMP_Stream(); - IS_ERROR(mp); - - - - //mp->bs = (TBitStream *) GET_CHUNK(sizeof(TBitStream)); - //IS_ERROR(mp->bs); - - mp->header = (TMPEG_Header *) GET_CHUNK(sizeof(TMPEG_Header)); - IS_ERROR(mp->header); - - mp->frame = (TMPEG_Frame *) GET_CHUNK(sizeof(TMPEG_Frame)); - IS_ERROR(mp->frame); - - mp->buffer = (TMPEG_Buffer *) GET_CHUNK(sizeof(TMPEG_Buffer)); - IS_ERROR(mp->buffer); - - mp->side_info = (CIII_Side_Info *) GET_SYMBIAN_CHUNK(CIII_Side_Info); - IS_ERROR(mp->side_info); - - mp->frame->scale_factors = (uint8 *) GET_CHUNK(MAX_CHANNELS * SBLIMIT * 3 * sizeof(uint8)); - Mem::FillZ (mp->frame->scale_factors, MAX_CHANNELS * SBLIMIT * 3 * sizeof(uint8)); - - IS_ERROR(mp->frame->scale_factors); - - mp->huffman = (CHuffman *) GET_CHUNK(33 * sizeof(CHuffman)); - IS_ERROR(mp->huffman); - - mp->br = (TBitStream *) GET_CHUNK(sizeof(TBitStream)); - IS_ERROR(mp->br); - - Mem::Fill(mp->PrevStreamInfo, sizeof(uint32) * 2, 0); - - for(i = 0; i < MAX_CHANNELS; i++) - { - //mp->side_info->ch_info[i] = (CIII_Channel_Info *) GET_CHUNK(sizeof(CIII_Channel_Info)); - mp->side_info->ch_info[i] = GET_SYMBIAN_CHUNK(CIII_Channel_Info); - IS_ERROR(mp->side_info->ch_info[i]); - for(j = 0; j < 2; j++) - { - mp->side_info->ch_info[i]->gr_info[j] = (TGranule_Info *) GET_CHUNK(sizeof(TGranule_Info)); - IS_ERROR(mp->side_info->ch_info[i]->gr_info[j]); - } - } - - mp->side_info->s_mode_long = (StereoMode *) GET_CHUNK(22 * sizeof(StereoMode)); - IS_ERROR(mp->side_info->s_mode_long); - for(i = 0; i < 3; i++) - { - mp->side_info->s_mode_short[i] = (StereoMode *) GET_CHUNK(13 * sizeof(StereoMode)); - IS_ERROR(mp->side_info->s_mode_short[i]); - } - - for(i = j = 0; i < MAX_CHANNELS; i++) - { - mp->side_info->ch_info[i]->scale_fac = (CIII_Scale_Factors *) GET_CHUNK(sizeof(CIII_Scale_Factors)); - IS_ERROR(mp->side_info->ch_info[i]->scale_fac); - scale_fac = mp->side_info->ch_info[i]->scale_fac; - - scale_fac->scalefac_long = mp->frame->scale_factors + idx[j++]; - scale_fac->scalefac_short[0] = mp->frame->scale_factors + idx[j++]; - scale_fac->scalefac_short[1] = mp->frame->scale_factors + idx[j++]; - scale_fac->scalefac_short[2] = mp->frame->scale_factors + idx[j++]; - } - - groups = MAX_MONO_SAMPLES * MAX_CHANNELS; - - TInt a = 0; - mp->frame->quant = (int16 *) GET_CHUNK((groups + 10) * sizeof(int16)); - for (a = 0 ; a < groups ; a++) mp->frame->quant[a] = 0; - - IS_ERROR(mp->frame->quant); - - mp->buffer->reconstructed = (FLOAT *) GET_CHUNK(groups * sizeof(FLOAT)); - IS_ERROR(mp->buffer->reconstructed); - for (a = 0 ; a < groups ; a++) mp->buffer->reconstructed[a] = 0; - - for(i = 0; i < MAX_CHANNELS; i++) - { - mp->frame->ch_quant[i] = mp->frame->quant + i * MAX_MONO_SAMPLES; - mp->buffer->ch_reconstructed[i] = mp->buffer->reconstructed + i * MAX_MONO_SAMPLES; - for(j = 0; j < SBLIMIT; j++) - mp->spectrum[i][j] = &mp->buffer->ch_reconstructed[i][j * SSLIMIT]; - } - - for(i = 0; i < MAX_CHANNELS; i++) - { - mp->buffer->buf_idx[i] = mp->buffer->dct_idx[i] = 0; - mp->buffer->synthesis_buffer[i] = (FLOAT *) GET_CHUNK((HAN_SIZE << 1) * sizeof(FLOAT)); - IS_ERROR(mp->buffer->synthesis_buffer[i]); - } - - //-- Get the Huffman codebooks. -- - //init_huffman(mp->huffman); - InitL3Huffman(mp->huffman); - return (mp); - -// error_exit: - - //ReleaseMP3Decoder(mp); - - //return (NULL); -} - -/************************************************************************** - Title : MP3DecPrepareInit - - Purpose : Prepares the core engine parameters for the search of - first mp3 frame. - - Usage : MP3DecPrepareInit(mp, out_param, complex, br_buffer, br_size) - - Input : mp - handle of mp3 decoder core - out_param - output parameters of current track - complex - decoding complexity parameters - br_buffer - address of bit reservoir buffer - br_size - size of bit reservoir buffer - - Author(s) : Juha Ojanpera - *************************************************************************/ - -void -MP3DecPrepareInit(CMP_Stream *mp, Out_Param *out_param, Out_Complexity *complex, - DSP_BYTE *br_buffer, uint32 br_size) -{ - mp->complex = complex; - mp->out_param = out_param; - - BsInit2(mp->br, br_buffer, br_size); - - mp->mp3_crc.crc = 0; - - mp->header->header = 0; - - mp->syncInfo.sync_word = (int16)SYNC_WORD; - mp->syncInfo.sync_length = (int16)SYNC_WORD_LENGTH; - mp->syncInfo.sync_mask = (int16)((1 << mp->syncInfo.sync_length) - 1); - mp->syncInfo.sync_status = FIRST_FRAME_WITH_LAYER3; - - mp->FreeFormatSlots = 0; - mp->idx_increment = 0; - mp->PrevSlots = 0; - mp->FrameStart = 0; - mp->SkipBr = FALSE; - mp->WasSeeking = FALSE; - mp->OverlapBufPtr[0] = mp->OverlapBufPtr[1] = 0; -} - -/************************************************************************** - Title : MP3DecCompleteInit - - Purpose : Completes the initialization of the core engine parameters. - - Usage : MP3DecPrepareInit(mp, frameBytes) - - Input : mp - handle of mp3 decoder core - - Output : frameBytes - # of bytes for the first frame - - Author(s) : Juha Ojanpera - *************************************************************************/ - -void -MP3DecCompleteInit(CMP_Stream *mp, int16 *frameBytes) -{ - //-- Fixed size (unit is bytes !!). -- - mp->mp3_crc.bufLen = (uint16)(2 + GetSideInfoSlots(mp->header)); - - //-- MPEG-1 --/ - if(version(mp->header) == MPEG_AUDIO_ID) - { - mp->side_info->lsf = FALSE; - mp->side_info->max_gr = 2; - } - //-- MPEG-2 LSF or MPEG-2.5 -- - else - { - mp->side_info->lsf = TRUE; - mp->side_info->max_gr = 1; - } - - //-- Determine the size of the payload only when necessary. --/ - if(bit_rate(mp->header)) - { - mp->FreeFormatSlots = 0; - - if((int32)(frequency(mp->header) != mp->PrevStreamInfo[0]) || - (int32)(channels(mp->header) != mp->PrevStreamInfo[1])) - FillDataSlotTable(mp); - } - else FillDataSlotTable(mp); - - mp->PrevStreamInfo[0] = frequency(mp->header); - mp->PrevStreamInfo[1] = channels(mp->header); - - //-- Get the scalefactor band related parameters. --/ - III_SfbDataInit(mp->side_info->sfbData, mp->header); - - //-- Init re-ordering table. --// - init_III_reorder(mp->reorder_idx, mp->side_info->sfbData->sfbShort, - mp->side_info->sfbData->sfbWidth); - - //-- Number of bytes for next frame. --/ - *frameBytes = (int16)(main_data_slots(mp) + GetSideInfoSlots(mp->header) + 3); - if(error_protection(mp->header)) - *frameBytes += 2; -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/rom/VideoEditorEngine.iby --- a/videoeditorengine/rom/VideoEditorEngine.iby Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifdef RD_S60_SIMPLE_VIDEO_EDITOR - -#ifndef __VIDEOEDITORENGINE_IBY__ -#define __VIDEOEDITORENGINE_IBY__ - -// Utilizing constants from data_caging_paths_for_iby.hrh, included in higher level - -file=ABI_DIR\BUILD_DIR\aedmp3aaclib.dll SHARED_LIB_DIR\aedmp3aaclib.dll -file=ABI_DIR\BUILD_DIR\aedengine.dll SHARED_LIB_DIR\aedengine.dll -file=ABI_DIR\BUILD_DIR\vedtranscoder.dll SHARED_LIB_DIR\vedtranscoder.dll -file=ABI_DIR\BUILD_DIR\vedh263d.dll SHARED_LIB_DIR\vedh263d.dll -file=ABI_DIR\BUILD_DIR\vedengine.dll SHARED_LIB_DIR\vedengine.dll -file=ABI_DIR\BUILD_DIR\vedavcedit.dll SHARED_LIB_DIR\vedavcedit.dll - -// sis stub -//data=ZSYSTEM\install\VideoEditorEngineStub.sis System\Install\VideoEditorEngineStub.sis - -#endif //__VIDEOEDITORENGINE_IBY__ -#endif \ No newline at end of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/inc/DCColorManagement.h --- a/videoeditorengine/vedengine/GenManip/inc/DCColorManagement.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,113 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//DCColorManagement.h -// -//Version 1.00 -// -//Contains: -// CDCCDM -// Simple color management approach consisting -// of 3xLUT + 3x3 Matrix + 3xLUT for compensating -// display specific features. -// -//History: -// 19.08.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - - -#ifndef __DCColorManagement_H -#define __DCColorManagement_H - -#include // for Fundamental Types -#include // for Fundamental Types -#include //for the calculation of exponents - -//Class definition -class CDCColorManagement : public CBase -{ - -public: - - //Parameter struct definition - struct DCColorManagementParams - { - //Gamma de-correction (linearization) LUTs - //Pointers to actual data - TInt *GammaR; - TInt *GammaG; - TInt *GammaB; - - //3x3 color space modification matrix - //Pointer to actual data - TInt *Matrix; - - //Tone rendering curves = display compensation LUTs - //Pointers to actual data - TInt *TRCR; - TInt *TRCG; - TInt *TRCB; - }; - - //Gamma de-correction (linearization) LUTs - TInt iGammaR[256]; - TInt iGammaG[256]; - TInt iGammaB[256]; - - //3x3 color space modification matrix - TInt iMatrix[9]; - - //Tone rendering curves = display compensation LUTs - TInt iTRCR[256]; - TInt iTRCG[256]; - TInt iTRCB[256]; - - //Standard class member functions - CDCColorManagement(); - static CDCColorManagement* NewL(); - static CDCColorManagement* NewLC(); - ~CDCColorManagement(); - void ConstructL(); - - //Process original image and store result - void ProcessL(CFbsBitmap* aBPtr); - - //Set processing parameters - void SetParameters(DCColorManagementParams* params); - - //Get current processing parameters - void GetParameters(DCColorManagementParams* params); - - //Limit integer value to byte [0,255] - static inline TUint8 Limit255(TInt i) {return (TUint8)(i<0?0:(i>255?255:i));} - -private: - - // Line Buffer and pointer - HBufC8* iScanLine; - - //Processing parameters - DCColorManagementParams iParams; - -}; - -#endif // ifndef __DCColorManagement_H -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/inc/DCDefines.h --- a/videoeditorengine/vedengine/GenManip/inc/DCDefines.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//DCDefines.h -// -//Version 1.00 -// -//Contains: -// _Defines_H -// Defines the parameter values used in the IMAAMI algorithms. -// -//History: -// 19.08.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - - - -#ifndef _Defines_H -#define _Defines_H - -#define EXPO_SHIFT 13 // Accuracy in exponent table -#define EXPO_MULTI (1 << EXPO_SHIFT) // Multiplier for exponent -#define EXPO_SIZE (3 * EXPO_MULTI) // Size of exponent table -#define EXPO_ACCU 12 // Accuracy of weight value -#define EXPO_MULT (1 << EXPO_ACCU) -#define EXPO_DIFF (2 * SHIFT_PLACE - EXPO_SHIFT) - -#define SHIFT_COEFF (16) // Accuracy of float to integer (coeff) -#define SHIFT_PLACE ( 8) // Accuracy of float to integer (place) -#define SHIFT_DIFF ( 8) // Accuracy reduction (SHIFT_COEFF - SHIFT_PLACE) - -#define EXPO_SIZE2 (384) // Size of exponent table ((3 * (1 << EXPO_SHIFT2)) >> 1) -#define EXPO_DIFF2 ( 8) // Reduction of accuracy (SHIFT_COEFF - EXPO_SHIFT2) - - -#endif // ifndef _Defines_H -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/inc/DCDigitalZoom.h --- a/videoeditorengine/vedengine/GenManip/inc/DCDigitalZoom.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,206 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -// -//Version 1.00 -// -//Contains: -// CDCDCDigitalZoom -// Scaling of image to display size & zooming. -// Includes support for different scaling and crop sizes with pan&scan. -// Pan can use previously computed scaled data when changing. -// Based on IMAAMI scaling algorithm. -// -//History: -// 19.08.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - - -#ifndef __DIGITAL_ZOOM_H -#define __DIGITAL_ZOOM_H - -#include // for Fundamental Types -#include // for Fundamental Types -#include -#include "DCDefines.h" - -//Const tables for computation speed-up -const TUint16 KDivTable[4 * 256] = -{ - 32768, 21845, 16384, 13107, 10923, 9362, 8192, 7282, - 6554, 5958, 5461, 5041, 4681, 4369, 4096, 3855, 3641, 3449, - 3277, 3121, 2979, 2849, 2731, 2621, 2521, 2427, 2341, 2260, - 2185, 2114, 2048, 1986, 1928, 1872, 1820, 1771, 1725, 1680, - 1638, 1598, 1560, 1524, 1489, 1456, 1425, 1394, 1365, 1337, - 1311, 1285, 1260, 1237, 1214, 1192, 1170, 1150, 1130, 1111, - 1092, 1074, 1057, 1040, 1024, 1008, 993, 978, 964, 950, - 936, 923, 910, 898, 886, 874, 862, 851, 840, 830, - 819, 809, 799, 790, 780, 771, 762, 753, 745, 736, - 728, 720, 712, 705, 697, 690, 683, 676, 669, 662, - 655, 649, 643, 636, 630, 624, 618, 612, 607, 601, - 596, 590, 585, 580, 575, 570, 565, 560, 555, 551, - 546, 542, 537, 533, 529, 524, 520, 516, 512, 508, - 504, 500, 496, 493, 489, 485, 482, 478, 475, 471, - 468, 465, 462, 458, 455, 452, 449, 446, 443, 440, - 437, 434, 431, 428, 426, 423, 420, 417, 415, 412, - 410, 407, 405, 402, 400, 397, 395, 392, 390, 388, - 386, 383, 381, 379, 377, 374, 372, 370, 368, 366, - 364, 362, 360, 358, 356, 354, 352, 350, 349, 347, - 345, 343, 341, 340, 338, 336, 334, 333, 331, 329, - 328, 326, 324, 323, 321, 320, 318, 317, 315, 314, - 312, 311, 309, 308, 306, 305, 303, 302, 301, 299, - 298, 297, 295, 294, 293, 291, 290, 289, 287, 286, - 285, 284, 282, 281, 280, 279, 278, 277, 275, 274, - 273, 272, 271, 270, 269, 267, 266, 265, 264, 263, - 262, 261, 260, 259, 258, 257, 256, 255, 254, 253, - 252, 251, 250, 249, 248, 247, 246, 245, 245, 244, - 243, 242, 241, 240, 239, 238, 237, 237, 236, 235, - 234, 233, 232, 232, 231, 230, 229, 228, 228, 227, - 226, 225, 224, 224, 223, 222, 221, 221, 220, 219, - 218, 218, 217, 216, 216, 215, 214, 213, 213, 212, - 211, 211, 210, 209, 209, 208, 207, 207, 206, 205, - 205, 204, 204, 203, 202, 202, 201, 200, 200, 199, - 199, 198, 197, 197, 196, 196, 195, 194, 194, 193, - 193, 192, 192, 191, 191, 190, 189, 189, 188, 188, - 187, 187, 186, 186, 185, 185, 184, 184, 183, 183, - 182, 182, 181, 181, 180, 180, 179, 179, 178, 178, - 177, 177, 176, 176, 175, 175, 174, 174, 173, 173, - 172, 172, 172, 171, 171, 170, 170, 169, 169, 168, - 168, 168, 167, 167, 166, 166, 165, 165, 165, 164, - 164, 163, 163, 163, 162, 162, 161, 161, 161, 160, - 160, 159, 159, 159, 158, 158, 158, 157, 157, 156, - 156, 156, 155, 155, 155, 154, 154, 153, 153, 153, - 152, 152, 152, 151, 151, 151, 150, 150, 150, 149, - 149, 149, 148, 148, 148, 147, 147, 147, 146, 146, - 146, 145, 145, 145, 144, 144, 144, 143, 143, 143, - 142, 142, 142, 142, 141, 141, 141, 140, 140, 140, - 139, 139, 139, 139, 138, 138, 138, 137, 137, 137, - 137, 136, 136, 136, 135, 135, 135, 135, 134, 134, - 134, 133, 133, 133, 133, 132, 132, 132, 132, 131, - 131, 131, 131, 130, 130, 130, 130, 129, 129, 129, - 129, 128, 128, 128, 128, 127, 127, 127, 127, 126, - 126, 126, 126, 125, 125, 125, 125, 124, 124, 124, - 124, 123, 123, 123, 123, 122, 122, 122, 122, 122, - 121, 121, 121, 121, 120, 120, 120, 120, 120, 119, - 119, 119, 119, 119, 118, 118, 118, 118, 117, 117, - 117, 117, 117, 116, 116, 116, 116, 116, 115, 115, - 115, 115, 115, 114, 114, 114, 114, 114, 113, 113, - 113, 113, 113, 112, 112, 112, 112, 112, 111, 111, - 111, 111, 111, 111, 110, 110, 110, 110, 110, 109, - 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, - 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, - 106, 106, 105, 105, 105, 105, 105, 105, 104, 104, - 104, 104, 104, 104, 103, 103, 103, 103, 103, 103, - 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, - 101, 101, 101, 100, 100, 100, 100, 100, 100, 99, - 99, 99, 99, 99, 99, 99, 98, 98, 98, 98, - 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, - 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, - 95, 95, 95, 95, 94, 94, 94, 94, 94, 94, - 94, 93, 93, 93, 93, 93, 93, 93, 93, 92, - 92, 92, 92, 92, 92, 92, 92, 91, 91, 91, - 91, 91, 91, 91, 91, 90, 90, 90, 90, 90, - 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, - 89, 88, 88, 88, 88, 88, 88, 88, 88, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, - 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, - 73, 73, 73, 73, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 67, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 64, 64, 64, - 64, 64, 64, 64, 64, 64 -}; - - - - -// Class definition -class CDCDigitalZoom : public CBase -{ -public: - - // Struct definition - struct DCDigitalZoomParams - { - TInt sizeX; //Output size - TInt sizeY; - TReal scaleX; //Scaling factors - TReal scaleY; - TInt allShiftX; //Pan location - TInt allShiftY; - TInt newShiftX; //Change in pan (used for speed-up) - TInt newShiftY; //only one value at time can be >0 - }; - - //Standard class functions - CDCDigitalZoom(); - void ConstructL(); - static CDCDigitalZoom* NewL(); - static CDCDigitalZoom* NewLC(); - ~CDCDigitalZoom(); - - // Process original image and store output image (main function) - void ProcessL(const CFbsBitmap* aOriPtr, CFbsBitmap* aOutPtr); - - //Set processing parameters - void SetParameters(DCDigitalZoomParams* params); - - //Get current processing parameters - void GetParameters(DCDigitalZoomParams* params); - -protected: - - //Parameters - DCDigitalZoomParams iParams; - -private: - - //Do actual resizing - void DecimateL(const CFbsBitmap* aOriPtr, CFbsBitmap* aOutPtr, - TInt aOutSizeX, TInt aOutSizeY, - TInt aOriSizeX, TInt aOriSizeY, - TReal aZoomX, TReal aZoomY, - TInt allShiftX, TInt allShiftY, - TInt newShiftX, TInt newShiftY); -}; -#endif // ifndef __DIGITAL_ZOOM_H -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/inc/DCDithering.h --- a/videoeditorengine/vedengine/GenManip/inc/DCDithering.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//DCDithering.h -// -//Version 1.00 -// -//Contains: -// CDCDithering -// Dithering by H263 algorithm developed in /. -// -//History: -// 19.08.2003 version 1.00 created using existing algorithms -//************************************************************************* - - - -/* ------------------------------------------------------------------------------ - - DESCRIPTION - - Defines the dithering class. - ------------------------------------------------------------------------------ -*/ - -#ifndef __DCDithering_H__ -#define __DCDithering_H__ - - - -// INCLUDES -#ifndef __E32STD_H__ -#include // for Fundamental Types -#endif // __E32STD_H__ -#ifndef __E32BASE_H__ -#include // for CBase -#endif // __E32BASE_H__ - - - -//Class definition -class CDCDithering : public CBase -{ -public: - - CDCDithering(); // Constructor - static CDCDithering* NewL(); // Factory function - static CDCDithering* NewLC(); // Factory function - ~CDCDithering(); // Destructor - void ConstructL(); // Second Phase contructor (may leave) - - // Process and store image referenced by aBPtr - void ProcessL(CFbsBitmap& aBPtr); - -private: - - // Limit integer value to byte [0,255] - static inline TUint8 Limit255(TInt i) {return (TUint8)(i<0?0:(i>255?255:i));} - - // Scan line buffer - HBufC8* iScanLineBuffer; -}; - -#endif // __DCDithering_H__ -// End of File -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/inc/DCIetd.h --- a/videoeditorengine/vedengine/GenManip/inc/DCIetd.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//CDCIETD.h -// -//Version 2.00 -// -//Contains: -// CDCIETD -// Display specific color contrast enhancement, -// Image Enhancement for Transflective Displays version 2, -// IETD 2. -// -// The class implements the following image enhancements algorithms: -// - Histogram guided contrast stretch -// - Color saturation increase -// -// Usage: -// - First an instance of this class is created by factory functions NewL() or NewLC. -// - All settings and configurations can be done by calling function SetParams(). -// Current parameters can be checked by calling function GetParams(). -// - Then the The Analyze() function is called with CFbsBitmap as an argumet. -// This function have to be called at least once before ProcessL(). -// - Then the The ProcessL() function is called with CFbsBitmap as an argumet. -// The bitmap is handled in place so this function modifies the given bitmap. -// -//History: -// 23.10.2003 version 2.00 created using existing IMAAMI IETD -//************************************************************************* - -#ifndef __DCIetd_H__ -#define __DCIetd_H__ - -// INCLUDES - -#ifndef __E32STD_H__ -#include // for Fundamental Types -#endif // __E32STD_H__ - -#ifndef __E32BASE_H__ -#include // for CBase -#endif // __E32BASE_H__ - -//Default parameters -#include "DCInit.h" - - -//------------------- -// CLASS DEFINITIONS -// CDCIetd - The one and ony class to contain all required methods -// to implement DCIetd functionality. -class CDCIetd : public CBase - { - public: - - //Parameter struct - struct DCIetdParameters - { - TUint8 aWhitePixels; //Percentage of pixels stretched to maximum value - TUint8 aBlackPixels; //Percentage of pixels stretched to minimum value - TUint8 aStretchLimit; //Narrowest histogram to be stretched to full range - TUint8 aSaturationGain; //Saturation increase gain - TUint8 aBitLimit; //Minimum number of color values for full gain - TUint8 aWBC; //White balance correction limit - TUint8 aDBC; //Dark balance correction limit - }; - - CDCIetd(); // Constructor - static CDCIetd* NewL(); // Factory function NewL - static CDCIetd* NewLC();// Factory function NewLC - ~CDCIetd(); // Destructor - void ConstructL(); // Second Phase contructor (may leave) - - // Analyze image referenced by aBPtr - void Analyze(CFbsBitmap& aBPtr); - - // Process and store image referenced by aBPtr - void ProcessL(CFbsBitmap& aBPtr); - - // Parameter exchange - void SetParams(DCIetdParameters* parameters); - void GetParams(DCIetdParameters* parameters); - - private: - - void GatherHistograms(const CFbsBitmap& aBPtr); // Construct the R, G, and B Histograms - void MakeMappings(); // Calculate the mapping LUTs - - // Limit integer value to byte [0,255] - static inline TUint8 Limit255(TInt i) {return (TUint8)(i<0?0:(i>255?255:i));} - - TUint iHistogram[3][256]; // Histogram data - TUint8 iMap[3][256]; // Color component mapping funtions - HBufC8* iScanLineBuffer; // Scan line buffer - - TUint8 iReducedStretchLimit[3]; //Stretch limits for each component - - DCIetdParameters iParameters; //Parameters - }; - -#endif // __DCIetd_H__ - -// End of File -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/inc/DCInit.h --- a/videoeditorengine/vedengine/GenManip/inc/DCInit.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//DCInit.h -// -//Version 1.00 -// -//Contains: -// _Init_H -// Defines all the default parameter values used in the IMAAMI algorithms. -// -//History: -// 19.08.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - - -#ifndef _Init_H -#define _Init_H - -#define DEBUG 1 - -//DigitalZoom -#define DZ ETrue -#define DZsizeX 176 -#define DZsizeY 144 //132 -#define DZscaleX 1.0 //0.25 -#define DZscaleY 1.0 //0.25 -#define DZallX 0 -#define DZallY 0 -#define DZnewX 0 -#define DZnewY 0 - -//IETD -#define IETD ETrue -#define StretchLimit 175 -#define BlackPixels 3 -#define WhitePixels 7 -#define SaturationGain 3 -#define BitLimit 32 -#define WBC 25 -#define DBC 10 - -//Sharpening -#define SHARP ETrue -#define SharpGain 0.25 -#define SharpDZone 7 -#define SharpOver 15 - -//Dithering -#define DITHER ETrue - -//Color Management -#define CM ETrue //EFalse - - -const TInt CMGammaR[256] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}; - -const TInt CMGammaG[256] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}; - -const TInt CMGammaB[256] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}; - -const TInt CMMatrix[9] = {65536, 0, 0, - 0, 65536, 0, - 0, 0, 65536}; - -const TInt CMTRCR[256] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}; - -const TInt CMTRCG[256] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}; - -const TInt CMTRCB[256] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255}; - - -#endif // ifndef _Defines_H - -//---IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/inc/DCSharpening.h --- a/videoeditorengine/vedengine/GenManip/inc/DCSharpening.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//DCSharpening.h -// -//Version 1.00 -// -//Contains: -// DCSharpening -// Sharpening using IMAAMI algorithm. -// -//History: -// 19.08.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - -#ifndef __DCSharpening_H -#define __DCSharpening_H - -#include // for Fundamental Types -#include // for Fundamental Types -#include "DCInit.h" - -//Adjust to proper signal range (10 bits) -#define ADJUST_RANGE_TO_10BITS(value) ((value) < 0) ? 0 : ((value) > 1023) ? 1023 : (value) - - -//Class definition -class DCSharpening : public CBase -{ -public: - - //parameters - struct DCSharpeningParams - { - TUint SHARP_OVER; - TUint SHARP_DZONE; - TReal SHARP_GAIN; - }; - - DCSharpening(); - static DCSharpening* NewL(); - static DCSharpening* NewLC(); - ~DCSharpening(); - - // Second Phase contructor (may leave) - void ConstructL(); - - //Process original image and store result - void ProcessL(CFbsBitmap* aBPtr); - - //Set processing parameters - void SetParameters(DCSharpeningParams* params); - - //Get current processing parameters - void GetParameters(DCSharpeningParams* params); - - - //Limit integer value to byte [0,255] - static inline TUint8 Limit255(TInt i) { - return (TUint8)(i<0?0:(i>255?255:i)); - } - - -private: - - //Processing parameters - DCSharpeningParams iParameters; - - //Line Buffer and pointer - HBufC8* iScanLine; - HBufC8* iPrevScanLine; - HBufC8* iPrevPrevScanLine; - HBufC8* iNextScanLine; - HBufC8* iNextNextScanLine; - - //Sharpening functions from IMAAMI - TInt Peak(TInt aA, TInt aB, TInt aC, TInt aD, TInt aE, TInt aF, TInt aG, TInt aH, TInt aO); - TInt Median3(TInt aA, TInt aB, TInt aC); - void findMinMax4(TInt A, TInt B, TInt C, TInt D, TInt *min, TInt *max); - - //Processing parameters for stretch - TInt iGain; -}; - -#endif // ifndef __DCSharpening_H -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/inc/DisplayChain.h --- a/videoeditorengine/vedengine/GenManip/inc/DisplayChain.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,115 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//DisplayChain.cpp -// -//Version 1.00 -// -//Contains: -// CDisplayChain -// Image processing class implementing -// display specific image processing: -// - Scaling to display size with pan support -// - IETD - display specific color contrast enhancement -// - Sharpening -// - Display feature compensation by simple color management -// - Dithering -// -//History: -// 30.10.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - -#ifndef __DisplayChain_H -#define __DisplayChain_H - -#include // for Fundamental Types -#include // for Fundamental Types -#include //for the calculation of exponents -#include - -#include "DCDigitalZoom.h" -#include "DCSharpening.h" -#include "DCIetd.h" -#include "DCDithering.h" -#include "DCColorManagement.h" -#include "DCDefines.h" -#include "DCInit.h" - - -//Class definition -class CDisplayChain : public CBase -{ -public: - - //Standard functions - CDisplayChain(); - static CDisplayChain* NewL(); - static CDisplayChain* NewLC(); - ~CDisplayChain(); - - // Second Phase contructor (may leave) - void ConstructL(); - - //Process original image and store result - void ProcessL(const CFbsBitmap* InBitmap, CFbsBitmap* aTargetBitmap); - - //Processing parameters - struct DisplayChainParams - { - TBool FirstOpening; - - TBool IetdON; //IETD ON/OFF - TBool SharpeningON; //Sharpening ON/OFF - TBool ColorManagementON; //Color Management ON/OFF - TBool DitheringON; //Dithering ON/OFF - TBool DigitalZoomON; //Scaling ON/OFF - - //Parameters for each processing algorithm - //See processing algorithm classes for details. - CDCIetd::DCIetdParameters IETDParameters; - DCSharpening::DCSharpeningParams SharpeningParameters; - CDCColorManagement::DCColorManagementParams ColorManagementParameters; - CDCDigitalZoom::DCDigitalZoomParams DZParameters; - }; - - //Parameter excange - void SetParameters(DisplayChainParams* Parameters); - void GetParameters(DisplayChainParams* Parameters); - - //Limit integer value to byte [0,255] - static inline TUint8 Limit255(TInt i) {return (TUint8)(i<0?0:(i>255?255:i));} - -private: - - - //PArameters - DisplayChainParams Parameters; - - //Processing objects - CDCIetd* IetdPtr; - DCSharpening* SharpeningPtr; - CDCColorManagement* ColorManagementPtr; - CDCDithering* DitheringPtr; - CDCDigitalZoom* DigitalZoomPtr; -}; - -#endif // ifndef __DisplayChain_H -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/src/DCColorManagement.cpp --- a/videoeditorengine/vedengine/GenManip/src/DCColorManagement.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,265 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//DCColorManagement.cpp -// -//Version 1.00 -// -//Contains: -// CDCCDM -// Simple color management approach consisting -// of 3xLUT + 3x3 Matrix + 3xLUT for compensating -// display specific features. -// -//History: -// 19.08.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - -#include -#include -#include -#include "DCColorManagement.h" - - - -/* ------------------------------------------------------------------------------ - - CDCColorManagement - - Constructor - - Default constructor, initializes member variables to initial values - - Return Values: none - ------------------------------------------------------------------------------ -*/ -CDCColorManagement::CDCColorManagement() -{ - //Set default values for parameters - //Set pointer to internal data (LUTs and matrix memory locations) - iParams.GammaR = iGammaR; - iParams.GammaG = iGammaG; - iParams.GammaB = iGammaB; - iParams.Matrix = iMatrix; - iParams.TRCR = iTRCR; - iParams.TRCG = iTRCG; - iParams.TRCB = iTRCB; -} - - - -/* ------------------------------------------------------------------------------ - - NewLC - - Factory function to instantiate the class. - This function leaves the class pointer to the cleanup stack - May leave with KErrNoMemory if no memory available - - Return Values: CDCColorManagement* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -CDCColorManagement* CDCColorManagement::NewLC() -{ - CDCColorManagement* self = new (ELeave) CDCColorManagement(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - - - -/* ------------------------------------------------------------------------------ - - NewL - - Factory function to instantiate the class. - May leave with KErrNoMemory if no memory available - - Return Values: CDCColorManagement* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -CDCColorManagement* CDCColorManagement::NewL() -{ - CDCColorManagement* self = CDCColorManagement::NewLC(); - CleanupStack::Pop(); - return self; -} - - - - -/* ------------------------------------------------------------------------------ - - ConstructL - - Second phase constructor. Does nothing at the moment - - Return Values: none - - ----------------------------------------------------------------------------- -*/ -void CDCColorManagement::ConstructL() -{ - // This function is intentionally left blank. -} - - - -/* ------------------------------------------------------------------------------ - - Destructor - - Deletes the scanline buffer - - Return Values: none - ------------------------------------------------------------------------------ -*/ -CDCColorManagement::~CDCColorManagement() -{ - // This function is intentionally left blank. -} - - - - -/* ------------------------------------------------------------------------------ - - ProcessL - - Process image referenced by aBPtr (modify aBPtr). - May leave with KErrNoMemory if no memory available - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDCColorManagement::ProcessL(CFbsBitmap* aBPtr) -{ - - TInt r, g, b, rr, gg, bb; // Color components - TUint8* DataPtr; // Pointer to image data - - //Check image mode - if (aBPtr->DisplayMode() != EColor16M) - return; - - // Line Buffer and pointer to the data - TUint LineLength = aBPtr->SizeInPixels().iWidth; - iScanLine = HBufC8::NewMaxL(LineLength*3); - TPtr8 LinePtr((TUint8*)iScanLine->Des().Ptr(), LineLength*3); - - // Step through image lines - for (TInt LineNo=0; LineNoSizeInPixels().iHeight; ++LineNo) - { - //Get line from image and set data pointer - aBPtr->GetScanLine(LinePtr, TPoint(0, LineNo), aBPtr->SizeInPixels().iWidth, aBPtr->DisplayMode()); - DataPtr = (TUint8 *)iScanLine->Des().Ptr(); - - //Step through image pixels - for (TUint x=aBPtr->SizeInPixels().iWidth; x != 0; --x) - { - //Get the color components and map them using linearization LUTs - b=iParams.GammaR[*DataPtr]; - g=iParams.GammaG[*(DataPtr+1)]; - r=iParams.GammaB[*(DataPtr+2)]; - - //Process with 3x3 matrix - rr=(r*iParams.Matrix[0] + g*iParams.Matrix[3*0+1] + b*iParams.Matrix[3*0+2])>>16; - gg=(r*iParams.Matrix[3*1+0] + g*iParams.Matrix[3*1+1] + b*iParams.Matrix[3*1+2])>>16; - bb=(r*iParams.Matrix[3*2+0] + g*iParams.Matrix[3*2+1] + b*iParams.Matrix[3*2+2])>>16; - - //Limit between 0...255 - if (rr<0) rr=0; if (rr>255) rr=255; - if (gg<0) gg=0; if (gg>255) gg=255; - if (bb<0) bb=0; if (bb>255) bb=255; - - //Process with TRC LUTs - rr=iParams.TRCR[rr]; - gg=iParams.TRCG[gg]; - bb=iParams.TRCB[bb]; - - //Set color components - *DataPtr = (TUint8)bb; - ++DataPtr; - *DataPtr = (TUint8)gg; - ++DataPtr; - *DataPtr = (TUint8)rr; - ++DataPtr; - } - - //Set processed line - aBPtr->SetScanLine(LinePtr, LineNo); - } - - //Free memory - delete(iScanLine); - iScanLine = 0; -} - - - - -/* ------------------------------------------------------------------------------ - - SetParams - - Set processing parameters - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDCColorManagement::SetParameters(DCColorManagementParams* params) -{ - iParams = *params; -} - - - - -/* ------------------------------------------------------------------------------ - - GetParams - - Get current processing parameters - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDCColorManagement::GetParameters(DCColorManagementParams* params) -{ - *params = iParams; -} -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/src/DCDigitalZoom.cpp --- a/videoeditorengine/vedengine/GenManip/src/DCDigitalZoom.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1059 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//DCDCDigitalZoom.h -// -//Version 1.00 -// -//Contains: -// CDCDCDigitalZoom -// Scaling of image to display size & zooming. -// Includes support for different scaling and crop sizes with pan&scan. -// Pan can use previously computed scaled data when changing. -// Based on IMAAMI scaling algorithm. -// -//History: -// 19.08.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - - - -#include -#include "DCDigitalZoom.h" - - - -/* ------------------------------------------------------------------------------ - - CDCDigitalZoom::CDCDigitalZoom - - C++ constructor. - - Initialises set of member parameters. - ------------------------------------------------------------------------------ -*/ -CDCDigitalZoom::CDCDigitalZoom() -{ - - iParams.sizeX = 176; //640; // Size of VGA image for X - iParams.sizeY = 144; //480; // Size of VGA image for Y - iParams.scaleX = 1.0f; // No Scaling for X - iParams.scaleY = 1.0f; // No scaling for Y - iParams.allShiftX = 0; // No pan - iParams.allShiftY = 0; // - iParams.newShiftX = 0; // No pan - iParams.newShiftY = 0; // - -} - - - -/* ------------------------------------------------------------------------------ - - CDCDigitalZoom::ConstructL - - Second phase constructor. - - Construct the object. (not used, may leave) - ------------------------------------------------------------------------------ -*/ - -void CDCDigitalZoom::ConstructL() -{ - // This function is intentionally left blank. -} - - - -/* ------------------------------------------------------------------------------ - - CDCDigitalZoom::NewLC - - Allocate the memory and construct the object. - Pushs pointer to a new instance to Cleanupstack. - - Return value: - CDCDigitalZoom* self Pointer to a new instance - ------------------------------------------------------------------------------ -*/ - -CDCDigitalZoom* CDCDigitalZoom::NewLC() -{ - CDCDigitalZoom* self = new (ELeave) CDCDigitalZoom(); - CleanupStack::PushL(self); - self->ConstructL(); - - return self; -} - - - -/* ------------------------------------------------------------------------------ - - CDCDigitalZoom::NewL - - Allocate the memory and construct the object. - - Return value: - CDCDigitalZoom* self Pointer to a new instance - ------------------------------------------------------------------------------ -*/ - -CDCDigitalZoom* CDCDigitalZoom::NewL() -{ - CDCDigitalZoom* self = CDCDigitalZoom::NewLC(); - CleanupStack::Pop(); - - return self; -} - - - -/* ------------------------------------------------------------------------------ - - CDCDigitalZoom::~CDCDigitalZoom - - C++ destructor. - ------------------------------------------------------------------------------ -*/ - -CDCDigitalZoom::~CDCDigitalZoom() -{ - // This function is intentionally left blank. -} - - - -/* ------------------------------------------------------------------------------ - - CDCDigitalZoom::ProcessL - - Main function of digital zoom. (public) - Calls processing function (zoomImage). - - NOTE: - ImageZoomParams iParams have to be set before calling - this function, so that the wanted processing is done. - - Parameters in: - CFbsBitmap* aOriPtr Pointer to source image bitmap - - Parameters out: - CFbsBitmap* aOutPtr Pointer to destination image bitmap - - Return value: None - ------------------------------------------------------------------------------ -*/ - -void CDCDigitalZoom::ProcessL(const CFbsBitmap *aOriPtr, CFbsBitmap *aOutPtr) -{ - //EColor16M image is needed - if(aOutPtr->DisplayMode() != EColor16M) - { - return; - } - - if(aOriPtr->DisplayMode() != EColor16M) - { - return; - } - - // Find size of original image - TInt oriSizeX = aOriPtr->SizeInPixels().iWidth; - TInt oriSizeY = aOriPtr->SizeInPixels().iHeight; - - //Do scaling - DecimateL(aOriPtr, aOutPtr, - iParams.sizeX, iParams.sizeY, - oriSizeX, oriSizeY, - iParams.scaleX, iParams.scaleY, - iParams.allShiftX, iParams.allShiftY, - iParams.newShiftX, iParams.newShiftY); -} - - - - -/* ------------------------------------------------------------------------------ - - DecimateL - - IMAAMI scaling core function - ------------------------------------------------------------------------------ -*/ -void CDCDigitalZoom::DecimateL(const CFbsBitmap* aOriPtr, CFbsBitmap* aOutPtr, - TInt aOutSizeX, TInt aOutSizeY, - TInt aOriSizeX, TInt aOriSizeY, - TReal aZoomX, TReal aZoomY, - TInt allShiftX, TInt allShiftY, - TInt newShiftX, TInt newShiftY) -{ - TInt32 - divider, - xPos, yPos, tmpline, - xAver, yAver, - xStep, yStep, - tmpEnd, tmpSta, - sumB, sumG, sumR, - tmpB, tmpG, tmpR; - - TInt32 - x, y, - i, j, - LastLine, - xInt, yInt, - xStaInt, yStaInt, - xEndInt, yEndInt, - xFirstInt, yFirstInt; - - TUint32 - LineNum, - outFlag, - xRem, yRem, - xStaRem, yStaRem, - xEndRem, yEndRem, - xStaWei, yStaWei, - xEndWei, yEndWei, - xAllWei, yAllWei, - xMaxWei, yMaxWei, - xLoopSta, yLoopSta, - xLoopEnd, yLoopEnd, - xFirstRem, yFirstRem; - - TUint32 - PIX_BITS = 13, // 13 - PIXEL = (TUint32)(1 << PIX_BITS), - HALF_PIX = (TUint32)(1 << (PIX_BITS - 1)), - REMAINDER = (TUint32)(PIXEL - 1), - WEI_BITS = 4, // 4 - HALF_WEI = (TUint32)(1 << (WEI_BITS - 1)), - DIF1_BITS = (TUint32)(PIX_BITS - WEI_BITS), - HALF_DIF1 = (TUint32)(1 << (DIF1_BITS - 1)), - REM_HDIF1 = (TUint32)(HALF_DIF1 - 1), - RED_BITS = 4, // 4 - HALF_RED = (TUint32)(1 << (RED_BITS - 1)); - - - if(aZoomX < 0.20 || aZoomY < 0.20) - { - RED_BITS = 5; - HALF_RED = (TUint32)(1 << (RED_BITS - 1)); - } - - // Allocate local temporal input0 line buffer and push its pointer to CleanupStack - HBufC8* oriLine0 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine0); - - // Allocate local temporal input1 line buffer and push its pointer to CleanupStack - HBufC8* oriLine1 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine1); - - // Allocate local temporal input2 line buffer and push its pointer to CleanupStack - HBufC8* oriLine2 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine2); - - // Allocate local temporal input3 line buffer and push its pointer to CleanupStack - HBufC8* oriLine3 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine3); - - // Allocate local temporal input4 line buffer and push its pointer to CleanupStack - HBufC8* oriLine4 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine4); - - // Allocate local temporal input5 line buffer and push its pointer to CleanupStack - HBufC8* oriLine5 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine5); - - // Allocate local temporal input6 line buffer and push its pointer to CleanupStack - HBufC8* oriLine6 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine6); - - // Allocate local temporal input7 line buffer and push its pointer to CleanupStack - HBufC8* oriLine7 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine7); - - // Allocate local temporal input8 line buffer and push its pointer to CleanupStack - HBufC8* oriLine8 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine8); - - // Allocate local temporal input9 line buffer and push its pointer to CleanupStack - HBufC8* oriLine9 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine9); - - // Allocate local temporal input10 line buffer and push its pointer to CleanupStack - HBufC8* oriLine10 = HBufC8::NewMaxL(3 * aOriSizeX); // BGRBGR... - CleanupStack::PushL(oriLine10); - - // Set pointers of input lines - TUint8* line0Ptr = (TUint8*)oriLine0->Des().Ptr(); - TUint8* line1Ptr = (TUint8*)oriLine1->Des().Ptr(); - TUint8* line2Ptr = (TUint8*)oriLine2->Des().Ptr(); - TUint8* line3Ptr = (TUint8*)oriLine3->Des().Ptr(); - TUint8* line4Ptr = (TUint8*)oriLine4->Des().Ptr(); - TUint8* line5Ptr = (TUint8*)oriLine5->Des().Ptr(); - TUint8* line6Ptr = (TUint8*)oriLine6->Des().Ptr(); - TUint8* line7Ptr = (TUint8*)oriLine7->Des().Ptr(); - TUint8* line8Ptr = (TUint8*)oriLine8->Des().Ptr(); - TUint8* line9Ptr = (TUint8*)oriLine9->Des().Ptr(); - TUint8* line10Ptr = (TUint8*)oriLine10->Des().Ptr(); - TUint8* linePtrs[11] = {line0Ptr, line1Ptr, line2Ptr, line3Ptr, line4Ptr, - line5Ptr, line6Ptr, line7Ptr, line8Ptr, line9Ptr, line10Ptr}; - - TUint8* tmpPtr; - TUint8* tempPtr; - - // Set TPtr8s of input lines - TPtr8 Ptr0(line0Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptr1(line1Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptr2(line2Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptr3(line3Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptr4(line4Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptr5(line5Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptr6(line6Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptr7(line7Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptr8(line8Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptr9(line9Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptr10(line10Ptr, 3 * aOriSizeX, 3 * aOriSizeX); - TPtr8 Ptrs[11] = {Ptr0, Ptr1, Ptr2, Ptr3, Ptr4, Ptr5, Ptr6, Ptr7, Ptr8, Ptr9, Ptr10}; - - // Set indicator for order of input lines - TInt lines[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - - // Allocate local temporal output line buffer and push its pointer to CleanupStack - HBufC8* scanLine = HBufC8::NewMaxL(3 * aOutSizeX); - CleanupStack::PushL(scanLine); - - // Set pointer of output line - TUint8* DataPtr = (TUint8*)scanLine->Des().Ptr(); - - // Set TPtr8 of output line - TPtr8 linePtr(DataPtr, 3 * aOutSizeX, 3 * aOutSizeX); - - - // Calculate step between output pixels in original image - xStep = (TInt)(PIXEL / aZoomX + 0.5); - yStep = (TInt)(PIXEL / aZoomY + 0.5); - - // Calculate First output pixel position in original image - xPos = ((aOriSizeX - 1) << (PIX_BITS - 1)) - (((aOutSizeX - 1 - (allShiftX << 1)) * xStep) >> 1); - yPos = ((aOriSizeY - 1) << (PIX_BITS - 1)) - (((aOutSizeY - 1 - (allShiftY << 1)) * yStep) >> 1); - - xFirstInt = (TInt32)(xPos >> PIX_BITS); - if(xPos < 0) xFirstRem = (TUint32)((xPos + ((-xFirstInt) << PIX_BITS)) & REMAINDER); - else xFirstRem = (TUint32)(xPos & REMAINDER); - - yFirstInt = (TInt32)(yPos >> PIX_BITS); - if(yPos < 0) yFirstRem = (TUint32)((yPos + ((-yFirstInt) << PIX_BITS)) & REMAINDER); - else yFirstRem = (TUint32)(yPos & REMAINDER); - - // Calculate averaging area around the original pixel position - xAver = (TInt)(xStep >> 1); - yAver = (TInt)(yStep >> 1); - - // For bilinear interpolation at least 1 pixel have to be used - if(aZoomX > 1 && xAver < (TInt32)(HALF_PIX)) xAver = HALF_PIX; - if(aZoomY > 1 && yAver < (TInt32)(HALF_PIX)) yAver = HALF_PIX; - - // Calculate maximum weight sum - yMaxWei = (TUint32)(((yAver << 1) + HALF_DIF1) >> DIF1_BITS); - xMaxWei = (TUint32)(((xAver << 1) + HALF_DIF1) >> DIF1_BITS); - - // Calculate filter divider for filter window - divider = (TInt)((xMaxWei * yMaxWei + HALF_RED) >> RED_BITS); - - while(divider <= 256 && WEI_BITS < PIX_BITS) - { - WEI_BITS++; - HALF_WEI = (TUint32)(1 << (WEI_BITS - 1)); - DIF1_BITS = (TUint32)(PIX_BITS - WEI_BITS); - HALF_DIF1 = (TUint32)(1 << (DIF1_BITS - 1)); - REM_HDIF1 = (TUint32)(HALF_DIF1 - 1); - - // Calculate maximum weight sum - yMaxWei = (TUint32)(((yAver << 1) + HALF_DIF1) >> DIF1_BITS); - xMaxWei = (TUint32)(((xAver << 1) + HALF_DIF1) >> DIF1_BITS); - - // Calculate filter divider for filter window - divider = (TInt)((xMaxWei * yMaxWei + HALF_RED) >> RED_BITS); - } - - if(divider > 1024) - { - WEI_BITS--; - HALF_WEI = (TUint32)(1 << (WEI_BITS - 1)); - DIF1_BITS = (TUint32)(PIX_BITS - WEI_BITS); - HALF_DIF1 = (TUint32)(1 << (DIF1_BITS - 1)); - REM_HDIF1 = (TUint32)(HALF_DIF1 - 1); - - // Calculate maximum weight sum - yMaxWei = (TUint32)(((yAver << 1) + HALF_DIF1) >> DIF1_BITS); - xMaxWei = (TUint32)(((xAver << 1) + HALF_DIF1) >> DIF1_BITS); - - // Calculate filter divider for filter window - divider = (TInt)((xMaxWei * yMaxWei + HALF_RED) >> RED_BITS); - } - - while(divider <= 512 && RED_BITS > 0) - { - RED_BITS--; - HALF_RED = (TUint32)(1 << (RED_BITS - 1)); - - divider = (TInt)((xMaxWei * yMaxWei + HALF_RED) >> RED_BITS); - } - - if(divider > 1024) - { - RED_BITS++; - HALF_RED = (TUint32)(1 << (RED_BITS - 1)); - } - - // Initialise y loop limiters - yLoopSta = 0; - yLoopEnd = (TUint32)(aOutSizeY); - - // Initialise x loop limiters - xLoopSta = 0; - xLoopEnd = (TUint32)(aOutSizeX); - - // Calculate only the panned image - if(newShiftY > 0) - { - // Update y loop start - yLoopSta = (TUint32)(aOutSizeY - newShiftY); - - // Initialise y position - yInt = yFirstInt; - yRem = yFirstRem; - - // Copy available image and change y position - for(y = 0; y < (TInt32)yLoopSta; y++) - { - // Read output line from source image - aOriPtr->GetScanLine(Ptrs[lines[0]], TPoint(0, y+newShiftY), aOriSizeX, aOriPtr->DisplayMode()); - - //Set the line to destination image - aOutPtr->SetScanLine(linePtr, y); - - // Update y position - tmpEnd = (TInt)(yRem + yStep); - yInt = (TInt32)(yInt + (tmpEnd >> PIX_BITS)); - yRem = (TUint32)(tmpEnd & REMAINDER); - } - - // Update y position of first pixel - yFirstInt = yInt; - yFirstRem = yRem; - } - else if(newShiftY < 0) - { - // Update y loop end - yLoopEnd = (TUint32)(-newShiftY); - - // Copy available image - for(y = (TInt32)(aOutSizeY - 1); y >= (TInt32)yLoopEnd; y--) - { - // Read output line from source image - aOriPtr->GetScanLine(Ptrs[lines[0]], TPoint(0, y+newShiftY), aOriSizeX, aOriPtr->DisplayMode()); - - //Set the line to destination image - aOutPtr->SetScanLine(linePtr, y); - } - } - - // Calculate only the panned image - if(newShiftX > 0) - { - // Update x loop start - xLoopSta = (TUint32)(aOutSizeX - newShiftX); - - // Initialise x position - xInt = xFirstInt; - xRem = xFirstRem; - - // Change x position - for(x = 0; x < (TInt32)xLoopSta; x++) - { - // Update x position - tmpSta = (TInt)(xRem + xStep); - xInt = (TInt32)(xInt + (tmpSta >> PIX_BITS)); - xRem = (TUint32)(tmpSta & REMAINDER); - } - - // Update x position of first pixel - xFirstInt = xInt; - xFirstRem = xRem; - } - else if(newShiftX < 0) - { - // Update loop end - xLoopEnd = (TUint32)(-newShiftX); - } - - // Initialise y position - yInt = yFirstInt; - yRem = yFirstRem; - - tmpEnd = (TInt)(yRem + yAver + HALF_PIX + HALF_WEI); - yEndInt = (TInt32)((tmpEnd >> PIX_BITS) + yInt); - yEndRem = (TUint32)(tmpEnd & REMAINDER); - - //Read 11 lines from the source image - if (yEndInt >= 10) - { - aOriPtr->GetScanLine(Ptrs[lines[0]], TPoint(0, yEndInt-10), aOriSizeX, aOriPtr->DisplayMode()); - aOriPtr->GetScanLine(Ptrs[lines[1]], TPoint(0, yEndInt-9), aOriSizeX, aOriPtr->DisplayMode()); - aOriPtr->GetScanLine(Ptrs[lines[2]], TPoint(0, yEndInt-8), aOriSizeX, aOriPtr->DisplayMode()); - aOriPtr->GetScanLine(Ptrs[lines[3]], TPoint(0, yEndInt-7), aOriSizeX, aOriPtr->DisplayMode()); - aOriPtr->GetScanLine(Ptrs[lines[4]], TPoint(0, yEndInt-6), aOriSizeX, aOriPtr->DisplayMode()); - aOriPtr->GetScanLine(Ptrs[lines[5]], TPoint(0, yEndInt-5), aOriSizeX, aOriPtr->DisplayMode()); - aOriPtr->GetScanLine(Ptrs[lines[6]], TPoint(0, yEndInt-4), aOriSizeX, aOriPtr->DisplayMode()); - aOriPtr->GetScanLine(Ptrs[lines[7]], TPoint(0, yEndInt-3), aOriSizeX, aOriPtr->DisplayMode()); - aOriPtr->GetScanLine(Ptrs[lines[8]], TPoint(0, yEndInt-2), aOriSizeX, aOriPtr->DisplayMode()); - aOriPtr->GetScanLine(Ptrs[lines[9]], TPoint(0, yEndInt-1), aOriSizeX, aOriPtr->DisplayMode()); - aOriPtr->GetScanLine(Ptrs[lines[10]], TPoint(0, yEndInt ), aOriSizeX, aOriPtr->DisplayMode()); - } - else - { - if(yEndInt >= 0) - aOriPtr->GetScanLine(Ptrs[lines[10]], TPoint(0, yEndInt ), aOriSizeX, aOriPtr->DisplayMode()); - if(yEndInt >= 1) - aOriPtr->GetScanLine(Ptrs[lines[9]], TPoint(0, yEndInt-1), aOriSizeX, aOriPtr->DisplayMode()); - if(yEndInt >= 2) - aOriPtr->GetScanLine(Ptrs[lines[8]], TPoint(0, yEndInt-2), aOriSizeX, aOriPtr->DisplayMode()); - if(yEndInt >= 3) - aOriPtr->GetScanLine(Ptrs[lines[7]], TPoint(0, yEndInt-3), aOriSizeX, aOriPtr->DisplayMode()); - if(yEndInt >= 4) - aOriPtr->GetScanLine(Ptrs[lines[6]], TPoint(0, yEndInt-4), aOriSizeX, aOriPtr->DisplayMode()); - if(yEndInt >= 5) - aOriPtr->GetScanLine(Ptrs[lines[5]], TPoint(0, yEndInt-5), aOriSizeX, aOriPtr->DisplayMode()); - if(yEndInt >= 6) - aOriPtr->GetScanLine(Ptrs[lines[4]], TPoint(0, yEndInt-6), aOriSizeX, aOriPtr->DisplayMode()); - if(yEndInt >= 7) - aOriPtr->GetScanLine(Ptrs[lines[3]], TPoint(0, yEndInt-7), aOriSizeX, aOriPtr->DisplayMode()); - if(yEndInt >= 8) - aOriPtr->GetScanLine(Ptrs[lines[2]], TPoint(0, yEndInt-8), aOriSizeX, aOriPtr->DisplayMode()); - if(yEndInt >= 9) - aOriPtr->GetScanLine(Ptrs[lines[1]], TPoint(0, yEndInt-9), aOriSizeX, aOriPtr->DisplayMode()); - if(yEndInt >= 10) - aOriPtr->GetScanLine(Ptrs[lines[0]], TPoint(0, yEndInt-10), aOriSizeX, aOriPtr->DisplayMode()); - } - LastLine = (TInt32)(yEndInt); - - // Loop y for result image - for(y = (TInt32)yLoopSta; y < (TInt32)yLoopEnd; y++) - { - // Calculate used y pixels - tmpSta = (TInt)(yRem - yAver + HALF_PIX + HALF_WEI); - yStaInt = (TInt32)((tmpSta >> PIX_BITS) + yInt); - yStaRem = (TUint32)(tmpSta & REMAINDER); - - tmpEnd = (TInt)(yRem + yAver + HALF_PIX + HALF_WEI); - yEndInt = (TInt32)((tmpEnd >> PIX_BITS) + yInt); - yEndRem = (TUint32)(tmpEnd & REMAINDER); - - //Read a new line from the source image if needed - while (yEndInt > LastLine && LastLine < aOriSizeY-1) - { - LastLine++; - tmpline = lines[0]; - lines[0] = lines[1]; - lines[1] = lines[2]; - lines[2] = lines[3]; - lines[3] = lines[4]; - lines[4] = lines[5]; - lines[5] = lines[6]; - lines[6] = lines[7]; - lines[7] = lines[8]; - lines[8] = lines[9]; - lines[9] = lines[10]; - lines[10] = tmpline; - - if(LastLine >= 0) - aOriPtr->GetScanLine(Ptrs[lines[10]], TPoint(0, LastLine), aOriSizeX, aOriPtr->DisplayMode()); - } - - //Set pixel pointer to beginning of destination line - DataPtr = (TUint8*)scanLine->Des().Ptr(); - - // Calculate column weights and weight sum - yStaWei = (TUint32)((PIXEL - yStaRem - 1) >> DIF1_BITS); - yEndWei = (TUint32)((yEndRem) >> DIF1_BITS); - yAllWei = (TUint32)(yStaWei + ((yEndInt - yStaInt - 1) << WEI_BITS) + yEndWei); - - // Check that the weight sum is not too big - if(yAllWei > yMaxWei) - { - if(((yEndRem) & REM_HDIF1) > ((PIXEL - yStaRem) & REM_HDIF1)) - { - yStaWei -= 1; - } - else - { - yEndWei -= 1; - } - yAllWei -= 1; - } - - // Initialise x position - xInt = xFirstInt; - xRem = xFirstRem; - - // Calculate only the panned image - if(newShiftX > 0) - { - tmpPtr = DataPtr; - tempPtr = tmpPtr + newShiftX * 3; - - // Copy available image to the beginning of line - for(x = 0; x < (TInt32)xLoopSta; x++) - { - *tmpPtr++ = *tempPtr++; - *tmpPtr++ = *tempPtr++; - *tmpPtr++ = *tempPtr++; - } - } - else if(newShiftX < 0) - { - tmpPtr = DataPtr + 3 * aOutSizeX - 1; - tempPtr = tmpPtr + newShiftX * 3; - - // Copy available image to the end of line - for(x = (TInt32)(aOutSizeX - 1); x >= (TInt32)xLoopEnd; x--) - { - *tmpPtr-- = *tempPtr--; - *tmpPtr-- = *tempPtr--; - *tmpPtr-- = *tempPtr--; - } - } - - LineNum = (TUint32)((yStaInt - LastLine + 10) % 11); - - // Loop x for result image - for(x = (TInt32)xLoopSta; x < (TInt32)xLoopEnd; x++) - { - // Calculate used x pixels - tmpSta = (TInt)(xRem - xAver + HALF_PIX + HALF_WEI); - xStaInt = (TInt32)((tmpSta >> PIX_BITS) + xInt); - xStaRem = (TUint32)((tmpSta & REMAINDER)); - - tmpEnd = (TInt)(xRem + xAver + HALF_PIX + HALF_WEI); - xEndInt = (TInt32)((tmpEnd >> PIX_BITS) + xInt); - xEndRem = (TUint32)(tmpEnd & REMAINDER); - - // Calculate line weights and weight sum - xStaWei = (TUint32)((PIXEL - xStaRem - 1) >> DIF1_BITS); - xEndWei = (TUint32)((xEndRem) >> DIF1_BITS); - xAllWei = (TUint32)(xStaWei + ((xEndInt - xStaInt - 1) << WEI_BITS) + xEndWei); - - // Check that the weight sum is not too big - if(xAllWei > xMaxWei) - { - if(((xEndRem) & REM_HDIF1) > ((PIXEL - xStaRem) & REM_HDIF1)) - { - xStaWei -= 1; - } - else - { - xEndWei -= 1; - } - xAllWei -= 1; - } - - // Calculate filter divider for filter window - divider = (TInt)((xAllWei * yAllWei + HALF_RED) >> RED_BITS); - - // Calculate pixel values - outFlag = 0; - - // Initialise block result - sumB = 0; - sumG = 0; - sumR = 0; - - LineNum = (TUint32)((yStaInt - LastLine + 10) % 11); - - // Accumulate first line - if(yStaWei != 0) - { - // Line number - if(yStaInt < 0) outFlag = 1; - else if(yStaInt >= aOriSizeY) outFlag = 1; - else - { - // Initialise line result - tmpB = 0; - tmpG = 0; - tmpR = 0; - - // First pixel in first line - if(xStaWei != 0) - { - // Column number - if(xStaInt < 0) outFlag = 1; - else if(xStaInt >= aOriSizeX) outFlag = 1; - else - { - // Pixel weighting to line result - tmpB = (TInt)(tmpB + (*(linePtrs[lines[LineNum]] + 3 * xStaInt)) * xStaWei); - tmpG = (TInt)(tmpG + (*(linePtrs[lines[LineNum]] + 3 * xStaInt + 1)) * xStaWei); - tmpR = (TInt)(tmpR + (*(linePtrs[lines[LineNum]] + 3 * xStaInt + 2)) * xStaWei); - } - } - - // Middle pixels in first line - for(i = (TInt32)(xStaInt + 1); i < xEndInt; i++) - { - // Column number - if(i < 0) outFlag = 1; - else if(i >= aOriSizeX) outFlag = 1; - else - { - // Pixel weighting to line result - tmpB = (TInt)(tmpB + ((*(linePtrs[lines[LineNum]] + 3 * i )) << WEI_BITS)); - tmpG = (TInt)(tmpG + ((*(linePtrs[lines[LineNum]] + 3 * i + 1)) << WEI_BITS)); - tmpR = (TInt)(tmpR + ((*(linePtrs[lines[LineNum]] + 3 * i + 2)) << WEI_BITS)); - } - } - - // Last pixel in first line - if(xEndWei != 0) - { - // Column number - if(xEndInt < 0) outFlag = 1; - else if(xEndInt >= aOriSizeX) outFlag = 1; - else - { - // Pixel weighting to line result - tmpB = (TInt)(tmpB + (*(linePtrs[lines[LineNum]] + 3 * xEndInt )) * xEndWei); - tmpG = (TInt)(tmpG + (*(linePtrs[lines[LineNum]] + 3 * xEndInt + 1)) * xEndWei); - tmpR = (TInt)(tmpR + (*(linePtrs[lines[LineNum]] + 3 * xEndInt + 2)) * xEndWei); - } - } - - // Pixel weighting to block result - sumB = (TInt)(sumB + ((yStaWei * tmpB + HALF_RED) >> RED_BITS)); - sumG = (TInt)(sumG + ((yStaWei * tmpG + HALF_RED) >> RED_BITS)); - sumR = (TInt)(sumR + ((yStaWei * tmpR + HALF_RED) >> RED_BITS)); - } - } - LineNum++; - - // Accumulate middle lines - for(j = (TInt32)(yStaInt + 1); j < yEndInt; j++) - { - // Line number - if(j < 0) outFlag = 1; - else if(j >= aOriSizeY) outFlag = 1; - else - { - // Initialise line result - tmpB = 0; - tmpG = 0; - tmpR = 0; - - // First pixel in middle lines - if(xStaWei != 0) - { - // Column number - if(xStaInt < 0) outFlag = 1; - else if(xStaInt >= aOriSizeX) outFlag = 1; - else - { - // Pixel weighting to line result - tmpB = (TInt)(tmpB + (*(linePtrs[lines[LineNum]] + 3 * xStaInt )) * xStaWei); - tmpG = (TInt)(tmpG + (*(linePtrs[lines[LineNum]] + 3 * xStaInt + 1)) * xStaWei); - tmpR = (TInt)(tmpR + (*(linePtrs[lines[LineNum]] + 3 * xStaInt + 2)) * xStaWei); - } - } - - // Middle pixels in middle lines - for(i = (TInt32)(xStaInt + 1); i < xEndInt; i++) - { - // Column number - if(i < 0) outFlag = 1; - else if(i >= aOriSizeX) outFlag = 1; - else - { - // Pixel weighting to line result - tmpB = (TInt)(tmpB + ((*(linePtrs[lines[LineNum]] + 3 * i )) << WEI_BITS)); - tmpG = (TInt)(tmpG + ((*(linePtrs[lines[LineNum]] + 3 * i + 1)) << WEI_BITS)); - tmpR = (TInt)(tmpR + ((*(linePtrs[lines[LineNum]] + 3 * i + 2)) << WEI_BITS)); - } - } - - // Last pixel in middle lines - if(xEndWei != 0) - { - // Column number - if(xEndInt < 0) outFlag = 1; - else if(xEndInt >= aOriSizeX) outFlag = 1; - else - { - // Pixel weighting to line result - tmpB = (TInt)(tmpB + (*(linePtrs[lines[LineNum]] + 3 * xEndInt )) * xEndWei); - tmpG = (TInt)(tmpG + (*(linePtrs[lines[LineNum]] + 3 * xEndInt + 1)) * xEndWei); - tmpR = (TInt)(tmpR + (*(linePtrs[lines[LineNum]] + 3 * xEndInt + 2)) * xEndWei); - } - } - - // Pixel weighting to block result - sumB = (TInt)(sumB + (((tmpB << WEI_BITS) + HALF_RED) >> RED_BITS)); - sumG = (TInt)(sumG + (((tmpG << WEI_BITS) + HALF_RED) >> RED_BITS)); - sumR = (TInt)(sumR + (((tmpR << WEI_BITS) + HALF_RED) >> RED_BITS)); - } - LineNum++; - } - - - // Accumulate last line - if(yEndWei != 0) - { - // Line number - if(yEndInt < 0) outFlag = 1; - else if(yEndInt >= aOriSizeY) outFlag = 1; - else - { - // Initialise line result - tmpB = 0; - tmpG = 0; - tmpR = 0; - - // First pixel in last line - if(xStaWei != 0) - { - // Column number - if(xStaInt < 0) outFlag = 1; - else if(xStaInt >= aOriSizeX) outFlag = 1; - else - { - tmpB = (TInt)(tmpB + (*(linePtrs[lines[LineNum]] + 3 * xStaInt )) * xStaWei); - tmpG = (TInt)(tmpG + (*(linePtrs[lines[LineNum]] + 3 * xStaInt + 1)) * xStaWei); - tmpR = (TInt)(tmpR + (*(linePtrs[lines[LineNum]] + 3 * xStaInt + 2)) * xStaWei); - } - } - - // Middle pixels in last line - for(i = (TInt32)(xStaInt + 1); i < xEndInt; i++) - { - // Column number - if(i < 0) outFlag = 1; - else if(i >= aOriSizeX) outFlag = 1; - else - { - tmpB = (TInt)(tmpB + ((*(linePtrs[lines[LineNum]] + 3 * i )) << WEI_BITS)); - tmpG = (TInt)(tmpG + ((*(linePtrs[lines[LineNum]] + 3 * i + 1)) << WEI_BITS)); - tmpR = (TInt)(tmpR + ((*(linePtrs[lines[LineNum]] + 3 * i + 2)) << WEI_BITS)); - } - } - - // Last pixel in last line - if(xEndWei != 0) - { - // Column number - if(xEndInt < 0) outFlag = 1; - else if(xEndInt >= aOriSizeX) outFlag = 1; - else - { - tmpB = (TInt)(tmpB + (*(linePtrs[lines[LineNum]] + 3 * xEndInt )) * xEndWei); - tmpG = (TInt)(tmpG + (*(linePtrs[lines[LineNum]] + 3 * xEndInt + 1)) * xEndWei); - tmpR = (TInt)(tmpR + (*(linePtrs[lines[LineNum]] + 3 * xEndInt + 2)) * xEndWei); - } - } - - // Pixel weighting to block result - sumB = (TInt)(sumB + ((yEndWei * tmpB + HALF_RED) >> RED_BITS)); - sumG = (TInt)(sumG + ((yEndWei * tmpG + HALF_RED) >> RED_BITS)); - sumR = (TInt)(sumR + ((yEndWei * tmpR + HALF_RED) >> RED_BITS)); - } - } - LineNum++; - - - // Pixels outside the original image are needed - if(outFlag > 0 || divider == 0) - { - // Save output values - *(DataPtr + x * 3 ) = 255; - *(DataPtr + x * 3 + 1) = 255; - *(DataPtr + x * 3 + 2) = 255; - } - - // Pixels are inside the original image - else - { - if(divider == 1) - { - tmpB = sumB; - tmpG = sumG; - tmpR = sumR; - } - else if(divider == 2) - { - tmpB = (TInt)((sumB + 1) >> 1); - tmpG = (TInt)((sumG + 1) >> 1); - tmpR = (TInt)((sumR + 1) >> 1); - } - else if(divider == 4) - { - tmpB = (TInt)((sumB + 2) >> 2); - tmpG = (TInt)((sumG + 2) >> 2); - tmpR = (TInt)((sumR + 2) >> 2); - } - else if(divider == 8) - { - tmpB = (TInt)((sumB + 4) >> 3); - tmpG = (TInt)((sumG + 4) >> 3); - tmpR = (TInt)((sumR + 4) >> 3); - } - else if(divider == 16) - { - tmpB = (TInt)((sumB + 8) >> 4); - tmpG = (TInt)((sumG + 8) >> 4); - tmpR = (TInt)((sumR + 8) >> 4); - } - else if(divider == 32) - { - tmpB = (TInt)((sumB + 16) >> 5); - tmpG = (TInt)((sumG + 16) >> 5); - tmpR = (TInt)((sumR + 16) >> 5); - } - else if(divider == 64) - { - tmpB = (TInt)((sumB + 32) >> 6); - tmpG = (TInt)((sumG + 32) >> 6); - tmpR = (TInt)((sumR + 32) >> 6); - } - else if(divider == 128) - { - tmpB = (TInt)((sumB + 64) >> 7); - tmpG = (TInt)((sumG + 64) >> 7); - tmpR = (TInt)((sumR + 64) >> 7); - } - else if(divider == 256) - { - tmpB = (TInt)((sumB + 128) >> 8); - tmpG = (TInt)((sumG + 128) >> 8); - tmpR = (TInt)((sumR + 128) >> 8); - } - else if(divider == 512) - { - tmpB = (TInt)((sumB + 256) >> 9); - tmpG = (TInt)((sumG + 256) >> 9); - tmpR = (TInt)((sumR + 256) >> 9); - } - else if(divider == 1024) - { - tmpB = (TInt)((sumB + 512) >> 10); - tmpG = (TInt)((sumG + 512) >> 10); - tmpR = (TInt)((sumR + 512) >> 10); - } - else - { - tmpB = (TInt)(((sumB * KDivTable[divider - 2]) + 32768) >> 16); - tmpG = (TInt)(((sumG * KDivTable[divider - 2]) + 32768) >> 16); - tmpR = (TInt)(((sumR * KDivTable[divider - 2]) + 32768) >> 16); - } - - // Save output values - if(tmpB > 255) - *(DataPtr + x * 3 ) = 255; - else - *(DataPtr + x * 3 ) = (TUint8)(tmpB); - if(tmpG > 255) - *(DataPtr + x * 3 + 1) = 255; - else - *(DataPtr + x * 3 + 1) = (TUint8)(tmpG); - if(tmpR > 255) - *(DataPtr + x * 3 + 2) = 255; - else - *(DataPtr + x * 3 + 2) = (TUint8)(tmpR); - } - - // Update x position - tmpEnd = (TInt)(xRem + xStep); - xInt = (TInt32)(xInt + (tmpEnd >> PIX_BITS)); - xRem = (TUint32)(tmpEnd & REMAINDER); - } - - //Set processed line - aOutPtr->SetScanLine(linePtr, y); - - // Update y position - tmpEnd = (TInt)(yRem + yStep); - yInt = (TInt32)(yInt + (tmpEnd >> PIX_BITS)); - yRem = (TUint32)(tmpEnd & REMAINDER); - } - - // Delete local temporal line buffers (pop from CleanupStack) - CleanupStack::PopAndDestroy(12); // scanLine, oriLine0 and oriLine1 -} - - - - -/* ------------------------------------------------------------------------------ - - SetParams - - Set processing parameters - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDCDigitalZoom::SetParameters(DCDigitalZoomParams* params) -{ - iParams = *params; -} - - - -/* ------------------------------------------------------------------------------ - - GetParams - - Get current processing parameters - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDCDigitalZoom::GetParameters(DCDigitalZoomParams* params) -{ - *params = iParams; -} -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/src/DCDithering.cpp --- a/videoeditorengine/vedengine/GenManip/src/DCDithering.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,241 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//DCDithering.cpp -// -//Version 1.00 -// -//Contains: -// CDCDithering -// -//History: -// 19.08.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - -// Include Files -#include // The basic definitions -#include // For FBS bitmap -#include "DCDithering.h" // The DCDithering class - - - -// MEMBER FUNCTIONS -//============================================================================= - - - -/* ------------------------------------------------------------------------------ - - CDCDithering - - Constructor - - Default constructor - - Return Values: none - ------------------------------------------------------------------------------ -*/ -CDCDithering::CDCDithering() -{ - // This function is intentionally left blank. -} - - - - -/* ------------------------------------------------------------------------------ - - CDCDithering - - NewLC - - Factory function to instantiate the class. - This function leaves the class pointer to the cleanup stack - May leave with KErrNoMemory if no memory available - - Return Values: CDCDithering* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -CDCDithering* CDCDithering::NewLC() -{ - CDCDithering* self = new (ELeave) CDCDithering(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - - - - -/* ------------------------------------------------------------------------------ - - CDCDithering - - NewL - - Factory function to instantiate the class. - May leave with KErrNoMemory if no memory available - - Return Values: CDCDithering* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -CDCDithering* CDCDithering::NewL() -{ - CDCDithering* self = CDCDithering::NewLC(); - CleanupStack::Pop(); - return self; -} - - - -/* ------------------------------------------------------------------------------ - - CDCDithering - - ConstructL - - Second phase constructor. Does nothing at the moment - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDCDithering::ConstructL() -{ - // This function is intentionally left blank. -} - - - - -/* ------------------------------------------------------------------------------ - - CDCDithering - - Destructor - - Return Values: none - ------------------------------------------------------------------------------ -*/ -CDCDithering::~CDCDithering() -{ - // This function is intentionally left blank. -} - - - -/* ------------------------------------------------------------------------------ - - ProcessL - - Process image referenced by aImage (modify aImage). - May leave with KErrNoMemory if no memory available - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDCDithering::ProcessL(CFbsBitmap& aImage) -{ - TUint r, g, b; // Color components - TUint8* dataPtr; // Pointer to data - - //Dithering variables, init to 0 - TInt count=0; - TInt16 dither=0; - - //EColor16M image is needed - if (aImage.DisplayMode() != EColor16M || aImage.DisplayMode() != EColor16M) - return; - - // Line Buffer and pointer to the data - TUint imageWidth = aImage.SizeInPixels().iWidth; - TUint scanLineLengthInBytes = aImage.ScanLineLength(imageWidth, aImage.DisplayMode()); - - //Allocate buffer for scanline - iScanLineBuffer = HBufC8::NewMaxL(scanLineLengthInBytes); - //Pointer to scanline - TPtr8 linePtr = iScanLineBuffer->Des(); - - //Step through image lines - for (TInt lineNo=0; lineNo>13)); - g = Limit255((TInt)g - (dither>>14)); - b = Limit255((TInt)b + (dither>>13)); - - //Move to the previous pixel - dataPtr -= 3; - - /* Set the result */ - *dataPtr++ = (TUint8)b; - *dataPtr++ = (TUint8)g; - *dataPtr++ = (TUint8)r; - - //Increase bae count - count++; - } - - //Set scan line - aImage.SetScanLine(linePtr, lineNo); - } - - //Free allocated memory - delete(iScanLineBuffer); - iScanLineBuffer = 0; -} -// End of File -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/src/DCIetd.cpp --- a/videoeditorengine/vedengine/GenManip/src/DCIetd.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,519 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -//CDCIETD.cpp -//Version 2.00 -// -//Contains: -// CDCIETD -// Display specific color contrast enhancement, -// Image Enhancement for Transflective Displays version 2, -// IETD 2. -// -//History: -// 23.10.2003 version 2.00 created using existing IMAAMI IETD -//************************************************************************* - -// Include Files -#include // The basic definitions -#include // For FBS bitmap -#include "DCIetd.h" // The DCIetd class - - -// MEMBER FUNCTIONS -//============================================================================= - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - Constructor - - Default constructor, initializes member variables to initial values - - Return Values: none - ------------------------------------------------------------------------------ -*/ -CDCIetd::CDCIetd() -{ - // Set default values for parameters (from init file) - iParameters.aWhitePixels = WhitePixels; - iParameters.aBlackPixels = BlackPixels; - iParameters.aStretchLimit = StretchLimit; - iParameters.aSaturationGain = SaturationGain; - iParameters.aBitLimit = BitLimit; - iParameters.aWBC = WBC; - iParameters.aDBC = DBC; -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - NewLC - - Factory function to instantiate the class. - This function leaves the class pointer to the cleanup stack - May leave with KErrNoMemory if no memory available - - Return Values: CDCIetd* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -CDCIetd* CDCIetd::NewLC() -{ - CDCIetd* self = new (ELeave) CDCIetd(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - NewL - - Factory function to instantiate the class. - May leave with KErrNoMemory if no memory available - - Return Values: CDCIetd* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -CDCIetd* CDCIetd::NewL() -{ - CDCIetd* self = CDCIetd::NewLC(); - CleanupStack::Pop(); - return self; -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - ConstructL - - Second phase constructor. Does nothing at the moment - - Return Values: none - - ----------------------------------------------------------------------------- -*/ -void CDCIetd::ConstructL() -{ - // This function is intentionally left blank. -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - Destructor - - Return Values: none - ------------------------------------------------------------------------------ -*/ -CDCIetd::~CDCIetd() -{ - // This function is intentionally left blank. -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - Analyze - - Analyze image referenced by aBPtr - - Return Values: none - ------------------------------------------------------------------------------ -*/ -// Analyze image referenced by aBPtr -void CDCIetd::Analyze(CFbsBitmap& aBPtr) -{ - - //EColor16M image is needed - if (aBPtr.DisplayMode() != EColor16M) return; - - //Do analysis - GatherHistograms(aBPtr); - MakeMappings(); -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - ProcessL - - Process image referenced by aImage (modify aImage). - May leave with KErrNoMemory if no memory available - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDCIetd::ProcessL (CFbsBitmap& aImage) // image reference -{ - TUint r, g, b; // Color components - TUint lum; // Brightness estimate - TInt dr, dg, db; // Differences to brightness - TUint8* dataPtr; // Pointer to data - - //EColor16M image is needed - if (aImage.DisplayMode() != EColor16M) return; - - //Line Buffer and pointer to the data - TUint imageWidth = aImage.SizeInPixels().iWidth; - TUint scanLineLengthInBytes = aImage.ScanLineLength(imageWidth, aImage.DisplayMode()); - - //Allocate buffer for scanline - iScanLineBuffer = HBufC8::NewMaxL(scanLineLengthInBytes); - //Pointer to scanline - TPtr8 linePtr = iScanLineBuffer->Des(); - - //Step through image pixels and do stretching - //and saturation increase - //--------------------------------------------- - - //Read all lines - for (TInt lineNo=0; lineNo>16; //Y - //lum = (r+g+b)/3; //Simple approximation - lum=(r+(g<<1)+b)>>2; //More effective simple approximation - - //Compute componentwise differences to luminance - dr = r-lum; - dg = g-lum; - db = b-lum; - - //Increase differences => saturation increases. - //Use gain parameter for adjusting the strength of the effect. - b += iParameters.aSaturationGain*db/32; - g += iParameters.aSaturationGain*dg/32; - r += iParameters.aSaturationGain*dr/32; - - //Save data to same image & same pixels - dataPtr -= 3; - - //Limit to available dynamic range [0,255]. - *dataPtr++ = Limit255(b); - *dataPtr++ = Limit255(g); - *dataPtr++ = Limit255(r); - } - - //Save line - aImage.SetScanLine(linePtr, lineNo); - } - - //Free memory - delete(iScanLineBuffer); - iScanLineBuffer = 0; -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - GatherHistograms - - Gather histograms and make cumulative histogram. - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDCIetd::GatherHistograms (const CFbsBitmap& aImage) // Pointer to the image bitmap -{ - const TUint8* dataPtr; //Pointer to data - TInt lineNo; //Line number - TUint x; //Pixel index - TUint color; //Color index - TUint count; // Number of colors in each component - - //Compute image width & allocate scan line memory - TUint imageWidth = aImage.SizeInPixels().iWidth; - TUint histScanLineLengthInBytes = aImage.ScanLineLength(imageWidth, aImage.DisplayMode()); - iScanLineBuffer = HBufC8::NewMaxL(histScanLineLengthInBytes); - - //Pointer to line - TPtr8 linePtr = iScanLineBuffer->Des(); - - //Clear histograms - Mem::FillZ(iHistogram, sizeof(iHistogram)); - - // Read all lines and gather histograms - for (lineNo=0; lineNo0) count++; - } - - // Compute increased stretch limit if a color component has less colors than iBitLimit. - // Otherwise use predetermined stretch limit. - if (count 0 && (TUint)iHistogram[color][x] > MaxBins[color]) - --x; // Find from histogram - - MaxBins[color] = x; // Save bin index = end of stretching part of LUT - } - - //Find minimum of all colors - minBin=255; - for (color=0; color<3; color++) - { - if (minBin>MinBins[color]) minBin=MinBins[color]; - } - - //Find maximum of all colors - maxBin=0; - for (color=0; color<3; color++) - { - if (maxBin no WBC(or DBC). - for (color=0; color<3; color++) - { - if(maxBin-MaxBins[color]>iParameters.aWBC) MaxBins[color]=maxBin-iParameters.aWBC; - if((MinBins[color]-minBin) > iParameters.aDBC) MinBins[color]=minBin+iParameters.aDBC; - } - - //Step through color components - for (color=0; color<3; color++) - { - // If histogram has only one nonzero bin maxBin can be less than minBin. - // In that case change maxBin value to minBin. - if(MaxBins[color]255) - MaxBins[color]=255; - } - - // Set 0 mapping part of the LUT - for (x=0; x<=MinBins[color]; ++x) - iMap[color][x] = 0; - - // Set 255 mapping part of the LUT - for (x=MaxBins[color]; x<=255; ++x) - iMap[color][x] = 255; - - // Compute linear stretching part of the LUT - for (x=MinBins[color]+1; x -#include -#include "DCSharpening.h" - - - -/* ------------------------------------------------------------------------------ - - Constructor - - Default constructor, initializes member variables to initial values - - Return Values: none - ------------------------------------------------------------------------------ -*/ -DCSharpening::DCSharpening() -{ - // Set default values for parameters - iParameters.SHARP_OVER = SharpOver; - iParameters.SHARP_DZONE = SharpDZone; - iParameters.SHARP_GAIN = SharpGain; -} - - - -/* ------------------------------------------------------------------------------ - - NewLC - - Factory function to instantiate the class. - This function leaves the class pointer to the cleanup stack - May leave with KErrNoMemory if no memory available - - Return Values: DCSharpening* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -DCSharpening* DCSharpening::NewLC() -{ - DCSharpening* self = new (ELeave) DCSharpening(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - - - - -/* ------------------------------------------------------------------------------ - - NewL - - Factory function to instantiate the class. - May leave with KErrNoMemory if no memory available - - Return Values: DCSharpening* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -DCSharpening* DCSharpening::NewL() -{ - DCSharpening* self = DCSharpening::NewLC(); - CleanupStack::Pop(); - return self; -} - - - - -/* ------------------------------------------------------------------------------ - - ConstructL - - Second phase constructor. Does nothing at the moment - - Return Values: none - - ----------------------------------------------------------------------------- -*/ -void DCSharpening::ConstructL() -{ - // This function is intentionally left blank. -} - - - -/* ------------------------------------------------------------------------------ - - Destructor - - Deletes the scanline buffer - - Return Values: none - ------------------------------------------------------------------------------ -*/ -DCSharpening::~DCSharpening() -{ - // This function is intentionally left blank. -} - - - - -/* ------------------------------------------------------------------------------ - - ProcessL - - Process image referenced by aSrcBmpPtr (modify aSrcBmpPtr). - May leave with KErrNoMemory if no memory available - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void DCSharpening::ProcessL(CFbsBitmap* aSrcBmpPtr) -{ - - HBufC8* iSrcDataBuffer; //Local memory for source data - HBufC8* iDstDataBuffer; //Local memory for destination data - TUint8* SrcDataPtr[3]; //Pointers to source image pixels in 3 successive lines - TUint8* DstDataPtr; //Pointer to destianation pixels - TInt y,u,v, out; //Color components - TUint x; //Pixel indes - TInt LineNo; //Line index - TUint LineLength; //Image width - TUint8 TmpLineIdx; //Temporary line index used for line swapping - TInt a, b, c, d, e, f, g, h, o; - - //Get image width - LineLength=aSrcBmpPtr->SizeInPixels().iWidth; - - //Allocate local memory for 3 source lines. - //Each line contains RGB triplets in BGRBGRBGR... format - //(VUYVUYVUY... after conversion). - //Descriptor HBufC8 is used. - iSrcDataBuffer=HBufC8::NewMaxL(3*LineLength*3); - CleanupStack::PushL(iSrcDataBuffer); - - //Set line pointers to point into beginnings of lines in allocated memory. - //Lines are stored consecutively. - //SrcLinePtrs[0] points to 1st line, [1] to 2nd, etc... - //Use descriptor TPtr8 instead of c++ pointer, because - //Set- and GetScanLine functions require it. - //Set also descriptor lengths. - TPtr8 SrcLinePtrs[3]={ - TPtr8((TUint8*)iSrcDataBuffer->Des().Ptr(),LineLength*3,LineLength*3), - TPtr8((TUint8*)iSrcDataBuffer->Des().Ptr()+LineLength*3,LineLength*3,LineLength*3), - TPtr8((TUint8*)iSrcDataBuffer->Des().Ptr()+2*LineLength*3,LineLength*3,LineLength*3) - }; - - //Set source line indexes. - //Line indexes are used to select proper line pointer. - //SrcLineIndex[0] selects first line under filter window, [1] second, etc... - //Indexes are needed because lines are swapped so that only one new line is - //read from bitmap when filtering window moves down. - //TPtr8 cannot be swapped (operator = copies data). Therefore swapping is - //done through indexing. - TUint8 SrcLineIndex[3]={0,1,2}; - - //Allocate local memory for destination data. - //Descriptor HBufC8 is used. - iDstDataBuffer=HBufC8::NewMaxL(LineLength*3); - CleanupStack::PushL(iDstDataBuffer); - - //Set destination line pointer to beginning of allocated memory. - //Use descriptor TPtr8 instead of c++ pointer, because - //Set- and GetScanline require it. - //Set also descriptor length. - TPtr8 DstLinePtr((TUint8*)iDstDataBuffer->Des().Ptr(),LineLength*3,LineLength*3); - - - //Get 1st line from source image to 1st line in local memory buffer. - LineNo=0; - aSrcBmpPtr->GetScanLine(SrcLinePtrs[SrcLineIndex[0]],TPoint(0,LineNo),LineLength,aSrcBmpPtr->DisplayMode()); - - //Get 2nd line from source image to 2nd line in local memory buffer. - LineNo=1; - aSrcBmpPtr->GetScanLine(SrcLinePtrs[SrcLineIndex[1]],TPoint(0,LineNo),LineLength,aSrcBmpPtr->DisplayMode()); - - // Step through image lines, do not process 1st and last line (3x3 filter mask). - for (LineNo=1;LineNoSizeInPixels().iHeight-1;++LineNo) - { - //Get next line from image to 3rd line of the filtering window - aSrcBmpPtr->GetScanLine(SrcLinePtrs[SrcLineIndex[2]],TPoint(0,LineNo+1),LineLength,aSrcBmpPtr->DisplayMode()); - - //Set destination pixel pointer to 2nd pixel of line (1st pixel is not processed (3x3 filter)) - DstDataPtr=(TUint8*)iDstDataBuffer->Des().Ptr()+3; - - //Set source pixel pointers to beginnings of lines in filtering window - SrcDataPtr[0]=(TUint8*)iSrcDataBuffer->Des().Ptr()+SrcLineIndex[0]*LineLength*3; - SrcDataPtr[1]=(TUint8*)iSrcDataBuffer->Des().Ptr()+SrcLineIndex[1]*LineLength*3; - SrcDataPtr[2]=(TUint8*)iSrcDataBuffer->Des().Ptr()+SrcLineIndex[2]*LineLength*3; - - //Copy the first and the last pixels from the original image - *(DstDataPtr-3)=*(SrcDataPtr[1]); - *(DstDataPtr+1-3)=*(SrcDataPtr[1]+1); - *(DstDataPtr+2-3)=*(SrcDataPtr[1]+2); - *(DstDataPtr+3*(LineLength-1)-3)=*(SrcDataPtr[1]+3*(LineLength-1)); - *(DstDataPtr+1+3*(LineLength-1)-3)=*(SrcDataPtr[1]+1+3*(LineLength-1)); - *(DstDataPtr+2+3*(LineLength-1)-3)=*(SrcDataPtr[1]+2+3*(LineLength-1)); - - //Step through image pixels, do not process 1st and last pixel (3x3 filter). - for (x=LineLength-2;x!=0;--x) - { - - //Compute filter output - //Get input values from luminance component - //.....abc.... o=processed pixel - //.....doe.... - //.....fgh.... - //a,b,c,d come from saved previous values - //pppppPPPpppp - //.....Po..... - //............ - a = *(SrcDataPtr[0]+1); - b = *(SrcDataPtr[0]+1+3); - c = *(SrcDataPtr[0]+1+6); - d = *(SrcDataPtr[1]+1); - o = *(SrcDataPtr[1]+1+3); - e = *(SrcDataPtr[1]+1+6); - f = *(SrcDataPtr[2]+1); - g = *(SrcDataPtr[2]+1+3); - h = *(SrcDataPtr[2]+1+6); - - //Sharpen green component with IMAAMI sharpening algorithm - out=Peak(a, b, c, d, e, f, g, h, o); - - //Scale result and limit to available dynamic range. - y=Limit255(out); - - //Get B and R components - v=*(SrcDataPtr[1]+3); //blue - u=*(SrcDataPtr[1]+2+3); //red - - //Compute difference in green component due to sharpening and add it to B and R - v=Limit255(v+(out-o)); //blue - u=Limit255(u+(out-o)); //red - - //Set destination color components - *DstDataPtr=(TUint8)v ; //blue - *(DstDataPtr+1)=(TUint8)y; //green - *(DstDataPtr+2)=(TUint8)u; //red - - //Move to next VUY/RGB triplet in line - DstDataPtr+=3; - SrcDataPtr[0]+=3; - SrcDataPtr[1]+=3; - SrcDataPtr[2]+=3; - } - - //Set processed line - aSrcBmpPtr->SetScanLine(DstLinePtr,LineNo); - - //Swap source line indexes: 0<-1<-2<-0. - //Now [0] is indexing the previous [1] data, [1] previous [2], etc... - //When filtering window is moved down the new line is read to index [2], - //so previous [0] data (i.e. 1st line in filtering window) is discarded. - TmpLineIdx=SrcLineIndex[0]; - SrcLineIndex[0]=SrcLineIndex[1]; - SrcLineIndex[1]=SrcLineIndex[2]; - SrcLineIndex[2]=TmpLineIdx; - } - - //Free memory - CleanupStack::PopAndDestroy(2); //free iSrcDataBuffer and iDstDataBuffer -} - - - -/* ------------------------------------------------------------------------------ - - Peak - - IMAAMI sharpening function - - Return Values: TInt pixel sharpening data - ------------------------------------------------------------------------------ -*/ -TInt DCSharpening::Peak(TInt aA, TInt aB, TInt aC, TInt aD, TInt aE, TInt aF, TInt aG, TInt aH, TInt aO) -{ - TInt out, tmp; - TInt lim = 0; - TInt sign = 1; - TInt over = (iParameters.SHARP_OVER << 2); - TInt gain = (TInt)(iParameters.SHARP_GAIN * (TReal)(1 << 16) + 0.5); - TInt gradHor, gradVer; - TInt gradDip, gradDin; - TInt max, min; - TInt add, weig; - TInt tmp1, tmp2; - TInt SHARP_LIM2 = ((1 << 15) + (1 << 14)); - - - gradHor = (aO << 1) - aD - aE; - gradVer = (aO << 1) - aB - aG; - gradDip = ((((aO << 1) - aA - aH) * 3) >> 2); - gradDin = ((((aO << 1) - aC - aF) * 3) >> 2); - - findMinMax4(gradHor, gradVer, gradDip, gradDin, &min, &max); - - if(min < 0) - { - tmp = -min; - - if(tmp > max) - { - sign = -1; - lim = tmp; - tmp2 = tmp; - if(max < 0) tmp1 = -max; - else tmp1 = max; - } - else - { - lim = max; - tmp2 = max; - tmp1 = tmp; - } - } - else if(max == 0) - { - tmp2 = 1; - tmp1 = 1; - } - else - { - lim = max; - tmp2 = max; - tmp1 = min; - } - - if((tmp1 << 2) > 3 * tmp2) - { - out = aO; - } - else if((tmp1 << 2) < tmp2) - { - add = sign * ((lim * gain) >> 16); - if(lim < (TInt)(iParameters.SHARP_DZONE)) out = aO; - else out = ADJUST_RANGE_TO_10BITS(aO + add); - } - else - { - tmp = (tmp1 << 16) / tmp2; - weig = (SHARP_LIM2 - tmp); - if(lim < (TInt)(iParameters.SHARP_DZONE)) out = aO; - else - { - add = sign * ((((weig * lim) >> 16) * gain) >> 16); - out = ADJUST_RANGE_TO_10BITS(aO + add); - } - } - - if(sign < 0) - { - tmp = aO - over; - - if(out < tmp) - { - lim = -lim; - - if(gradHor == lim) - { - if(aD < aE) - { - if(aD < aO) - { - tmp = aD - over; - } - } - else - { - if(aE < aO) - { - tmp = aE - over; - } - } - } - else if(gradVer == lim) - { - if(aB < aG) - { - if(aB < aO) - { - tmp = aB - over; - } - } - else - { - if(aG < aO) - { - tmp = aG - over; - } - } - } - else if(gradDip == lim) - { - if(aA < aH) - { - if(aA < aO) - { - tmp = aA - over; - } - } - else - { - if(aH < aO) - { - tmp = aH - over; - } - } - } - else - { - if(aC < aF) - { - if(aC < aO) - { - tmp = aC - over; - } - } - else - { - if(aF < aO) - { - tmp = aF - over; - } - } - } - - if(out < tmp) - { - out = tmp; - } - } - } - else - { - tmp = aO + over; - if(out > tmp) - { - if(gradHor == lim) - { - if(aD > aE) - { - if(aD > aO) - { - tmp = aD + over; - } - } - else - { - if(aE > aO) - { - tmp = aE + over; - } - } - } - else if(gradVer == lim) - { - if(aB > aG) - { - if(aB > aO) - { - tmp = aB + over; - } - } - else - { - if(aG > aO) - { - tmp = aG + over; - } - } - } - else if(gradDip == lim) - { - if(aA > aH) - { - if(aA > aO) - { - tmp = aA + over; - } - } - else - { - if(aH > aO) - { - tmp = aH + over; - } - } - } - else - { - if(aC > aF) - { - if(aC > aO) - { - tmp = aC + over; - } - } - else - { - if(aF > aO) - { - tmp = aF + over; - } - } - } - - if(out > tmp) - { - out = tmp; - } - } - } - - return(out); -} - - - -/* ------------------------------------------------------------------------------ - - Median3 - - IMAAMI sharpening help function - - Return Values: TInt median of input values - ------------------------------------------------------------------------------ -*/ -TInt DCSharpening::Median3(TInt aA, TInt aB, TInt aC) -{ - if(aA < aB) - { - if(aA > aC) return aA; - else if(aB < aC) return aB; - else return aC; - } - else - { - if(aA < aC) return aA; - else if(aB > aC) return aB; - else return aC; - } -} - - - -/* ------------------------------------------------------------------------------ - - findMinMax4 - - IMAAMI sharpening help function - - Finds minimum and maximum of A,B,C & D. Modifies min & max arguments - - Return Values: None - ------------------------------------------------------------------------------ -*/ -void DCSharpening::findMinMax4(TInt A, TInt B, TInt C, TInt D, TInt *min, TInt *max) -{ - if(A < B) - { - if(C < D) - { - if(A < C) *min = A; - else *min = C; - if(B > D) *max = B; - else *max = D; - } - else - { - if(A < D) *min = A; - else *min = D; - if(B > C) *max = B; - else *max = C; - } - } - else - { - if(C < D) - { - if(B < C) *min = B; - else *min = C; - if(A > D) *max = A; - else *max = D; - } - else - { - if(B < D) *min = B; - else *min = D; - if(A > C) *max = A; - else *max = C; - } - } -} - - - - -/* ------------------------------------------------------------------------------ - - SetParams - - Set processing parameters - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void DCSharpening::SetParameters(DCSharpeningParams* params) -{ - iParameters = *params; -} - - - -/* ------------------------------------------------------------------------------ - - GetParams - - Get current processing parameters - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void DCSharpening::GetParameters(DCSharpeningParams* params) -{ - *params = iParameters; -} -//----IMAAMI---- - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/GenManip/src/DisplayChain.cpp --- a/videoeditorengine/vedengine/GenManip/src/DisplayChain.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,530 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -// -//Version 1.00 -// -//Contains: -// CDisplayChain -// Image processing class implementing -// display specific image processing: -// - Scaling to display size with pan support -// - IETD - display specific color contrast enhancement -// - Sharpening -// - Display feature compensation by simple color management -// - Dithering -// -//History: -// 30.10.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - -#include -#include "DisplayChain.h" - - -/* ------------------------------------------------------------------------------ - - Constructor - - Default constructor, initializes member variables to initial values - - Return Values: none - ------------------------------------------------------------------------------ -*/ -CDisplayChain::CDisplayChain() -{ - // This function is intentionally left blank. -} - - - - -/* ------------------------------------------------------------------------------ - - NewLC - - Factory function to instantiate the class. - This function leaves the class pointer to the cleanup stack - May leave with KErrNoMemory if no memory available - - Return Values: CDisplayChain* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -CDisplayChain* CDisplayChain::NewLC() -{ - CDisplayChain* self = new (ELeave) CDisplayChain(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - NewL - - Factory function to instantiate the class. - May leave with KErrNoMemory if no memory available - - Return Values: CDisplayChain* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -CDisplayChain* CDisplayChain::NewL() -{ - CDisplayChain* self = CDisplayChain::NewLC(); - CleanupStack::Pop(); - return self; -} - - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - ConstructL - - Second phase constructor. Does nothing at the moment - - Return Values: none - - ----------------------------------------------------------------------------- -*/ -void CDisplayChain::ConstructL() -{ - // Create objects for ImaamiImageChain - DigitalZoomPtr = CDCDigitalZoom::NewL(); - CleanupStack::PushL(DigitalZoomPtr); - - SharpeningPtr = DCSharpening::NewL(); - CleanupStack::PushL(SharpeningPtr); - - DitheringPtr = CDCDithering::NewL(); - CleanupStack::PushL(DitheringPtr); - - IetdPtr = CDCIetd::NewL(); - CleanupStack::PushL(IetdPtr); - - ColorManagementPtr = CDCColorManagement::NewL(); - CleanupStack::PushL(ColorManagementPtr); - - - TInt i; //Index - - //As default image is just opened to be processed - Parameters.FirstOpening = ETrue; - - //Get current processing parameters from processing objects - DigitalZoomPtr->GetParameters(&Parameters.DZParameters); - IetdPtr->GetParams(&Parameters.IETDParameters); - SharpeningPtr->GetParameters(&Parameters.SharpeningParameters); - ColorManagementPtr->GetParameters(&Parameters.ColorManagementParameters); - - //Here the parameters can be read for example from a text file or from the registers, etc. - //if (!ReadFileL()) - { - //Set default parameter values - //(Defined in DCInit.h) - //---------------------------- - - //Set each processing ON/OFF - Parameters.DigitalZoomON = DZ; - Parameters.DitheringON = DITHER; - Parameters.ColorManagementON = ETrue; //CM; - Parameters.IetdON = IETD; - Parameters.SharpeningON = SHARP; - - //DigitalZoom - DigitalZoomPtr->GetParameters(&Parameters.DZParameters); - Parameters.DZParameters.sizeX = DZsizeX; - Parameters.DZParameters.sizeY = DZsizeY; - Parameters.DZParameters.scaleX = DZscaleX; - Parameters.DZParameters.scaleY = DZscaleY; - Parameters.DZParameters.allShiftX = DZallX; - Parameters.DZParameters.allShiftY = DZallY; - Parameters.DZParameters.newShiftX = DZnewX; - Parameters.DZParameters.newShiftY = DZnewY; - - //IETD - Parameters.IETDParameters.aStretchLimit = StretchLimit; - Parameters.IETDParameters.aBlackPixels = BlackPixels; - Parameters.IETDParameters.aWhitePixels = WhitePixels; - Parameters.IETDParameters.aSaturationGain = SaturationGain; - Parameters.IETDParameters.aBitLimit = BitLimit; - Parameters.IETDParameters.aWBC = WBC; - Parameters.IETDParameters.aDBC = DBC; - - //Sharpening - Parameters.SharpeningParameters.SHARP_GAIN = SharpGain; - Parameters.SharpeningParameters.SHARP_DZONE = SharpDZone; - Parameters.SharpeningParameters.SHARP_OVER = SharpOver; - - //Color Management (fill LUTs and matrix) - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.GammaR[i] = CMGammaR[i]; - } - - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.GammaG[i] = CMGammaG[i]; - } - - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.GammaB[i] = CMGammaB[i]; - } - - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.TRCR[i] = CMTRCR[i]; - } - - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.TRCG[i] = CMTRCG[i]; - } - - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.TRCB[i] = CMTRCB[i]; - } - - for(i=0;i<9;i++) - { - Parameters.ColorManagementParameters.Matrix[i] = CMMatrix[i]; - } - - } - - //Set the default parameters - IetdPtr->SetParams(&Parameters.IETDParameters); - SharpeningPtr->SetParameters(&Parameters.SharpeningParameters); - ColorManagementPtr->SetParameters(&Parameters.ColorManagementParameters); - - CleanupStack::Pop(5); //Processing objects -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - Destructor - - Deletes the allocated memory - - Return Values: none - ------------------------------------------------------------------------------ -*/ -CDisplayChain::~CDisplayChain() -{ - //Delete processing objects - delete DigitalZoomPtr; - delete SharpeningPtr; - delete DitheringPtr; - delete IetdPtr; - delete ColorManagementPtr; -} - - - -/* ------------------------------------------------------------------------------ - - ProcessL - - Process image referenced by InBitmap (modify aTargetBitmap). - If scaling is not used aTargetBitmap is processed directly. - - May leave with KErrNoMemory if no memory available - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDisplayChain::ProcessL(const CFbsBitmap* InBitmap, CFbsBitmap* aTargetBitmap) -{ - - //CHECK! pan check needed only when DZ is ON - //Scaling - if (Parameters.DigitalZoomON) - { - // refine the zooming parameters based on input data - TSize inSize = InBitmap->SizeInPixels(); - TSize outSize = aTargetBitmap->SizeInPixels(); - Parameters.DZParameters.sizeX = outSize.iWidth; - Parameters.DZParameters.sizeY = outSize.iHeight; - Parameters.DZParameters.scaleX = (TReal)outSize.iWidth/(TReal)inSize.iWidth; - Parameters.DZParameters.scaleY = (TReal)outSize.iHeight/(TReal)inSize.iHeight; - - //If the image is tried to pan over the image borders, bound to the borders - if (Parameters.DZParameters.allShiftX < (-InBitmap->SizeInPixels().iWidth/2 * Parameters.DZParameters.scaleX + aTargetBitmap->SizeInPixels().iWidth/2)) - { - Parameters.DZParameters.allShiftX = (TInt)((-InBitmap->SizeInPixels().iWidth/2)*Parameters.DZParameters.scaleX + aTargetBitmap->SizeInPixels().iWidth/2); - } - - if (Parameters.DZParameters.allShiftX > (InBitmap->SizeInPixels().iWidth/2 * Parameters.DZParameters.scaleX - aTargetBitmap->SizeInPixels().iWidth/2)) - { - Parameters.DZParameters.allShiftX = (TInt)((InBitmap->SizeInPixels().iWidth/2)*Parameters.DZParameters.scaleX - aTargetBitmap->SizeInPixels().iWidth/2); - } - - if (Parameters.DZParameters.allShiftY < (-InBitmap->SizeInPixels().iHeight/2 * Parameters.DZParameters.scaleY + aTargetBitmap->SizeInPixels().iHeight/2)) - { - Parameters.DZParameters.allShiftY = (TInt)((-InBitmap->SizeInPixels().iHeight/2)*Parameters.DZParameters.scaleY + aTargetBitmap->SizeInPixels().iHeight/2); - } - - if (Parameters.DZParameters.allShiftY > (InBitmap->SizeInPixels().iHeight/2 * Parameters.DZParameters.scaleY - aTargetBitmap->SizeInPixels().iHeight/2)) - { - Parameters.DZParameters.allShiftY = (TInt)((InBitmap->SizeInPixels().iHeight/2)*Parameters.DZParameters.scaleY - aTargetBitmap->SizeInPixels().iHeight/2); - } - - DigitalZoomPtr->SetParameters(&Parameters.DZParameters); - DigitalZoomPtr->ProcessL(InBitmap, aTargetBitmap); - } - - //IETD - if (Parameters.IetdON) - { - if (Parameters.FirstOpening) - { - IetdPtr->Analyze(*aTargetBitmap); - Parameters.FirstOpening = EFalse; - } - //Set parameters is needed if default values can change (read from file etc.) - //IetdPtr->SetParams(&Parameters.IETDParameters); - IetdPtr->ProcessL(*aTargetBitmap); - } - - //Sharpening - if (Parameters.SharpeningON) - { - //Set parameters is needed if default values can change (read from file etc.) - //SharpeningPtr->SetParameters(&Parameters.SharpeningParameters); - SharpeningPtr->ProcessL(aTargetBitmap); - } - - //ColorManagement - if (Parameters.ColorManagementON) - { - //Set parameters is needed if default values can change (read from file etc.) - //ColorManagementPtr->SetParameters(&Parameters.ColorManagementParameters); - ColorManagementPtr->ProcessL(aTargetBitmap); - } - - //Dithering - if (Parameters.DitheringON) - { - DitheringPtr->ProcessL(*aTargetBitmap); - } -} - - - - -/* ------------------------------------------------------------------------------ - - SetParams - - Set processing parameters - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDisplayChain::SetParameters(DisplayChainParams* params) -{ - //Copy parameter struct - Parameters = *params; -} - - - -/* ------------------------------------------------------------------------------ - - GetParams - - Get current processing parameters - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDisplayChain::GetParameters(DisplayChainParams* params) -{ - //Copy parameter struct - *params = Parameters; -} - - -/* ------------------------------------------------------------------------------ - - ReadFileL - - Example function for reading processing parameters from file - - Return Values: none - ------------------------------------------------------------------------------ -TBool CDisplayChain::ReadFileL() -{ - - FILE *fp; - TInt i,j,data; - TUint8 data_uchar; - TReal data_real; - - // Open for read (will fail if file does not exist) - if((fp = fopen("e:\\DisplayChain.txt","r"))==NULL ) - { - if((fp = fopen("c:\\DisplayChain.txt","r"))==NULL ) - { - //AfxMessageBox("CMData.txt was not opened"); - return EFalse; - } - } - - //Digital Zoom - fscanf(fp,"%d",&data); - Parameters.DigitalZoomON = data; - - //Ietd - fscanf(fp,"%d",&data); - Parameters.IetdON = data; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aWhitePixels = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aBlackPixels = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aStretchLimit = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aSaturationGain = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aBitLimit = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aWBC = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aDBC = data_uchar; - - //Sharpening - fscanf(fp,"%d",&data); - Parameters.SharpeningON = data; - - fscanf(fp,"%d",&data); - Parameters.SharpeningParameters.SHARP_OVER = data; - - fscanf(fp,"%d",&data); - Parameters.SharpeningParameters.SHARP_DZONE = data; - - //fscanf(fp,"%f",&data_real); - fscanf(fp,"%d",&data); - data_real = ((TReal)data)/65536; - Parameters.SharpeningParameters.SHARP_GAIN = data_real; - - //Dithering - fscanf(fp,"%d",&data); - Parameters.DitheringON = data; - - //ColorManagement - fscanf(fp,"%d",&data); - Parameters.ColorManagementON = data; - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.GammaR[i]=data; - } - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.GammaG[i]=data; - } - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.GammaB[i]=data; - } - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.TRCR[i]=data; - } - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.TRCG[i]=data; - } - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.TRCB[i]=data; - } - - - for(i=0;i<3;i++) - { - for(j=0;j<3;j++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.Matrix [3*i+j]=data; - } - } - - - // Close stream - fclose(fp); - - return ETrue; -} -*/ -//----IMAAMI---- diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/bwins/VedEngineu.def --- a/videoeditorengine/vedengine/bwins/VedEngineu.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -EXPORTS - ??0CVedVideoClipGenerator@@IAE@XZ @ 1 NONAME ; CVedVideoClipGenerator::CVedVideoClipGenerator(void) - ??1CVedVideoClipGenerator@@UAE@XZ @ 2 NONAME ; CVedVideoClipGenerator::~CVedVideoClipGenerator(void) - ?CalculateFrameComplexityFactor@CVedVideoClipGenerator@@IBEHPAVCFbsBitmap@@@Z @ 3 NONAME ; int CVedVideoClipGenerator::CalculateFrameComplexityFactor(class CFbsBitmap *) const - ?IsInserted@CVedVideoClipGenerator@@QBEHXZ @ 4 NONAME ; int CVedVideoClipGenerator::IsInserted(void) const - ?IsOwnedByVideoClip@CVedVideoClipGenerator@@QBEHXZ @ 5 NONAME ; int CVedVideoClipGenerator::IsOwnedByVideoClip(void) const - ?Movie@CVedVideoClipGenerator@@QBEPAVCVedMovie@@XZ @ 6 NONAME ; class CVedMovie * CVedVideoClipGenerator::Movie(void) const - ?NewL@CVedAudioClipInfo@@SAPAV1@ABVTDesC16@@AAVMVedAudioClipInfoObserver@@@Z @ 7 NONAME ; class CVedAudioClipInfo * CVedAudioClipInfo::NewL(class TDesC16 const &, class MVedAudioClipInfoObserver &) - ?NewL@CVedMovie@@SAPAV1@PAVRFs@@@Z @ 8 NONAME ; class CVedMovie * CVedMovie::NewL(class RFs *) - ?NewL@CVedVideoClipInfo@@SAPAV1@ABVTDesC16@@AAVMVedVideoClipInfoObserver@@@Z @ 9 NONAME ; class CVedVideoClipInfo * CVedVideoClipInfo::NewL(class TDesC16 const &, class MVedVideoClipInfoObserver &) - ?NewLC@CVedAudioClipInfo@@SAPAV1@ABVTDesC16@@AAVMVedAudioClipInfoObserver@@@Z @ 10 NONAME ; class CVedAudioClipInfo * CVedAudioClipInfo::NewLC(class TDesC16 const &, class MVedAudioClipInfoObserver &) - ?NewLC@CVedMovie@@SAPAV1@PAVRFs@@@Z @ 11 NONAME ; class CVedMovie * CVedMovie::NewLC(class RFs *) - ?NewLC@CVedVideoClipInfo@@SAPAV1@ABVTDesC16@@AAVMVedVideoClipInfoObserver@@@Z @ 12 NONAME ; class CVedVideoClipInfo * CVedVideoClipInfo::NewLC(class TDesC16 const &, class MVedVideoClipInfoObserver &) - ?ReportDescriptiveNameChanged@CVedVideoClipGenerator@@IBEXXZ @ 13 NONAME ; void CVedVideoClipGenerator::ReportDescriptiveNameChanged(void) const - ?ReportDurationChanged@CVedVideoClipGenerator@@IBEXXZ @ 14 NONAME ; void CVedVideoClipGenerator::ReportDurationChanged(void) const - ?ReportSettingsChanged@CVedVideoClipGenerator@@IBEXXZ @ 15 NONAME ; void CVedVideoClipGenerator::ReportSettingsChanged(void) const - ?VideoClipIndex@CVedVideoClipGenerator@@QBEHXZ @ 16 NONAME ; int CVedVideoClipGenerator::VideoClipIndex(void) const - ?NewL@CVedAudioClipInfo@@SAPAV1@PAVRFile@@AAVMVedAudioClipInfoObserver@@@Z @ 17 NONAME ; class CVedAudioClipInfo * CVedAudioClipInfo::NewL(class RFile *, class MVedAudioClipInfoObserver &) - ?NewL@CVedVideoClipInfo@@SAPAV1@PAVRFile@@AAVMVedVideoClipInfoObserver@@@Z @ 18 NONAME ; class CVedVideoClipInfo * CVedVideoClipInfo::NewL(class RFile *, class MVedVideoClipInfoObserver &) - ?NewLC@CVedAudioClipInfo@@SAPAV1@PAVRFile@@AAVMVedAudioClipInfoObserver@@@Z @ 19 NONAME ; class CVedAudioClipInfo * CVedAudioClipInfo::NewLC(class RFile *, class MVedAudioClipInfoObserver &) - ?NewLC@CVedVideoClipInfo@@SAPAV1@PAVRFile@@AAVMVedVideoClipInfoObserver@@@Z @ 20 NONAME ; class CVedVideoClipInfo * CVedVideoClipInfo::NewLC(class RFile *, class MVedVideoClipInfoObserver &) - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/cenrep/videoeditorengine_cenrep_keys.xls Binary file videoeditorengine/vedengine/cenrep/videoeditorengine_cenrep_keys.xls has changed diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/eabi/VedEngineu.def --- a/videoeditorengine/vedengine/eabi/VedEngineu.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -EXPORTS - _ZN17CVedAudioClipInfo4NewLERK7TDesC16R25MVedAudioClipInfoObserver @ 1 NONAME - _ZN17CVedAudioClipInfo5NewLCERK7TDesC16R25MVedAudioClipInfoObserver @ 2 NONAME - _ZN17CVedVideoClipInfo4NewLERK7TDesC16R25MVedVideoClipInfoObserver @ 3 NONAME - _ZN17CVedVideoClipInfo5NewLCERK7TDesC16R25MVedVideoClipInfoObserver @ 4 NONAME - _ZN22CVedVideoClipGeneratorC2Ev @ 5 NONAME - _ZN22CVedVideoClipGeneratorD0Ev @ 6 NONAME - _ZN22CVedVideoClipGeneratorD1Ev @ 7 NONAME - _ZN22CVedVideoClipGeneratorD2Ev @ 8 NONAME - _ZN9CVedMovie4NewLEP3RFs @ 9 NONAME - _ZN9CVedMovie5NewLCEP3RFs @ 10 NONAME - _ZNK22CVedVideoClipGenerator10IsInsertedEv @ 11 NONAME - _ZNK22CVedVideoClipGenerator14VideoClipIndexEv @ 12 NONAME - _ZNK22CVedVideoClipGenerator18IsOwnedByVideoClipEv @ 13 NONAME - _ZNK22CVedVideoClipGenerator21ReportDurationChangedEv @ 14 NONAME - _ZNK22CVedVideoClipGenerator21ReportSettingsChangedEv @ 15 NONAME - _ZNK22CVedVideoClipGenerator28ReportDescriptiveNameChangedEv @ 16 NONAME - _ZNK22CVedVideoClipGenerator30CalculateFrameComplexityFactorEP10CFbsBitmap @ 17 NONAME - _ZNK22CVedVideoClipGenerator5MovieEv @ 18 NONAME - _ZTI22CVedVideoClipGenerator @ 19 NONAME ; ## - _ZTV22CVedVideoClipGenerator @ 20 NONAME ; ## - _ZN17CVedAudioClipInfo4NewLEP5RFileR25MVedAudioClipInfoObserver @ 21 NONAME - _ZN17CVedAudioClipInfo5NewLCEP5RFileR25MVedAudioClipInfoObserver @ 22 NONAME - _ZN17CVedVideoClipInfo4NewLEP5RFileR25MVedVideoClipInfoObserver @ 23 NONAME - _ZN17CVedVideoClipInfo5NewLCEP5RFileR25MVedVideoClipInfoObserver @ 24 NONAME - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/group/VedEngine.mmp --- a/videoeditorengine/vedengine/group/VedEngine.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include - - -NOEXPORTLIBRARY - -TARGET VedEngine.dll -TARGETTYPE dll -UID 0x1000008d 0x10204bf4 - -VENDORID VID_DEFAULT -CAPABILITY CAP_GENERAL_DLL - -MACRO VIDEOEDITORENGINE_AVC_EDITING -#define VIDEOEDITORENGINE_AVC_EDITING - -MACRO __VIDEOEDIT__ -#define __VIDEOEDIT__ - -SOURCEPATH ../src -SOURCE VedVideoClipInfoImp.cpp -SOURCE VedAudioClipInfoImp.cpp -SOURCE VedMovieImp.cpp -SOURCE VedVideoClip.cpp -SOURCE VedVideoClipGenerator.cpp -SOURCE VedVideoClipInfoGeneratedImp.cpp -SOURCE vedcodecchecker.cpp -SOURCE vedqualitysettingsapi.cpp - -SOURCEPATH ../VideoProcessor/Src -SOURCE movieprocessor.cpp -SOURCE movieprocessorimpl.cpp -SOURCE audioprocessor.cpp -SOURCE videoprocessor.cpp -SOURCE activequeue.cpp -SOURCE statusmonitor.cpp -SOURCE mp4demux.cpp -SOURCE mp4parser.cpp -SOURCE mp4composer.cpp -SOURCE yuv2rgb12.cpp -SOURCE yuv2rgb16.cpp -SOURCE yuv2rgb24.cpp -SOURCE dataprocessor.cpp -SOURCE VedRgb2YuvConverter.cpp -SOURCE mpeg4timer.cpp -SOURCE VideoEncoderMDF.cpp -SOURCE SizeEstimate.cpp - -SOURCEPATH ../GenManip/src -SOURCE DCColorManagement.cpp -SOURCE DCDigitalZoom.cpp -SOURCE DCDithering.cpp -SOURCE DCIetd.cpp -SOURCE DCSharpening.cpp -SOURCE DisplayChain.cpp - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/libc - -USERINCLUDE ../../../videoeditor_plat/video_editor_engine_api/inc - -USERINCLUDE ../inc -USERINCLUDE ../VideoProcessor/inc -USERINCLUDE ../GenManip/inc - -USERINCLUDE ../../H263Decoder/inc -USERINCLUDE ../../vedtranscoder/inc -USERINCLUDE ../../AudioEditorEngine/inc -USERINCLUDE ../../avcedit/inc - -LIBRARY euser.lib efsrv.lib -LIBRARY fbscli.lib -LIBRARY gdi.lib - -LIBRARY 3GPMP4Lib.lib -LIBRARY ImagingConfigManager.lib -LIBRARY ecom.lib - -LIBRARY vedh263d.lib -LIBRARY vedtranscoder.lib -LIBRARY aedengine.lib - -LIBRARY vedavcedit.lib - -// End of File - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/group/VedEngineLib.mmp --- a/videoeditorengine/vedengine/group/VedEngineLib.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -TARGET VedEngine.lib -TARGETTYPE IMPLIB -UID 0x1000008d 0x10204bf4 - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/group/bld.inf --- a/videoeditorengine/vedengine/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES -VedEngine.mmp -VedEngineLib.mmp diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/VedAudioClipInfoImp.h --- a/videoeditorengine/vedengine/inc/VedAudioClipInfoImp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,253 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __VEDAUDIOCLIPINFOIMP_H__ -#define __VEDAUDIOCLIPINFOIMP_H__ - - -#include -#include "VedCommon.h" -#include "VedAudioClipInfo.h" - -#include "AudClip.h" -#include "AudObservers.h" - -/* - * Forward declarations. - */ -class CVedAudioClipInfo; -class CVedAudioClipInfoOperation; - -/** - * Utility class for getting information about audio clip files. - * - */ -class CVedAudioClipInfoImp : public CVedAudioClipInfo, public MAudClipInfoObserver, - public MAudVisualizationObserver - { -public: - /* Constuctor */ - CVedAudioClipInfoImp(); - - /* Symbian two phased constructor. */ - void ConstructL(const TDesC& aFileName, - MVedAudioClipInfoObserver& aObserver); - - /* Symbian two phased constructor. */ - void ConstructL(RFile* aFileHandle, - MVedAudioClipInfoObserver& aObserver); - - /* Two-phased constructor variant for use within a movie. */ - void ConstructL(CAudClip* aAudClip, - MVedAudioClipInfoObserver& aObserver); - - /** - * Destroys the object and releases all resources. - */ - ~CVedAudioClipInfoImp(); - - - /* Property methods. */ - - /** - * Returns the file name of the clip. Panics if info - * is not yet ready for reading. - * - * @return file name - */ - TPtrC FileName() const; - - /** - * Returns the audio format of the clip. Panics if info - * is not yet ready for reading. - * - * @return audio format of the clip - */ - TVedAudioFormat Format() const; - - /** - * Returns the audio type of the clip. Panics if info - * is not yet ready for reading. - * - * @return audio type - */ - TVedAudioType Type() const; - - /** - * Returns the duration of the clip. Panics if info - * is not yet ready for reading. - * - * @return duration in microseconds - */ - TTimeIntervalMicroSeconds Duration() const; - - /** - * Returns the channel mode of the audio if applicable. - * - * @return channel mode - */ - TVedAudioChannelMode ChannelMode() const; - - /** - * Returns the sampling rate. - * - * @return sampling rate in hertz - */ - TInt SamplingRate() const; - - /** - * Returns the bitrate mode. - * - * @return bitrate mode - */ - TVedBitrateMode BitrateMode() const; - - /** - * Returns the bitrate. - * - * @return bitrate in bits per second - */ - TInt Bitrate() const; - - - /** - * Comparison method for sorting arrays of audio clip infos. - * - * @param c1 first info to compare - * @param c2 second info to compare - * - * @return - */ - static TInt Compare(const CVedAudioClipInfoImp& c1, const CVedAudioClipInfoImp& c2); - - /* Visualization methods. */ - - /** - * Generates a visualization of the audio clip. The visualization consists - * of an array of values with the specified resolution. This method is - * asynchronous. The visualization is generated in background and the observer - * is notified when the visualization is complete. This method panics if info - * is not yet ready for reading or the resolution is illegal. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aObserver observer to be notified when the visualization is completed - * @param aResolution resolution of the visualization (i.e., the number of values - * in the visualization array) - * @param aPriority priority of the visualization - */ - void GetVisualizationL(MVedAudioClipVisualizationObserver& aObserver, - TInt aResolution, TInt aPriority); - - /** - * Cancels visualization generation. If no visualization is currently being - * generated, the function does nothing. - */ - void CancelVisualizationL(); - - - /** - * Factory constructor for constucting the info without creating an audio clip - * info object, using the supplied audio clip pointer instead.This variant is for - * use in movie. - * - * @param aAudClip audio clip instance - * @param aObserver observer to notify when clip info is ready - */ - static CVedAudioClipInfoImp* NewL(CAudClip* aAudClip, MVedAudioClipInfoObserver& aObserver); - - /** - * Factory constructor for constucting the info without creating an audio clip - * info object, using the supplied audio clip pointer instead.This variant is for - * use in movie. Leaves the created instance on the cleanup stack. - * - * @param aAudClip audio clip instance - * @param aObserver observer to notify when clip info is ready - */ - static CVedAudioClipInfoImp* NewLC(CAudClip* aAudClip, MVedAudioClipInfoObserver& aObserver); - - /** - * Returns the file handle of the clip. Panics if info - * is not yet ready for reading. - * - * @return file name - */ - RFile* FileHandle() const; - -private: // Functions from base classes - - /* From base class MAudVisualizationObserver */ - - void NotifyClipInfoVisualizationCompleted(const CAudClipInfo& aClipInfo, - TInt aError, TInt8* aVisualization, TInt aSize); - - void NotifyClipInfoVisualizationStarted(const CAudClipInfo& aClipInfo, - TInt aError); - - void NotifyClipInfoVisualizationProgressed(const CAudClipInfo& aClipInfo, - TInt aPercentage); - - /* From base class MAudClipInfoObserver */ - void NotifyClipInfoReady(CAudClipInfo& aInfo, TInt aError); - -private: - - // Audio clip info from Audio Engine - CAudClipInfo* iAudClipInfo; - - // Audio clip if this clip info is included in a song - CAudClip* iAudClip; - - // Operation class - CVedAudioClipInfoOperation* iOperation; - - // Audio properties - TAudFileProperties iAudioProperties; - - // Whether we are ready to return info. - TBool iReady; - - MVedAudioClipInfoObserver* iObserver; - - // Visualization observer - MVedAudioClipVisualizationObserver* iVisualizationObserver; - friend class CVedAudioClip; - friend class CVedMovieImp; - }; - -class CVedAudioClipInfoOperation : public CActive - { -public: - static CVedAudioClipInfoOperation* NewL(CVedAudioClipInfoImp* aInfo, MVedAudioClipInfoObserver& aObserver); - ~CVedAudioClipInfoOperation(); - -protected: - TInt RunError(TInt aError); - void RunL(); - void DoCancel(); - CVedAudioClipInfoOperation(CVedAudioClipInfoImp* aInfo,MVedAudioClipInfoObserver& aObserver); - void ConstructL(); - -private: - MVedAudioClipInfoObserver& iObserver; - CVedAudioClipInfoImp* iInfo; - }; -#endif // __VEDAUDIOCLIPINFOIMP_H__ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/VedMovieImp.h --- a/videoeditorengine/vedengine/inc/VedMovieImp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1419 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#ifndef __VEDMOVIEIMP_H__ -#define __VEDMOVIEIMP_H__ - - -#include -#include -#include "VedMovie.h" -#include "VedVideoClip.h" -#include "VedAudioClipInfoImp.h" -#include "AudObservers.h" -#include "AudCommon.h" -#include "Vedqualitysettingsapi.h" -#include "ctrtranscoder.h" - - -#if ( defined (__WINS__) || defined (__WINSCW__) ) -const TInt KVEdMaxFrameRate = 10; -#else -const TInt KVEdMaxFrameRate = 15; -#endif - - -/* - * Forward declarations. - */ -class CMovieProcessor; -class CVedMovie; -class CVedMovieImp; -class CVedMovieAddClipOperation; -class CVedMovieProcessOperation; -class CAudSong; -class CVedCodecChecker; - - -/** - * Video movie, which consists of zero or more video clips and zero or more audio clips. - * - * @see CVedVideoClip - * @see CVedAudioClip - */ -class CVedMovieImp : public CVedMovie, MAudSongObserver, MVedAudioClipInfoObserver - { -public: - /* Constructors. */ - - CVedMovieImp(RFs *aFs); - - void ConstructL(); - - /** - * Destroys the object and releases all resources. - */ - ~CVedMovieImp(); - - - /* Property methods. */ - - /** - * Returns the quality setting of this movie. - * - * @return quality setting of this movie - */ - TVedMovieQuality Quality() const; - - /** - * Sets the quality setting of this movie. - * - * @param aQuality quality setting - */ - void SetQuality(TVedMovieQuality aQuality); - - /** - * Returns the video format of this movie. - * - * @return video format of this movie - */ - TVedVideoFormat Format() const; - - /** - * Returns the video type of this movie. - * - * @return video type of this movie - */ - TVedVideoType VideoType() const; - - /** - * Returns the resolution of this movie. Panics with - * TVedPanic::EMovieEmpty if there are no clips - * in the movie. - * - * @return resolution of the movie - */ - TSize Resolution() const; - - /** - * Returns the recommended maximum framerate of this movie.. - *

- * Note that the returned maximum framerate is a recommendation, - * not a guarantee. For example, the video clip generators inserted - * in this movie should not generate frames at higher framerates - * than the recommendation. The movie may, however, exceed this - * recommendation. For example, the framerate may be higher if the - * framerates of some of the video clips are higher than the - * recommendation and it is not possible to transcode them to reduce - * the framerate. - * - * @return maximum framerate in frames per second - */ - TInt MaximumFramerate() const; - - /** - * Returns the audio type of the movie audio track. - * - * @return audio type of the movie audio track - */ - TVedAudioType AudioType() const; - - /** - * Returns the audio sampling rate of the movie audio track. - * - * @return audio sampling rate of the movie audio track. - */ - TInt AudioSamplingRate() const; - - /** - * Sets the output parameters for the movie. Leaves - * with KErrNotSupported if a parameter is illegal, - * e.g., target bitrate is too high for the given - * codec. This method overrides the SetQuality method - * - * Possible leave codes: - * - KErrNotSupported if setting is not valid - * - * @param Output parameters - */ - virtual void SetOutputParametersL(TVedOutputParameters& aOutputParams); - - /** - * Returns the audio channel mode of the movie audio track. - * - * @return audio channel mode of the movie audio track. - */ - TVedAudioChannelMode AudioChannelMode() const; - - /** - * Returns the audio bitrate mode of the movie audio track. - * - * @return audio bitrate mode - */ - TVedBitrateMode AudioBitrateMode() const; - - /** - * Returns the target bitrate of the movie audio track. - * - * @return target bitrate of the movie audio track. - */ - TInt AudioBitrate() const; - - /** - * Returns the required bitrate of the movie video track. - * If nonzero, indicates real target bitrate => requires transcoding - * - * @return Requested bitrate of the movie video track. - */ - TInt VideoBitrate() const; - - /** - * Returns the "standard" or default bitrate of the movie video track. - * If input is something else, no transcoding is needed, but new content - * is encoded using this rate. If there is also requested bitrate, the values - * should be the same. The "standard" does not necessarily mean the bitrate - * is from video coding standard, it can be, but it can be also something else, - * depending on the product variant. - * - * @return Standard bitrate of the movie video track. - */ - TInt VideoStandardBitrate() const; - - /** - * Returns the target framerate of the movie video track. - * - * @return target framerate of the movie video track. - */ - TReal VideoFrameRate() const; - - /** - * Returns the total duration of this movie. - * - * @return duration in microseconds - */ - inline TTimeIntervalMicroSeconds Duration() const; - - /** - * Returns an estimate of the total size of this movie. - * - * @return size estimate in bytes - */ - TInt GetSizeEstimateL() const; - - /** - * Estimates end cutpoint with given target size and start cutpoint for current movie. - * - * @param aTargetSize Target filesize for section indicated by aStartTime and aEndTime. - * @param aStartTime Start time for first frame included in cutted section. - * @param aEndTime On return contains estimated end time with given start time and section target filesize. - */ - void GetDurationEstimateL(TInt aTargetSize, TTimeIntervalMicroSeconds aStartTime, TTimeIntervalMicroSeconds& aEndTime); - - /** - * Returns whether movie properties meet MMS compatibility - * - * @return ETrue if MMS compatible, else EFalse - */ - TBool IsMovieMMSCompatible() const; - - - /* Video clip management methods. */ - - /** - * Returns the number of video clips in this movie. - * - * @return number of video clips - */ - inline TInt VideoClipCount() const; - - /** - * Returns the video clip at the specified index. - * Used by underlying modules and friend classes. Not part of public API. - * Panics with code USER-130 if the clip index is invalid. - * - * @param aIndex index - * - * @return clip at the specified index. - */ - CVedVideoClip* VideoClip(TInt aIndex) const; - - /** - * Inserts the specified video clip to the specified index in this movie. - * The observers are notified when the clip has been added or adding clip - * has failed. Panics with EMovieAddOperationAlreadyRunning - * if another add video or audio clip operation is already running. - * Panics with code USER-130 if the clip index is invalid. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileName file name of the clip to add - * @param aIndex index the clip should be inserted at - */ - void InsertVideoClipL(const TDesC& aFileName, TInt aIndex); - - - void InsertVideoClipL(CVedVideoClipGenerator& aGenerator, TBool aIsOwnedByVideoClip, - TInt aIndex); - - /** - * Removes the video clip at the specified index from this movie. - * Panics with code USER-130 if the clip index is invalid. - * - * @param aIndex index of the clip to be removed - */ - void RemoveVideoClip(TInt aIndex); - - - /* Transition effect management methods. */ - - /** - * Returns the start transition effect of this movie. Panics with - * TVedPanic::EMovieEmpty if there are no video clips - * in the movie. - * - * @return start transition effect - */ - TVedStartTransitionEffect StartTransitionEffect() const; - - /** - * Sets the start transition effect of this movie. Panics with - * TVedPanic::EMovieEmpty if there are no video clips - * in the movie. - * - * @param aEffect start transition effect - */ - void SetStartTransitionEffect(TVedStartTransitionEffect aEffect); - - /** - * Returns the number of middle transition effects in this movie. - * Note that this is the same as the number of video clips minus one. - * - * @return number of middle transition effects - */ - TInt MiddleTransitionEffectCount() const; - - /** - * Returns the middle transition effect at the specified index. - * Panics with code USER-130 if the index is invalid. - * - * @param aIndex index - * - * @return middle transition effect at the specified index - */ - TVedMiddleTransitionEffect MiddleTransitionEffect(TInt aIndex) const; - - /** - * Sets the middle transition effect at the specified index. - * Panics with code USER-130 if the index is invalid. - * - * @param aEffect middle transition effect - * @param aIndex index - */ - void SetMiddleTransitionEffect(TVedMiddleTransitionEffect aEffect, TInt aIndex); - - /** - * Returns the end transition effect of this movie. Panics with - * TVedPanic::EMovieEmpty if there are no video clips - * in the movie. - * - * @return end transition effect - */ - TVedEndTransitionEffect EndTransitionEffect() const; - - /** - * Sets the end transition effect of this movie. Panics with - * TVedPanic::EMovieEmpty if there are no video clips - * in the movie. - * - * @param aEffect end transition effect - */ - void SetEndTransitionEffect(TVedEndTransitionEffect aEffect); - - - /* Audio clip management methods. */ - - /** - * Returns the number of audio clips in this movie. - * - * @return number of audio clips - */ - TInt AudioClipCount() const; - - /** - * Adds the specified audio clip to this movie. The observers are notified - * when the clip has been added or adding clip has failed. Panics with - * EMovieAddOperationAlreadyRunning if another add video or - * audio clip operation is already running. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileName file name of the clip to add - * @param aStartTime start time of the clip in movie timebase - * @param aCutInTime cut in time of the clip - * @param aCutOutTime cut out time of the clip; or - * KVedAudioClipOriginalDuration to specify - * that the original duration of the clip should be used - */ - void AddAudioClipL(const TDesC& aFileName, - TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds aCutInTime, - TTimeIntervalMicroSeconds aCutOutTime); - - /** - * Removes the audio clip at the specified index from this movie. - * Panics with code USER-130 if the clip index is invalid. - * - * @param aIndex index of the clip to be removed - */ - void RemoveAudioClip(TInt aIndex); - - - /* Whole movie management methods. */ - - /** - * Removes all video and audio clips and clears all transitions. - */ - void Reset(); - - - /* Processing methods. */ - - /** - * Starts a video processing operation. This method is asynchronous and - * returns immediately. The processing will happen in the background and - * the observer will be notified about the progress of the operation. - * Processed data is written into the specified file. Panics with - * TVedPanic::EMovieEmpty if there are no clips - * in the movie. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrAccessDenied if the file access is denied - * - KErrDiskFull if the disk is full - * - KErrWrite if not all data could be written - * - KErrBadName if the filename is bad - * - KErrDirFull if the directory is full - * - * @param aObserver observer to be notified of the processing status - * @param aFileName name of the file to be written - */ - void ProcessL(const TDesC& aFileName, - MVedMovieProcessingObserver& aObserver); - - /** - * Cancels the current video processing operation. If there is no - * operation in progress, the function does nothing. - */ - void CancelProcessing(); - - - /* Observer methods. */ - - /** - * Registers a movie observer. Panics with panic code - * EMovieObserverAlreadyRegistered if the movie observer is - * already registered. - * - * @param aObserver observer that will receive the events - */ - void RegisterMovieObserverL(MVedMovieObserver* aObserver); - - /** - * Unregisters a movie observer. - * - * @param aObserver observer to be unregistered - */ - void UnregisterMovieObserver(MVedMovieObserver* aObserver); - - /* Video Clip Methods */ - /** - * Returns a video clip info object to get detailed information about - * the original video clip. Note that the specified editing operations - * (for example, cutting or muting audio) do not - * affect the values returned by the info object. - * - * @param aIndex index of video clip in movie - * @return pointer to a video clip info instance - */ - CVedVideoClipInfo* VideoClipInfo(TInt aIndex) const; - - /** - * Returns whether this video clip with the specified editing operations - * applied (for example, changing speed or muting) has an audio track or not. - * - * @param aIndex index of video clip in movie - * @return ETrue if clip has an audio track; - * EFalse otherwise - */ - TBool VideoClipEditedHasAudio(TInt aIndex) const; - - /** - * Sets the index of this video clip in the movie. - * Panics with code EVideoClipIllegalIndex - * if the clip index is invalid. - * - * @param aIndex index of video clip in movie - * @param aNewIndex new index of this clip - */ - void VideoClipSetIndex(TInt aOldIndex, TInt aNewIndex); - - /** - * Returns the playback speed of this video clip. Playback speed is - * specified as parts per thousand of the normal playback speed. For example. - * 1000 means the normal speed, 750 means 75% of the normal speed, and so on. - * - * @param aIndex index of video clip in movie - * @return playback speed - */ - TInt VideoClipSpeed(TInt aIndex) const; - - /** - * Sets the playback speed of this video clip. Playback speed is - * specified as parts per thousand of the normal playback speed. For example. - * 1000 means the normal speed, 750 means 75% of the normal speed, and so on. - * Panics with EVideoClipIllegalSpeed if playback speed is - * illegal. - * - * @param aIndex index of video clip in movie - * @param aSpeed playback speed; must be between 1 and 1000 - */ - void VideoClipSetSpeed(TInt aIndex, TInt aSpeed); - - /** - * Returns the color effect of this video clip. - * - * @param aIndex index of video clip in movie - * @return color effect - */ - TVedColorEffect VideoClipColorEffect(TInt aIndex) const; - - /** - * Sets the color effect of this video clip. - * - * @param aIndex index of video clip in movie - * @param aColorEffect color effect - */ - void VideoClipSetColorEffect(TInt aIndex, TVedColorEffect aColorEffect); - - /** - * Returns whether this video clip can be muted or not (that is, - * whether the mute setting has any effect). For example, if - * this video clip has no audio track, it can never have audio - * even if the mute setting is false. - * - * @param aIndex index of video clip in movie - * @return ETrue if this video clip can be muted; - * EFalse otherwise - */ - TBool VideoClipIsMuteable(TInt aIndex) const; - - /** - * Returns whether the audio track of this video clip is muted or not. - * - * @param aIndex index of video clip in movie - * @return ETrue if the audio track is muted; - * EFalse otherwise - */ - TBool VideoClipIsMuted(TInt aIndex) const; - - /** - * Sets whether the audio track of this video clip is muted or not. - * - * @param aIndex index of video clip in movie - * @param aVolume ETrue to mute the audio track; - * EFalse not to mute the audio track - */ - void VideoClipSetMuted(TInt aIndex, TBool aMuted); - - /** - * Returns whether the audio track of this video clip is normalized or not. - * - * @param aIndex index of video clip in movie - * @return ETrue if the audio track is normalized; - * EFalse otherwise - */ - TBool VideoClipNormalizing(TInt aIndex) const; - - /** - * Sets whether the audio track of this video clip is normalized or not. - * - * @param aIndex index of video clip in movie - * @param aVolume ETrue to normalize the audio track; - * EFalse not to normalize the audio track - */ - void VideoClipSetNormalizing(TInt aIndex, TBool aNormalizing); - - /** - * Inserts a new dynamic level mark to the video clip. The mark timing - * must be within the time boundaries of the video clip. - * - * @param aIndex index of the video clip - * @param aMark dynamic level mark to be inserted - */ - void VideoClipInsertDynamicLevelMarkL(TInt aIndex, TVedDynamicLevelMark aMark); - - /** - * Removes the specified dynamic level mark from the specified video clip. - * The mark index must be between 0 and number of dynamic level marks in the clip. - * - * @param aClipIndex index of the video clip - * @param aMarkIndex index of the mark to be removed - */ - void VideoClipRemoveDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex); - - /** - * Returns the number of dynamic level marks in the specified video clip. - * - * @param aIndex index of the video clip - */ - TInt VideoClipDynamicLevelMarkCount(TInt aIndex) const; - - /** - * Returns the specified dynamic level mark from the specified video clip. - * - * @param aClipIndex index of the video clip - * @param aMarkIndex index of the dynamic level mark - */ - TVedDynamicLevelMark VideoClipDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex); - - /** - * Returns the cut in time of this video clip in clip timebase. - * - * @param aIndex index of video clip in movie - * @return cut in time in microseconds in clip timebase - */ - TTimeIntervalMicroSeconds VideoClipCutInTime(TInt aIndex) const; - - /** - * Sets the cut in time of this video clip in clip timebase. - * Panics with EVideoClipIllegalCutInTime if - * cut in time is illegal. - * - * @param aIndex index of video clip in movie - * @param aCutInTime cut in time in microseconds in clip timebase - */ - void VideoClipSetCutInTime(TInt aIndex, TTimeIntervalMicroSeconds aCutInTime); - - /** - * Returns the cut out time of this video clip in clip timebase. - * - * @return cut out time in microseconds in clip timebase - */ - TTimeIntervalMicroSeconds VideoClipCutOutTime(TInt aIndex) const; - - /** - * Sets the cut out time of this video clip in clip timebase. - * Panics with EVideoClipIllegalCutOutTime if - * cut out time is illegal. - * - * @param aIndex index of video clip in movie - * @param aCutOutTime cut out time in microseconds in clip timebase - */ - void VideoClipSetCutOutTime(TInt aIndex, TTimeIntervalMicroSeconds aCutOutTime); - - /** - * Returns the start time of this video clip in movie timebase. - * - * @param aIndex index of video clip in movie - * @return start time in microseconds in movie timebase - */ - TTimeIntervalMicroSeconds VideoClipStartTime(TInt aIndex) const; - - /** - * Returns the end time of this video clip in movie timebase. - * - * @param aIndex index of video clip in movie - * @return end time in microseconds in movie timebase - */ - TTimeIntervalMicroSeconds VideoClipEndTime(TInt aIndex) const; - - /** - * Returns the duration of this video clip with the specified - * editing operations applied (for example, cutting - * and changing speed) - * - * @param aIndex index of video clip in movie - * @return duration in microseconds - */ - TTimeIntervalMicroSeconds VideoClipEditedDuration(TInt aIndex) const; - - /* Audio Clip Methods */ - /** - * Returns an audio clip info object to get detailed information about - * the original audio clip. Note that the specified editing operations - * (for example, changing duration) do not - * affect the values returned by the info object. - * - * @param aIndex index of audio clip in movie - * @return pointer to an audio clip info instance - */ - CVedAudioClipInfo* AudioClipInfo(TInt aIndex) const; - - /** - * Returns the start time of this audio clip in movie timebase. - * - * @param aIndex index of audio clip in movie - * @return start time in microseconds in movie timebase - */ - TTimeIntervalMicroSeconds AudioClipStartTime(TInt aIndex) const; - - /** - * Sets the start time of this audio clip in movie timebase. - * Also updates the end time. Duration remains unchanged. - * Note that since the audio clips are ordered based on their - * start times, the index of the clip may change as a result - * of changing the start time. - * - * @param aIndex index of audio clip in movie - * @param aStartTime start time in microseconds in movie timebase - */ - void AudioClipSetStartTime(TInt aIndex, TTimeIntervalMicroSeconds aStartTime); - - /** - * Returns the end time of this audio clip in movie timebase. - * - * @param aIndex index of audio clip in movie - * @return end time in microseconds in movie timebase - */ - TTimeIntervalMicroSeconds AudioClipEndTime(TInt aIndex) const; - - /** - * Returns the duration of the selected part of this clip. - * - * @param aIndex index of audio clip in movie - * @return duration in microseconds - */ - TTimeIntervalMicroSeconds AudioClipEditedDuration(TInt aIndex) const; - - /** - * Returns the cut in time of this audio clip in clip timebase. - * - * @param aIndex index of audio clip in movie - * @return cut in time in microseconds in clip timebase - */ - TTimeIntervalMicroSeconds AudioClipCutInTime(TInt aIndex) const; - - /** - * Sets the cut in time of this audio clip in clip timebase. - * Panics with EAudioClipIllegalCutInTime if - * cut in time is illegal. - * - * @param aIndex index of audio clip in movie - * @param aCutInTime cut in time in microseconds in clip timebase - */ - void AudioClipSetCutInTime(TInt aIndex, TTimeIntervalMicroSeconds aCutInTime); - - /** - * Returns the cut out time of this audio clip in clip timebase. - * - * @param aIndex index of audio clip in movie - * @return cut out time in microseconds in clip timebase - */ - TTimeIntervalMicroSeconds AudioClipCutOutTime(TInt aIndex) const; - - /** - * Sets the cut out time of this audio clip in clip timebase. - * Panics with EAudioClipIllegalCutOutTime if - * cut in time is illegal. - * - * @param aIndex index of audio clip in movie - * @param aCutOutTime cut out time in microseconds in clip timebase - */ - void AudioClipSetCutOutTime(TInt aIndex, TTimeIntervalMicroSeconds aCutOutTime); - - /** - * Returns whether this audio clip is normalized or not. - * - * @param aIndex index of audio clip in movie - * @return ETrue if the audio clip is normalized; - * EFalse otherwise - */ - TBool AudioClipNormalizing(TInt aIndex) const; - - /** - * Sets whether this audio clip is normalized or not. - * - * @param aIndex index of audio clip in movie - * @param aVolume ETrue to normalize the audio clip; - * EFalse not to normalize the audio clip - */ - void AudioClipSetNormalizing(TInt aIndex, TBool aNormalizing); - - /** - * Inserts a new dynamic level mark to the audio clip. The mark timing - * must be within the time boundaries of the audio clip. - * - * @param aIndex index of the audio clip - * @param aMark dynamic level mark to be inserted - */ - void AudioClipInsertDynamicLevelMarkL(TInt aIndex, TVedDynamicLevelMark aMark); - - /** - * Removes the specified dynamic level mark from the specified audio clip. - * The mark index must be between 0 and number of dynamic level marks in the clip. - * - * @param aClipIndex index of the audio clip - * @param aMarkIndex index of the mark to be removed - */ - void AudioClipRemoveDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex); - - /** - * Returns the number of dynamic level marks in the specified audio clip. - * - * @param aIndex index of the audio clip - */ - TInt AudioClipDynamicLevelMarkCount(TInt aIndex) const; - - /** - * Returns the specified dynamic level mark from the specified audio clip. - * - * @param aClipIndex index of the audio clip - * @param aMarkIndex index of the dynamic level mark - */ - TVedDynamicLevelMark AudioClipDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex); - - /** - * Returns the color tone of the specified clip. - * - * @return color tone - */ - TRgb VideoClipColorTone(TInt aVideoCLipIndex) const; - - /** - * Sets the color tone of the specified clip. - * - * @param aColorTone color tone - */ - void VideoClipSetColorTone(TInt aVideoClipIndex, TRgb aColorTone); - - /** - * Returns a pointer to the audio song used as the sound provider for - * this movie. - * - * @return song - */ - CAudSong* Song(); - - /** - * Sets the maximum size for the movie - * - * @param aLimit Maximum size in bytes - */ - virtual void SetMovieSizeLimit(TInt aLimit); - - /** - * Returns an estimate for total processing time - * - * @return processing time - */ - TTimeIntervalMicroSeconds GetProcessingTimeEstimateL(); - - /** - * Returns the MIME-type for the video in the movie - * - * @return Video codec MIME-type - */ - TPtrC8& VideoCodecMimeType(); - /** - * Gets the sync interval in picture (H.263 GOB frequency) - * - * @return sync interval - */ - TInt SyncIntervalInPicture(); - - /** - * Gets the random access rate - * - * @return random access rate in pictures per second - */ - TReal RandomAccessRate(); - - /** - * Checks if a movie observer is registered. - * - * @param aObserver observer to be checked - * @return ETrue if the observer is registered - * EFalse otherwise - */ - TBool MovieObserverIsRegistered(MVedMovieObserver* aObserver); - - /** - * Set volume gain for the given video clip or all the video clips - * @param aClipIndex index of the clip; KVedClipIndexAll if applied for all the clips - * @param aVolumeGain Volume gain in +0.1 or -0.5 decibel steps - * - */ - void SetVideoClipVolumeGainL(TInt aClipIndex, TInt aVolumeGain); - - /** - * Get volume gain of the given video clip or all the video clips - * @param aClipIndex index of the clip; KVedClipIndexAll if applied for all the clips - * - * @return Volume gain in +0.1 or -0.5 decibel steps - */ - TInt GetVideoClipVolumeGainL(TInt aClipIndex); - - /** - * Set volume gain for the given audio clip or all the audio clips - * @param aClipIndex index of the clip; KVedClipIndexAll if applied for all the clips - * @param aVolumeGain Volume gain in +0.1 or -0.5 decibel steps - * - */ - void SetAudioClipVolumeGainL(TInt aClipIndex, TInt aVolumeGain); - - /** - * Get volume gain of the given audio clip or all the audio clips - * @param aClipIndex index of the clip; KVedClipIndexAll if applied for all the clips - * - * @return Volume gain in +0.1 or -0.5 decibel steps - */ - TInt GetAudioClipVolumeGainL(TInt aClipIndex); - - /** - * Inserts a video clip from the specified file to the specified index - * in this movie. The observers are notified when the clip has been added - * or adding clip has failed. Panics with EMovieAddOperationAlreadyRunning - * if another add video or audio clip operation is already running. - * Panics with code USER-130 if the clip index is invalid. - * The file will be opened in EFileShareReadersOnly mode by default, - * and the same mode should be used by the client too if it need to open - * the file at the same time. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFileHandle file handle of the clip to add - * @param aIndex index the clip should be inserted at - */ - void InsertVideoClipL(RFile* aFileHandle, TInt aIndex); - - /** - * Adds the specified audio clip to this movie. The observers are notified - * when the clip has been added or adding clip has failed. Panics with - * EMovieAddOperationAlreadyRunning if another add video or - * audio clip operation is already running. - * The file will be opened in EFileShareReadersOnly mode by default, - * and the same mode should be used by the client too if it need to open - * the file at the same time. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aFilehandle file handle of the clip to add - * @param aStartTime start time of the clip in movie timebase - * @param aCutInTime cut in time of the clip - * @param aCutOutTime cut out time of the clip; or - * KVedAudioClipOriginalDuration to specify - * that the original duration of the clip should be used - */ - void AddAudioClipL(RFile* aFileHandle, - TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds aCutInTime = TTimeIntervalMicroSeconds(0), - TTimeIntervalMicroSeconds aCutOutTime = KVedAudioClipOriginalDuration); - - - /** - * Starts a video processing operation. This method is asynchronous and - * returns immediately. The processing will happen in the background and - * the observer will be notified about the progress of the operation. - * Processed data is written into the specified file. Panics with - * TVedPanic::EMovieEmpty if there are no clips - * in the movie. Note that calling ProcessL may cause - * changes in the maximum frame rates of generated clips. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrAccessDenied if the file access is denied - * - KErrDiskFull if the disk is full - * - KErrWrite if not all data could be written - * - KErrBadName if the filename is bad - * - KErrDirFull if the directory is full - * - * @param aObserver observer to be notified of the processing status - * @param aFileHandle handle of the file to be written - */ - void ProcessL(RFile* aFileHandle, - MVedMovieProcessingObserver& aObserver); - -private: - /* Movie editing methods. */ - - /** - * Match the selected audio properties with input. This is used with automatic - * quality to avoid useless transcoding of audio. - */ - TBool MatchAudioPropertiesWithInput( TAudFileProperties& aAudioProperties ); - - /** - * Calculates the format, video type, resolution and audio type of - * this movie. - */ - void CalculatePropertiesL(); - - /** - * Determines the output format based on input and sets up the movie accordingly - */ - void ApplyAutomaticPropertiesL(TAudFileProperties &aAudioProperties); - - /** - * Sets up the movie according to requested properties - */ - void ApplyRequestedPropertiesL(TAudFileProperties &aAudioProperties); - - /** - * Get properties for QCIF/subQCIF from quality set and sets up video - */ - TInt GetQCIFPropertiesL(SVideoQualitySet& aLocalQualitySet); - - /** - * Get properties for CIF/QVGA from quality set and sets up video - */ - TInt GetCIFQVGAPropertiesL(TSize aSize, TReal aFrameRate, SVideoQualitySet& aLocalQualitySet); - - /** - * Get properties for VGA from quality set and sets up video - */ - TInt GetVGAPropertiesL(SVideoQualitySet& aLocalQualitySet); - - /** - * Get properties for VGA 16:9 from quality set and sets up video - */ - TInt GetVGA16By9PropertiesL(SVideoQualitySet& aLocalQualitySet); - - /** - * Get properties for VGA from quality set and sets up video - */ - TInt GetWVGAPropertiesL(SVideoQualitySet& aLocalQualitySet); - - /** - * Get properties for high quality from quality set - */ - TInt GetHighPropertiesL(SVideoQualitySet& aLocalQualitySet); - - /** - * Creates temporary instance of CTRTranscoder and asks for complexity factor estimate - * when converting given video clip to movie with set parameters. - * The estimate represents how long processing of 1 sec input takes. - */ - TReal AskComplexityFactorFromTranscoderL(CVedVideoClipInfo* aInfo, CTRTranscoder::TTROperationalMode aMode, TReal aInputFrameRate); - - /** - * Checks whether the specified video clip can be inserted to this movie. - * - * @param aClip video clip - * - * @return KErrNone, if the clip can be inserted; - * one of the system wide error codes, otherwise - */ - TInt CheckVideoClipInsertable(CVedVideoClip *aClip) const; - - /** - * Calculates the maximum and minimum resolution supported by this movie. - * - * @param aMaxRes initial upper limit for the maximum resolution; - * after the method returns, contains the calculated - * maximum resolution supported by this movie - * @param aMinRes initial lower limit for the minimum resolution; - * after the method returns, contains the calculated - * minimum resolution supported by this movie - * @param aDoFullCheck ETrue, if all clips should be - * checked to verify that they can be combined - * (not necessary but useful for detecting internal - * errors); EFalse, if extra checks - * should be skipped to minimize execution time - */ - void CalculateMaxAndMinResolution(TSize& aMaxRes, TSize& aMinRes, - TBool aDoFullCheck) const; - - /** - * Recalculates video clip timings. - * - * @param aVideoClip Video clip - */ - void RecalculateVideoClipTimings(CVedVideoClip* aVideoClip); - - /** - * Reset the movie. - */ - void DoReset(); - - /** - * Set audio fade in/out on clip boundaries - */ - void SetAudioFadingL(); - - /** - * Internal helper function to set iVideoCodecMimeType to given value - */ - void SetVideoCodecMimeType(const TText8* aVideoCodecType); - - /* Notification methods. */ - - /** - * Notify observers that the video clip has been added to movie. - * - * @param aMovie This movie. - * @param aClip Added video clip. - */ - void FireVideoClipAdded(CVedMovie* aMovie, CVedVideoClip* aClip); - - /** - * Notify observers that the adding of video clip failed. - * - * @param - */ - void FireVideoClipAddingFailed(CVedMovie* aMovie, TInt aError); - - /** - * Notify observers that the video clip has been removed from movie. - * - * @param aMovie This movie. - * @param aIndex Index of removed video clip. - */ - void FireVideoClipRemoved(CVedMovie* aMovie, TInt aIndex); - - /** - * Notify observers that the video clip indices has changes. - * - * @param aMovie This movie. - * @param aOldIndex Old index of video clip. - * @param aNewIndex New index of video clip. - */ - void FireVideoClipIndicesChanged(CVedMovie* aMovie, TInt aOldIndex, - TInt aNewIndex); - - /** - * Notify observers that the video clip timings has been changed. - * - * @param aMovie This movie. - * @param aClip The video clip. - */ - void FireVideoClipTimingsChanged(CVedMovie* aMovie, CVedVideoClip* aClip); - - /** - * Notify observers that the color effect of video clip has been changed. - * - * @param aMovie This movie. - * @param aClip Video clip that was changed. - */ - void FireVideoClipColorEffectChanged(CVedMovie* aMovie, CVedVideoClip* aClip); - - /** - * Notify observers that the audio settings of video clip has been changed. - * - * @param aMovie This movie. - * @param aClip Video clip that audio settings has been changed. - */ - void FireVideoClipAudioSettingsChanged(CVedMovie* aMovie, CVedVideoClip* aClip); - - /** - * Notify observers that the generator settings of video clip has been changed. - * - * @param aMovie This movie. - * @param aClip Video clip whose settings has been changed - */ - void FireVideoClipGeneratorSettingsChanged(CVedMovie* aMovie, CVedVideoClip* aClip); - - /** - * Notify observers that the descriptive name of video clip has been changed. - * - * @param aMovie This movie - * @param aClip Video clip whose settings has been changed - */ - void FireVideoClipDescriptiveNameChanged(CVedMovie* aMovie, CVedVideoClip* aClip); - - - /** - * Notify observers that the start transition effect of the movie has been changed. - * - * @param aMovie This movie. - */ - void FireStartTransitionEffectChanged(CVedMovie* aMovie); - - /** - * Notify observers that the middle transition effect of video clip has been changed. - * - * @param aMovie This movie. - * @param aClip Video clip that was changed. - */ - void FireMiddleTransitionEffectChanged(CVedMovie* aMovie, TInt aIndex); - - /** - * Notify observers that the end transition effect of the movie has been changed. - * - * @param aMovie This movie. - */ - void FireEndTransitionEffectChanged(CVedMovie* aMovie); - - /** - * Notify observers that an audio clip has been added to movie. - * - * @param aMovie This movie. - * @param aIndex index of added clip. - */ - void FireAudioClipAdded(CVedMovie* aMovie, TInt aIndex); - - /** - * Notify observers that the adding of audio clip has failed. - * - * @param aMovie This movie. - * @param aError Error code. - */ - void FireAudioClipAddingFailed(CVedMovie* aMovie, TInt aError); - - /** - * Notify observers that the audio clip has been removed from movie. - * - * @param aMovie This movie. - * @param aInder Index of removed audio clip. - */ - void FireAudioClipRemoved(CVedMovie* aMovie, TInt aIndex); - - /** - * Notify observers that the audio clip indices has been changed. - * - * @param aMovie This movie. - * @param aOldIndex Old index of the audio clip. - * @param aNewIndex New index of the audio clip. - */ - void FireAudioClipIndicesChanged(CVedMovie* aMovie, TInt aOldIndex, TInt aNewIndex); - - /** - * Notify observers that the audio clip timings has been changed. - * - * @param aMovie This movie. - * @param aClip The audio clip that timings has been changed. - */ - void FireAudioClipTimingsChanged(CVedMovie* aMovie, CAudClip* aClip); - - /** - * Notify observers that output parameters has been changed. - * - * @param aMovie This movie. - * @param aClip The audio clip that timings has been changed. - */ - void FireMovieOutputParametersChanged(CVedMovie* aMovie); - - /** - * Notify observers that an audio or video clip dynamic level - * mark has been removed. - * - * @param aClip The audio clip that timings has been changed. - * @param aIndex Index of the removed dynamic level mark - */ - void FireDynamicLevelMarkRemoved(CAudClip& aClip, TInt aIndex); - - /** - * Notify observers that an audio or video clip dynamic level - * mark has been inserted. - * - * @param aClip The audio clip that timings has been changed. - * @param aMark Dynamic level mark that was inserted - * @param aIndex Index of the removed dynamic level mark - */ - void FireDynamicLevelMarkInserted(CAudClip& aClip, TAudDynamicLevelMark& aMark, TInt aIndex); - - /** - * Notify observers that the quality setting of the movie has been - * changed. - * - * @param aMovie This movie. - */ - void FireMovieQualityChanged(CVedMovie* aMovie); - - /** - * Notify observers that the movie has been reseted. - * - * @param aMovie This movie. - */ - void FireMovieReseted(CVedMovie* aMovie); - -private: // methods from base classes - void NotifyClipAdded(CAudSong& aSong, CAudClip& aClip, - TInt aIndex, TInt aTrackIndex); - void NotifyClipAddingFailed(CAudSong& aSong, TInt aError, TInt aTrackIndex); - void NotifyClipRemoved(CAudSong& aSong, TInt aIndex, TInt aTrackIndex); - void NotifyClipTimingsChanged(CAudSong& aSong, CAudClip& aClip); - void NotifyClipIndicesChanged(CAudSong& aSong, TInt aOldIndex, - TInt aNewIndex, TInt aTrackIndex); - void NotifySongReseted(CAudSong& aSong); - void NotifyClipReseted(CAudClip& aClip); - void NotifyDynamicLevelMarkInserted(CAudClip& aClip, - TAudDynamicLevelMark& aMark, TInt aIndex); - void NotifyDynamicLevelMarkRemoved(CAudClip& aClip, TInt aIndex); - - void NotifyAudioClipInfoReady(CVedAudioClipInfo& aInfo, TInt aError); - -private: - // Member variables - - // File server session. - RFs* iFs; - // Video clip array. - RPointerArray iVideoClipArray; - // Audio clip array. - RPointerArray iAudioClipInfoArray; - // Observer array of the movie class. - RPointerArray iObserverArray; - - // Start transition effect of the movie. - TVedStartTransitionEffect iStartTransitionEffect; - // End transition effect of the movie. - TVedEndTransitionEffect iEndTransitionEffect; - - // Add clip operation for movie. - CVedMovieAddClipOperation* iAddOperation; - // Video editor processor. - CMovieProcessor* iProcessor; - - // Quality - TVedMovieQuality iQuality; - // Format. - TVedVideoFormat iFormat; - // Quality set assigned for the movie - SVideoQualitySet iQualitySet; - // Video type, both internal enum and MIME-type. - TVedVideoType iVideoType; - TPtrC8 iVideoCodecMimeType; - // Resolution. - TSize iResolution; - // Maximum framerate. - TInt iMaximumFramerate; - // Random access point rate, in pictures per second. - TReal iRandomAccessRate; - // Standard video bitrate; can be used when encoding, but doesn't force to transcode input to this bitrate - TInt iVideoStandardBitrate; - - // Used when non-zero - TInt iVideoRestrictedBitrate; - TReal iVideoFrameRate; - // Segment interval in picture. In H.263 baseline this means number of non-empty GOB headers (1=every GOB has a header), - // in MB-based systems number of MBs per segment. Default is 0 == no segments inside picture - // Coding standard & used profile etc. limit the value. - TInt iSyncIntervalInPicture; - // Latest estimate for processing time of the movie - TTimeIntervalMicroSeconds iEstimatedProcessingTime; - - // Song - CAudSong* iAudSong; - - // Whether output parameters have been set using SetOutputParametersL - TBool iOutputParamsSet; - - // Video clip index stored for inserting video clip first to AudSong, then to Movie - TInt iAddedVideoClipIndex; - - // File name of the added clip - HBufC* iAddedVideoClipFilename; - - RFile* iAddedVideoClipFileHandle; - - // whether to notify observer about dynamic - // level marker changes - TBool iNotifyObserver; - - // Codec availability checker - CVedCodecChecker* iCodecChecker; - - // Volume gains for all video and audio clips - TInt iVolumeGainForAllVideoClips; - TInt iVolumeGainForAllAudioClips; - - // ETrue if specific dynamic level mark(s) or global volume settings should be applied (EFalse) - TBool iApplyDynamicLevelMark; - - // Quality settings manager - CVideoQualitySelector* iQualitySelector; - - MVedMovieProcessingObserver* iMovieProcessingObserver; - - friend class CVedMovieAddClipOperation; - friend class CVedVideoClip; - friend class CVedAudioClip; - friend class CVedVideoClipGenerator; - }; - - -/** - * Internal class for adding video and audio clips. - */ -class CVedMovieAddClipOperation : public CActive, - public MVedVideoClipInfoObserver - { -public: - /* - * Static constructor. - */ - static CVedMovieAddClipOperation* NewL(CVedMovie* aMovie); - - /* - * Notify that the video clip info is ready. - */ - void NotifyVideoClipInfoReady(CVedVideoClipInfo& aInfo, - TInt aError); - -protected: - /* - * From CActive. - * Standard active object RunL function. - */ - void RunL(); - - /* - * From CActive. - * Standard active object DoCancel function. - */ - void DoCancel(); - -private: - /* Default constructor */ - CVedMovieAddClipOperation(CVedMovie* aMovie); - - /* Standard Symbian OS two phased contructor */ - void ConstructL(); - - /* Destructor */ - ~CVedMovieAddClipOperation(); - - /* Called when video add operation has been completed */ - void CompleteAddVideoClipOperation(); - - -private: - // Pointer to movie class this operation is part of. - CVedMovieImp* iMovie; - - // Video clip to be added. - CVedVideoClip* iVideoClip; - // Does the video clip to be added own the generator? - TBool iIsVideoGeneratorOwnedByVideoClip; - - // Error code of add operation - TInt iError; - - friend class CVedMovieImp; - }; - - -#endif // __VEDMOVIEIMP_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/VedVideoClip.h --- a/videoeditorengine/vedengine/inc/VedVideoClip.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,410 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - - -#ifndef __VEDVIDEOCLIP_H__ -#define __VEDVIDEOCLIP_H__ - - -#include -#include - -#include "VedCommon.h" -#include "VedVideoClipInfo.h" - - -/* - * Forward declarations. - */ -class CVedMovieImp; -class CAudClip; - - -/** - * Individual video clip stored as a single bitstream. - * - * @see CVedMovie - */ -class CVedVideoClip : public CBase -{ -public: - - /* Constructors. */ - - static CVedVideoClip* NewL(CVedMovieImp* aMovie, const TDesC& aFileName, - TInt aIndex, CAudClip* aAudioClip, - MVedVideoClipInfoObserver& aObserver); - - static CVedVideoClip* NewL(CVedMovieImp* aMovie, - CVedVideoClipGenerator& aGenerator, TInt aIndex, - MVedVideoClipInfoObserver& aObserver, TBool aIsOwnedByVideoClip); - - static CVedVideoClip* NewL(CVedMovieImp* aMovie, RFile* aFileHandle, - TInt aIndex, CAudClip* aAudioClip, - MVedVideoClipInfoObserver& aObserver); - - /* Destructor. */ - - /** - * Destroys the object and releases all resources. - */ - virtual ~CVedVideoClip(); - - - /* Property methods. */ - - /** - * Returns a video clip info object to get detailed information about - * the original video clip. Note that the specified editing operations - * (for example, cutting or muting audio) do not - * affect the values returned by the info object. - * - * @return pointer to a video clip info instance - */ - CVedVideoClipInfo* Info(); - - /** - * Returns whether this video clip with the specified editing operations - * applied (for example, changing speed or muting) has an audio track or not. - * - * @return ETrue if clip has an audio track; - * EFalse otherwise - */ - TBool EditedHasAudio() const; - - - /* Movie methods. */ - - /** - * Returns the movie that this video clip is part of. - * - * @return movie - */ - CVedMovieImp* Movie(); - - /** - * Returns the index of this video clip in the movie. - * - * @return index of the clip - */ - TInt Index() const; - - /** - * Sets the index of this video clip in the movie. - * Panics with code EVideoClipIllegalIndex - * if the clip index is invalid. - * - * @param aIndex new index of this clip - */ - void SetIndex(TInt aIndex); - - - /* Effect methods. */ - - /** - * Returns the playback speed of this video clip. Playback speed is - * specified as parts per thousand of the normal playback speed. For example. - * 1000 means the normal speed, 750 means 75% of the normal speed, and so on. - * - * @return playback speed - */ - TInt Speed() const; - - /** - * Sets the playback speed of this video clip. Playback speed is - * specified as parts per thousand of the normal playback speed. For example. - * 1000 means the normal speed, 750 means 75% of the normal speed, and so on. - * Panics with EVideoClipIllegalSpeed if playback speed is - * illegal. - * - * @param aSpeed playback speed; must be between 1 and 1000 - */ - void SetSpeed(TInt aSpeed); - - /** - * Returns the color effect of this video clip. - * - * @return color effect - */ - TVedColorEffect ColorEffect() const; - - /** - * Sets the color effect of this video clip. - * - * @param aColorEffect color effect - */ - void SetColorEffect(TVedColorEffect aColorEffect); - - - /** - * Returns the color tone. - * - * @return color tone - */ - TRgb ColorTone() const; - - /** - * Sets the color tone. - * - * @param aColorTone color tone - */ - void SetColorTone(TRgb aColorTone); - - /* Audio methods. */ - - /** - * Returns whether this video clip can be muted or not (that is, - * whether the mute setting has any effect). For example, if - * this video clip has no audio track, it can never have audio - * even if the mute setting is false. - * - * @return ETrue if this video clip can be muted; - * EFalse otherwise - */ - TBool IsMuteable() const; - - /** - * Returns whether the audio track of this video clip is mute or not. - * This covers all mute cases: user muted, automatically muted (slow motion), - * and missing audio track. - * - * @return ETrue if the audio track is muted; - * EFalse otherwise - */ - TBool Muting() const; - - /** - * Returns whether the audio track of this video clip is explicitly - * muted by user or not. Returns ETrue also if there is no audio track at all. - * - * @return ETrue if the audio track is muted; - * EFalse otherwise - */ - TBool IsMuted() const; - - /** - * Returns whether the audio track of this video clip is normalized or not. - * - * @return ETrue if the audio track is normalized; - * EFalse otherwise - */ - TBool Normalizing() const; - - - /** - * Sets whether the audio track of this video clip is muted or not. - * - * @param aVolume ETrue to mute the audio track; - * EFalse not to mute the audio track - */ - void SetMuted(TBool aMuted); - - /** - * Sets whether the audio track of this video clip is normalized or not. - * - * @param aNormalizing ETrue to normalize the audio track, - * EFalse not to normalize - */ - void SetNormalizing(TBool aNormalizing); - - /** - * Inserts a dynamic level mark to a clip. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - * @param aMark mark to be added - * @return index of the mark inserted - */ - TInt InsertDynamicLevelMarkL(const TVedDynamicLevelMark& aMark); - - /** - * Removes a dynamic level mark in a clip. - * - * @param aIndex index of the removed mark in this clip - * @return ETrue if mark was removed, EFalse otherwise - */ - TBool RemoveDynamicLevelMark(TInt aIndex); - - /** - * Returns a dynamic level mark at the specified index - * If the index is illegal, the method panics with the code - * EIllegalDynamicLevelMarkIndex - * - * @return A dynamic level mark - */ - TVedDynamicLevelMark DynamicLevelMark(TInt aIndex) const; - - /** - * Returns the number of dynamic level marks - * - * @return The number of dynamic level mark - */ - TInt DynamicLevelMarkCount() const; - - /** - * Sets common volume gain for the clip. It is used to store - * the gain; the actual processing will be based on dynamic level - * marks which are set based on the gain value just before processing. - * Since global gain setting may affect the dynamic level mark, - * we need different variable to store the clip-specific gain also after the processing. - * I.e. dynamic level marks do not have effect to this value. - * - * @param aVolumeGain - */ - void SetVolumeGain(TInt aVolumeGain); - - /** - * Gets common volume gain for the clip. - * Since global gain setting may affect the dynamic level mark, - * we need different variable to store the clip-specific gain also after the processing. - * - * @param aVolumeGain - */ - TInt GetVolumeGain(); - - /* Timing methods. */ - - /** - * Returns the cut in time of this video clip in clip timebase. - * - * @return cut in time in microseconds in clip timebase - */ - TTimeIntervalMicroSeconds CutInTime() const; - - /** - * Sets the cut in time of this video clip in clip timebase. - * Panics with EVideoClipIllegalCutInTime if - * cut in time is illegal. - * - * @param aCutInTime cut in time in microseconds in clip timebase - */ - void SetCutInTime(TTimeIntervalMicroSeconds aCutInTime); - - /** - * Returns the cut out time of this video clip in clip timebase. - * - * @return cut out time in microseconds in clip timebase - */ - TTimeIntervalMicroSeconds CutOutTime() const; - - /** - * Sets the cut out time of this video clip in clip timebase. - * Panics with EVideoClipIllegalCutOutTime if - * cut out time is illegal. - * - * @param aCutOutTime cut out time in microseconds in clip timebase - */ - void SetCutOutTime(TTimeIntervalMicroSeconds aCutOutTime); - - /** - * Returns the start time of this video clip in movie timebase. - * - * @return start time in microseconds in movie timebase - */ - TTimeIntervalMicroSeconds StartTime() const; - - /** - * Returns the end time of this video clip in movie timebase. - * - * @return end time in microseconds in movie timebase - */ - TTimeIntervalMicroSeconds EndTime() const; - - /** - * Returns the duration of this video clip with the specified - * editing operations applied (for example, cutting - * and changing speed) - * - * @return duration in microseconds - */ - TTimeIntervalMicroSeconds EditedDuration() const; - - /** - * Update the audio clip timings. - */ - void UpdateAudioClip(); - -protected: - - -private: - /* - * Default contructor - */ - CVedVideoClip(CVedMovieImp* aMovie, CAudClip* aAudioClip); - - /* - * Symbian OS two phased constructor. - */ - void ConstructL(const TDesC& aFileName, TInt aIndex, - MVedVideoClipInfoObserver& aObserver); - - void ConstructL(CVedVideoClipGenerator& aGenerator, TInt aIndex, - MVedVideoClipInfoObserver& aObserver, TBool aIsOwnedByVideoClip); - - void ConstructL(RFile* aFileHandle, TInt aIndex, - MVedVideoClipInfoObserver& aObserver); - - -private: - // Member variables - - // Movie class this clip is part of. - CVedMovieImp* iMovie; - // Index of this clip in movie. - TInt iIndex; - // File of the video clip. - RFile iLockFile; - // Info class of this video clip. - CVedVideoClipInfo* iInfo; - - // Speed effect of this video clip. - TInt iSpeed; - // Color effect of this video clip. - TVedColorEffect iColorEffect; - // Transition effect of this video clip. - TVedMiddleTransitionEffect iMiddleTransitionEffect; - - // Cut in time of this video clip. - TTimeIntervalMicroSeconds iCutInTime; - // Cut out time of this video clip. - TTimeIntervalMicroSeconds iCutOutTime; - // Start time of this video clip. - TTimeIntervalMicroSeconds iStartTime; - - // Audio track of this video clip - CAudClip* iAudClip; - // Audio track muting: slow motion mutes it automatically, but switching back to normal speed - // should unmute it unless user has muted it on purpose. - TBool iUserMuted; - // color tone - TRgb iColorTone; - - TBool iLockFileOpened; - - friend class CVedMovieImp; - friend class CVedMovieAddClipOperation; -}; - - -#endif // __VEDVIDEOCLIP_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/VedVideoClipInfoGeneratedImp.h --- a/videoeditorengine/vedengine/inc/VedVideoClipInfoGeneratedImp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,193 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* Copyright (c) 2004, Nokia. All rights reserved. */ - -#ifndef __VEDVIDEOCLIPINFOGENERATEDIMP_H__ -#define __VEDVIDEOCLIPINFOGENERATEDIMP_H__ - - -#include - -#include "VedCommon.h" -#include "VedVideoClipInfo.h" -#include "VedVideoClipGenerator.h" - -/* - * Forward declarations. - */ -class CVedVideoClipInfoGeneratedOperation; -class CVedVideoClipGeneratedFrameToFrameAdapter; - -/** - * Utility class for getting information about generated video clips. - */ -class CVedVideoClipInfoGeneratedImp : public CVedVideoClipInfo - { -public: - CVedVideoClipInfoGeneratedImp(CVedVideoClipGenerator& aGenerator, TBool aOwnsGenerator); - - void ConstructL(MVedVideoClipInfoObserver& aObserver); - - /** - * Destroys the object and releases all resources. - */ - ~CVedVideoClipInfoGeneratedImp(); - - - /* General property methods. */ - - TPtrC DescriptiveName() const; - - TPtrC FileName() const; - - RFile* FileHandle() const; - - CVedVideoClipGenerator* Generator() const; - - TVedVideoClipClass Class() const; - - TVedVideoFormat Format() const; - - TVedVideoType VideoType() const; - - TSize Resolution() const; - - TBool HasAudio() const; - - TVedAudioType AudioType() const; - - TVedAudioChannelMode AudioChannelMode() const; - - TInt AudioSamplingRate() const; - - TTimeIntervalMicroSeconds Duration() const; - - - /* Video frame property methods. */ - - TInt VideoFrameCount() const; - - TTimeIntervalMicroSeconds VideoFrameStartTimeL(TInt aIndex); - - TTimeIntervalMicroSeconds VideoFrameEndTimeL(TInt aIndex); - - TTimeIntervalMicroSeconds VideoFrameDurationL(TInt aIndex); - - TInt VideoFrameSizeL(TInt aIndex); - - TBool VideoFrameIsIntraL(TInt aIndex); - - TInt GetVideoFrameIndexL(TTimeIntervalMicroSeconds aTime); - - - void SetTranscodeFactor(TVedTranscodeFactor aFactor); - - TVedTranscodeFactor TranscodeFactor(); - - TBool IsMMSCompatible(); - - /* Frame methods. */ - - void GetFrameL(MVedVideoClipFrameObserver& aObserver, - TInt aIndex, - TSize* const aResolution, - TDisplayMode aDisplayMode, - TBool aEnhance, - TInt aPriority); - - void CancelFrame(); - -private: - // Member variables - - // Get audio info operation. - CVedVideoClipInfoGeneratedOperation* iInfoOperation; - // Flag to indicate then info is available - TBool iReady; - // Frame generator - CVedVideoClipGenerator* iGenerator; - TBool iOwnsGenerator; - - CVedVideoClipGeneratedFrameToFrameAdapter* iAdapter; - - TVedTranscodeFactor iTFactor; - friend class CVedVideoClipInfoGeneratedOperation; - }; - - - -class CVedVideoClipGeneratedFrameToFrameAdapter : public CBase, public MVedVideoClipGeneratorFrameObserver - { -public: - CVedVideoClipGeneratedFrameToFrameAdapter(CVedVideoClipInfo& aInfo); - void NotifyVideoClipGeneratorFrameCompleted(CVedVideoClipGenerator& aInfo, - TInt aError, - CFbsBitmap* aFrame); -private: - MVedVideoClipFrameObserver* iFrameObserver; - CVedVideoClipInfo& iInfo; - - friend class CVedVideoClipInfoGeneratedImp; - }; - - -/** - * Internal class for asynchronous construction of info class. - */ -class CVedVideoClipInfoGeneratedOperation : public CActive - { -public: - /* Static constructor */ - static CVedVideoClipInfoGeneratedOperation* NewL(CVedVideoClipInfoGeneratedImp* aInfo, - MVedVideoClipInfoObserver& aObserver); -protected: - /* - * From CActive - * Standard active object RunL - */ - void RunL(); - - /* - * From CActive - * Standard active object DoCancel - */ - void DoCancel(); - -private: - /* Default constructor */ - CVedVideoClipInfoGeneratedOperation(CVedVideoClipInfoGeneratedImp* aInfo, - MVedVideoClipInfoObserver& aObserver); - /* Standard Symbian OS two phased constructor */ - void ConstructL(); - /* Destructor */ - ~CVedVideoClipInfoGeneratedOperation(); - -private: - // Class to contain video clip info. - CVedVideoClipInfoGeneratedImp* iInfo; - // Observer of video clip info operation. - MVedVideoClipInfoObserver* iObserver; - - friend class CVedVideoClipInfoGeneratedImp; - }; - - -#endif // __VEDVIDEOCLIPINFOGENERATEDIMP_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/VedVideoClipInfoImp.h --- a/videoeditorengine/vedengine/inc/VedVideoClipInfoImp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,453 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __VEDVIDEOCLIPINFOIMP_H__ -#define __VEDVIDEOCLIPINFOIMP_H__ - - -#include - -#include "movieprocessor.h" -#include "VedCommon.h" -#include "VedVideoClipInfo.h" - -#include "AudObservers.h" - -/* - * Forward declarations. - */ -class CFbsBitmap; // cannot include bitmap.h since video processor includes - // this file and fails to compile due to a strange compiler error - // "operator delete must return type void" if bitmap.h - // is included - -class CVedVideoClipInfo; -class TVedVideoFrameInfo; -class CVedVideoClipInfoOperation; -class CVedVideoClipFrameOperation; -class CAudClipInfo; -class CVedVideoClip; - - -/** - * Utility class for getting information about video clip files. - */ -class CVedVideoClipInfoImp : public CVedVideoClipInfo - { -public: - - static CVedVideoClipInfo* NewL(CAudClipInfo* aAudClipInfo, - const TDesC& aFileName, MVedVideoClipInfoObserver& aObserver); - /** - * Destroys the object and releases all resources. - */ - ~CVedVideoClipInfoImp(); - - - /* General property methods. */ - - - TPtrC DescriptiveName() const; - - /** - * Returns the file name of the clip. Panics if info - * is not yet ready for reading. - * - * @return file name of the clip - */ - TPtrC FileName() const; - - CVedVideoClipGenerator* Generator() const; - - TVedVideoClipClass Class() const; - - /** - * Returns the video format of the clip. Panics if info - * is not yet ready for reading. - * - * @return video format of the clip - */ - TVedVideoFormat Format() const; - - /** - * Returns the video type of the clip. Panics if info - * is not yet ready for reading. - * - * @return video type of the clip - */ - TVedVideoType VideoType() const; - - /** - * Returns the resolution of the clip. Panics if info - * is not yet ready for reading. - * - * @return resolution of the clip - */ - TSize Resolution() const; - - /** - * Returns whether this video clip has an audio track or not. - * Panics if info is not yet ready for reading. - * - * @return ETrue if clip has an audio track; - * EFalse otherwise - */ - TBool HasAudio() const; - - /** - * Returns the audio type of the clip audio track. Panics if info - * is not yet ready for reading. - * - * @return audio type of the clip audio track - */ - TVedAudioType AudioType() const; - - /** - * Returns the channel mode of the audio if applicable. - * - * @return channel mode - */ - TVedAudioChannelMode AudioChannelMode() const; - - /** - * Returns the sampling rate in kilohertz. - * - * @return sampling rate - */ - TInt AudioSamplingRate() const; - - /** - * Returns the duration of the clip in microseconds. Panics if info - * is not yet ready for reading. - * - * @return duration of the clip - */ - TTimeIntervalMicroSeconds Duration() const; - - - /* Video frame property methods. */ - - /** - * Returns the number of video frames in this clip. Panics if info - * is not yet ready for reading. - * - * @return number of video frames in this clip - */ - TInt VideoFrameCount() const; - - /** - * Generates video frame info that is needed in VideoFrame API functions. - * - * @return error code - */ - TInt GenerateVideoFrameInfoArrayL(); - - /** - * Returns the start time of the video frame at the specified index. - * Panics if info is not yet ready for reading or the index is illegal. - * - * @param aIndex index - * - * @return start time of the video frame at the specified index in microseconds - */ - TTimeIntervalMicroSeconds VideoFrameStartTimeL(TInt aIndex); - - /** - * Returns the end time of the video frame at the specified index. - * Panics if info is not yet ready for reading or the index is illegal. - * - * @param aIndex index - * - * @return end time of the video frame at the specified index in microseconds - */ - TTimeIntervalMicroSeconds VideoFrameEndTimeL(TInt aIndex); - - /** - * Returns the duration of the video frame at the specified index. - * Panics if info is not yet ready for reading or the index is illegal. - * - * @param aIndex index - * - * @return duration of the video frame at the specified index in microseconds - */ - TTimeIntervalMicroSeconds VideoFrameDurationL(TInt aIndex); - - /** - * Returns the size of the video frame at the specified index. - * Panics if info is not yet ready for reading or the index is illegal. - * - * @param aIndex index - * - * @return size of the video frame at the specified index in bytes - */ - TInt VideoFrameSizeL(TInt aIndex); - - /** - * Returns whether the video frame at the specified index is an intra - * frame or not. Panics if info is not yet ready for reading or - * the index is illegal. - * - * @param aIndex index - * - * @return ETrue, if the video frame at the specified index is an - * intra frame; EFalse, otherwise - */ - TBool VideoFrameIsIntraL(TInt aIndex); - - /** - * Returns the video frame index at the specified time. Panics if info is not yet - * ready for reading or the time is illegal. - * - * @param aTime time - * - * @return video frame index at the specified time - */ - TInt GetVideoFrameIndexL(TTimeIntervalMicroSeconds aTime); - - - /* Frame methods. */ - - void GetFrameL(MVedVideoClipFrameObserver& aObserver, - TInt aIndex, - TSize* const aResolution, - TDisplayMode aDisplayMode, - TBool aEnhance, - TInt aPriority); - - void CancelFrame(); - - void SetTranscodeFactor(TVedTranscodeFactor aFactor); - - TVedTranscodeFactor TranscodeFactor(); - - /** - * Returns whether video clip is MMSCompatible. - * - * @return ETrue if compatible with MMS - */ - TBool IsMMSCompatible(); - - static CVedVideoClipInfo* NewL(CAudClipInfo* aAudClipInfo, - RFile* aFileHandle, MVedVideoClipInfoObserver& aObserver); - - RFile* FileHandle() const; - -private: - CVedVideoClipInfoImp(CAudClipInfo* aAudClipInfo); - - void ConstructL(const TDesC& aFileName, - MVedVideoClipInfoObserver& aObserver); - - void ConstructL(RFile* aFileHandle, - MVedVideoClipInfoObserver& aObserver); - -private: - // Member variables - - // Get audio info operation. - CVedVideoClipInfoOperation* iInfoOperation; - // Flag to indicate then info is available - TBool iReady; - - // Filename of the video clip. - HBufC* iFileName; - - // File handle of the video clip - RFile* iFileHandle; - - // Vídeo format. - TVedVideoFormat iFormat; - // Video type/codec. - TVedVideoType iVideoType; - // Resolution of video clip. - TSize iResolution; - // Duration of the video clip. - TTimeIntervalMicroSeconds iDuration; - // Frame count of video - TInt iVideoFrameCount; - // Array of frame information. - TVedVideoFrameInfo* iVideoFrameInfoArray; - - // Operation to retrieve thumbnail of video clip. - CVedVideoClipFrameOperation* iFrameOperation; - - // Transcode factor - TVedTranscodeFactor iTimeFactor; - - // Is the frame info array ready - TBool iVideoFrameInfoArrayReady; - - // Flag for audio clip info ownership - TBool iAudClipInfoOwnedByVideoClipInfo; - - // Whether the video clip info is part of a video clip or just the info - TBool iVideoClipIsStandalone; - - // Audio clip info. - CAudClipInfo* iAudClipInfo; - - // These are got from iAudClipInfo - - // Audio type/codec. - //TVedAudioType iAudioType; - // Following members are only used for AAC audio - // Channel mode - //TVedAudioChannelMode iAudioChannelMode; - // Sampling rate - //TInt iAudioSamplingRate; - - friend class CVedVideoClipInfoOperation; - friend class CVedVideoClipFrameOperation; - friend class CVedVideoClipInfo; - }; - - -/** - * Internal class for storing information about video frames. - */ -class TVedVideoFrameInfo - { -public: - /** Frame start time in MILLISECONDS (not microseconds). */ - TInt iStartTime; - - /** Frame size in bytes. */ - TInt iSize; - - /** Frame information flags. */ - TInt8 iFlags; - }; - -#define KVedVideoFrameInfoFlagIntra (1 << 0) - - -/** - * Internal class for reading information from a video clip file. - * Also implements a simple active object to notify the video clip info - * observer when reading has been completed. - */ -class CVedVideoClipInfoOperation : public CActive, MAudClipInfoObserver - { -public: - /* Static constructor */ - static CVedVideoClipInfoOperation* NewL(CVedVideoClipInfoImp* aInfo, - MVedVideoClipInfoObserver& aObserver); -protected: - /* - * From CActive - * Standard active object RunL - */ - void RunL(); - - /* - * From CActive - * Standard active object DoCancel - */ - void DoCancel(); - -private: - /* Default constructor */ - CVedVideoClipInfoOperation(CVedVideoClipInfoImp* aInfo, - MVedVideoClipInfoObserver& aObserver); - /* Standard Symbian OS two phased constructor */ - void ConstructL(); - /* Destructor */ - ~CVedVideoClipInfoOperation(); - -private: // functions from base classes - - /* From MAudClipInfoObserver */ - void NotifyClipInfoReady(CAudClipInfo& aInfo, TInt aError); -private: - // Class to contain video clip info. - CVedVideoClipInfoImp* iInfo; - // Observer of video clip info operation. - MVedVideoClipInfoObserver* iObserver; - // Error code from prosessor. - TInt iMovieProcessorError; - // This flag tells us whether we're reading the audio clip info - TBool iGettingAudio; - - friend class CVedVideoClipInfoImp; - }; - -/** - * Internal class for generating a frame from a video clip file. - */ -class CVedVideoClipFrameOperation : public CActive - { -public: - /* Static constructor */ - static CVedVideoClipFrameOperation* NewL(CVedVideoClipInfoImp* iInfo); - -protected: - /* - * From CActive - * Standard active object RunL - */ - void RunL(); - - /* - * From CActive - * Standard active object DoCancel - */ - void DoCancel(); - -private: - /* Default constructor */ - CVedVideoClipFrameOperation(CVedVideoClipInfoImp* iInfo); - /* Standard Symbian OS two phased constructor */ - void ConstructL(); - /* Destructor */ - ~CVedVideoClipFrameOperation(); - - /* - * Start frame operation. - * - * @aparam aObserver Observer of thumbnail operation. - * @aparam aIndex Index of frame that is converted to thumbnail. - * @aparam aResolution Wanted resolution of thumbnail. - * @aparam aPriority Priority of active object. - */ - void StartL(MVedVideoClipFrameObserver& aObserver, - TInt aIndex, TSize* const aResolution, - TDisplayMode aDisplayMode, TBool aEnhance, TInt aPriority); - -private: - // Pointer to info class this thumbnail operation is part of. - - CVedVideoClipInfoImp* iInfo; - // Index of the wanted frame. - TInt iIndex; - - // Observer of the thumbnail operation. - MVedVideoClipFrameObserver* iObserver; - - TVedTranscodeFactor iFactor; - - TBool iThumbRequestPending; - - CMovieProcessor* iProcessor; - - friend class CVedVideoClipInfoImp; - }; - -#endif // __VEDVIDEOCLIPINFOIMP_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/vedaudiosettings.h --- a/videoeditorengine/vedengine/inc/vedaudiosettings.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for audio related settings/constants. -* -*/ - - -#ifndef __VEDAUDIOSETTINGS_H__ -#define __VEDAUDIOSETTINGS_H__ - -const TUint KVedAudioFramesInSample = 5; // number of frames in one AMR audio sample -const TUint KVedMinAMRFrameSize = 13; // smallest AMR frame size -const TUint KVedMaxAMRFrameSize = 32; // largest AMR frame size -const TUint KVedAMRConversionBitrate = 12200; // default target bitrate when converting to AMR -const TUint KVedAACConversionBitrate = 48000; // default target bitrate when converting to AAC -const TUint KVedSilentAACFrameSize = 6; // silent AAC frame size -const TUint KVedAverageAACFrameSize = 384; // average AAC frame size - -// AMR bitrates -#define KVedAMRBitrate4_75k (4750) -#define KVedAMRBitrate5_15k (5150) -#define KVedAMRBitrate5_90k (5900) -#define KVedAMRBitrate6_70k (6700) -#define KVedAMRBitrate7_40k (7400) -#define KVedAMRBitrate7_95k (7950) -#define KVedAMRBitrate10_2k (10200) -#define KVedAMRBitrate12_2k (12200) - -// AAC samplerates -#define KVedAudioSamplingRate8k (8000) -#define KVedAudioSamplingRate11_025k (11025) -#define KVedAudioSamplingRate12k (12000) -#define KVedAudioSamplingRate16k (16000) -#define KVedAudioSamplingRate22_050k (22050) -#define KVedAudioSamplingRate24k (24000) -#define KVedAudioSamplingRate32k (32000) -#define KVedAudioSamplingRate44_1k (44100) -#define KVedAudioSamplingRate48k (48000) -#define KVedAudioSamplingRate64k (64000) -#define KVedAudioSamplingRate88_2k (88200) -#define KVedAudioSamplingRate96k (96000) - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/vedcodecchecker.h --- a/videoeditorengine/vedengine/inc/vedcodecchecker.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for vedcodecchecker.cpp. -* -*/ - - -#ifndef __VEDCODECCHECKER_H__ -#define __VEDCODECCHECKER_H__ - - -// FORWARD DECLARATIONS -class CVedVideoClip; - -// CONSTANTS -//WVGA task -//const TInt KNumResolutions = 6; -//const TInt KNumCodecs = 14; -const TInt KNumResolutions = 7; -const TInt KNumCodecs = 18; - -enum TResolution - { - EResolutionSubQCIF = 0, - EResolutionQCIF, - EResolutionCIF, - EResolutionQVGA, - EResolutionVGA16By9, - EResolutionVGA, - EResolutionWVGA, - EResolutionUnsupported - }; - -enum TCodec - { - ECodecH263BPLevel10 = 0, - ECodecH263BPLevel45, - ECodecMPEG4VSPLevel0, - ECodecMPEG4VSPLevel0B, - ECodecMPEG4VSPLevel1, - ECodecMPEG4VSPLevel2, - ECodecMPEG4VSPLevel3, - ECodecMPEG4VSPLevel4, - ECodecAVCBPLevel1, - ECodecAVCBPLevel1B, - ECodecAVCBPLevel1_1, - ECodecAVCBPLevel1_2, - ECodecAVCBPLevel1_3, - ECodecAVCBPLevel2, - //WVGA task - ECodecAVCBPLevel2_1, - ECodecAVCBPLevel2_2, - ECodecAVCBPLevel3, - ECodecAVCBPLevel3_1, - ECodecUnsupported - }; - -class CVedCodecChecker : public CBase - { - -public: // New functions - - /* Constructors. */ - static CVedCodecChecker* NewL(); - static CVedCodecChecker* NewLC(); - - /* Destructor. */ - virtual ~CVedCodecChecker(); - - /** - * Returns whether the given input clip is supported, - * i.e. if it can be decoded or not - * - * @param aClip Video clip - * @return TBool Is supported ? - */ - TBool IsSupportedInputClipL(CVedVideoClip *aClip); - - /** - * Returns whether the given output format is supported, - * i.e. if it can be encoded or not - * - * @param aMimeType Codec MIME type - * @param aResolution Desired resolution - * @return TBool Is supported ? - */ - TBool IsSupportedOutputFormatL(const TPtrC8& aMimeType, TSize aResolution); - -private: // Private methods - - /** - * By default Symbian OS constructor is private. - */ - void ConstructL(); - - /** - * C++ default constructor - */ - CVedCodecChecker(); - - /** - * Determines supported input formats using CTRTranscoder - */ - void GetSupportedInputFormatsL(); - - /** - * Determines supported output formats using CTRTranscoder - */ - void GetSupportedOutputFormatsL(); - - /** - * Maps resolution from TSize to TResolution - * - * @param aResolution Resolution to map - * @return TResolution - */ - TResolution MapResolution(TSize aResolution); - - /** - * Maps profile-level-id to TCodec - * - * @param aProfileLevelId id to map - * @return TCodec Codec - */ - TCodec MapProfileLevelId(TInt aProfileLevelId); - - /** - * Parse codec MIME type - * - * @param aMimeType MIME to parse - * @param aResolution resolution to be used - * @return TCodec Codec - */ - TCodec ParseMimeType(const TPtrC8& aMimeType, TSize aResolution); - - /** - * Maps AVC level to TCodec - * - * @param aLevel Level to map - * @return TCodec Codec - */ - TCodec MapAVCLevel(TInt aLevel); - -private: // Data - - // table of supported input resolutions for each codec - TBool* iInputCodecsAndResolutions[KNumCodecs]; - - // table of supported output resolutions for each codec - TBool* iOutputCodecsAndResolutions[KNumCodecs]; - - // have output formats been checked ?? - TBool iOutputFormatsChecked; - -}; - -#endif // __VEDCODECCHECKER_H__ - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/vedproctimeestimate.h --- a/videoeditorengine/vedengine/inc/vedproctimeestimate.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __VEDPROCTIME_H__ -#define __VEDPROCTIME_H__ - - -const TReal KVedBitstreamProcessingFactor = 0.065; // 64 kbps H.263 -const TInt KVedBitstreamProcessingFactorBitrate = 64000; -const TReal KVedCompressedDomainTranscodingFactor = 0.4;// QCIF MPEG-4 64 kbps to H.263 64 kbps - -#endif // __VEDPROCTIME_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/vedqualitysettingsapi.h --- a/videoeditorengine/vedengine/inc/vedqualitysettingsapi.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,152 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEDQUALITYSETTINGSAPI_H__ -#define __VEDQUALITYSETTINGSAPI_H__ - -#include -#include "imagingconfigmanager.h" - - - -const TUint KQSMaxShortStringLength = 16; -const TUint KQSMaxLongStringLength = 256; - - - -/* - * Video quality set structure - */ -struct SVideoQualitySet - { - public: - // Video aspect ratio: normal means one of the standard resolutions like QCIF, QVGA, CIF, VGA, if something else, like 16:9 - TBool iVideoAspectRatioNormal; - // Video file format mime type, e.g. "video/3gpp" - TText8 iVideoFileMimeType[KQSMaxShortStringLength]; - // Video codec mime type, e.g. "video/mp4v-es" - TText8 iVideoCodecMimeType[KQSMaxLongStringLength]; - // Video picture width in pixels (luminance) - TInt iVideoWidth; - // Video picture height in pixels (luminance) - TInt iVideoHeight; - // Video framerate in fps - TReal iVideoFrameRate; - // Video bitrate in bps - TInt iVideoBitRate; - // Random access point rate, in pictures per second. For example, to request a random access point every ten seconds, set the value to 0.1 - TReal iRandomAccessRate; - // Audio codec FourCC, e.g. " AMR" - TText8 iAudioFourCCType[KQSMaxShortStringLength]; - // Audio bitrate in bps - TInt iAudioBitRate; - // Audio sampling rate in Hz - TInt iAudioSamplingRate; - // Number of audio channels; in practice mono(1) vs stereo(2) - TInt iAudioChannels; - }; - - -/* - * API class for getting a quality set for a given level or given resolution - */ -class CVideoQualitySelector : public CBase - { - public: - /* - * Enumeration for nominal video quality levels. Client must use these enumerations to get quality sets. - * However, if NumberOfQualityLevels() below indicates there are more than ENumberOfNominalLevels, client - * can use values in-between the nominal values to get set for some other quality level. - * It is however up to the implementation of the API to map such intermediate values to actual levels - */ - enum TVideoQualityLevels - { - // client can try asking values in between these but the class may round the values depending on the availability - EVideoQualityMin = 0, // if there are several MMS compatible settings, EVideoQualityMMS is not the lowest. However level cannot go below this value - EVideoQualityMMS = 10, // use this when MMS compatible settings are needed - EVideoQualityNormal = 20, // use this when normal quality settings are needed, i.e. typically higher quality than MMS, but possibly not the highest still - EVideoQualityHigh = 30, // use this when highest possible quality settings are needed - EVideoQualityNominalGranularity = 10, - ENumberOfNominalLevels = 3 - }; - - public: - /* - * Create new CVideoQualitySelector object - */ - static CVideoQualitySelector* NewL(); - - static CVideoQualitySelector* NewLC(); - - /* - * Destructor - */ - ~CVideoQualitySelector(); - - /* - * Get number of defined quality levels. This is always at least ENumberOfNominalLevels but can be higher - */ - TInt NumberOfQualityLevels(); - /* - * Get quality set associated with the given level. The level should be between EVideoQualityHigh and EVideoQualityMin. - * One the defined nominal levels should be used especially if NumberOfQualityLevels() == ENumberOfNominalLevels. - * If there is no set associated with given intermediate level, then set from a nearest level is returned. - */ - void GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel ); - /* - * Get quality set associated with the given level. Otherwise the same as above but if aAspectRatioWide == ETrue, - * tries to find 16:9 aspect ratio settings, otherwise returns a set from the normal aspect ratio as above. - */ - void GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel, TBool aAspectRatioWide ); - /* - * Get quality set associated with the given video resolution. Leaves if there is no defined set for the resolution. - * E.g. if product configuration prefers QVGA over CIF, but client asks for CIF, this function leaves. The CIF settings - * can then be requested using the MIME-type - */ - void GetVideoQualitySetL( SVideoQualitySet& aSet, const TSize& aVideoResolution ); - /* - * Get quality set associated with the given video codec MIME-type. Leaves if there is no defined set for the MIME-type. - */ - void GetVideoQualitySetL( SVideoQualitySet& aSet, const TPtrC8& aVideoCodecMimeType ); - - private: - /* - * Default constructor - */ - CVideoQualitySelector(); - - /* - * Actual constructor - */ - void ConstructL(); - - /* - * Copies the values from the source set to the target set - */ - void MapQualitySet( SVideoQualitySet& aTargetSet, TVideoQualitySet& aSourceSet ); - - private: // Data - - CImagingConfigManager* iConfigManager; - - CArrayFixFlat* iQualityLevels; - - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/vedqualitysettingsapi.inl --- a/videoeditorengine/vedengine/inc/vedqualitysettingsapi.inl Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEDQUALITYSETTINGSAPI_INL__ -#define __VEDQUALITYSETTINGSAPI_INL__ - -#include "vedqualitysettingsvariation.h" - - -inline TInt TVideoQualitySelector::NumberOfQualityLevels() - { - return ENumberOfQualitySets; - } - -inline void TVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel, TBool aAspectRatioWide ) - { - if ( !aAspectRatioWide ) - { - GetVideoQualitySetL( aSet, aLevel ); - } - else - { - // NOT READY - TInt nrOfWideSets = ENumberOfWideQualitySets; - if ( nrOfWideSets == 0 ) - { - User::Leave( KErrNotSupported ); - } - - switch ( aLevel ) - { - case EVideoQualityMMS : - { - aSet = KVideoQualitySetsWide[EQualityLow]; - } - break; - case EVideoQualityNormal : - { - if ( nrOfWideSets > 1 ) - { - aSet = KVideoQualitySetsWide[EQualityMedium]; - } - else - { - aSet = KVideoQualitySetsWide[EQualityLow]; - } - } - break; - case EVideoQualityHigh : - { - if ( nrOfWideSets > 2 ) - { - aSet = KVideoQualitySetsWide[EQualityHigh]; - } - else if ( nrOfWideSets > 1 ) - { - aSet = KVideoQualitySetsWide[EQualityMedium]; - } - else - { - aSet = KVideoQualitySetsWide[EQualityLow]; - } - } - break; - default: - aSet = KVideoQualitySetsWide[EQualityLow]; - } - } - } - - -inline void TVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel ) - { - - switch ( aLevel ) - { - case EVideoQualityMMS : - { - aSet = KVideoQualitySets[EQualityLow]; - } - break; - case EVideoQualityNormal : - { - aSet = KVideoQualitySets[EQualityMedium]; - } - break; - case EVideoQualityHigh : - { - aSet = KVideoQualitySets[EQualityHigh]; - } - break; - default: - if ( (aLevel > EVideoQualityHigh) || (aLevel < EVideoQualityMin) ) - { - User::Leave( KErrArgument ); - } - TInt moreSetsThanNominal = ENumberOfQualitySets - ENumberOfNominalLevels; - if ( moreSetsThanNominal ) - { - // there are also qualities in-between the nominal levels - if ( aLevel < EVideoQualityMMS ) - { - // even lower than the default MMS; no more than 1 step granularity there (atm) - aSet = KVideoQualitySets[EQualityLegacy]; - } - else if ( aLevel < EQualityMedium ) - { - // between Low and Medium - TInt nrSetsBetweenMediumAndLow = EQualityMedium - EQualityLow - 1; - if ( nrSetsBetweenMediumAndLow > 0 ) - { - // no better granularity yet - aSet = KVideoQualitySets[EQualityMedium-1]; - } - else - { - // there are no specified quality in that range, give medium - aSet = KVideoQualitySets[EQualityMedium]; - } - } - else - { - // between Medium and High - TInt nrSetsBetweenHighAndMedium = EQualityHigh - EQualityMedium - 1; - if ( nrSetsBetweenHighAndMedium > 0 ) - { - // no better granularity yet - aSet = KVideoQualitySets[EQualityHigh-1]; - } - else - { - // there are no specified quality in that range, give medium - aSet = KVideoQualitySets[EQualityMedium]; - } - } - } - else - { - // round to the closest nominal level - aSet = KVideoQualitySets[(aLevel-(EVideoQualityNominalGranularity/2))/EVideoQualityNominalGranularity]; - } - } - } - -inline void TVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, const TSize& aVideoResolution ) - { - // go through the qualities until a match is found. If several matches, pick the 1st one - TInt candidate = -1; - TInt i; - for ( i = ENumberOfQualitySets-1; i >= 0; i-- ) // searches from up to down to find higher quality first - { - if ( (KVideoQualitySets[i].iVideoWidth == aVideoResolution.iWidth) && (KVideoQualitySets[i].iVideoHeight == aVideoResolution.iHeight) ) - { - // we've found a set which matches with the requested size - candidate = i; - if ( (i == EQualityLow) || (i == EQualityMedium) || (i == EQualityHigh) ) - { - // we've found a set which matches also with preferred qualities - break; - } - } - } - if ( candidate >= 0 ) - { - aSet = KVideoQualitySets[candidate]; - } - else - { - User::Leave( KErrNotSupported ); - } - } - -inline void TVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, const TPtrC8& aVideoCodecMimeType ) - { - TPtrC8 settingsMimeType; - - TInt i; - for ( i = ENumberOfQualitySets-1; i >= 0; i-- ) // searches from up to down to find higher quality first - { - settingsMimeType.Set(TPtrC8(KVideoQualitySets[i].iVideoCodecMimeType)); - if ( settingsMimeType.MatchF( (const TDesC8& )aVideoCodecMimeType ) != KErrNotFound ) - { - // found - aSet = KVideoQualitySets[i]; - return; - } - } - User::Leave( KErrNotSupported ); - } - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/vedqualitysettingsvariation.h --- a/videoeditorengine/vedengine/inc/vedqualitysettingsvariation.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,212 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEDQUALITYSETTINGSVARIATION_H__ -#define __VEDQUALITYSETTINGSVARIATION_H__ - - -#include "vedqualitysettingsapi.h" - -#if 0 - -/* - * This is a sample configuration - */ - -/* - * Enumerations for video levels. - * Each configuration MUST have the following enumerations defined. They can be overlapping, but they must exist. Otherwise the compiling of - * of video applications will fail. - */ -enum TVideoInternalQualityLevels - { - EQualityLegacy = 0, // If a set exist that is lower than the default MMS, e.g. subQCIF - EQualityLow = 0, // Low / MMS quality - EQualityMedium = 1, // Medium/normal quality - EQualityHigh = 2, // Highest quality - ENumberOfQualitySets = 3 - }; - -/* - * Definition of video quality sets. - * Each configuration MUST have the following variable with size ENumberOfQualitySets - * For explanation of the members, please see vedqualitysettingsapi.h - */ -static const SVideoQualitySet KVideoQualitySets[ENumberOfQualitySets] = - { - //a sample set for MMS == EQualityLow - { ETrue, "video/3gpp", "video/H263-2000", 176, 144, 15.0, 60000, 0.2, " AMR", 12200, 8000, 1 }, - // other sets for other levels - }; - - -#endif - - - - - - - - - -/* - * Actual variations of video settings for different configurations - */ - -#ifdef NCP_COMMON_TEFLON_FAMILY -// Quality sets for - -enum TVideoInternalQualityLevels - { - EQualityLegacy = 0, - EQualityLow = 1, - EQualityMedium = 2, - EQualityHigh = 6, - ENumberOfQualitySets = 7, - ENumberOfWideQualitySets = 0 - }; - -static const SVideoQualitySet KVideoQualitySets[ENumberOfQualitySets] = - { - // Legacy subQCIF support - { ETrue, "video/3gpp", "video/H263-2000", 128, 96, 15.0, 60000, 0.2, " AMR", 12200, 8000, 1 }, - // MMS - { ETrue, "video/3gpp", "video/H263-2000", 176, 144, 15.0, 60000, 0.2, " AMR", 12200, 8000, 1 }, - // Normal - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=2", 320, 240, 15.0, 512000, 0.5, " AAC", 48000, 16000, 1 }, - // Normal+ - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=3", 320, 240, 30.0, 1024000, 0.5, " AAC", 48000, 16000, 1 }, - // CIF settings in case of CIF input is dominating, to avoid transcoding to QVGA - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=2", 352, 288, 15.0, 512000, 0.5, " AAC", 48000, 16000, 1 }, - // HighMinus; level 4a - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=4", 640, 480, 15.0, 2048000, 1.0, " AAC", 96000, 48000, 1 }, - // High; level 4a - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=4", 640, 480, 30.0, 3072000, 1.0, " AAC", 96000, 48000, 1 } - }; - -static const SVideoQualitySet KVideoQualitySetsWide[1] = {{ EFalse, "", "", 0, 0, 0.0, 0, 0, "", 0, 0, 0 }}; - -#else -// Quality sets e.g. for , WINSCW - -#ifndef SPP_VSW_VIDEOEDITORENGINE_AVC_EDITING -enum TVideoInternalQualityLevels - { - EQualityLegacy = 0, - EQualityLow = 1, - EQualityMedium = 2, - EQualityHigh = 3, - ENumberOfQualitySets = 5, - ENumberOfWideQualitySets = 4 - }; - -static const SVideoQualitySet KVideoQualitySets[ENumberOfQualitySets] = - { - // Legacy subQCIF support - { ETrue, "video/3gpp", "video/H263-2000", 128, 96, 15.0, 60000, 0.2, " AMR", 12200, 8000, 1 }, - // MMS - { ETrue, "video/3gpp", "video/H263-2000", 176, 144, 15.0, 60000, 0.2, " AMR", 12200, 8000, 1 }, - // Normal; H.263 level 45 - { ETrue, "video/3gpp", "video/H263-2000; profile=0; level=45", 176, 144, 15.0, 124000, 0.2, " AMR", 12200, 8000, 1 }, - // High - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=2", 320, 240, 15.0, 512000, 0.5, " AAC", 72000, 48000, 1 }, - // High+ - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=2", 352, 288, 15.0, 512000, 0.5, " AAC", 72000, 48000, 1 }, - }; - -static const SVideoQualitySet KVideoQualitySetsWide[ENumberOfWideQualitySets] = - { - // Legacy - { ETrue, "video/3gpp", "video/H263-2000", 128, 96, 15.0, 60000, 0.2, " AMR", 12200, 8000, 1 }, - // Low - { EFalse, "video/mp4", "video/mp4v-es; profile-level-id=4", 640, 352, 10.0, 256000, 1.0, " AAC", 72000, 48000, 1 }, - // Medium - { EFalse, "video/mp4", "video/mp4v-es; profile-level-id=4", 640, 352, 15.0, 1024000, 1.0, " AAC", 72000, 48000, 1 }, - // High - { EFalse, "video/mp4", "video/mp4v-es; profile-level-id=4", 640, 352, 15.0, 2048000, 1.0, " AAC", 72000, 48000, 1 }, - }; - - -#else // AVC support - -enum TVideoInternalQualityLevels - { - EQualityLegacy = 0, - EQualityLow = 1, - EQualityMedium = 3, - EQualityHigh = 7, - ENumberOfQualitySets = 9, - ENumberOfWideQualitySets = 8 - }; - -static const SVideoQualitySet KVideoQualitySets[ENumberOfQualitySets] = - { - - // Legacy subQCIF support - { ETrue, "video/3gpp", "video/H263-2000", 128, 96, 15.0, 60000, 0.2, " AMR", 12200, 8000, 1 }, - // MMS - { ETrue, "video/3gpp", "video/H263-2000", 176, 144, 15.0, 60000, 0.2, " AMR", 12200, 8000, 1 }, - // MMS+1 - { ETrue, "video/3gpp", "video/H264; profile-level-id=42900B", 176, 144, 15.0, 124000, 0.2, " AMR", 12200, 8000, 1 }, - // Medium - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=2", 320, 240, 15.0, 512000, 0.5, " AAC", 72000, 48000, 1 }, - // Medium+ - { ETrue, "video/mp4", "video/H264; profile-level-id=42800C", 320, 240, 15.0, 384000, 0.5, " AAC", 72000, 48000, 1 }, - // Medium++ - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=2", 352, 288, 15.0, 512000, 0.5, " AAC", 72000, 48000, 1 }, - // Medium+++ - { ETrue, "video/mp4", "video/H264; profile-level-id=42800C", 352, 288, 15.0, 384000, 0.5, " AAC", 72000, 48000, 1 }, - // High - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=4", 640, 480, 15.0, 2048000, 1.0, " AAC", 72000, 48000, 1 }, - // High+ - { ETrue, "video/mp4", "video/mp4v-es; profile-level-id=4", 640, 480, 30.0, 3072000, 1.0, " AAC", 72000, 48000, 1 }, - - }; - -static const SVideoQualitySet KVideoQualitySetsWide[ENumberOfWideQualitySets] = - { - - // Legacy - { ETrue, "video/3gpp", "video/H263-2000", 128, 96, 15.0, 60000, 0.2, " AMR", 12200, 8000, 1 }, - // Low - { EFalse, "video/mp4", "video/mp4v-es; profile-level-id=4", 640, 352, 10.0, 256000, 1.0, " AAC", 72000, 48000, 1 }, - // dummy - { EFalse, "", "", 0, 0, 0.0, 0, 0, "", 0, 0, 0 }, - // Medium - { EFalse, "video/mp4", "video/mp4v-es; profile-level-id=4", 640, 352, 15.0, 1024000, 1.0, " AAC", 72000, 48000, 1 }, - // dummy - { EFalse, "", "", 0, 0, 0.0, 0, 0, "", 0, 0, 0 }, - // dummy - { EFalse, "", "", 0, 0, 0.0, 0, 0, "", 0, 0, 0 }, - // dummy - { EFalse, "", "", 0, 0, 0.0, 0, 0, "", 0, 0, 0 }, - // High - { EFalse, "video/mp4", "video/mp4v-es; profile-level-id=4", 640, 352, 25.0, 2048000, 1.0, " AAC", 72000, 48000, 1 }, - - }; - -#endif - - -//static const SVideoQualitySet KVideoQualitySetsWide[1] = {{ EFalse, "", "", 0, 0, 0.0, 0, 0, "", 0, 0, 0 }}; - -#endif - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/vedvideoconversion.h --- a/videoeditorengine/vedengine/inc/vedvideoconversion.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEDVIDEOCONVERSION_H__ -#define __VEDVIDEOCONVERSION_H__ - -#include -#include - -enum TMMSCompatibility -{ - ECompatible, - ECutNeeded, // Only cut or also format conversion - EConversionNeeded, // File small enough, format wrong - EIncompatible // Wrong format, cannot convert -}; - -#define KVedOriginalDuration TTimeIntervalMicroSeconds(-1) - -class CVideoConverter; - -class MVideoConverterObserver -{ - - public: - - virtual void MvcoFileInserted(CVideoConverter& aConverter) = 0; - - virtual void MvcoFileInsertionFailed(CVideoConverter& aConverter, TInt aError) = 0; - - virtual void MvcoConversionStartedL(CVideoConverter& aConverter) = 0; - - virtual void MvcoConversionProgressed(CVideoConverter& aConverter, TInt aPercentage) = 0; - - virtual void MvcoConversionCompleted(CVideoConverter& aConverter, TInt aError) = 0; -}; - - -class CVideoConverter : public CBase -{ - - public: - - IMPORT_C static CVideoConverter* NewL(MVideoConverterObserver& aObserver); - - IMPORT_C static CVideoConverter* NewLC(MVideoConverterObserver& aObserver); - - // Insert file to be checked / converted - virtual void InsertFileL(RFile* aFile) = 0; - - // check compatibility - virtual TMMSCompatibility CheckMMSCompatibilityL(TInt aMaxSize) = 0; - - // get estimate for end time based on start time and target size - virtual void GetDurationEstimateL(TInt aTargetSize, TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds& aEndTime) = 0; - - // Start converting file - virtual void ConvertL(RFile* aOutputFile, TInt aSizeLimit, - TTimeIntervalMicroSeconds aCutInTime = TTimeIntervalMicroSeconds(0), - TTimeIntervalMicroSeconds aCutOutTime = KVedOriginalDuration) = 0; - - // Cancel - virtual TInt CancelConversion() = 0; - - // Reset converter, remove file etc. - virtual TInt Reset() = 0; - -}; - -#endif - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/vedvideoconversionimp.h --- a/videoeditorengine/vedengine/inc/vedvideoconversionimp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,110 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef __VEDVIDEOCONVERSIONIMP_H__ -#define __VEDVIDEOCONVERSIONIMP_H__ - -#include -#include "vedvideoconversion.h" - -class CVideoConverterImp : public CVideoConverter, public MVedMovieObserver, - public MVedMovieProcessingObserver -{ - - public: // Functions from CVideoConverter - - static CVideoConverterImp* NewL(MVideoConverterObserver& aObserver); - - static CVideoConverterImp* NewLC(MVideoConverterObserver& aObserver); - - ~CVideoConverterImp(); - - void InsertFileL(RFile* aFile); - - TMMSCompatibility CheckMMSCompatibilityL(TInt aMaxSize); - - void GetDurationEstimateL(TInt aTargetSize, TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds& aEndTime); - - void ConvertL(RFile* aOutputFile, TInt aSizeLimit, - TTimeIntervalMicroSeconds aCutInTime, - TTimeIntervalMicroSeconds aCutOutTime); - - TInt CancelConversion(); - - TInt Reset(); - - public: // Functions from MVedMovieObserver - - //from observer - void NotifyVideoClipAdded(CVedMovie& aMovie, TInt aIndex); - void NotifyVideoClipAddingFailed(CVedMovie& aMovie, TInt aError); - void NotifyVideoClipRemoved(CVedMovie& aMovie, TInt aIndex); - void NotifyVideoClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, TInt aNewIndex); - void NotifyVideoClipTimingsChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyVideoClipSettingsChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyStartTransitionEffectChanged(CVedMovie& aMovie); - void NotifyMiddleTransitionEffectChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyEndTransitionEffectChanged(CVedMovie& aMovie); - void NotifyAudioClipAdded(CVedMovie& aMovie, TInt aIndex); - void NotifyAudioClipAddingFailed(CVedMovie& aMovie, TInt aError); - void NotifyAudioClipRemoved(CVedMovie& aMovie, TInt aIndex); - void NotifyAudioClipIndicesChanged(CVedMovie& aMovie, TInt aOldIndex, TInt aNewIndex); - void NotifyAudioClipTimingsChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyMovieReseted(CVedMovie& aMovie); - void NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/); - void NotifyMovieOutputParametersChanged(CVedMovie& aMovie); - void NotifyVideoClipColorEffectChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/); - void NotifyVideoClipAudioSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/); - void NotifyMovieProcessingStartedL(CVedMovie& /*aMovie*/); - void NotifyMovieProcessingProgressed(CVedMovie& aMovie, TInt aPercentage); - void NotifyMovieProcessingCompleted(CVedMovie& aMovie, TInt aError); - void NotifyVideoClipDescriptiveNameChanged(CVedMovie& aMovie, TInt aIndex); - void NotifyMovieQualityChanged(CVedMovie& aMovie); - void NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex); - void NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& aMovie,TInt aClipIndex,TInt aMarkIndex); - void NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& aMovie, TInt aClipIndex, TInt aMarkIndex); - void NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& aMovie,TInt aClipIndex,TInt aMarkIndex); - - private: - - /* - * C++ default constructor. - */ - CVideoConverterImp(MVideoConverterObserver& aObserver); - - /** - * 2nd phase constructor - */ - void ConstructL(); - - private: - - // Observer - MVideoConverterObserver& iObserver; - - // Movie - CVedMovie* iMovie; - - friend class CVideoConverter; -}; - -#endif - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/inc/vedvideosettings.h --- a/videoeditorengine/vedengine/inc/vedvideosettings.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for video related settings/constants. -* -*/ - - -#ifndef __VEDVIDEOSETTINGS_H__ -#define __VEDVIDEOSETTINGS_H__ - -// VIDEO ENCODER RELATED SETTINGS / DEFAULTS - -// Maximum supported resolution -//WVGA task -const TUint KVedMaxVideoWidth = 864; -//const TUint KVedMaxVideoWidth = 640; -const TUint KVedMaxVideoHeight = 480; - -// Max duration for video frame in microseconds. This limits the slow motion effect. -// This now limits the duration to 30 seconds which is already a very extreme case. This has impact to MPEG4's module_time_base variable -// which should not be longer than 32 bits since there are some variables e.g. in video decoder than can handle only 32-bit fields. -const TInt KVedMaxFrameDuration(30000000); - -// target/maximum bitrates -const TUint KVedBitRateH263Level10 = 64000; -const TUint KVedBitRateH263Level20 = 512000; -const TUint KVedBitRateH263Level45 = 128000; -const TUint KVedBitRateMPEG4Level0 = 64000; -const TUint KVedBitRateMPEG4Level0B = 128000; -const TUint KVedBitRateMPEG4Level1 = 64000; -const TUint KVedBitRateMPEG4Level2 = 512000; -const TUint KVedBitRateMPEG4Level3 = 1024000; -const TUint KVedBitRateMPEG4Level4A = 4000000; - -const TUint KVedBitRateAVCLevel1 = 64000; -const TUint KVedBitRateAVCLevel1b = 128000; -const TUint KVedBitRateAVCLevel1_1 = 192000; -const TUint KVedBitRateAVCLevel1_2 = 384000; -const TUint KVedBitRateAVCLevel1_3 = 768000; -const TUint KVedBitRateAVCLevel2 = 2000000; -//WVGA task -const TUint KVedBitRateAVCLevel2_1 = 4000000; -const TUint KVedBitRateAVCLevel2_2 = 4000000; -const TUint KVedBitRateAVCLevel3 = 10000000; -const TUint KVedBitRateAVCLevel3_1 = 14000000; - - -const TReal KVedMaxVideoFrameRate = 15.0; - -// number of frames for transition effect - NOTE: This must be an even number !!! -const TUint KNumTransitionFrames = 10; - -#define KVedResolutionSubQCIF (TSize(128,96)) -#define KVedResolutionQCIF (TSize(176,144)) -#define KVedResolutionCIF (TSize(352,288)) -#define KVedResolutionQVGA (TSize(320,240)) -#define KVedResolutionVGA16By9 (TSize(640,352)) -#define KVedResolutionVGA (TSize(640,480)) -//WVGA task -#define KVedResolutionWVGA (TSize(864,480)) - - -const TUint KMaxCodedPictureSizeQCIF = 16384; // QCIF and smaller -const TUint KMaxCodedPictureSizeCIF = 65536; // CIF and smaller -const TUint KMaxCodedPictureSizeMPEG4QCIF = 20480; // QCIF and smaller -const TUint KMaxCodedPictureSizeMPEG4L0BQCIF = 40960; // QCIF and smaller -const TUint KMaxCodedPictureSizeMPEG4CIF = 81920; // MPEG-4 CIF -const TUint KMaxCodedPictureSizeVGA = 163840; // For vga support -//WVGA task -const TUint KMaxCodedPictureSizeWVGA = 327680; // For WVGA support - -const TUint KMaxCodedPictureSizeAVCLevel1 = 21875; -const TUint KMaxCodedPictureSizeAVCLevel1B = 43750; -const TUint KMaxCodedPictureSizeAVCLevel1_1 = 62500; -const TUint KMaxCodedPictureSizeAVCLevel1_2 = 125000; -const TUint KMaxCodedPictureSizeAVCLevel1_3 = 250000; -const TUint KMaxCodedPictureSizeAVCLevel2 = 250000; -//WVGA task -const TUint KMaxCodedPictureSizeAVCLevel2_1 = 500000; -const TUint KMaxCodedPictureSizeAVCLevel2_2 = 1000000; -const TUint KMaxCodedPictureSizeAVCLevel3 = 2000000; -const TUint KMaxCodedPictureSizeAVCLevel3_1 = 4000000; - -_LIT8(KVedMimeTypeH263, "video/H263-2000"); -_LIT8(KVedMimeTypeH263BaselineProfile, "video/H263-2000; profile=0"); -_LIT8(KVedMimeTypeH263Level10, "video/H263-2000; profile=0; level=10"); -_LIT8(KVedMimeTypeH263Level45, "video/H263-2000; profile=0; level=45"); - -_LIT8(KVedMimeTypeMPEG4Visual, "video/mp4v-es"); -_LIT8(KVedMimeTypeMPEG4SimpleVisualProfile, "video/mp4v-es; profile-level-id=8"); -_LIT8(KVedMimeTypeMPEG4SimpleVisualProfileLevel2, "video/mp4v-es; profile-level-id=2"); -_LIT8(KVedMimeTypeMPEG4SimpleVisualProfileLevel3, "video/mp4v-es; profile-level-id=3"); -_LIT8(KVedMimeTypeMPEG4SimpleVisualProfileLevel4A, "video/mp4v-es; profile-level-id=4"); - -_LIT8(KVedMimeTypeAVC, "video/H264"); -_LIT8(KVedMimeTypeAVCBaselineProfileLevel1, "video/H264; profile-level-id=42800A"); -_LIT8(KVedMimeTypeAVCBaselineProfileLevel1B, "video/H264; profile-level-id=42900B"); -_LIT8(KVedMimeTypeAVCBaselineProfileLevel1_1, "video/H264; profile-level-id=42800B"); -_LIT8(KVedMimeTypeAVCBaselineProfileLevel1_2, "video/H264; profile-level-id=42800C"); -_LIT8(KVedMimeTypeAVCBaselineProfileLevel1_3, "video/H264; profile-level-id=42800D"); -_LIT8(KVedMimeTypeAVCBaselineProfileLevel2, "video/H264; profile-level-id=428014"); - -//WVGA task -_LIT8(KVedMimeTypeAVCBaselineProfileLevel2_1, "video/H264; profile-level-id=428015"); -_LIT8(KVedMimeTypeAVCBaselineProfileLevel2_2, "video/H264; profile-level-id=428016"); -_LIT8(KVedMimeTypeAVCBaselineProfileLevel3, "video/H264; profile-level-id=42801E"); -_LIT8(KVedMimeTypeAVCBaselineProfileLevel3_1, "video/H264; profile-level-id=42801F"); - -// 3gpmp4 buffer sizes -const TInt K3gpMp4ComposerWriteBufferSize = 65536; -const TInt K3gpMp4ComposerNrOfWriteBuffers = 10; -const TInt K3gpMp4ParserReadBufferSize = 8192; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/src/VedAudioClipInfoImp.cpp --- a/videoeditorengine/vedengine/src/VedAudioClipInfoImp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,598 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "VedAudioClipInfoImp.h" -#include "AudClip.h" -#include "AudClipInfo.h" - -#include "movieprocessor.h" - -// Print macro -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x -#else -#define PRINT(x) -#endif - - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfo::NewL -// Constructs a new CVedAudioClipInfo object -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C CVedAudioClipInfo* CVedAudioClipInfo::NewL(const TDesC& aFileName, - MVedAudioClipInfoObserver& aObserver) - { - CVedAudioClipInfoImp* self = (CVedAudioClipInfoImp*)NewLC(aFileName, aObserver); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C CVedAudioClipInfo* CVedAudioClipInfo::NewL(RFile* aFileHandle, - MVedAudioClipInfoObserver& aObserver) - { - CVedAudioClipInfoImp* self = (CVedAudioClipInfoImp*)NewLC(aFileHandle, aObserver); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfo::NewLC -// Constructs a new CVedAudioClipInfo object, leaves it to cleanupstack -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -EXPORT_C CVedAudioClipInfo* CVedAudioClipInfo::NewLC(const TDesC& aFileName, - MVedAudioClipInfoObserver& aObserver) - { - CVedAudioClipInfoImp* self = new (ELeave) CVedAudioClipInfoImp(); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aObserver); - return self; - } - -EXPORT_C CVedAudioClipInfo* CVedAudioClipInfo::NewLC(RFile* aFileHandle, - MVedAudioClipInfoObserver& aObserver) - { - CVedAudioClipInfoImp* self = new (ELeave) CVedAudioClipInfoImp(); - CleanupStack::PushL(self); - self->ConstructL(aFileHandle, aObserver); - return self; - } - - -CVedAudioClipInfoImp* CVedAudioClipInfoImp::NewL(CAudClip* aAudClip, - MVedAudioClipInfoObserver& aObserver) - { - CVedAudioClipInfoImp* self = (CVedAudioClipInfoImp*)NewLC(aAudClip, aObserver); - CleanupStack::Pop(self); - return self; - } - - -CVedAudioClipInfoImp* CVedAudioClipInfoImp::NewLC(CAudClip* aAudClip, - MVedAudioClipInfoObserver& aObserver) - { - CVedAudioClipInfoImp* self = new (ELeave) CVedAudioClipInfoImp(); - CleanupStack::PushL(self); - self->ConstructL(aAudClip, aObserver); - return self; - } - - -// ----------------------------------------------------------------------------- - - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfo::CVedAudioClipInfoImp -// Constuctor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CVedAudioClipInfoImp::CVedAudioClipInfoImp() - : iReady(EFalse) - { - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::ConstructL -// Symbian two phased constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// - -void CVedAudioClipInfoImp::ConstructL(CAudClip* aAudClip, - MVedAudioClipInfoObserver& aObserver) - { - PRINT(_L("CVedAudioClipInfoImp::ConstructL in")); - iAudClip = aAudClip; - iAudClipInfo = iAudClip->Info(); - iAudioProperties = iAudClipInfo->Properties(); - iReady = ETrue; - iObserver = &aObserver; - iOperation = CVedAudioClipInfoOperation::NewL(this, aObserver); - PRINT(_L("CVedAudioClipInfoImp::ConstructL out")); - } - -void CVedAudioClipInfoImp::ConstructL(const TDesC& aFileName, - MVedAudioClipInfoObserver& aObserver) - { - - PRINT(_L("CVedAudioClipInfoImp::ConstructL in")); - iReady = EFalse; - iAudClipInfo = CAudClipInfo::NewL(aFileName, *this); - - iObserver = &aObserver; - PRINT(_L("CVedAudioClipInfoImp::ConstructL out")); - } - -void CVedAudioClipInfoImp::ConstructL(RFile* aFileHandle, - MVedAudioClipInfoObserver& aObserver) - { - - PRINT(_L("CVedAudioClipInfoImp::ConstructL in")); - iReady = EFalse; - iAudClipInfo = CAudClipInfo::NewL(aFileHandle, *this); - - iObserver = &aObserver; - PRINT(_L("CVedAudioClipInfoImp::ConstructL out")); - } - - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::~CVedAudioClipInfoImp -// Destroys the object and releases all resources. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CVedAudioClipInfoImp::~CVedAudioClipInfoImp() - { - - if (iAudClipInfo != 0 && !iAudClip) - { - delete iAudClipInfo; - } - - delete iOperation; - REComSession::FinalClose(); - } - - -void CVedAudioClipInfoImp::NotifyClipInfoReady(CAudClipInfo& aInfo, TInt aError) - { - if (aError == KErrNone) - { - iAudioProperties = aInfo.Properties(); - iReady = ETrue; - } - - iObserver->NotifyAudioClipInfoReady(*this, aError); - } - - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::ChannelMode -// Returns the channel mode of the audio if applicable. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TVedAudioChannelMode CVedAudioClipInfoImp::ChannelMode() const - { - - __ASSERT_ALWAYS(iReady, TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - - TVedAudioChannelMode vedChannelMode = EVedAudioChannelModeUnrecognized; - if (iAudioProperties.iChannelMode == EAudStereo) - { - vedChannelMode = EVedAudioChannelModeStereo; - } - else if (iAudioProperties.iChannelMode == EAudSingleChannel) - { - vedChannelMode = EVedAudioChannelModeSingleChannel; - } - else if (iAudioProperties.iChannelMode == EAudDualChannel) - { - vedChannelMode = EVedAudioChannelModeDualChannel; - } - - return vedChannelMode; - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::SamplingRate -// Returns the sampling rate in hertz. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVedAudioClipInfoImp::SamplingRate() const - { - - __ASSERT_ALWAYS(iReady, TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - - return iAudioProperties.iSamplingRate; - - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::Format -// Returns the audio format -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TVedAudioFormat CVedAudioClipInfoImp::Format() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - - TVedAudioFormat vedAudioFormat = EVedAudioFormatUnrecognized; - - switch(iAudioProperties.iFileFormat) - { - case EAudFormat3GPP: - vedAudioFormat = EVedAudioFormat3GPP; - break; - case EAudFormatMP4: - vedAudioFormat = EVedAudioFormatMP4; - break; - case EAudFormatAMR: - vedAudioFormat = EVedAudioFormatAMR; - break; - case EAudFormatAMRWB: - vedAudioFormat = EVedAudioFormatAMRWB; - break; - case EAudFormatMP3: - vedAudioFormat = EVedAudioFormatMP3; - break; - case EAudFormatAAC_ADIF: - vedAudioFormat = EVedAudioFormatAAC_ADIF; - break; - case EAudFormatAAC_ADTS: - vedAudioFormat = EVedAudioFormatAAC_ADTS; - break; - case EAudFormatWAV: - vedAudioFormat = EVedAudioFormatWAV; - break; - default: - TVedPanic::Panic(TVedPanic::EInternal); - } - - return vedAudioFormat; - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::BitrateMode -// Returns the bitrate mode -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TVedBitrateMode CVedAudioClipInfoImp::BitrateMode() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - - TVedBitrateMode vedBitrateMode = EVedBitrateModeUnrecognized; - switch(iAudioProperties.iBitrateMode) - { - case EAudConstant: - vedBitrateMode = EVedBitrateModeConstant; - break; - case EAudVariable: - vedBitrateMode = EVedBitrateModeVariable; - break; - default: - TVedPanic::Panic(TVedPanic::EInternal); - } - return vedBitrateMode; - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::Bitrate -// Returns the bitrate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVedAudioClipInfoImp::Bitrate() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - return iAudioProperties.iBitrate; - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::GetVisualizationL -// Generates a visualization of the audio clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedAudioClipInfoImp::GetVisualizationL(MVedAudioClipVisualizationObserver& aObserver, TInt aResolution, TInt aPriority) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - - iVisualizationObserver = &aObserver; - iAudClipInfo->GetVisualizationL(*this, aResolution, aPriority); - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::CancelVisualizationL -// Cancels visualization generation -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedAudioClipInfoImp::CancelVisualizationL() - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - - iAudClipInfo->CancelVisualization(); - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::NotifyClipInfoVisualizationCompleted -// Callback for visualization complete -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedAudioClipInfoImp::NotifyClipInfoVisualizationCompleted(const CAudClipInfo& /*aClipInfo*/, TInt aError, TInt8* aVisualization, TInt aSize) - { - iVisualizationObserver->NotifyAudioClipVisualizationCompleted(*this, aError, aVisualization, aSize); - iVisualizationObserver = 0; - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::NotifyClipInfoVisualizationStarted -// Callback for visualization started -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedAudioClipInfoImp::NotifyClipInfoVisualizationStarted(const CAudClipInfo& /*aClipInfo*/, TInt aError) - { - if (aError != KErrNone) - { - iVisualizationObserver->NotifyAudioClipVisualizationCompleted(*this, aError, NULL, 0); - iVisualizationObserver = 0; - } - else - { - iVisualizationObserver->NotifyAudioClipVisualizationStarted(*this); - } - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::NotifyClipInfoVisualizationProgressed -// Callback for visualization progress -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedAudioClipInfoImp::NotifyClipInfoVisualizationProgressed(const CAudClipInfo& /*aClipInfo*/, TInt aPercentage) - { - iVisualizationObserver->NotifyAudioClipVisualizationProgressed(*this, aPercentage); - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp:: -// Returns the audio clip filename -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TPtrC CVedAudioClipInfoImp::FileName() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - - return iAudClipInfo->FileName(); - - } - -RFile* CVedAudioClipInfoImp::FileHandle() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - - return iAudClipInfo->FileHandle(); - - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::Type -// Returns the audio type -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TVedAudioType CVedAudioClipInfoImp::Type() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - - TVedAudioType vedAudioType = EVedAudioTypeUnrecognized; - - if (iAudioProperties.iAudioType == EAudAMR) - { - vedAudioType = EVedAudioTypeAMR; - } - else if (iAudioProperties.iAudioType == EAudAMRWB) - { - vedAudioType = EVedAudioTypeAMRWB; - } - else if (iAudioProperties.iAudioType == EAudMP3) - { - vedAudioType = EVedAudioTypeMP3; - } - else if (iAudioProperties.iAudioType == EAudAAC_MPEG2 || iAudioProperties.iAudioType == EAudAAC_MPEG4 ) - { - vedAudioType = EVedAudioTypeAAC_LC; - } - else if (iAudioProperties.iAudioType == EAudWAV) - { - vedAudioType = EVedAudioTypeWAV; - } - - return vedAudioType; - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::Duration -// Returns the audio clip duration -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TTimeIntervalMicroSeconds CVedAudioClipInfoImp::Duration() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EAudioClipInfoNotReady)); - - return iAudioProperties.iDuration; - } - - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoImp::Compare -// Compares two audio clip info classes -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVedAudioClipInfoImp::Compare(const CVedAudioClipInfoImp& c1, - const CVedAudioClipInfoImp& c2) - { - - - if (c1.iAudClip == 0 || c2.iAudClip == 0) - { - return 0; - } - if (c1.iAudClip->StartTime() > c2.iAudClip->StartTime()) - { - return 1; - } - else if (c1.iAudClip->StartTime() < c2.iAudClip->StartTime()) - { - return -1; - } - else - { - return 0; - } - } - -////////////////////////////////////////////////////////////////////////// - - -// CVedAudioClipInfoOperation -// - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoOperation::NewL -// Constructs a new CVedAudioClipInfoOperation object. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CVedAudioClipInfoOperation* CVedAudioClipInfoOperation::NewL(CVedAudioClipInfoImp* aInfo, - MVedAudioClipInfoObserver& aObserver) - { - CVedAudioClipInfoOperation* self = - new (ELeave) CVedAudioClipInfoOperation(aInfo, aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoOperation::CVedAudioClipInfoOperation -// Constructor. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CVedAudioClipInfoOperation::CVedAudioClipInfoOperation(CVedAudioClipInfoImp* aInfo, - MVedAudioClipInfoObserver& aObserver) - : CActive(EPriorityStandard), iObserver(aObserver), iInfo(aInfo) - - { - CActiveScheduler::Add(this); - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoOperation::ConstructL -// Symbian two phased constructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedAudioClipInfoOperation::ConstructL() - { - PRINT(_L("CVedAudioClipInfoOperation::ConstructL in")); - - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - - PRINT(_L("CVedAudioClipInfoOperation::ConstructL out")); - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoOperation::~CVedAudioClipInfoOperation -// Destructor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CVedAudioClipInfoOperation::~CVedAudioClipInfoOperation() - { - Cancel(); - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoOperation::RunError -// Handle errors from RunL() -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVedAudioClipInfoOperation::RunError( TInt aError ) - { - iObserver.NotifyAudioClipInfoReady(*iInfo, aError); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoOperation::RunL -// Active objects RunL function ran when request completes. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedAudioClipInfoOperation::RunL() - { - PRINT(_L("CVedAudioClipInfoOperation::RunL in")); - - iObserver.NotifyAudioClipInfoReady(*iInfo, KErrNone); - - PRINT(_L("CVedAudioClipInfoOperation::RunL out")); - } - -// ----------------------------------------------------------------------------- -// CVedAudioClipInfoOperation::DoCancel -// Cancel ongoing request. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedAudioClipInfoOperation::DoCancel() - { - iObserver.NotifyAudioClipInfoReady(*iInfo, KErrCancel); - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/src/VedMovieImp.cpp --- a/videoeditorengine/vedengine/src/VedMovieImp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3762 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "VedMovieImp.h" -#include "VedVideoClipGenerator.h" -#include "movieprocessor.h" -#include "VedVideosettings.h" -#include "VedAudiosettings.h" -#include -#include "VedAudioClipInfoImp.h" -#include "AudSong.h" -#include "AudClip.h" -#include "AudClipInfo.h" -#include "Vedqualitysettingsapi.h" -#include "ctrtranscoder.h" -#include "ctrtranscoderobserver.h" -#include "vedproctimeestimate.h" -#include "vedcodecchecker.h" - -#include - -const TInt KVedAudioTrackIndex = 1; - -// Print macro -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x -#else -#define PRINT(x) -#endif - - - -// Near-dummy observer class for temporary transcoder instance. In practice is only used to provide input framerate -// to the transcoder -class CTrObs : public CBase, public MTRTranscoderObserver - { -public: - /* Constructor & destructor */ - - inline CTrObs(TReal aFrameRate) : iInputFrameRate(aFrameRate) - { - }; - inline ~CTrObs() - { - }; - - // Dummy methods from MTRTranscoderObserver, just used to complete the observer class - inline void MtroInitializeComplete(TInt /*aError*/) - { - }; - inline void MtroFatalError(TInt /*aError*/) - { - }; - inline void MtroReturnCodedBuffer(CCMRMediaBuffer* /*aBuffer*/) - { - }; - // method to provide clip input framerate to transcoder - inline void MtroSetInputFrameRate(TReal& aRate) - { - aRate = iInputFrameRate; - }; - inline void MtroAsyncStopComplete() - { - }; - - inline void MtroSuspend() - { - }; - - inline void MtroResume() - { - }; - -private:// data - - // clip input framerate (fps) - TReal iInputFrameRate; - - }; - - -// -------- Local functions --------- - -// Map video format mimetype to editor's internal enumeration -static TVedVideoFormat MapVideoFormatTypes(const TText8* aVideoFormatType) - { - TPtrC8 mimeType(aVideoFormatType); - TBuf8<256> string; - string = _L8("video/3gpp"); - - if ( mimeType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - return EVedVideoFormat3GPP; - } - else - { - string = _L8("video/mp4"); - if ( mimeType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - return EVedVideoFormatMP4; - } - } - - return EVedVideoFormatUnrecognized; - } - -// Map video codec mimetype to editor's internal enumeration -static TVedVideoType MapVideoCodecTypes(const TText8* aVideoCodecType) - { - TPtrC8 mimeType(aVideoCodecType); - TBuf8<256> string; - string = _L8("video/H263*"); - - if ( mimeType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - // H.263 - string = _L8("*level*"); - if ( mimeType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - string = _L8("*level=10"); - if ( mimeType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - return EVedVideoTypeH263Profile0Level10; - } - string = _L8("*level=45"); - if ( mimeType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - return EVedVideoTypeH263Profile0Level45; - } - } - // no level specified => 10 - return EVedVideoTypeH263Profile0Level10; - } - else - { - string = _L8("video/mp4v-es*"); - if ( mimeType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - return EVedVideoTypeMPEG4SimpleProfile; - } - - else - { - string = _L8("video/h264*"); - if ( mimeType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - return EVedVideoTypeAVCBaselineProfile; - } - } - } - return EVedVideoTypeUnrecognized; - } - -// Map editor's internal enumeration to video codec mimetype -static void MapVideoCodecTypeToMime(TVedVideoType aType, TBufC8<255>& aMimeType) - { - switch ( aType ) - { - case EVedVideoTypeH263Profile0Level10: - { - aMimeType = KVedMimeTypeH263BaselineProfile; - } - break; - case EVedVideoTypeH263Profile0Level45: - { - aMimeType = KVedMimeTypeH263Level45; - } - break; - default: - { - //EVedVideoTypeMPEG4SimpleProfile - aMimeType = KVedMimeTypeMPEG4Visual; - } - } - } - - -// Map audio codec fourcc to editor's internal enumeration -static TAudType MapAudioCodecTypes(const TText8* aAudioCodecType) - { - TPtrC8 fourCCType(aAudioCodecType); - TBuf8<256> string; - string = _L8(" AMR"); - - if ( fourCCType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - return EAudAMR; - } - else - { - string = _L8(" AAC"); - if ( fourCCType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - return EAudAAC_MPEG4; - } - - } - return EAudTypeUnrecognized; - } - -// -------- Member functions --------- -EXPORT_C CVedMovie* CVedMovie::NewL(RFs *aFs) - { - PRINT(_L("CVedMovie::NewL")); - - CVedMovieImp* self = (CVedMovieImp*)NewLC(aFs); - CleanupStack::Pop(self); - return self; - } - - -EXPORT_C CVedMovie* CVedMovie::NewLC(RFs *aFs) - { - PRINT(_L("CVedMovie::NewLC")); - - CVedMovieImp* self = new (ELeave) CVedMovieImp(aFs); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - - -CVedMovieImp::CVedMovieImp(RFs *aFs) - : iFs(aFs), - iVideoClipArray(8), // Initial size of video clip array is 8 - iAudioClipInfoArray(8), // Initial size of audio clip array is 8 - iObserverArray(4), // Initial size of observer array is 4 - iStartTransitionEffect(EVedStartTransitionEffectNone), - iEndTransitionEffect(EVedEndTransitionEffectNone), - iQuality(EQualityAutomatic), - iNotifyObserver(ETrue), - iMovieProcessingObserver(0) - { - } - - -void CVedMovieImp::ConstructL() - { - iAudSong = CAudSong::NewL(iFs); - iAudSong->RegisterSongObserverL(this); - iAddOperation = CVedMovieAddClipOperation::NewL(this); - - iCodecChecker = CVedCodecChecker::NewL(); - iProcessor = CMovieProcessor::NewL(); - - PRINT((_L("CVedMovie::ConstructL() CVideoQualitySelector in use"))); - iQualitySelector = CVideoQualitySelector::NewL(); - - CalculatePropertiesL(); - } - - -CVedMovieImp::~CVedMovieImp() - { - DoReset(); - iObserverArray.Reset(); - - delete iAddOperation; - delete iCodecChecker; - delete iProcessor; - - delete iAudSong; - delete iAddedVideoClipFilename; - - delete iQualitySelector; - - REComSession::FinalClose(); - } - -CVedMovie::TVedMovieQuality CVedMovieImp::Quality() const - { - return iQuality; - } - -void CVedMovieImp::SetQuality(TVedMovieQuality aQuality) - { - __ASSERT_ALWAYS(aQuality >= EQualityAutomatic && aQuality < EQualityLast, - TVedPanic::Panic(TVedPanic::EMovieIllegalQuality)); - if (aQuality != iQuality) - { - iOutputParamsSet = EFalse; - TVedMovieQuality prevQuality = iQuality; - iQuality = aQuality; - TRAPD(err,CalculatePropertiesL());//should not leave with current implementation, but try to handle it anyway - if ( err == KErrNone ) - { - // successful - FireMovieQualityChanged(this); - } - else - { - // setting was not successful, use the previous value - iQuality = prevQuality; - TRAP(err,CalculatePropertiesL());// previous should always succee - } - - } - } - -TVedVideoFormat CVedMovieImp::Format() const - { - return iFormat; - } - -TVedVideoType CVedMovieImp::VideoType() const - { - return iVideoType; - } - -TSize CVedMovieImp::Resolution() const - { - return iResolution; - } - -TInt CVedMovieImp::MaximumFramerate() const - { - return iMaximumFramerate; - } - -TVedAudioType CVedMovieImp::AudioType() const - { - TAudType audioType = iAudSong->OutputFileProperties().iAudioType; - TVedAudioType vedAudioType = EVedAudioTypeUnrecognized; - - if (iAudSong->ClipCount(KAllTrackIndices) == 0) - { - vedAudioType = EVedAudioTypeNoAudio; - } - else if (audioType == EAudAMR) - { - vedAudioType = EVedAudioTypeAMR; - } - else if (audioType == EAudAAC_MPEG4 ) - { - vedAudioType = EVedAudioTypeAAC_LC; - } - else if (audioType == EAudNoAudio) - { - vedAudioType = EVedAudioTypeNoAudio; - } - - return vedAudioType; - } - -TInt CVedMovieImp::AudioSamplingRate() const - { - return iAudSong->OutputFileProperties().iSamplingRate; - } - -TVedAudioChannelMode CVedMovieImp::AudioChannelMode() const - { - TVedAudioChannelMode vedChannelMode = EVedAudioChannelModeUnrecognized; - if (iAudSong->OutputFileProperties().iChannelMode == EAudStereo) - { - vedChannelMode = EVedAudioChannelModeStereo; - } - else if (iAudSong->OutputFileProperties().iChannelMode == EAudSingleChannel) - { - vedChannelMode = EVedAudioChannelModeSingleChannel; - } - else if (iAudSong->OutputFileProperties().iChannelMode == EAudDualChannel) - { - vedChannelMode = EVedAudioChannelModeDualChannel; - } - return vedChannelMode; - } - - -TVedBitrateMode CVedMovieImp::AudioBitrateMode() const - { - TVedBitrateMode vedBitrateMode = EVedBitrateModeUnrecognized; - switch(iAudSong->OutputFileProperties().iBitrateMode) - { - case EAudConstant: - vedBitrateMode = EVedBitrateModeConstant; - break; - case EAudVariable: - vedBitrateMode = EVedBitrateModeVariable; - break; - default: - TVedPanic::Panic(TVedPanic::EInternal); - } - return vedBitrateMode; - } -TInt CVedMovieImp::AudioBitrate() const - { - return iAudSong->OutputFileProperties().iBitrate; - } - -TInt CVedMovieImp::VideoBitrate() const - { - // restricted bitrate: forces transcoding of video content to this bitrate - return iVideoRestrictedBitrate; - } - -TInt CVedMovieImp::VideoStandardBitrate() const - { - // the default bitrate to be used when encoding new content. This can be actually lower than the standard limit - // but it is not restricted bitrate that would trigger transcoding to happen - return iVideoStandardBitrate; - } - -TReal CVedMovieImp::VideoFrameRate() const - { - return iVideoFrameRate; - } - -// This must not be called for 3gp clips that should always have AMR audio -// returns ETrue if aAudioProperties contain settings found in input (can be modified by this method) -// and EFalse if client should decide what to do with them -TBool CVedMovieImp::MatchAudioPropertiesWithInput( TAudFileProperties& aAudioProperties ) - { - // If there are no audio clips - if (iAudSong->ClipCount(KAllTrackIndices) == 0) - { - return ETrue; - } - - // Go through the audio clips and select the best one - TAudFileProperties prop; - TAudFileProperties highestProp; - TBool highestPropFound = EFalse; - - for (TInt a = 0; a < iAudSong->ClipCount(KAllTrackIndices); a++) - { - CAudClip* clip = iAudSong->Clip(a, KAllTrackIndices); - prop = clip->Info()->Properties(); - - if ( ( prop.iChannelMode == aAudioProperties.iChannelMode ) && - ( prop.iSamplingRate == aAudioProperties.iSamplingRate ) ) - { - // there is a match => keep the properties - PRINT((_L("CVedMovie::MatchAudioPropertiesWithInput() found preferred set from input, sampling rate & channels %d & %d"), prop.iSamplingRate, prop.iChannelMode)); - return ETrue; - } - else - { - // need to stay within limits given by aAudioProperties (it has the highest preferred mode) - if ( ( prop.iAudioType == aAudioProperties.iAudioType ) && - ( prop.iSamplingRate <= aAudioProperties.iSamplingRate ) ) - { - // take the highest channelmode & sampling rate from input. - if ( !highestPropFound || - ( (prop.iSamplingRate > highestProp.iSamplingRate) || - ( (prop.iSamplingRate == highestProp.iSamplingRate) && (prop.iChannelMode > highestProp.iChannelMode) ) ) ) - { - PRINT((_L("CVedMovie::MatchAudioPropertiesWithInput() found new highest prop from input, sampling rate & channels %d & %d"), prop.iSamplingRate, prop.iChannelMode)); - highestProp.iAudioType = prop.iAudioType; - highestProp.iChannelMode = prop.iChannelMode; - highestProp.iSamplingRate = prop.iSamplingRate; - highestPropFound = ETrue; - } - } - } - } - - // if we come here, there was no exact match found. Use the best one, if found - if ( highestPropFound ) - { - // take the sampling rate and channel mode from inProp. Currently we support only 16k and 48k output, but this should be changed - // once we know what we need to support; but requires synchronization with audio editor engine - - if ( iAudSong->AreOutputPropertiesSupported(highestProp)) - { - PRINT((_L("CVedMovie::MatchAudioPropertiesWithInput() selected audio parameters, sampling rate & channels %d & %d"), highestProp.iSamplingRate, highestProp.iChannelMode)); - aAudioProperties.iChannelMode = highestProp.iChannelMode; - aAudioProperties.iSamplingRate = highestProp.iSamplingRate; - aAudioProperties.iBitrate = KAudBitRateDefault; //use default since we don't know the bitrate of the input. - return ETrue; - } - else - { - // We have some AAC in the input but it is not any of our supported sampling rates. - // The aAudioProperties may have 48k here but since we don't have such high input, better to use 16k in output - PRINT((_L("CVedMovie::MatchAudioPropertiesWithInput() no good match with input"))); - return EFalse; - } - } - else - { - // Not even a close match - PRINT((_L("CVedMovie::MatchAudioPropertiesWithInput() not even a close match with input"))); - return EFalse; - } - - } - - -// Set video codec mimetype member variable, and also max values that level defines (e.g. max framerate; actual values are taken from quality set) -void CVedMovieImp::SetVideoCodecMimeType(const TText8* aVideoCodecType) - { - TPtrC8 mimeType(aVideoCodecType); - - if ( mimeType.MatchF( KVedMimeTypeH263 ) != KErrNotFound ) - { - // H.263 baseline - iVideoCodecMimeType.Set(KVedMimeTypeH263BaselineProfile); - iMaximumFramerate = 15; - } - else if ( mimeType.MatchF( KVedMimeTypeH263BaselineProfile ) != KErrNotFound ) - { - // H.263 baseline - iVideoCodecMimeType.Set(KVedMimeTypeH263BaselineProfile); - iMaximumFramerate = 15; - } - else if (mimeType.MatchF( KVedMimeTypeH263Level45 ) != KErrNotFound ) - { - // H.263 level 45 - iVideoCodecMimeType.Set(KVedMimeTypeH263Level45); - iMaximumFramerate = 15; - } - else if (mimeType.MatchF( KVedMimeTypeMPEG4SimpleVisualProfileLevel2 ) != KErrNotFound ) - { - // MPEG-4 SP level 2 - iVideoCodecMimeType.Set(KVedMimeTypeMPEG4SimpleVisualProfileLevel2); - iMaximumFramerate = 15; - } - else if (mimeType.MatchF( KVedMimeTypeMPEG4SimpleVisualProfileLevel3 ) != KErrNotFound ) - { - // MPEG-4 SP level 3 - iVideoCodecMimeType.Set(KVedMimeTypeMPEG4SimpleVisualProfileLevel3); - iMaximumFramerate = 30; - } - else if (mimeType.MatchF( KVedMimeTypeMPEG4SimpleVisualProfileLevel4A ) != KErrNotFound ) - { - // MPEG-4 SP level 4a - iVideoCodecMimeType.Set(KVedMimeTypeMPEG4SimpleVisualProfileLevel4A); - iMaximumFramerate = 30; - } - else if (mimeType.MatchF( KVedMimeTypeMPEG4Visual ) != KErrNotFound ) - { - // MPEG-4 SP level 0 - iVideoCodecMimeType.Set(KVedMimeTypeMPEG4SimpleVisualProfile); - iMaximumFramerate = 15; - } - else if (mimeType.MatchF( KVedMimeTypeAVCBaselineProfileLevel1B ) != KErrNotFound ) - { - // AVC level 1b - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel1B); - iMaximumFramerate = 15; - } - else if (mimeType.MatchF( KVedMimeTypeAVCBaselineProfileLevel1_1 ) != KErrNotFound ) - { - // AVC level 1.1 - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel1_1); - iMaximumFramerate = 7.5; - } - else if (mimeType.MatchF( KVedMimeTypeAVCBaselineProfileLevel1_2 ) != KErrNotFound ) - { - // AVC level 1.2 - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel1_2); - iMaximumFramerate = 15; - } - //WVGA task - else if (mimeType.MatchF( KVedMimeTypeAVCBaselineProfileLevel1_3 ) != KErrNotFound ) - { - // AVC level 1.3 - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel1_3); - iMaximumFramerate = 15; - } - else if (mimeType.MatchF( KVedMimeTypeAVCBaselineProfileLevel2 ) != KErrNotFound ) - { - // AVC level 2 - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel2); - iMaximumFramerate = 15; - } - else if (mimeType.MatchF( KVedMimeTypeAVCBaselineProfileLevel2_1 ) != KErrNotFound ) - { - // AVC level 2.1 - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel2_1); - iMaximumFramerate = 15; - } - else if (mimeType.MatchF( KVedMimeTypeAVCBaselineProfileLevel2_2 ) != KErrNotFound ) - { - // AVC level 2.2 - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel2_2); - iMaximumFramerate = 15; - } - else if (mimeType.MatchF( KVedMimeTypeAVCBaselineProfileLevel3 ) != KErrNotFound ) - { - // AVC level 3 - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel3); - iMaximumFramerate = 15; - } - else if (mimeType.MatchF( KVedMimeTypeAVCBaselineProfileLevel3_1 ) != KErrNotFound ) - { - // AVC level 3.1 - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel3_1); - iMaximumFramerate = 15; - } - else - { - // AVC level 1 - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel1); - iMaximumFramerate = 15; - } - - } - - -// ----------------------------------------------------------------------------- -// CVedMovieImp::GetQCIFPropertiesL -// Get settings for QCIF or subQCIF resolution; H.263, H.264 or MPEG-4 -// This is a special case since it has also H.263 codec support. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVedMovieImp::GetQCIFPropertiesL(SVideoQualitySet& aLocalQualitySet) - { - TInt foundQualitySetForLevelError = KErrNone; - - // QCIF and subQCIF are handled together, since they are covered by the same levels of the H.263, MPEG-4 and H.264. - // We have the preferred video codec in iVideoType (based on input clips) - - if ( iVideoType == EVedVideoTypeAVCBaselineProfile ) - { - // first check if we support H.264 output - // level 1B - PRINT((_L("CVedMovie::GetQCIFPropertiesL() check H.264 level 1B"))); - TRAP(foundQualitySetForLevelError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeAVCBaselineProfileLevel1B))); - - if ( foundQualitySetForLevelError == KErrNotSupported ) - { - // check H.264 level 1 instead - PRINT((_L("CVedMovie::GetQCIFPropertiesL() check H.264 level 1"))); - TRAP(foundQualitySetForLevelError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeAVCBaselineProfileLevel1))); - if ( foundQualitySetForLevelError == KErrNotSupported ) - { - // H.264 @ QCIF is not supported. Fall back to H.263 (=> input is transcoded to H.263) - PRINT((_L("CVedMovie::getQCIFPropertiesL() no set for MPEG-4 level 0, switch to H.263"))); - iVideoType = EVedVideoTypeH263Profile0Level45; // use level 45 since it is better than 10, and we don't have bitrate restrictions here - foundQualitySetForLevelError = GetQCIFPropertiesL(aLocalQualitySet); - // keep H.263; H.264 may not be supported at all - } - } - - if ( foundQualitySetForLevelError == KErrNone ) - { - SetVideoCodecMimeType(aLocalQualitySet.iVideoCodecMimeType); - } - } - else if ( iVideoType == EVedVideoTypeMPEG4SimpleProfile ) - { - // MPEG-4 @ QCIF is an exceptional case; should not happen for locally recorded clips, but support is kept here for compatibility - PRINT((_L("CVedMovie::GetQCIFPropertiesL() check MPEG-4 level 0"))); - TRAP(foundQualitySetForLevelError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeMPEG4SimpleVisualProfile))); - if ( foundQualitySetForLevelError == KErrNotSupported ) - { - // MPEG-4 QCIF is not listed in the quality set. Use it with H.263 settings, except the codec type - PRINT((_L("CVedMovie::GetQCIFPropertiesL() no set for MPEG-4 level 0, take settings from H.263"))); - iVideoType = EVedVideoTypeH263Profile0Level10;// level 10 is comparable to level 0 of MPEG-4; level 0b is not used - foundQualitySetForLevelError = GetQCIFPropertiesL(aLocalQualitySet); - // change back to MPEG-4 - iVideoType = EVedVideoTypeMPEG4SimpleProfile; - } - if ( foundQualitySetForLevelError == KErrNone ) - { - // set MPEG-4 MIME-type and other related settings; - // also if the quality set showed H.263; this way we can support mpeg-4 even if it is not any of the preferred ones, since we have supported it earlier too... - iVideoCodecMimeType.Set(KVedMimeTypeMPEG4SimpleVisualProfile); - iMaximumFramerate = 15; - } - } - else - { - // H.263 - if ( iVideoType == EVedVideoTypeH263Profile0Level45 ) - { - PRINT((_L("CVedMovie::GetQCIFPropertiesL() check H.263 level 45"))); - TRAP(foundQualitySetForLevelError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeH263Level45))); - } - if ( (iVideoType == EVedVideoTypeH263Profile0Level10) || (foundQualitySetForLevelError == KErrNotSupported) ) - { - PRINT((_L("CVedMovie::GetQCIFPropertiesL() check H.263 level 10"))); - TRAP(foundQualitySetForLevelError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeH263))); - } - - if ( foundQualitySetForLevelError == KErrNone ) - { - SetVideoCodecMimeType(aLocalQualitySet.iVideoCodecMimeType); - } - } - // assume subQCIF can use other QCIF settings except resolution - - - return foundQualitySetForLevelError; - } - - -// ----------------------------------------------------------------------------- -// CVedMovieImp::GetCIFQVGAPropertiesL -// Get settings for CIF or QVGA resolution; H.264 or MPEG-4 -// Some encoders may not support both, hence we may need to change the resolution here -// and that's why this is treated as a special case. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVedMovieImp::GetCIFQVGAPropertiesL(TSize aSize, TReal aFrameRate, SVideoQualitySet& aLocalQualitySet) - { - TInt foundQualitySetForLevelError = KErrNone; - - // CIF and QVGA are handled together, since they are covered by the same levels of the MPEG-4 and H.264; - // framerate brings a difference though. - // We have the preferred video codec in iVideoType (based on input clips), and framerate in aFrameRate - // so let's check the level first, and then additionally check if the resolution is supported. - - if ( iVideoType == EVedVideoTypeAVCBaselineProfile ) - { - // first check if we support H.264 output - // try level 1.2; higher levels not supported yet, and hence aFrameRate has no impact; - // level 1.1 is not seen relevant since it supports only 7.5 fps - PRINT((_L("CVedMovie::GetCIFQVGAPropertiesL() check H.264 level 1.2"))); - TRAP(foundQualitySetForLevelError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeAVCBaselineProfileLevel1_2))); - if ( foundQualitySetForLevelError == KErrNotSupported ) - { - // H.264 level 1.2 is not supported; switch to MPEG-4 - iVideoType = EVedVideoTypeMPEG4SimpleProfile; - } - } - - if ( iVideoType == EVedVideoTypeMPEG4SimpleProfile ) - { - // MPEG-4 was dominant in the input, OR H.264 is not supported in quality set. - // The order is like this since MPEG-4 is generally more supported than H.264. - // Hence this CANNOT handle the case where MPEG-4 CIF/QVGA is not in the quality set but H.264 is, but in that case it falls back to H.263 QCIF in the host method - if ( aFrameRate > 15.0 ) - { - // check level 3 - PRINT((_L("CVedMovie::GetCIFQVGAPropertiesL() check MPEG-4 level 3"))); - TRAP(foundQualitySetForLevelError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeMPEG4SimpleVisualProfileLevel3))); - } - if ( (aFrameRate <= 15.0) || (foundQualitySetForLevelError == KErrNotSupported) ) - { - // try level 2 - PRINT((_L("CVedMovie::GetCIFQVGAPropertiesL() check MPEG-4 level 2"))); - TRAP(foundQualitySetForLevelError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeMPEG4SimpleVisualProfileLevel2))); - } - } - - if ( foundQualitySetForLevelError == KErrNotSupported ) - { - // these resolutions are not supported! The default one will be taken into use in CalculatePropertiesL - PRINT((_L("CVedMovie::GetCIFQVGAPropertiesL() no support for CIF/QVGA found in quality set"))); - return foundQualitySetForLevelError; - } - - - - SVideoQualitySet tmpSet; - TRAPD(resolutionSupported, iQualitySelector->GetVideoQualitySetL( tmpSet, aSize)); - if ( resolutionSupported == KErrNotSupported ) - { - // the preferred resolution is not supported => must use the other one - // the level was supported already, so no need to check support for the other one - if ( aSize == KVedResolutionCIF ) - { - PRINT((_L("CVedMovie::GetCIFQVGAPropertiesL() CIF support not available, must use QVGA instead"))); - iResolution = KVedResolutionQVGA; - } - else - { - PRINT((_L("CVedMovie::GetCIFQVGAPropertiesL() QVGA support not available, must use CIF instead"))); - iResolution = KVedResolutionCIF; - } - } - else - { - PRINT((_L("CVedMovie::GetCIFQVGAPropertiesL() resolution support ok"))); - iResolution = aSize; - } - - // at this point we must have found a suitable set - SetVideoCodecMimeType(aLocalQualitySet.iVideoCodecMimeType); - return foundQualitySetForLevelError; - } - - -// ----------------------------------------------------------------------------- -// CVedMovieImp::GetVGAPropertiesL -// Get settings for VGA resolution. If not supported, get High settings instead -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVedMovieImp::GetVGAPropertiesL(SVideoQualitySet& aLocalQualitySet) - { - TInt foundQualitySetForResolutionError = KErrNone; - - if ( iVideoType == EVedVideoTypeAVCBaselineProfile ) - { - PRINT((_L("CVedMovie::GetWVGAPropertiesL() check H.264 level 3.0"))); - TRAP(foundQualitySetForResolutionError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeAVCBaselineProfileLevel3))); - if (foundQualitySetForResolutionError == KErrNotSupported ) - { - PRINT((_L("CVedMovie::GetVGAPropertiesL() H.264 level 3.0 not supported"))); - // H.264 level 3.0 is not supported; switch to MPEG-4 - iVideoType = EVedVideoTypeMPEG4SimpleProfile; - } - else - { - PRINT((_L("CVedMovie::GetVGAPropertiesL() H.264 level 3.0 supported"))); - iResolution = KVedResolutionVGA; - SetVideoCodecMimeType(aLocalQualitySet.iVideoCodecMimeType); - } - } - - if ( iVideoType == EVedVideoTypeMPEG4SimpleProfile ) - { - // VGA; check MPEG-4 level 4a - // Settings may not exist => trap the leave - TRAP(foundQualitySetForResolutionError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeMPEG4SimpleVisualProfileLevel4A))); - if ( foundQualitySetForResolutionError == KErrNotSupported ) - { - PRINT((_L("CVedMovie::GetVGAPropertiesL() VGA not supported as output, try highest supported"))); - // No VGA, try the highest instead - foundQualitySetForResolutionError = GetHighPropertiesL(aLocalQualitySet); - } - else - { - PRINT((_L("CVedMovie::GetVGAPropertiesL() VGA with MPEG-4 level 4a selected as output"))); - iResolution = KVedResolutionVGA; - SetVideoCodecMimeType(aLocalQualitySet.iVideoCodecMimeType); - } - } - - return foundQualitySetForResolutionError; - } - -// ----------------------------------------------------------------------------- -// CVedMovieImp::GetVGA16By9PropertiesL -// Get settings for VGA 16:9 resolution. If not supported, get High settings instead -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVedMovieImp::GetVGA16By9PropertiesL(SVideoQualitySet& aLocalQualitySet) - { - TInt foundQualitySetForResolutionError = KErrNone; - - if ( iVideoType != EVedVideoTypeMPEG4SimpleProfile ) - { - // NOTE: max supported H.264/AVC level currently (1.2) allows only CIF 15 fps, no VGA. - PRINT((_L("CVedMovie::GetVGA16By9PropertiesL() VGA & H.264 == NOT SUPPORTED"))); - TVedPanic::Panic(TVedPanic::EInternal); - } - - // VGA; check MPEG-4 level 4a - // Settings may not exist => trap the leave - TRAP(foundQualitySetForResolutionError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeMPEG4SimpleVisualProfileLevel4A))); - if ( foundQualitySetForResolutionError == KErrNotSupported ) - { - PRINT((_L("CVedMovie::GetVGAPropertiesL() VGA 16:9 not supported as output, try highest supported"))); - // No VGA, try the highest instead - foundQualitySetForResolutionError = GetHighPropertiesL(aLocalQualitySet); - } - else - { - PRINT((_L("CVedMovie::GetVGAPropertiesL() VGA 16:9 with MPEG-4 level 4a selected as output"))); - iResolution = KVedResolutionVGA16By9; - SetVideoCodecMimeType(aLocalQualitySet.iVideoCodecMimeType); - } - return foundQualitySetForResolutionError; - } - -//WVGA task -// ----------------------------------------------------------------------------- -// CVedMovieImp::GetWVGAPropertiesL -// ----------------------------------------------------------------------------- -// -TInt CVedMovieImp::GetWVGAPropertiesL(SVideoQualitySet& aLocalQualitySet) - { - TInt foundQualitySetForResolutionError = KErrNone;; - - if ( iVideoType == EVedVideoTypeAVCBaselineProfile ) - { - PRINT((_L("CVedMovie::GetWVGAPropertiesL() check H.264 level 3.1"))); - TRAP(foundQualitySetForResolutionError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeAVCBaselineProfileLevel3))); - if (foundQualitySetForResolutionError == KErrNotSupported ) - { - PRINT((_L("CVedMovie::GetWVGAPropertiesL() H.264 level 3.0 not supported"))); - // H.264 level 3.0 is not supported; switch to MPEG-4 - iVideoType = EVedVideoTypeMPEG4SimpleProfile; - } - else - { - PRINT((_L("CVedMovie::GetWVGAPropertiesL() H.264 level 3.0 supported"))); - iResolution = KVedResolutionWVGA; - SetVideoCodecMimeType(aLocalQualitySet.iVideoCodecMimeType); - } - } - - if ( iVideoType == EVedVideoTypeMPEG4SimpleProfile ) - { - // Settings may not exist => trap the leave - TRAP(foundQualitySetForResolutionError,iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, TPtrC8(KVedMimeTypeMPEG4SimpleVisualProfileLevel4A))); - if ( foundQualitySetForResolutionError == KErrNotSupported ) - { - PRINT((_L("CVedMovie::GetWVGAPropertiesL() WVGA not supported as output, try highest supported"))); - // No WVGA, try the highest instead - foundQualitySetForResolutionError = GetHighPropertiesL(aLocalQualitySet); - } - else - { - PRINT((_L("CVedMovie::GetWVGAPropertiesL() WVGA with MPEG-4 level 4a selected as output"))); - iResolution = KVedResolutionWVGA; - SetVideoCodecMimeType(aLocalQualitySet.iVideoCodecMimeType); - } - - } - return foundQualitySetForResolutionError; - - } - -// ----------------------------------------------------------------------------- -// CVedMovieImp::GetHighPropertiesL -// Get settings for High quality and apply relevant parts to member variables; -// the rest are applied in common part -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVedMovieImp::GetHighPropertiesL(SVideoQualitySet& aLocalQualitySet) - { - TInt foundQualitySetForResolutionError = KErrNone; - - PRINT((_L("CVedMovie::SetHighPropertiesL() use the highest supported"))); - TRAP(foundQualitySetForResolutionError, iQualitySelector->GetVideoQualitySetL( aLocalQualitySet, CVideoQualitySelector::EVideoQualityHigh)); - if ( foundQualitySetForResolutionError == KErrNone ) - { - iResolution.iWidth = aLocalQualitySet.iVideoWidth; - iResolution.iHeight = aLocalQualitySet.iVideoHeight; - iVideoType = MapVideoCodecTypes(aLocalQualitySet.iVideoCodecMimeType); - SetVideoCodecMimeType(aLocalQualitySet.iVideoCodecMimeType); - } - else - { - // handled in the end of CalculatePropertiesL, but should not be possible to reach this since High should always exist - } - - return foundQualitySetForResolutionError; - } - - -// ----------------------------------------------------------------------------- -// CVedMovieImp::ApplyAutomaticPropertiesL -// Apply the settings based on properties of input clips -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedMovieImp::ApplyAutomaticPropertiesL(TAudFileProperties &aAudioProperties) - { - // Automatic quality selection - - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() automatic quality selected"))); - TTimeIntervalMicroSeconds durationOfMP4MPEG4(0); - TTimeIntervalMicroSeconds durationOfMP4AVC(0); - - TTimeIntervalMicroSeconds durationOf3gppH263(0); - TTimeIntervalMicroSeconds durationOf3gppMPEG4(0); - TTimeIntervalMicroSeconds durationOf3gppAVC(0); - - TTimeIntervalMicroSeconds durationOfVGA(0); - TTimeIntervalMicroSeconds durationOfVGA16By9(0); - TTimeIntervalMicroSeconds durationOfQVGA(0); - TTimeIntervalMicroSeconds durationOfCIF(0); - TTimeIntervalMicroSeconds durationOfQCIF(0); - TTimeIntervalMicroSeconds durationOfSubQCIF(0); - TReal frameRateOfQVGA(0); - TReal frameRateOfCIF(0); - TReal framerate(0); - TBool audioOnlyMP4 = EFalse; - - //WVGA task - TTimeIntervalMicroSeconds durationOfWVGA(0); - TReal frameRateOfWVGA(0); - - iVideoType = EVedVideoTypeH263Profile0Level10; - - for (TInt i = 0; i < VideoClipCount(); i++) - { - CVedVideoClipInfo* currentInfo = VideoClip(i)->Info(); - - if (currentInfo->Class() == EVedVideoClipClassFile) - { - // Add up the durations of different resolution video - if (currentInfo->Resolution() == KVedResolutionSubQCIF) - { - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() subQCIF input"))); - durationOfSubQCIF= durationOfSubQCIF.Int64() + VideoClip(i)->EditedDuration().Int64(); - } - else if (currentInfo->Resolution() == KVedResolutionQCIF) - { - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() QCIF input"))); - durationOfQCIF= durationOfQCIF.Int64() + VideoClip(i)->EditedDuration().Int64(); - } - else if (currentInfo->Resolution() == KVedResolutionCIF) - { - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() CIF input"))); - durationOfCIF= durationOfCIF.Int64() + VideoClip(i)->EditedDuration().Int64(); - framerate = (1000*currentInfo->VideoFrameCount())/(currentInfo->Duration().Int64()/1000); - if ( framerate > frameRateOfCIF ) - { - frameRateOfCIF = framerate; - } - } - else if (currentInfo->Resolution() == KVedResolutionQVGA) - { - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() QVGA input"))); - durationOfQVGA= durationOfQVGA.Int64() + VideoClip(i)->EditedDuration().Int64(); - framerate = (1000*currentInfo->VideoFrameCount())/(currentInfo->Duration().Int64()/1000); - if ( framerate > frameRateOfQVGA ) - { - frameRateOfQVGA = framerate; - } - } - else if (currentInfo->Resolution() == KVedResolutionVGA16By9) - { - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() VGA 16:9 input"))); - durationOfVGA16By9 = durationOfVGA16By9.Int64() + VideoClip(i)->EditedDuration().Int64(); - } - - else if (currentInfo->Resolution() == KVedResolutionVGA) - { - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() VGA input"))); - durationOfVGA= durationOfVGA.Int64() + VideoClip(i)->EditedDuration().Int64(); - } - //WVGA task - else if (currentInfo->Resolution() == KVedResolutionWVGA) - { - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() WVGA input"))); - durationOfWVGA= durationOfWVGA.Int64() + VideoClip(i)->EditedDuration().Int64(); - } - - - if (currentInfo->Format() == EVedVideoFormat3GPP) - { - if ( currentInfo->VideoType() == EVedVideoTypeMPEG4SimpleProfile ) - { - // 3gpp file with MPEG-4 video - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() 3gpp with MPEG-4 input"))); - durationOf3gppMPEG4 = durationOf3gppMPEG4.Int64() + VideoClip(i)->EditedDuration().Int64(); - } - else if ( currentInfo->VideoType() == EVedVideoTypeAVCBaselineProfile ) - { - // 3gpp file with AVC video - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() 3gpp with AVC input"))); - durationOf3gppAVC = durationOf3gppAVC.Int64() + VideoClip(i)->EditedDuration().Int64(); - // NOTE: Level 1B is assumed always for QCIF AVC in automatic input case. - } - else - { - // 3gpp file with H.263 video - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() 3gpp with H.263 input"))); - durationOf3gppH263 = durationOf3gppH263.Int64() + VideoClip(i)->EditedDuration().Int64(); - if (currentInfo->VideoType() == EVedVideoTypeH263Profile0Level45) - { - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() 3gpp with H.263 L45 input"))); - iVideoType = EVedVideoTypeH263Profile0Level45; - } - } - } - - else if (currentInfo->Format() == EVedVideoFormatMP4) - { - - if ( currentInfo->VideoType() == EVedVideoTypeMPEG4SimpleProfile ) - { - // MP4 file with MPEG-4 video - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() MP4 with MPEG-4 input"))); - durationOfMP4MPEG4 = durationOfMP4MPEG4.Int64() + VideoClip(i)->EditedDuration().Int64(); - } - - else if ( currentInfo->VideoType() == EVedVideoTypeAVCBaselineProfile ) - { - // MP4 file with AVC video - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() MP4 with AVC input"))); - durationOfMP4AVC = durationOfMP4AVC.Int64() + VideoClip(i)->EditedDuration().Int64(); - // NOTE: What about levels ? - } - - else - { - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() MP4 with other input, not supported"))); - TVedPanic::Panic(TVedPanic::EInternal); - } - - } - else - { - // Unknown format - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() not 3gpp nor MP4 , not supported"))); - TVedPanic::Panic(TVedPanic::EInternal); - } - } - } // end of for loop, all input has been checked now - - - - // - // Decide the output format - // - - // First check if we had any video - if ( (durationOfMP4MPEG4.Int64() == 0) && (durationOfMP4AVC.Int64() == 0) && - (durationOf3gppH263.Int64() == 0) && (durationOf3gppMPEG4.Int64() == 0) && (durationOf3gppAVC.Int64() == 0) - ) - { - // no video, check audio - for ( TInt i = 0; i < iAudSong->ClipCount(KVedAudioTrackIndex); i++) - { - if ( iAudSong->Clip(i, KVedAudioTrackIndex)->Info()->Properties().iAudioType == EAudAMR ) - { - // 3gpp - durationOf3gppH263 = durationOf3gppH263.Int64() + iAudSong->Clip(i, KVedAudioTrackIndex)->EditedDuration().Int64(); - } - else - { - // mp4; mark audio-only as Mpeg4 video at this point - durationOfMP4MPEG4 = durationOfMP4MPEG4.Int64() + iAudSong->Clip(i, KVedAudioTrackIndex)->EditedDuration().Int64(); - audioOnlyMP4 = ETrue; - } - } - } - - // Then decide the file format - if ( ( durationOfMP4MPEG4.Int64() + durationOfMP4AVC.Int64() > 0 ) && - ( ( durationOfMP4MPEG4.Int64() + durationOfMP4AVC.Int64() ) >= - ( durationOf3gppH263.Int64() + durationOf3gppMPEG4.Int64() + durationOf3gppAVC.Int64() ) ) ) - { - // majority of input is MP4 - iFormat = EVedVideoFormatMP4; - if ( audioOnlyMP4 ) - { - // no video, just audio, use highest quality; this branch is only used to skip the else-branches - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() audio only with MP4"))); - // iVideoType is set in GetHighPropertiesL based on high quality level - } - else if ( durationOfMP4MPEG4 > durationOfMP4AVC ) - { - // MP4, video is MPEG-4 - iVideoType = EVedVideoTypeMPEG4SimpleProfile; - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is MP4 with MPEG-4 video"))); - } - else - { - // MP4, video is AVC - iVideoType = EVedVideoTypeAVCBaselineProfile; - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is MP4 with AVC video"))); - } - } - else - { - // majority of input is 3gpp, or no video. Keep 3gpp as in previous versions - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is 3gpp or no video"))); - iFormat = EVedVideoFormat3GPP; - - if ((durationOf3gppMPEG4 > 0) && - (durationOf3gppMPEG4 >= durationOf3gppAVC) && - (durationOf3gppMPEG4 >= durationOf3gppH263)) - { - iVideoType = EVedVideoTypeMPEG4SimpleProfile; - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is 3gpp with MPEG-4 video"))); - } - - else if ((durationOf3gppAVC > 0) && - (durationOf3gppAVC >= durationOf3gppH263)) - { - iVideoType = EVedVideoTypeAVCBaselineProfile; - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is 3gpp with AVC video"))); - } - - else - { - // H.263 - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is 3gpp with H.263 video"))); - if ( iVideoType != EVedVideoTypeH263Profile0Level45 ) - { - //use level 10 as used in previous versions - iVideoType = EVedVideoTypeH263Profile0Level10; - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is 3gpp with H.263 L10 video"))); - } - - } - } - - - - - // Then decide the resolution - - - - // cannot use the iQualitySet since it overrides the video settings. Use this mainly for checking audio settings - SVideoQualitySet localQualitySet; - TInt foundQualitySetForResolutionError = KErrNone; - - if ( audioOnlyMP4 ) - { - // get video parameters for audio-only MP4 clip; audio-only 3gpp is handled as QCIF - foundQualitySetForResolutionError = GetHighPropertiesL(localQualitySet); - } - //WVGA task - else if ((durationOfWVGA > 0) && - (durationOfWVGA >= durationOfVGA) && - (durationOfWVGA >= durationOfVGA16By9) && - (durationOfWVGA >= durationOfQVGA) && - (durationOfWVGA >= durationOfCIF) && - (durationOfWVGA >= durationOfQCIF) && - (durationOfWVGA >= durationOfSubQCIF)) - { - // VGA - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is WVGA"))); - iResolution = KVedResolutionWVGA; - foundQualitySetForResolutionError = GetWVGAPropertiesL(localQualitySet); - } - else if ((durationOfVGA > 0) && - (durationOfVGA >= durationOfVGA16By9) && - (durationOfVGA >= durationOfQVGA) && - (durationOfVGA >= durationOfCIF) && - (durationOfVGA >= durationOfQCIF) && - (durationOfVGA >= durationOfSubQCIF)) - { - // VGA - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is VGA"))); - iResolution = KVedResolutionVGA; - foundQualitySetForResolutionError = GetVGAPropertiesL(localQualitySet); - } - - else if ((durationOfVGA16By9 > 0) && - (durationOfVGA16By9 >= durationOfCIF) && - (durationOfVGA16By9 >= durationOfQVGA) && - (durationOfVGA16By9 >= durationOfQCIF) && - (durationOfVGA16By9 >= durationOfSubQCIF)) - { - // VGA 16:9 - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is VGA 16:9"))); - iResolution = KVedResolutionVGA16By9; - foundQualitySetForResolutionError = GetVGA16By9PropertiesL(localQualitySet); - } - - else if ((durationOfCIF > 0) && - (durationOfCIF >= durationOfQVGA) && - (durationOfCIF >= durationOfQCIF) && - (durationOfCIF >= durationOfSubQCIF)) - { - // CIF, but may be translated to QVGA if CIF not supported as output - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is CIF"))); - iResolution = KVedResolutionCIF; - foundQualitySetForResolutionError = GetCIFQVGAPropertiesL(KVedResolutionCIF, frameRateOfCIF, localQualitySet); - // audio parameters set in the end - } - else if ((durationOfQVGA > 0) && - (durationOfQVGA >= durationOfQCIF) && - (durationOfQVGA >= durationOfSubQCIF)) - { - // QVGA, but may be translated to CIF if QVGA not supported as output - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is QVGA"))); - iResolution = KVedResolutionQVGA; - foundQualitySetForResolutionError = GetCIFQVGAPropertiesL(KVedResolutionQVGA, frameRateOfQVGA, localQualitySet); - // audio parameters set in the end - } - else if ((durationOfSubQCIF > 0) && - (durationOfSubQCIF > durationOfQCIF)) // keep the > and not >= since QCIF is better than subQCIF - { - // subQCIF is not that important but is kept here anyway - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is subQCIF"))); - iResolution = KVedResolutionSubQCIF; - foundQualitySetForResolutionError = GetQCIFPropertiesL(localQualitySet); - // audio parameters set in the end - } - else - { - // QCIF - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() majority of input is QCIF"))); - iResolution = KVedResolutionQCIF; - foundQualitySetForResolutionError = GetQCIFPropertiesL(localQualitySet); - // audio parameters set in the end - } - - if ( foundQualitySetForResolutionError == KErrNone ) - { - // iVideoType and MIME-type were set earlier. - iVideoStandardBitrate = localQualitySet.iVideoBitRate; - iVideoFrameRate = localQualitySet.iVideoFrameRate; - iRandomAccessRate = localQualitySet.iRandomAccessRate; - // audio parameters set in the end - } - - - // Then handle cases where we didn't found suitable output format based on input resolution - // (i.e. we can't generate output that matches with majority of input) - if ( foundQualitySetForResolutionError == KErrNotSupported ) - { - - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() no suitable quality set found yet..."))); - // did not get preferred set from qualityselector; use highest one; may be overruled in MatchAudioPropertiesWithInput - if (iFormat == EVedVideoFormatMP4 ) - { - // MP4 => AAC - // High quality should be always present - - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() try taking the high quality"))); - TRAPD(err,iQualitySelector->GetVideoQualitySetL( localQualitySet, CVideoQualitySelector::EVideoQualityHigh)); - if ( err ) - { - // should not happen if the variation is done properly - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() problem in getting high quality set, ERROR"))); - User::Leave( err ); - } - - aAudioProperties.iAudioType = MapAudioCodecTypes(localQualitySet.iAudioFourCCType); - aAudioProperties.iSamplingRate = localQualitySet.iAudioSamplingRate; - if ( localQualitySet.iAudioChannels == 1 ) - { - aAudioProperties.iChannelMode = EAudSingleChannel; - } - else - { - aAudioProperties.iChannelMode = EAudStereo; - } - aAudioProperties.iBitrate = localQualitySet.iAudioBitRate; - // take also video settings from the new set - iResolution.iWidth = localQualitySet.iVideoWidth; - iResolution.iHeight = localQualitySet.iVideoHeight; - // MIME-type and bitrate - SetVideoCodecMimeType(localQualitySet.iVideoCodecMimeType); - iVideoStandardBitrate = localQualitySet.iVideoBitRate; - } - else - { - PRINT((_L("CVedMovie::ApplyAutomaticPropertiesL() use 3gpp"))); - // 3gp => use AMR - aAudioProperties.iAudioType = EAudAMR; - aAudioProperties.iSamplingRate = KVedAudioSamplingRate8k; - aAudioProperties.iChannelMode = EAudSingleChannel; - aAudioProperties.iBitrate = KAudBitRateDefault; //use default. - // set also video settings for 3gpp - iResolution = KVedResolutionQCIF; - // MIME-type and bitrate - iVideoCodecMimeType.Set(KVedMimeTypeH263); - iVideoStandardBitrate = KVedBitRateH263Level10; - } - - } - else - { - // preferred settings were got from quality set API without any error; take the audio settings too - - aAudioProperties.iAudioType = MapAudioCodecTypes(localQualitySet.iAudioFourCCType); - aAudioProperties.iSamplingRate = localQualitySet.iAudioSamplingRate; - if ( localQualitySet.iAudioChannels == 1 ) - { - aAudioProperties.iChannelMode = EAudSingleChannel; - } - else - { - aAudioProperties.iChannelMode = EAudStereo; - } - aAudioProperties.iBitrate = localQualitySet.iAudioBitRate; - } - - - - if ( aAudioProperties.iAudioType != EAudAMR ) - { - // still check that we don't do unnecessary audio transcoding. AMR output is not changed to anything else - if ( !MatchAudioPropertiesWithInput( aAudioProperties ) ) - { - // there was no input clip that matched the properties - - if ( foundQualitySetForResolutionError == KErrNotSupported ) - { - // the properties were taken from highest quality set after not finding a suitable set; better to ensure we have 16k - aAudioProperties.iSamplingRate = KVedAudioSamplingRate16k; - aAudioProperties.iChannelMode = EAudSingleChannel; - aAudioProperties.iBitrate = KAudBitRateDefault; //use default. - } - // else the properties were taken from a suitable set; convert audio to match them - - } - } - - } - -// ----------------------------------------------------------------------------- -// CVedMovieImp::ApplyRequestedPropertiesL -// Apply the settings the client requested -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedMovieImp::ApplyRequestedPropertiesL(TAudFileProperties &aAudioProperties) - { - TBool legacyMode = EFalse; - - if (iQuality == EQualityMMSInteroperability) - { - // MMS interoperability settings - PRINT((_L("CVedMovie::ApplyRequestedPropertiesL() MMS quality selected"))); - // MMS interoperability should be always there => no leave - iQualitySelector->GetVideoQualitySetL( iQualitySet, CVideoQualitySelector::EVideoQualityMMS); - // map the set to member variables later - - } - - else if (iQuality == EQualityResolutionQCIF) - { - // this is a legacy branch, used only with older editor UI - PRINT((_L("CVedMovie::ApplyRequestedPropertiesL() QCIF quality selected; check level 45 vs level 10"))); - legacyMode = ETrue; - - iResolution = KVedResolutionQCIF; - - // Start with MMS and upgrade based on input if needed - iQualitySelector->GetVideoQualitySetL( iQualitySet, CVideoQualitySelector::EVideoQualityMMS); - iFormat = MapVideoFormatTypes(iQualitySet.iVideoFileMimeType); - iVideoType = MapVideoCodecTypes(iQualitySet.iVideoCodecMimeType); - - aAudioProperties.iAudioType = MapAudioCodecTypes(iQualitySet.iAudioFourCCType); - aAudioProperties.iSamplingRate = iQualitySet.iAudioSamplingRate; - if ( iQualitySet.iAudioChannels == 1 ) - { - aAudioProperties.iChannelMode = EAudSingleChannel; - } - else - { - aAudioProperties.iChannelMode = EAudStereo; - } - aAudioProperties.iBitrate = iQualitySet.iAudioBitRate; - - - for (TInt i = 0; i < VideoClipCount(); i++) - { - CVedVideoClipInfo* currentInfo = VideoClip(i)->Info(); - - // Go through all files and check if any are H.263 Profile0 Level45 - if (currentInfo->Class() == EVedVideoClipClassFile) - { - if (currentInfo->VideoType() == EVedVideoTypeH263Profile0Level45) - { - iVideoType = EVedVideoTypeH263Profile0Level45; - } - } - } - - - if ( iVideoType == EVedVideoTypeH263Profile0Level45 ) - { - iVideoCodecMimeType.Set(KVedMimeTypeH263Level45); - iVideoStandardBitrate = KVedBitRateH263Level45; - } - else - { - iVideoCodecMimeType.Set(KVedMimeTypeH263); - iVideoStandardBitrate = KVedBitRateH263Level10; - } - } - - else if (iQuality == EQualityResolutionCIF) - { - // this is a legacy branch, used only with older editor UI - PRINT((_L("CVedMovie::ApplyRequestedPropertiesL() CIF quality selected"))); - legacyMode = ETrue; - iFormat = EVedVideoFormatMP4; - iVideoType = EVedVideoTypeMPEG4SimpleProfile; - iResolution = KVedResolutionCIF; - iVideoCodecMimeType.Set(KVedMimeTypeMPEG4SimpleVisualProfileLevel2); - iVideoStandardBitrate = KVedBitRateMPEG4Level2; - // use 16 kHz mono AAC, as used to be the selection with CIF in older editor versions - aAudioProperties.iAudioType = EAudAAC_MPEG4; - aAudioProperties.iSamplingRate = KVedAudioSamplingRate16k; - aAudioProperties.iChannelMode = EAudSingleChannel; - aAudioProperties.iBitrate = KAudBitRateDefault; //use default. - } - else if (iQuality == EQualityResolutionMedium) - { - PRINT((_L("CVedMovie::ApplyRequestedPropertiesL() medium quality selected"))); - // Medium quality should be always there => no leave - iQualitySelector->GetVideoQualitySetL( iQualitySet, CVideoQualitySelector::EVideoQualityNormal); - // map the set to member variables later - - } - else if (iQuality == EQualityResolutionHigh) - { - PRINT((_L("CVedMovie::ApplyRequestedPropertiesL() high quality selected"))); - // High quality should be always there => no leave - iQualitySelector->GetVideoQualitySetL( iQualitySet, CVideoQualitySelector::EVideoQualityHigh); - // map the set to member variables later - - } - - if ( !legacyMode ) // legacyMode is forced CIF or QCIF; their parameters were set already, this is for others - { - // set common video settings from the obtained iQualitySet. In automatic case they were taken from input - iFormat = MapVideoFormatTypes(iQualitySet.iVideoFileMimeType); - iVideoType = MapVideoCodecTypes(iQualitySet.iVideoCodecMimeType); - iResolution.iWidth = iQualitySet.iVideoWidth; - iResolution.iHeight = iQualitySet.iVideoHeight; - iVideoFrameRate = iQualitySet.iVideoFrameRate; - iVideoStandardBitrate = iQualitySet.iVideoBitRate; // still not restricted => not necessary to transcode - SetVideoCodecMimeType(iQualitySet.iVideoCodecMimeType); - iRandomAccessRate = iQualitySet.iRandomAccessRate; - - aAudioProperties.iAudioType = MapAudioCodecTypes(iQualitySet.iAudioFourCCType); - aAudioProperties.iSamplingRate = iQualitySet.iAudioSamplingRate; - if ( iQualitySet.iAudioChannels == 1 ) - { - aAudioProperties.iChannelMode = EAudSingleChannel; - } - else - { - aAudioProperties.iChannelMode = EAudStereo; - } - aAudioProperties.iBitrate = iQualitySet.iAudioBitRate; - } - } - - -// ----------------------------------------------------------------------------- -// CVedMovieImp::CalculatePropertiesL -// Determine & apply the output properties for movie -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedMovieImp::CalculatePropertiesL() - { - PRINT((_L("CVedMovie::CalculatePropertiesL() in"))); - - if (iOutputParamsSet) - return; - - if ( (VideoClipCount() == 0) && (AudioClipCount() == 0) ) - { - PRINT((_L("CVedMovie::CalculatePropertiesL() no clips in movie, out"))); - return; - } - - - // set some default values. These will be updated if needed, in the two functions called below - // default video framerate is 15 - iVideoFrameRate = iMaximumFramerate = 15.0; - // default random access rate is 1/5 fps - iRandomAccessRate = 0.2; - - TAudFileProperties audioProperties; - - if ( iQuality == EQualityAutomatic ) - { - // Automatic quality selection based on input - ApplyAutomaticPropertiesL(audioProperties); - } - else - { - // forced quality - ApplyRequestedPropertiesL(audioProperties); - } - - - - // Common finalization - - PRINT((_L("CVedMovie::CalculatePropertiesL() fileformat: %d"), iFormat)); - PRINT((_L("CVedMovie::CalculatePropertiesL() video codec, resolution, bitrate, framerate, random access rate: %d, (%d,%d), %d, %f, %f"), iVideoType, iResolution.iWidth, iResolution.iHeight, iVideoStandardBitrate, iVideoFrameRate, iRandomAccessRate)); - PRINT((_L("CVedMovie::CalculatePropertiesL() audio codec, samplingrate, channels: %d, %d, %d"), audioProperties.iAudioType, audioProperties.iSamplingRate, audioProperties.iChannelMode)); - - // Set the audio output properties here to the values specified above - if ( !iAudSong->SetOutputFileFormat(audioProperties.iAudioType, audioProperties.iSamplingRate,audioProperties.iChannelMode, audioProperties.iBitrate ) ) - { - PRINT((_L("CVedMovie::CalculatePropertiesL() iAudSong->SetOutputFileFormat failed, try again with default settings"))); - // something was wrong with the settings. Use default ones that should always work: - if ( audioProperties.iAudioType == EAudAMR ) - { - audioProperties.iSamplingRate = KVedAudioSamplingRate8k; - audioProperties.iChannelMode = EAudSingleChannel; - } - else - { - audioProperties.iAudioType = EAudAAC_MPEG4; - audioProperties.iSamplingRate = KVedAudioSamplingRate16k; - audioProperties.iChannelMode = EAudSingleChannel; - } - // try again; bitrate is default - iAudSong->SetOutputFileFormat(audioProperties.iAudioType, audioProperties.iSamplingRate, audioProperties.iChannelMode); - } - - } - - -void CVedMovieImp::SetAudioFadingL() - { - // Apply fading only if there are no specific dynamic level marks inserted. - // I.e. this is used only if audio volume is set by SetxxVolumeGainL or not set at all - if ( !iApplyDynamicLevelMark ) - { - - iNotifyObserver = EFalse; - for (TInt index = 0; index < VideoClipCount(); index++) - { - TBool fadeIn = EFalse; - TBool fadeOut = EFalse; - if ( index == 0 ) - { - // first clip, allow fade in always - fadeIn = ETrue; - } - else if (iVideoClipArray[index-1]->iMiddleTransitionEffect != EVedMiddleTransitionEffectNone) - { - // there is a transition effect before this clip, allow fade in - fadeIn = ETrue; - } - else - { - // no transition, no audio fading either - fadeIn = EFalse; - } - - if ( index == VideoClipCount()-1 ) - { - // last clip, allow fade out always - fadeOut = ETrue; - } - else if (iVideoClipArray[index]->iMiddleTransitionEffect != EVedMiddleTransitionEffectNone) - { - // there is a transition effect after this clip, allow fade out - fadeOut = ETrue; - } - else - { - // no transition, no audio fading either - fadeOut = EFalse; - } - - CVedVideoClip* clip = iVideoClipArray[index]; - - if (clip->EditedHasAudio() && !clip->IsMuted() && (fadeIn || fadeOut)) - { - - TTimeIntervalMicroSeconds clipLength = - TTimeIntervalMicroSeconds( clip->CutOutTime().Int64() - clip->CutInTime().Int64() ); - - // Do fading only if clip length is over 1 second - // Otherwise the original markers remain untouched - if ( clipLength > TTimeIntervalMicroSeconds(1000000) ) - { - // get normal level - TInt normalLevel = 0; - - // get normal level - - // NOTE: This assumes that the client has set a constant - // gain value for the whole clip, i.e. two markers, - // one at the beginning and other at the end - // iApplyDynamicLevelMark now controls that removing others is safe - - normalLevel = clip->GetVolumeGain(); - - // remove all existing markers - while (clip->DynamicLevelMarkCount()) - { - clip->RemoveDynamicLevelMark(0); - } - - // add movie-level volume gain - normalLevel += iVolumeGainForAllVideoClips; - - // use normal - 50dB as lower level; step in values is 0.5db - TInt lowLevel = normalLevel - 100; - if ( lowLevel < -127 ) - { - lowLevel = -127; - } - - // 0s: low - TVedDynamicLevelMark mark1(clip->CutInTime(), lowLevel); - - // 0.5s: normal - TTimeIntervalMicroSeconds time = - TTimeIntervalMicroSeconds(clip->CutInTime().Int64() + - TInt64(500000) ); - - TVedDynamicLevelMark mark2(time, normalLevel); - - // clip length - 0.5s: normal - time = TTimeIntervalMicroSeconds(clip->CutOutTime().Int64() - - TInt64(500000) ); - - TVedDynamicLevelMark mark3(time, normalLevel); - - // clip length: low - TVedDynamicLevelMark mark4(clip->CutOutTime(), lowLevel); - - if ( fadeIn ) - { - clip->InsertDynamicLevelMarkL(mark1); - clip->InsertDynamicLevelMarkL(mark2); - } - if ( fadeOut ) - { - clip->InsertDynamicLevelMarkL(mark3); - clip->InsertDynamicLevelMarkL(mark4); - } - } - } - } - - for (TInt index = 0; index < AudioClipCount(); index++) - { - CAudClip* clip = iAudSong->Clip(index, KVedAudioTrackIndex); - - if (!clip->Muting()) - { - - TTimeIntervalMicroSeconds clipLength = - TTimeIntervalMicroSeconds( clip->CutOutTime().Int64() - clip->CutInTime().Int64() ); - - // Do fading only if clip length is over 1 second - // Otherwise the original markers remain untouched - if ( clipLength > TTimeIntervalMicroSeconds(1000000) ) - { - // get normal level - TInt normalLevel = 0; - - // get normal level - - // NOTE: This assumes that the client has set a constant - // gain value for the whole clip, i.e. two markers, - // one at the beginning and other at the end - // iApplyDynamicLevelMark now controls that removing others is safe - - normalLevel = clip->GetVolumeGain(); - - // remove all existing markers - while (clip->DynamicLevelMarkCount()) - { - clip->RemoveDynamicLevelMark(0); - } - // add movie-level volume gain - normalLevel += iVolumeGainForAllAudioClips; - - // use normal - 50dB as lower level; step in values is 0.5db - TInt lowLevel = normalLevel - 100; - if ( lowLevel < -127 ) - { - lowLevel = -127; - } - - // 0s: low - TAudDynamicLevelMark mark1(clip->CutInTime(), lowLevel); - - // 0.5s: normal - TTimeIntervalMicroSeconds time = - TTimeIntervalMicroSeconds(clip->CutInTime().Int64() + - TInt64(500000) ); - - TAudDynamicLevelMark mark2(time, normalLevel); - - // clip length - 0.5s: normal - time = TTimeIntervalMicroSeconds(clip->CutOutTime().Int64() - - TInt64(500000) ); - - TAudDynamicLevelMark mark3(time, normalLevel); - - // clip length: low - TAudDynamicLevelMark mark4(clip->CutOutTime(), lowLevel); - - clip->InsertDynamicLevelMarkL(mark1); - clip->InsertDynamicLevelMarkL(mark2); - clip->InsertDynamicLevelMarkL(mark3); - clip->InsertDynamicLevelMarkL(mark4); - } - } - } - - iNotifyObserver = ETrue; - } - } - -void CVedMovieImp::SetOutputParametersL(TVedOutputParameters& aOutputParams) -{ - PRINT((_L("CVedMovie::SetOutputParametersL(), aOutputParams: video %d, (%dx%d), %d bps, %ffps"), aOutputParams.iVideoType, aOutputParams.iVideoResolution.iWidth, aOutputParams.iVideoResolution.iHeight, aOutputParams.iVideoBitrate, aOutputParams.iVideoFrameRate)); - PRINT((_L("CVedMovie::SetOutputParametersL(), aOutputParams: audio %d, %d bps, s/m: %d, %d Hz"), aOutputParams.iAudioType, aOutputParams.iAudioBitrate, aOutputParams.iAudioChannelMode, aOutputParams.iAudioSamplingRate)); - PRINT((_L("CVedMovie::SetOutputParametersL(), aOutputParams: video segmentation: %d GOBs, %d bytes/segment"), aOutputParams.iSyncIntervalInPicture, aOutputParams.iSegmentSizeInBytes)); - - if (aOutputParams.iVideoType != EVedVideoTypeUnrecognized && - aOutputParams.iVideoType != EVedVideoTypeNoVideo) - { - iVideoType = aOutputParams.iVideoType; - } - - if ( (aOutputParams.iVideoResolution != TSize(0, 0)) && - (aOutputParams.iVideoResolution != KVedResolutionSubQCIF) && - (aOutputParams.iVideoResolution != KVedResolutionQCIF) && - (aOutputParams.iVideoResolution != KVedResolutionCIF) && - (aOutputParams.iVideoResolution != KVedResolutionQVGA) && - (aOutputParams.iVideoResolution != KVedResolutionVGA16By9) && - (aOutputParams.iVideoResolution != KVedResolutionVGA) && - (aOutputParams.iVideoResolution != KVedResolutionWVGA) ) - { - User::Leave(KErrNotSupported); - } - -#ifndef VIDEOEDITORENGINE_AVC_EDITING - if ( iVideoType == EVedVideoTypeAVCBaselineProfile ) - User::Leave(KErrNotSupported); -#endif - - // Allow AVC & MPEG-4 QVGA/CIF - if ( ( aOutputParams.iVideoResolution == KVedResolutionCIF ) || - ( aOutputParams.iVideoResolution == KVedResolutionQVGA ) ) - { - if ( iVideoType == EVedVideoTypeH263Profile0Level10 || - iVideoType == EVedVideoTypeH263Profile0Level45 ) - User::Leave(KErrNotSupported); - - } - // Allow MPEG VGA - if ( aOutputParams.iVideoResolution == KVedResolutionVGA ) - { - if ( iVideoType != EVedVideoTypeMPEG4SimpleProfile ) - User::Leave(KErrNotSupported); - } - - if (aOutputParams.iVideoResolution != TSize(0,0)) - iResolution = aOutputParams.iVideoResolution; - - switch (iVideoType) - { - case EVedVideoTypeH263Profile0Level10: - - // check bitrate - if ( aOutputParams.iVideoBitrate > KVedBitRateH263Level10 ) - User::Leave(KErrNotSupported); - iVideoCodecMimeType.Set(KVedMimeTypeH263); - break; - - case EVedVideoTypeH263Profile0Level45: - - // check bitrate - if ( aOutputParams.iVideoBitrate > KVedBitRateH263Level45 ) - User::Leave(KErrNotSupported); - iVideoCodecMimeType.Set(KVedMimeTypeH263Level45); - break; - - case EVedVideoTypeMPEG4SimpleProfile: - - // check bitrate - if ( iResolution == KVedResolutionCIF || iResolution == KVedResolutionQVGA ) - { - if ( aOutputParams.iVideoBitrate > KVedBitRateMPEG4Level2 ) - User::Leave(KErrNotSupported); - iVideoCodecMimeType.Set(KVedMimeTypeMPEG4SimpleVisualProfileLevel2); - } - - else if ( iResolution == KVedResolutionVGA || iResolution == KVedResolutionVGA16By9 ) - { - if ( aOutputParams.iVideoBitrate > KVedBitRateMPEG4Level4A ) - User::Leave(KErrNotSupported); - iVideoCodecMimeType.Set(KVedMimeTypeMPEG4SimpleVisualProfileLevel4A); - } - - else - { - if ( aOutputParams.iVideoBitrate > KVedBitRateMPEG4Level0 ) - User::Leave(KErrNotSupported); - iVideoCodecMimeType.Set(KVedMimeTypeMPEG4SimpleVisualProfile); - } - break; - - case EVedVideoTypeAVCBaselineProfile: - - // check bitrate - //WVGA task - if ( iResolution == KVedResolutionWVGA ) - { - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel3_1); - } - - else if ( iResolution == KVedResolutionCIF || iResolution == KVedResolutionQVGA ) - { - if ( aOutputParams.iVideoBitrate > KVedBitRateAVCLevel1_2 ) - User::Leave(KErrNotSupported); - if ( aOutputParams.iVideoBitrate <= KVedBitRateAVCLevel1_1 ) - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel1_1); - else - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel1_2); - } - else - { - if ( aOutputParams.iVideoBitrate > KVedBitRateAVCLevel1b ) - User::Leave(KErrNotSupported); - if ( aOutputParams.iVideoBitrate <= KVedBitRateAVCLevel1 ) - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel1); - else - iVideoCodecMimeType.Set(KVedMimeTypeAVCBaselineProfileLevel1B); - } - break; - - default: - User::Leave(KErrArgument); - - } - - // check if the selected codec/resolution is a supported format - TBool supported = iCodecChecker->IsSupportedOutputFormatL(iVideoCodecMimeType, iResolution); - if ( !supported ) - { - PRINT(_L("CVedMovie::SetOutputParametersL(), format not supported")); - User::Leave(KErrNotSupported); - } - - // can be zero => not used - iVideoStandardBitrate = iVideoRestrictedBitrate = aOutputParams.iVideoBitrate; - - // check frame rate - if (aOutputParams.iVideoFrameRate > KVedMaxVideoFrameRate) - User::Leave(KErrNotSupported); - - // default random access rate is 1/5 fps - iRandomAccessRate = 0.2; - - // can be zero => not used - iVideoFrameRate = aOutputParams.iVideoFrameRate; - - if (aOutputParams.iAudioType == EVedAudioTypeNoAudio) - { - // use default audio for this video - switch (iVideoType) - { - case EVedVideoTypeH263Profile0Level10: - case EVedVideoTypeH263Profile0Level45: - aOutputParams.iAudioType = EVedAudioTypeAMR; - break; - - case EVedVideoTypeMPEG4SimpleProfile: - case EVedVideoTypeAVCBaselineProfile: - default: - aOutputParams.iAudioType = EVedAudioTypeAAC_LC; - break; - } - - } - - if (aOutputParams.iAudioType != EVedAudioTypeAMR && - aOutputParams.iAudioType != EVedAudioTypeAAC_LC ) - User::Leave(KErrNotSupported); - - if ( aOutputParams.iAudioChannelMode != EVedAudioChannelModeStereo && - aOutputParams.iAudioChannelMode != EVedAudioChannelModeDualChannel && - aOutputParams.iAudioChannelMode != EVedAudioChannelModeSingleChannel ) - User::Leave(KErrArgument); - - if ( aOutputParams.iAudioType == EVedAudioTypeAMR ) - { - if ( aOutputParams.iAudioBitrate != 0 && - aOutputParams.iAudioBitrate != KVedAMRBitrate4_75k && - aOutputParams.iAudioBitrate != KVedAMRBitrate5_15k && - aOutputParams.iAudioBitrate != KVedAMRBitrate5_90k && - aOutputParams.iAudioBitrate != KVedAMRBitrate6_70k && - aOutputParams.iAudioBitrate != KVedAMRBitrate7_40k && - aOutputParams.iAudioBitrate != KVedAMRBitrate7_95k && - aOutputParams.iAudioBitrate != KVedAMRBitrate10_2k && - aOutputParams.iAudioBitrate != KVedAMRBitrate12_2k ) - { - User::Leave(KErrNotSupported); - } - - if ( aOutputParams.iAudioSamplingRate != 0 && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate8k ) - User::Leave(KErrNotSupported); - - if ( aOutputParams.iAudioChannelMode != EVedAudioChannelModeSingleChannel ) - User::Leave(KErrNotSupported); - - } - - else if (aOutputParams.iAudioType == EVedAudioTypeAAC_LC) - { - if ( aOutputParams.iAudioSamplingRate != 0 && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate8k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate11_025k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate12k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate16k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate22_050k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate24k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate32k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate44_1k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate48k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate64k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate88_2k && - aOutputParams.iAudioSamplingRate != KVedAudioSamplingRate96k ) - { - User::Leave(KErrNotSupported); - } - - TInt numChannels = 1; - if ( aOutputParams.iAudioChannelMode == EVedAudioChannelModeStereo || - aOutputParams.iAudioChannelMode == EVedAudioChannelModeDualChannel ) - numChannels = 2; - - TInt samplingRate = (aOutputParams.iAudioSamplingRate != 0) ? aOutputParams.iAudioSamplingRate : KVedAudioSamplingRate16k; - - TInt minBitrate = 1 * numChannels * samplingRate; - TInt maxBitrate = 6 * numChannels * samplingRate; - - if ( aOutputParams.iAudioBitrate > 0 && - (aOutputParams.iAudioBitrate < minBitrate || aOutputParams.iAudioBitrate > maxBitrate) ) - User::Leave(KErrNotSupported); - - } - - if ( iVideoType == EVedVideoTypeH263Profile0Level10 || - iVideoType == EVedVideoTypeH263Profile0Level45 ) - { - // For H.263 - iSyncIntervalInPicture = aOutputParams.iSyncIntervalInPicture; - - // Segment size not supported for H.263 - if ( aOutputParams.iSegmentSizeInBytes != 0 ) - User::Leave(KErrNotSupported); - } - else - { - // For H.264 and MPEG-4 - iSyncIntervalInPicture = aOutputParams.iSegmentSizeInBytes; - - // Sync interval not supported for H.264 and MPEG-4 - if ( aOutputParams.iSyncIntervalInPicture != 0 ) - User::Leave(KErrNotSupported); - } - - TAudFileProperties audioProperties; - - if (aOutputParams.iAudioType == EVedAudioTypeAMR) - audioProperties.iAudioType = EAudAMR; - - else if (aOutputParams.iAudioType == EVedAudioTypeAAC_LC) - audioProperties.iAudioType = EAudAAC_MPEG4; - - if (aOutputParams.iAudioBitrate > 0) - audioProperties.iBitrate = aOutputParams.iAudioBitrate; - - if (aOutputParams.iAudioSamplingRate > 0) - audioProperties.iSamplingRate = aOutputParams.iAudioSamplingRate; - - audioProperties.iChannelMode = EAudSingleChannel; - - if (aOutputParams.iAudioChannelMode == EVedAudioChannelModeStereo) - audioProperties.iChannelMode = EAudStereo; - - else if (aOutputParams.iAudioChannelMode == EAudDualChannel) - audioProperties.iChannelMode = EAudDualChannel; - - // Set the audio output properties here to the values specified above - if ( iAudSong->SetOutputFileFormat(audioProperties.iAudioType, audioProperties.iSamplingRate,audioProperties.iChannelMode, audioProperties.iBitrate) ) - { - iOutputParamsSet = ETrue; - FireMovieOutputParametersChanged(this); - } - else - { - // parameters didn't work - User::Leave( KErrArgument ); - } -} - - -TInt CVedMovieImp::CheckVideoClipInsertable(CVedVideoClip *aClip) const - { - /* Check format and video and audio types of a file-based clip. */ - if ( !aClip ) - { - return KErrGeneral; - } - - if (aClip->iInfo->Class() == EVedVideoClipClassFile) - { - if ( (aClip->iInfo->Format() != EVedVideoFormat3GPP) && - (aClip->iInfo->Format() != EVedVideoFormatMP4) - ) - { - return KErrNotSupported; - } - - if ( (aClip->iInfo->VideoType() != EVedVideoTypeH263Profile0Level10) && - (aClip->iInfo->VideoType() != EVedVideoTypeH263Profile0Level45) && - (aClip->iInfo->VideoType() != EVedVideoTypeMPEG4SimpleProfile) && - (aClip->iInfo->VideoType() != EVedVideoTypeAVCBaselineProfile) - ) - { - return KErrNotSupported; - } - - if ( (aClip->iInfo->AudioType() != EVedAudioTypeNoAudio) && - (aClip->iInfo->AudioType() != EVedAudioTypeAMR) && - (aClip->iInfo->AudioType() != EVedAudioTypeAMRWB) && - (aClip->iInfo->AudioType() != EVedAudioTypeAAC_LC) ) - { - return KErrNotSupported; - } - - if ( (aClip->iInfo->AudioType() != EVedAudioTypeNoAudio) && aClip->iInfo->AudioChannelMode() == EVedAudioChannelModeUnrecognized ) - { - return KErrNotSupported; - } - } - - if (aClip->Info()->Class() == EVedVideoClipClassFile) - { - TInt error = KErrNone; - TBool supported = EFalse; - - // check if clip format / resolution is supported - TRAP( error, supported = iCodecChecker->IsSupportedInputClipL(aClip) ); - - if ( error != KErrNone ) - { - return error; - } - - if ( !supported ) - { - PRINT(_L("CVedMovie::CheckVideoClipInsertable(), clip not supported")); - return KErrNotSupported; - } - } - - return KErrNone; - } - - -TInt CVedMovieImp::GetSizeEstimateL() const - { - PRINT(_L("CVedMovieImp::GetSizeEstimateL")); - - if ((VideoClipCount() == 0) && (AudioClipCount() == 0)) - { - return 0; - } - - if ( iProcessor ) - { - return iProcessor->GetMovieSizeEstimateL(this); - } - else - { - return 0; - } - } - -void CVedMovieImp::GetDurationEstimateL(TInt aTargetSize, - TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds& aEndTime) - { - if ((VideoClipCount() == 0) && (AudioClipCount() == 0)) - { - User::Leave( KErrNotReady ); - } - - if ( iProcessor ) - { - User::LeaveIfError( iProcessor->GetMovieSizeEstimateForMMSL(this, - aTargetSize, - aStartTime, - aEndTime) ); - } - else - { - User::Leave( KErrNotReady ); - } - } - - -TBool CVedMovieImp::IsMovieMMSCompatible() const - { - return ( ( iFormat == EVedVideoFormat3GPP ) && - ( iVideoType == EVedVideoTypeH263Profile0Level10 ) && - ( AudioType() == EVedAudioTypeAMR ) ); - } - - -void CVedMovieImp::InsertVideoClipL(const TDesC& aFileName, TInt aIndex) - { - PRINT(_L("CVedMovieImp::InsertVideoClipL")); - - __ASSERT_ALWAYS(iAddOperation->iVideoClip == 0, - TVedPanic::Panic(TVedPanic::EMovieAddOperationAlreadyRunning)); - iAddedVideoClipIndex = aIndex; - - if (iAddedVideoClipFilename) - { - delete iAddedVideoClipFilename; - iAddedVideoClipFilename = 0; - } - - iAddedVideoClipFilename = HBufC::NewL(aFileName.Size()); - *iAddedVideoClipFilename = aFileName; - iAddedVideoClipFileHandle = NULL; - - // add audio clip - TTimeIntervalMicroSeconds startTime(0); - - if (aIndex > 0) - { - startTime = VideoClipEndTime(aIndex - 1); - } - iAudSong->AddClipL(aFileName, startTime); - } - -void CVedMovieImp::InsertVideoClipL(RFile* aFileHandle, TInt aIndex) - { - PRINT(_L("CVedMovieImp::InsertVideoClipL")); - - __ASSERT_ALWAYS(iAddOperation->iVideoClip == 0, - TVedPanic::Panic(TVedPanic::EMovieAddOperationAlreadyRunning)); - iAddedVideoClipIndex = aIndex; - - if (iAddedVideoClipFilename) - { - delete iAddedVideoClipFilename; - iAddedVideoClipFilename = 0; - } - - iAddedVideoClipFileHandle = aFileHandle; - - // add audio clip - TTimeIntervalMicroSeconds startTime(0); - - if (aIndex > 0) - { - startTime = VideoClipEndTime(aIndex - 1); - } - iAudSong->AddClipL(aFileHandle, startTime); - } - - - -void CVedMovieImp::InsertVideoClipL(CVedVideoClipGenerator& aGenerator, - TBool aIsOwnedByVideoClip, TInt aIndex) - { - PRINT(_L("CVedMovieImp::InsertVideoClipL")); - - __ASSERT_ALWAYS(iAddOperation->iVideoClip == 0, - TVedPanic::Panic(TVedPanic::EMovieAddOperationAlreadyRunning)); - - iAddOperation->iVideoClip = CVedVideoClip::NewL(this, aGenerator, - aIndex, *iAddOperation, aIsOwnedByVideoClip); - iAddOperation->iIsVideoGeneratorOwnedByVideoClip = aIsOwnedByVideoClip; - } - - -void CVedMovieImp::RemoveVideoClip(TInt aIndex) - { - PRINT(_L("CVedMovieImp::RemoveVideoClip")); - - if ( (aIndex > VideoClipCount()) || (aIndex < 0) ) - { - return; - } - - CVedVideoClip* clip = iVideoClipArray[aIndex]; - TBool hasAudio = clip->EditedHasAudio(); - if (hasAudio) - { - iAudSong->RemoveClip(clip->iAudClip->IndexOnTrack(), 0); - } - - iVideoClipArray.Remove(aIndex); - delete clip; - - if (aIndex < VideoClipCount()) - { - clip = iVideoClipArray[aIndex]; - clip->iIndex = aIndex; - RecalculateVideoClipTimings(clip); - } - else if (VideoClipCount() > 0) - { - clip = iVideoClipArray[aIndex - 1]; - RecalculateVideoClipTimings(clip); - } - - TRAPD(err,CalculatePropertiesL());// ignore error? - if (err != KErrNone) { } - - FireVideoClipRemoved(this, aIndex); - } - - -void CVedMovieImp::RecalculateVideoClipTimings(CVedVideoClip* aVideoClip) - { - TInt index = aVideoClip->iIndex; - - TInt64 startTime; - if (index == 0) - { - startTime = 0; - } - else - { - startTime = iVideoClipArray[index - 1]->EndTime().Int64(); - } - - for (; index < VideoClipCount(); index++) - { - CVedVideoClip* clip = iVideoClipArray[index]; - clip->iIndex = index; - clip->iStartTime = startTime; - clip->UpdateAudioClip(); - startTime = clip->EndTime().Int64(); - } - iAudSong->SetDuration(Duration()); - } - - -void CVedMovieImp::SetStartTransitionEffect(TVedStartTransitionEffect aEffect) - { - __ASSERT_ALWAYS(VideoClipCount() > 0, TVedPanic::Panic(TVedPanic::EMovieEmpty)); - __ASSERT_ALWAYS((aEffect >= EVedStartTransitionEffectNone) - && (aEffect < EVedStartTransitionEffectLast), - TVedPanic::Panic(TVedPanic::EMovieIllegalStartTransitionEffect)); - - if (aEffect != iStartTransitionEffect) - { - iStartTransitionEffect = aEffect; - FireStartTransitionEffectChanged(this); - } - } - - -void CVedMovieImp::SetMiddleTransitionEffect(TVedMiddleTransitionEffect aEffect, - TInt aIndex) - { - __ASSERT_ALWAYS((aEffect >= EVedMiddleTransitionEffectNone) - && (aEffect < EVedMiddleTransitionEffectLast), - TVedPanic::Panic(TVedPanic::EMovieIllegalMiddleTransitionEffect)); - - if (aIndex == (iVideoClipArray.Count() - 1)) - { - aIndex++; // make aIndex out of range to cause panic - } - - if (aEffect != iVideoClipArray[aIndex]->iMiddleTransitionEffect) - { - iVideoClipArray[aIndex]->iMiddleTransitionEffect = aEffect; - FireMiddleTransitionEffectChanged(this, aIndex); - } - } - - -void CVedMovieImp::SetEndTransitionEffect(TVedEndTransitionEffect aEffect) - { - __ASSERT_ALWAYS(VideoClipCount() > 0, TVedPanic::Panic(TVedPanic::EMovieEmpty)); - __ASSERT_ALWAYS((aEffect >= EVedEndTransitionEffectNone) - && (aEffect < EVedEndTransitionEffectLast), - TVedPanic::Panic(TVedPanic::EMovieIllegalEndTransitionEffect)); - - if (aEffect != iEndTransitionEffect) - { - iEndTransitionEffect = aEffect; - FireEndTransitionEffectChanged(this); - } - } - - -void CVedMovieImp::AddAudioClipL(const TDesC& aFileName, - TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds aCutInTime, - TTimeIntervalMicroSeconds aCutOutTime) - { - __ASSERT_ALWAYS(iAddOperation->iVideoClip == 0, - TVedPanic::Panic(TVedPanic::EMovieAddOperationAlreadyRunning)); - - iAudSong->AddClipL(aFileName, aStartTime, KVedAudioTrackIndex, aCutInTime, aCutOutTime); - } - -void CVedMovieImp::AddAudioClipL(RFile* aFileHandle, - TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds aCutInTime, - TTimeIntervalMicroSeconds aCutOutTime) - { - __ASSERT_ALWAYS(iAddOperation->iVideoClip == 0, - TVedPanic::Panic(TVedPanic::EMovieAddOperationAlreadyRunning)); - - iAudSong->AddClipL(aFileHandle, aStartTime, KVedAudioTrackIndex, aCutInTime, aCutOutTime); - } - - -void CVedMovieImp::RemoveAudioClip(TInt aIndex) - { - iAudSong->RemoveClip(aIndex, KVedAudioTrackIndex); - } - -void CVedMovieImp::Reset() - { - DoReset(); - - FireMovieReseted(this); - } - - -void CVedMovieImp::DoReset() - { - iVideoClipArray.ResetAndDestroy(); - iAudioClipInfoArray.ResetAndDestroy(); - - iStartTransitionEffect = EVedStartTransitionEffectNone; - iEndTransitionEffect = EVedEndTransitionEffectNone; - - if (iAudSong != 0) - { - iAudSong->Reset(EFalse); - } - } - - -void CVedMovieImp::RegisterMovieObserverL(MVedMovieObserver* aObserver) - { - PRINT(_L("CVedMovieImp::RegisterMovieObserverL")); - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - if (iObserverArray[i] == aObserver) - { - TVedPanic::Panic(TVedPanic::EMovieObserverAlreadyRegistered); - } - } - - User::LeaveIfError(iObserverArray.Append(aObserver)); - } - - -void CVedMovieImp::UnregisterMovieObserver(MVedMovieObserver* aObserver) - { - PRINT(_L("CVedMovieImp::UnregisterMovieObserver")); - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - if (iObserverArray[i] == aObserver) - { - iObserverArray.Remove(i); - return; - } - } - } - -TBool CVedMovieImp::MovieObserverIsRegistered(MVedMovieObserver* aObserver) - { - PRINT(_L("CVedMovieImp::MovieObserverIsRegistered")); - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - if (iObserverArray[i] == aObserver) - { - return ETrue; - } - } - - return EFalse; - } - -CVedVideoClipInfo* CVedMovieImp::VideoClipInfo(TInt aIndex) const - { - return iVideoClipArray[aIndex]->Info(); - } - -TBool CVedMovieImp::VideoClipEditedHasAudio(TInt aIndex) const - { - return iVideoClipArray[aIndex]->EditedHasAudio(); - } - -void CVedMovieImp::VideoClipSetIndex(TInt aOldIndex, TInt aNewIndex) - { - iVideoClipArray[aOldIndex]->SetIndex(aNewIndex); - } - -TInt CVedMovieImp::VideoClipSpeed(TInt aIndex) const - { - return iVideoClipArray[aIndex]->Speed(); - } - -void CVedMovieImp::VideoClipSetSpeed(TInt aIndex, TInt aSpeed) - { - iVideoClipArray[aIndex]->SetSpeed(aSpeed); - } - -TVedColorEffect CVedMovieImp::VideoClipColorEffect(TInt aIndex) const - { - return iVideoClipArray[aIndex]->ColorEffect(); - } - -void CVedMovieImp::VideoClipSetColorEffect(TInt aIndex, TVedColorEffect aColorEffect) - { - iVideoClipArray[aIndex]->SetColorEffect(aColorEffect); - } - -TBool CVedMovieImp::VideoClipIsMuteable(TInt aIndex) const - { - return iVideoClipArray[aIndex]->IsMuteable(); - } - -TBool CVedMovieImp::VideoClipIsMuted(TInt aIndex) const - { - return iVideoClipArray[aIndex]->IsMuted(); - } - -void CVedMovieImp::VideoClipSetMuted(TInt aIndex, TBool aMuted) - { - iVideoClipArray[aIndex]->SetMuted(aMuted); - } - -TBool CVedMovieImp::VideoClipNormalizing(TInt aIndex) const - { - return iVideoClipArray[aIndex]->Normalizing(); - } - -void CVedMovieImp::VideoClipSetNormalizing(TInt aIndex, TBool aNormalizing) - { - iVideoClipArray[aIndex]->SetNormalizing(aNormalizing); - } - -void CVedMovieImp::VideoClipInsertDynamicLevelMarkL(TInt aIndex, TVedDynamicLevelMark aMark) - { - __ASSERT_ALWAYS(aIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - - iApplyDynamicLevelMark = ETrue; - iVideoClipArray[aIndex]->InsertDynamicLevelMarkL(aMark); - } - -void CVedMovieImp::VideoClipRemoveDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex) - { - __ASSERT_ALWAYS(aClipIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - - iVideoClipArray[aClipIndex]->RemoveDynamicLevelMark(aMarkIndex); - } - -TInt CVedMovieImp::VideoClipDynamicLevelMarkCount(TInt aIndex) const - { - __ASSERT_ALWAYS(aIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - - return iVideoClipArray[aIndex]->DynamicLevelMarkCount(); - } - -TVedDynamicLevelMark CVedMovieImp::VideoClipDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex) - { - __ASSERT_ALWAYS(aClipIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - - return iVideoClipArray[aClipIndex]->DynamicLevelMark(aMarkIndex); - } - -TTimeIntervalMicroSeconds CVedMovieImp::VideoClipCutInTime(TInt aIndex) const - { - return iVideoClipArray[aIndex]->CutInTime(); - } - -void CVedMovieImp::VideoClipSetCutInTime(TInt aIndex, TTimeIntervalMicroSeconds aCutInTime) - { - iVideoClipArray[aIndex]->SetCutInTime(aCutInTime); - // basically we should call CalculatePropertiesL after this one, but since it is called in StartMovie, we can probably skip it - } - -TTimeIntervalMicroSeconds CVedMovieImp::VideoClipCutOutTime(TInt aIndex) const - { - return iVideoClipArray[aIndex]->CutOutTime(); - } - -void CVedMovieImp::VideoClipSetCutOutTime(TInt aIndex, TTimeIntervalMicroSeconds aCutOutTime) - { - iVideoClipArray[aIndex]->SetCutOutTime(aCutOutTime); - // basically we should call CalculatePropertiesL after this one, but since it is called in StartMovie, we can probably skip it - } - -TTimeIntervalMicroSeconds CVedMovieImp::VideoClipStartTime(TInt aIndex) const - { - return iVideoClipArray[aIndex]->StartTime(); - } - -TTimeIntervalMicroSeconds CVedMovieImp::VideoClipEndTime(TInt aIndex) const - { - return iVideoClipArray[aIndex]->EndTime(); - } - -TTimeIntervalMicroSeconds CVedMovieImp::VideoClipEditedDuration(TInt aIndex) const - { - return iVideoClipArray[aIndex]->EditedDuration(); - } - -CVedAudioClipInfo* CVedMovieImp::AudioClipInfo(TInt aIndex) const - { - return iAudioClipInfoArray[aIndex]; - } - -TTimeIntervalMicroSeconds CVedMovieImp::AudioClipStartTime(TInt aIndex) const - { - return iAudSong->Clip(aIndex, KVedAudioTrackIndex)->StartTime(); - } - -void CVedMovieImp::AudioClipSetStartTime(TInt aIndex, TTimeIntervalMicroSeconds aStartTime) - { - iAudSong->Clip(aIndex, KVedAudioTrackIndex)->SetStartTime(aStartTime); - } - -TTimeIntervalMicroSeconds CVedMovieImp::AudioClipEndTime(TInt aIndex) const - { - return iAudSong->Clip(aIndex, KVedAudioTrackIndex)->EndTime(); - } - -TTimeIntervalMicroSeconds CVedMovieImp::AudioClipEditedDuration(TInt aIndex) const - { - return iAudSong->Clip(aIndex, KVedAudioTrackIndex)->EditedDuration(); - } - -void CVedMovieImp::AudioClipSetCutInTime(TInt aIndex, TTimeIntervalMicroSeconds aCutInTime) - { - iAudSong->Clip(aIndex, KVedAudioTrackIndex)->SetCutInTime(aCutInTime); - } - -void CVedMovieImp::AudioClipSetCutOutTime(TInt aIndex, TTimeIntervalMicroSeconds aCutOutTime) - { - iAudSong->Clip(aIndex, KVedAudioTrackIndex)->SetCutOutTime(aCutOutTime); - } - - -TBool CVedMovieImp::AudioClipNormalizing(TInt aIndex) const - { - return iAudSong->Clip(aIndex, KVedAudioTrackIndex)->Normalizing(); - } - -void CVedMovieImp::AudioClipSetNormalizing(TInt aIndex, TBool aNormalizing) - { - iAudSong->Clip(aIndex, KVedAudioTrackIndex)->SetNormalizing(aNormalizing); - } - - -void CVedMovieImp::AudioClipInsertDynamicLevelMarkL(TInt aIndex, TVedDynamicLevelMark aMark) - { - __ASSERT_ALWAYS(aMark.iTime.Int64() >= 0, - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMark)); - __ASSERT_ALWAYS(aMark.iTime.Int64() <= AudioClipCutOutTime(aIndex).Int64(), - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMark)); - __ASSERT_ALWAYS(aIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - - iApplyDynamicLevelMark = ETrue; - iAudSong->Clip(aIndex, KVedAudioTrackIndex)->InsertDynamicLevelMarkL(TAudDynamicLevelMark(aMark.iTime, aMark.iLevel)); - } - -void CVedMovieImp::AudioClipRemoveDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex) - { - __ASSERT_ALWAYS(aMarkIndex >= 0, - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex)); - __ASSERT_ALWAYS(aMarkIndex < AudioClipDynamicLevelMarkCount(aClipIndex), - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex)); - __ASSERT_ALWAYS(aClipIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - - iAudSong->Clip(aClipIndex, KVedAudioTrackIndex)->RemoveDynamicLevelMark(aMarkIndex); - } - -TInt CVedMovieImp::AudioClipDynamicLevelMarkCount(TInt aIndex) const - { - __ASSERT_ALWAYS(aIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - return iAudSong->Clip(aIndex, KVedAudioTrackIndex)->DynamicLevelMarkCount(); - } - -TVedDynamicLevelMark CVedMovieImp::AudioClipDynamicLevelMark(TInt aClipIndex, TInt aMarkIndex) - { - __ASSERT_ALWAYS(aMarkIndex >= 0, - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex)); - __ASSERT_ALWAYS(aMarkIndex < AudioClipDynamicLevelMarkCount(aClipIndex), - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex)); - __ASSERT_ALWAYS(aClipIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - - CAudClip* clip = iAudSong->Clip(aClipIndex, KVedAudioTrackIndex); - TAudDynamicLevelMark mark(clip->DynamicLevelMark(aMarkIndex)); - return TVedDynamicLevelMark(mark.iTime, mark.iLevel); - } - - -void CVedMovieImp::SetVideoClipVolumeGainL(TInt aClipIndex, TInt aVolumeGain) - { - iApplyDynamicLevelMark = EFalse; - - TInt marks = 0; - if (aClipIndex == KVedClipIndexAll) - { - // whole movie, sum with clip values in SetAudioFadingL - iVolumeGainForAllVideoClips = aVolumeGain; - marks = 1; - } - else - { - __ASSERT_ALWAYS(aClipIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - __ASSERT_ALWAYS(aClipIndex <= VideoClipCount(), - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - // set volume gain to the clip - CVedVideoClip* clip = iVideoClipArray[aClipIndex]; - clip->SetVolumeGain(aVolumeGain); - - // should also add/remove a dynamic level mark to have the observer calls more meaningful - // and avoid problems if client assumes a mark was really added - // the actual mark is removed when starting to process - if ( aVolumeGain != 0 ) - { - // add - clip->InsertDynamicLevelMarkL(TVedDynamicLevelMark(clip->CutInTime(),aVolumeGain)); - clip->InsertDynamicLevelMarkL(TVedDynamicLevelMark(clip->CutOutTime(),aVolumeGain)); - } - else - { - // gain == 0 => remove marks - while (clip->DynamicLevelMarkCount() > 0) - { - marks++; - clip->RemoveDynamicLevelMark(0); - } - } - } - - // inform observers - if ( aVolumeGain == 0 ) - { - // volume gain was set to 0 => no gain ~= remove level mark - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - for ( TInt j = 0; j < marks; j++ ) - { - iObserverArray[i]->NotifyVideoClipDynamicLevelMarkRemoved(*this, aClipIndex,0); - } - } - } - else - { - // volume gain was set to nonzero => gain ~= insert level mark - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipDynamicLevelMarkInserted(*this, aClipIndex, 0); - iObserverArray[i]->NotifyVideoClipDynamicLevelMarkInserted(*this, aClipIndex, 1); - } - } - } - -TInt CVedMovieImp::GetVideoClipVolumeGainL(TInt aClipIndex) - { - if (aClipIndex == KVedClipIndexAll) - { - return iVolumeGainForAllVideoClips; - } - else - { - // get volume gain from the clip - __ASSERT_ALWAYS(aClipIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - __ASSERT_ALWAYS(aClipIndex <= VideoClipCount(), - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - return iVideoClipArray[aClipIndex]->GetVolumeGain(); - } - } - -void CVedMovieImp::SetAudioClipVolumeGainL(TInt aClipIndex, TInt aVolumeGain) - { - iApplyDynamicLevelMark = EFalse; - TInt marks = 0; - if (aClipIndex == KVedClipIndexAll) - { - // whole movie, sum with clip values in SetAudioFading - iVolumeGainForAllAudioClips = aVolumeGain; - marks = 1; - } - else - { - // set volume gain to the clip; the clip asserts the index - CAudClip* clip = iAudSong->Clip(aClipIndex, KVedAudioTrackIndex); - clip->SetVolumeGain(aVolumeGain); - - // should also add/remove a dynamic level mark to have the observer calls more meaningful - // and avoid problems if client assumes a mark was really added - // the actual mark is removed when starting to process - if ( aVolumeGain != 0 ) - { - // add - clip->InsertDynamicLevelMarkL(TAudDynamicLevelMark(clip->CutInTime(),aVolumeGain)); - clip->InsertDynamicLevelMarkL(TAudDynamicLevelMark(clip->CutOutTime(),aVolumeGain)); - } - else - { - // gain == 0 => remove - while (clip->DynamicLevelMarkCount() > 0) - { - marks++; - clip->RemoveDynamicLevelMark(0); - } - } - } - - // inform observers - if ( aVolumeGain == 0 ) - { - // volume gain was set to 0 => no gain ~= remove level mark - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - for ( TInt j = 0; j < marks; j++ ) - { - iObserverArray[i]->NotifyAudioClipDynamicLevelMarkRemoved(*this, aClipIndex,0); - } - } - } - else - { - // volume gain was set to nonzero => gain ~= insert level mark - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyAudioClipDynamicLevelMarkInserted(*this, aClipIndex,0); - } - } - } - -TInt CVedMovieImp::GetAudioClipVolumeGainL(TInt aClipIndex) - { - if (aClipIndex == KVedClipIndexAll) - { - return iVolumeGainForAllAudioClips; - } - else - { - // get volume gain from the clip; the clip asserts the index - CAudClip* clip = iAudSong->Clip(aClipIndex, KVedAudioTrackIndex); - return clip->GetVolumeGain(); - } - } - - -TRgb CVedMovieImp::VideoClipColorTone(TInt aVideoClipIndex) const - { - return iVideoClipArray[aVideoClipIndex]->ColorTone(); - } - -void CVedMovieImp::VideoClipSetColorTone(TInt aVideoClipIndex, TRgb aColorTone) - { - iVideoClipArray[aVideoClipIndex]->SetColorTone(aColorTone); - } - - -TTimeIntervalMicroSeconds CVedMovieImp::Duration() const - { - TTimeIntervalMicroSeconds duration = TTimeIntervalMicroSeconds(0); - - if (VideoClipCount() > 0) - { - duration = iVideoClipArray[VideoClipCount() - 1]->EndTime(); - } - - for (TInt i = 0; i < AudioClipCount(); i++) - { - TTimeIntervalMicroSeconds endTime = iAudSong->Clip(i, KVedAudioTrackIndex)->EndTime(); - if (endTime > duration) - { - duration = endTime; - } - } - - return duration; - } - - -TInt CVedMovieImp::VideoClipCount() const - { - return iVideoClipArray.Count(); - } - - -CVedVideoClip* CVedMovieImp::VideoClip(TInt aClipIndex) const - { - return iVideoClipArray[aClipIndex]; - } - - -TVedStartTransitionEffect CVedMovieImp::StartTransitionEffect() const - { - __ASSERT_ALWAYS(VideoClipCount() > 0, TVedPanic::Panic(TVedPanic::EMovieEmpty)); - return iStartTransitionEffect; - } - - -TInt CVedMovieImp::MiddleTransitionEffectCount() const - { - return Max(0, iVideoClipArray.Count() - 1); - } - - -TVedMiddleTransitionEffect CVedMovieImp::MiddleTransitionEffect(TInt aIndex) const - { - if (aIndex == (iVideoClipArray.Count() - 1)) - { - aIndex++; // make aIndex out of range to cause panic - } - - return iVideoClipArray[aIndex]->iMiddleTransitionEffect; - } - - -TVedEndTransitionEffect CVedMovieImp::EndTransitionEffect() const - { - __ASSERT_ALWAYS(VideoClipCount() > 0, TVedPanic::Panic(TVedPanic::EMovieEmpty)); - return iEndTransitionEffect; - } - - -TInt CVedMovieImp::AudioClipCount() const - { - return iAudSong->ClipCount(KVedAudioTrackIndex); - } - -TTimeIntervalMicroSeconds CVedMovieImp::AudioClipCutInTime(TInt aIndex) const - { - return iAudSong->Clip(aIndex, KVedAudioTrackIndex)->CutInTime(); - } - -TTimeIntervalMicroSeconds CVedMovieImp::AudioClipCutOutTime(TInt aIndex) const - { - return iAudSong->Clip(aIndex, KVedAudioTrackIndex)->CutOutTime(); - } - - - -void CVedMovieImp::FireVideoClipAdded(CVedMovie* aMovie, CVedVideoClip* aClip) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipAdded(*aMovie, aClip->Index()); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireVideoClipAddingFailed(CVedMovie* aMovie, TInt aError) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipAddingFailed(*aMovie, aError); - } - } - - -void CVedMovieImp::FireVideoClipRemoved(CVedMovie* aMovie, TInt aIndex) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipRemoved(*aMovie, aIndex); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireVideoClipIndicesChanged(CVedMovie* aMovie, TInt aOldIndex, - TInt aNewIndex) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipIndicesChanged(*aMovie, aOldIndex, aNewIndex); - } - } - - -void CVedMovieImp::FireVideoClipTimingsChanged(CVedMovie* aMovie, CVedVideoClip* aClip) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipTimingsChanged(*aMovie, aClip->Index()); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireVideoClipColorEffectChanged(CVedMovie* aMovie, CVedVideoClip* aClip) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipColorEffectChanged(*aMovie, aClip->Index()); - } - } - - -void CVedMovieImp::FireVideoClipAudioSettingsChanged(CVedMovie* aMovie, CVedVideoClip* aClip) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipAudioSettingsChanged(*aMovie, aClip->Index()); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireVideoClipGeneratorSettingsChanged(CVedMovie* aMovie, CVedVideoClip* aClip) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipGeneratorSettingsChanged(*aMovie, aClip->Index()); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - -void CVedMovieImp::FireVideoClipDescriptiveNameChanged(CVedMovie* aMovie, CVedVideoClip* aClip) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipDescriptiveNameChanged(*aMovie, aClip->Index()); - } - } - -void CVedMovieImp::FireStartTransitionEffectChanged(CVedMovie* aMovie) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyStartTransitionEffectChanged(*aMovie); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireMiddleTransitionEffectChanged(CVedMovie* aMovie, TInt aIndex) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyMiddleTransitionEffectChanged(*aMovie, aIndex); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireEndTransitionEffectChanged(CVedMovie* aMovie) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyEndTransitionEffectChanged(*aMovie); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireAudioClipAdded(CVedMovie* aMovie, TInt aIndex) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyAudioClipAdded(*aMovie, aIndex); - } - - TRAPD(err,CalculatePropertiesL());// ignore error? - if (err != KErrNone) { } - - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireAudioClipAddingFailed(CVedMovie* aMovie, TInt aError) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyAudioClipAddingFailed(*aMovie, aError); - } - } - - -void CVedMovieImp::FireAudioClipRemoved(CVedMovie* aMovie, TInt aIndex) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyAudioClipRemoved(*aMovie, aIndex); - } - - TRAPD(err,CalculatePropertiesL());// ignore error? - if (err != KErrNone) { } - - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireAudioClipIndicesChanged(CVedMovie* aMovie, TInt aOldIndex, TInt aNewIndex) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyAudioClipIndicesChanged(*aMovie, - aOldIndex, aNewIndex); - } - } - - -void CVedMovieImp::FireAudioClipTimingsChanged(CVedMovie* aMovie, CAudClip* aClip) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyAudioClipTimingsChanged(*aMovie, aClip->IndexOnTrack()); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireDynamicLevelMarkRemoved(CAudClip& aClip, TInt aMarkIndex) - { - TInt trackIndex = aClip.TrackIndex(); - TInt clipIndex = aClip.IndexOnTrack(); - - if (!iNotifyObserver) - return; - - if (trackIndex == 0) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipDynamicLevelMarkRemoved(*this, clipIndex, aMarkIndex); - } - } - else if (trackIndex == 1) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyAudioClipDynamicLevelMarkRemoved(*this, clipIndex, aMarkIndex); - } - } - else - { - TVedPanic::Panic(TVedPanic::EInternal); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - -void CVedMovieImp::FireDynamicLevelMarkInserted(CAudClip& aClip, TAudDynamicLevelMark& /*aMark*/, TInt aMarkIndex) - { - TInt trackIndex = aClip.TrackIndex(); - TInt clipIndex = aClip.IndexOnTrack(); - - if (!iNotifyObserver) - return; - - if (trackIndex == 0) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyVideoClipDynamicLevelMarkInserted(*this, clipIndex, aMarkIndex); - } - } - else if (trackIndex == 1) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyAudioClipDynamicLevelMarkInserted(*this, clipIndex, aMarkIndex); - } - } - else - { - TVedPanic::Panic(TVedPanic::EInternal); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireMovieQualityChanged(CVedMovie* aMovie) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyMovieQualityChanged(*aMovie); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - - -void CVedMovieImp::FireMovieOutputParametersChanged(CVedMovie* aMovie) - { - - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyMovieOutputParametersChanged(*aMovie); - } - // reset the estimated processing time - iEstimatedProcessingTime = TTimeIntervalMicroSeconds(0); - } - -void CVedMovieImp::FireMovieReseted(CVedMovie* aMovie) - { - for (TInt i = 0; i < iObserverArray.Count(); i++) - { - iObserverArray[i]->NotifyMovieReseted(*aMovie); - } - } - - -void CVedMovieImp::ProcessL(const TDesC& aFileName, - MVedMovieProcessingObserver& aObserver) - { - __ASSERT_ALWAYS((VideoClipCount() > 0) || (AudioClipCount() > 0), - TVedPanic::Panic(TVedPanic::EMovieEmpty)); - - CalculatePropertiesL(); - iAudSong->SetDuration(Duration()); - SetAudioFadingL(); - - iMovieProcessingObserver = &aObserver; - - iProcessor->StartMovieL(this, aFileName, NULL, &aObserver); - } - -void CVedMovieImp::ProcessL(RFile* aFileHandle, - MVedMovieProcessingObserver& aObserver) - { - __ASSERT_ALWAYS((VideoClipCount() > 0) || (AudioClipCount() > 0), - TVedPanic::Panic(TVedPanic::EMovieEmpty)); - - CalculatePropertiesL(); - iAudSong->SetDuration(Duration()); - SetAudioFadingL(); - - iMovieProcessingObserver = &aObserver; - TFileName dummy; - - iProcessor->StartMovieL(this, dummy, aFileHandle, &aObserver); - } - - -void CVedMovieImp::CancelProcessing() - { - TRAPD(error, iProcessor->CancelProcessingL()); - - if (error != KErrNone) - iMovieProcessingObserver->NotifyMovieProcessingCompleted(*this, error); - - } - -void CVedMovieImp::SetMovieSizeLimit(TInt aLimit) - { - iProcessor->SetMovieSizeLimit(aLimit); - } - -TInt CVedMovieImp::SyncIntervalInPicture() - { - return iSyncIntervalInPicture; - } - -TReal CVedMovieImp::RandomAccessRate() - { - return iRandomAccessRate; - } - -// Create a temporary transcoder instance and ask for transcoding time factor for the given settings -TReal CVedMovieImp::AskComplexityFactorFromTranscoderL(CVedVideoClipInfo* aInfo, CTRTranscoder::TTROperationalMode aMode, TReal aInputFrameRate) - { - PRINT((_L("CVedMovieImp::AskComplexityFactorFromTranscoderL() in"))); - TReal complexityFactor; - CTRTranscoder *tmpTranscoder; - TTRVideoFormat formIn; - TTRVideoFormat formOut; - formIn.iSize = aInfo->Resolution(); - formIn.iDataType = CTRTranscoder::ETRDuCodedPicture; - formOut.iSize = iResolution; - formOut.iDataType = CTRTranscoder::ETRDuCodedPicture; - TBufC8<255> inputMime; - MapVideoCodecTypeToMime(aInfo->VideoType(), inputMime); - - // create temporary transcoder observer object, with input framerate as parameter, since it is asked by the transcoder - CTrObs* tmpObs = new (ELeave) CTrObs(aInputFrameRate); - CleanupStack::PushL(tmpObs); - - // create temporary transcoder instance - tmpTranscoder = CTRTranscoder::NewL(*tmpObs); - CleanupStack::PushL(tmpTranscoder); - tmpTranscoder->OpenL(reinterpret_cast(1),//the sink will not be used, hence this is acceptable - aMode, - inputMime, - iVideoCodecMimeType, - formIn, - formOut, - EFalse ); - - // ask complexity/time factor from the transcoder - complexityFactor = tmpTranscoder->EstimateTranscodeTimeFactorL(formIn, formOut); - - CleanupStack::PopAndDestroy(tmpTranscoder); - CleanupStack::PopAndDestroy(tmpObs); - - PRINT((_L("CVedMovieImp::AskComplexityFactorFromTranscoderL() out, complexity factor %f"), complexityFactor)); - return complexityFactor; - } - - -TTimeIntervalMicroSeconds CVedMovieImp::GetProcessingTimeEstimateL() - { - PRINT((_L("CVedMovieImp::GetProcessingTimeEstimateL() in"))); - TInt64 estimatedTime = 0; - TReal complexityFactor; - TBool transcodingImpactIncluded = EFalse; - - // Don't estimate the time if it has been asked already. - // This also means the result is not the remaining time but the total processing time - if ( iEstimatedProcessingTime > 0 ) - { - return iEstimatedProcessingTime; - } - - - // Loop through the clips in the movie and estimate the processing time for each of them - for (TInt i = 0; i < VideoClipCount(); i++) - { - CVedVideoClipInfo* currentInfo = VideoClip(i)->Info(); - - complexityFactor = 0; - transcodingImpactIncluded = EFalse; - - if ( currentInfo->Class() == EVedVideoClipClassGenerated ) - { - // only encoding for generated content. Framerate is low. - transcodingImpactIncluded = ETrue; - - // open transcoder in encoding mode & ask the factor. - // This is in practice for generated content only. Tbd if it is worth opening the transcoder? - complexityFactor = AskComplexityFactorFromTranscoderL(currentInfo, CTRTranscoder::EEncoding, 1.0); - // the temporary clip is then processed like a normal input clip, add the impact - complexityFactor += (KVedBitstreamProcessingFactor*iVideoStandardBitrate) / KVedBitstreamProcessingFactorBitrate; - } - else - { - // check if transcoding is needed - - // If input and output resolutions don't match, transcoder knows it need to do resolution transcoding - // However, we need to check here in which mode we'd open the transcoder - if ((currentInfo->Resolution() != iResolution) || (iVideoRestrictedBitrate != 0) - || ((currentInfo->VideoType() == EVedVideoTypeH263Profile0Level45) && (iVideoType == EVedVideoTypeH263Profile0Level10))) - { - // need to do resolution transcoding - transcodingImpactIncluded = ETrue; - - // open transcoder in full transcoding mode & ask for the factor. - TReal framerate = TReal(1000*currentInfo->VideoFrameCount())/(currentInfo->Duration().Int64()/1000); - complexityFactor = AskComplexityFactorFromTranscoderL(currentInfo, CTRTranscoder::EFullTranscoding, framerate); - } - else - { - // no full transcoding - - if ( currentInfo->VideoType() != iVideoType ) - { - // compressed domain transcoding between H.263 and MPEG-4. Assuming they are equally complex - - complexityFactor = (KVedCompressedDomainTranscodingFactor * iVideoStandardBitrate) / KVedBitstreamProcessingFactorBitrate; - } - else - { - // Only bitstream processing + possibly cut or some other simple operation. Transition effect is estimated later - // It is assumed that pure decoding is needed only for such a short period of time that - // the impact can be estimated here without opening processor/transcoder. - - // Bitrate has impact here. MPEG-4 is more complex to process than H.263 but bitrate is dominant. E,g, H.263 128 kbps vs MPEG4 512 kbps: 1:5 complexity; 1:4 bitrate - complexityFactor = (KVedBitstreamProcessingFactor*iVideoStandardBitrate) / KVedBitstreamProcessingFactorBitrate; - } - - } - } - - // Now we have the video complexity factor for the current clip. Add the contribution to the total time - estimatedTime = estimatedTime + TInt64(complexityFactor * I64INT(VideoClip(i)->EditedDuration().Int64())); - - if (!transcodingImpactIncluded && (VideoClip(i)->iMiddleTransitionEffect != EVedMiddleTransitionEffectNone)) - { - // add impact of transition effect; need decoding + encoding for a short period - - // open transcoder in full transcoding mode & ask for the factor. - TReal framerate = TReal(1000*currentInfo->VideoFrameCount())/(currentInfo->Duration().Int64()/1000); - complexityFactor = this->AskComplexityFactorFromTranscoderL(currentInfo, CTRTranscoder::EFullTranscoding, framerate); - estimatedTime = estimatedTime + TInt64(complexityFactor * 1000000);//transition duration; 1 sec is accurate enough here - } - - } - - PRINT((_L("CVedMovieImp::GetProcessingTimeEstimateL(), video part estimated to %d sec"),I64INT(estimatedTime)/1000000 )); - - // add audio processing time - estimatedTime = estimatedTime + iAudSong->GetTimeEstimateL().Int64(); - - PRINT((_L("CVedMovieImp::GetProcessingTimeEstimateL(), audio included, before rounding the estimate is %d sec"),I64INT(estimatedTime)/1000000 )); - // estimate is not too accurate anyway; round it - if ( estimatedTime > 600000000 ) - { - // more than 10 minutes => round to nearest 2 min - estimatedTime = ((estimatedTime+60000000) / 120000000) * 120000000; - } - else if (estimatedTime > 120000000 ) - { - // more than 2 minutes => round to nearest 30 sec - estimatedTime = ((estimatedTime+30000000) / 30000000) * 30000000; - } - else if (estimatedTime > 30000000 ) - { - // more than 30 secs => round to nearest 10 sec - estimatedTime = ((estimatedTime+5000000) / 10000000) * 10000000; - } - else - { - // less than 30 secs => round to nearest 2 sec - estimatedTime = ((estimatedTime+1000000) / 2000000) * 2000000; - } - - iEstimatedProcessingTime = estimatedTime; - PRINT((_L("CVedMovieImp::GetProcessingTimeEstimateL() out, estimate is %d sec"),I64INT(estimatedTime)/1000000 )); - return estimatedTime; - - } - - -void CVedMovieImp::NotifyClipAdded(CAudSong& aSong, CAudClip& aClip, TInt aIndex, TInt aTrackIndex) - { - PRINT((_L("CVedMovieImp::NotifyClipAdded() in") )); - // Track index 0 means it's the video track - we need to create the video clip - if (aTrackIndex == 0) - { - PRINT((_L("CVedMovieImp::NotifyClipAdded() added audio track of video clip to song successfully") )); - - TInt err; - if (iAddedVideoClipFileHandle) - { - TRAP(err, iAddOperation->iVideoClip = CVedVideoClip::NewL(this, aClip.Info()->FileHandle(), iAddedVideoClipIndex, &aClip, *iAddOperation)); - } - else - { - TRAP(err, iAddOperation->iVideoClip = CVedVideoClip::NewL(this, aClip.Info()->FileName(), iAddedVideoClipIndex, &aClip, *iAddOperation)); - } - - if (err != KErrNone) - { - PRINT((_L("CVedMovieImp::NotifyClipAdded() creating video clip failed, removing also audio") )); - // delete the audio clip from song - aSong.RemoveClip(aIndex); - - FireVideoClipAddingFailed(this, err); - } - delete iAddedVideoClipFilename; - iAddedVideoClipFilename = 0; - iAddedVideoClipFileHandle = 0; - } - else if (aTrackIndex == KVedAudioTrackIndex) - { - // We're on the audio track so we need to create an audio clip info - PRINT((_L("CVedMovieImp::NotifyClipAdded() added audio track of audio clip to song successfully") )); - CVedAudioClipInfoImp* audioClipInfo = 0; - TRAPD(err, audioClipInfo = CVedAudioClipInfoImp::NewL(&aClip, *this)); - if (err != KErrNone) - { - delete audioClipInfo; - FireAudioClipAddingFailed(this, err); - return; - } - err = iAudioClipInfoArray.Insert(audioClipInfo, aIndex); - if (err != KErrNone) - { - delete audioClipInfo; - FireAudioClipAddingFailed(this, err); - } - } - PRINT((_L("CVedMovieImp::NotifyClipAdded() out") )); - } - -void CVedMovieImp::NotifyClipAddingFailed(CAudSong& /*aSong*/, TInt aError, TInt aTrackIndex) - { - if (aTrackIndex == 0) - { - if (aError == KErrNoAudio) - { - // We can have video clips that have no audio track - - TInt err; - if (iAddedVideoClipFileHandle) - { - TRAP(err, iAddOperation->iVideoClip = CVedVideoClip::NewL(this, iAddedVideoClipFileHandle, iAddedVideoClipIndex, NULL, *iAddOperation)); - } - else - { - TRAP(err, iAddOperation->iVideoClip = CVedVideoClip::NewL(this, *iAddedVideoClipFilename, iAddedVideoClipIndex, NULL, *iAddOperation)); - } - if (err != KErrNone) - { - FireAudioClipAddingFailed(this, aError); - } - } - else - { - FireVideoClipAddingFailed(this, aError); - } - - delete iAddedVideoClipFilename; - iAddedVideoClipFilename = 0; - } - else if (aTrackIndex == KVedAudioTrackIndex) - { - FireAudioClipAddingFailed(this, aError); - } - } - -void CVedMovieImp::NotifyClipRemoved(CAudSong& /*aSong*/, TInt aIndex, TInt aTrackIndex) - { - if (aTrackIndex == KVedAudioTrackIndex) - { - CVedAudioClipInfoImp* info = iAudioClipInfoArray[aIndex]; - delete info; - iAudioClipInfoArray.Remove(aIndex); - FireAudioClipRemoved(this, aIndex); - } - } - -void CVedMovieImp::NotifyClipTimingsChanged(CAudSong& /*aSong*/, CAudClip& aClip) - { - if (aClip.TrackIndex() == KVedAudioTrackIndex) - { - FireAudioClipTimingsChanged(this, &aClip); - } - } - -void CVedMovieImp::NotifyClipIndicesChanged(CAudSong& /*aSong*/, TInt aOldIndex, TInt aNewIndex, TInt aTrackIndex) - { - if (aTrackIndex == KVedAudioTrackIndex) - { - TLinearOrder order(CVedAudioClipInfoImp::Compare); - iAudioClipInfoArray.Sort(order); - FireAudioClipIndicesChanged(this, aOldIndex, aNewIndex); - } - } - -void CVedMovieImp::NotifySongReseted(CAudSong& /*aSong*/) - { - // nothing to do here - } - -void CVedMovieImp::NotifyClipReseted(CAudClip& /*aClip*/) - { - // nothing to do here - } - -void CVedMovieImp::NotifyDynamicLevelMarkInserted(CAudClip& aClip, TAudDynamicLevelMark& aMark, TInt aIndex) - { - FireDynamicLevelMarkInserted(aClip, aMark, aIndex); - } - -void CVedMovieImp::NotifyDynamicLevelMarkRemoved(CAudClip& aClip, TInt aIndex) - { - FireDynamicLevelMarkRemoved(aClip, aIndex); - } - - -void CVedMovieImp::NotifyAudioClipInfoReady(CVedAudioClipInfo& aInfo, TInt aError) - { - if (aError != KErrNone) - { - iAudioClipInfoArray.Remove(iAudioClipInfoArray.Count() - 1); - FireAudioClipAddingFailed(this, aError); - } - else - { - CVedAudioClipInfoImp* infoImp = static_cast (&aInfo); - FireAudioClipAdded(this, infoImp->iAudClip->IndexOnTrack()); - } - } - -CAudSong* CVedMovieImp::Song() - { - return iAudSong; - } - -TPtrC8& CVedMovieImp::VideoCodecMimeType() - { - return iVideoCodecMimeType; - } - - -CVedMovieAddClipOperation* CVedMovieAddClipOperation::NewL(CVedMovie* aMovie) - { - PRINT(_L("CVedMovieAddClipOperation::NewL")); - - CVedMovieAddClipOperation* self = - new (ELeave) CVedMovieAddClipOperation(aMovie); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -CVedMovieAddClipOperation::CVedMovieAddClipOperation(CVedMovie* aMovie) - : CActive(EPriorityStandard), iMovie((CVedMovieImp*)aMovie) - { - - CActiveScheduler::Add(this); - } - - -void CVedMovieAddClipOperation::ConstructL() - { - } - - -CVedMovieAddClipOperation::~CVedMovieAddClipOperation() - { - Cancel(); - - if (iVideoClip) - { - delete iVideoClip; - iVideoClip = NULL; - } - } - - -void CVedMovieAddClipOperation::NotifyVideoClipInfoReady(CVedVideoClipInfo& /*aInfo*/, - TInt aError) - { - - // Cannot delete iVideoClip here, since we are in its callback function, - // so schedule the active object to complete the add operation and - // delete iVideoClip if needed. - - iError = aError; - - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - } -void CVedMovieAddClipOperation::RunL() - { - __ASSERT_DEBUG((iVideoClip != 0), - TVedPanic::Panic(TVedPanic::EInternal)); - - if (iVideoClip != 0) - { - CompleteAddVideoClipOperation(); - } - - __ASSERT_DEBUG(iVideoClip == 0, - TVedPanic::Panic(TVedPanic::EInternal)); - } - - -void CVedMovieAddClipOperation::DoCancel() - { - if (iVideoClip) - { - if (iVideoClip->EditedHasAudio()) - { - TInt audioClipIndex = iVideoClip->iAudClip->IndexOnTrack(); - iMovie->iAudSong->RemoveClip(audioClipIndex, 0); - } - delete iVideoClip; - iVideoClip = NULL; - iMovie->FireVideoClipAddingFailed(iMovie, KErrCancel); - } - } - - -void CVedMovieAddClipOperation::CompleteAddVideoClipOperation() - { - if (iError != KErrNone) - { - if (iVideoClip->EditedHasAudio()) - { - TInt audioClipIndex = iVideoClip->iAudClip->IndexOnTrack(); - iMovie->iAudSong->RemoveClip(audioClipIndex, 0); - } - delete iVideoClip; - iVideoClip = 0; - iMovie->FireVideoClipAddingFailed(iMovie, iError); - } - else - { - TInt insertableError = iMovie->CheckVideoClipInsertable(iVideoClip); - - if (insertableError != KErrNone) - { - if (iVideoClip->EditedHasAudio()) - { - TInt audioClipIndex = iVideoClip->iAudClip->IndexOnTrack(); - iMovie->iAudSong->RemoveClip(audioClipIndex, 0); - } - delete iVideoClip; - iVideoClip = 0; - iMovie->FireVideoClipAddingFailed(iMovie, insertableError); - } - else - { - iVideoClip->iMiddleTransitionEffect = EVedMiddleTransitionEffectNone; - - if (iVideoClip->iInfo->Class() == EVedVideoClipClassFile) - { - iVideoClip->iCutOutTime = iVideoClip->iInfo->Duration(); - } - else - { - iVideoClip->iCutOutTime = TTimeIntervalMicroSeconds(0); - } - - TInt err = iMovie->iVideoClipArray.Insert(iVideoClip, iVideoClip->iIndex); - if (err != KErrNone) - { - if (iVideoClip->EditedHasAudio()) - { - // delete corresponding audio clip from song - TInt audioClipIndex = iVideoClip->iAudClip->IndexOnTrack(); - iMovie->iAudSong->RemoveClip(audioClipIndex, 0); - } - delete iVideoClip; - iVideoClip = 0; - iMovie->FireVideoClipAddingFailed(iMovie, err); - } - else - { - if (iVideoClip->iInfo->Class() == EVedVideoClipClassGenerated) - { - iVideoClip->iInfo->Generator()->SetVideoClip(*iVideoClip, - iIsVideoGeneratorOwnedByVideoClip); - } - - iMovie->RecalculateVideoClipTimings(iVideoClip); - TRAPD(err,iMovie->CalculatePropertiesL());//ignore error, should not leave with current implementation - if (err != KErrNone) { } - - CVedVideoClip* clip = iVideoClip; - iVideoClip = 0; - iMovie->FireVideoClipAdded(iMovie, clip); - } - } - } - } - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/src/VedVideoClip.cpp --- a/videoeditorengine/vedengine/src/VedVideoClip.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,523 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "VedVideoClip.h" -#include "VedMovieImp.h" -#include "VedVideoClipInfoGeneratedImp.h" -#include "VedVideoClipInfoImp.h" -#include "AudClip.h" -#include "AudObservers.h" - -CVedVideoClip* CVedVideoClip::NewL(CVedMovieImp* aMovie, const TDesC& aFileName, - TInt aIndex, CAudClip* aAudioClip, - MVedVideoClipInfoObserver& aObserver) - { - CVedVideoClip* self = new (ELeave) CVedVideoClip(aMovie, aAudioClip); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aIndex, aObserver); - CleanupStack::Pop(self); - return self; - } - - -CVedVideoClip* CVedVideoClip::NewL(CVedMovieImp* aMovie, CVedVideoClipGenerator& aGenerator, - TInt aIndex, MVedVideoClipInfoObserver& aObserver, TBool aIsOwnedByVideoClip) - { - CVedVideoClip* self = new (ELeave) CVedVideoClip(aMovie, NULL /*CAudClip*/); - CleanupStack::PushL(self); - self->ConstructL(aGenerator, aIndex, aObserver, aIsOwnedByVideoClip); - CleanupStack::Pop(self); - return self; - } - -CVedVideoClip* CVedVideoClip::NewL(CVedMovieImp* aMovie, RFile* aFileHandle, - TInt aIndex, CAudClip* aAudioClip, - MVedVideoClipInfoObserver& aObserver) - { - CVedVideoClip* self = new (ELeave) CVedVideoClip(aMovie, aAudioClip); - CleanupStack::PushL(self); - self->ConstructL(aFileHandle, aIndex, aObserver); - CleanupStack::Pop(self); - return self; - } - - -CVedVideoClip::CVedVideoClip(CVedMovieImp* aMovie, CAudClip* aAudioClip) - : iMovie(aMovie), iSpeed(KVedNormalSpeed), iColorEffect(EVedColorEffectNone), - iCutInTime(0), iAudClip(aAudioClip) - { - } - - -void CVedVideoClip::ConstructL(const TDesC& aFileName, TInt aIndex, - MVedVideoClipInfoObserver& aObserver) - { - __ASSERT_ALWAYS(aIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - __ASSERT_ALWAYS(aIndex <= iMovie->VideoClipCount(), - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - iIndex = aIndex; - - if (iMovie->iFs) // lock file against writing - { - - TInt error = iLockFile.Open(*iMovie->iFs, aFileName, EFileShareReadersOnly | EFileStream | EFileRead); - - if (error != KErrNone) - { - User::LeaveIfError(iLockFile.Open(*iMovie->iFs, aFileName, - EFileShareAny | EFileStream | EFileRead)); - } - iLockFileOpened = ETrue; - } - - if (iAudClip) - { - iInfo = CVedVideoClipInfoImp::NewL(iAudClip->Info(), aFileName, aObserver); - } - else - { - iInfo = CVedVideoClipInfoImp::NewL(NULL, aFileName, aObserver); - } - } - - -void CVedVideoClip::ConstructL(CVedVideoClipGenerator& aGenerator, TInt aIndex, - MVedVideoClipInfoObserver& aObserver, TBool aIsOwnedByVideoClip) - { - __ASSERT_ALWAYS(aIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - __ASSERT_ALWAYS(aIndex <= iMovie->VideoClipCount(), - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - iIndex = aIndex; - - iInfo = new (ELeave) CVedVideoClipInfoGeneratedImp(aGenerator, aIsOwnedByVideoClip); - ((CVedVideoClipInfoGeneratedImp*) iInfo)->ConstructL(aObserver); - } - - -void CVedVideoClip::ConstructL(RFile* aFileHandle, TInt aIndex, - MVedVideoClipInfoObserver& aObserver) - { - __ASSERT_ALWAYS(aIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - __ASSERT_ALWAYS(aIndex <= iMovie->VideoClipCount(), - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - iIndex = aIndex; - - if (iAudClip) - { - iInfo = CVedVideoClipInfoImp::NewL(iAudClip->Info(), aFileHandle, aObserver); - } - else - { - iInfo = CVedVideoClipInfoImp::NewL(NULL, aFileHandle, aObserver); - } - } - - -CVedVideoClip::~CVedVideoClip() - { - delete iInfo; - - if (iLockFileOpened) - iLockFile.Close(); - - } - - -void CVedVideoClip::SetIndex(TInt aIndex) - { - __ASSERT_ALWAYS(aIndex >= 0, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - __ASSERT_ALWAYS(aIndex < iMovie->VideoClipCount(), - TVedPanic::Panic(TVedPanic::EVideoClipIllegalIndex)); - - if (aIndex != iIndex) - { - TInt oldIndex = iIndex; - iIndex = aIndex; - - iMovie->iVideoClipArray.Remove(oldIndex); - TInt err = iMovie->iVideoClipArray.Insert(this, iIndex); - __ASSERT_DEBUG(err == KErrNone, - TVedPanic::Panic(TVedPanic::EInternal)); - - if (oldIndex < iIndex) - { - CVedVideoClip* clip = iMovie->iVideoClipArray[oldIndex]; - clip->iIndex = oldIndex; - iMovie->RecalculateVideoClipTimings(clip); - } - else - { - iMovie->RecalculateVideoClipTimings(this); - } - - iMovie->FireVideoClipIndicesChanged(iMovie, oldIndex, iIndex); - } - } - - -void CVedVideoClip::SetSpeed(TInt aSpeed) - { - __ASSERT_ALWAYS((aSpeed >= KVedMinSpeed) && (aSpeed <= KVedMaxSpeed), - TVedPanic::Panic(TVedPanic::EVideoClipIllegalSpeed)); - - if (aSpeed != KVedNormalSpeed ) - { - // slow motion, mute the audio track - if (iAudClip) - { - iAudClip->SetMuting(ETrue); - iMovie->FireVideoClipAudioSettingsChanged(iMovie, this); - } - } - else - { - // normal speed - if ( !iUserMuted ) - { - // unmute the audio track unless user has muted the clip - if (iAudClip) - { - iAudClip->SetMuting(EFalse); - iMovie->FireVideoClipAudioSettingsChanged(iMovie, this); - } - } - } - - if (aSpeed != iSpeed) - { - iSpeed = aSpeed; - iMovie->RecalculateVideoClipTimings(this); - iMovie->FireVideoClipTimingsChanged(iMovie, this); - } - } - - -void CVedVideoClip::SetColorEffect(TVedColorEffect aColorEffect) - { - __ASSERT_ALWAYS((aColorEffect >= EVedColorEffectNone) - && (aColorEffect < EVedColorEffectLast), - TVedPanic::Panic(TVedPanic::EVideoClipIllegalColorEffect)); - - if (aColorEffect != iColorEffect) - { - iColorEffect = aColorEffect; - iMovie->FireVideoClipColorEffectChanged(iMovie, this); - } - } - -TRgb CVedVideoClip::ColorTone() const - { - return iColorTone; - } - -void CVedVideoClip::SetColorTone(TRgb aColorTone) - { - if (aColorTone != iColorTone) - { - // any checks needed? - iColorTone = aColorTone; - // reuses the observer callback from color effect, since essentially it is about the same thing - iMovie->FireVideoClipColorEffectChanged(iMovie, this); - } - } - -void CVedVideoClip::SetMuted(TBool aMuted) - { - if (!iAudClip) - { - return; - } - iUserMuted = aMuted; // store the mute-value (true/false) to be able to differentiate user and automatic mute - iAudClip->SetMuting(aMuted); - iMovie->FireVideoClipAudioSettingsChanged(iMovie, this); - } - -TInt CVedVideoClip::InsertDynamicLevelMarkL(const TVedDynamicLevelMark& aMark) - { - __ASSERT_ALWAYS(aMark.iTime.Int64() >= 0, - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMark)); - __ASSERT_ALWAYS(aMark.iTime.Int64() <= CutOutTime().Int64(), - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMark)); - - if ( iAudClip ) - { - return iAudClip->InsertDynamicLevelMarkL(TAudDynamicLevelMark(aMark.iTime, aMark.iLevel)); - } - else - { - User::Leave(KErrNotFound); - return -1;//to make compiler happy - } - } - -TBool CVedVideoClip::RemoveDynamicLevelMark(TInt aIndex) - { - __ASSERT_ALWAYS(aIndex >= 0, - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex)); - __ASSERT_ALWAYS(aIndex < DynamicLevelMarkCount(), - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex)); - if ( iAudClip ) - { - return iAudClip->RemoveDynamicLevelMark(aIndex); - } - else - { - return EFalse; - } - } - -TVedDynamicLevelMark CVedVideoClip::DynamicLevelMark(TInt aIndex) const - { - __ASSERT_ALWAYS(aIndex >= 0, - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex)); - __ASSERT_ALWAYS(aIndex < DynamicLevelMarkCount(), - TVedPanic::Panic(TVedPanic::EIllegalDynamicLevelMarkIndex)); - - if ( iAudClip ) - { - TAudDynamicLevelMark mark = iAudClip->DynamicLevelMark(aIndex); - return TVedDynamicLevelMark(mark.iTime, mark.iLevel); - } - else - { - return TVedDynamicLevelMark(TTimeIntervalMicroSeconds(0), 0); - } - } - -TInt CVedVideoClip::DynamicLevelMarkCount() const - { - if ( iAudClip ) - { - return iAudClip->DynamicLevelMarkCount(); - } - else - { - return 0; - } - } - -void CVedVideoClip::SetVolumeGain(TInt aVolumeGain) - { - if ( iAudClip ) - { - iAudClip->SetVolumeGain(aVolumeGain); - } - } - -TInt CVedVideoClip::GetVolumeGain() - { - if ( iAudClip ) - { - return iAudClip->GetVolumeGain(); - } - else - { - return 0; - } - } - - -void CVedVideoClip::SetCutInTime(TTimeIntervalMicroSeconds aCutInTime) - { - __ASSERT_ALWAYS(aCutInTime >= TTimeIntervalMicroSeconds(0), - TVedPanic::Panic(TVedPanic::EVideoClipIllegalCutInTime)); - __ASSERT_ALWAYS(aCutInTime <= iCutOutTime, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalCutInTime)); - __ASSERT_ALWAYS(iInfo->Class() == EVedVideoClipClassFile, - TVedPanic::Panic(TVedPanic::EVideoClipNoFileAssociated)); - - if (aCutInTime != iCutInTime) - { - iCutInTime = aCutInTime; - iMovie->RecalculateVideoClipTimings(this); - iMovie->FireVideoClipTimingsChanged(iMovie, this); - } - } - - -void CVedVideoClip::SetCutOutTime(TTimeIntervalMicroSeconds aCutOutTime) - { - __ASSERT_ALWAYS(aCutOutTime >= iCutInTime, - TVedPanic::Panic(TVedPanic::EVideoClipIllegalCutOutTime)); - __ASSERT_ALWAYS(iInfo->Class() == EVedVideoClipClassFile, - TVedPanic::Panic(TVedPanic::EVideoClipNoFileAssociated)); - - if ( aCutOutTime > iInfo->Duration() ) - { - aCutOutTime = iInfo->Duration(); - } - - if (aCutOutTime != iCutOutTime) - { - iCutOutTime = aCutOutTime; - iMovie->RecalculateVideoClipTimings(this); - iMovie->FireVideoClipTimingsChanged(iMovie, this); - } - } - -void CVedVideoClip::UpdateAudioClip() - { - if (!iAudClip) - { - return; - } - iAudClip->SetStartTime(iStartTime); - iAudClip->SetCutInTime(iCutInTime); - iAudClip->SetCutOutTime(iCutOutTime); - } - - - -CVedVideoClipInfo* CVedVideoClip::Info() - { - return iInfo; - } - - -TBool CVedVideoClip::EditedHasAudio() const - { - TInt speed = Speed(); - TBool isMuted = IsMuted(); - TBool hasAudio = iInfo->HasAudio(); - TBool ret = hasAudio && (speed == KVedNormalSpeed); - ret = ret && !isMuted; - return ret; - } - - -CVedMovieImp* CVedVideoClip::Movie() - { - return iMovie; - } - - -TInt CVedVideoClip::Index() const - { - return iIndex; - } - - -TInt CVedVideoClip::Speed() const - { - return iSpeed; - } - - -TVedColorEffect CVedVideoClip::ColorEffect() const - { - return iColorEffect; - } - - -TBool CVedVideoClip::IsMuteable() const - { - return (iInfo->HasAudio() && (Speed() == KVedNormalSpeed)); - } - - -TBool CVedVideoClip::Muting() const - { - if (!iAudClip) - { - return ETrue; - } - return iAudClip->Muting(); - } - -TBool CVedVideoClip::IsMuted() const - { - if (!iAudClip) - { - return ETrue; - } - if ( iUserMuted ) - { - return ETrue; - } - else - { - // automatic mute due to slow motion is not informed to client as muted - // since it can cause some conflicts - return EFalse; - } - } - -void CVedVideoClip::SetNormalizing(TBool aNormalizing) - { - if (iAudClip) - { - iAudClip->SetNormalizing(aNormalizing); - } - } - -TBool CVedVideoClip::Normalizing() const - { - return (iAudClip && iAudClip->Normalizing()); - } - -TTimeIntervalMicroSeconds CVedVideoClip::CutInTime() const - { - if (iInfo->Class() == EVedVideoClipClassFile) - { - return iCutInTime; - } - else - { - return TTimeIntervalMicroSeconds(0); - } - } - - -TTimeIntervalMicroSeconds CVedVideoClip::CutOutTime() const - { - if (iInfo->Class() == EVedVideoClipClassFile) - { - return iCutOutTime; - } - else - { - return iInfo->Duration(); - } - } - - -TTimeIntervalMicroSeconds CVedVideoClip::StartTime() const - { - return iStartTime; - } - - -TTimeIntervalMicroSeconds CVedVideoClip::EndTime() const - { - return TTimeIntervalMicroSeconds(iStartTime.Int64() + EditedDuration().Int64()); - } - - -TTimeIntervalMicroSeconds CVedVideoClip::EditedDuration() const - { - TInt64 editedDuration = CutOutTime().Int64() - CutInTime().Int64(); - return TTimeIntervalMicroSeconds((TInt64(1000) * editedDuration) / TInt64(Speed())); - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/src/VedVideoClipGenerator.cpp --- a/videoeditorengine/vedengine/src/VedVideoClipGenerator.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#include "VedVideoClipGenerator.h" -#include "VedMovieImp.h" -#include "VedVideoClip.h" -#include - -EXPORT_C CVedVideoClipGenerator::CVedVideoClipGenerator() - : iVideoClip(0), iIsOwnedByVideoClip(EFalse), iMaximumFramerate(KVEdMaxFrameRate) - { - } - - -EXPORT_C CVedVideoClipGenerator::~CVedVideoClipGenerator() - { - } - - -EXPORT_C TBool CVedVideoClipGenerator::IsInserted() const - { - return (iVideoClip != 0); - } - - -EXPORT_C CVedMovie* CVedVideoClipGenerator::Movie() const - { - __ASSERT_ALWAYS(iVideoClip != 0, - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorNotInserted)); - - return iVideoClip->Movie(); - } - - -EXPORT_C TInt CVedVideoClipGenerator::VideoClipIndex() const - { - __ASSERT_ALWAYS(iVideoClip != 0, - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorNotInserted)); - - return iVideoClip->Index(); - } - - -EXPORT_C TBool CVedVideoClipGenerator::IsOwnedByVideoClip() const - { - __ASSERT_ALWAYS(iVideoClip != 0, - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorNotInserted)); - - return iIsOwnedByVideoClip; - } - - -void CVedVideoClipGenerator::SetVideoClip(CVedVideoClip& aVideoClip, - TBool aIsOwnedByVideoClip) - { - __ASSERT_ALWAYS(iVideoClip == 0, - TVedPanic::Panic(TVedPanic::EVideoClipGeneratorAlreadyInserted)); - - iVideoClip = &aVideoClip; - iIsOwnedByVideoClip = aIsOwnedByVideoClip; - } - - -EXPORT_C void CVedVideoClipGenerator::ReportDurationChanged() const - { - if (iVideoClip != 0) - { - iVideoClip->Movie()->RecalculateVideoClipTimings(iVideoClip); - iVideoClip->Movie()->FireVideoClipTimingsChanged(iVideoClip->Movie(), iVideoClip); - } - } - - -EXPORT_C void CVedVideoClipGenerator::ReportSettingsChanged() const - { - if (iVideoClip != 0) - { - iVideoClip->Movie()->FireVideoClipGeneratorSettingsChanged(iVideoClip->Movie(), iVideoClip); - } - } - -EXPORT_C void CVedVideoClipGenerator::ReportDescriptiveNameChanged() const - { - if (iVideoClip != 0) - { - iVideoClip->Movie()->FireVideoClipDescriptiveNameChanged(iVideoClip->Movie(), iVideoClip); - } - } - -EXPORT_C TInt CVedVideoClipGenerator::CalculateFrameComplexityFactor(CFbsBitmap* /*aFrame*/) const - { - RDebug::Print(_L("CVedVideoClipGenerator::CalculateFrameComplexityFactor IN")); - - return 10; - - // Disabled since the calculation takes too long and is not very accurate - /*if ( !aFrame ) - { - return 0; - } - - TInt height = aFrame->SizeInPixels().iHeight; - TInt width = aFrame->SizeInPixels().iWidth; - TInt numberOfPixels = height * width; - - TInt mean = 0; - - TInt y; - TInt x; - - for (y = 0; y < height; y++) - { - for (x = 0; x < width; x++) - { - TRgb color; - TPoint point(x, y); - aFrame->GetPixel(color, point); - mean += color.Green(); - } - } - mean = (TInt)((TReal)mean/(TReal)numberOfPixels + 0.5); - - TInt moment = 0; - TInt tmp; - for (y = 0; y < height; y++) - { - for (x = 0; x < width; x++) - { - TRgb color; - TPoint point(x, y); - aFrame->GetPixel(color, point); - tmp = color.Green() - mean; - if (tmp<0) - tmp = -tmp; - moment += tmp; - } - } - moment = (TInt)((TReal)moment/(TReal)numberOfPixels + 0.5); - moment *= 10; - - RDebug::Print(_L("CVedVideoClipGenerator::CalculateFrameComplexityFactor returning moment: %d"), moment); - return moment;*/ - } - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/src/VedVideoClipInfoGeneratedImp.cpp --- a/videoeditorengine/vedengine/src/VedVideoClipInfoGeneratedImp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,384 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "VedVideoClipInfoGeneratedImp.h" -#include "VedMovieImp.h" -#include "VedVideoClip.h" -#include "VedVideoClipGenerator.h" - -#include - -// Print macro -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x -#else -#define PRINT(x) -#endif - - -CVedVideoClipInfoGeneratedImp::CVedVideoClipInfoGeneratedImp(CVedVideoClipGenerator& aGenerator, TBool aOwnsGenerator) - : iGenerator(&aGenerator), iOwnsGenerator(aOwnsGenerator) - { - } - - -void CVedVideoClipInfoGeneratedImp::ConstructL(MVedVideoClipInfoObserver& aObserver) - { - PRINT(_L("CVedVideoClipInfoGeneratedImp::ConstructL in")); - - iInfoOperation = CVedVideoClipInfoGeneratedOperation::NewL(this, aObserver); - iAdapter = new (ELeave) CVedVideoClipGeneratedFrameToFrameAdapter(*this); - - PRINT(_L("CVedVideoClipInfoGeneratedImp::ConstructL out")); - } - - -CVedVideoClipInfoGeneratedImp::~CVedVideoClipInfoGeneratedImp() - { - PRINT(_L("CVedVideoClipInfoGeneratedImp::~CVedVideoClipInfoGeneratedImp in")); - - if ( iGenerator ) - { - if ( (TInt)iOwnsGenerator == (TInt)ETrue ) - { - delete iGenerator; - } - - iGenerator = 0; - } - - delete iInfoOperation; - delete iAdapter; - - PRINT(_L("CVedVideoClipInfoGeneratedImp::~CVedVideoClipInfoGeneratedImp out")); - } - -TPtrC CVedVideoClipInfoGeneratedImp::DescriptiveName() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - return iGenerator->DescriptiveName(); - } - -CVedVideoClipGenerator* CVedVideoClipInfoGeneratedImp::Generator() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - return iGenerator; - } - - -TVedVideoClipClass CVedVideoClipInfoGeneratedImp::Class() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - return EVedVideoClipClassGenerated; - } - - -TInt CVedVideoClipInfoGeneratedImp::GetVideoFrameIndexL(TTimeIntervalMicroSeconds aTime) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - return iGenerator->GetVideoFrameIndex(aTime); - } - - -void CVedVideoClipInfoGeneratedImp::GetFrameL(MVedVideoClipFrameObserver& aObserver, - TInt aIndex, - TSize* const aResolution, - TDisplayMode aDisplayMode, - TBool aEnhance, - TInt aPriority) - { - PRINT(_L("CVedVideoClipInfoGeneratedImp::GetFrameL in")); - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - iAdapter->iFrameObserver = &aObserver; - iGenerator->GetFrameL(*iAdapter, aIndex, aResolution, aDisplayMode, aEnhance, aPriority); - PRINT(_L("CVedVideoClipInfoGeneratedImp::GetFrameL out")); - } - - -void CVedVideoClipInfoGeneratedImp::CancelFrame() - { - PRINT(_L("CVedVideoClipInfoGeneratedImp::CancelFrame in")); - - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - iGenerator->CancelFrame(); - PRINT(_L("CVedVideoClipInfoGeneratedImp::CancelFrame out")); - } - -TPtrC CVedVideoClipInfoGeneratedImp::FileName() const - { - // Always panic - TVedPanic::Panic(TVedPanic::EVideoClipInfoNoFileAssociated); - - // This will never be reached. - return NULL; - } - - -RFile* CVedVideoClipInfoGeneratedImp::FileHandle() const - { - // Always panic - TVedPanic::Panic(TVedPanic::EVideoClipInfoNoFileAssociated); - - // This will never be reached. - return NULL; - } - - -TVedVideoFormat CVedVideoClipInfoGeneratedImp::Format() const - { - // Always panic - TVedPanic::Panic(TVedPanic::EVideoClipInfoNoFileAssociated); - - // This will never be reached. - return EVedVideoFormatUnrecognized; - } - - -TVedVideoType CVedVideoClipInfoGeneratedImp::VideoType() const - { - // Always panic - TVedPanic::Panic(TVedPanic::EVideoClipInfoNoFileAssociated); - - // This will never be reached. - return EVedVideoTypeUnrecognized; - } - - -TSize CVedVideoClipInfoGeneratedImp::Resolution() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return iGenerator->Movie()->Resolution(); - } - - -TBool CVedVideoClipInfoGeneratedImp::HasAudio() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return EFalse; - } - - -TVedAudioType CVedVideoClipInfoGeneratedImp::AudioType() const - { - // Always panic - TVedPanic::Panic(TVedPanic::EVideoClipInfoNoFileAssociated); - - // This will never be reached. - return EVedAudioTypeUnrecognized; - } - -TVedAudioChannelMode CVedVideoClipInfoGeneratedImp::AudioChannelMode() const - { - // Always panic - TVedPanic::Panic(TVedPanic::EVideoClipInfoNoFileAssociated); - - // This will never be reached. - return EVedAudioChannelModeUnrecognized; - } - -TInt CVedVideoClipInfoGeneratedImp::AudioSamplingRate() const - { - // Always panic - TVedPanic::Panic(TVedPanic::EVideoClipInfoNoFileAssociated); - - // This will never be reached. - return -1; - } - - - -TTimeIntervalMicroSeconds CVedVideoClipInfoGeneratedImp::Duration() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return iGenerator->Duration(); - } - - -TInt CVedVideoClipInfoGeneratedImp::VideoFrameCount() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return iGenerator->VideoFrameCount(); - } - - -TTimeIntervalMicroSeconds CVedVideoClipInfoGeneratedImp::VideoFrameStartTimeL(TInt aIndex) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return iGenerator->VideoFrameStartTime(aIndex); - } - - -TTimeIntervalMicroSeconds CVedVideoClipInfoGeneratedImp::VideoFrameEndTimeL(TInt aIndex) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - return iGenerator->VideoFrameEndTime(aIndex); - } - - -TTimeIntervalMicroSeconds CVedVideoClipInfoGeneratedImp::VideoFrameDurationL(TInt aIndex) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - return iGenerator->VideoFrameDuration(aIndex); - } - - -TInt CVedVideoClipInfoGeneratedImp::VideoFrameSizeL(TInt /*aIndex*/) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - // always panic - TVedPanic::Panic(TVedPanic::EVideoClipInfoNoFileAssociated); - - // will never be reached - return 0; - } - - -TBool CVedVideoClipInfoGeneratedImp::VideoFrameIsIntraL(TInt aIndex) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - if (aIndex == 0) - { - return ETrue; - } - return EFalse; - } - - -void CVedVideoClipInfoGeneratedImp::SetTranscodeFactor(TVedTranscodeFactor aFactor) - { - iTFactor.iStreamType =aFactor.iStreamType; - iTFactor.iTRes = aFactor.iTRes; - } - -TVedTranscodeFactor CVedVideoClipInfoGeneratedImp::TranscodeFactor() - { - return iTFactor; - } - - -TBool CVedVideoClipInfoGeneratedImp::IsMMSCompatible() - { - // Always panic - TVedPanic::Panic(TVedPanic::EVideoClipInfoNoFileAssociated); - - // This will never be reached. - return ETrue;; - } - - -CVedVideoClipInfoGeneratedOperation* CVedVideoClipInfoGeneratedOperation::NewL(CVedVideoClipInfoGeneratedImp* aInfo, - MVedVideoClipInfoObserver& aObserver) - { - PRINT(_L("CVedVideoClipInfoGeneratedOperation::NewL in")); - - CVedVideoClipInfoGeneratedOperation* self = - new (ELeave) CVedVideoClipInfoGeneratedOperation(aInfo, aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - PRINT(_L("CVedVideoClipInfoGeneratedOperation::NewL out")); - return self; - } - - -CVedVideoClipInfoGeneratedOperation::CVedVideoClipInfoGeneratedOperation(CVedVideoClipInfoGeneratedImp* aInfo, - MVedVideoClipInfoObserver& aObserver) - : CActive(EPriorityStandard), iInfo(aInfo) - { - PRINT(_L("CVedVideoClipInfoGeneratedOperation::CVedVideoClipInfoGeneratedOperation in")); - - iObserver = &aObserver; - CActiveScheduler::Add(this); - - PRINT(_L("CVedVideoClipInfoGeneratedOperation::CVedVideoClipInfoGeneratedOperation out")); - } - - -void CVedVideoClipInfoGeneratedOperation::ConstructL() - { - PRINT(_L("CVedVideoClipInfoGeneratedOperation::ConstructL in")); - - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - - PRINT(_L("CVedVideoClipInfoGeneratedOperation::ConstructL out")); - } - - -CVedVideoClipInfoGeneratedOperation::~CVedVideoClipInfoGeneratedOperation() - { - Cancel(); - } - - -void CVedVideoClipInfoGeneratedOperation::RunL() - { - PRINT(_L("CVedVideoClipInfoGeneratedOperation::RunL in")); - - iInfo->iReady = ETrue; - - iObserver->NotifyVideoClipInfoReady(*iInfo, KErrNone); - - PRINT(_L("CVedVideoClipInfoGeneratedOperation::RunL out")); - } - - -void CVedVideoClipInfoGeneratedOperation::DoCancel() - { - } - - - -CVedVideoClipGeneratedFrameToFrameAdapter::CVedVideoClipGeneratedFrameToFrameAdapter(CVedVideoClipInfo& aInfo) -: iInfo(aInfo) - { - } - -void CVedVideoClipGeneratedFrameToFrameAdapter::NotifyVideoClipGeneratorFrameCompleted( - CVedVideoClipGenerator& /*aInfo*/, TInt aError, CFbsBitmap* aFrame) - { - iFrameObserver->NotifyVideoClipFrameCompleted(iInfo, aError, aFrame); - } diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/src/VedVideoClipInfoImp.cpp --- a/videoeditorengine/vedengine/src/VedVideoClipInfoImp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,911 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - - -#include "VedVideoClipInfoImp.h" -#include "movieprocessor.h" -#include -#include -#include "audclipinfo.h" -#include "audcommon.h" -#include "VedVideoClip.h" - -// Print macro -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x -#else -#define PRINT(x) -#endif - - -EXPORT_C CVedVideoClipInfo* CVedVideoClipInfo::NewL(const TDesC& aFileName, - MVedVideoClipInfoObserver& aObserver) - { - PRINT(_L("CVedVideoClipInfo::NewL")); - - CVedVideoClipInfoImp* self = (CVedVideoClipInfoImp*)NewLC(aFileName, aObserver); - self->iVideoClipIsStandalone = ETrue; - CleanupStack::Pop(self); - PRINT(_L("CVedVideoClipInfo::NewL out")); - return self; - } - -EXPORT_C CVedVideoClipInfo* CVedVideoClipInfo::NewLC(const TDesC& aFileName, - MVedVideoClipInfoObserver& aObserver) - { - PRINT(_L("CVedVideoClipInfo::NewLC in")); - - CVedVideoClipInfoImp* self = new (ELeave) CVedVideoClipInfoImp(NULL); - CleanupStack::PushL(self); - self->ConstructL(aFileName, aObserver); - - PRINT(_L("CVedVideoClipInfo::NewLC out")); - return self; - } - -EXPORT_C CVedVideoClipInfo* CVedVideoClipInfo::NewL(RFile* aFileHandle, - MVedVideoClipInfoObserver& aObserver) - { - PRINT(_L("CVedVideoClipInfo::NewL")); - - CVedVideoClipInfoImp* self = (CVedVideoClipInfoImp*)NewLC(aFileHandle, aObserver); - self->iVideoClipIsStandalone = ETrue; - CleanupStack::Pop(self); - PRINT(_L("CVedVideoClipInfo::NewL out")); - return self; - } - -EXPORT_C CVedVideoClipInfo* CVedVideoClipInfo::NewLC(RFile* aFileHandle, - MVedVideoClipInfoObserver& aObserver) - { - PRINT(_L("CVedVideoClipInfo::NewLC in")); - - CVedVideoClipInfoImp* self = new (ELeave) CVedVideoClipInfoImp(NULL); - CleanupStack::PushL(self); - self->ConstructL(aFileHandle, aObserver); - - PRINT(_L("CVedVideoClipInfo::NewLC out")); - return self; - } - - -CVedVideoClipInfo* CVedVideoClipInfoImp::NewL(CAudClipInfo* aAudClipInfo, - const TDesC& aFileName, MVedVideoClipInfoObserver& aObserver) - { - CVedVideoClipInfoImp* self = new (ELeave) CVedVideoClipInfoImp(aAudClipInfo); - CleanupStack::PushL(self); - if (aAudClipInfo) - { - self->ConstructL(aAudClipInfo->FileName(), aObserver); - } - else - { - self->ConstructL(aFileName, aObserver); - } - self->iVideoClipIsStandalone = EFalse; - CleanupStack::Pop(self); - return self; - } - -CVedVideoClipInfo* CVedVideoClipInfoImp::NewL(CAudClipInfo* aAudClipInfo, - RFile* aFileHandle, MVedVideoClipInfoObserver& aObserver) - { - CVedVideoClipInfoImp* self = new (ELeave) CVedVideoClipInfoImp(aAudClipInfo); - CleanupStack::PushL(self); - if (aAudClipInfo) - { - self->ConstructL(aAudClipInfo->FileHandle(), aObserver); - } - else - { - self->ConstructL(aFileHandle, aObserver); - } - self->iVideoClipIsStandalone = EFalse; - CleanupStack::Pop(self); - return self; - } - - -CVedVideoClipInfoImp::CVedVideoClipInfoImp(CAudClipInfo* aAudClipInfo) - : iReady(EFalse), iAudClipInfoOwnedByVideoClipInfo(EFalse), iAudClipInfo(aAudClipInfo) - { - } - - -void CVedVideoClipInfoImp::ConstructL(const TDesC& aFileName, - MVedVideoClipInfoObserver& aObserver) - { - PRINT(_L("CVedVideoClipInfo::ConstructL in")); - - iFileName = HBufC::NewL(aFileName.Length()); - *iFileName = aFileName; - - iFrameOperation = CVedVideoClipFrameOperation::NewL(this); - - iInfoOperation = CVedVideoClipInfoOperation::NewL(this, aObserver); - - PRINT(_L("CVedVideoClipInfo::ConstructL out")); - } - -void CVedVideoClipInfoImp::ConstructL(RFile* aFileHandle, - MVedVideoClipInfoObserver& aObserver) - { - PRINT(_L("CVedVideoClipInfo::ConstructL in")); - - iFileName = HBufC::NewL(1); - iFileHandle = aFileHandle; - - iFrameOperation = CVedVideoClipFrameOperation::NewL(this); - - iInfoOperation = CVedVideoClipInfoOperation::NewL(this, aObserver); - - PRINT(_L("CVedVideoClipInfo::ConstructL out")); - } - - -CVedVideoClipInfoImp::~CVedVideoClipInfoImp() - { - PRINT(_L("CVedVideoClipInfo::~CVedVideoClipInfoImp in")); - - delete iInfoOperation; - delete iFrameOperation; - - User::Free(iVideoFrameInfoArray); - delete iFileName; - - REComSession::FinalClose(); - - if (iAudClipInfoOwnedByVideoClipInfo) - { - delete iAudClipInfo; - } - - PRINT(_L("CVedVideoClipInfo::~CVedVideoClipInfoImp out")); - } - - -TPtrC CVedVideoClipInfoImp::DescriptiveName() const - { - return *iFileName; - } - -CVedVideoClipGenerator* CVedVideoClipInfoImp::Generator() const - { - // Always panic - TVedPanic::Panic(TVedPanic::EVideoClipInfoNoGeneratorAssociated); - - // This will never be reached. - return NULL; - } - - -TVedVideoClipClass CVedVideoClipInfoImp::Class() const - { - return EVedVideoClipClassFile; - } - - -TInt CVedVideoClipInfoImp::GenerateVideoFrameInfoArrayL() - { - PRINT(_L("CVedVideoClipInfoImp::GenerateVideoFrameInfoArrayL in")); - - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - TInt error = KErrNone; - - if ( !iVideoFrameInfoArrayReady ) - { - CMovieProcessor* processor = CMovieProcessor::NewL(); - CleanupStack::PushL(processor); - TRAP( error, processor->GenerateVideoFrameInfoArrayL(*iFileName, iFileHandle, iVideoFrameInfoArray)); - CleanupStack::PopAndDestroy(processor); - - if ( (error == KErrNone) && iVideoFrameInfoArray ) - { - iVideoFrameInfoArrayReady = ETrue; - } - else - { - PRINT((_L("CVedVideoClipInfoImp::GenerateVideoFrameInfoArrayL Error=%d"), error)); - } - } - - PRINT(_L("CVedVideoClipInfoImp::GenerateVideoFrameInfoArrayL out")); - return error; - } - - -TInt CVedVideoClipInfoImp::GetVideoFrameIndexL(TTimeIntervalMicroSeconds aTime) - { - PRINT(_L("CVedVideoClipInfoImp::GetVideoFrameIndex in")); - - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - __ASSERT_ALWAYS((aTime >= TTimeIntervalMicroSeconds(0)) && (aTime <= Duration()), - TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalVideoFrameTime)); - - /* Use binary search to find the right frame. */ - - TInt start = 0; - TInt end = iVideoFrameCount - 1; - TInt index = -1; - TBool always = ETrue; - - while( always ) - { - index = start + ((end - start) / 2); - - TTimeIntervalMicroSeconds startTime = VideoFrameStartTimeL(index); - TTimeIntervalMicroSeconds endTime = VideoFrameEndTimeL(index); - if (index < (VideoFrameCount() - 1)) - { - endTime = TTimeIntervalMicroSeconds(endTime.Int64() - 1); - } - - if (aTime < startTime) - { - end = index - 1; - } - else if (aTime > endTime) - { - start = index + 1; - } - else - { - always = EFalse; - } - } - - PRINT(_L("CVedVideoClipInfoImp::GetVideoFrameIndex out")); - return index; - } - - -void CVedVideoClipInfoImp::GetFrameL(MVedVideoClipFrameObserver& aObserver, - TInt aIndex, - TSize* const aResolution, - TDisplayMode aDisplayMode, - TBool aEnhance, - TInt aPriority) - { - PRINT(_L("CVedVideoClipInfoImp::GetFrameL in")); - - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - iFrameOperation->StartL(aObserver, aIndex, aResolution, aDisplayMode, aEnhance, aPriority); - - PRINT(_L("CVedVideoClipInfoImp::GetFrameL out")); - } - - -void CVedVideoClipInfoImp::CancelFrame() - { - PRINT(_L("CVedVideoClipInfoImp::CancelFrame in")); - - if ( !iReady ) - { - PRINT(_L("CVedVideoClipInfoImp::CancelFrame not even info ready yet, cancel it and get out")); - iInfoOperation->Cancel(); - return; - } - - iFrameOperation->Cancel(); - - PRINT(_L("CVedVideoClipInfoImp::CancelFrame out")); - } - - - - -TPtrC CVedVideoClipInfoImp::FileName() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return *iFileName; - } - -RFile* CVedVideoClipInfoImp::FileHandle() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return iFileHandle; - } - - -TVedVideoFormat CVedVideoClipInfoImp::Format() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return iFormat; - } - - -TVedVideoType CVedVideoClipInfoImp::VideoType() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return iVideoType; - } - - -TSize CVedVideoClipInfoImp::Resolution() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return iResolution; - } - - -TBool CVedVideoClipInfoImp::HasAudio() const - { - - if (!iReady) - { - if (iVideoClipIsStandalone) - return EFalse; - } - - if (iAudClipInfo == 0) - { - return EFalse; - } - return ((iAudClipInfo->Properties().iAudioType != EAudTypeUnrecognized) - && (iAudClipInfo->Properties().iAudioType != EAudNoAudio)); - } - - -TVedAudioType CVedVideoClipInfoImp::AudioType() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - if (iAudClipInfo == 0) - { - return EVedAudioTypeNoAudio; - } - - TVedAudioType vedAudioType = EVedAudioTypeUnrecognized; - if (iAudClipInfo->Properties().iAudioType == EAudAMR) - { - vedAudioType = EVedAudioTypeAMR; - } - else if (iAudClipInfo->Properties().iAudioType == EAudAMRWB) - { - vedAudioType = EVedAudioTypeAMRWB; - } - else if (iAudClipInfo->Properties().iAudioType == EAudMP3) - { - vedAudioType = EVedAudioTypeMP3; - } - else if (iAudClipInfo->Properties().iAudioType == EAudAAC_MPEG4 ) - { - vedAudioType = EVedAudioTypeAAC_LC; - } - else if (iAudClipInfo->Properties().iAudioType == EAudWAV) - { - vedAudioType = EVedAudioTypeWAV; - } - else if (iAudClipInfo->Properties().iAudioType == EAudNoAudio) - { - vedAudioType = EVedAudioTypeNoAudio; - } - - return vedAudioType; - } - -TVedAudioChannelMode CVedVideoClipInfoImp::AudioChannelMode() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - if (iAudClipInfo == 0) - { - return EVedAudioChannelModeUnrecognized; - } - - TVedAudioChannelMode vedChannelMode = EVedAudioChannelModeUnrecognized; - if (iAudClipInfo->Properties().iChannelMode == EAudStereo) - { - vedChannelMode = EVedAudioChannelModeStereo; - } - else if (iAudClipInfo->Properties().iChannelMode == EAudSingleChannel) - { - vedChannelMode = EVedAudioChannelModeSingleChannel; - } - else if (iAudClipInfo->Properties().iChannelMode == EAudDualChannel) - { - vedChannelMode = EVedAudioChannelModeDualChannel; - } - - return vedChannelMode; - } - -TInt CVedVideoClipInfoImp::AudioSamplingRate() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - if (iAudClipInfo == 0) - { - return 0; - } - - return iAudClipInfo->Properties().iSamplingRate; - } - - -TTimeIntervalMicroSeconds CVedVideoClipInfoImp::Duration() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return iDuration; - } - - -TInt CVedVideoClipInfoImp::VideoFrameCount() const - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - return iVideoFrameCount; - } - - -TTimeIntervalMicroSeconds CVedVideoClipInfoImp::VideoFrameStartTimeL(TInt aIndex) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - __ASSERT_ALWAYS(((aIndex >= 0) && (aIndex < iVideoFrameCount)), - TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalVideoFrameIndex)); - - if ( !iVideoFrameInfoArrayReady ) - { - User::LeaveIfError(GenerateVideoFrameInfoArrayL()); - } - - TInt64 startTime = TInt64(iVideoFrameInfoArray[aIndex].iStartTime) * TInt64(1000); - return TTimeIntervalMicroSeconds(startTime); - } - - -TTimeIntervalMicroSeconds CVedVideoClipInfoImp::VideoFrameEndTimeL(TInt aIndex) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - __ASSERT_ALWAYS(((aIndex >= 0) && (aIndex < iVideoFrameCount)), - TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalVideoFrameIndex)); - - if ( !iVideoFrameInfoArrayReady ) - { - User::LeaveIfError(GenerateVideoFrameInfoArrayL()); - } - - if (aIndex < (iVideoFrameCount - 1)) - { - return (TInt64(iVideoFrameInfoArray[aIndex + 1].iStartTime) * TInt64(1000)); - } - else - { - return iDuration; - } - } - - -TTimeIntervalMicroSeconds CVedVideoClipInfoImp::VideoFrameDurationL(TInt aIndex) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - __ASSERT_ALWAYS(((aIndex >= 0) && (aIndex < iVideoFrameCount)), - TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalVideoFrameIndex)); - - if ( !iVideoFrameInfoArrayReady ) - { - User::LeaveIfError(GenerateVideoFrameInfoArrayL()); - } - - - TInt64 duration = - (TInt64(iVideoFrameInfoArray[aIndex].iStartTime) * TInt64(1000)); - if (aIndex < (iVideoFrameCount - 1)) - { - duration += TInt64(iVideoFrameInfoArray[aIndex + 1].iStartTime) * TInt64(1000); - } - else - { - duration += iDuration.Int64(); - } - - return TTimeIntervalMicroSeconds(duration); - } - - -TInt CVedVideoClipInfoImp::VideoFrameSizeL(TInt aIndex) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - __ASSERT_ALWAYS(((aIndex >= 0) && (aIndex < iVideoFrameCount)), - TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalVideoFrameIndex)); - - if ( !iVideoFrameInfoArrayReady ) - { - User::LeaveIfError(GenerateVideoFrameInfoArrayL()); - } - - - return iVideoFrameInfoArray[aIndex].iSize; - } - - -TBool CVedVideoClipInfoImp::VideoFrameIsIntraL(TInt aIndex) - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - __ASSERT_ALWAYS(((aIndex >= 0) && (aIndex < iVideoFrameCount)), - TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalVideoFrameIndex)); - - if ( !iVideoFrameInfoArrayReady ) - { - User::LeaveIfError(GenerateVideoFrameInfoArrayL()); - } - - if (iVideoFrameInfoArray[aIndex].iFlags & KVedVideoFrameInfoFlagIntra) - { - return ETrue; - } - else - { - return EFalse; - } - } - -void CVedVideoClipInfoImp::SetTranscodeFactor(TVedTranscodeFactor aFactor) - { - iTimeFactor.iStreamType = aFactor.iStreamType; - iTimeFactor.iTRes = aFactor.iTRes; - } - -TVedTranscodeFactor CVedVideoClipInfoImp::TranscodeFactor() - { - return iTimeFactor; - } - -TBool CVedVideoClipInfoImp::IsMMSCompatible() - { - __ASSERT_ALWAYS(iReady, - TVedPanic::Panic(TVedPanic::EVideoClipInfoNotReady)); - - TAudType audioType; - if (iAudClipInfo == 0) - { - audioType = EAudNoAudio; - } - else - { - audioType = iAudClipInfo->Properties().iAudioType; - } - - return ( ( iFormat == EVedVideoFormat3GPP ) && - ( iVideoType == EVedVideoTypeH263Profile0Level10 ) && - ( audioType == EAudAMR ) ); - } - - -CVedVideoClipInfoOperation* CVedVideoClipInfoOperation::NewL(CVedVideoClipInfoImp* aInfo, - MVedVideoClipInfoObserver& aObserver) - { - PRINT(_L("CVedVideoClipInfoOperation::NewL in")); - - CVedVideoClipInfoOperation* self = - new (ELeave) CVedVideoClipInfoOperation(aInfo, aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - PRINT(_L("CVedVideoClipInfoOperation::NewL out")); - return self; - } - - -CVedVideoClipInfoOperation::CVedVideoClipInfoOperation(CVedVideoClipInfoImp* aInfo, - MVedVideoClipInfoObserver& aObserver) - : CActive(EPriorityStandard), iInfo(aInfo), iMovieProcessorError(KErrNone) - { - PRINT(_L("CVedVideoClipInfoOperation::CVedVideoClipInfoOperation in")); - - iObserver = &aObserver; - CActiveScheduler::Add(this); - - PRINT(_L("CVedVideoClipInfoOperation::CVedVideoClipInfoOperation out")); - } - - -void CVedVideoClipInfoOperation::ConstructL() - { - PRINT(_L("CVedVideoClipInfoOperation::ConstructL in")); - - iGettingAudio = EFalse; - - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - - PRINT(_L("CVedVideoClipInfoOperation::ConstructL out")); - } - - -CVedVideoClipInfoOperation::~CVedVideoClipInfoOperation() - { - Cancel(); - } - - -void CVedVideoClipInfoOperation::RunL() - { - PRINT(_L("CVedVideoClipInfoOperation::RunL in")); - - if (iGettingAudio) - { - if (iMovieProcessorError == KErrNone || iMovieProcessorError == KErrNoAudio) - { - iInfo->iReady = ETrue; - iMovieProcessorError = KErrNone; - } - iObserver->NotifyVideoClipInfoReady(*iInfo, iMovieProcessorError); - } - else - { - CMovieProcessor* processor = CMovieProcessor::NewL(); - TVedAudioType audioType = EVedAudioTypeUnrecognized; - TVedAudioChannelMode audioChannelMode = EVedAudioChannelModeUnrecognized; - TInt audioSamplingRate; - TRAP(iMovieProcessorError, - processor->GetVideoClipPropertiesL(*iInfo->iFileName, - iInfo->iFileHandle, - iInfo->iFormat, - iInfo->iVideoType, - iInfo->iResolution, - audioType, - iInfo->iDuration, - iInfo->iVideoFrameCount, - audioSamplingRate, - audioChannelMode)); - delete processor; - processor = 0; - - if (iMovieProcessorError != KErrNone) - { - iObserver->NotifyVideoClipInfoReady(*iInfo, iMovieProcessorError); - } - else if (iInfo->iAudClipInfo || !iInfo->iVideoClipIsStandalone) - { - if (iMovieProcessorError == KErrNone) - { - iInfo->iReady = ETrue; - } - iObserver->NotifyVideoClipInfoReady(*iInfo, iMovieProcessorError); - } - else - { - - if (iInfo->iFileHandle) - iInfo->iAudClipInfo = CAudClipInfo::NewL(iInfo->iFileHandle, *this); - else - iInfo->iAudClipInfo = CAudClipInfo::NewL(*iInfo->iFileName, *this); - - iInfo->iAudClipInfoOwnedByVideoClipInfo = ETrue; - iGettingAudio = ETrue; - } - } - PRINT(_L("CVedVideoClipInfoOperation::RunL out")); - } - -void CVedVideoClipInfoOperation::NotifyClipInfoReady(CAudClipInfo& /*aInfo*/, TInt aError) - { - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - - iMovieProcessorError = aError; - } - -void CVedVideoClipInfoOperation::DoCancel() - { - } - - -CVedVideoClipFrameOperation* CVedVideoClipFrameOperation::NewL(CVedVideoClipInfoImp* aInfo) - { - PRINT(_L("CVedVideoClipFrameOperation::NewL in")); - - CVedVideoClipFrameOperation* self = - new (ELeave) CVedVideoClipFrameOperation(aInfo); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - PRINT(_L("CVedVideoClipFrameOperation::NewL out")); - return self; - } - - -CVedVideoClipFrameOperation::CVedVideoClipFrameOperation(CVedVideoClipInfoImp* aInfo) - : CActive(EPriorityIdle), iInfo(aInfo) - { - PRINT(_L("CVedVideoClipFrameOperation::CVedVideoClipFrameOperation in")); - CActiveScheduler::Add(this); - PRINT(_L("CVedVideoClipFrameOperation::CVedVideoClipFrameOperation out")); - } - - -void CVedVideoClipFrameOperation::ConstructL() - { - } - - -CVedVideoClipFrameOperation::~CVedVideoClipFrameOperation() - { - Cancel(); - } - - -void CVedVideoClipFrameOperation::StartL(MVedVideoClipFrameObserver& aObserver, - TInt aIndex, - TSize* const aResolution, - TDisplayMode aDisplayMode, - TBool aEnhance, - TInt aPriority) - { - PRINT(_L("CVedVideoClipFrameOperation::StartL in")); - - __ASSERT_ALWAYS(!IsActive(), - TVedPanic::Panic(TVedPanic::EVideoClipInfoFrameOperationAlreadyRunning)); - __ASSERT_DEBUG(iProcessor == 0, TVedPanic::Panic(TVedPanic::EInternal)); - - TSize resolution; - if (aResolution != 0) - { - __ASSERT_ALWAYS(aResolution->iWidth > 0, - TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalFrameResolution)); - __ASSERT_ALWAYS(aResolution->iHeight > 0, - TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalFrameResolution)); - - resolution = *aResolution; - } - else - { - resolution = iInfo->Resolution(); - } - - __ASSERT_ALWAYS(((aIndex >= 0) && (iInfo->VideoFrameCount() == 0) || - (aIndex < iInfo->VideoFrameCount()) || - (aIndex == KFrameIndexBestThumb) ), - TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalVideoFrameIndex)); - - iIndex = aIndex; - - iFactor.iStreamType = EVedVideoBitstreamModeUnknown; - iFactor.iTRes = 0; - - CMovieProcessor* processor = CMovieProcessor::NewLC(); - - processor->StartThumbL(iInfo->FileName(), iInfo->FileHandle(), aIndex, resolution, aDisplayMode, - aEnhance); - - /* Initialization OK. This method cannot leave any more. Start processing. */ - - CleanupStack::Pop(processor); - - iProcessor = processor; - iObserver = &aObserver; - - SetPriority(aPriority); - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - - PRINT(_L("CVedVideoClipFrameOperation::StartL out")); - } - - -void CVedVideoClipFrameOperation::RunL() - { - PRINT(_L("CVedVideoClipFrameOperation::RunL in")); - - __ASSERT_DEBUG(iProcessor != 0, TVedPanic::Panic(TVedPanic::EInternal)); - __ASSERT_DEBUG(iObserver != 0, TVedPanic::Panic(TVedPanic::EInternal)); - - TInt err = KErrNone; - - if (!iThumbRequestPending) - TRAP(err, iProcessor->ProcessThumbL(iStatus, &iFactor)); - - if (err != KErrNone) - { - delete iProcessor; - iProcessor = 0; - - MVedVideoClipFrameObserver* observer = iObserver; - iObserver = 0; - observer->NotifyVideoClipFrameCompleted(*iInfo, err, NULL); - return; - } - - if (!iThumbRequestPending) - { - iInfo->SetTranscodeFactor(iFactor); - iThumbRequestPending = ETrue; - iStatus = KRequestPending; - SetActive(); - return; - } - else - { - MVedVideoClipFrameObserver* observer = iObserver; - iObserver = 0; - - if (iStatus == KErrNone) - { - CFbsBitmap* frame = 0; - iProcessor->FetchThumb(frame); - observer->NotifyVideoClipFrameCompleted(*iInfo, KErrNone, frame); - } - else - { - observer->NotifyVideoClipFrameCompleted(*iInfo, iStatus.Int(), NULL); - } - iThumbRequestPending = EFalse; - delete iProcessor; - iProcessor = 0; - } - - PRINT(_L("CVedVideoClipFrameOperation::RunL out")); - } - - -void CVedVideoClipFrameOperation::DoCancel() - { - if (iProcessor != 0) - { - delete iProcessor; - iProcessor = 0; - - // Cancel our internal request - if ( iStatus == KRequestPending ) - { - PRINT((_L("CVedVideoClipFrameOperation::DoCancel() cancel request"))); - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrCancel); - } - iThumbRequestPending = EFalse; - - MVedVideoClipFrameObserver* observer = iObserver; - iObserver = 0; - observer->NotifyVideoClipFrameCompleted(*iInfo, KErrCancel, NULL); - } - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/src/vedcodecchecker.cpp --- a/videoeditorengine/vedengine/src/vedcodecchecker.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,962 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -// Include Files -#include -#include "ctrtranscoder.h" -#include "ctrtranscoderobserver.h" -#include "VedVideoClip.h" -#include "vedvideosettings.h" -#include "vedvolreader.h" -#include "vedcodecchecker.h" -#include "vedavcedit.h" - -// Constants -const TUint KVOLHeaderBufferSize = 256; -const TUint KAVCDCRBufferSize = 16384; -const TUint KSubQCIFWidth = 128; -const TUint KQCIFWidth = 176; -const TUint KCIFWidth = 352; -const TUint KQVGAWidth = 320; -const TUint KVGAWidth = 640; -//WVGA task -const TUint KWVGAWidth = 864; - -// An assertion macro wrapper to clean up the code a bit -#define CCASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CVedCodecChecker"), -5000)) - -// Print macro -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x -#else -#define PRINT(x) -#endif - -// Near-dummy observer class for temporary transcoder instance. In practice is only used to provide input framerate -// to the transcoder -class CTrObs : public CBase, public MTRTranscoderObserver - { -public: - /* Constructor & destructor */ - - inline CTrObs(TReal aFrameRate) : iInputFrameRate(aFrameRate) - { - }; - inline ~CTrObs() - { - }; - - // Dummy methods from MTRTranscoderObserver, just used to complete the observer class - inline void MtroInitializeComplete(TInt /*aError*/) - { - }; - inline void MtroFatalError(TInt /*aError*/) - { - }; - inline void MtroReturnCodedBuffer(CCMRMediaBuffer* /*aBuffer*/) - { - }; - // method to provide clip input framerate to transcoder - inline void MtroSetInputFrameRate(TReal& aRate) - { - aRate = iInputFrameRate; - }; - inline void MtroAsyncStopComplete() - { - }; - - inline void MtroSuspend() - { - }; - - inline void MtroResume() - { - }; - -private:// data - - // clip input framerate (fps) - TReal iInputFrameRate; - - }; - - -// ================= MEMBER FUNCTIONS ======================= - -// ----------------------------------------------------------------------------- -// CVedCodecChecker::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CVedCodecChecker* CVedCodecChecker::NewL() - { - PRINT(_L("CVedCodecChecker::NewL in")); - - CVedCodecChecker* self = NewLC(); - CleanupStack::Pop(self); - - PRINT(_L("CVedCodecChecker::NewL out")); - return self; - } - -CVedCodecChecker* CVedCodecChecker::NewLC() - { - PRINT(_L("CVedCodecChecker::NewLC in")); - - CVedCodecChecker* self = new (ELeave) CVedCodecChecker(); - CleanupStack::PushL(self); - self->ConstructL(); - - PRINT(_L("CVedCodecChecker::NewLC out")); - return self; - } - -// ----------------------------------------------------------------------------- -// CVedCodecChecker::CVedCodecChecker -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CVedCodecChecker::CVedCodecChecker() : iOutputFormatsChecked(EFalse) - { - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::~CSizeEstimate -// Destructor. -// ----------------------------------------------------------------------------- -// -CVedCodecChecker::~CVedCodecChecker() - { - - // free all memory - for (TInt i = 0; i < KNumCodecs; i++) - { - if (iInputCodecsAndResolutions[i] != 0) - delete [] iInputCodecsAndResolutions[i]; - - iInputCodecsAndResolutions[i] = 0; - - if (iOutputCodecsAndResolutions[i] != 0) - delete [] iOutputCodecsAndResolutions[i]; - - iOutputCodecsAndResolutions[i] = 0; - } - - - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CVedCodecChecker::ConstructL() - { - - PRINT(_L("CVedCodecChecker::ConstructL in")); - - TInt i; - - // reset pointer tables - for (i = 0; i < KNumCodecs; i++) - { - iInputCodecsAndResolutions[i] = 0; - iOutputCodecsAndResolutions[i] = 0; - } - - // allocate resolution tables - for (i = 0; i < KNumCodecs; i++) - { - TBool* temp = new ( ELeave ) TBool[KNumResolutions]; - for (TInt j = 0; j < KNumResolutions; j++) - temp[j] = 0; - - iInputCodecsAndResolutions[i] = temp; - - temp = new ( ELeave ) TBool[KNumResolutions]; - for (TInt j = 0; j < KNumResolutions; j++) - temp[j] = 0; - - iOutputCodecsAndResolutions[i] = temp; - } - - // check supported input codecs / resolutions - GetSupportedInputFormatsL(); - - PRINT(_L("CVedCodecChecker::ConstructL out")); - - } - -// ----------------------------------------------------------------------------- -// CVedCodecChecker::GetSupportedInputFormatsL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedCodecChecker::GetSupportedInputFormatsL() - { - - PRINT(_L("CVedCodecChecker::GetSupportedInputFormatsL in")); - - const TSize KResolutions[KNumResolutions] = { KVedResolutionSubQCIF, - KVedResolutionQCIF, - KVedResolutionCIF, - KVedResolutionQVGA, - KVedResolutionVGA16By9, - KVedResolutionVGA, - //WVGA task - KVedResolutionWVGA }; - - const TPtrC8 KCodecs[KNumCodecs] = { _L8("video/H263-2000; profile=0; level=10"), - _L8("video/H263-2000; profile=0; level=45"), - _L8("video/mp4v-es; profile-level-id=8"), - _L8("video/mp4v-es; profile-level-id=9"), - _L8("video/mp4v-es; profile-level-id=1"), - _L8("video/mp4v-es; profile-level-id=2"), - _L8("video/mp4v-es; profile-level-id=3"), - _L8("video/mp4v-es; profile-level-id=4"), - _L8("video/H264; profile-level-id=42800A"), - _L8("video/H264; profile-level-id=42900B"), - _L8("video/H264; profile-level-id=42800B"), - _L8("video/H264; profile-level-id=42800C"), - _L8("video/H264; profile-level-id=42800D"), - _L8("video/H264; profile-level-id=428014"), - //WVGA task - _L8("video/H264; profile-level-id=428015"), - _L8("video/H264; profile-level-id=428016"), - _L8("video/H264; profile-level-id=42801E"), - _L8("video/H264; profile-level-id=42801F") }; - - TTRVideoFormat inputFormat; - TTRVideoFormat outputFormat; - - inputFormat.iDataType = CTRTranscoder::ETRDuCodedPicture; - outputFormat.iDataType = CTRTranscoder::ETRYuvRawData420; - - for (TInt i = 0; i < KNumCodecs; i++) - { - - PRINT((_L("GetSupportedInputFormatsL - testing codec %d"), i)); - - // create temporary transcoder observer object, with input framerate as parameter, since it is asked by the transcoder - CTrObs* tmpObs = new (ELeave) CTrObs(15.0); - CleanupStack::PushL(tmpObs); - - // create temporary transcoder instance - CTRTranscoder* tmpTranscoder = CTRTranscoder::NewL(*tmpObs); - CleanupStack::PushL(tmpTranscoder); - - // check if codec supported at all - if ( tmpTranscoder->SupportsInputVideoFormat(KCodecs[i]) ) - { - TInt error = KErrNone; - // check all resolutions - for (TInt j = 0; j < KNumResolutions; j++) - { - - if ( (i < ECodecMPEG4VSPLevel0) && (j > EResolutionQCIF) ) - { - // Do not allow larger resolutions than QCIF for H.263 - CleanupStack::PopAndDestroy(tmpTranscoder); - CleanupStack::PopAndDestroy(tmpObs); - PRINT((_L("GetSupportedInputFormatsL - break"))); - break; - } - - PRINT((_L("GetSupportedInputFormatsL - testing (%d, %d)"), i, j)); - - inputFormat.iSize = outputFormat.iSize = KResolutions[j]; - - TRAP( error, tmpTranscoder->OpenL(reinterpret_cast(1),//the sink will not be used, hence this is acceptable - CTRTranscoder::EDecoding, - KCodecs[i], - KNullDesC8, - inputFormat, - outputFormat, - EFalse ) ); - - if (error == KErrNone) - { - PRINT((_L("GetSupportedInputFormatsL - (%d, %d) supported"), i, j)); - iInputCodecsAndResolutions[i][j] = ETrue; - } - else if (error == KErrNotSupported) - { - PRINT((_L("GetSupportedInputFormatsL - (%d, %d) not supported"), i, j)); - iInputCodecsAndResolutions[i][j] = EFalse; - } - else - User::Leave(error); - - CleanupStack::PopAndDestroy(tmpTranscoder); - CleanupStack::PopAndDestroy(tmpObs); - - if ( j < (KNumResolutions - 1) ) - { - tmpObs = new (ELeave) CTrObs(15.0); - CleanupStack::PushL(tmpObs); - - // create temporary transcoder instance - tmpTranscoder = CTRTranscoder::NewL(*tmpObs); - CleanupStack::PushL(tmpTranscoder); - } - } - } - else - { - // all resolutions unsupported - for (TInt j=0; j < KNumResolutions; j++) - { - iInputCodecsAndResolutions[i][j] = EFalse; - } - - CleanupStack::PopAndDestroy(tmpTranscoder); - CleanupStack::PopAndDestroy(tmpObs); - - } - } - - PRINT(_L("CVedCodecChecker::GetSupportedInputFormatsL out")); - - } - -// ----------------------------------------------------------------------------- -// CVedCodecChecker::GetSupportedOutputFormatsL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVedCodecChecker::GetSupportedOutputFormatsL() - { - - PRINT(_L("CVedCodecChecker::GetSupportedOutputFormatsL in")); - - const TSize KResolutions[KNumResolutions] = { KVedResolutionSubQCIF, - KVedResolutionQCIF, - KVedResolutionCIF, - KVedResolutionQVGA, - KVedResolutionVGA16By9, - KVedResolutionVGA }; - - const TPtrC8 KCodecs[KNumCodecs] = { _L8("video/H263-2000; profile=0; level=10"), - _L8("video/H263-2000; profile=0; level=45"), - _L8("video/mp4v-es; profile-level-id=8"), - _L8("video/mp4v-es; profile-level-id=9"), - _L8("video/mp4v-es; profile-level-id=1"), - _L8("video/mp4v-es; profile-level-id=2"), - _L8("video/mp4v-es; profile-level-id=3"), - _L8("video/mp4v-es; profile-level-id=4"), - _L8("video/H264; profile-level-id=42800A"), - _L8("video/H264; profile-level-id=42900B"), - _L8("video/H264; profile-level-id=42800B"), - _L8("video/H264; profile-level-id=42800C"), - - //WVGA task - //(TPtrC8&)KNullDesC8, // level 1.3 not supported in output - //(TPtrC8&)KNullDesC8, // level 2 not supported in output - _L8("video/H264; profile-level-id=42800D"), - _L8("video/H264; profile-level-id=428014"), - _L8("video/H264; profile-level-id=428015"), - _L8("video/H264; profile-level-id=428016"), - _L8("video/H264; profile-level-id=42801E"), - _L8("video/H264; profile-level-id=42801F") - }; - - - - TTRVideoFormat inputFormat; - TTRVideoFormat outputFormat; - - inputFormat.iDataType = CTRTranscoder::ETRYuvRawData420; - outputFormat.iDataType = CTRTranscoder::ETRDuCodedPicture; - - for (TInt i = 0; i < KNumCodecs; i++) - { - PRINT((_L("GetSupportedOutputFormatsL - testing codec %d"), i)); - - // create temporary transcoder observer object, with input framerate as parameter, since it is asked by the transcoder - CTrObs* tmpObs = new (ELeave) CTrObs(15.0); - CleanupStack::PushL(tmpObs); - - // create temporary transcoder instance - CTRTranscoder* tmpTranscoder = CTRTranscoder::NewL(*tmpObs); - CleanupStack::PushL(tmpTranscoder); - - //WVGA task - // AVC levels 3.1 and higher are not supported in output - if (i >= ECodecAVCBPLevel3_1) - { - CleanupStack::PopAndDestroy(tmpTranscoder); - CleanupStack::PopAndDestroy(tmpObs); - PRINT((_L("GetSupportedOutputFormatsL - break AVC check"))); - break; - } - - - // check if codec supported at all - if ( tmpTranscoder->SupportsOutputVideoFormat(KCodecs[i]) ) - { - TInt error = KErrNone; - // check all resolutions - for (TInt j = 0; j < KNumResolutions; j++) - { - - if ( (i < ECodecMPEG4VSPLevel0) && (j > EResolutionQCIF) ) - { - // Do not allow larger resolutions than QCIF for H.263 - CleanupStack::PopAndDestroy(tmpTranscoder); - CleanupStack::PopAndDestroy(tmpObs); - PRINT((_L("GetSupportedOutputFormatsL - break"))); - break; - } - - PRINT((_L("GetSupportedOutputFormatsL - testing (%d, %d)"), i, j)); - - inputFormat.iSize = outputFormat.iSize = KResolutions[j]; - - TRAP( error, tmpTranscoder->OpenL(reinterpret_cast(1),//the sink will not be used, hence this is acceptable - CTRTranscoder::EEncoding, - KNullDesC8, - KCodecs[i], - inputFormat, - outputFormat, - EFalse ) ); - - if (error == KErrNone) - { - PRINT((_L("GetSupportedOutputFormatsL - (%d, %d) supported"), i, j)); - iOutputCodecsAndResolutions[i][j] = ETrue; - } - else if (error == KErrNotSupported) - { - PRINT((_L("GetSupportedOutputFormatsL - (%d, %d) not supported"), i, j)); - iOutputCodecsAndResolutions[i][j] = EFalse; - } - else - User::Leave(error); - - CleanupStack::PopAndDestroy(tmpTranscoder); - CleanupStack::PopAndDestroy(tmpObs); - - if ( j < (KNumResolutions - 1) ) - { - tmpObs = new (ELeave) CTrObs(15.0); - CleanupStack::PushL(tmpObs); - - // create temporary transcoder instance - tmpTranscoder = CTRTranscoder::NewL(*tmpObs); - CleanupStack::PushL(tmpTranscoder); - } - } - } - else - { - // all resolutions unsupported - for (TInt j=0; j < KNumResolutions; j++) - { - iOutputCodecsAndResolutions[i][j] = EFalse; - } - - CleanupStack::PopAndDestroy(tmpTranscoder); - CleanupStack::PopAndDestroy(tmpObs); - - } - } - - PRINT(_L("CVedCodecChecker::GetSupportedOutputFormatsL out")); - - } - - -// ----------------------------------------------------------------------------- -// CVedCodecChecker::IsSupportedInputClip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CVedCodecChecker::IsSupportedInputClipL(CVedVideoClip* aClip) - { - - PRINT(_L("CVedCodecChecker::IsSupportedInputClipL in")); - - if ( (aClip->Info()->VideoType() != EVedVideoTypeH263Profile0Level10) && - (aClip->Info()->VideoType() != EVedVideoTypeH263Profile0Level45) && - (aClip->Info()->VideoType() != EVedVideoTypeMPEG4SimpleProfile) && - (aClip->Info()->VideoType() != EVedVideoTypeAVCBaselineProfile) - ) - { - return KErrNotSupported; - } - - TResolution resolution = MapResolution( aClip->Info()->Resolution() ); - - if ( resolution == EResolutionUnsupported ) - return EFalse; - - if ( aClip->Info()->VideoType() == EVedVideoTypeH263Profile0Level10 ) - { - return iInputCodecsAndResolutions[ECodecH263BPLevel10][resolution]; - } - - if ( aClip->Info()->VideoType() == EVedVideoTypeH263Profile0Level45 ) - { - return iInputCodecsAndResolutions[ECodecH263BPLevel45][resolution]; - } - -#ifndef VIDEOEDITORENGINE_AVC_EDITING - if ( aClip->Info()->VideoType() == EVedVideoTypeAVCBaselineProfile ) - { - return EFalse; - } -#endif - - // clip is MPEG-4 or AVC - - // create parser to fetch codec specific info - MP4Handle mp4Handle = 0; - MP4Err mp4Error; - if (!aClip->Info()->FileHandle()) - { - TBuf<258> tempFileName(aClip->Info()->FileName()); - tempFileName.ZeroTerminate(); - - MP4FileName name = reinterpret_cast( const_cast(tempFileName.Ptr()) ); - mp4Error = MP4ParseOpen(&mp4Handle, name); - } - else - { - mp4Error = MP4ParseOpenFileHandle(&mp4Handle, aClip->Info()->FileHandle()); - } - - if (mp4Error != MP4_OK) - { - if (mp4Handle) - MP4ParseClose(mp4Handle); - mp4Handle = 0; - - if (mp4Error == MP4_OUT_OF_MEMORY) - User::Leave(KErrNoMemory); - else - User::Leave(KErrGeneral); - } - - TInt bufSize = 0; - - if (aClip->Info()->VideoType() == EVedVideoTypeMPEG4SimpleProfile) - bufSize = KVOLHeaderBufferSize; - else - bufSize = KAVCDCRBufferSize; - - HBufC8* tmpBuffer = (HBufC8*) HBufC8::NewLC(bufSize); - - TPtr8 tmpPtr = tmpBuffer->Des(); - mp4_u32 infoSize = 0; - - // get info - mp4Error = MP4ParseReadVideoDecoderSpecificInfo( mp4Handle, - (mp4_u8*)(tmpPtr.Ptr()), - bufSize, - &infoSize ); - - MP4ParseClose(mp4Handle); - - if ( mp4Error != MP4_OK ) - { - User::Leave(KErrGeneral); - } - - tmpPtr.SetLength(infoSize); - - TCodec codec = ECodecUnsupported; - - if (aClip->Info()->VideoType() == EVedVideoTypeMPEG4SimpleProfile) - { - // Parse profile-level-id - CVedVolReader* tmpVolReader = CVedVolReader::NewL(); - CleanupStack::PushL(tmpVolReader); - - tmpVolReader->ParseVolHeaderL(tmpPtr); - - TInt profileLevelId = tmpVolReader->ProfileLevelId(); - - codec = MapProfileLevelId(profileLevelId); - } - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - else - { - CVedAVCEdit* tmpAvcEdit = CVedAVCEdit::NewL(); - CleanupStack::PushL(tmpAvcEdit); - - // this leaves with KErrNotSupported if clip is not supported - tmpAvcEdit->SaveAVCDecoderConfigurationRecordL(tmpPtr, EFalse); - - // Parse level - TInt level = 0; - User::LeaveIfError( tmpAvcEdit->GetLevel(tmpPtr, level) ); - - codec = MapAVCLevel(level); - } -#endif - - CleanupStack::PopAndDestroy(2); - - if (codec == ECodecUnsupported) - return EFalse; - - PRINT(_L("CVedCodecChecker::IsSupportedInputClipL out")); - - return iInputCodecsAndResolutions[codec][resolution]; - - } - - -// ----------------------------------------------------------------------------- -// CVedCodecChecker::IsSupportedOutputFormatL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CVedCodecChecker::IsSupportedOutputFormatL(const TPtrC8& aMimeType, TSize aResolution) - { - - PRINT(_L("CVedCodecChecker::IsSupportedOutputFormatL in")); - - if (aMimeType == KNullDesC8) - { - User::Leave(KErrArgument); - } - - if ( !iOutputFormatsChecked ) - { - // check supported output formats - GetSupportedOutputFormatsL(); - iOutputFormatsChecked = ETrue; - } - - TResolution resolution = MapResolution(aResolution); - - if (resolution == EResolutionUnsupported) - return EFalse; - - TCodec codec = ParseMimeType(aMimeType, aResolution); - - if (codec == ECodecUnsupported) - return EFalse; - - PRINT(_L("CVedCodecChecker::IsSupportedOutputFormatL out")); - - return iOutputCodecsAndResolutions[codec][resolution]; - - } - - -// ----------------------------------------------------------------------------- -// CVedCodecChecker::MapResolution -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TResolution CVedCodecChecker::MapResolution(TSize aResolution) - { - - if ( aResolution == KVedResolutionSubQCIF ) - return EResolutionSubQCIF; - - else if ( aResolution == KVedResolutionQCIF ) - return EResolutionQCIF; - - else if ( aResolution == KVedResolutionCIF ) - return EResolutionCIF; - - else if ( aResolution == KVedResolutionQVGA ) - return EResolutionQVGA; - - else if ( aResolution == KVedResolutionVGA16By9 ) - return EResolutionVGA16By9; - - else if ( aResolution == KVedResolutionVGA ) - return EResolutionVGA; - //WVGA task - else if ( aResolution == KVedResolutionWVGA ) - return EResolutionWVGA; - - return EResolutionUnsupported; - } - -// ----------------------------------------------------------------------------- -// CVedCodecChecker::MapProfileLevelId -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TCodec CVedCodecChecker::MapProfileLevelId(TInt aProfileLevelId) - { - - if ( aProfileLevelId == 8 ) - return ECodecMPEG4VSPLevel0; - - if ( aProfileLevelId == 9 ) - return ECodecMPEG4VSPLevel0B; - - if ( aProfileLevelId == 1 ) - return ECodecMPEG4VSPLevel1; - - if ( aProfileLevelId == 2 ) - return ECodecMPEG4VSPLevel3; - - if ( aProfileLevelId == 3 ) - return ECodecMPEG4VSPLevel3; - - if ( aProfileLevelId == 4 ) - return ECodecMPEG4VSPLevel4; - - return ECodecUnsupported; - - } - -// ----------------------------------------------------------------------------- -// CVedCodecChecker::MapAVCLevel -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TCodec CVedCodecChecker::MapAVCLevel(TInt aLevel) - { - - if ( aLevel == 10 ) - return ECodecAVCBPLevel1; - - if ( aLevel == 101 ) - return ECodecAVCBPLevel1B; - - if ( aLevel == 11 ) - return ECodecAVCBPLevel1_1; - - if ( aLevel == 12 ) - return ECodecAVCBPLevel1_2; - - if ( aLevel == 13 ) - return ECodecAVCBPLevel1_3; - - if ( aLevel == 20 ) - return ECodecAVCBPLevel2; - //WVGA task - if ( aLevel == 21 ) - return ECodecAVCBPLevel2_1; - - if ( aLevel == 22 ) - return ECodecAVCBPLevel2_2; - - if ( aLevel == 30 ) - return ECodecAVCBPLevel3; - - if ( aLevel == 31 ) - return ECodecAVCBPLevel3_1; - - return ECodecUnsupported; - - } - -// ----------------------------------------------------------------------------- -// CVedCodecChecker::ParseMimeType -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TCodec CVedCodecChecker::ParseMimeType(const TPtrC8& aMimeType, TSize aResolution) - { - - // figure out codec - TCodec codec; - - if ( aMimeType.MatchF( _L8("*video/H263-2000*") ) != KErrNotFound ) - { - codec = ECodecH263BPLevel10; - - if ( aMimeType.MatchF( _L8("*profile*") ) != KErrNotFound ) - { - // Profile info is given, check it - if ( aMimeType.MatchF( _L8("*profile=0*") ) == KErrNotFound ) - { - return ECodecUnsupported; - } - } - else - { - // no profile given - } - - if ( aMimeType.MatchF( _L8("*level=10*") ) != KErrNotFound ) - { - codec = ECodecH263BPLevel10; - } - - else if ( aMimeType.MatchF( _L8("*level=45*") ) != KErrNotFound ) - { - codec = ECodecH263BPLevel45; - } - - else if ( aMimeType.MatchF( _L8("*level*") ) != KErrNotFound ) - { - // no other levels supported - return ECodecUnsupported; - } - else - { - // if no level is given assume 10 - } - } - else if ( (aMimeType.MatchF( _L8("*video/mp4v-es*") ) != KErrNotFound) || - (aMimeType.MatchF( _L8("*video/MP4V-ES*") ) != KErrNotFound) ) - { - - codec = ECodecMPEG4VSPLevel0; - - // Check profile-level - if ( aMimeType.MatchF( _L8("*profile-level-id=*") ) != KErrNotFound ) - { - if ( aMimeType.MatchF( _L8("*profile-level-id=8*") ) != KErrNotFound ) - { - codec = ECodecMPEG4VSPLevel0; - } - else if( aMimeType.MatchF( _L8("*profile-level-id=1*") ) != KErrNotFound ) - { - codec = ECodecMPEG4VSPLevel1; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=2*") ) != KErrNotFound ) - { - codec = ECodecMPEG4VSPLevel2; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=3*") ) != KErrNotFound ) - { - codec = ECodecMPEG4VSPLevel3; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=9*") ) != KErrNotFound ) - { - codec = ECodecMPEG4VSPLevel0B; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=4*") ) != KErrNotFound ) - { - codec = ECodecMPEG4VSPLevel4; - } - else - { - return ECodecUnsupported; - } - - } - else - { // no profile-level id - switch( aResolution.iWidth ) - { - case KSubQCIFWidth: - case KQCIFWidth: - { - // Set profile-level-id=0 - codec = ECodecMPEG4VSPLevel0; - break; - } - - case KCIFWidth: - case KQVGAWidth: - { - // Set profile-level-id=2 - codec = ECodecMPEG4VSPLevel2; - break; - } - - case KVGAWidth: - { - // Set profile-level-id=4 (4a) - codec = ECodecMPEG4VSPLevel4; - break; - } - - default: - { - // Set profile-level-id=0 - codec = ECodecMPEG4VSPLevel0; - } - } - - } - } - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - else if ( (aMimeType.MatchF( _L8("*video/h264*") ) != KErrNotFound) || - (aMimeType.MatchF( _L8("*video/H264*") ) != KErrNotFound) ) - - { - codec = ECodecAVCBPLevel1; - - if ( aMimeType.MatchF( _L8("*profile-level-id=42800A*") ) != KErrNotFound ) - { - codec = ECodecAVCBPLevel1; - } - else if( aMimeType.MatchF( _L8("*profile-level-id=42900B*") ) != KErrNotFound ) - { - codec = ECodecAVCBPLevel1B; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42800B*") ) != KErrNotFound ) - { - codec = ECodecAVCBPLevel1_1; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42800C*") ) != KErrNotFound ) - { - codec = ECodecAVCBPLevel1_2; - } - //WVGA task - else if ( aMimeType.MatchF( _L8("*profile-level-id=42800D*") ) != KErrNotFound ) - { - codec = ECodecAVCBPLevel1_3; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=428014*") ) != KErrNotFound ) - { - codec = ECodecAVCBPLevel2; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=428015*") ) != KErrNotFound ) - { - codec = ECodecAVCBPLevel2_1; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=428016*") ) != KErrNotFound ) - { - codec = ECodecAVCBPLevel2_2; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42801E*") ) != KErrNotFound ) - { - codec = ECodecAVCBPLevel3; - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42801F*") ) != KErrNotFound ) - { - codec = ECodecAVCBPLevel3_1; - } - else - { - return ECodecUnsupported; - } - } -#endif - - else - { - return ECodecUnsupported; - } - - return codec; - -} - - -// End of file - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/src/vedqualitysettingsapi.cpp --- a/videoeditorengine/vedengine/src/vedqualitysettingsapi.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,307 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "vedqualitysettingsapi.h" - -const TUint KCameraDisplayID = 2; - -// --------------------------------------------------------------------------- -// Constructor of CVideoQualitySelector -// --------------------------------------------------------------------------- -// -CVideoQualitySelector::CVideoQualitySelector() - { - } - -// --------------------------------------------------------------------------- -// Destructor of CVideoQualitySelector -// --------------------------------------------------------------------------- -// -CVideoQualitySelector::~CVideoQualitySelector() - { - if( iConfigManager ) - { - delete iConfigManager; - iConfigManager = 0; - } - - if( iQualityLevels ) - { - delete iQualityLevels; - iQualityLevels = 0; - } - } - -// --------------------------------------------------------------------------- -// ConstructL() of CVideoQualitySelector -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::ConstructL() - { - iConfigManager = CImagingConfigManager::NewL(); - - iQualityLevels = new (ELeave) CArrayFixFlat(16); - - iConfigManager->GetVideoQualityLevelsL( *iQualityLevels, KCameraDisplayID ); - } - -// --------------------------------------------------------------------------- -// NewL() of CVideoQualitySelector -// --------------------------------------------------------------------------- -// -CVideoQualitySelector* CVideoQualitySelector::NewL() - { - CVideoQualitySelector* self = CVideoQualitySelector::NewLC(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// NewLC() of CVideoQualitySelector -// --------------------------------------------------------------------------- -// -CVideoQualitySelector* CVideoQualitySelector::NewLC() - { - CVideoQualitySelector* self = new( ELeave ) CVideoQualitySelector; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// Get number of defined quality levels. -// --------------------------------------------------------------------------- -// -TInt CVideoQualitySelector::NumberOfQualityLevels() - { - return iQualityLevels->Count(); - } - -// --------------------------------------------------------------------------- -// Get quality set associated with the given level. -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel, TBool aAspectRatioWide ) - { - if ( !aAspectRatioWide ) - { - GetVideoQualitySetL( aSet, aLevel ); - } - else - { - // NOT READY - User::Leave( KErrNotSupported ); - } - } - -// --------------------------------------------------------------------------- -// Get quality set associated with the given level. -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, TInt aLevel ) - { - TVideoQualitySet currentSet; - - switch ( aLevel ) - { - case EVideoQualityMMS : - { - iConfigManager->GetVideoQualitySet( currentSet, CImagingConfigManager::EQualityLow, KCameraDisplayID ); - MapQualitySet( aSet, currentSet ); - } - break; - - case EVideoQualityNormal : - { - iConfigManager->GetVideoQualitySet( currentSet, CImagingConfigManager::EQualityNormal, KCameraDisplayID ); - MapQualitySet( aSet, currentSet ); - } - break; - - case EVideoQualityHigh : - { - iConfigManager->GetVideoQualitySet( currentSet, CImagingConfigManager::EQualityHigh, KCameraDisplayID ); - MapQualitySet( aSet, currentSet ); - } - break; - - default: - { - if ( aLevel < EVideoQualityMin ) - { - User::Leave( KErrArgument ); - } - - // Map our quality level to config manager's quality level - TInt configManagerLevel = aLevel * (CImagingConfigManager::EQualityHigh - CImagingConfigManager::EQualityMin); - configManagerLevel /= (EVideoQualityHigh - EVideoQualityMin); - - iConfigManager->GetVideoQualitySet( currentSet, configManagerLevel, KCameraDisplayID ); - MapQualitySet( aSet, currentSet ); - } - break; - } - } - -// --------------------------------------------------------------------------- -// Get quality set associated with the given video resolution. -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, const TSize& aVideoResolution ) - { - TVideoQualitySet currentSet; - TInt candidate = -1; - TInt i; - - // Go through the qualities until a match is found. If several matches, pick the 1st one - for ( i = iQualityLevels->Count() - 1; i >= 0; i-- ) // Searches from up to down to find higher quality first - { - iConfigManager->GetVideoQualitySet( currentSet, iQualityLevels->At( i ), KCameraDisplayID ); - - if ( (currentSet.iVideoWidth == aVideoResolution.iWidth) && (currentSet.iVideoHeight == aVideoResolution.iHeight) ) - { - // We've found a set which matches with the requested size - - if ( candidate == -1 ) // Don't set to worse if already found - { - candidate = i; - } - - if ( (currentSet.iVideoQualitySetLevel == CImagingConfigManager::EQualityLow) || - (currentSet.iVideoQualitySetLevel == CImagingConfigManager::EQualityNormal) || - (currentSet.iVideoQualitySetLevel == CImagingConfigManager::EQualityHigh) ) - { - // We've found a set which matches also with preferred qualities - MapQualitySet( aSet, currentSet ); - return; - } - } - } - - if ( candidate >= 0 ) - { - iConfigManager->GetVideoQualitySet( currentSet, iQualityLevels->At( candidate ), KCameraDisplayID ); - MapQualitySet( aSet, currentSet ); - } - else - { - User::Leave( KErrNotSupported ); - } - } - -// --------------------------------------------------------------------------- -// Get quality set associated with the given video codec MIME-type. -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::GetVideoQualitySetL( SVideoQualitySet& aSet, const TPtrC8& aVideoCodecMimeType ) - { - TVideoQualitySet currentSet; - TPtrC8 settingsMimeType; - TInt i; - - for ( i = iQualityLevels->Count() - 1; i >= 0; i-- ) // searches from up to down to find higher quality first - { - iConfigManager->GetVideoQualitySet( currentSet, iQualityLevels->At( i ), KCameraDisplayID ); - - settingsMimeType.Set(TPtrC8(currentSet.iVideoCodecMimeType)); - if ( settingsMimeType.MatchF( (const TDesC8& )aVideoCodecMimeType ) != KErrNotFound ) - { - // Found a match - MapQualitySet( aSet, currentSet ); - return; - } - } - - User::Leave( KErrNotSupported ); - } - -// --------------------------------------------------------------------------- -// Copies the values from the source set to the target set. -// --------------------------------------------------------------------------- -// -void CVideoQualitySelector::MapQualitySet( SVideoQualitySet& aTargetSet, TVideoQualitySet& aSourceSet ) - { - TInt i = 0; - - // Video aspect ratio - // We don't have wide screen quality sets yet so this is always true - aTargetSet.iVideoAspectRatioNormal = ETrue; - - // Video file format mime type - for ( i = 0; (i < KQSMaxShortStringLength - 1) && (i < KMaxStringLength); i++ ) - { - aTargetSet.iVideoFileMimeType[i] = aSourceSet.iVideoFileMimeType[i]; - } - aTargetSet.iVideoFileMimeType[i] = '\0'; // Add null termination - - // Video codec mime type - for ( i = 0; (i < KQSMaxLongStringLength - 1) && (i < KMaxStringLength); i++ ) - { - aTargetSet.iVideoCodecMimeType[i] = aSourceSet.iVideoCodecMimeType[i]; - } - aTargetSet.iVideoCodecMimeType[i] = '\0'; // Add null termination - - // Video picture width in pixels (luminance) - aTargetSet.iVideoWidth = aSourceSet.iVideoWidth; - - // Video picture height in pixels (luminance) - aTargetSet.iVideoHeight = aSourceSet.iVideoHeight; - - // Video framerate in fps - aTargetSet.iVideoFrameRate = aSourceSet.iVideoFrameRate; - - // Video bitrate in bps - aTargetSet.iVideoBitRate = aSourceSet.iVideoBitRate; - - // Random access point rate, in pictures per second - aTargetSet.iRandomAccessRate = aSourceSet.iRandomAccessRate; - - // Audio codec FourCC - if ( aSourceSet.iAudioFourCCType == TFourCC(' ', 'A', 'M', 'R') ) - { - // AMR - aTargetSet.iAudioFourCCType[0] = ' '; - aTargetSet.iAudioFourCCType[1] = 'A'; - aTargetSet.iAudioFourCCType[2] = 'M'; - aTargetSet.iAudioFourCCType[3] = 'R'; - aTargetSet.iAudioFourCCType[4] = '\0'; - } - - else if (aSourceSet.iAudioFourCCType == TFourCC(' ', 'A', 'A', 'C') ) - { - // AAC - aTargetSet.iAudioFourCCType[0] = ' '; - aTargetSet.iAudioFourCCType[1] = 'A'; - aTargetSet.iAudioFourCCType[2] = 'A'; - aTargetSet.iAudioFourCCType[3] = 'C'; - aTargetSet.iAudioFourCCType[4] = '\0'; - } - else - aTargetSet.iAudioFourCCType[0] = '\0'; - - // Audio bitrate in bps - aTargetSet.iAudioBitRate = aSourceSet.iAudioBitRate; - - // Audio sampling rate in Hz - aTargetSet.iAudioSamplingRate = aSourceSet.iAudioSamplingRate; - - // Number of audio channels - aTargetSet.iAudioChannels = aSourceSet.iAudioChannels; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/src/vedvideoconversionimp.cpp --- a/videoeditorengine/vedengine/src/vedvideoconversionimp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#include "vedvideoclip.h" -#include "vedvideoconversionimp.h" - -// Print macro -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x -#else -#define PRINT(x) -#endif - -// An assertion macro wrapper to clean up the code a bit -#define VCASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CVideoConverterImp"), -10000 )) - - -// --------------------------------------------------------------------------- -// NewL() of CVideoConverter -// --------------------------------------------------------------------------- -// -EXPORT_C CVideoConverter* CVideoConverter::NewL(MVideoConverterObserver& aObserver) - { - PRINT(_L("CVideoConverter::NewL in")); - - CVideoConverterImp* self = (CVideoConverterImp*)NewLC(aObserver); - CleanupStack::Pop(self); - PRINT(_L("CVideoConverter::NewL out")); - - return self; - } - -// --------------------------------------------------------------------------- -// NewLC() of CVideoConverter -// --------------------------------------------------------------------------- -// -EXPORT_C CVideoConverter* CVideoConverter::NewLC(MVideoConverterObserver& aObserver) - { - PRINT(_L("CVideoConverter::NewLC in")); - - CVideoConverterImp* self = new (ELeave) CVideoConverterImp(aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - - PRINT(_L("CVideoConverter::NewLC out")); - return self; - } - -// --------------------------------------------------------------------------- -// Constructor of CVideoConverter -// --------------------------------------------------------------------------- -// -CVideoConverterImp::CVideoConverterImp(MVideoConverterObserver& aObserver) : iObserver(aObserver) -{ -} - - -// --------------------------------------------------------------------------- -// Destructor of CVideoConverter -// --------------------------------------------------------------------------- -// -CVideoConverterImp::~CVideoConverterImp() -{ - delete iMovie; -} - -// --------------------------------------------------------------------------- -// ConstructL() of CVideoConverter -// --------------------------------------------------------------------------- -// -void CVideoConverterImp::ConstructL() -{ - iMovie = CVedMovie::NewL(NULL); - - iMovie->RegisterMovieObserverL(this); - - // set quality to MMS - iMovie->SetQuality(CVedMovie::EQualityMMSInteroperability); -} - -// --------------------------------------------------------------------------- -// Insert file to be checked / converted -// --------------------------------------------------------------------------- -// -void CVideoConverterImp::InsertFileL(RFile* aFile) -{ - - if ( iMovie->VideoClipCount() != 0 ) - User::Leave(KErrAlreadyExists); - - iMovie->InsertVideoClipL(aFile, 0); -} - -// --------------------------------------------------------------------------- -// Check compatibility -// --------------------------------------------------------------------------- -// -TMMSCompatibility CVideoConverterImp::CheckMMSCompatibilityL(TInt aMaxSize) -{ - - VCASSERT( iMovie->VideoClipCount() == 1 ); - - if ( iMovie->VideoClipCount() != 1 ) - User::Leave(KErrNotFound); - - CVedVideoClipInfo* info = iMovie->VideoClipInfo(0); - - // check file size - RFile* file = info->FileHandle(); - - TInt size = 0; - User::LeaveIfError( file->Size(size) ); - - TBool sizeOK = ( size <= aMaxSize ); - - // check format - TVedVideoFormat fileFormat = info->Format(); - TVedVideoType videoCodec = info->VideoType(); - TVedAudioType audioCodec = info->AudioType(); - - TBool formatOK = ( fileFormat == EVedVideoFormat3GPP ) && - ( videoCodec == EVedVideoTypeH263Profile0Level10 ) && - ( audioCodec == EVedAudioTypeNoAudio || - audioCodec == EVedAudioTypeAMR ); - - if ( formatOK && sizeOK ) - return ECompatible; - - if ( sizeOK || (!sizeOK && !formatOK) ) - { - VCASSERT( !formatOK ); - // check estimated size after conversion - // NOTE: This is checked also for sizeOK, because it's possible - // that size increases in conversion - TInt sizeEstimate = iMovie->GetSizeEstimateL(); - - if ( sizeEstimate <= aMaxSize ) - return EConversionNeeded; - - else - return ECutNeeded; - } - - // size not ok, format ok - VCASSERT( !sizeOK && formatOK ); - - return ECutNeeded; - -} - -// --------------------------------------------------------------------------- -// Get end time estimate on basis of target size and start time -// --------------------------------------------------------------------------- -// -void CVideoConverterImp::GetDurationEstimateL(TInt aTargetSize, TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds& aEndTime) -{ - - iMovie->GetDurationEstimateL(aTargetSize, aStartTime, aEndTime); - -} - -// --------------------------------------------------------------------------- -// Start conversion -// --------------------------------------------------------------------------- -// -void CVideoConverterImp::ConvertL(RFile* aOutputFile, TInt aSizeLimit, - TTimeIntervalMicroSeconds aCutInTime, - TTimeIntervalMicroSeconds aCutOutTime) -{ - - VCASSERT( iMovie && iMovie->VideoClipCount() == 1 ); - - TTimeIntervalMicroSeconds temp = iMovie->VideoClipCutOutTime(0); - - iMovie->VideoClipSetCutInTime(0, aCutInTime); - - if ( aCutOutTime != KVedOriginalDuration ) - iMovie->VideoClipSetCutOutTime(0, aCutOutTime); - - iMovie->SetMovieSizeLimit(aSizeLimit); - - iMovie->ProcessL(aOutputFile, *this); - -} - -// --------------------------------------------------------------------------- -// Cancel conversion -// --------------------------------------------------------------------------- -// -TInt CVideoConverterImp::CancelConversion() -{ - iMovie->CancelProcessing(); - - return KErrNone; -} - -// --------------------------------------------------------------------------- -// Reset to initial state -// --------------------------------------------------------------------------- -// -TInt CVideoConverterImp::Reset() -{ - if (iMovie) - iMovie->Reset(); - - return KErrNone; -} - -// --------------------------------------------------------------------------- -// Implementation of clip added -callback -// --------------------------------------------------------------------------- -// -void CVideoConverterImp::NotifyVideoClipAdded(CVedMovie& /*aMovie*/, TInt /*aIndex*/) -{ - iObserver.MvcoFileInserted(*this); -} - - -// --------------------------------------------------------------------------- -// Implementation of clip adding failed -callback -// --------------------------------------------------------------------------- -// -void CVideoConverterImp::NotifyVideoClipAddingFailed(CVedMovie& /*aMovie*/, TInt aError) -{ - iObserver.MvcoFileInsertionFailed(*this, aError); -} - -// --------------------------------------------------------------------------- -// Implementation of clip movie processing started -callback -// --------------------------------------------------------------------------- -// -void CVideoConverterImp::NotifyMovieProcessingStartedL(CVedMovie& /*aMovie*/) -{ - iObserver.MvcoConversionStartedL(*this); -} - -// --------------------------------------------------------------------------- -// Implementation of clip movie processing progressed -callback -// --------------------------------------------------------------------------- -// -void CVideoConverterImp::NotifyMovieProcessingProgressed(CVedMovie& /*aMovie*/, TInt aPercentage) -{ - iObserver.MvcoConversionProgressed(*this, aPercentage); -} - -// --------------------------------------------------------------------------- -// Implementation of clip movie processing completed -callback -// --------------------------------------------------------------------------- -// -void CVideoConverterImp::NotifyMovieProcessingCompleted(CVedMovie& /*aMovie*/, TInt aError) -{ - iObserver.MvcoConversionCompleted(*this, aError); -} - -void CVideoConverterImp::NotifyVideoClipRemoved(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CVideoConverterImp::NotifyAudioClipAdded(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CVideoConverterImp::NotifyAudioClipAddingFailed(CVedMovie& /*aMovie*/, TInt /*aError*/){} -void CVideoConverterImp::NotifyVideoClipIndicesChanged(CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/){} -void CVideoConverterImp::NotifyVideoClipTimingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CVideoConverterImp::NotifyVideoClipSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CVideoConverterImp::NotifyStartTransitionEffectChanged(CVedMovie& /*aMovie*/){} -void CVideoConverterImp::NotifyMiddleTransitionEffectChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CVideoConverterImp::NotifyEndTransitionEffectChanged(CVedMovie& /*aMovie*/){} -void CVideoConverterImp::NotifyAudioClipRemoved(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CVideoConverterImp::NotifyAudioClipIndicesChanged(CVedMovie& /*aMovie*/, TInt /*aOldIndex*/, TInt /*aNewIndex*/){} -void CVideoConverterImp::NotifyAudioClipTimingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CVideoConverterImp::NotifyMovieReseted(CVedMovie& /*aMovie*/){} -void CVideoConverterImp::NotifyVideoClipGeneratorSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/) {} -void CVideoConverterImp::NotifyMovieOutputParametersChanged(CVedMovie& /*aMovie*/){} -void CVideoConverterImp::NotifyVideoClipColorEffectChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CVideoConverterImp::NotifyVideoClipAudioSettingsChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CVideoConverterImp::NotifyVideoClipDescriptiveNameChanged(CVedMovie& /*aMovie*/, TInt /*aIndex*/){} -void CVideoConverterImp::NotifyMovieQualityChanged(CVedMovie& /*aMovie*/){} -void CVideoConverterImp::NotifyAudioClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){} -void CVideoConverterImp::NotifyAudioClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){} -void CVideoConverterImp::NotifyVideoClipDynamicLevelMarkInserted(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){} -void CVideoConverterImp::NotifyVideoClipDynamicLevelMarkRemoved(CVedMovie& /*aMovie*/, TInt /*aClipIndex*/, TInt /*aMarkIndex*/){} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/Composer.h --- a/videoeditorengine/vedengine/videoprocessor/inc/Composer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,161 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef __COMPOSER_H__ -#define __COMPOSER_H__ - -// INCLUDES -#ifndef __E32BASE_H__ -#include -#endif - -// CONSTANTS -// MACROS -// DATA TYPES -// FUNCTION PROTOTYPES -// FORWARD DECLARATIONS - - -// CLASS DECLARATION - -/** -* Base class for file format parser -* ?other_description_lines -*/ -class CComposer : public CBase - { - - public: // Constants - - enum TErrorCode - { - EInternalAssertionFailure = -2200, - EComposerNotEnoughData = -2201, //FC Can this happen? - EComposerEndOfStream = -2202,//FC Can this happen? - EComposerBufferTooSmall = -2203,//FC Can this happen? - EComposerUnsupportedFormat = -2204,//FC Can this happen? - EComposerStreamCorrupted = -2205,//FC Can this happen? - EComposerFailure = -2206 - }; - - // file format - enum TFileFormat { - EFileFormatUnrecognized = 0, - EFileFormat3GP, - EFileFormatMP4 - }; - - // video format - enum TVideoFormat { - EVideoFormatNone = 0, - EVideoFormatH263Profile0Level10, - EVideoFormatH263Profile0Level45, - EVideoFormatMPEG4, - EVideoFormatAVCProfileBaseline - }; - - // audio format - enum TAudioFormat - { - EAudioFormatNone = 0, - EAudioFormatAMR, - EAudioFormatAAC - }; - - public: // Data structures - - // common stream parameters - struct TStreamParameters - { - TBool iHaveVideo; // is there video in the stream ? - TBool iHaveAudio; // is there audio in the stream ? - TUint iNumDemuxChannels; // number of demux channels - TFileFormat iFileFormat; // file format - TVideoFormat iVideoFormat; // video format - TAudioFormat iAudioFormat; // audio format - - TUint iAudioFramesInSample; // audio frames per one sample (3GPP) - - TUint iVideoWidth; // width of a video frame - TUint iVideoHeight; // height of a video frame - TInt64 iVideoPicturePeriodNsec; // one PCF tick period in nanoseconds - TUint iVideoIntraFrequency; // intra frame frequency in stream - - TUint iStreamLength; // stream length in milliseconds - TUint iVideoLength; - TUint iAudioLength; - - TBool iCanSeek; // TRUE if seeking in file is possible - - TUint iStreamSize; // stream size in bytes - TUint iStreamBitrate; // stream average bitrate - - TUint iMaxPacketSize; // The maximum media packet size - TUint iLogicalChannelNumberVideo; // Logical channel number for video data - TUint iLogicalChannelNumberAudio; // Logical channel number for audio data - TUint iReferencePicturesNeeded; // Number of reference pictures - // the video decoder needs to store. - TUint iNumScalabilityLayers; // The number of different scalability layers used - TUint iLayerFrameRates[8]; // Picture rate for each layer - - TReal iFrameRate; - TInt iVideoTimeScale; - TInt iAudioTimeScale; - - }; - - public: // Constructors and destructor - - public: // New functions - - /** - * Composer the stream header. - * @param aStreamParameters Stream parameters - */ - virtual void ComposeHeaderL(CComposer::TStreamParameters& aStreamParameters, - TInt aOutputVideoTimeScale, TInt aOutputAudioTimeScale, TInt aAudioFramesInSample) = 0; - - virtual TInt Close() = 0; - - virtual TInt WriteFrames(TDesC8& aSrcBuffer, TInt aFrameSize,TInt aDuration, - TInt aKeyFrame,TInt aNumberOfFrames,TInt aFrameType) = 0; - - virtual TInt WriteFrames(TDesC8& aSrcBuffer, TInt aFrameSize,TInt aDuration, - TInt aKeyFrame,TInt aNumberOfFrames,TInt aFrameType, TInt& aMP4Size, - TBool aModeChanged,TBool aFirstFrameOfClip,TInt aMode, TBool aFromEncoder) = 0; - - virtual TUint8* GetComposedBuffer() = 0; //Added for buffer support - - virtual TUint GetComposedBufferSize() = 0; //Added for buffer support - - /** - * Calculate free space on the target output drive in bytes. - * - * @param None - * @return Free space in bytes - */ - virtual TInt64 DriveFreeSpaceL() = 0; - - - }; - -#endif // __PARSER_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/MDFWrapper.h --- a/videoeditorengine/vedengine/videoprocessor/inc/MDFWrapper.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definition file for MSL / MDF data types. -* -*/ - - -#ifndef MDFWRAPPER_H -#define MDFWRAPPER_H - - -// INCLUDES -// Include Symbian MDF header files -#include -#include - -// MACROS -// Redefine Symbian MDF types -typedef CVideoEncoderInfo CDEVVRVideoEncoderInfo; -typedef CMMFDevVideoRecord CDEVVRVideoRecord; -typedef MMMFDevVideoRecordObserver MDEVVRVideoRecordObserver; - -// Cast operation -#define CAST_OPTION(x) *(x) - -// CONSTANTS -// Exact match specifier for searching available plugins -const TBool KCMRMatch = EFalse; - - - - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/Parser.h --- a/videoeditorengine/vedengine/videoprocessor/inc/Parser.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,254 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definition of an abstract base class for file format parsers. -* -*/ - - - -#ifndef __PARSER_H__ -#define __PARSER_H__ - -// INCLUDES -#ifndef __E32BASE_H__ -#include -#endif - -// CONSTANTS -// MACROS -// DATA TYPES -// FUNCTION PROTOTYPES -// FORWARD DECLARATIONS -// CLASS DECLARATION - -/** -* Base class for file format parser -* ?other_description_lines -*/ -class CParser : public CBase -{ - -public: // Constants - - enum TErrorCode - { - EInternalAssertionFailure = -2200, - EParserNotEnoughData = -2201, - EParserEndOfStream = -2202, - EParserBufferTooSmall = -2203, - EParserUnsupportedFormat = -2204, - EParserStreamCorrupted = -2205, - EParserFailure = -2206 - }; - - // file format - enum TFileFormat { - EFileFormatUnrecognized = 0, - EFileFormat3GP, - EFileFormatMP4 - }; - - // video format - enum TVideoFormat { - EVideoFormatNone = 0, - EVideoFormatH263Profile0Level10, - EVideoFormatH263Profile0Level45, - EVideoFormatMPEG4, - EVideoFormatAVCProfileBaseline, - EVideoFormatAVCProfileMain, - EVideoFormatAVCProfileExtended - }; - - // audio format - enum TAudioFormat - { - EAudioFormatNone = 0, - EAudioFormatAMR, - EAudioFormatAAC - }; - -#ifdef __VIDEOEDIT__ - enum TProcessingMode - { - EParseOnly = 1, - EParseAndDecode, - EDecodeOnly - }; -#endif - -public: // Data structures - - // common stream parameters - struct TStreamParameters - { - TBool iHaveVideo; // is there video in the stream ? - TBool iHaveAudio; // is there audio in the stream ? - TUint iNumDemuxChannels; // number of demux channels - TFileFormat iFileFormat; // file format - TVideoFormat iVideoFormat; // video format - TAudioFormat iAudioFormat; // audio format - - TUint iAudioFramesInSample; // audio frames per one sample (3GPP) - - TUint iVideoWidth; // width of a video frame - TUint iVideoHeight; // height of a video frame - TInt64 iVideoPicturePeriodNsec; // one PCF tick period in nanoseconds - TUint iVideoIntraFrequency; // intra frame frequency in stream - - TUint iStreamLength; // stream length in milliseconds - TUint iVideoLength; - TUint iAudioLength; - - TBool iCanSeek; // TRUE if seeking in file is possible - - TUint iStreamSize; // stream size in bytes - TUint iStreamBitrate; // stream average bitrate - - TUint iMaxPacketSize; // The maximum media packet size - TUint iLogicalChannelNumberVideo; // Logical channel number for video data - TUint iLogicalChannelNumberAudio; // Logical channel number for audio data - TUint iReferencePicturesNeeded; // Number of reference pictures - // the video decoder needs to store. - TUint iNumScalabilityLayers; // The number of different scalability layers used - TUint iLayerFrameRates[8]; // Picture rate for each layer - - TReal iFrameRate; - TUint iVideoTimeScale; - TUint iAudioTimeScale; - - }; - - public: // New functions - - /** - * Write a block of data to parser. - * @param aBlock Block to be written. - */ - virtual TInt WriteDataBlock(const TDes8& aBlock) = 0; - - /** - * Parses the stream header. - * @param aStreamParameters Stream parameters - */ - - virtual TInt ParseHeaderL(TStreamParameters& aStreamParameters) = 0; - - /** - * Resets the parser to initial state. - * => If input stream is in a file, rewinds it. - * => If input is written to parser, all buffered bytes are flushed - * @param aStreamParameters Stream parameters - */ - virtual TInt Reset() = 0; - - /** - * Gets the number of frames in the current clip - * - * @return Number of frames - */ - inline TInt GetNumberOfFramesInClip() { return iNumberOfFrames; } - - virtual TInt GetNumberOfVideoFrames() = 0; - - virtual TInt GetNumberOfFrames() = 0; - - /** - * Seeks to intra frame before given time - * - * @param aStartTime Time in microseconds to seek - * @param aIndex Index of the frame at aStartTime, if known. 0 otherwise - * - * @return Number of frames - */ - virtual TInt SeekOptimalIntraFrame(TTimeIntervalMicroSeconds aStartTime, TInt aIndex, TBool aFirstTime) = 0; - - /** - * Gets the size of video frame at given index - * - * @param aIndex Index of the frame - * - * @return Size of frame in bytes - */ - virtual TInt GetVideoFrameSize(TInt aIndex) = 0; - - /** - * Gets the timestamp of video frame at given index - * - * @param aIndex Index of the frame - * @param aTimeStamp Output: timestamp in ticks - * - * @return Timestamp in milliseconds - */ - virtual TInt GetVideoFrameStartTime(TInt aIndex, TInt* aTimeStampInTicks) = 0; - - /** - * Gets the type of video frame at given index - * - * @param aIndex Index of the frame - * - * @return Frame type: 1 = INTRA, 0 = INTER - */ - virtual TInt8 GetVideoFrameType(TInt aIndex) = 0; - - /** - * Gets the start frame index of the current clip - * - * @return Frame index - */ - inline TInt GetStartFrameIndex() { return iStartFrameIndex; } - - /** - * From CParser Parser the stream header. - * @param aAudioFrameSize average frame size of audio frame - */ - virtual TInt ParseAudioInfo(TInt& aAudioFrameSize) = 0; - - virtual TInt GetMP4SpecificSize() = 0; //Added for Mpeg-4 Support - - virtual TInt GetAudioBitrate(TInt& aBitrate) = 0; - - virtual TInt GetVideoFrameRate(TReal& aFrameRate) = 0; - - virtual TInt GetDecoderSpecificInfoSize() = 0; - - virtual TInt ReadAVCDecoderSpecificInfo(TDes8& aBuf) = 0; - - virtual TInt GetVideoDuration(TInt& aDurationInMs) = 0; - - - public: // Data - - // stream parameters - TStreamParameters iStreamParameters; - // ETrue if parsing this clip for the first time - TBool iFirstTimeClipParsing; - // number of frames in output clip - TInt iOutputNumberOfFrames; - - protected: // Data - - // current frame number - TInt iFrameNumber; - // number of frames in current clip - TInt iNumberOfFrames; - // index of the first included frame - TInt iStartFrameIndex; - - }; - -#endif // __PARSER_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/SizeEstimate.h --- a/videoeditorengine/vedengine/videoprocessor/inc/SizeEstimate.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,184 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for size estimate. -* -*/ - - -#ifndef __SIZEESTIMATE_H__ -#define __SIZEESTIMATE_H__ - -#include - - -// FORWARD DECLARATIONS -class CMovieProcessorImpl; -class CVedMovie; -class CVedMovieImp; -class CVedVideoClip; - - - -// CONSTANTS - -const TInt KSEFixedSize = 148; -const TReal KSEBWReductionFactor = 0.04; -const TInt KSELowBitrateLimit = 128000; -const TInt KSELowBitrateIncrement = 4000; -const TInt KSEHighBitrateLimit = 1024000; -const TInt KSEBlackFrameDuration = 1000000; -const TInt KSEMaxFrameDuration = 1001000; -const TInt KSEFadeTransitionFrames = 10; -const TInt KSEWipeTransitionFrames = 5; -const TInt KSEGeneratedIFrameFactorMPEG4 = 180; -const TInt KSEGeneratedPFrameFactorMPEG4 = 6; -const TInt KSEGeneratedIFrameFactorH264 = 400; -const TInt KSEGeneratedPFrameFactorH264 = 11; -const TInt KSEGeneratedIFrameFactorH263 = 212; -const TInt KSEGeneratedPFrameFactorH263 = 35; -const TInt KSEBlackIFrameFactor = 25; -const TInt KSEBlackPFrameFactor = 3; -const TInt KSEVideo3gpSizePerFrame1 = 40; -const TInt KSEVideo3gpSizePerFrame2 = 25; -const TInt KSEVideo3gpSizePerFrame3 = 15; -const TInt KSEVideo3gpSizePerFrame4 = 13; -const TInt KSEVideo3gpSizePerFrame5 = 12; -const TInt KSEVideo3gpSizePerFrame6 = 11; -const TInt KSEVideo3gpFramesLimit1 = 50; -const TInt KSEVideo3gpFramesLimit2 = 75; -const TInt KSEVideo3gpFramesLimit3 = 100; -const TInt KSEVideo3gpFramesLimit4 = 200; -const TInt KSEVideo3gpFramesLimit5 = 300; -const TReal KSEAudio3gpSizePerSample1 = 15.0; -const TReal KSEAudio3gpSizePerSample2 = 11.2; -const TReal KSEAudio3gpSizePerSample3 = 9.8; -const TReal KSEAudio3gpSizePerSample4 = 9.2; -const TReal KSEAudio3gpSizePerSample5 = 9.0; -const TReal KSEAudio3gpSizePerSample6 = 8.8; -const TReal KSEAudio3gpSizePerSample7 = 8.6; -const TReal KSEAudio3gpSizePerSample8 = 8.4; -const TReal KSEAudio3gpSamplesLimit1 = 200.0; -const TReal KSEAudio3gpSamplesLimit2 = 300.0; -const TReal KSEAudio3gpSamplesLimit3 = 400.0; -const TReal KSEAudio3gpSamplesLimit4 = 500.0; -const TReal KSEAudio3gpSamplesLimit5 = 800.0; -const TReal KSEAudio3gpSamplesLimit6 = 1600.0; -const TReal KSEAudio3gpSamplesLimit7 = 2000.0; - - - -// CLASS DEFINITIONS -class CSizeEstimate : public CBase -{ -public: // New functions - - /* Constructors. */ - static CSizeEstimate* NewL(CMovieProcessorImpl* aProcessor); - static CSizeEstimate* NewLC(CMovieProcessorImpl* aProcessor); - - /* Destructor. */ - virtual ~CSizeEstimate(); - - /** - * Calculate movie size estimate - * - * @param aMovie Movie object - * @param aFileSize Size estimate in bytes - * @return Error code - */ - TInt GetMovieSizeEstimateL(const CVedMovie* aMovie, TInt& aFileSize); - - /** - * Calculate movie size estimate for MMS - * - * @param aMovie Movie object - * @param aTargetSize Maximum size allowed - * @param aStartTime Time of the first frame included in the MMS output - * @param aEndTime Time of the last frame included in the MMS output - * @return Error code - */ - TInt GetMovieSizeEstimateForMMSL(const CVedMovie* aMovie, TInt aTargetSize, - TTimeIntervalMicroSeconds aStartTime, TTimeIntervalMicroSeconds& aEndTime); - - -private: // Private methods - - /** - * By default Symbian OS constructor is private. - */ - void ConstructL(); - - /** - * c++ default constructor - */ - CSizeEstimate(CMovieProcessorImpl* aProcessor); - - /** - * Returns the number of start and end transition frames in given clip - * - * @param aMovie Movie object - * @param aIndex Index of the clip in the movie - * @param aStartTransitionFrames (out) Number of start transition frames - * @param aEndTransitionFrames (out Number of end transition frames - */ - void GetTransitionFrames(const CVedMovieImp *aMovie, TInt aIndex, - TInt& aStartTransitionFrames, TInt& aEndTransitionFrames); - - /** - * Estimates the average generated frame size - * - * @param aMovie Movie object - * @param aIntra ETrue if the frame is intra - * @return Generated frame size in bytes - */ - TInt GetGeneratedFrameSize(const CVedMovieImp *aMovie, TBool aIntra); - - /** - * Estimates the average black frame size - * - * @param aMovie Movie object - * @param aIntra ETrue if the frame is intra - * @return Black frame size in bytes - */ - TInt GetBlackFrameSize(const CVedMovieImp *aMovie, TBool aIntra); - - /** - * Returns the 3gp size for video based on number of video frames - * - * @param aNumberOfVideoFrames The amount of frames in the video - * @return 3gp size per frame for video - */ - TInt GetVideo3gpSizePerFrame(TInt aNumberOfVideoFrames); - - /** - * Returns the 3gp size for audio based on number of audio samples - * - * @param aNumberOfAudioSamples The amount of samples in the audio - * @return 3gp size per sample for audio - */ - TReal GetAudio3gpSizePerSample(TReal aNumberOfAudioSamples); - -private: // Data - - // handle to the processor instance - CMovieProcessorImpl* iProcessor; - -}; - - -#endif // __SIZEESTIMATE_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/VedRgb2YuvConverter.h --- a/videoeditorengine/vedengine/videoprocessor/inc/VedRgb2YuvConverter.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,130 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef VIDEOEDITORTESTIMAGECONVERTER_H -#define VIDEOEDITORTESTIMAGECONVERTER_H - -// INCLUDE FILES -#include -#include - -// CLASS FORWARDS -class CFbsBitmap; - -// TYPEDEFS -typedef TRgb ( *TVSColorReadFunc ) ( TAny*& ); - -/** -* ?one_line_short_description. -* ?other_description_lines -* -* @lib ?library -* @since ?Series60_version -*/ -class CVSFbsBitmapYUV420Converter : public CBase - { - public: - /** - * ?member_description. - * @since ?Series60_version - * @param ?arg1 ?description - * @return ?description - */ - static CVSFbsBitmapYUV420Converter* NewL( const CFbsBitmap& aBitmap ); - - /** - * ?member_description. - * @since ?Series60_version - * @param ?arg1 ?description - * @return ?description - */ - ~CVSFbsBitmapYUV420Converter(); - - /** - * ?member_description. - * @since ?Series60_version - * @param ?arg1 ?description - * @return ?description - */ - void SetSourceL( const CFbsBitmap& aBitmap ); - - /** - * ?member_description. - * @since ?Series60_version - * @param ?arg1 ?description - * @return ?description - */ - void ProcessL(); - - /** - * ?member_description. - * @since ?Series60_version - * @param ?arg1 ?description - * @return ?description - */ - TPtrC8 YUVData() const; - - private: // internal - /** - * ?member_description. - * @since ?Series60_version - * @param ?arg1 ?description - * @return ?description - */ - void ConstructL( const CFbsBitmap& aBitmap ); - - /** - * ?member_description. - * @since ?Series60_version - * @param ?arg1 ?description - * @return ?description - */ - void ReConstructL( const CFbsBitmap& aBitmap ); - - /** - * ?member_description. - * @since ?Series60_version - * @param ?arg1 ?description - * @return ?description - */ - void DoProcess( TVSColorReadFunc aReadFunction ); - - private: - // ?one_line_short_description_of_data - TSize iSize; - - // ?one_line_short_description_of_data - CFbsBitmap* iSource; // owned, duplicate - - // ?one_line_short_description_of_data - HBufC8* iYUVData; // owned - - // ?one_line_short_description_of_data - TPtrC8 iY; - - // ?one_line_short_description_of_data - TPtrC8 iU; - - // ?one_line_short_description_of_data - TPtrC8 iV; - }; - -#endif // CVTIMAGECONVERTER_H - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/VideoEncoder.h --- a/videoeditorengine/vedengine/videoprocessor/inc/VideoEncoder.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,401 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for video encoder class. -* -*/ - - -#ifndef VIDEOENCODER_H -#define VIDEOENCODER_H - -// INCLUDES - -#include -#include "CTRTranscoderObserver.h" -#include "CTRTranscoder.h" -#include "CTRCommon.h" -#include "CTRVideoPictureSink.h" -#include "Vedcommon.h" - -// FORWARD DECLARATIONS - -class CStatusMonitor; -class CVedVolReader; -class CVedAVCEdit; - -class CVideoEncoder : public CActive, public MTRTranscoderObserver, - public MCMRMediaSink, public MTRVideoPictureSink - { - - public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CVideoEncoder* NewL(CStatusMonitor *aMonitor, CVedAVCEdit* aAvcEdit, - const TPtrC8& aVideoMimeType); - - /** - * Destructor. - */ - - ~CVideoEncoder(); - - public: // Constants - - enum TErrorCode - { - EInternalAssertionFailure = -10030, - }; - - public: // Functions from base classes - - /** - * From CActive Active object running method - */ - void RunL(); - - /** - * From CActive Active object error method - */ - TInt RunError(TInt aError); - - /** - * From CActive Active object cancelling method - */ - void DoCancel(); - - /** - * From MTRTranscoderObserver - */ - void MtroInitializeComplete(TInt aError); - - /** - * From MTRTranscoderObserver - */ - void MtroFatalError(TInt aError); - - /** - * From MTRTranscoderObserver - */ - void MtroReturnCodedBuffer(CCMRMediaBuffer* aBuffer); - - /** - * From MTRTranscoderObserver - */ - void MtroSetInputFrameRate(TReal& aRate); - - /** - * From MTRTranscoderObserver - */ - void MtroAsyncStopComplete(); - - /** - * From MTRTranscoderObserver - */ - inline void MtroSuspend() { }; - - /** - * From MTRTranscoderObserver - */ - inline void MtroResume() { }; - - /** - * From MCMRMediaSink - */ - void WriteBufferL(CCMRMediaBuffer* aBuffer); - - /** - * From MCMRMediaSink - */ - TInt SetVideoFrameSize(TSize aSize); - - /** - * From MCMRMediaSink - */ - TInt SetAverageVideoBitRate(TInt aBitRate); - - /** - * From MCMRMediaSink - */ - TInt SetMaxVideoBitRate(TInt aBitRate); - - /** - * From MCMRMediaSink - */ - TInt SetAverageAudioBitRate(TInt aBitRate); - - /** - * From MTRVideoPictureSink - */ - void MtroPictureFromTranscoder(TTRVideoPicture* aPicture); - - public: // New functions - - /** - * Sets the used frame size - * - * @param aSize Frame size - * @return Error codew - */ - void SetFrameSizeL(const TSize& aSize); - - /** - * Gets the current frame size - * - * @param aSize Frame size - * @return void - */ - void FrameSize(TSize& aSize) const; - - /** - * Sets the target frame rate - * - * @param aFrameRate frame rate - * @return Error code - */ - TInt SetFrameRate(const TReal aFrameRate); - - /** - * Sets the frame rate of input sequence - * - * @param aFrameRate frame rate - * @return Error code - */ - TInt SetInputFrameRate(const TReal aFrameRate); - - /** - * Sets the target random access rate - * - * @param aRate random access rate - * @return Error code - */ - TInt SetRandomAccessRate(const TReal aRate); - - /** - * Sets the target bitrate - * - * @param aBitrate Bitrate - * @return Error code - */ - TInt SetBitrate(const TInt aBitrate); - - /** - * Initializes the encoder - * - * @param aStatus Status object for active object - * @return void - */ - void InitializeL(TRequestStatus &aStatus); - - /** - * Encodes a frame - * - * @param aYUVFrame Frame to be encoded - * @param aStatus Status object for active object - * @param Timestamp of the frame - * @return void - */ - void EncodeFrameL(TPtr8 &aYUVFrame, TRequestStatus &aStatus, TTimeIntervalMicroSeconds aTimeStamp); - - /** - * Gets the encoded bitstream - * - * @param aKeyFrame Keyframe flag, True if the frame is Intra - * @return Descriptor containing the output bitstream - */ - TPtrC8& GetBufferL(TBool& aKeyFrame); - - /** - * Return used bitstream buffer - * - * @return void - */ - void ReturnBuffer(); - - /** - * Starts the encoder - * - * @return void - */ - void Start(); - - /** - * Stops the encoder - * - * @return void - */ - void Stop(); - - /** - * Resets the encoder - * - * @param aStatus Status object for active object - * @return void - */ - void Reset(TRequestStatus &aStatus); - - /** - * Resets the encoder synchronously - * - * @return void - */ - void Reset(); - - /** - * Gets status of whether encoding has been started - * - * @return ETrue if encoding has been started - */ - inline TBool BeenStarted() const { return iStarted; } - - /** - * Gets status of whether encoding request is pending - * - * @return ETrue if encode is pending - */ - inline TBool IsEncodePending() const { return iEncodePending; } - - /** - * Gets time increment resolution used in MPEG-4 - * - * @return Time increment resolution - */ - TInt GetTimeIncrementResolution() const; - - /** - * Forces the next encoded frame to be Intra - * - */ - void SetRandomAccessPoint(); - - private: - - /** - * C++ default constructor. - */ - CVideoEncoder(); - - /** - * By default EPOC constructor is private. - */ - void ConstructL(CStatusMonitor *aMonitor, CVedAVCEdit* aAvcEdit, - const TPtrC8& aVideoMimeType); - - /** - * Interpret and store video codec MIME-type, used by ConstructL - * @return void - */ - void SetVideoCodecL(const TPtrC8& aMimeType); - - /** - * Set encoding options - * @return void - */ - void SetupEncoderL(); - - /** - * Parses and writes codec specific information, i.e - * MPEG-4 VOL header and AVC decoder configuration record - * @return void - */ - void HandleCodingStandardSpecificInfoL(); - - private: // Data - - // Transcoder - CTRTranscoder* iTranscoder; - - // is encode pending ? - TBool iEncodePending; - - // has encoding been started ? - TBool iStarted; - - // used & max frame size, and info if size can be arbitrary - TSize iFrameSize; - TSize iMaxResolution; - TBool iArbitrarySizeAllowed; - - // target and max allowed frame rate - TReal32 iFrameRate; - TReal32 iMaxFrameRate; - - // input frame rate - TReal32 iInputFrameRate; - - // target random access rate - TReal iRandomAccessRate; - - // target and max allowed bit rate - TInt iBitRate; - TInt iMaxBitRate; - - // Mime type for encoded data - TBuf8<256> iMimeType; - - // input picture - TTRVideoPicture* iInputPicture; - - // bitstream buffer - HBufC8* iDataBuffer; - - // keyframe flag for bitstream buffer - TBool iKeyFrame; - - TPtrC8 iReturnDes; - - // External status info - TRequestStatus *iResetRequestStatus; - - TRequestStatus *iEncodeRequestStatus; - - TTimeIntervalMicroSeconds iPreviousTimeStamp; - - // MPEG-4 time increment resolution - TInt iTimeIncrementResolution; - - // input YUV data - TPtr8 iInputBuffer; - - // status monitor object - CStatusMonitor *iMonitor; - - // video object layer reader - CVedVolReader *iVolReader; - - RTimer iTimer; // timer object - TBool iTimerCreated; - TBool iTimerRequestPending; - - // Timer timeout, depends on codec and resolution - TUint iMaxEncodingDelay; - - // flag to check if devvideorec methods can be called or not; they can't be called after a fatal error - TBool iFatalError; - -#ifdef _DEBUG - TTime iEncodeStartTime; -#endif - - // AVC editing module - CVedAVCEdit* iAvcEdit; - - }; - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/VideoProcessorAudioData.h --- a/videoeditorengine/vedengine/videoprocessor/inc/VideoProcessorAudioData.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -/* Copyright (c) 2003, Nokia. All rights reserved. */ - -#ifndef __VIDEOPROCESSORAUDIODATA_H__ -#define __VIDEOPROCESSORAUDIODATA_H__ - - -#include - - -enum TVideoProcessorAudioType - { - EVideoProcessorAudioTypeSilence, - EVideoProcessorAudioTypeOriginal, - EVideoProcessorAudioTypeExternal - }; - - -class TVideoProcessorAudioData - { -public: - TTimeIntervalMicroSeconds iStartTime; - TVideoProcessorAudioType iType; - CVedAudioClip* iClip; - }; - - -#endif // __VIDEOPROCESSORAUDIODATA_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/Yuv2rgb16.h --- a/videoeditorengine/vedengine/videoprocessor/inc/Yuv2rgb16.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* YUV to EColor64K colorspace converter concrete classes. -* -*/ - - -#ifndef __YUV2RGB16_H__ -#define __YUV2RGB16_H__ - -// INCLUDES - -#ifndef __YUVCONVERTER_H__ -#include "yuvconverter.h" -#endif - -// CLASS DEFINITIONS - -class CYuv2Rgb16 : public CYuvConverter -{ -public: // CYuvConverter methods - // Constructors & destructor - CYuv2Rgb16(); - ~CYuv2Rgb16(); - void ConstructL(TUint aWidth, TUint aHeight, TUint aMaxWidth, TUint aMaxHeight); - - void Convert(const TUint8 *aYBuf, const TUint8 *aUBuf, - const TUint8 *aVBuf, - TUint aBufWidth, TUint aBufHeight, - TUint8 *aTarget, TUint aTargetScanlineLength); - - void SetGamma(TInt /*aGamma*/) {}; - -protected: // Data - - TUint iWidth, iHeight; - -}; - - -// The fixed point constants for YUV -> RGB conversion -const TInt KYMult = 296; -const TInt KCrToR = 408; -const TInt KCbToG = 96; -const TInt KCrToG = 204; -const TInt KCbToB = 520; - -// ----------------------------------------------------------------------------- -// UvToRDiff -// Calculate the red color difference from Cr by using fixed point values. -// ----------------------------------------------------------------------------- -// -inline TInt UvToRDiff( - TInt aCr, - TInt /*aCb*/) - { - return (KCrToR * aCr) / 256; - } - -// ----------------------------------------------------------------------------- -// UvToGDiff -// Calculate the green color difference from Cr and Cb components -// by using fixed point values. -// ----------------------------------------------------------------------------- -// -inline TInt UvToGDiff( - TInt aCr, - TInt aCb) - { - return (KCbToG * aCb + KCrToG * aCr) / 256; - } - -// ----------------------------------------------------------------------------- -// UvToBDiff -// Calculate the blue color difference from Cb by using fixed point values. -// ----------------------------------------------------------------------------- -// -inline TInt UvToBDiff( - TInt /*aCr*/, - TInt aCb) - { - return (KCbToB * aCb) / 256; - } - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/activequeue.h --- a/videoeditorengine/vedengine/videoprocessor/inc/activequeue.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Data buffering and queuing support definitions, class CActiveQueue. -* -*/ - - -#ifndef __ACTIVEQUEUE_H__ -#define __ACTIVEQUEUE_H__ - - -// INCLUDES - -#ifndef __E32BASE_H__ -#include -#endif - - -// FORWARD DECLARATIONS - -class CDataProcessor; -class CActiveQueue; - - -//#define BLOCK_GUARD_AREA - - -// CLASS DEFINITIONS - -// Queue block class -class TActiveQueueBlock : public TPtr8 -{ - TActiveQueueBlock(TUint8 *aBuf, TInt aMaxLength) : TPtr8(aBuf, aMaxLength) {}; -protected: - friend class CActiveQueue; - TActiveQueueBlock *iNextBlock; // next block in the allocated block list - TActiveQueueBlock *iPrevBlock; // prev. block in the allocated block list - TActiveQueueBlock *iNextList; // next block in the data queue / free list -}; - -// The queue class -class CActiveQueue : public CBase -{ -public: // constants - enum TErrorCode - { - EInternalAssertionFailure = -1000, - ENoWriter = -1001, - ENoReader = -1002, - EWriteAfterStreamEnd = -1003 - }; - -public: // interface functions - // Constructors and destructor - CActiveQueue(TUint aNumberOfBlocks, TUint aBlockLength); - ~CActiveQueue(); - void ConstructL(); - - // Set/remove reader - void SetReader(CDataProcessor *aReader, TAny *aUserPointer); - void RemoveReader(); - - // Set/remove writer - void SetWriter(CDataProcessor *aWriter, TAny *aUserPointer); - void RemoveWriter(); - - void ResetStreamEnd(); - - // Get the number of free blocks available for new data - TUint NumFreeBlocks(); - - // Get the number of blocks with data queued - TUint NumDataBlocks(); - - // Get a free block for writing data into the queue (writer) - TPtr8 *GetFreeBlockL(TUint aBlockLength); - - // Add a data block to the queue (writer) - void WriteBlock(TPtr8 *aBlock); - - // Read a data block from the queue (reader) - TPtr8 *ReadBlock(); - - // Return a read block back to the empty block list (reader) - void ReturnBlock(TPtr8 *aBlock); - - // Notify that the stream has ended (writer) - void WriteStreamEnd(); - - // Check if the writer has notified that the stream has ended (reader) - TBool StreamEnded(); - - // Testing aid: get total number of blocks - TUint NumBlocks() { return iNumBlocks; }; - - -private: // Internal methods - TActiveQueueBlock *AllocateBlockL(); - void FreeBlockL(TActiveQueueBlock *aBlock); - -private: // Data - TUint iNewBlockLength; // length of new blocks that are allocated - TUint iInitialBlocks; // initial number of blocks to allocate - - CDataProcessor *iReader; // the reader - TAny *iReaderUserPointer; - CDataProcessor *iWriter; // the writer - TAny *iWriterUserPointer; - - TActiveQueueBlock *iBlocks; // the list of all allocated blocks - TUint iNumBlocks; // total number of blocks - TActiveQueueBlock *iFreeList; // the free block list - TUint iNumFreeBlocks; // number of free blocks - TActiveQueueBlock *iDataQueueHead; // the data queue head (where blocks are - // read from) - TActiveQueueBlock *iDataQueueTail; // the data queue tail (where blocks are - // written to - TUint iNumDataBlocks; // number of data blocks - - TBool iStreamEnd; // has the stream ended? -}; - - -#endif // __ACTIVEQUEUE_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/audioprocessor.h --- a/videoeditorengine/vedengine/videoprocessor/inc/audioprocessor.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Audio processor class. -* -*/ - - -#ifndef __AUDIOPROCESSOR_H__ -#define __AUDIOPROCESSOR_H__ - -#ifndef __E32BASE_H__ -#include -#endif - -class CMovieProcessorImpl; -class CAudSong; - -/** - * Audio processor. - */ -class CAudioProcessor : public CActive - { -public: // Constructors and destructor - - /** - * Two-phased constructor - */ - - static CAudioProcessor* NewL(CMovieProcessorImpl *aMovieProcessor, CAudSong* aSong); - static CAudioProcessor* NewLC(CMovieProcessorImpl *aMovieProcessor, CAudSong* aSong); - - /** - * Destructor. - */ - - virtual ~CAudioProcessor(); - -public: // Functions from base classes - - /** - * From CActive Active object cancelling method - */ - void DoCancel(); - - /** - * From CActive Active object running method - */ - void RunL(); - - /** - * From CActive Active object error method - */ - TInt RunError(TInt aError); - -public: // New functions - - /** - * Starts audio processing - */ - void StartL(); - - /** - * Stops audio processing - */ - void StopL(); - -private: - - /** - * Constructor - */ - CAudioProcessor(CMovieProcessorImpl *aMovieProcessor, CAudSong* aSong); - - /** - * By default EPOC constructor is private. - */ - void ConstructL(); - - /** - * Process a number of audio frames - */ - void ProcessFramesL(); - -private: // Data - - // movie processor instance - CMovieProcessorImpl* iMovieProcessor; - - // song - CAudSong* iSong; - - TBool iProcessing; - - }; - - -#endif - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/brightnesscontrast.h --- a/videoeditorengine/vedengine/videoprocessor/inc/brightnesscontrast.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Const parameters for brightness/constrast enhancement -* The tuning has 9 steps, each represented by 3 parameters. -* The smaller indices in the table generate "lighter" pictures. -* -*/ - - -#ifndef __BRIGHTNESSCONTRAST_H__ -#define __BRIGHTNESSCONTRAST_H__ - - -const TInt KMinBrightnessContrastIndex = 0; -const TInt KMedBrightnessContrastIndex = 10; -const TInt KMaxBrightnessContrastIndex = 20; - -const TInt KMaxBCInputIndex = 100; - -struct SEnhParam { - TReal a; - TReal b; - TReal g; -}; - -const struct SEnhParam KBrightnessContrastEnhParam[21] = { - {2.35, -0.1215, 0.5}, - {2.17, -0.0936, 0.55}, - {2, -0.07, 0.6}, - {1.84, -0.0504, 0.65}, - {1.69, -0.0345, 0.7}, - {1.55, -0.022, 0.75}, - {1.42, -0.0126, 0.8}, - {1.3, -0.006, 0.85}, - {1.19, -0.0019, 0.9}, - {1.09, 0, 0.95}, - {1, 0, 1}, - {1.04, -0.04, 1.05}, - {1.09, -0.0891, 1.1}, - {1.15, -0.147, 1.15}, - {1.22, -0.2134, 1.2}, - {1.3, -0.288, 1.25}, - {1.39, -0.3705, 1.3}, - {1.49, -0.4606, 1.35}, - {1.6, -0.558, 1.4}, - {1.72, -0.6624, 1.45}, - {1.85, -0.7735, 1.5} -}; - -#endif // __BRIGHTNESSCONTRAST_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/dataprocessor.h --- a/videoeditorengine/vedengine/videoprocessor/inc/dataprocessor.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definition for CDataProcessor, the data processing object abstract -* base class. -* -*/ - - - -#ifndef __DATAPROCESSOR_H__ -#define __DATAPROCESSOR_H__ - - -// INCLUDES - -#ifndef __E32BASE_H__ -#include -#endif - - -// FORWARD DECLARATIONS - -//class MVideoPlayerObserver; - - -// CLASS DEFINITIONS - -class CDataProcessor : public CActive -{ -public: // constants - enum TErrorCode - { - EInternalAssertionFailure = -1100 - }; - -public: // new functions - // Constructors - CDataProcessor(TInt aPriority=EPriorityStandard); - void ConstructL(); - - // Destructor - virtual ~CDataProcessor(); - - // Called by CActiveQueue when input data is available - virtual void InputDataAvailable(TAny *aUserPointer); - - // Called by CActiveQueue when output space is available - virtual void OutputSpaceAvailable(TAny *aUserPointer); - - // Called by CActiveQeueue after all data has been read from a queue where - // stream end has been signaled - virtual void StreamEndReached(TAny *aUserPointer); - - // Standard active object RunL() method, overridden by derived class - virtual void RunL() = 0; - - // Cancels the internal request - virtual void DoCancel(); -}; - - - -#endif // __DATAPROCESSOR_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/decoder.h --- a/videoeditorengine/vedengine/videoprocessor/inc/decoder.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definition for CDecoder, an abstract base class for all decoders. -* -*/ - - - - -#ifndef __DECODER_H__ -#define __DECODER_H__ - - -// INCLUDES - -#ifndef __DATAPROCESSOR_H__ -#include "dataprocessor.h" -#endif - - -// CLASS DEFINITIONS - -// Decoder base class -class CDecoder : public CDataProcessor -{ -public: - CDecoder(TInt aPriority=EPriorityStandard) : CDataProcessor(aPriority) {}; - // CDataProcessor provides a virtual destructor - - // Start/stop decoding - virtual void Start() = 0; - virtual void Stop() = 0; -}; - - -#endif // __DECODER_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/demultiplexer.h --- a/videoeditorengine/vedengine/videoprocessor/inc/demultiplexer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definition for CDemultiplexer, an abstract base class for all -* demultiplexers. -* -*/ - - -#ifndef __DEMULTIPLEXER_H__ -#define __DEMULTIPLEXER_H__ - - -// INCLUDES - -#ifndef __DATAPROCESSOR_H__ -#include "dataprocessor.h" -#endif - - -// CLASS DEFINITIONS - -// Demultiplexer base class -class CDemultiplexer : public CDataProcessor -{ -public: - CDemultiplexer(TInt aPriority=EPriorityStandard) : CDataProcessor(aPriority) {}; - // CDataProcessor provides a virtual destructor - - // Start/stop demuxing - virtual void Start() = 0; - virtual void Stop() = 0; -}; - - -#endif // __DEMULTIPLEXER_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/epoclib.h --- a/videoeditorengine/vedengine/videoprocessor/inc/epoclib.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for epoclib.cpp. -* -*/ - - -#ifndef _EPOC_LIB -#define _EPOC_LIB - -#include -#include -#include "nrctyp32.h" - -#ifdef _DEBUG -#define MALLOC_DEBUG -#endif - -#define EPOCLIB_DS - -//#define FILE RFile -#define void TAny - -//specific to this program -//#define HANDLE void * - -#ifndef _SIZE_T_DEFINED -typedef unsigned int size_t; -#endif //_SIZE_T_DEFINED - -#define max(a,b) (((a) > (b)) ? (a) : (b)) -#define min(a,b) (((a) < (b)) ? (a) : (b)) - -#define abs Abs -#define labs Abs - - -EPOCLIB_DS void free(TAny *ptr); - -#ifdef MALLOC_DEBUG -#define malloc(size) debugMalloc(size, __FILE__, __LINE__) -EPOCLIB_DS TAny *debugMalloc(u_int32 size, char *file, int line); -#else -EPOCLIB_DS TAny *malloc(u_int32 size); -#endif -EPOCLIB_DS TAny *realloc(void *memblock, u_int32 size); -#ifdef MALLOC_DEBUG -#define calloc(num, size) debugCalloc(num, size, __FILE__, __LINE__) -EPOCLIB_DS TAny *debugCalloc(u_int32 num, u_int32 size, char *file, int line); -#else -EPOCLIB_DS TAny *calloc(u_int32 num, u_int32 size); -#endif -EPOCLIB_DS TAny *memset(TAny *dest, TInt c, u_int32 size); -EPOCLIB_DS TAny *memcpy(TAny *dest, const TAny *src, u_int32 size); -EPOCLIB_DS TAny *memmove(TAny *dest, const TAny *src, u_int32 count); - -#define assert(expr) __ASSERT_DEBUG(expr, User::Panic(_L("assert"), 1)); -EPOCLIB_DS int atoi(const char *nptr); - - -EPOCLIB_DS u_int32 fwrite(const TAny *buffer, u_int32 size, u_int32 count, RFile stream); - -#endif - - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/gettime.h --- a/videoeditorengine/vedengine/videoprocessor/inc/gettime.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for gettime.cpp. -* -*/ - -#ifndef _GETTIME_H_ -#define _GETTIME_H_ - - -/* - * Includes - */ - -#include "nrctyp32.h" -#include "thdwrap.h" - - -/* - * Definitions - */ - -/* Number of output ticks (from gtGetTime) per second */ -#ifndef GT_NUM_OUT_TICKS_PER_SEC - #define GT_NUM_OUT_TICKS_PER_SEC 10000 -#endif - -/* Maximum value returned by gtGetTime */ -#define GT_TIME_MAX 0xffffffff - -/* If TMR_DS not defined, define it as nothing */ -#ifndef TMR_DS -#ifdef __PSISOFT32__ - #define TMR_DS -#else - #define TMR_DS -#endif -#endif - -/* - * Function prototypes - */ - - -TMR_DS void gtInitialize( void ); - -//TMR_DS TInt gtGetTime( array_t *array ); -TMR_DS unsigned int gtGetTime( void ); - - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/movieprocessor.h --- a/videoeditorengine/vedengine/videoprocessor/inc/movieprocessor.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,248 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Movie processor interface class. -* -*/ - - - -#ifndef __MOVIEPROCESSOR_H__ -#define __MOVIEPROCESSOR_H__ - - -#include -#include -#include - -#include "VedCommon.h" - -/* - * Forward declarations. - */ - -class CVedMovie; -class CVedMovieImp; -class CVedAudioClip; -class TVedVideoFrameInfo; -class TVideoProcessorAudioData; -class CMovieProcessorImpl; - -class MVedMovieProcessingObserver; - -/** - * Movie processor. - */ -class CMovieProcessor : public CBase - { -public: - - /** - * Constructors for instantiating new movie processors. - * Should reserve as little resources as possible at this point. - */ - static CMovieProcessor* NewL(); - static CMovieProcessor* NewLC(); - - /** - * Destructor can be called at any time (i.e., also in the middle of a processing operation). - * Should release all allocated resources, including releasing all allocated memory and - * *deleting* all output files that are currently being processed but not yet completed. - */ - virtual ~CMovieProcessor(); - - /** - * Read the header from the specified video clip file and return its properties. - * The file should be opened with EFileShareReadersOnly share mode. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - * @param aFileName name of the file to read - * @aFileHandle handle of the file to read - * @param aVideoFormat for returning the video format - * @param aVideoType for returning the video type - * @param aResolution for returning the resolution - * @param aAudioType for returning the audio type - * @param aDuration for returning the duration - * @param aVideoFrameCount for returning the number of video frames - * @param aSamplingRate for returning the sampling rate - * @param aChannelMode for returning the channel mode - */ - void GetVideoClipPropertiesL(const TDesC& aFileName, - RFile* aFileHandle, - TVedVideoFormat& aFormat, - TVedVideoType& aVideoType, - TSize& aResolution, - TVedAudioType& aAudioType, - TTimeIntervalMicroSeconds& aDuration, - TInt& aVideoFrameCount, - TInt& aSamplingRate, - TVedAudioChannelMode& aChannelMode); - - /** - * Read video frame information from the specified video clip file and fills array of info for - * all frames in video.The file should be opened with EFileShareReadersOnly share mode. Video processor - * should not free the video frame info array after it has passed it on as a return value - * of this function. Returned array should be allocated with User::AllocL() and should be - * freed by the caller of this method with User::Free(). - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - * @param aFileName name of the file to read - * @param aFileHandle handle of the file to read - * @param aVideoFrameInfoArray Array for video frame parameters - */ - void GenerateVideoFrameInfoArrayL(const TDesC& aFileName, RFile* aFileHandle, TVedVideoFrameInfo*& aVideoFrameInfoArray); - - /** - * Returns an estimate of the total size of the specified movie. - * - * @return size estimate in bytes - */ - TInt GetMovieSizeEstimateL(const CVedMovie* aMovie); - - /** - * Calculate movie size estimate for MMS - * - * @param aMovie Movie object - * @param aTargetSize Maximum size allowed - * @param aStartTime Time of the first frame included in the MMS output - * @param aEndTime Time of the last frame included in the MMS output - * @return Error code - */ - TInt GetMovieSizeEstimateForMMSL(const CVedMovie* aMovie, TInt aTargetSize, - TTimeIntervalMicroSeconds aStartTime, TTimeIntervalMicroSeconds& aEndTime); - - /** - * Do all initializations necessary to start generating a thumbnail, e.g. open files, - * allocate memory. The video clip file should be opened with EFileShareReadersOnly - * share mode. The thumbnail should be scaled to the specified resolution and - * converted to the specified display mode. If this method leaves, destructor should be called to free - * allocated resources. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - KErrNotSupported if the specified combination of parameters - * is not supported - * - * @param aFileName name of the file to generate thumbnail from - * @param aFileHandle handle of the file to generate thumbnail from - * @param aIndex Frame index for selecting the thumbnail frame - * -1 means the best thumbnail is retrieved - * @param aResolution resolution of the desired thumbnail bitmap, or - * NULL if the thumbnail should be - * in the original resolution - * @param aDisplayMode desired display mode; or ENone if - * any display mode is acceptable - * @param aEnhance apply image enhancement algorithms to improve - * thumbnail quality; note that this may considerably - * increase the processing time needed to prepare - * the thumbnail - */ - void StartThumbL(const TDesC& aFileName, RFile* aFileHandle, TInt aIndex, TSize aResolution, - TDisplayMode aDisplayMode, TBool aEnhance); - - /** - * Starts thumbnail generation. Thumbnail generation is an asynchronous operation, - * and its completion is informed to the caller via Active object request completion; - * the iStatus member of the caller is passed as a parameter to this method. - * - * This method may leave if an error occurs in initiating the thumbnail generation. - * If this method leaves, destructor should be called to free allocated resources. - * - * @param aStatus Reference to caller's iStatus member variable - * @param aFactor Pointer to a TVedTranscodeFactor structure, which is updated by this method - * - * @return - * - */ - void ProcessThumbL(TRequestStatus &aStatus, TVedTranscodeFactor* aFactor); - - /** - * Method for retrieving the completed thumbnail bitmap. - * - * Video processor should not free the CFbsBitmap instance after it has passed it on - * as a return value of this function - * - */ - void FetchThumb(CFbsBitmap*& aThumb); - - /** - * Do all initializations necessary to start processing a movie, e.g. open files and - * allocate memory. After initialization, processing is started and the observer - * is notified. The source video and audio files should be opened with - * EFileShareReadersOnly share mode. If this method leaves, destructor should be called - * to free allocated resources. - * - * Possible leave codes: - * . - * - * @param aMovie movie to process - * @param aFilename output file name - * @param aFilename output file handle - */ - void StartMovieL(CVedMovieImp* aMovie, const TDesC& aFileName, RFile* aFileHandle, - MVedMovieProcessingObserver *aObserver); - - /** - * Cancels the processing of a movie. The processor is reseted to an idle state. - * The user must call StartMovieL again after this to start processing again. - * - * Possible leave codes: - * . - * - */ - void CancelProcessingL(); - - /** - * Sets the maximum size for the movie - * - * @param aLimit Maximum size in bytes - */ - void SetMovieSizeLimit(TInt aLimit); - - -protected: - CMovieProcessor(); - - void ConstructL(); - -private: - TInt iThumbProgress; - TInt iMovieProgress; - RPointerArray iAudioDataArray; - CMovieProcessorImpl* iMovieProcessor; - }; - - -#endif // __MEDIAPROCESSOR_H__ - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/movieprocessorimpl.h --- a/videoeditorengine/vedengine/videoprocessor/inc/movieprocessorimpl.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1589 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for movie processor implementation. -* -*/ - - -#ifndef __MOVIEPROCESSORIMPL_H__ -#define __MOVIEPROCESSORIMPL_H__ - -#ifndef __E32BASE_H__ -#include -#endif - -#include "mp4demux.h" -#include "parser.h" -#include "videoprocessor.h" -#include "VedCommon.h" -#include "VedMovieImp.h" -#include "VedVideoClipInfoImp.h" -#include "VedVideoClipGenerator.h" -#include "VedRgb2YuvConverter.h" - -// FORWARD DECLARATIONS -class CStatusMonitor; -class CActiveQueue; -class CVideoProcessor; -class CDemultiplexer; -class CComposer; -class CVideoEncoder; -class CVedMovie; -class MVedMovieProcessingObserver; -class CDisplayChain; -class CTranscoder; -class CAudioProcessor; -class CSizeEstimate; -class CVedAVCEdit; - -// audio operation -enum TAudioOperation -{ - EAudioRetain = 0, - EAudioMute, - EAudioReplace -}; - -enum TVideoOperation // used in image insertion -{ - EVideoEncodeFrame = 0, - EVideoWriteFrameToFile -}; - -// video frame parameters -struct TFrameParameters -{ - TInt64 iTimeStamp; - TUint8 iType; -}; - -// H.263 TR parameters -struct TTrParameters -{ - TInt iTrPrevNew; - TInt iTrPrevOrig; -}; - -// video clip parameters -struct TVideoClipParameters -{ - TInt64 iStartTime; - TInt64 iEndTime; -}; - - -// CLASS DEFINITIONS -class CMovieProcessorImpl : public CActive, public MVedVideoClipGeneratorFrameObserver, - public MThumbnailObserver -{ -public: - - // Error codes - enum TErrorCode - { - EInvalidProcessorState = -1000, - EUnsupportedFormat = -1001, - EVideoTooLarge = -1002, - EStreamCorrupted = -1003, - EInvalidStreamData = -1004, - EInvalidInternalState = -1050 - // Also error codes KErrNone, if frame was completed successfully; - * one of the system wide error codes, if frame generation failed - * @param aFrame pointer to frame, if it was completed successfully; - * NULL, if frame generation failed - */ - void NotifyVideoClipGeneratorFrameCompleted(CVedVideoClipGenerator& aGenerator, - TInt aError, CFbsBitmap* aFrame); - - /** - * From MThumbnailObserver - * - * Called when thumbnail generation is ready - * - * @param aError error code - */ - void NotifyThumbnailReady(TInt aError); - -public: // New functions - - /** - * Constructors for instantiating new video processors. - * Should reserve as little resources as possible at this point. - */ - static CMovieProcessorImpl* NewL(); - static CMovieProcessorImpl* NewLC(); - - /** - * Destructor can be called at any time (i.e., also in the middle of a processing operation) - * Should release all allocated resources, including releasing all allocated memory and - * *deleting* all output files that are currently being processed but not yet completed. - */ - virtual ~CMovieProcessorImpl(); - - /** - * Do all initializations necessary to start processing a movie, e.g. open files, allocate memory. - * If this method leaves, destructor should be called to free allocated resources. - * Starts processing after initializations are done. - * - * @param aMovie movie to process - * @param aFilename output file name - * @param aFileHandle output file handle - * @param aObserver observer object - * - */ - void StartMovieL(CVedMovieImp* aMovie, const TDesC& aFileName, RFile* aFileHandle, - MVedMovieProcessingObserver *aObserver); - - /** Create 3gp generated clips - * Create all the necessary 3gp files before inserting them into the actual movie - * If this method leaves, destructor should be called to free allocated resources. - * Starts processing after initializations are done. - * - * @param aCreateMode mode of operation of the create image files function - */ - TInt CreateImage3GPFilesL(TVideoOperation aCreateMode); - - /** Prepare for 3gp generated clips - * Create all the data structures necessary for 3gp files creation before calling create. - * If this method leaves, destructor should be called to free allocated resources. - * Starts processing after initializations are done. - * - * @param aCreateMode mode of operation of the create image files function - */ - TInt ProcessImageSetsL(TVideoOperation aCreateMode); - - /** Encode raw frames for 3gp generated clips - * This method is used to encode a raw frame for 3gp generated clips - * If this method leaves, destructor should be called to free allocated resources. - * VideEncoder should be created and initialized before using this function - * - */ - TInt EncodeImageFrameL(); - - /** Process raw frames for 3gp generated clips - * Decide what to do in this function - whether to call encoder or compose output - * If this method leaves, destructor should be called to free allocated resources. - * Starts processing after initializations are done. - * - */ - void DoImageSetProcessL(); - - - /** - * Do all initializations necessary to start generating a thumbnail, e.g. open files, - * allocate memory. The video clip file should be opened with EFileShareReadersOnly - * share mode. The thumbnail should be scaled to the specified resolution and - * converted to the specified display mode. If this method leaves, destructor should be called to free - * allocated resources. - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - KErrNotSupported if the specified combination of parameters - * is not supported - * - * @param aFileName name of the file to generate thumbnail from - * @param aFileHandle handle of the file to generate thumbnail from - * @param aIndex Frame index for selecting the thumbnail frame - * -1 means the best thumbnail is retrieved - * @param aResolution resolution of the desired thumbnail bitmap, or - * NULL if the thumbnail should be - * in the original resolution - * @param aDisplayMode desired display mode; or ENone if - * any display mode is acceptable - * @param aEnhance apply image enhancement algorithms to improve - * thumbnail quality; note that this may considerably - * increase the processing time needed to prepare - * the thumbnail - */ - void StartThumbL(const TDesC& aFileName, RFile* aFileHandle, TInt aIndex, TSize aResolution, - TDisplayMode aDisplayMode, TBool aEnhance); - - /** - * Starts thumbnail generation. Thumbnail generation is an asynchronous operation, - * and its completion is informed to the caller via Active object request completion; - * the iStatus member of the caller is passed as a parameter to this method. - * - * This method may leave if an error occurs in initiating the thumbnail generation. - * If this method leaves, destructor should be called to free allocated resources. - * - * @param aStatus Reference to caller's iStatus member variable - * @param aFactor Pointer to a TVedTranscodeFactor structure, which is updated by this method - * - * @return - * - */ - void ProcessThumbL(TRequestStatus &aStatus, TVedTranscodeFactor* aFactor); - - /** - * Method for retrieving the completed thumbnail bitmap. - * - * Video processor should not free the CFbsBitmap instance after it has passed it on - * as a return value of this function - * - */ - void FetchThumb(CFbsBitmap*& aThumb); - - /** - * Read clip header from the specified file and return its properties. - * This method should leave if clip is invalid, cannot be opened, etc. - * - * @param aFileName name of the file to read - * @param aFileHandle handle of file to read - * @param aVideoFormat for returning the video format - * @param aVideoType Type of video data - * @param aResolution for returning the resolution - * @param aAudioType Type of audio data - * @param aDuration for returning the duration - * @param aVideoFrameCount Number of video frames in the clip - * @param aSamplingRate Audio sampling rate - * @param aChannelMode Audio channel mode - */ - void GetClipPropertiesL(const TDesC& aFileName, RFile* aFileHandle, TVedVideoFormat& aFormat, - TVedVideoType& aVideoType, TSize& aResolution, TVedAudioType& aAudioType, - TTimeIntervalMicroSeconds& aDuration, TInt& aVideoFrameCount,TInt& aSamplingRate, - TVedAudioChannelMode& aChannelMode); - - /** - * Read video frame information from the specified video clip file and fills array of info for - * all frames in video.The file should be opened with EFileShareReadersOnly share mode. Video processor - * should not free the video frame info array after it has passed it on as a return value - * of this function. Returned array should be allocated with User::AllocL() and should be - * freed by the caller of this method with User::Free(). - * - * Possible leave codes: - * - KErrNoMemory if memory allocation fails - * - KErrNotFound if there is no file with the specified name - * in the specified directory (but the directory exists) - * - KErrPathNotFound if the specified directory - * does not exist - * - KErrUnknown if the specified file is of unknown format - * - * @param aFileName name of the file to read - * @param aFileHandle handle of the file to read - * @param aVideoFrameInfoArray Array for video frame parameters - */ - void GenerateVideoFrameInfoArrayL(const TDesC& aFileName, RFile* aFileHandle, TVedVideoFrameInfo*& aVideoFrameInfoArray); - - /** - * Get movie size estimate - * - * @param aMovie Movie for which the estimate is done - * @return Movie size in bytes - */ - - TInt GetMovieSizeEstimateL(const CVedMovie* aMovie); - - /** - * Calculate movie size estimate for MMS - * - * @param aMovie Movie object - * @param aTargetSize Maximum size allowed - * @param aStartTime Time of the first frame included in the MMS output - * @param aEndTime Time of the last frame included in the MMS output - * @return Error code - */ - TInt GetMovieSizeEstimateForMMSL(const CVedMovie* aMovie, TInt aTargetSize, - TTimeIntervalMicroSeconds aStartTime, TTimeIntervalMicroSeconds& aEndTime); - - /** - * Cancels the processing of a movie - */ - void CancelProcessingL(); - - /** - * Enhances the visual quality of the frame - * - */ - void EnhanceThumbnailL(const CFbsBitmap* aInBitmap, CFbsBitmap* aTargetBitmap); - - /** - * Get number of frames in output movie - * - * @return Number of output frames - */ - inline TInt GetOutputNumberOfFrames() const { return iOutputNumberOfFrames; } - - /** - * Get the file name of the current clip - * - * @return File name of the current clip - */ - inline TFileName GetCurrentClipFileName() const { return iClipFileName; } - - /** - * Get number of frames in current clip - * - * @return Number of frames in clip - */ - inline TInt GetClipNumberOfFrames() const { return iParser->GetNumberOfFramesInClip(); } - - /** - * Get the timescale of the current video clip - * - * @return Timescale - */ - inline TInt GetVideoClipTimeScale() const { return iParser->iStreamParameters.iVideoTimeScale; } - - /** - * Get color effect for the current clip - * - * @return Color effect - */ - inline TVedColorEffect GetColorEffect() const { return iColorEffect; } - - inline void GetColorTone(TInt& aU, TInt& aV) { aU=iColorToneU; aV=iColorToneV; } - - /** - * Get number of audio frames in one 3gp sample - * - * @return Number of frames in sample - */ - inline TInt GetAudioFramesInSample() const { return iAudioFramesInSample; } - - /** - * Finalize processing a clip - * - */ - void FinalizeVideoClip(); - - /** - * Set frame type - * - * @param aFrameIndex Index to the frame - * @param aType P frame = 0, I frame = 1 - */ - void SetFrameType(TInt aFrameIndex, TUint8 aType); - - /** - * Get video timestamp in ms from timestamp in ticks - * - * @param aTimeStampInTicks Time in ticks - * @param aCommonTimeScale ETrue for using the output time scale - * EFalse for using the scale of current clip - * @return Timestamp in milliseconds - */ - TInt64 GetVideoTimeInMsFromTicks(TInt64 aTimeStampInTicks, TBool aCommonTimeScale) const; - - /** - * Get video timestamp in ticks from timestamp in ms - * - * @param aTimeStampInMs Time in ms - * @param aCommonTimeScale ETrue for using the output time scale - * EFalse for using the scale of current clip - * @return Timestamp in ticks - */ - TInt64 GetVideoTimeInTicksFromMs(TInt64 aTimeStampInMs, TBool aCommonTimeScale) const; - - /** - * Get audio timestamp in ticks from timestamp in ms - * - * @param aTimeStampInMs Time in ms - * @return Timestamp in ticks - */ - TUint GetAudioTimeInTicksFromMs(TUint aTimeStampInMs) const; - - /** - * Get audio timestamp in ms from timestamp in ticks - * - * @param aTimeStampInTicks Time in ticks - * @return Timestamp in milliseconds - */ - TUint GetAudioTimeInMsFromTicks(TUint aTimeStampInTicks) const; - - /** - * Get video frame index based on timestamp - * - * @param aTime Frame timestamp in microseconds - * @return Frame index - */ - TInt GetVideoFrameIndex(TTimeIntervalMicroSeconds aTime) const; - - /** - * Get frame index for the first frame in current clip - * - * @param aTime Timestamp in microseconds - * @return Frame index - */ - inline TInt GetStartFrameIndex() const { return iStartFrameIndex; } - - /** - * Get frame type at specified index - * - * @param aIndex Frame index - * @return Frame type - */ - inline TInt8 GetVideoFrameType(TInt aIndex) const { return iParser->GetVideoFrameType(aIndex); }; - - inline TInt8 VideoFrameType(TInt aIndex) const - { - if (iThumbnailInProgress || (iFrameParameters == 0)) - { - return iParser->GetVideoFrameType(iParser->GetStartFrameIndex() + aIndex); - } - - return (TInt8) iFrameParameters[aIndex].iType; - } - - /** - * Get frame timestamp at specified index, in ticks - * - * @param aIndex Frame index - * @return timestamp in ticks - */ - inline TInt64 VideoFrameTimeStamp(TInt aIndex) - { - if (iThumbnailInProgress || (iFrameParameters == 0)) - { - TInt startTimeInTicks = 0; - iParser->GetVideoFrameStartTime(iParser->GetStartFrameIndex() + aIndex, &startTimeInTicks); - return startTimeInTicks; - } - - return (TInt64) iFrameParameters[aIndex].iTimeStamp; - } - - inline void SetTrPrevNew(TInt aTr) { iTr.iTrPrevNew = aTr; } - - inline void SetTrPrevOrig(TInt aTr) { iTr.iTrPrevOrig = aTr; } - - inline TInt GetTrPrevNew() const { return iTr.iTrPrevNew; } - - inline TInt GetTrPrevOrig() const { return iTr.iTrPrevOrig; } - - /** - * Get pointer to demultiplexer object - * - * @return demux pointer - */ - inline CDemultiplexer* GetDemux() const { return iDemux; } - - /** - * Get the start time for the current clip - * - * @return Time in microseconds - */ - inline TTimeIntervalMicroSeconds GetStartCutTime() const { return iStartCutTime; } - - /** - * Get thumbnail processing status - * - * @return ETrue if thumbnail is being processed, EFalse otherwise - */ - inline TBool IsThumbnailInProgress() const { return iThumbnailInProgress; } - - /** - * Get the end time for the current clip - * - * @return Time in microseconds - */ - inline TTimeIntervalMicroSeconds GetEndCutTime() const { return iEndCutTime; } - - /** - * Get current metadata size - * - * @return Metadata size in bytes - */ - TUint CurrentMetadataSize(); - - /** - * Write video frame to output 3gp file - * @param aBuf Descriptor containing the frame - * @param aTimeStampInTicks Time stamp of the frame in ticks - * @param aDurationInTicks Frame duration in ticks - * @param aKeyFrame ETrue if the frame is a keyframe - * @param aCommonTimeScale if ETrue, output movie timescale will - * be used, otherwise the current clip's timescale is used - * @param aColorTransitionFlag ETrue if writing frames from latter - * clip in a color transition (wipe/crossfade) - * @return Error code - */ - TInt WriteVideoFrameToFile(TDesC8& aBuf, TInt64 aTimeStampInTicks, - TInt aDurationInTicks, TBool aKeyFrame, - TBool aCommonTimeScale, TBool aColorTransitionFlag, - TBool aFromEncoder); - - /** - * Save a video YUV frame to the tmp file - * @param aBuf Descriptor containing the YUV frame - * @param aDuration The frame duration - * @param aTimeStamp The frame timestamp - * @return Error code - */ - TInt SaveVideoFrameToFile(TDesC8& aBuf, TInt aDuration, TInt64 aTimeStamp); - - /** - * Retrieve a video YUV frame from the tmp file - * @param aBuf Descriptor containing the YUV frame - * @param aLength Length of the descriptor - * @param aDuration The frame duration - * @param aTimeStamp The frame timestamp - * @return Error code - */ - TInt GetVideoFrameFromFile(TDes8& aBuf, TInt aLength, TInt& aDuration, TInt64& aTimeStamp); - - /** - * Get the next frame duration and timestamp - * @param aDuration The frame duration - * @param aTimeStamp The frame timestamp - * @param aIndex Index of timestamp to get - * @param aTimeStampOffset Offset for timestamp - * @return Error code - */ - void GetNextFrameDuration(TInt& aDuration, TInt64& aTimeStamp, TInt aIndex, TInt& aTimeStampOffset); - - /** - * Append the next frame duration and timestamp - * @param aDuration The frame duration - * @param aTimeStamp The frame timestamp - * @return Error code - */ - void AppendNextFrameDuration(TInt aDuration, TInt64 aTimeStamp); - - /** - * Get the number of transition duration in the list - * @return Number of transition - */ - TInt NumberOfTransition() { return iCurClipDurationList.Count(); } - - /** - * Get the number of transition at the start of next clip - * @return Number of transition number - */ - TInt NextClipStartTransitionNumber(); - - /** - * Get the transition duration of the current clip - * @return Transition duration - */ - TInt TransitionDuration(); - - /** - * Release all internal data hold for transition effect - */ - void CloseTransitionInfoL(); - - /** - * Update progress based on time processed so far - * - */ - void IncProgressBar(); - - /** - * Get the number of the audio clip being processed - * - * @return Clip number - */ - inline TInt GetAudioClipNumber() const { return iAudioClipNumber; } - - /** - * Get the output type of audio in the movie - * - * @return Audio type - */ - TVedAudioType GetOutputAudioType(); - - /** - * Get the number of the video clip being processed - * - * @return Clip number - */ - inline TInt GetVideoClipNumber() const { return iVideoClipNumber; } - - /** - * Get the total number of the video clips in movie - * - * @return Number of clips - */ - inline TInt GetNumberOfVideoClips() const { return iNumberOfVideoClips; } - - /** - * Get the starting transition effect for the current clip - * - * @return Transition effect - */ - inline TVedStartTransitionEffect GetStartTransitionEffect() const { return iStartTransitionEffect; } - - /** - * Get the middle transition effect for the current clip - * - * @return Transition effect - */ - inline TVedMiddleTransitionEffect GetMiddleTransitionEffect() const { return iMiddleTransitionEffect; } - - /** - * Get the middle transition effect for the previous clip - * - * @return Transition effect - */ - inline TVedMiddleTransitionEffect GetPreviousMiddleTransitionEffect() const { return iPreviousMiddleTransitionEffect; } - - /** - * Get the ending transition effect for the current clip - * - * @return Transition effect - */ - inline TVedEndTransitionEffect GetEndTransitionEffect() const { return iEndTransitionEffect; } - - /** - * Get the slow motion speed of the current clip - * - * @return Speed - */ - inline TInt GetSlowMotionSpeed() const { return iVideoClip->Speed(); } - - /** - * Get the duration of the current video clip - * - * @return duration - */ - inline TInt64 GetVideoClipDuration() { return iVideoClipDuration; } - - /** - * Get the resolution of the current video clip - * - * @return resolution - */ - TSize GetVideoClipResolution(); - - /** - * Get the resolution of the output movie - * - * @return resolution - */ - TSize GetMovieResolution(); - - /** - * Get sync interval in picture setting from movie - * - * @return sync interval (H.263 GOB header frequency) - */ - TInt GetSyncIntervalInPicture(); - - /** - * Get random access rate setting from movie - * - * @return random access rate in pictures per second - */ - TReal GetRandomAccessRate(); - - /** - * Get the format of the output video - * - * @return format - */ - TVedVideoType GetOutputVideoType(); - - /** - * Get the format of the current video clip - * - * @return format - */ - TVedVideoType GetCurrentClipVideoType(); - - /** - * Get the transcoding information of the video clip being processed - * - * @param aNum video clip number in the movie - * - * @return pointer to TTrascodeFactor object - */ - TVedTranscodeFactor GetVideoClipTranscodeFactor(TInt aNum); - - /** - * Get the flag that indicates if mode translation is required for the MPEG-4 video clip - * - * @return duration - */ - inline TBool GetModeTranslationMpeg4() { return iModeTranslationRequired; } - - /** - * Set the flag to indicate that the clip was transcoded - * - * @param aModeChanged ETrue if mode is changed - */ - inline void SetClipModeChanged(TBool aModeChanged) { iModeChanged = aModeChanged; } - - /** - * Stops processing - * - * @return Error code - */ - TInt Stop(); - - /** - * Stops processing and closes all submodules except status monitor & video encoder - * - * @return Error code - */ - TInt Close(); - - /** - * Gets the average frame rate of current video clip - * - * @return Frame rate - */ - TReal GetVideoClipFrameRate(); - - /** - * Gets the target movie frame rate - * - * @return Frame rate - */ - TReal GetMovieFrameRate(); - - /** - * Get the target video bitrate - * - * @return bitrate - */ - TInt GetMovieVideoBitrate(); - - TInt GetMovieStandardVideoBitrate(); - - /** - * Sets the maximum size for the movie - * - * @param aLimit Maximum size in bytes - */ - void SetMovieSizeLimit(TInt aLimit); - - /** - * Get the ColorTone value in Rgb for the clip and convert to YUV - * - * @param aColorEffect TVedColorEffect type (B&W or ColorTone) - * @param aColorToneRgb Rgb value for the colortone - */ - void ConvertColorToneRGBToYUV(TVedColorEffect aColorEffect,TRgb aColorToneRgb); - - /** - * Adjust the U,V color tone value for H.263 video format - * - * @param aValue The color to adjustTVedColorEffect type (B&W or ColorTone) - */ - void CMovieProcessorImpl::AdjustH263UV(TInt& aValue); - - /** - * Process audio frames - * - */ - void ProcessAudioL(); - - /** - * Called when audio clip has been processed - * - * @param aError error code - */ - void AudioProcessingComplete(TInt aError); - - /** - * Returns the MIME-type for the video in the movie - * - * @return Video codec MIME-type - */ - TPtrC8& GetOutputVideoMimeType(); - - /** - * Returns the number of saved frames from previous clip - * - * @return number of frames - */ - inline TInt GetNumberOfSavedFrames() const { return iCurClipTimeStampList.Count(); } - - /** - * Returns the length (in bytes) of decoder specific info - * - * @return Decoder specific info size - */ - inline TInt GetDecoderSpecificInfoSize() const { return iParser->GetDecoderSpecificInfoSize(); } - - /** - * Suspends demux. New output can arrive from transcoder, but no new - * input is fed there. - * - * @return TInt error code - */ - TInt SuspendProcessing(); - - /** - * Resumes processing, restoring the state. Input to transcoder - * goes to the position before the suspend or the last I-frame before that. - * - * @param aStartIndex Index of the first frame to be decoded - * @param aSuspendTime Frame number of last written frame - * - * @return TInt error code - */ - TInt ResumeProcessing(TInt& aStartFrameIndex, TInt aFrameNumber); - - /** - * Check if video transcoder is needed any longer. If not, suspend is not necessary. - * - * @return TBool ETrue if needed, EFalse if not - */ - TBool NeedTranscoderAnyMore(); - -private: // Constants - - // state - enum TProcessorState - { - EStateIdle = 0, - EStateOpened, // clip is open at the decoder (?) - EStatePreparing, - EStateReadyToProcess, - EStateProcessing - }; - - // Audio types - enum TAudioType - { - EAudioNone = 0, - EAudioAMR, - EAudioAAC - }; - - // Video types - enum TVideoType - { - EVideoNone = 0, - EVideoH263Profile0Level10, - EVideoH263Profile0Level45, - EVideoMPEG4, - EVideoAVCProfileBaseline - }; - - // Multiplex types - enum TMuxType - { - EMuxNone = 0, - EMux3GP - }; - -private: // Private methods - - /** - * By default Symbian OS constructor is private. - */ - void ConstructL(); - - /** - * c++ default constructor - */ - CMovieProcessorImpl(); - - /** - * Set the number of output frames - * - * @param aOutputNumberOfFrames No. of output frames - */ - inline void SetOutputNumberOfFrames(TInt aOutputNumberOfFrames) { - iOutputNumberOfFrames = aOutputNumberOfFrames; } - - /** - * Opens a 3gp clip for processing - * - * @param aFileName Clip filename - * @param aFileHandle Clip file handle - * @param aDataFormat Clip file format - * - * @return Error code - */ - TInt OpenStream(TFileName aFileName, RFile* aFileHandle, TDataFormat aDataFormat); - - /** - * Closes the processed clip from parser - * - * @return Error code - */ - TInt CloseStream(); - - /** - * Prepares the processor for processing a movie - * - * @return Error code - */ - TInt Prepare(); - - /** - * Deletes objects used in processing - * - */ - void DoCloseVideoL(); - - /** - * Finalizes movie processing, creates the output 3gp file - * - */ - void FinalizeVideoSequenceL(); - - /** - * Starts processing the movie - * - */ - void DoStartProcessing(); - - /** - * Sets suitable default values for parameters - * - */ - void SetHeaderDefaults(); - - /** - * Sets output audio & video formats - * - */ - void SetOutputMediaTypesL(); - - /** - * Gets bitstream modes of input clips - * - */ - void GetTranscodeFactorsL(); - - /** - * Sets video transcoding parameters - * - */ - void SetupTranscodingL(); - - /** - * Resets modules & variables used in processing - * - */ - void ResetL(); - - /** - * Processes the movie when no video clips are present - * - */ - void ProcessAudioOnly(); - - /** - * Parses the clip header - * - * @param aStreamParams Destination structure for stream parameters - * @param Filename of the clip - * @param FileHandle of the clip - * - */ - void ParseHeaderOnlyL(CParser::TStreamParameters& aStreamParams, TFileName& aFileName, RFile* aFileHandle); - - /** - * Copies stream parameters from source to destination structure - * - * @param aDestParameters Destination structure - * @param aSrcParameters Source structure - * - */ - void UpdateStreamParameters(CParser::TStreamParameters& aDestParameters, - CParser::TStreamParameters& aSrcParameters); - - /** - * Parse the clip header & update internal variables accordingly - * - */ - void ParseHeaderL(); - - /** - * Initializes the video queue and decoder - * - * @param aQueueBlocks Number of video queue blocks - * @param aQueueBlockSize Size of one video queue block - */ - void InitVideoL(TUint aQueueBlocks, TUint aQueueBlockSize); - - /** - * Initializes the demultiplexer - * - */ - void InitDemuxL(); - - /** - * Initializes the processor for the next clip to be processed, - * called for each clip - */ - void InitializeClipL(); - - /** - * Initializes structures for movie processing, called once per movie - * - * @param iAudioDataArray Array containing parameters for audio clips - * - */ - void InitializeClipStructuresL(); - - /** - * Initializes the processor for the generated clip to be processed. - * Called for each Image clip - */ - void InitializeGeneratedClipL(); - - /** - * Initializes the processor for creating the temporary 3gp file (clip). - * Called for each Image clip - */ - void TemporaryInitializeGeneratedClipL(); - - /** - * Frees memory allocated for movie processing - * - */ - void DeleteClipStructures(); - - /** - * Fills an array containing video frame parameters - * - */ - void FillVideoFrameInfoArrayL(TInt& aVideoFrameCount, TVedVideoFrameInfo*& aVideoFrameInfoArray); - - /** - * Fills internal frame parameter structure - * - */ - void FillFrameParametersL(TInt aCurrentFrameIndex); - - /** - * Writes the remaining audio frames to file - * - * @return Error code - */ - TInt FinalizeAudioWrite(); - - /** - * Decide the type of Audio in terms of the common types - * - * @return Audio type - */ - TVedAudioType DecideAudioType(TAudioType aAudioType); - - /** - * Write an audio frame to internal buffer (AMR) - * or to output file (AAC) - * - * @param aBuf Source buffer - * @param aDuration duration of the current frame - * - @return Error code - */ - TInt WriteAllAudioFrames(TDesC8& aBuf, TInt aDuration); - - /** - * Add a number of AMR frames to internal buffer - * - * @param aBuf Source buffer - * @param aNumFrames Number of frames in buffer - * - * @return Error code - */ - TInt BufferAMRFrames(const TDesC8& aBuf, TInt aNumFrames, TInt aDuration); - - /** - * Purge AMR frames from internal buffer to output file - * - * - * @return Error code - */ - TInt WriteAMRSamplesToFile(); - - /** - * Get the target audio bitrate - * - * @return bitrate - */ - TInt GetMovieAudioBitrate(); - - /** - * Writes a buffered frame to output file - * - * @param aDuration Duration of the frame being written from buffer, - * expressed in timescale of the output movie - * @param aColorTransitionFlag ETrue if writing frames from latter - * clip in a color transition (wipe/crossfade) - * @return Error code - */ - TInt WriteVideoFrameFromBuffer(TReal aDuration, TBool aColorTransitionFlag); - - /** - * Writes the last buffered frame to file - * - * @return Error code - */ - TInt FinalizeVideoWrite(); - - /** - * Reports an error in thumbnail generator - * to the caller - * - * @return ETrue if error was reported, EFalse otherwise - */ - TBool HandleThumbnailError(TInt aError); - - /** - * Get output AVC level - * - * @return Level - */ - TInt GetOutputAVCLevel(); - -private: // Data - - // True if processing has been cancelled - TBool iProcessingCancelled; - - // True if video encoder initialisation is ongoing - TBool iEncoderInitPending; - - // timestamp for encoding ending black frames - TTimeIntervalMicroSeconds iTimeStamp; - - // Duration by which audio is longer than video - TInt64 iLeftOverDuration; - - // Video frame parameters - TFrameParameters* iFrameParameters; - - // Size of the video frame parameters array - TInt iFrameParametersSize; - - // number of frames in output movie - TInt iOutputNumberOfFrames; - - // TR parameters - TTrParameters iTr; - - // Thumbnail resolution - TSize iOutputThumbResolution; - - // Thumbnail index - TInt iThumbIndex; - - // Thumbnail display mode - TDisplayMode iThumbDisplayMode; - - // Thumbnail enhance - TBool iThumbEnhance; - - // stream duration: max. of audio,video - TInt64 iVideoClipDuration; - - // output audio buffer - // stores output raw amr data for processed clip - HBufC8 *iOutAudioBuffer; - - // output video buffer for one frame - HBufC8 *iOutVideoBuffer; - - // Is there a frame in buffer ? - TBool iFrameBuffered; - - // Timestamp of buffered frame - TInt64 iBufferedTimeStamp; - - // key frame info of buffered frame - TBool iBufferedKeyFrame; - - TBool iBufferedFromEncoder; - - TBool iFirstFrameBuffered; - - // number of audio frames in the buffer currently - TInt iAudioFramesInBuffer; - - // Composer object - CComposer *iComposer; - - // Filename of the current clip - TFileName iClipFileName; - - // File handle of the current clip - RFile* iClipFileHandle; - - // Output movie filename - TFileName iOutputMovieFileName; - - // Output movie filehandle - RFile* iOutputFileHandle; - - // status monitor object - CStatusMonitor* iMonitor; - // Movie processing observer used - MVedMovieProcessingObserver *iObserver; - // Are we processing a thumbnail ? - TBool iThumbnailInProgress; - - // number of frames processes so far - TUint iFramesProcessed; - // number of current video clip - TInt iVideoClipNumber; - // total number of video frames - TInt iNumberOfVideoClips; - // index of the first frame in clip - TInt iStartFrameIndex; - // video timescale for output movie - TUint iOutputVideoTimeScale; - - // progress percentage - TInt iProgress; - // is the current disk full ? - TBool iDiskFull; - - // starting cut time for the current video clip - TTimeIntervalMicroSeconds iStartCutTime; - // ending cut time for the current video clip - TTimeIntervalMicroSeconds iEndCutTime; - - // Current video clip - CVedVideoClip* iVideoClip; - // Movie - CVedMovieImp* iMovie; - - // buffer pointers for thumbnail generation - TUint8* iYuvBuf; - TUint8* iRgbBuf; - - // Transition effect parameters - TVedStartTransitionEffect iStartTransitionEffect; - TVedMiddleTransitionEffect iMiddleTransitionEffect; - TVedMiddleTransitionEffect iPreviousMiddleTransitionEffect; - TVedEndTransitionEffect iEndTransitionEffect; - - // Indicates if an image is being encoded - TInt iImageEncodedFlag; - - // finished creating the image 3GP file - TInt iImageEncodeProcFinished; - - // for storing the converted YUV image in generation case - TUint8 *iYuvImageBuf; - - // image size for generated frames - TInt iImageSize; - - // Descriptor holding the image to be encoded - TPtr8 iReadImageDes; - - // Image composer - CComposer* iImageComposer; - - // images processed in generation case - TInt iTotalImagesProcessed; - - // Time scale for generated frames - TInt iImageVideoTimeScale; - - // Generated clip has been created - TInt iImageClipCreated; - - // Are we starting to process generated images - TInt iFirstTimeProcessing; - - // The name of the current clip is constant for image clips and 0 if buffer supported - TFileName iCurrentMovieName; - - // number of images from the generator - TInt iNumOfImages; - - // is getFrame() from generator in progress - TInt iGetFrameInProgress; - - // Are output timescales set ? - TInt iOutputVideoTimeSet; - TInt iOutputAudioTimeSet; - - // Are all clips generated ? - TInt iAllGeneratedClips; - - // Is generated clip image being encoded ? - TInt iEncodeInProgress; - - // in ms, audio and video durations added up for progress bar indication - TInt64 iTotalMovieDuration; - - // Is the first clip generated - TBool iFirstClipIsGen; - - TAudioType iOutputAudioType; - - TVideoType iOutputVideoType; - - TInt iMP4SpecificSize; - - // Is it the first frame of a clip - TBool iFirstFrameOfClip; - - // for setting the first frame flag - // when doing wipe/crossfade transitions - TBool iFirstFrameFlagSet; - - /*Indicates whether mode translation in between MPEG4 modes is required(NOTE in between MPEG4 modes only)*/ - TBool iModeTranslationRequired; - - /*This is set by the decoder indicating he changed either the format or mode so Mp4Specific size may not be right */ - TBool iModeChanged; //This for the composer to know that mode was changed for Mp4Specific size - - // Speed for the current clip, 1000 = normal speed - TUint iSpeed; - // Color effect for the current clip - TVedColorEffect iColorEffect; - - // total number of audio clips - TInt iNumberOfAudioClips; - - // Current audio clip number - TInt iAudioClipNumber; - - // Current replacement clip number - TInt iAudioReplaceClipNumber; - - TInt iAudioFrameNumber; - TInt iVideoFrameNumber; - TInt iVideoIntraFrameNumber; - - // Current audio time - TInt64 iCurrentAudioTimeInMs; - - // total time in ms of audio written, - // for the whole movie - TInt64 iTotalAudioTimeWrittenMs; - - // Current video time - TReal iCurrentVideoTimeInTicks; - - // duration processed for generated clips - TInt64 iGeneratedProcessed; - - // Duration of current audio clip written, - // reseted after a clip has been processed - TInt64 iAudioClipWritten; - - // Duration of current video clip written, - // reseted after a clip has been processed - TInt64 iVideoClipWritten; - - // video clip parameters - TVideoClipParameters *iVideoClipParameters; - TInt iNumberOfAudioClipsCreated; - // number of audio frames per sample - TInt iAudioFramesInSample; - // output audio timescale - TInt iOutputAudioTimeScale; - - // time stamp for current video clip - TInt64 iInitialClipStartTimeStamp; - // ETrue if movie processing is starting - TBool iStartingProcessing; - - // Used by AAC to handle writing decoder specific info, - // if it does not exist, to default value */ - TBool iFirstClipHasNoDecInfo; - - // the demultiplexer - CDemultiplexer *iDemux; - // the video decoder - CVideoProcessor *iVideoProcessor; - // the video decoder input queue - CActiveQueue *iVideoQueue; - // file format parser - CParser *iParser; - // video encoder - CVideoEncoder *iVideoEncoder; - - // audio processor - CAudioProcessor *iAudioProcessor; - - // audio processing done ? - TBool iAudioProcessingCompleted; - - // frame enhancement - CDisplayChain *iEnhancer; - - // Video encoder input buffer - TUint8 *iEncoderBuffer; - // ETrue if video encoding is pending - TBool iEncodePending; - - // does the stream have video? - TBool iHaveVideo; - // video stream type - TVideoType iVideoType; - // does the stream have audio? - TBool iHaveAudio; - - // : is this needed ?? - // audio stream type - TAudioType iAudioType; - - // is the stream multiplexed? - TBool iIsMuxed; - // multiplex type - TMuxType iMuxType; - - // current processor state - TProcessorState iState; - // current stream data format - TDataFormat iDataFormat; - - // stream start reading buffer - TUint8 *iReadBuf; - // buffer length - TUint iBufLength; - // amount of data in buffer - TUint iBufData; - // reading descriptor - TPtr8 iReadDes; - - // number of demux channels used - TUint iNumDemuxChannels; - // demux parameters read - CMP4Demux::TStreamParameters iMP4Parameters; - CMP4Demux::TOutputChannel iMP4Channels[2]; - - // H.263 stream parameters - CVideoProcessor::TStreamParameters iVideoParameters; - - // stream length in milliseconds - TUint iStreamLength; - // stream size in bytes - TUint iStreamSize; - // stream average bitrate - TUint iStreamBitrate; - // is it possible to seek in the file - TBool iCanSeek; - - // ETrue when all video of the movie has been processed - TBool iAllVideoProcessed; - - // tmp file used for Transition Effect - TFileName iCurClipFileName; - TFileName iNextClipFileName; - - RFile iCurClip; - RFile iNextClip; - RFs iFs; - TBool iFsConnected; - - RArray iCurClipDurationList; - RArray iNextClipDurationList; - RArray iCurClipTimeStampList; - RArray iNextClipTimeStampList; - - TInt iCurClipIndex; - TUint iPreviousTimeScale; - TInt64 iOffsetTimeStamp; - - // This flag is set to true if first clip uses encoder such as cut - // as Resynch bit needs to be reset - TBool iFirstClipUsesEncoder; // For changing Vos in case of Mpeg4 transcoding - TBool iMpeg4ModeTranscoded; - - // Is true if first clip is cut - TBool iFirstClipIsCut; - - TInt iCurrentVideoSize; - TInt iCurrentAudioSize; - TInt iMovieSizeLimit; - TBool iMovieSizeLimitExceeded; - - CActiveSchedulerWait *iWaitScheduler; - TBool iWaitSchedulerStarted; - - TBool iAudioProcessingCancelled; - - TRequestStatus *iThumbnailRequestStatus; - CFbsBitmap* iOutBitmap; - - // Duration of all samples in buffered AMR - TInt iTotalDurationInSample; - - // ColorTone value as RGB - TRgb iColorToneRgb; - - // ColorTone values as U,V - TInt iColorToneU; - TInt iColorToneV; - - // for scaling the timestamp list - TBool iTimeStampListScaled; - - // true if we are encoding black ending frames - TBool iEncodingBlackFrames; - - // For calculating movie size estimates - CSizeEstimate *iSizeEstimate; - - // Slow motion is not applied for ending black frames or the last frame of a clip - TBool iApplySlowMotion; - - // True if writing the first color transition frame - TBool iWriting1stColorTransitionFrame; - - // Timestamp of the first color transition frame - TInt64 i1stColorTransitionFrameTS; - - // AVC editing instance for movie - CVedAVCEdit* iAvcEdit; - - // AVC editing instance for a generated clip - CVedAVCEdit* iImageAvcEdit; - - // Bitmap-to-YUV converter - CVSFbsBitmapYUV420Converter* iImageYuvConverter; - - friend class CMP4Parser; - friend class CAudioProcessor; - -}; - - -#endif // __MOVIEPROCESSORIMPL_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/mp4composer.h --- a/videoeditorengine/vedengine/videoprocessor/inc/mp4composer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,218 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//FC: A wrapper class for mp4composer -// Based on the CMP4Parser class -// end FC. - - -#ifndef __MP4COMPOSER_H__ -#define __MP4COMPOSER_H__ - -// INCLUDES - - -#include "Composer.h" -#include -#include "parser.h" -#include "vedavcedit.h" - -// CONSTANTS -// MACROS -// DATA TYPES -// FUNCTION PROTOTYPES -// FORWARD DECLARATIONS - - -// CLASS DECLARATION - - -/** -* MP4 -format Composer class -* ?other_description_lines -*/ -class CMP4Composer : public CComposer - { - - public: // Constants - - enum TFrameType - { - EFrameTypeNone = 0, - EFrameTypeAudio, - EFrameTypeVideo - }; - - public: // Constructors and destructor - - /** - * C++ default constructor. - */ - CMP4Composer(); - - /** - * Two-phased constructor.(overloaded for Mp4 support) - */ - static CMP4Composer* NewL(const TDesC &aFileName, - CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat, - CVedAVCEdit *aAvcEdit); - - static CMP4Composer* NewL(RFile* aFileHandle, - CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat, - CVedAVCEdit *aAvcEdit); - - /** - * Destructor. - */ - ~CMP4Composer(); - - public: // Functions from base classes - - - /** - * Write a number of frames of requested type from inserted data or file - * @param aSrcBuffer SOurce buffer - * @param aType Type of frame(s) to write - * @param aNumWritten Number of frames actually written - * @return TInt error code - */ - - TInt WriteFrames(TDesC8& aSrcBuffer, TInt aFrameSize,TInt aDuration, - TInt aKeyFrame,TInt aNumberOfFrames,TInt aFrameType); - - TInt WriteFrames(TDesC8& aSrcBuffer, TInt aFrameSize,TInt aDuration, - TInt aKeyFrame,TInt aNumberOfFrames,TInt aFrameType,TInt& aMP4Size, - TBool aModeChanged,TBool aFirstFrameOfClip,TInt aMode, TBool aFromEncoder); - - /** - * From CComposer composes the stream header. - * @param aStreamParameters Common stream parameters - * @param aOutputVideoTimeScale Video time scale for output file - * @param aOutputAudioTimeScale Audio time scale for output file - * @param aAudioFramesInSample Number of audio frames in sample - */ - void ComposeHeaderL(CComposer::TStreamParameters& aStreamParameters, - TInt aOutputVideoTimeScale, TInt aOutputAudioTimeScale, TInt aAudioFramesInSample); - - /** - * From CComposer Closes the composer instance - */ - TInt Close(); - - /** - * From CComposer Calculate drive free space - */ - TInt64 DriveFreeSpaceL(); - - /** - * Get the Composed Buffer - */ - TUint8* GetComposedBuffer(); - - /** - * Get the Composed Buffer size till now - */ - TUint GetComposedBufferSize(); - - TInt GetMp4SpecificSize(TDesC8& aSrcBuf,TBool aModeChange,TInt aStreamMode); - - private: - - /** - * By default Symbian OS constructor is private. - */ - void ConstructL(const TDesC &aFileName, - CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat, - CVedAVCEdit *aAvcEdit); - - void ConstructL(RFile* aFileHandle, - CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat, - CVedAVCEdit *aAvcEdit); - - void SetMediaOptions(CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat, - TUint& aMediaFlag); - - void SetComposerOptionsL(CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat); - - TInt GetAVCDecoderSpecificInfoSize(TDesC8& aSrcBuf); - - public: // New Functions - - /** - * Writes audio decoder specific info which is required in case of AAC - * - * @param aSrcBuf - buffer containing the data to be written(decoder specific informtion) - */ - TInt WriteAudioSpecificInfo(HBufC8*& aSrcBuf); - - /** - * Writes audio decoder specific info which is required in case of AAC - * - * @param aSampleRate Output sample rate of the movie - * @param aNumChannels Output num. of audio channels - */ - TInt WriteAudioSpecificInfo(TInt aSampleRate, TInt aNumChannels); - - private: // Data - - // The MP4 parser library handle - MP4Handle iMP4Handle; - mp4_u32 iVideoType; - mp4_u32 iAudioType; - - // File server session handle - RFs iFS; - TBool iFsOpened; - - // Output filename - TFileName iOutputMovieFileName; - - // Drive number of the output file - TInt iDriveNumber; - - // Remaining free disk space - TInt64 iFreeDiskSpace; - - // Counter to check the real free disk space - TUint iFreeDiskSpaceCounter; - - TBool iFirstWrite; - - // for compose buffer - TUint8 *iComposeBuffer; - mp4_u32 iComposedSize; - - // For AVC writing - TInt iFrameNumber; - - CVedAVCEdit* iAvcEdit; // Avc editing instance - - RFile* iFileHandle; - }; - -#endif // __MP4COMPOSER_H__ - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/mp4demux.h --- a/videoeditorengine/vedengine/videoprocessor/inc/mp4demux.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,229 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -* -*/ -/* -* ============================================================================ -* Name : Mp4demux.h -* Part of : Videoplayer -* Origin : -* Created : Mon Sep 10 13:48:59 2001 by jykokkon -* Description: -* -* Version : -* %version: 3 %, %date_modified: Wed Jan 28 15:16:13 2009 % by %derived_by: mkarimak % -* -* --------------------------------------------------------------------------- -* Version history: -* Template version: 1.02, 21.6.2000 by maparnan -* -* -* Version: 1, Mon Sep 10 13:49:00 2001 by jykokkon -* Ref: ?reference_to_reason_doc_if_any (e.g. ActionDb Id) -* ?change_reason_comment -* -* -* ============================================================================ -*/ - -#ifndef __MP4DEMUX_H__ -#define __MP4DEMUX_H__ - -// INCLUDES - -#ifndef __DEMULTIPLEXER_H__ -#include "demultiplexer.h" -#endif - -// FORWARD DECLARATIONS - -class CActiveQueue; -class CStatusMonitor; -class CMP4Parser; - -// CLASS DEFINITIONS - -class CMP4Demux : public CDemultiplexer - { - public: // Constants - - enum TErrorCode - { - EInternalAssertionFailure = -2300 - }; - - // The type of data in an output channel - enum TChannelDataType - { - EDataNone = 0, - EDataAudio, - EDataVideo - }; - - public: // Data structures - - // Demux parameters - struct TStreamParameters - { - TUint iPicturePeriodMs; - TUint iAudioFramesInSample; - }; - - // One output channel - struct TOutputChannel - { - TChannelDataType iDataType; - CActiveQueue *iTargetQueue; - }; - - - public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - - static CMP4Demux* NewL(CActiveQueue *anInputQueue, - TUint aNumChannels, TOutputChannel *aOutputChannels, - TStreamParameters *aParameters, - CStatusMonitor *aStatusMonitor, - CMP4Parser *aParser, - TInt aPriority=EPriorityStandard); - - /** - * Destructor. - */ - ~CMP4Demux(); - - public: // New functions - - /** - * Read a number of frames to video queue - * - * @param aCount Number of frames to read - * @return Error code - */ - TInt ReadVideoFrames(TInt aCount); - - public: // Functions from base classes - - /** - * From CDemultiplexer Start demultiplexing - */ - void Start(); - - /** - * From CDemultiplexer Stop demultiplexing - */ - void Stop(); - - /** - * From CDataProcessor Standard active object running method - */ - void RunL(); - - /** - * From CDataProcessor Called by the input queue object when - * the input stream has ended - * @param aUserPointer user data pointer - */ - void StreamEndReached(TAny *aUserPointer); - - /** - * From CDataProcessor Cancels any asynchronous requests pending - */ - void DoCancel(); - - private: // Internal methods - - /** - * C++ default constructor. - */ - CMP4Demux(CActiveQueue *anInputQueue, - TUint aNumChannels, TOutputChannel *aOutputChannels, - TStreamParameters *aParameters, - CStatusMonitor *aStatusMonitor, - CMP4Parser *aParser, - TInt aPriority); - - /** - * Second-phase constructor - */ - void ConstructL(); - - /** - * Select audio/video frame to be demuxed next - * (used when stream is in a local file) - */ - void SetFrameType(); - - /** - * Get number of free blocks in target queue - * @return TUint number of blocks - */ - TUint NumFreeBlocks(); - - /** - * Get information about next frame from parser - * @return TInt error code - */ - TInt GetFrameInfo(); - - /** - * Read next frame(s) from parser & send them to - * decoder - * @return TInt error code - */ - TInt ReadAndSendFrames(); - - private: // Data - CStatusMonitor *iMonitor; // status monitor object - CActiveQueue *iInputQueue; // input data queue - CMP4Parser *iParser; // MP4 format parser object - - TUint iNumOutputChannels; // the number of output channels used - TOutputChannel *iOutputChannels; // the output channels - - TBool iGotFrame; // TRUE if a frame is available - - TUint iBytesDemuxed; // bytes demuxed during current run - - TOutputChannel *iVideoChannel; // the channel used for output space checks - TOutputChannel *iAudioChannel; // the channel used for output space checks - - TUint iAudioFramesInSample; // number of audio frames in MP4 sample - TUint iPicturePeriodMs; // average coded picture period - - TBool iDemultiplexing; // are we demuxing? - - TUint iFrameLen; // length of next frame to be retrieved - TChannelDataType iFrameType; // type of next frame to be retrieved - - TBool iAudioEnd; - TBool iVideoEnd; - TBool iStreamEnd; // has the stream end been reached? - TBool iStreamEndDemuxed; // have we demultiplexed everything up to strem end? - TBool iReaderSet; // have we been set as a reader to the input queue? - TBool iWriterSet; // have we been set as a writer to the output queues? - - TPtr8 *iInputBlock; // current input queue block - - }; - -#endif // __MP4DEMUX_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/mp4parser.h --- a/videoeditorengine/vedengine/videoprocessor/inc/mp4parser.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,304 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for mp4parser.cpp. -* -*/ - - - -#ifndef __MP4PARSER_H__ -#define __MP4PARSER_H__ - -// INCLUDES - -#include "Parser.h" -#include - -// CONSTANTS -// MACROS -// DATA TYPES -// FUNCTION PROTOTYPES -// FORWARD DECLARATIONS - -struct TAudioClipParameters; - -// CLASS DECLARATION -class CMovieProcessorImpl; - -/** -* MP4 -format parser class -* ?other_description_lines -*/ -class CMP4Parser : public CParser -{ - -public: // Constants - - enum TFrameType - { - EFrameTypeNone = 0, - EFrameTypeAudio, - EFrameTypeVideo - }; - -public: // Constructors and destructor - - /** - * C++ default constructor. - */ - CMP4Parser(); - - /** - * Two-phased constructor. - */ - - static CMP4Parser* NewL(CMovieProcessorImpl* aProcessor, const TDesC &aFileName); - - static CMP4Parser* NewL(CMovieProcessorImpl* aProcessor, RFile* aFileHandle); - - /** - * Destructor. - */ - ~CMP4Parser(); - - -public: // New functions - - /** - * Determine if the file/data inserted is in streamable, i.e. interleaved format - * @return TBool ETrue if streamable - */ - TInt IsStreamable(); - - /** - * Seek to new position in input file - * @param aPositionInMs Position to be seeked to in milliseconds - * @param anAudioTimeAfter audio position in milliseconds after seek - * @param aVideoTimeAfter video position in milliseconds after seek - * @return TInt error code - */ - TInt Seek(TUint32 aPositionInMs, TUint32& anAudioTimeAfter, TUint32& aVideoTimeAfter); - - /** - * Reads information of next available packet in inserted input data - * @param aType Frame type - * @param aFrameLength Frame length in bytes - * @return TInt error code - */ - TInt GetNextFrameInformation(TFrameType& aType, TUint& aLength, TBool& aIsAvailable); - - /** - * Read a number of frames of requested type from inserted data or file - * @param aDstBuffer Destination buffer - * @param aType Type of frame(s) to be read - * @param aNumRead Number of frames actually read - * @return TInt error code - */ - TInt ReadFrames(TDes8& aDstBuffer, TFrameType aType, TUint32& aNumRead, TUint32& aTimeStamp); - - /** - * Initializes the module for AMR audio processing - * @param aStartPosition Time to start reading from - * @param aEndPosition Ending time for reading - * @param aCurrentTime How long has audio been processed so far - * @param aAudioOffset Offset from the beginning of movie timeline - * @param aAudioPending ETrue if audio operation is pending - * @param aPendingAudioDuration Duration for pending audio - * @param aAudioClipParameters Audio clip parameter structure - * - * @return Error code - */ - void InitAudioProcessingL(TInt64 aStartPosition, TInt64 aEndPosition, - TInt64& aCurrentTime, TInt64 aAudioOffset, - TBool& aAudioPending, TInt64& aPendingAudioDuration); - - /** - * Gets information about video frames - * @param aVideoFrameInfoArray Array to store frame properties - * @param aStartIndex Index of the first frame to get properties - * @param aSizeOfArray Size of aVideoFrameInfoArray - * @return TInt error code - */ - TInt GetVideoFrameProperties(TFrameInfoParameters* aVideoFrameInfoArray, - TUint32 aStartIndex, TUint32 aSizeOfArray); - - /** - * Obtains the AAC audio decoder specific info for current clip - * @param aBytes -- buffer to be filled with the info - * @param aBufferSize -- indicating the maximum size to be allocated - */ - TInt ReadAudioDecoderSpecificInfoL(HBufC8*& aBytes, TInt aBufferSize); - - /** - * Obtains the AAC audio decoder specific info default for 16khz and LC and Single channel - * @param aBytes -- buffer to be filled with the info - * @param aBufferSize -- indicating the maximum size to be allocated - */ - TInt SetDefaultAudioDecoderSpecificInfoL(HBufC8*& aBytes, TInt aBufferSize); - -public: // Functions from base classes - - /** - * From CParser Writes a block of data for parsing - * @param aBlock Block to be written - * @return TInt error code - */ - TInt WriteDataBlock(const TDes8& aBlock); - - /** - * From CParser Parser the stream header. - * @param aStreamParameters Common stream parameters - */ - TInt ParseHeaderL(CParser::TStreamParameters& aStreamParameters); - - /** - * From CParser Resets parser to initial state. - * @return TInt error code - */ - - TInt Reset(); - - /** - * From CParser Seek to optimal intra before given time - */ - - TInt SeekOptimalIntraFrame(TTimeIntervalMicroSeconds aStartTime, TInt aIndex, TBool aFirstTime); - - /** - * From CParser - * Gets the number of frames in current clip - */ - TInt GetNumberOfVideoFrames(); - TInt GetNumberOfFrames(); - - /** - * From CParser - * Gets the size of video frame at given index - */ - TInt GetVideoFrameSize(TInt aIndex); - - /** - * From CParser - * Gets the timestamp of video frame at given index - */ - TInt GetVideoFrameStartTime(TInt aIndex, TInt* iTimeStamp); - - /** - * From CParser - * Gets the type of video frame at given index - */ - TInt8 GetVideoFrameType(TInt aIndex); - - /** - * From CParser Parser the stream header. - * @param aAudioFrameSize average frame size of audio frame - */ - TInt ParseAudioInfo(TInt& aAudioFrameSize); - - TInt GetMP4SpecificSize(); // added for Mpeg-4 Support - - /** - * From CParser Retrieves average audio bitrate of current clip - * @param aBitrate Average bitrate - * - * @return error code - */ - TInt GetAudioBitrate(TInt& aBitrate); - - /** - * From CParser Retrieves average video frame rate of current clip - * @param aBitrate Average frame rate - * - * @return error code - */ - TInt GetVideoFrameRate(TReal& aFrameRate); - - /** - * From CParser Returns the size of decoder specific info - * - * @return size in bytes - */ - TInt GetDecoderSpecificInfoSize(); - - /** - * From CParser Reads AVC decoder specific info to buffer - * @param aBuf Destination buffer - * - * @return error code - */ - TInt ReadAVCDecoderSpecificInfo(TDes8& aBuf); - - /** - * From CParser Returns the duration of video track in milliseconds - * @param aDurationInMs Duration - * - * @return error code - */ - TInt GetVideoDuration(TInt& aDurationInMs); - -private: - - /** - * By default Symbian OS constructor is private. - */ - void ConstructL(CMovieProcessorImpl* aProcessor, const TDesC &aFileName); - - void ConstructL(CMovieProcessorImpl* aProcessor, RFile* aFileHandle); - -private: // Internal constants - - // Stream source type - enum TStreamSource - { - ESourceNone = 0, // not set yet - ESourceFile, // reading from a file - ESourceUser // user of this object provides data - }; - -public: - - -private: // Data - - // video processor instance - CMovieProcessorImpl *iProcessor; - - TStreamSource iStreamSource; - - mp4_u32 iVideoType; - mp4_u32 iAudioType; - - TUint iBytesRead; - - // The MP4 parser library handle - MP4Handle iMP4Handle; - - TFrameType iNextFrameType; - TUint iNextFrameLength; - - TBool iFirstRead; - TBool iFirstFrameInfo; - - // Max video frame length & AMR sample size, used for sanity checks to avoid crashes in case of corrupted input - TInt iMaxVideoFrameLength; - TInt iMaxAMRSampleSize; - - }; - -#endif // __MP4PARSER_H__ - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/mpeg4timer.h --- a/videoeditorengine/vedengine/videoprocessor/inc/mpeg4timer.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,131 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definition for CMPEG4Timer. -* -*/ - - - - -#ifndef __MPEG4TIMER_H__ -#define __MPEG4TIMER_H__ - -/* -* Includes -*/ - -#include -#include -#include -#include "vedcommon.h" -#include "movieprocessorimpl.h" - -/* -* Class Declarations -*/ - -class CMPEG4Timer: public CBase -{ -public: - - /** - * Public member functions - */ - - /** - * C++ default constructor - */ - CMPEG4Timer() {}; - - /** - * Destructor can be called at any time (i.e., also in the middle of a processing operation) - * Should release all allocated resources, including releasing all allocated memory and - * *deleting* all output files that are currently being processed but not yet completed. - */ - ~CMPEG4Timer(); - - /** - * Constructors for instantiating new video processors. - * Should reserve as little resources as possible at this point. - */ - static CMPEG4Timer * NewL(CMovieProcessorImpl * aMovProcessor, TInt aTimeIncrementResolution); - - /** - * Get the frame duration in millisec from the last frame with modulo base larger than zero - * - * @return Duration in millisec - * - */ - TInt64 GetMPEG4DurationInMsSinceLastModulo(); - - /** - * Update the time stamp and duration of the last frame for MPEG-4 video - * - * @param aAbsFrameNumber frame number in the movie - * @param aFrameNumber frame number in the current video clip - * @param aTimeScale time scale - * - */ - void UpdateMPEG4Time(TInt aAbsFrameNumber, TInt aFrameNumber, TInt aTimeScale); - - /** - * Pointer to iMPEG4TimeStamp object (contains MPEG-4 frame timing information) - * - */ - tMPEG4TimeParameter * GetMPEG4TimeStampPtr() { return &iMPEG4TimeStamp; } - - /** - * Pointer to iMPEG4TimeResolution object (contains MPEG-4 frame time resolution information) - * - */ - TInt * GetMPEG4TimeResolutionPtr() { return &iMPEG4TimeResolution; } - - -private: - - /* - * Private member functions - */ - - /** - * Symbian OS C++ style constructor - * - */ - void ConstructL(CMovieProcessorImpl * aMovProcessor, TInt aTimeIncrementResolution); - - /* - * Member variables - */ - - /* frame duration in millisec from the last frame with modulo base larger than zero */ - TInt iMPEG4DurationInMsSinceLastModulo; - - /* structure for timing information of MPEG-4 frame */ - tMPEG4TimeParameter iMPEG4TimeStamp; - - /* time resolution of MPEG-4 video clip */ - TInt iMPEG4TimeResolution; - - /* video processor object */ - CMovieProcessorImpl * iProcessor; - - TInt iPrevModuloTimeBaseVal; - -}; - -#endif /* __TRANSCODER_H__ */ - -/* End of File */ diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/nrctyp32.h --- a/videoeditorengine/vedengine/videoprocessor/inc/nrctyp32.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Data type definitions. -* -*/ - - -#ifndef _NRCTYP32_H_ -#define _NRCTYP32_H_ - -typedef unsigned char u_char; -typedef signed char int8; -typedef unsigned char u_int8; -typedef short int16; -typedef unsigned short u_int16; -typedef long int32; -typedef unsigned long u_int32; -typedef float float32; -typedef double float64; - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/statusmonitor.h --- a/videoeditorengine/vedengine/videoprocessor/inc/statusmonitor.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,126 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video player status monitor definitions, class CStatusMonitor. -* -*/ - -#ifndef __STATUSMONITOR_H__ -#define __STATUSMONITOR_H__ - - -// INCLUDES - -#ifndef __E32BASE_H__ -#include -#endif - - -// FORWARD DECLARATIONS - -class MVedMovieProcessingObserver; -class CMovieProcessorImpl; -class CVedMovie; - - -// CLASS DEFINITIONS - -class CStatusMonitor : public CActive -{ -public: // constants - enum TErrorCode - { - EInternalAssertionFailure = -2000, - EInvalidStateTransition = -2001 - }; - -public: // new functions - // Constructors - CStatusMonitor(MVedMovieProcessingObserver *anObserver, - CMovieProcessorImpl *aProcessor, CVedMovie *aMovie, - TInt aPriority=EPriorityHigh); - - void ConstructL(); - - // An error has occurred - void Error(TInt anErrorCode); - - // Initialisation for processing has started - void StartPreparing(); - - // The processor has been initialized and is ready for processing - void PrepareComplete(); - - // The processor has been closed - void Closed(); - - // Processing has been started - void ProcessingStarted(TBool aNotifyObserver); - - // Processing progress indication - void Progress(TInt aPercentage); - - // Processing has been stopped - void ProcessingStopped(); - - // The clip end has been reached - void ClipProcessed(); - - // The movie end has been reached - void ProcessingComplete(); - - // processing has been cancelled - void ProcessingCancelled(); - - // A fatal non-recovereable error has occurred - void FatalError(TInt anError); - - // dummy - void StreamEndReached(); - - -public: // CActive methods - ~CStatusMonitor(); - void RunL(); - void DoCancel(); - - -private: // Data - MVedMovieProcessingObserver *iObserver; - CMovieProcessorImpl *iProcessor; - - CVedMovie *iMovie; - - TInt iError; // the error that has been encountered - TInt iOutError; // for returning the error to observer - - TBool iProcessingStarted; // has processing been started ? - TBool iProcessing; // are we currently processing ? - TBool iCancelled; // has processing been cancelled ? - - TBool iClipProcessed; // a video clip has been processed - TBool iComplete; // processing complete => inform observer - - TBool iPrepared; // is the processor open & ready to process ? - TBool iPreparing; // is the processor being initialized ? - - -}; - - - -#endif // __STATUSMONITOR_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/thdwrap.h --- a/videoeditorengine/vedengine/videoprocessor/inc/thdwrap.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,393 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header for thdwrap.cpp. -* -*/ - - - -#ifndef _MTXWRAP_H_ -#define _MTXWRAP_H_ - -#include "nrctyp32.h" - -typedef void *thdMutex_t; -typedef void *thdSyncObject_t; -typedef void *array_t; -typedef void *thdParamData_t; - - -#define THD_INFINITE -1 -#define THD_TIMEOUT -1 -#define THD_MESSAGE -2 - -/* If THD_DS not defined, define it as nothing */ -#ifndef THD_DS -#define THD_DS -#endif - -#if defined(__MARM__) && !defined(__stdcall) -#define __stdcall -#endif - -/* - * Structs and typedefs - */ - -/* This type is used in thdBeginThreadSync to pass the address - of the thread main function. */ -typedef unsigned ( __stdcall *thdMainFunction_t )( void * ); - - -/****************************************************************************\ -* -* Function: thdMutex_t thdCreateMutex( void ); -* -* Description: Allocates a mutex handle -* -* Returns: Newly created mutex -* -\****************************************************************************/ - -THD_DS thdMutex_t thdCreateMutex( void ); - -/****************************************************************************\ -* -* Function: int thdDestroyMutex( thdMutex_t handle ); -* -* Description: Deallocates a mutex handle -* -* Input: thdMutex_t handle Handle to be freed -* -* Returns: zero on success, negative on error -* -\****************************************************************************/ - -THD_DS int thdDestroyMutex( thdMutex_t handle ); - -/****************************************************************************\ -* -* Function: int thdEnterMutex( thdMutex_t handle ); -* -* Description: Enters a mutex -* When a mutex has been entered, it can not be entered by -* any other thread before the first one has left it. -* One thread can enter mutex many times ("nested"), but it -* must always leave the mutex the exactly same number of times. -* -* Input: thdMutex_t handle Mutex handle to enter -* -* Returns: zero on success, negative on error -* -\****************************************************************************/ - -THD_DS int thdEnterMutex( thdMutex_t handle ); - -#if(_WIN32_WINNT >= 0x0400) -/****************************************************************************\ -* -* Function: int thdTryMutex( thdMutex_t handle ); -* -* Description: Tries to enter a mutex, but does not wait to be able to enter -* Note: only available with WinNT 4.0 or above -* -* Input: thdMutex_t handle Mutex handle to enter -* -* Returns: 1 if entered, 0 if not entered, negative on error -* -\****************************************************************************/ - -THD_DS int thdTryMutex( thdMutex_t handle ); -#endif - -/****************************************************************************\ -* -* Function: int thdLeaveMutex( thdMutex_t handle ); -* -* Description: Leaves a mutex -* -* Input: thdMutex_t handle Mutex handle to leave -* -* Returns: zero on success, negative on error -* -\****************************************************************************/ - -THD_DS int thdLeaveMutex( thdMutex_t handle ); - -/****************************************************************************\ -* -* Function: thdBeginThreadSync -* thdCreateThreadSync -* -* Description: Creates a thread with synchronization; ensures that a message -* queue exists for the thread immediately after returning from -* this function. The main function of the created thread MUST -* include a call to thdEnterThreadSync. -* -* The difference between thdBeginThreadSync and -* thdCreateThreadSync is the type of the routine parameter. -* If the function is passed as a data pointer (as in -* thdCreateThreadSync), the compiler should generate -* a warning since this is against ANSI-C. Thus, the usage of -* thdBeginThreadSync should be avoided. -* -* Input: routine Pointer to thread main function -* param Free-form parameter given to thread -* id Pointer to int to receive thread id -* -* Returns: Handle of the newly created thread, NULL for error -* -\****************************************************************************/ - -THD_DS void * thdBeginThreadSync( thdMainFunction_t routine, - void *param, u_int32 *id ); -THD_DS void * thdCreateThreadSync( void *routine, void *param, - u_int32 *id ); - -/****************************************************************************\ -* -* Function: void *thdEnterThreadSync( void *param ); -* -* Description: Creates the message queue and signals the parent thread -* the completition. -* -* Input: void *param The parameter passed to the main -* -* Returns: The free-form parameter that was given to thdCreateThreadSync -* -\****************************************************************************/ - -THD_DS void * thdEnterThreadSync( void *param ); - -/****************************************************************************\ -* -* Function: void thdExitThread( int exitcode ); -* -* Description: Terminates the current thread with given exit code. -* Note! This function does not return. -* (WIN32) :: If thread does not call this function, small -* memory leaks will result -* -* Input: int exitcode Exit code for thread -* -\****************************************************************************/ - -THD_DS void thdExitThread( int exitcode ); - -/****************************************************************************\ -* -* Function: void thdSetThreadPriority( void *thread, int priority ); -* -* Description: Sets thread's priority -* -* Input: void *thread Thread to set -* int priority Priority number, from -3 to 3, -* 0 is normal priority. -* -\****************************************************************************/ - -THD_DS void thdSetThreadPriority( void *thread, int priority ); - -/****************************************************************************\ -* -* Function: void thdTerminateThread( void *thread, int exitcode ); -* -* Description: Terminates a thread immediately -* -* Input: void *thread Thread handle -* int exitcode Exit code for the thread -* -\****************************************************************************/ - -THD_DS void thdTerminateThread( void *thread, int exitcode ); - -/****************************************************************************\ -* -* Function: thdSyncObject_t thdCreateEvent( void ); -* -* Description: Creates an event -* -* Returns: Handle for the event -* -\****************************************************************************/ - -THD_DS thdSyncObject_t thdCreateEvent( void ); -THD_DS thdSyncObject_t thdCreateEvent( array_t *array ); - -/****************************************************************************\ -* -* Function: void thdDestroyEvent( thdSyncObject_t event ); -* -* Description: Destroys an event -* -* Input: thdSyncObject_t event Event to be destroyed -* -\****************************************************************************/ - -THD_DS void thdDestroyEvent( thdSyncObject_t event ); - -/****************************************************************************\ -* -* Function: void thdSetEvent( thdSyncObject_t event ); -* -* Description: Sets (signals) an event -* -* Input: thdSyncObject_t event Event to set -* -\****************************************************************************/ - -THD_DS void thdSetEvent( thdSyncObject_t event ); - -/****************************************************************************\ -* -* Function: void thdResetEvent( thdSyncObject_t event ); -* -* Description: Resets (unsignals) an event -* -* Input: thdSyncObject_t event Event to reset -* -\****************************************************************************/ - -THD_DS void thdResetEvent( thdSyncObject_t event ); - -/****************************************************************************\ -* -* Function: int thdWaitSyncObject( thdSyncObject_t event, int time ); -* -* Description: Waits until the given event is signaled, or time limit elapses -* -* Input: thdSyncObject_t event Event handle to wait -* int time Time limit in ms, -1 = infinite -* -* Returns: Zero if event was signaled, -1 if time limit elapsed -* -\****************************************************************************/ - -THD_DS int thdWaitSyncObject( thdSyncObject_t event, int time ); - -/****************************************************************************\ -* -* Function: int thdWaitManySyncObjects( thdSyncObject_t *events, int count, int time ); -* -* Description: Waits until at least one of the given events is signaled, or -* time limit elapses -* -* Input: thdSyncObject_t *events Pointer to array of event handles -* int count Number of event handles in array -* int time Time limit in ms, -1 = infinite -* -* Returns: Index of event signaled (>=0) or -* THD_TIMEOUT if time limit elapsed -* -\****************************************************************************/ - -THD_DS int thdWaitManySyncObjects( thdSyncObject_t *events, int count, int time ); - -/****************************************************************************\ -* -* Function: int thdWaitManySyncObjectsOrMessage( thdSyncObject_t *events, int count, int time ) -* -* Description: Waits until at least one of the given synchronization objects -* is signaled, or the time limit elapses, or a message is posted -* to thread's message queue. -* You can give NULL to events and zero to count to only wait -* for messages. -* -* Input: thdSyncObject_t *events Pointer to array of sync. object handles -* int count Number of handles in array -* int time Time limit in ms, -1 = infinite -* -* Returns: Index of event signaled (>=0) -* THD_TIMEOUT if time limit elapsed -* THD_MESSAGE if a message was posted -* -\****************************************************************************/ - -THD_DS int thdWaitManySyncObjectsOrMessage( thdSyncObject_t *events, int count, int time ); - -/****************************************************************************\ -* -* Function: thdSyncObject_t thdThreadToEvent( void *thread ); -* -* Description: Converts a thread handle returned by thdCreateThread into an -* event handle that can be waited for with thdWaitSyncObject -* This event handle must not be closed! -* -* Input: void *thread Thread handle -* -* Returns: Event handle -* -\****************************************************************************/ - -THD_DS thdSyncObject_t thdThreadToEvent( void *thread ); - -/****************************************************************************\ -* -* Function: thdSyncObject_t thdCreateSemaphore( int initcount, int maxcount ); -* -* Description: Creates a semaphore object. -* -* Input: int initcount Initial count for semaphore -* int maxcount Maximum count -* -* Returns: Handle of the created semaphore -* -\****************************************************************************/ - -THD_DS thdSyncObject_t thdCreateSemaphore( int initcount, int maxcount ); -THD_DS thdSyncObject_t thdCreateSemaphore( int initcount, int maxcount, array_t *array ); - -/****************************************************************************\ -* -* Function: void thdDestroySemaphore( thdSyncObject_t handle ); -* -* Description: Destroys a semaphore object -* -* Input: thdSyncObject_t handle Handle to close -* -\****************************************************************************/ - -THD_DS void thdDestroySemaphore( thdSyncObject_t handle ); - -/****************************************************************************\ -* -* Function: void thdReleaseSemaphore( thdSyncObject_t handle, int count ); -* -* Description: Releases a semaphore -* -* Input: thdSyncObject_t handle Semaphore to release -* int count Release count -* -* Returns: Previous count -* -\****************************************************************************/ - -THD_DS int thdReleaseSemaphore( thdSyncObject_t handle, int count ); - -/****************************************************************************\ -* -* Function: void thdSleep( int time ); -* -* Description: Enters an efficient wait state for a specified time -* -* Input: int time Time to sleep, in milliseconds -* -\****************************************************************************/ - -THD_DS void thdSleep( int time ); - -#endif -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/videodecoder.h --- a/videoeditorengine/vedengine/videoprocessor/inc/videodecoder.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Definition for CVideoDecoder, an abstract base class for all video -* decoders. -* -*/ - - - -#ifndef __VIDEODECODER_H__ -#define __VIDEODECODER_H__ - - -// INCLUDES - -#ifndef __DECODER_H__ -#include "decoder.h" -#endif - - -// CLASS DEFINITIONS - -// Decoder base class -class CVideoDecoder : public CDecoder -{ -public: - CVideoDecoder(TInt aPriority=EPriorityStandard) : CDecoder(aPriority) {}; - // CDataProcessor provides a virtual destructor -}; - - -#endif // __VIDEODECODER_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/videoprocessor.h --- a/videoeditorengine/vedengine/videoprocessor/inc/videoprocessor.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1003 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Header file for video processor. -* -*/ - - -#ifndef __VIDEOPROCESSOR_H__ -#define __VIDEOPROCESSOR_H__ - -// INCLUDES -#ifndef _H263DAPI_H_ -#include "h263dapi.h" -#endif - -#include "videodecoder.h" -#include "vedVideoclip.h" - - -// FORWARD DECLARATIONS -class CActiveQueue; -class CStatusMonitor; -class CMovieProcessorImpl; -class CVideoEncoder; -class CVedH263Dec; -class CMPEG4Timer; -class CVedAVCEdit; - -#include "CTRTranscoderObserver.h" -#include "CTRTranscoder.h" -#include "CTRCommon.h" -#include -#include "CTRVideoPictureSink.h" - -enum TTransitionColor -{ - EColorNone = 0, - EColorBlack, - EColorWhite, - EColorTransition -}; - -enum TTransitionPosition -{ - EPositionNone = 0, - EPositionStartOfClip, - EPositionEndOfClip -}; - - -// Threshold for using postfilter. Assumption is that CIF is encoded with high bitrate => no need for postfilter -const TInt KThrWidthForPostFilter = 176; - -// CLASS DEFINITIONS - - -// Observer class for thumbnail generation -class MThumbnailObserver -{ -public: - void NotifyThumbnailReady(TInt aError); -}; - -class MTimerObserver -{ -public: - virtual void MtoTimerElapsed(TInt aError) = 0; - -}; - - -// Timer class to use when waiting for encoding to complete -class CCallbackTimer : public CActive -{ - -public: - - /** - * Two-phased constructor. - */ - static CCallbackTimer* NewL(MTimerObserver& aObserver); - - /** - * Destructor. - */ - ~CCallbackTimer(); - -public: - - /** - * Set timer - * - * @param aDuration Duration - */ - void SetTimer(TTimeIntervalMicroSeconds32 aDuration); - - - /** - * Query whether timer is active - * - * @return TRUE if timer is pending - */ - inline TBool IsPending() { return iTimerRequestPending; } - - /** - * Cancel timer - */ - void CancelTimer(); - -private: - - /** - * C++ default constructor. - */ - CCallbackTimer(MTimerObserver& aObserver); - - /** - * Symbian 2nd phase constructor - */ - void ConstructL(); - -protected: - - /** - * From CActive. - * @param - * @return void - */ - void RunL(); - - /** - * From CActive. - * @param - * @return void - */ - void DoCancel(); - - /** - * From CActive. - * @param - * @return void - */ - TInt RunError(TInt aError); - - -private: // Data - - MTimerObserver& iObserver; - - RTimer iTimer; - - TBool iTimerCreated; - TBool iTimerRequestPending; -}; - - - -class CVideoProcessor : public CVideoDecoder, public MVideoRenderer, - public MTRTranscoderObserver, public MTRVideoPictureSink, - public MCMRMediaSink, public MTimerObserver - -{ -public: // constants - enum TErrorCode - { - EInternalAssertionFailure = -1400, - EDecoderFailure = -1401 - }; - - enum TTimingSource - { - ETemporalReference = 0, - ETimeStamp - }; - - enum TDecoderFrameOperation - { - EDecodeAndWrite = 1, - EDecodeNoWrite, - EWriteNoDecode, - ENoDecodeNoWrite - }; - - enum TTranscoderMode - { - EDecodeOnly = 1, - EFull, - EFullWithIM, - EUndefined - }; - -public: // Data structures - struct TStreamParameters - { - TUint iWidth; - TUint iHeight; - TInt64 iPicturePeriodNsec; - TUint iIntraFrequency; - TUint iReferencePicturesNeeded; // 0 = disable RPS - TUint iNumScalabilityLayers; - TUint iLayerFrameRates[8]; // frames per 256 sec - TTimingSource iTiming; - }; - - -private: // Data structures - - // structure to store information about frames - // in decoding/transcoding progress - struct TFrameInformation - { - TTranscoderMode iTranscoderMode; - - TInt iFrameNumber; - TInt64 iTimeStamp; // timestamp in ticks - TBool iEncodeFrame; // ETrue if frame will be encoded - TBool iKeyFrame; - - // transition frame info - TBool iTransitionFrame; // is this a transition frame? - TBool iFirstTransitionFrame; // is this the first transition frame in this instance? - TTransitionPosition iTransitionPosition; - TTransitionColor iTransitionColor; - TInt iTransitionFrameNumber; - - TBool iModificationApplied; // has intermediate modification been done ? - TBool iRepeatFrame; // ETrue for second instance of a color transition frame - - }; - -public: // New functions - - /** - * Two-phased constructor. - * - * @param anInputQueue Input active queue - * @param aStreamParameters Stream parameters - * @param aProcessor Video processor object - * @param aStatusMonitor Status monitor object - * @param aEncoder Video encoder object - * @param aPriority Active object priority - */ - - static CVideoProcessor* NewL(CActiveQueue *anInputQueue, - CVideoProcessor::TStreamParameters *aStreamParameters, - CMovieProcessorImpl* aProcessor, - CStatusMonitor *aStatusMonitor, - CVedAVCEdit *aAvcEdit, - TBool aThumbnailMode, - TInt aPriority=EPriorityStandard); - - - /** - * Destructor. - */ - ~CVideoProcessor(); - -public: // Functions from base classes - - /** - * From CActive Active object running method - */ - void RunL(); - - /** - * From CActive Active object cancelling method - */ - void DoCancel(); - - /** - * From CActive Active object error handling method - */ - TInt RunError(TInt aError); - - /** - * From CDecoder Start video decoding - */ - void Start(); - - /** - * From CDecoder Stop video decoding - */ - void Stop(); - - /** - * From CDataProcessor Notifies that input stream has ended - */ - void StreamEndReached(TAny *aUserPointer); - - /** - * From CDataProcessor Notifies that new input queue blocks are available - */ - void InputDataAvailable(TAny *aUserPointer); - - /** - * From MVideoRenderer Renders a decoded frame - */ - TInt RenderFrame(TAny* aFrame); - - /** - * From MTRTranscoderObserver - */ - void MtroInitializeComplete(TInt aError); - - /** - * From MTRTranscoderObserver - */ - void MtroFatalError(TInt aError); - - /** - * From MTRTranscoderObserver - */ - void MtroReturnCodedBuffer(CCMRMediaBuffer* aBuffer); - - /** - * From MTRTranscoderObserver - */ - void MtroSetInputFrameRate(TReal& aRate); - - /** - * From MTRTranscoderObserver - */ - void MtroAsyncStopComplete(); - - /** - * From MTRTranscoderObserver - */ - void MtroSuspend(); - - /** - * From MTRTranscoderObserver - */ - void MtroResume(); - - /** - * From MTRVideoPictureSink - */ - void MtroPictureFromTranscoder(TTRVideoPicture* aPicture); - - /** - * From MCMRMediaSink - */ - void WriteBufferL(CCMRMediaBuffer* aBuffer); - - /** - * From MCMRMediaSink - */ - TInt SetVideoFrameSize(TSize aSize); - - /** - * From MCMRMediaSink - */ - TInt SetAverageVideoBitRate(TInt aBitRate); - - /** - * From MCMRMediaSink - */ - TInt SetMaxVideoBitRate(TInt aBitRate); - - /** - * From MCMRMediaSink - */ - TInt SetAverageAudioBitRate(TInt aBitRate); - - /** - * From MTimerObserver - */ - void MtoTimerElapsed(TInt aError); - -public: // New functions - - /** - * Generates a thumbnail image - * - * @param aYUVDataPtr For returning the thumbnail - * @param aFrameIndex Frame index of the thumbnail image - * -1 means best thumbnail is generated - * @param aStartFrameIndex Frame index of the start frame (last intra before thumbnail) - * - * @return Error code - */ - - /** - * Starts generating a thumbnail image - * - * @param aThumbObserver Observer class - * @param aFrameIndex Frame index of the thumbnail image - * -1 means best thumbnail is generated - * @param aStartFrameIndex Frame index of the start frame (last intra before thumbnail) - * @param aFactor Pointer to transcode factor structure - * - * @return Error code - */ - TInt ProcessThumb(MThumbnailObserver* aThumbObserver, TInt aFrameIndex, - TInt aStartFrameIndex, TVedTranscodeFactor* aFactor); - - TInt FetchThumb(TUint8** aYUVDataPtr); - - /** - * Gets the frame number of the current frame - * - */ - TInt GetFrameNumber() { return iFrameNumber; }; - - /** - * Keeps track whether the clip was resolution transcoded - * - */ - inline TInt GetChangeResolution() const { return iFullTranscoding; }; - - /* - * Checks whether the resynch bit is set if set then resets to zero - * - * @return TBool - */ - TBool CheckVosHeaderL(TPtrC8& aBuf); - - /** - * Gets the transcode factor from the current clip - * @param aFactor For returning the transcode factor - * @return error code - */ - TInt GetTranscodeFactorL(TVedTranscodeFactor& aFactor); - - /* - * Writes a delayed frame, i.e. a frame which has been buffered - * since transcoder has unprocesessed frames that must be written - * before this frame - */ - void WriteDelayedFrameL(); - - /* - * Checks if there are any frames waiting to be encoded inside transcoder - * @return TBool - */ - TBool IsEncodeQueueEmpty(); - - /* - * Calculates encoding delay based on what kind of frame is - * next in the encoding queue - * - * @return Delay in microseconds - */ - TInt GetEncodingDelay(); - - /* - * Checks if the next frame in processing queue - * is being encoded - * - * @return TBool result - */ - TBool IsNextFrameBeingEncoded(); - - /* - * Gets MPEG-4 VOS header size in bytes (from encoder) - * - * @return TInt VOS size - */ - TInt GetVosHeaderSize(); - -private: // internal methods - - /** - * C++ default constructor. - * - * @param anInputQueue Input active queue - * @param aStreamParameters Stream parameters - * @param aProcessor Video processor object - * @param aStatusMonitor Status monitor object - * @param aEncoder Video encoder object - * @param aPriority Active object priority - */ - CVideoProcessor(CActiveQueue *anInputQueue, - TStreamParameters *aStreamParameters, - CMovieProcessorImpl* aProcessor, - CStatusMonitor *aStatusMonitor, - CVedAVCEdit *aAvcEdit, - TBool aThumbnailMode, - TInt aPriority); - - - /** - * Symbian 2nd phase constructor - */ - void ConstructL(); - - /** - * Processes one input video frame - * - * @return ETrue If the current clip has been - * processed entirely, EFalse if not - */ - TBool ProcessFrameL(); - - /** - * Processes the second frame of a color transition double frame - */ - TBool Process2ndColorTransitionFrameL(); - - /** - * Read one frame from input queue to internal buffer - * - * @return ETrue if a complete frame was read, EFalse otherwise. - */ - TInt ReadFrame(); - - /** - * Reads a H.263 frame from input queue to internal buffer - * - * @return ETrue if a complete frame was read, EFalse otherwise. - */ - TBool ReadH263Frame(); - - /** - * Reads a MPEG-4 frame from input queue to internal buffer - * - * @return ETrue if a complete frame was read, EFalse otherwise. - */ - TBool ReadMPEG4Frame(); - - /** - * Reads an AVC frame from input queue to internal buffer - * - * @return ETrue if a complete frame was read, EFalse otherwise. - */ - TBool ReadAVCFrame(); - - /** - * Checks if a frame has "good" or "legible" quality - * - * @param aYUVDataPtr Pointer to the frame to be checked - * - * @return 1 if frame quality is OK, 0 otherwise - */ - TInt CheckFrameQuality(TUint8* aYUVDataPtr); - - /** - * Apply color effect on a frame - * - * @param aColorEffect Effect to be used - * @param aYUVDataPtr Pointer to the frame - * @param aColorToneYUV for extracting the UV values - * @return void - */ - void ApplySpecialEffect(TInt aColorEffect, TUint8* aYUVDataPtr, - TInt aColorToneU, TInt aColorToneV); - - /** - * Convert frame operation enumeration to TInt - * - * @param aFrameOperation Frame operation - * - * @return Frame operation as TInt - */ - TInt TFrameOperation2TInt(TDecoderFrameOperation aFrameOperation); - - /** - * Convert color effect enumeration to TInt - * - * @param aColorEffect Color effect - * - * @return Color effect as TInt - */ - TInt TColorEffect2TInt(TVedColorEffect aColorEffect); - - /** - * Determines transition effect parameters - * - * @param aTransitionEffect Output: ETrue if transition effect is to be applied - * @param aStartOfClipTransition ETrue if starting transition is to be applied - * @param aEndOfClipTransition ETrue if ending transition is to be applied - * @param aStartTransitionColor Color for starting transition - * @param aEndTransitionColor Color for ending transition - * - * @return Error code - */ - TInt DetermineClipTransitionParameters(TInt& aTransitionEffect,TInt& aStartOfClipTransition, - TInt& aEndOfClipTransition,TTransitionColor& aStartTransitionColor,TTransitionColor& aEndTransitionColor); - - - /** - * Applies fading transition effect to YUV frame - * - * @param aYUVPtr Pointer to the frame - * @param aTransitionPosition 1 = start transition, 2 = end transition - * @param aTransitionColor Transition color to be used (EColorWhite/EColorBlack/EColorTransition) - * @param aTransitionFrameNumber ordinal number of transition frame (0 - (number of transition frames - 1)) - * - * @return void - */ - void ApplyFadingTransitionEffect(TUint8* aYUVPtr, TTransitionPosition aTransitionPosition, - TTransitionColor aTransitionColor, TInt aTransitionFrameNumber); - - /** - * Applies blending transition effect between YUV frames - * - * @param aYUVPtr1 Pointer to the frame 1 - * @param aYUVPtr2 Pointer to the frame 2 - * @param aRepeatFrame True for the second instance of two frames to be blended - * @param aTransitionFrameNumber ordinal number of transition frame (0 - (number of transition frames - 1)) - * - * @return void - */ - void ApplyBlendingTransitionEffect(TUint8* aYUVPtr1,TUint8* aYUVPtr2, TInt aRepeatFrame, - TInt aTransitionFrameNumber); - - - /** - * Applies sliding transition effect between YUV frames - * - * @param aYUVPtr1 Pointer to the frame 1 - * @param aYUVPtr2 Pointer to the frame 2 - * @param aRepeatFrame True for the second instance of two frames to be blended - * @param aTransitionFrameNumber ordinal number of transition frame (0 - (number of transition frames - 1)) - * - * @return void - */ - void ApplySlidingTransitionEffect(TUint8* aYUVPtr1,TUint8* aYUVPtr2, TVedMiddleTransitionEffect aVedMiddleTransitionEffect, - TInt aRepeatFrame, TInt aTransitionFrameNumber); - - /** - * Get the start transition info of the next clip - * - * @return void - */ - void GetNextClipTransitionInfo(); - - /* - * Resolution Transcoder - * Determine if the resolution transcoding will apply to the current clip - * - */ - TBool DetermineResolutionChange(); - - /* - * - * Determine if frame rate needs to be changed for the current clip - * - */ - TBool DetermineFrameRateChange(); - - /* - * - * Determine if bitrate needs to be changed for the current clip - * - */ - TBool DetermineBitRateChange(); - - /* - * Calculate the duration of current frame - * - * @param aFrameNumber frame number - * - * @return Frame duration in ticks - */ - TInt GetFrameDuration(TInt aFrameNumber); - - /* - * Decode frame using vedh263decoder - * - * @param aOperation Operation - * @param aModeChanged ETrue if compressed domain transcoding is neede - * @param aFrameSizeInBytes Return value, coded output frame size in bytes - * @param aVosHeaderSize Return value, size of VOS header in bytes - */ - void DecodeFrameL(TInt aOperation, TBool aModeChanged, TInt& aFrameSizeInBytes); - - /* - * Create and initialize transcoder - * - * @param aInputType Input video type - * @param aMode Transcoder operational mode to be used - * - */ - void CreateAndInitializeTranscoderL(TVedVideoType aInputType, CTRTranscoder::TTROperationalMode aMode); - - /* - * Determines if compressed domain transcoding is needed - * - */ - TBool GetModeChangeL(); - - /* - * Processes a thumbnail frame - * - * @param aFirstFrame ETrue if the first thumbnail frame is being processed - */ - void ProcessThumb(TBool aFirstFrame); - - /* - * Calculate the number of transition frames - * - * @param aStartCutTime Start cut time - * @param aEndCutTime End cut time - */ - void GetNumberOfTransitionFrames(TTimeIntervalMicroSeconds aStartCutTime, - TTimeIntervalMicroSeconds aEndCutTime); - - /* - * Set parameters needed to process a transition frame - * - * @param aIncludedFrameNumber Ordinal counting from the first included frame number - * @param aDecodeFrame ETrue if this frame must be decoded in order to apply end transition - */ - void SetTransitionFrameParams(TInt aIncludedFrameNumber, TBool& aDecodeFrame); - - /* - * Sets output codec parameters - * - * aMimeType Output mime type - */ - void SetOutputVideoCodecL(const TPtrC8& aMimeType); - - /* - * Generates bitstream for a not coded frame - * to be used in color transitions - */ - void GenerateNotCodedFrameL(); - - /* - * Reads a frame from input queue and writes it to transcoder - * - */ - void ReadAndWriteThumbFrame(); - - /* - * Does thumbnail finalization, stops processing and informs observer - * - * aError Error code for observer - */ - void FinalizeThumb(TInt aError); - - /* - * Writes a frame to output file - * - * @param aBuf Buffer containing the frame - * @param aDurationInTicks Frame duration in ticks - * @param aFrameNumber Frame number - * @return ETrue if clip end was written - */ - TBool WriteFrameToFileL(TPtr8& aBuf, TInt aDurationInTicks, TInt aFrameNumber); - - /* - * Writes a frame to transcoder - * - * @param aFrameNumber Frame number - * @param aKeyFrame ETrue for a keyframe - * @param aVolHeaderInBuffer ETrue if frame buffer contains MPEG-4 VOL header - */ - void WriteFrameToTranscoderL(TInt aFrameNumber, TBool aKeyFrame, TBool aVolHeaderInBuffer); - - /* - * Handles a decoded thumbnail frame received from transcoder - * - * @param aPicture Pointer to received picture - */ - void HandleThumbnailFromTranscoder(TTRVideoPicture* aPicture); - - /* - * Handles a decoded "decode-only" frame received from transcoder - * - * @param aPicture Pointer to received picture - * @param aIndex Index of decoded frame to iFrameInfoArray - */ - void HandleDecodeOnlyFrameFromTranscoder(TTRVideoPicture* aPicture, TInt aIndex); - - /* - * Handles a decoded transition frame (intermediate frame) received from transcoder - * - * @param aPicture Pointer to received picture - * @param aIndex Index of decoded frame to iFrameInfoArray - */ - void HandleTransitionFrameFromTranscoder(TTRVideoPicture* aPicture, TInt aIndex); - - /* - * Inserts AVC/MPEG-4 decoder specific info data in front of internal coded frame buffer - * - */ - void InsertDecoderSpecificInfoL(); - -private: // internal constants - enum TDataFormat - { - EDataUnknown = 0, - EDataH263, - EDataMPEG4, - EDataAVC - }; - - -private: // data - CActiveQueue *iQueue; // input data queue - TBool iReaderSet; // have we been set as reader? - CStatusMonitor *iMonitor; // status monitor object - CMovieProcessorImpl *iProcessor; - - CVedH263Dec *iDecoder; // H.263/MPEG-4 decoder - - TUint iVideoWidth, iVideoHeight; // video picture dimensions - TInt64 iPicturePeriodNsec; // one PCF tick period in nanoseconds - TDataFormat iDataFormat; // the stream data format - TUint iIntraFrequency; // intra picture frequency (intras per 256 sec) - TUint iReferencePicturesNeeded; // number of reference pictures needed - - TBool iFirstFrameFlag; // flag for decoder: is this the first frame? - - TDecoderFrameOperation iFrameOperation; - - TInt iNumberOfIncludedFrames; - - TBool iDecoding; // are we decoding? - TBool iStreamEnd; // has stream end been reached? - TBool iEncoderResetPending; // is the encoder being reseted - - TPtr8 *iBlock; // queue block - TUint iBlockPos; // current block position - TUint8 *iDataBuffer; // data buffer for the current compressed frame - TUint iBufferLength; // buffer total length - TUint iDataLength; // amount of data in buffer - TUint iCurrentFrameLength; // the length of the current frame in the buffer - - TUint8 *iFrameBuffer; // Concatenated YUV data for decoded frame - - TUint8 *iOutVideoFrameBuffer; // data buffer for the output compressed frame - TInt iOutVideoFrameBufferLength; // buffer total length - TInt iOutDataLength; // amount of data in buffer - TPtr8 iWriteDes; // writing descriptor for encoding - TInt iFrameNumber; // current frame number - TInt iNumberOfFrames; // no. of frames in current clip - TInt iPreviousFrameIncluded; // ETrue if previous frame was included in output movie - TInt iTrPrevious; - - // transition effects - TInt iTransitionEffect; // is transition effect to be applied? - TInt iStartOfClipTransition; // is starting transition effect to be applied ? - TInt iEndOfClipTransition; // is ending transition effect to be applied ? - - TInt iStartNumberOfTransitionFrames; // number of frames in transition - TInt iEndNumberOfTransitionFrames; // number of frames in transition - TInt iTransitionFrameNumber; - TInt iNextTransitionNumber; - - TInt iFirstFrameInRange; // is the current frame the first to be included in output movie - TInt iFirstIncludedFrameNumber; // number of first included frame - TTransitionColor iStartTransitionColor; // color for starting transition - TTransitionColor iEndTransitionColor;// color for ending transition - - // number of preceding I frame (for end-of-clip trans.)this number is relative of start-of-clip - TInt iLastIntraFrameBeforeTransition; //The last intra frame before transition effect takes place. - - TTimingSource iTiming; - - // for transition effect - blending and sliding - TInt iFrameDuration; - TBool iRepeatFrame; - TInt64 iTimeStamp; - TUint8 *iOrigPreviousYUVBuffer; - TUint8 *iColorTransitionBuffer; - - CMPEG4Timer *iMPEG4Timer; // Stores MPEG-4 timing information - - CTRTranscoder *iTransCoder; - CCMRMediaBuffer* iMediaBuffer; - - TBool iTranscoderInitPending; // is transcoder init in progress ? - TBool iDecodePending; // is decode in progress ? - TBool iTranscoderStarted; // has transcoder been started ? - TBool iFrameToEncode; // should current frame be encoded ? (: could be changed to local for ProcessFrame) - - TBool iTransitionFrame; - TBool iFirstTransitionFrame; - TTransitionPosition iTransitionPosition; - TTransitionColor iTransitionColor; - - // for color toning - TInt iFirstFrameQp; // QP for first MPEG4 frame, used for color toning - - TBool iFullTranscoding; // Flag to indicate whether current clip needs to be fully - // transcoded (decode & encode) - - TBool iThumbnailMode; // True if we are generating a thumbnail frame - - TInt iThumbFrameIndex; // index of thumbnail to be generated, >= 0 means a specific frame, - // < 0 means the first "good" or "legible" frame - TInt iThumbFrameNumber; - TInt iFramesToSkip; // for searching a good thumbnail - - MThumbnailObserver* iThumbObserver; // observer for thumbnail operation - - HBufC8* iDecoderSpecificInfo; // decoder specific info header read from input stream, to be sent to transcoder - TBool iDecoderSpecificInfoSent; // True if decoder specific info has been sent to transcoder - - HBufC8* iOutputVolHeader; // VOL header read from encoder, to be inserted in the first - // encoded frame buffer - - TBool iOutputVolHeaderWritten; // True if VOL/AVC header has been written to output bitstream - - RArray iFrameInfoArray; // array for storing info about frames in progress - - TTranscoderMode iTranscoderMode; // current transcoder operation mode - - // used & max frame size, and info if size can be arbitrary - TSize iMaxOutputResolution; - TBool iArbitrarySizeAllowed; - - // max allowed frame rate - TReal32 iMaxOutputFrameRate; - - // target and max allowed bit rate - TInt iOutputBitRate; - TInt iMaxOutputBitRate; - - // Mime type for encoded data - TBuf8<256> iOutputMimeType; - - TBool iDelayedWrite; // True if a frame has to be stored for later writing since - // there are frames inside the transcoder that have to be written - // before this frame - HBufC8* iDelayedBuffer; // buffer for storing the frame - TInt64 iDelayedTimeStamp; // timestamp - TBool iDelayedKeyframe; // is it a keyframe - - TInt iTimeStampIndex; // index for reading stored timestamps in case of color transition - TBool iFirstColorTransitionFrame; // True if we are processing the first frame of a - // 'doubled' frame in color transitions - - TInt iTimeStampOffset; // offset to be added to timestamps, got from processor - - CCallbackTimer* iTimer; // timer for waiting encoding to complete - - TBool iStreamEndRead; - - TBool iProcessingComplete; - - TInt iInputMPEG4ProfileLevelId; // profile-level id for MPEG-4 input - - // Timer timeout, depends on codec and resolution - TUint iMaxEncodingDelay; - - TInt iNumThumbFrameSkips; // number of frame skip cycles done to get a - // a good thumbnail - - TTimeIntervalMicroSeconds iPreviousTimeStamp; // timestamp of previous frame - - TInt iSkippedFrameNumber; // frame number of skipped frame - - TInt64 iCutInTimeStamp; // timestamp of cut-in point, needed in color transitions - - TBool iDecodingSuspended; // flag for suspended decoding - - HBufC8* iNotCodedFrame; // buffer for not coded frame - - TInt iInputTimeIncrementResolution; // MPEG-4 time increment resolution from input clip - - TBool iFirstFrameAfterTransition; // True for first frame after start transition - - TBool iFirstRead; // True for first read frame - - TBool iThumbDecoded; // flag for indicating when a thumb has been decoded, - // needed in AVC thumbnail generation - - TInt iInputAVCLevel; // level of input AVC clip - - TInt iFrameLengthBytes; // number of bytes used for NAL length in input - TInt iThumbFramesToWrite; // number of thumb frames to write to transcoder - - CVedAVCEdit* iAvcEdit; // AVC editing instance - - TBool iEncodeUntilIDR; // Flag for encoding until IDR - - TBool iIsThumbFrameBeingCopied; // True if thumbnail frame has been sent for - // decoding, but MtroReturnCodedBuffer hasn't been called - - TInt iModifiedFrameNumber; // frame number modification for AVC decoder, - // used with color transitions - - TInt iMaxItemsInProcessingQueue; // Maximum number of frames kept in transcoder - // processing queue - - TInt iLastWrittenFrameNumber; // number of last written frame - - TInt iDelayedFrameNumber; // number of delayed frame - - TBool iInitializing; // True when initialisation is ongoing - TVedVideoBitstreamMode iInputStreamMode; //MPEG-4 bitstream mode in input clip -}; - -#endif // __VIDEOPROCESSOR_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/yuv2rgb12.h --- a/videoeditorengine/vedengine/videoprocessor/inc/yuv2rgb12.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* YUV to EColor4K colorspace converter concrete classes. -* -*/ - - - -#ifndef __YUV2RGB12_H__ -#define __YUV2RGB12_H__ - - -// INCLUDES - -#ifndef __YUVCONVERTER_H__ -#include "yuvconverter.h" -#endif - - -// CLASS DEFINITIONS - -// Normal YUV to Rgb12 with dither -class CYuv2Rgb12 : public CYuvConverter -{ -public: // CYuvConverter methods - // Constructors & destructor - CYuv2Rgb12(); - ~CYuv2Rgb12(); - void ConstructL(TUint aWidth, TUint aHeight, TUint aMaxWidth, TUint aMaxHeight); - void SetGamma(TInt aGamma); - void SetBrightnessContrast(TInt aBCIndex); - void Convert(const TUint8 *aYBuf, const TUint8 *aUBuf, - const TUint8 *aVBuf, - TUint aBufWidth, TUint aBufHeight, - TUint8 *aTarget, TUint aTargetScanlineLength); - -protected: // Data - enum - { - ESaturateOffset = 222, //saturation table offset; min value (when U == 0, Y == 0) is -222 - ESaturateLength = 476+12+ESaturateOffset //table length; max value (when U == 255, Y == 255) is 476+12(dither) - }; - TUint8 *iRgbLookupTable; // RGB clamp/gamma lookup table - TUint iWidth, iHeight, iCropWidth, iCropHeight; - TInt iGamma; - TInt iBrightnessContrast; -}; - - - - -#endif // __YUV2RGB12_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/yuv2rgb24.h --- a/videoeditorengine/vedengine/videoprocessor/inc/yuv2rgb24.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* YUV to EColor16M colorspace converter concrete classes. -* -*/ - - - -#ifndef __YUV2RGB24_H__ -#define __YUV2RGB24_H__ - - -// INCLUDES - -#ifndef __YUVCONVERTER_H__ -#include "yuvconverter.h" -#endif - - -// CLASS DEFINITIONS - -// Normal YUV to Rgb24 -class CYuv2Rgb24 : public CYuvConverter -{ -public: // CYuvConverter methods - // Constructors & destructor - CYuv2Rgb24(); - ~CYuv2Rgb24(); - void ConstructL(TUint aWidth, TUint aHeight, TUint aMaxWidth, TUint aMaxHeight); - - void SetGamma(TInt aGamma); - void SetBrightnessContrast(TInt aBCIndex); - void Convert(const TUint8 *aYBuf, const TUint8 *aUBuf, - const TUint8 *aVBuf, - TUint aBufWidth, TUint aBufHeight, - TUint8 *aTarget, TUint aTargetScanlineLength); - -protected: // Data - enum - { - ESaturateOffset = 276, // saturation table offset - ESaturateLength = 561+ESaturateOffset // table length - }; - TUint8 *iRgbLookupTable; // RGB clamp/gamma lookup table - TUint iWidth, iHeight, iCropWidth, iCropHeight; - TInt iGamma; - TInt iBrightnessContrast; -}; - - - - -#endif // __YUV2RGB24_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/inc/yuvconverter.h --- a/videoeditorengine/vedengine/videoprocessor/inc/yuvconverter.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* The YUV-to-something converter base class CYuvConverter definition. -* -*/ - - - -#ifndef __YUVCONVERTER_H__ -#define __YUVCONVERTER_H__ - - -// INCLUDES - -#ifndef __E32BASE_H__ -#include -#endif - - -// CLASS DEFINITIONS - -class CYuvConverter : public CBase -{ -public: - // CBase provides a virtual destructor - - // Second-phase constructor - virtual void ConstructL(TUint aWidth, TUint aHeight, TUint aMaxWidth, TUint aMaxHeight) = 0; - - // Set conversion gamma - virtual void SetGamma(TInt aGamma) = 0; - - // Set Brightness & Contrast setting. All yuv2rgb classes may not support. - // This might suit better than SetGamma for displays typically used in Series60 devices. - virtual void SetBrightnessContrast(TInt ) { }; - - // Do the conversion - virtual void Convert(const TUint8 *aYBuf, const TUint8 *aUBuf, - const TUint8 *aVBuf, - TUint aBufWidth, TUint aBufHeight, - TUint8 *aTarget, TUint aTargetScanlineLength) = 0; -}; - -#endif // __YUVCONVERTER_H__ - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/SizeEstimate.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/SizeEstimate.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,747 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation for size estimate. -* -*/ - - -// Include Files - -#include "SizeEstimate.h" -#include "movieprocessorimpl.h" -#include "AudSong.h" -#include "VedMovieImp.h" -#include "VedVideoClipInfoImp.h" -#include "VedVideoClipGenerator.h" -#include "vedaudiosettings.h" - - - -// An assertion macro wrapper to clean up the code a bit -#define VPASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CSizeEstimate"), CMovieProcessorImpl::EInvalidInternalState)) - -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - - -// ================= MEMBER FUNCTIONS ======================= - -// ----------------------------------------------------------------------------- -// CSizeEstimate::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CSizeEstimate* CSizeEstimate::NewL(CMovieProcessorImpl* aProcessor) - { - CSizeEstimate* self = NewLC(aProcessor); - CleanupStack::Pop(self); - return self; - } - -CSizeEstimate* CSizeEstimate::NewLC(CMovieProcessorImpl* aProcessor) - { - CSizeEstimate* self = new (ELeave) CSizeEstimate(aProcessor); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::CSizeEstimate -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CSizeEstimate::CSizeEstimate(CMovieProcessorImpl* aProcessor) - { - iProcessor = aProcessor; - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::~CSizeEstimate -// Destructor. -// ----------------------------------------------------------------------------- -// -CSizeEstimate::~CSizeEstimate() - { - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CSizeEstimate::ConstructL() - { - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::GetMovieSizeEstimateL -// Calculates file size estimate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSizeEstimate::GetMovieSizeEstimateL(const CVedMovie* aMovie, TInt& aFileSize) - { - TInt i = 0; - TInt j = 0; - - TInt videoDataSize = 0; - TInt audioDataSize = 0; - TInt video3gpSize = 0; - TInt audio3gpSize = 0; - TInt numberOfVideoFrames = 0; - - const CVedMovieImp* movie = reinterpret_cast(aMovie); - - TInt movieBitrate = movie->VideoStandardBitrate(); - if (movieBitrate < KSELowBitrateLimit) - { - // Adjust low bit rates to slightly higher - movieBitrate += KSELowBitrateIncrement; - } - - TInt numberOfVideoClips = movie->VideoClipCount(); - - // Calculate video data size from all clips - for (i = 0; i < numberOfVideoClips; i++) - { - CVedVideoClip* vedClip = movie->VideoClip(i); - TInt videoClipSize = 0; - - // Get the number of video frames in the clip - TInt videoFramesInClip = 0; - if (vedClip->Info()->Class() == EVedVideoClipClassGenerated) - { - videoFramesInClip = vedClip->Info()->Generator()->VideoFrameCount(); - } - else - { - videoFramesInClip = vedClip->Info()->VideoFrameCount(); - } - - if (videoFramesInClip <= 0) - { - // No video frames in clip, check next one - continue; - } - - if (vedClip->Info()->Class() == EVedVideoClipClassGenerated) - { - TInt startTransitionFrames = 0; - TInt endTransitionFrames = 0; - - // Get the number of transition frames in the clip - GetTransitionFrames(movie, i, startTransitionFrames, endTransitionFrames); - - // Calculate the size of the transition frames and add to video clip size - TInt transitionLength = (TInt) (1000000.0 / (TReal) movie->MaximumFramerate()) * (startTransitionFrames + endTransitionFrames); - videoClipSize += (transitionLength * movieBitrate) / 8 / 1000000; - - // Calculate the size of the non-transition frames and add to video clip size - TInt nonTransitionFrames = videoFramesInClip - startTransitionFrames - endTransitionFrames; - - if (nonTransitionFrames > 0) - { - // The first one is intra and the rest are inter frames - videoClipSize += GetGeneratedFrameSize(movie, ETrue); - videoClipSize += GetGeneratedFrameSize(movie, EFalse) * (nonTransitionFrames - 1); - } - - // Add clip size to video data size - videoDataSize += videoClipSize; - numberOfVideoFrames += videoFramesInClip; - - // All done for this clip, go to next one - continue; - } - - // Calculate the frame rate of the source clip - TReal videoClipFramerate = 1.0; - if (vedClip->Info()->Duration().Int64() != 0) - { - videoClipFramerate = (TReal) videoFramesInClip * 1000000.0 / - I64REAL(vedClip->Info()->Duration().Int64()); - } - - if (vedClip->Info()->Resolution() == movie->Resolution() && - vedClip->Info()->VideoType() == movie->VideoType() && - videoClipFramerate < (TReal) movie->MaximumFramerate() + 0.2) - { - // Clip is not transcoded => calculate the clip size using the frame sizes of the original clip - TInt64 frameTime = 0; - TInt64 videoClipCutInTime = vedClip->CutInTime().Int64(); - TInt64 videoClipCutOutTime = vedClip->CutOutTime().Int64(); - - for (j = 0; j < videoFramesInClip; j++) - { - frameTime = vedClip->Info()->VideoFrameStartTimeL(j).Int64(); - - if (frameTime < videoClipCutInTime) - { - continue; // Frame is before cut in position => check next one - } - else if (frameTime >= videoClipCutOutTime) - { - break; // Cut out position reached => no need to check frames anymore - } - - // Add frame size to video clip size - videoClipSize += vedClip->Info()->VideoFrameSizeL(j); - numberOfVideoFrames++; - } - - // Check if color effect is in use - if (vedClip->ColorEffect() != EVedColorEffectNone) - { - // Color tone effects decreases the size of the frames slightly - videoClipSize -= (TInt) ((TReal) videoClipSize * KSEBWReductionFactor); - } - } - else // Clip is transcoded - { - TInt estimatedBitrate = movieBitrate; - - // If we are transcoding a low quality clip to high quality (e.g. QCIF to VGA) - if (movieBitrate >= KSEHighBitrateLimit && - movie->Resolution().iWidth > vedClip->Info()->Resolution().iWidth * 3 && - videoClipFramerate < (TReal) movie->MaximumFramerate() * 0.5 + 0.2) - { - // Halve the estimated bit rate if the source frame rate is - // roughly less than half of the maximum frame rate - estimatedBitrate = estimatedBitrate >> 1; - } - - // Clip frame rate can be decreased if necessary but not increased - TReal estimatedFramerate = Min(videoClipFramerate, (TReal) movie->MaximumFramerate()); - - // Calculate the clip length - TInt64 videoClipLength = vedClip->CutOutTime().Int64() - vedClip->CutInTime().Int64(); - - // Calculate clip size - videoClipSize = I64INT((videoClipLength * (TInt64) estimatedBitrate) / 8 / 1000000); - - // Calculate the number of frames included between cut in and cut out - numberOfVideoFrames += (TInt) (I64REAL(videoClipLength * estimatedFramerate) / 1000000.0); - } - - // Add clip size to video data size - videoDataSize += videoClipSize; - } - - // Calculate video 3gp size - video3gpSize = GetVideo3gpSizePerFrame(numberOfVideoFrames) * numberOfVideoFrames; - - // Check if there's any audio - if (movie->AudioType() != EVedAudioTypeNoAudio) - { - // Calculate audio data size - CAudSong* song = ((CVedMovieImp*)aMovie)->Song(); - audioDataSize = song->GetFrameSizeEstimateL(TTimeIntervalMicroSeconds(0), movie->Duration()); - - if (audioDataSize > 0) - { - // Calculate audio 3gp size - TReal numberOfAudioFrames = I64REAL(aMovie->Duration().Int64() / song->GetFrameDurationMicro()); - TReal numberOfAudioSamples = numberOfAudioFrames / (TReal) iProcessor->GetAudioFramesInSample(); - - audio3gpSize = (TInt) (GetAudio3gpSizePerSample(numberOfAudioSamples) * numberOfAudioSamples); - } - } - - // Calculate final estimated file size - aFileSize = videoDataSize + audioDataSize + video3gpSize + audio3gpSize + KSEFixedSize; - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// CSizeEstimate::GetMovieSizeEstimateForMMSL -// Calculates file size estimate for MMS use -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSizeEstimate::GetMovieSizeEstimateForMMSL(const CVedMovie* aMovie, TInt aTargetSize, - TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds& aEndTime) - { - TInt i = 0; - TInt j = 0; - - TInt videoDataSize = 0; - TInt audioDataSize = 0; - TInt video3gpSize = 0; - TInt audio3gpSize = 0; - TInt numberOfVideoFrames = 0; - TReal numberOfAudioSamples = 0.0; - TInt64 currentTime = aStartTime.Int64(); - - CVedVideoClip* vedClip = 0; - CAudSong* song = ((CVedMovieImp*)aMovie)->Song(); - const CVedMovieImp* movie = reinterpret_cast(aMovie); - - TReal audioDurationToSamplesFactor = 1.0 / (I64REAL(song->GetFrameDurationMicro()) * (TReal) iProcessor->GetAudioFramesInSample()); - - TInt movieBitrate = movie->VideoStandardBitrate(); - if (movieBitrate < KSELowBitrateLimit) - { - // Adjust low bit rates to slightly higher - movieBitrate += KSELowBitrateIncrement; - } - - TInt numberOfVideoClips = movie->VideoClipCount(); - - // Find first clip included in the output - TInt startClipNumber = 0; - for (i = 1; i < numberOfVideoClips; i++, startClipNumber++) - { - vedClip = movie->VideoClip(i); - - if (aStartTime < vedClip->StartTime()) - { - break; - } - } - - // Go through all the clips - for (i = startClipNumber; i < numberOfVideoClips; i++) - { - vedClip = movie->VideoClip(i); - - // Get the number of video frames in the clip - TInt videoFramesInClip = 0; - if (vedClip->Info()->Class() == EVedVideoClipClassGenerated) - { - videoFramesInClip = vedClip->Info()->Generator()->VideoFrameCount(); - } - else - { - videoFramesInClip = vedClip->Info()->VideoFrameCount(); - } - - if (videoFramesInClip <= 0) - { - // No video frames in clip, check next clip - continue; - } - - // Calculate the frame rate of the source clip - TReal videoClipFramerate = 1.0; - if (vedClip->Info()->Duration().Int64() != 0) - { - videoClipFramerate = (TReal) videoFramesInClip * 1000000.0 / - I64REAL(vedClip->Info()->Duration().Int64()); - } - - TInt videoFrameSize = 0; - TInt64 frameTime = 0; - TInt64 frameDuration = 0; - TInt64 videoClipCutInTime = vedClip->CutInTime().Int64(); - TInt64 videoClipCutOutTime = vedClip->CutOutTime().Int64(); - currentTime = vedClip->StartTime().Int64(); - - TInt startTransitionFrames = 0; - TInt endTransitionFrames = 0; - - // Check if clip needs to be transcoded - TBool clipIsTranscoded = EFalse; - if (vedClip->Info()->Class() == EVedVideoClipClassFile) - { - if (!(vedClip->Info()->Resolution() == movie->Resolution() && - vedClip->Info()->VideoType() == movie->VideoType() && - videoClipFramerate < (TReal) movie->MaximumFramerate() + 0.2)) - { - clipIsTranscoded = ETrue; - } - } - else - { - // Get the number of transition frames in the clip - GetTransitionFrames(movie, i, startTransitionFrames, endTransitionFrames); - } - - TInt estimatedBitrate = movieBitrate; - - // If we are transcoding a low quality clip to high quality (e.g. QCIF to VGA) - if (movieBitrate >= KSEHighBitrateLimit && - movie->Resolution().iWidth > vedClip->Info()->Resolution().iWidth * 3 && - videoClipFramerate < (TReal) movie->MaximumFramerate() * 0.5 + 0.2) - { - // Halve the estimated bit rate if the source frame rate is - // roughly less than half of the maximum frame rate - estimatedBitrate = estimatedBitrate >> 1; - } - - if (i == startClipNumber) - { - // We need to adjust the cut in time for the first clip since the client - // requested to get the size estimate starting from this position - videoClipCutInTime = aStartTime.Int64() - vedClip->StartTime().Int64(); - - // Initialize the current time to this position - currentTime = aStartTime.Int64(); - } - - // Estimate the size on every frame - for (j = 0; j < videoFramesInClip; j++) - { - // Get frame start time and duration - if (vedClip->Info()->Class() == EVedVideoClipClassFile) - { - frameTime = vedClip->Info()->VideoFrameStartTimeL(j).Int64(); - frameDuration = vedClip->Info()->VideoFrameDurationL(j).Int64(); - } - else - { - frameTime = vedClip->Info()->Generator()->VideoFrameStartTime(j).Int64(); - frameDuration = vedClip->Info()->Generator()->VideoFrameDuration(j).Int64(); - } - - if (frameTime < videoClipCutInTime) - { - continue; // Frame is before cut in position => check next one - } - else if (frameTime >= videoClipCutOutTime) - { - break; // Cut out position reached => no need to check frames anymore - } - - // Check that duration is valid - if ((frameDuration <= 0) || (frameDuration > KSEMaxFrameDuration)) - { - // Calculate frame duration from the frame rate - frameDuration = (TInt64) (1000000.0 / videoClipFramerate); - } - - // Check for slow motion - if (vedClip->Speed() != KVedNormalSpeed) - { - frameDuration = (frameDuration * KVedNormalSpeed) / vedClip->Speed(); - } - - if (clipIsTranscoded) - { - // Clip is transcoded so calculate frame size from estimated bit rate - videoFrameSize = I64INT((frameDuration * estimatedBitrate) / 8 / 1000000); - } - else - { - if (vedClip->Info()->Class() == EVedVideoClipClassGenerated) - { - // Check if the frame is a transition frame - if (j < (startTransitionFrames - 1) || - j > (videoFramesInClip - endTransitionFrames)) - { - // Frame is encoded so calculate frame size from movie bit rate - videoFrameSize = I64INT((frameDuration * movieBitrate) / 8 / 1000000); - } - else - { - // Frame is intra if it's the first one in the clip - // or if it's right after or before transition - TBool isIntra = j == 0 || j == (startTransitionFrames - 1) || j == (videoFramesInClip - endTransitionFrames); - videoFrameSize = GetGeneratedFrameSize(movie, isIntra); - } - } - else - { - // Get frame size from the original clip - videoFrameSize = vedClip->Info()->VideoFrameSizeL(j); - - // Check if color effect is in use - if (vedClip->ColorEffect() != EVedColorEffectNone) - { - // Color tone effects decreases the size of the frame slightly - videoFrameSize -= (TInt) ((TReal) videoFrameSize * KSEBWReductionFactor); - } - } - } - - // Calculate video data size - videoDataSize += videoFrameSize; - - // Calculate video 3gp size - numberOfVideoFrames++; - video3gpSize = GetVideo3gpSizePerFrame(numberOfVideoFrames) * numberOfVideoFrames; - - if (movie->AudioType() != EVedAudioTypeNoAudio) - { - // Calculate audio data size - audioDataSize += song->GetFrameSizeEstimateL(currentTime, currentTime + frameDuration); - - if (audioDataSize > 0) - { - // Calculate audio 3gp size - numberOfAudioSamples += I64REAL(frameDuration) * audioDurationToSamplesFactor; - audio3gpSize = (TInt) (GetAudio3gpSizePerSample(numberOfAudioSamples) * numberOfAudioSamples); - } - } - - // Check if target size is reached - if (videoDataSize + audioDataSize + video3gpSize + audio3gpSize + KSEFixedSize >= aTargetSize) - { - aEndTime = currentTime; - - // Make sure we didn't overflow the end time - if (aEndTime > movie->Duration()) - { - aEndTime = movie->Duration(); - } - - return KErrNone; - } - - // Increase time to the next frame - currentTime += frameDuration; - } - } - - // Check if audio is longer than video - TInt64 remainingAudioDuration = 0; - - if (numberOfVideoClips > 0) - { - remainingAudioDuration = movie->Duration().Int64() - - movie->VideoClip(numberOfVideoClips - 1)->EndTime().Int64(); - - // Adjust current time to the end of the last clip - currentTime = movie->VideoClip(numberOfVideoClips - 1)->EndTime().Int64(); - } - else - { - remainingAudioDuration = aMovie->Duration().Int64(); - } - - if (remainingAudioDuration > 0) - { - // Estimate how many black frames are inserted - TInt frameDuration = KSEBlackFrameDuration; - TInt blackVideoFrames = (TInt) (remainingAudioDuration / frameDuration) + 1; - - for (j = 0; j < blackVideoFrames; j++) - { - // Calculate video data size - TBool isIntra = j == 0; - videoDataSize += GetBlackFrameSize(movie, isIntra); - - // Calculate video 3gp size - numberOfVideoFrames++; - video3gpSize = GetVideo3gpSizePerFrame(numberOfVideoFrames) * numberOfVideoFrames; - - // Calculate audio data size - audioDataSize += song->GetFrameSizeEstimateL(currentTime, currentTime + frameDuration); - - // Calculate audio 3gp size - numberOfAudioSamples += (TReal) frameDuration * audioDurationToSamplesFactor; - audio3gpSize = (TInt) (GetAudio3gpSizePerSample(numberOfAudioSamples) * numberOfAudioSamples); - - // Check if target size is reached - if (videoDataSize + audioDataSize + video3gpSize + audio3gpSize + KSEFixedSize >= aTargetSize) - { - aEndTime = currentTime; - - // Make sure we didn't overflow the end time - if (aEndTime > movie->Duration()) - { - aEndTime = movie->Duration(); - } - - return KErrNone; - } - - currentTime += frameDuration; - } - } - - // Target size not reached till end of movie - aEndTime = movie->Duration(); - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::GetTransitionFrames -// Returns the number of start and end transition frames in given clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CSizeEstimate::GetTransitionFrames(const CVedMovieImp *aMovie, TInt aIndex, - TInt& aStartTransitionFrames, TInt& aEndTransitionFrames) - { - aStartTransitionFrames = 0; - aEndTransitionFrames = 0; - - CVedVideoClip* vedClip = aMovie->VideoClip(aIndex); - - // Get the number of video frames in the clip - TInt videoFramesInClip = 0; - if (vedClip->Info()->Class() == EVedVideoClipClassGenerated) - { - videoFramesInClip = vedClip->Info()->Generator()->VideoFrameCount(); - } - else - { - videoFramesInClip = vedClip->Info()->VideoFrameCount(); - } - - // Calculate the amount of start transition frames in the clip - if (aIndex == 0) - { - // First clip in the movie so check movie start transition - if (aMovie->StartTransitionEffect() != EVedStartTransitionEffectNone) - { - aStartTransitionFrames = KSEFadeTransitionFrames; // Fade from - } - } - else if (aMovie->MiddleTransitionEffect(aIndex - 1) != EVedMiddleTransitionEffectNone) - { - // Check if the previous clip has a middle transition - if (aMovie->MiddleTransitionEffect(aIndex - 1) == EVedMiddleTransitionEffectDipToBlack || - aMovie->MiddleTransitionEffect(aIndex - 1) == EVedMiddleTransitionEffectDipToWhite) - { - aStartTransitionFrames = KSEFadeTransitionFrames; // Dip - } - else - { - aStartTransitionFrames = KSEWipeTransitionFrames; // Wipe / crossfade - } - } - - // Calculate the amount of end transition frames in the clip - if (aIndex == aMovie->VideoClipCount() - 1) - { - // Last clip in the movie so check movie end transition - if (aMovie->EndTransitionEffect() != EVedEndTransitionEffectNone) - { - aEndTransitionFrames = KSEFadeTransitionFrames; // Fade to - } - } - else if (aMovie->MiddleTransitionEffect(aIndex) != EVedMiddleTransitionEffectNone) - { - // Check if this clip has a middle transition - if (aMovie->MiddleTransitionEffect(aIndex) == EVedMiddleTransitionEffectDipToBlack || - aMovie->MiddleTransitionEffect(aIndex) == EVedMiddleTransitionEffectDipToWhite) - { - aEndTransitionFrames = KSEFadeTransitionFrames; // Dip - } - else - { - aEndTransitionFrames = KSEWipeTransitionFrames; // Wipe / crossfade - } - } - - // Check that the number of transition frames does not overflow - if (aStartTransitionFrames > videoFramesInClip) - { - aStartTransitionFrames = videoFramesInClip; - } - if (aEndTransitionFrames > videoFramesInClip - aStartTransitionFrames) - { - aEndTransitionFrames = videoFramesInClip - aStartTransitionFrames; - } - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::GetGeneratedFrameSize -// Estimates the average generated frame size -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSizeEstimate::GetGeneratedFrameSize(const CVedMovieImp *aMovie, TBool aIntra) - { - TInt frameFactor = 0; - - // Estimate the frame factor based on codec type - if (aMovie->VideoType() == EVedVideoTypeMPEG4SimpleProfile) - { - // MPEG-4 - frameFactor = aIntra ? KSEGeneratedIFrameFactorMPEG4 : KSEGeneratedPFrameFactorMPEG4; - } - else if (aMovie->VideoType() == EVedVideoTypeAVCBaselineProfile) - { - // H.264 - frameFactor = aIntra ? KSEGeneratedIFrameFactorH264 : KSEGeneratedPFrameFactorH264; - } - else - { - // H.263 - frameFactor = aIntra ? KSEGeneratedIFrameFactorH263 : KSEGeneratedPFrameFactorH263; - } - - // Estimate frame size based on movie resolution and frame factor - return (aMovie->Resolution().iWidth * frameFactor) >> 3; // Convert bits to bytes - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::GetBlackFrameSize -// Estimates the average black frame size -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSizeEstimate::GetBlackFrameSize(const CVedMovieImp *aMovie, TBool aIntra) - { - TInt frameFactor = aIntra ? KSEBlackIFrameFactor : KSEBlackPFrameFactor; - - return (aMovie->Resolution().iWidth * frameFactor) >> 3; // Convert bits to bytes - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::GetVideo3gpSizePerFrame -// Returns the 3gp size for video based on number of video frames -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CSizeEstimate::GetVideo3gpSizePerFrame(TInt aNumberOfVideoFrames) - { - TInt video3gpSize = KSEVideo3gpSizePerFrame6; - - if (aNumberOfVideoFrames < KSEVideo3gpFramesLimit1) video3gpSize = KSEVideo3gpSizePerFrame1; - else if (aNumberOfVideoFrames < KSEVideo3gpFramesLimit2) video3gpSize = KSEVideo3gpSizePerFrame2; - else if (aNumberOfVideoFrames < KSEVideo3gpFramesLimit3) video3gpSize = KSEVideo3gpSizePerFrame3; - else if (aNumberOfVideoFrames < KSEVideo3gpFramesLimit4) video3gpSize = KSEVideo3gpSizePerFrame4; - else if (aNumberOfVideoFrames < KSEVideo3gpFramesLimit5) video3gpSize = KSEVideo3gpSizePerFrame5; - - return video3gpSize; - } - -// ----------------------------------------------------------------------------- -// CSizeEstimate::GetAudio3gpSizePerSample -// Returns the 3gp size for audio based on number of audio samples -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TReal CSizeEstimate::GetAudio3gpSizePerSample(TReal aNumberOfAudioSamples) - { - TReal audio3gpSize = KSEAudio3gpSizePerSample8; - - if (aNumberOfAudioSamples < KSEAudio3gpSamplesLimit1) audio3gpSize = KSEAudio3gpSizePerSample1; - else if (aNumberOfAudioSamples < KSEAudio3gpSamplesLimit2) audio3gpSize = KSEAudio3gpSizePerSample2; - else if (aNumberOfAudioSamples < KSEAudio3gpSamplesLimit3) audio3gpSize = KSEAudio3gpSizePerSample3; - else if (aNumberOfAudioSamples < KSEAudio3gpSamplesLimit4) audio3gpSize = KSEAudio3gpSizePerSample4; - else if (aNumberOfAudioSamples < KSEAudio3gpSamplesLimit5) audio3gpSize = KSEAudio3gpSizePerSample5; - else if (aNumberOfAudioSamples < KSEAudio3gpSamplesLimit6) audio3gpSize = KSEAudio3gpSizePerSample6; - else if (aNumberOfAudioSamples < KSEAudio3gpSamplesLimit7) audio3gpSize = KSEAudio3gpSizePerSample7; - - return audio3gpSize; - } - - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/VedRgb2YuvConverter.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/VedRgb2YuvConverter.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,311 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES -#include -#include -#include "VedRgb2YuvConverter.h" - -// EXTERNAL DATA STRUCTURES - -// EXTERNAL FUNCTION PROTOTYPES - -// CONSTANTS - -// MACROS -#ifdef _DEBUG -# define __IF_DEBUG(t) {RDebug::t;} -#else -# define __IF_DEBUG(t) -#endif - -// LOCAL CONSTANTS AND MACROS - -// ?one_line_short_description_of_data -#define AVG(a,b) ( ( a + b ) >> 1 ) - -// MODULE DATA STRUCTURES - -/** -* ?one_line_short_description. -* ?other_description_lines -* -* @lib ?library -* @since ?Series60_version -*/ -struct TVSYCrCb - { - public: - // ?one_line_short_description_of_data - TInt iY; - - // ?one_line_short_description_of_data - TInt iCb; - - // ?one_line_short_description_of_data - TInt iCr; - }; - -// LOCAL FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// ============================= LOCAL FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -inline TUint8 RGBtoYCbCr( TVSYCrCb* aYuv, const TRgb& aColor ) - { - const TInt YRedFactor = 19595; // 0.299 << 16 - const TInt YGreenFactor = 38470; // 0.587 << 16 - const TInt YBlueFactor = 7471; // 0.114 << 16 - const TInt CbRedFactor = 11056; // 0.1687 << 16 - const TInt CbGreenFactor = 21712; // 0.3313 << 16 - const TInt CrGreenFactor = 27440; // 0.4187 << 16 - const TInt CrBlueFactor = 5328; // 0.0813 << 16 - - TInt red = aColor.Red(); - TInt green = aColor.Green(); - TInt blue = aColor.Blue(); - - aYuv->iY = (YRedFactor * red) + (YGreenFactor * green) + (YBlueFactor * blue); - aYuv->iCb = - (CbRedFactor * red) - (CbGreenFactor * green) + (blue << 15); - aYuv->iCr = (red << 15) - (CrGreenFactor * green) - (CrBlueFactor * blue); - - aYuv->iY >>= 16; - aYuv->iCb >>= 16; - aYuv->iCr >>= 16; - - aYuv->iCb += 128; - aYuv->iCr += 128; - - return static_cast( aYuv->iY ); - } - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TRgb VSReadColor4K( TAny*& aSource ) - { - TUint16* s = static_cast( aSource ); - TRgb rgb( TRgb::Color4K( *s++ ) ); - aSource = s; - return rgb; - } - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TRgb VSReadColor64K( TAny*& aSource ) - { - TUint16* s = static_cast( aSource ); - TRgb rgb( TRgb::Color64K( *s++ ) ); - aSource = s; - return rgb; - } - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TRgb VSReadColor16M( TAny*& aSource ) - { - TUint8* s = static_cast( aSource ); - TRgb rgb( s[2], s[1], s[0] ); - aSource = s + 3; - return rgb; - } - -// ============================ MEMBER FUNCTIONS =============================== - -// ============================ CVSFbsBitmapYUV420Converter =============================== - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CVSFbsBitmapYUV420Converter* CVSFbsBitmapYUV420Converter::NewL( const CFbsBitmap& aBitmap ) - { - CVSFbsBitmapYUV420Converter* self = new (ELeave) CVSFbsBitmapYUV420Converter(); - CleanupStack::PushL( self ); - self->ConstructL( aBitmap ); - CleanupStack::Pop(); // self - return self; - } - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -CVSFbsBitmapYUV420Converter::~CVSFbsBitmapYUV420Converter() - { - delete iSource; - delete iYUVData; - } - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVSFbsBitmapYUV420Converter::SetSourceL( const CFbsBitmap& aBitmap ) - { - ReConstructL( aBitmap ); - } - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVSFbsBitmapYUV420Converter::ProcessL() - { - switch( iSource->DisplayMode() ) - { - case EColor4K: - DoProcess( VSReadColor4K ); - break; - - case EColor64K: - DoProcess( VSReadColor64K ); - break; - - case EColor16M: - DoProcess( VSReadColor16M ); - break; - - default: - User::Leave( KErrNotSupported ); - break; - }; - } - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TPtrC8 CVSFbsBitmapYUV420Converter::YUVData() const - { - return *iYUVData; - } - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVSFbsBitmapYUV420Converter::ConstructL( const CFbsBitmap& aBitmap ) - { - iSource = new (ELeave) CFbsBitmap(); - ReConstructL( aBitmap ); - } - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVSFbsBitmapYUV420Converter::ReConstructL( const CFbsBitmap& aBitmap ) - { - User::LeaveIfError( iSource->Duplicate( aBitmap.Handle() ) ); - - // make sure that destination bitmap's displaymode is supported - if( ( iSource->DisplayMode() != EColor4K ) && ( iSource->DisplayMode() != EColor64K ) && ( iSource->DisplayMode() != EColor16M ) ) - { - User::Leave( KErrNotSupported ); - } - - if( !iYUVData || !( iSize == iSource->SizeInPixels() ) ) - { - iSize = iSource->SizeInPixels(); - delete iYUVData; iYUVData = 0; - TInt ySize = iSize.iWidth * iSize.iHeight; - iYUVData = HBufC8::NewMaxL( ySize + ( ySize >> 1 ) ); - iY.Set( iYUVData->Des().Mid( 0, ySize ) ); - iU.Set( iYUVData->Des().Mid( ySize, ySize >> 2 ) ); - iV.Set( iYUVData->Des().Mid( ySize + ( ySize >> 2 ), ySize >> 2 ) ); - } - } - -// ----------------------------------------------------------------------------- -// ?classname::?member_function -// ?implementation_description -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVSFbsBitmapYUV420Converter::DoProcess( TVSColorReadFunc aReadFunction ) - { - TUint8* pY = const_cast( iY.Ptr() ); - TUint8* pU = const_cast( iU.Ptr() ); - TUint8* pV = const_cast( iV.Ptr() ); - TVSYCrCb yuv1, yuv2; - - iSource->LockHeap(); - TAny* s = iSource->DataAddress(); - for( TInt h = 0; h < iSize.iHeight; h++ ) - { - for( TInt w = 0; w < iSize.iWidth>>1; w++ ) // Note! width must be even divisible by 2 - { - *pY++ = RGBtoYCbCr( &yuv1, aReadFunction( s ) ); - *pY++ = RGBtoYCbCr( &yuv2, aReadFunction( s ) ); - if( h&1 ) - { - *pU++ = static_cast( AVG( yuv1.iCb, yuv2.iCb ) ); - *pV++ = static_cast( AVG( yuv1.iCr, yuv2.iCr ) ); - } - else - { - *pU++ = static_cast( AVG( *pU, AVG( yuv1.iCb, yuv2.iCb ) ) ); - *pV++ = static_cast( AVG( *pV, AVG( yuv1.iCr, yuv2.iCr ) ) ); - } - } - // if even row -> decrease pU and pV, we will calculate average for those on odd rows - if( !(h&1) ) - { - pU -= ( iSize.iWidth >> 1 ); - pV -= ( iSize.iWidth >> 1 ); - } - } - iSource->UnlockHeap(); - } - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/VideoEncoderMDF.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/VideoEncoderMDF.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1285 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation for video encoder. -* -*/ - - -#include "statusmonitor.h" -#include "videoencoder.h" -#include "vedvideosettings.h" -#include "vedvolreader.h" -#include "vedavcedit.h" - - -// Assertion macro wrapper for code cleanup -#define VEASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CVIDEOENCODER"), EInternalAssertionFailure)) - -// Debug print macro -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x -#else -#define PRINT(x) -#endif - -// Constants - - -// time increment resolution -const TUint KTimeIncrementResolutionHW = 30000; -//const TUint KTimeIncrementResolutionSW = 29; - -const TReal KMinRandomAccessRate = 0.2; -//const TUint KPictureQuality = 50; -//const TReal KLatencyQyalityTradeoff = 1.0; -//const TReal KQualityTemporalTradeoff = 0.8; -//const TBool KEncodingRealTime = EFalse; - - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CVideoEncoder::NewL -// Two-phased constructor. -// --------------------------------------------------------- -// - -CVideoEncoder* CVideoEncoder::NewL(CStatusMonitor *aMonitor, CVedAVCEdit* aAvcEdit, - const TPtrC8& aVideoMimeType) -{ - PRINT((_L("CVideoEncoder::NewL() : MDF"))); - - CVideoEncoder* self = new (ELeave) CVideoEncoder(); - CleanupStack::PushL( self ); - self->ConstructL(aMonitor, aAvcEdit, aVideoMimeType); - CleanupStack::Pop(); - - return self; -} - - -CVideoEncoder::CVideoEncoder() : CActive(EPriorityStandard), iInputBuffer(0,0) -{ - iPreviousTimeStamp = TTimeIntervalMicroSeconds(0); - iKeyFrame = EFalse; -} - - -void CVideoEncoder::ConstructL(CStatusMonitor *aMonitor, CVedAVCEdit* aAvcEdit, - const TPtrC8& aVideoMimeType) -{ - iTranscoder = NULL; - iMonitor = aMonitor; - iAvcEdit = aAvcEdit; - - iFrameSize = KVedResolutionQCIF; - iFrameRate = 15.0; - iInputFrameRate = 15.0; - iRandomAccessRate = KMinRandomAccessRate; - - // interpret and store video codec MIME-type. Allocates also iDataBuffer - SetVideoCodecL( aVideoMimeType ); - - iStatus = NULL; - - iVolReader = CVedVolReader::NewL(); - - // allocate input picture - iInputPicture = new (ELeave) TTRVideoPicture; - - // Create a timer - User::LeaveIfError(iTimer.CreateLocal()); - iTimerCreated = ETrue; - - // Add us to active scheduler - CActiveScheduler::Add(this); -} - - -// --------------------------------------------------------- -// CVideoEncoder::~CVideoEncoder() -// Destructor -// --------------------------------------------------------- -// -CVideoEncoder::~CVideoEncoder() - { - - Cancel(); - - if ( iInputPicture ) - { - delete iInputPicture; - iInputPicture = 0; - } - - if ( iDataBuffer ) - { - delete iDataBuffer; - iDataBuffer = 0; - } - - if ( iTranscoder ) - { - delete iTranscoder; - iTranscoder = 0; - } - - if ( iVolReader ) - { - delete iVolReader; - iVolReader = 0; - } - - if ( iTimerCreated ) - { - iTimer.Close(); - iTimerCreated = EFalse; - } - - - } - - -// --------------------------------------------------------- -// CVideoEncoder::SetVideoCodecL() -// Interpret and store video mime type -// --------------------------------------------------------- -// -void CVideoEncoder::SetVideoCodecL(const TPtrC8& aMimeType) - { - TBuf8<256> string; - TBuf8<256> newMimeType; - string = KVedMimeTypeH263; - string += _L8( "*" ); - TInt dataBufferSize = KMaxCodedPictureSizeQCIF; - - iMaxFrameRate = 15.0; - iArbitrarySizeAllowed = EFalse; - - if ( aMimeType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - // H.263 - - newMimeType = KVedMimeTypeH263; - - if ( aMimeType.MatchF( _L8("*profile*") ) != KErrNotFound ) - { - // profile given, check if we support it - if ( aMimeType.MatchF( _L8("*profile=0*")) != KErrNotFound ) - { - // profile 0 requested - newMimeType += _L8( "; profile=0" ); - } - else - { - // no other profiles supported - PRINT((_L("CVideoEncoder::SetVideoCodecL() unsupported profile"))); - User::Leave(KErrNotSupported); - } - } - else - { - // no profile is given => assume 0 - newMimeType += _L8( "; profile=0" ); - } - - if ( aMimeType.MatchF( _L8("*level=10*") ) != KErrNotFound ) - { - iMaxBitRate = iBitRate = KVedBitRateH263Level10; - iMaxResolution = KVedResolutionQCIF; - dataBufferSize = KMaxCodedPictureSizeQCIF; - newMimeType += _L8( "; level=10" ); - } - else if ( aMimeType.MatchF( _L8("*level=45*") ) != KErrNotFound ) - { - iMaxBitRate = iBitRate = KVedBitRateH263Level45; - iMaxResolution = KVedResolutionQCIF; - dataBufferSize = KMaxCodedPictureSizeQCIF; - newMimeType += _L8( "; level=45" ); - } - else if ( aMimeType.MatchF( _L8("*level*") ) != KErrNotFound ) - { - // no other levels supported - PRINT((_L("CVideoEncoder::SetVideoCodecL() unsupported level"))); - User::Leave(KErrNotSupported); - } - else - { - // if no level is given assume 10 - iMaxBitRate = iBitRate = KVedBitRateH263Level10; - iMaxResolution = KVedResolutionQCIF; - dataBufferSize = KMaxCodedPictureSizeQCIF; - newMimeType += _L8( "; level=10" ); - } - } - else - { - string = KVedMimeTypeMPEG4Visual; - string += _L8( "*" ); - - if ( aMimeType.MatchF( string ) != KErrNotFound ) - { - // MPEG-4 Visual - newMimeType = KVedMimeTypeMPEG4Visual; - if ( aMimeType.MatchF( _L8("*profile-level-id=8*") ) != KErrNotFound ) - { - // simple profile level 0 - iMaxBitRate = iBitRate = KVedBitRateMPEG4Level0; - iMaxResolution = KVedResolutionQCIF; - // define max size 10K - dataBufferSize = KMaxCodedPictureSizeMPEG4QCIF; - newMimeType += _L8("; profile-level-id=8"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=9*") ) != KErrNotFound ) - { - // simple profile level 0b - iMaxBitRate = iBitRate = KVedBitRateMPEG4Level0; - iMaxResolution = KVedResolutionQCIF; - // define max size 10K - dataBufferSize = KMaxCodedPictureSizeMPEG4QCIF; - newMimeType += _L8("; profile-level-id=9"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=1*") ) != KErrNotFound ) - { - // simple profile level 1 - iMaxBitRate = iBitRate = KVedBitRateMPEG4Level0; - iMaxResolution = KVedResolutionQCIF; - // define max size 10K - dataBufferSize = KMaxCodedPictureSizeMPEG4QCIF; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=1"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=2*") ) != KErrNotFound ) - { - // simple profile level 2 - dataBufferSize = KMaxCodedPictureSizeMPEG4CIF; - iMaxResolution = KVedResolutionCIF; - iMaxBitRate = iBitRate = KVedBitRateMPEG4Level2; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=2"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=3*") ) != KErrNotFound ) - { - // simple profile level 3 - dataBufferSize = KMaxCodedPictureSizeMPEG4CIF; - iMaxBitRate = iBitRate = KVedBitRateMPEG4Level2; - iMaxResolution = KVedResolutionCIF; - iMaxFrameRate = 30.0; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=3"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=4*") ) != KErrNotFound ) - { - // simple profile level 4a - iMaxBitRate = iBitRate = KVedBitRateMPEG4Level4A; - dataBufferSize = KMaxCodedPictureSizeVGA; - iMaxResolution = KVedResolutionVGA; - iMaxFrameRate = 30.0; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=4"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=*") ) != KErrNotFound ) - { - // no other profile-level ids supported - PRINT((_L("CVideoEncoder::SetVideoCodecL() unsupported MPEG-4 profile-level"))); - User::Leave(KErrNotSupported); - } - else - { - // Default is level 0 in our case (normally probably level 1) - iMaxBitRate = iBitRate = KVedBitRateMPEG4Level0; - iMaxResolution = KVedResolutionQCIF; - // define max size 10K - dataBufferSize = KMaxCodedPictureSizeMPEG4QCIF; - newMimeType += _L8("; profile-level-id=8"); - } - } - else - { - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - string = KVedMimeTypeAVC; - string += _L8( "*" ); - if ( aMimeType.MatchF( string ) != KErrNotFound ) - { - // AVC - newMimeType = KVedMimeTypeAVC; - if ( aMimeType.MatchF( _L8("*profile-level-id=42800A*") ) != KErrNotFound ) - { - // baseline profile level 1 - iMaxBitRate = iBitRate = KVedBitRateAVCLevel1; - iMaxResolution = KVedResolutionQCIF; - dataBufferSize = KMaxCodedPictureSizeAVCLevel1; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=42800A"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42900B*") ) != KErrNotFound ) - { - // baseline profile level 1b - iMaxBitRate = iBitRate = KVedBitRateAVCLevel1b; - iMaxResolution = KVedResolutionQCIF; - dataBufferSize = KMaxCodedPictureSizeAVCLevel1B; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=42900B"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42800B*") ) != KErrNotFound ) - { - // baseline profile level 1.1 - iMaxBitRate = iBitRate = KVedBitRateAVCLevel1_1; - iMaxResolution = KVedResolutionCIF; - dataBufferSize = KMaxCodedPictureSizeAVCLevel1_1; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=42800B"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42800C*") ) != KErrNotFound ) - { - // baseline profile level 1.2 - iMaxBitRate = iBitRate = KVedBitRateAVCLevel1_2; - iMaxResolution = KVedResolutionCIF; - dataBufferSize = KMaxCodedPictureSizeAVCLevel1_2; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=42800C"); - } - //WVGA task - else if ( aMimeType.MatchF( _L8("*profile-level-id=42801F*") ) != KErrNotFound ) - { - // baseline profile level 1.3 - iMaxBitRate = iBitRate = KVedBitRateAVCLevel3_1; - iMaxResolution = KVedResolutionWVGA; - dataBufferSize = KMaxCodedPictureSizeAVCLevel3_1; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=42801F"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=*") ) != KErrNotFound ) - { - // no other profile-level ids supported - PRINT((_L("CVideoEncoder::SetVideoCodecL() unsupported AVC profile-level"))); - User::Leave(KErrNotSupported); - } - else - { - // Default is level 1 (?) - iMaxBitRate = iBitRate = KVedBitRateAVCLevel1; - iMaxResolution = KVedResolutionQCIF; - dataBufferSize = KMaxCodedPictureSizeAVCLevel1; - newMimeType += _L8("; profile-level-id=42800A"); - } - } - else - { - // unknown mimetype - User::Leave( KErrNotSupported ); - } -#else - // unknown mimetype - User::Leave( KErrNotSupported ); -#endif - } - } - - // successfully interpreted the input mime type - iMimeType = newMimeType; - if ( iDataBuffer ) - { - delete iDataBuffer; - iDataBuffer = NULL; - } - iDataBuffer = (HBufC8*) HBufC8::NewL(dataBufferSize); - - } - -// --------------------------------------------------------- -// CVideoEncoder::SetFrameSizeL -// Sets the used frame size -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::SetFrameSizeL(const TSize& aSize) - { - - if (iFrameSize == aSize) - return; - - if ( (aSize.iWidth > iMaxResolution.iWidth) || (aSize.iHeight > iMaxResolution.iHeight)) - { - if ( iArbitrarySizeAllowed ) // This is for future-proofness. Currently the checking of standard sizes below overrules this one - { - if ( aSize.iWidth * aSize.iHeight > iMaxResolution.iWidth*iMaxResolution.iHeight ) - { - PRINT((_L("CVideoEncoder::SetFrameSizeL() too high resolution requested"))); - User::Leave( KErrNotSupported ); - } - } - else - { - PRINT((_L("CVideoEncoder::SetFrameSizeL() incompatible or too high resolution requested"))); - User::Leave( KErrNotSupported ); - } - } - - // check new size. For now only standard sizes are allowed - if ( (aSize != KVedResolutionSubQCIF) && - (aSize != KVedResolutionQCIF) && - (aSize != KVedResolutionCIF) && - (aSize != KVedResolutionQVGA) && - (aSize != KVedResolutionVGA16By9) && - (aSize != KVedResolutionVGA) && - //WVGA task - (aSize != KVedResolutionWVGA) ) - { - User::Leave( KErrArgument ); - } - - iFrameSize = aSize; - - } - -// --------------------------------------------------------- -// CVideoEncoder::GetFrameSize -// Gets the used frame size -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::FrameSize(TSize& aSize) const - { - - aSize = iFrameSize; - - } - -// --------------------------------------------------------- -// CVideoEncoder::SetFrameRate -// Sets the used targt frame rate -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoEncoder::SetFrameRate(const TReal aFrameRate) -{ - VEASSERT(aFrameRate > 0.0); - - if ( aFrameRate <= iMaxFrameRate ) - { - iFrameRate = TReal32(aFrameRate); - } - else - { - iFrameRate = iMaxFrameRate; - } - - // target framerate cannot be larger than source framerate - if (iFrameRate > iInputFrameRate) - iFrameRate = iInputFrameRate; - - return KErrNone; -} - -// --------------------------------------------------------- -// CVideoEncoder::SetInputFrameRate -// Sets the used input sequence frame rate -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoEncoder::SetInputFrameRate(const TReal aFrameRate) - { - - VEASSERT(aFrameRate > 0.0); - - iInputFrameRate = aFrameRate; - - // target framerate cannot be larger than source framerate - if (iFrameRate > iInputFrameRate) - iFrameRate = iInputFrameRate; - - return KErrNone; - - } - - -// --------------------------------------------------------- -// CVideoEncoder::SetRandomAccessRate -// Sets the used target random access rate -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoEncoder::SetRandomAccessRate(const TReal aRate) -{ - VEASSERT(aRate > 0.0); - - iRandomAccessRate = aRate; - - return KErrNone; -} - -// --------------------------------------------------------- -// CVideoEncoder::SetBitrate -// Sets the used target bitrate -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoEncoder::SetBitrate(const TInt aBitrate) -{ - VEASSERT(aBitrate > 0); - - if ( aBitrate <= iMaxBitRate ) - { - iBitRate = aBitrate; - } - else - { - iBitRate = iMaxBitRate; - } - - return KErrNone; - -} - -// -------------------------------------------------------- - - - -// --------------------------------------------------------- -// CVideoEncoder::InitializeL -// Initializes the encoder -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::InitializeL(TRequestStatus &aStatus) - { - - PRINT((_L("CVideoEncoder::InitializeL() in"))); - - iResetRequestStatus = &aStatus; - - // Create DevVideoRecord & select video encoder - - if ( iTranscoder ) - { - // need to recreate since parameters changed - delete iTranscoder; - iTranscoder = 0; - } - - iFatalError = EFalse; - - iTranscoder = CTRTranscoder::NewL(*this); - - // Select & set parameters to transcoder - TRAPD(err, SetupEncoderL()); - - if ( err != KErrNone ) - { - // error - User::Leave( err ); - } - - iTranscoder->InitializeL(); - - PRINT((_L("CVideoEncoder::InitializeL() out"))); - - - } - -// --------------------------------------------------------- -// CVideoEncoder::Start -// Starts the encoder -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CVideoEncoder::Start() -{ - TRAPD( error, iTranscoder->StartL() ); - - if (error != KErrNone) - { - if (iMonitor) - iMonitor->Error(error); - } -} - - -// --------------------------------------------------------- -// CVideoEncoder::SetRandomAccessPoint -// Forces the next encoded frame to Intra -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::SetRandomAccessPoint() -{ - VEASSERT(iTranscoder); - - iTranscoder->SetRandomAccessPoint(); - -} - -// --------------------------------------------------------- -// CVideoEncoder::Stop -// Stops the encoder -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::Stop() -{ - - if ( !iFatalError ) - { - - if (iStarted) - { - TRAPD( error, iTranscoder->StopL() ); - if (error != KErrNone) - { - if (iMonitor) - iMonitor->Error(error); - } - } - - iStarted = EFalse; - } -} - - -// --------------------------------------------------------- -// CVideoEncoder::Reset -// Resets the encoder -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::Reset(TRequestStatus &aStatus) -{ - - PRINT((_L("CVideoEncoder::Reset() in"))); - - iPreviousTimeStamp = TTimeIntervalMicroSeconds(0); - - iResetRequestStatus = &aStatus; - - if ( iFatalError ) - { - MtroAsyncStopComplete(); - } - else - { - TRAPD(err, iTranscoder->AsyncStopL()); - if (err != KErrNone) - iMonitor->Error(err); - } - - iStarted = EFalse; - - PRINT((_L("CVideoEncoder::Reset() out"))); -} - -void CVideoEncoder::Reset() -{ - - PRINT((_L("CVideoEncoder::Reset() (sync.) in"))); - - iPreviousTimeStamp = TTimeIntervalMicroSeconds(0); - - if ( !iFatalError ) - { - if (iStarted) - { - TRAPD(err, iTranscoder->StopL()); - if (err != KErrNone) - iMonitor->Error(err); - } - } - - iStarted = EFalse; - - PRINT((_L("CVideoEncoder::Reset() (sync.) out"))); -} - -// --------------------------------------------------------- -// CVideoEncoder::RunL -// Active object running method. -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::RunL() -{ - - // Timer elapsed, complete encoding request - // with KErrCancel - - PRINT((_L("CVideoEncoder::RunL() in"))); - - if (iTimerRequestPending) - { - iTimerRequestPending = EFalse; - if (iEncodeRequestStatus) - { -#ifdef _DEBUG - TTime current; - current.UniversalTime(); - TInt64 time = current.MicroSecondsFrom(iEncodeStartTime).Int64(); - PRINT((_L("CVideoEncoder::RunL(), completing request, time since encoding started %d"), I64INT( time ))); -#endif - - VEASSERT(*iEncodeRequestStatus == KRequestPending); - // complete request - User::RequestComplete(iEncodeRequestStatus, KErrCancel); - iEncodeRequestStatus = 0; - iEncodePending = EFalse; - } - } - PRINT((_L("CVideoEncoder::RunL() out"))); - -} - -// --------------------------------------------------------- -// CVideoEncoder::RunError -// Active object error method. -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoEncoder::RunError(TInt aError) -{ - PRINT((_L("CVideoEncoder::RunError() in"))); - - Cancel(); - - iMonitor->Error(aError); - - PRINT((_L("CVideoEncoder::RunError() out"))); - - return KErrNone; -} - -// --------------------------------------------------------- -// CVideoEncoder::DoCancel -// Active object cancelling method -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::DoCancel() -{ - - PRINT((_L("CVideoEncoder::DoCancel() in"))); - - // Cancel our timer request if we have one - if ( iTimerRequestPending ) - { - iTimer.Cancel(); - iTimerRequestPending = EFalse; - return; - } - -} - -// --------------------------------------------------------- -// CVideoEncoder::EncodeFrameL -// Encodes a frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::EncodeFrameL(TPtr8& aYUVFrame, TRequestStatus &aStatus, TTimeIntervalMicroSeconds aTimeStamp) - { - PRINT((_L("CVideoEncoder::EncodeFrameL() in, aTimeStamp = %d"), I64INT( aTimeStamp.Int64() ) )); - - if ( iFatalError ) - { - PRINT((_L("CVideoEncoder::EncodeFrameL() can't encode since fatal error has occurred earlier"))); - User::Leave( KErrGeneral ); - } - - iEncodeRequestStatus = &aStatus; - - if (!iStarted) - { - PRINT((_L("CVideoEncoder::EncodeFrameL() - starting devVideoRec"))); - //iTranscoder->StopL(); // NOTE: needed ?? - iTranscoder->StartL(); - iStarted = ETrue; - } - - // wrap input frame to encoder input buffer - iInputBuffer.Set(aYUVFrame); - iInputPicture->iRawData = &iInputBuffer; - iInputPicture->iDataSize.SetSize(iFrameSize.iWidth, iFrameSize.iHeight); - - if (aTimeStamp > TTimeIntervalMicroSeconds(0)) - { - TInt64 diff = aTimeStamp.Int64() - iPreviousTimeStamp.Int64(); - - if (diff < 0) - { - aTimeStamp = iPreviousTimeStamp.Int64() + TInt64(66667); - } - // NOTE: Could the real difference between two consecutive - // frames be used instead of assuming 15 fps ? - } - iPreviousTimeStamp = aTimeStamp; - - iInputPicture->iTimestamp = aTimeStamp; - //iInputPicture->iLink = NULL; - iInputPicture->iUser = this; - -#ifdef _DEBUG - iEncodeStartTime.UniversalTime(); -#endif - - - iEncodePending = ETrue; - - iTranscoder->SendPictureToTranscoderL( iInputPicture ); - - PRINT((_L("CVideoEncoder::EncodeFrameL() out"))); - - } - - -// --------------------------------------------------------- -// CVideoEncoder::GetBuffer -// Gets encoded frame bitstream buffer -// (other items were commented in a header). -// --------------------------------------------------------- -// -TPtrC8& CVideoEncoder::GetBufferL(TBool& aKeyFrame) - { - if ( iFatalError ) - { - User::Leave( KErrNotReady ); - } - - VEASSERT(iDataBuffer->Length() > 0); - - PRINT((_L("CVideoEncoder::GetBufferL(), keyFrame = %d"), iKeyFrame)); - - aKeyFrame = iKeyFrame; - - iReturnDes.Set(iDataBuffer->Des()); - return iReturnDes; - - } - -// --------------------------------------------------------- -// CVideoEncoder::ReturnBuffer -// Returns used bitstream buffer to devVideoRec -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::ReturnBuffer() - { - if ( iFatalError ) - { - return; - } - - iDataBuffer->Des().Zero(); - - } - -// --------------------------------------------------------- -// CVideoEncoder::SetupEncoderL -// Private helper method to select & setup the encoder -// plugin devvr must use -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoEncoder::SetupEncoderL() - { - - if ( !(iTranscoder->SupportsOutputVideoFormat(iMimeType) ) ) - { - User::Leave(KErrNotSupported); - } - - TTRVideoFormat videoInputFormat; - TTRVideoFormat videoOutputFormat; - - videoInputFormat.iSize = iFrameSize; - videoInputFormat.iDataType = CTRTranscoder::ETRYuvRawData420; - - videoOutputFormat.iSize = iFrameSize; - videoOutputFormat.iDataType = CTRTranscoder::ETRDuCodedPicture; - - iTranscoder->OpenL( this, - CTRTranscoder::EEncoding, - KNullDesC8, - iMimeType, - videoInputFormat, - videoOutputFormat, - EFalse ); - - // default, will be updated by ParseVolHeader - iTimeIncrementResolution = KTimeIncrementResolutionHW; //KTimeIncrementResolutionSW; - - iTranscoder->SetVideoBitRateL(iBitRate); - - iTranscoder->SetFrameRateL(iFrameRate); - - iTranscoder->SetChannelBitErrorRateL(0.0); - - // Get processing time estimate from transcoder, divide it by the framerate to get processing time per frame - // and then multiply it by 2 to get some safety margin and by unit conversion factor 1000000. - // The delay is used to determine if a frame was skipped, hence there should be some margin. -#ifdef __WINSCW__ - iMaxEncodingDelay = 5000000; // emulator can be really slow, use 5 seconds timeout -#else - iMaxEncodingDelay = (TUint)(2*1000000*iTranscoder->EstimateTranscodeTimeFactorL(videoInputFormat,videoOutputFormat)/iFrameRate); - iMaxEncodingDelay += 100000; // Add 100 ms for safety margin -#endif - - TTRVideoCodingOptions codingOptions; - codingOptions.iSyncIntervalInPicture = 0; - codingOptions.iMinRandomAccessPeriodInSeconds = (TInt) (1.0 / iRandomAccessRate); - - // NOTE: What about these ??? - codingOptions.iDataPartitioning = EFalse; - codingOptions.iReversibleVLC = EFalse; - codingOptions.iHeaderExtension = 0; - - iTranscoder->SetVideoCodingOptionsL(codingOptions); - - iTranscoder->SetVideoPictureSinkOptionsL(iFrameSize, this); - - } - - -// ----------------------------------------------------------------------------- -// CVideoEncoder::MtroSetInputFrameRate -// Sets input sequence frame rate for encoding -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVideoEncoder::MtroSetInputFrameRate(TReal& aRate) - { - - aRate = iInputFrameRate; - - } - - -// ----------------------------------------------------------------------------- -// CVideoEncoder::MtroPictureFromTranscoder -// Called by transcoder to return the input picture buffer -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVideoEncoder::MtroPictureFromTranscoder(TTRVideoPicture* aPicture) - { - PRINT((_L("CVideoEncoder::MtroPictureFromTranscoder() %x"), aPicture)); - - if (iInputPicture != aPicture) - { - iMonitor->Error(KErrGeneral); - return; - } - - if (iEncodePending) - { - if (!iTimerRequestPending) - { - // Activate timer to wait for encoding, if the encoding didn't complete already. - // Timeout is needed since we don't get notification if frame was skipped. - SetActive(); - iStatus = KRequestPending; - iTimer.After(iStatus, TTimeIntervalMicroSeconds32(iMaxEncodingDelay)); - iTimerRequestPending = ETrue; - } - } - } - - -// ----------------------------------------------------------------------------- -// CVideoEncoder::WriteBufferL -// Called by transcoder to notify that new bitsream buffer is ready -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVideoEncoder::WriteBufferL(CCMRMediaBuffer* aBuffer) - { - - PRINT((_L("CVideoEncoder::WriteBufferL(), iEncodePending = %d"), iEncodePending)); - -#ifdef _DEBUG - TTime current; - current.UniversalTime(); - TInt64 time = current.MicroSecondsFrom(iEncodeStartTime).Int64(); - PRINT((_L("CVideoEncoder::WriteBufferL(), time spent encoding = %d ms, iEncodeRequestStatus = 0x%x"), - (I64INT(time))/1000 ,iEncodeRequestStatus)); - -#endif - - if (aBuffer->Type() == CCMRMediaBuffer::EVideoMPEG4DecSpecInfo) - { - // copy data to bitstream buffer - TPtr8 ptr = iDataBuffer->Des(); - ptr.Copy( aBuffer->Data() ); - return; - } - - // Cancel timer - Cancel(); - - iEncodePending = EFalse; - - if (aBuffer->BufferSize() == 0) - { - PRINT((_L("CVideoEncoder::WriteBufferL() buffer length == 0"))); - - if ( iEncodeRequestStatus != 0 ) - { - // complete request - User::RequestComplete(iEncodeRequestStatus, KErrUnderflow); - iEncodeRequestStatus = 0; - } - return; - } - - VEASSERT(aBuffer->Data().Length() <= KMaxCodedPictureSizeVGA); - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - TInt avcFrameLen = 0; - if ( iMimeType.FindF(KVedMimeTypeAVC) != KErrNotFound ) - { - // get avc frame length - TUint8* tmp = const_cast(aBuffer->Data().Ptr() + aBuffer->Data().Length()); - // support for 1 frame in 1 NAL unit currently - tmp -= 4; - TInt numNalUnits = TInt(tmp[0]) + (TInt(tmp[1])<<8) + (TInt(tmp[2])<<16) + (TInt(tmp[3])<<24); - if (numNalUnits > 0) { } - - VEASSERT( numNalUnits == 1 ); - tmp -=4; - - avcFrameLen = tmp[0] + (TInt(tmp[1])<<8) + (TInt(tmp[2])<<16) + (TInt(tmp[3])<<24); - - TInt error = KErrNone; - // check that there is enough room for length field and the frame - if ( iDataBuffer->Des().MaxLength() < (avcFrameLen + 4) ) - TRAP( error, iDataBuffer->ReAllocL(avcFrameLen + 4) ); - - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - - TUint8* buf = const_cast(iDataBuffer->Des().Ptr()); - - // set length - buf[0] = TUint8((avcFrameLen >> 24) & 0xff); - buf[1] = TUint8((avcFrameLen >> 16) & 0xff); - buf[2] = TUint8((avcFrameLen >> 8) & 0xff); - buf[3] = TUint8(avcFrameLen & 0xff); - - iDataBuffer->Des().SetLength(4); - } -#endif - - // copy data to bitstream buffer - TPtr8 ptr = iDataBuffer->Des(); - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if ( iMimeType.FindF(KVedMimeTypeAVC) != KErrNotFound ) - { - ptr.Append( aBuffer->Data().Ptr(), avcFrameLen ); - } - else -#endif - { - ptr.Append( aBuffer->Data() ); - } - - // save keyframe flag - iKeyFrame = aBuffer->RandomAccessPoint(); - - if ( iEncodeRequestStatus != 0 ) - { - // complete request - User::RequestComplete(iEncodeRequestStatus, KErrNone); - iEncodeRequestStatus = 0; - } - - // --> user calls GetBuffer(); - - } - -TInt CVideoEncoder::SetVideoFrameSize(TSize /*aSize*/) - { - return KErrNone; - } - -TInt CVideoEncoder::SetAverageVideoBitRate(TInt /*aSize*/) - { - return KErrNone; - } - -TInt CVideoEncoder::SetMaxVideoBitRate(TInt /*aSize*/) - { - return KErrNone; - } - -TInt CVideoEncoder::SetAverageAudioBitRate(TInt /*aSize*/) - { - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CVideoEncoder::MtroFatalError -// Called by transcoder when a fatal error has occurred -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVideoEncoder::MtroFatalError(TInt aError) - { - - PRINT((_L("CVideoEncoder::MtroFatalError() %d"), aError)); - iFatalError = ETrue; - - iMonitor->Error(aError); - - } - -void CVideoEncoder::MtroReturnCodedBuffer(CCMRMediaBuffer* /*aBuffer*/) - { - - User::Panic(_L("CVIDEOENCODER"), EInternalAssertionFailure); - } - - -// ----------------------------------------------------------------------------- -// CVideoEncoder::MdvroInitializeComplete -// Called by transcoder when initialization is complete -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVideoEncoder::MtroInitializeComplete(TInt aError) - { - PRINT((_L("CVideoEncoder::MtroInitializeComplete %d, iResetRequestStatus %x"), aError, iResetRequestStatus)); - - VEASSERT(iResetRequestStatus); - - if ( aError != KErrNone ) - { - iMonitor->Error(aError); - if ( iResetRequestStatus != 0 ) - { - User::RequestComplete(iResetRequestStatus, aError); - iResetRequestStatus = 0; - } - return; - } - - TInt error = KErrNone; - // Handle MPEG-4 VOL / AVC SPS/PPS data reading/writing - TRAP(error, HandleCodingStandardSpecificInfoL()); - - if ( error != KErrNone ) - iMonitor->Error(error); - - if ( iResetRequestStatus != 0 ) - { - PRINT((_L("CVideoEncoder::MtroInitializeComplete() complete request"))); - // complete request: - User::RequestComplete(iResetRequestStatus, error); - iResetRequestStatus = 0; - } - - } - -// ----------------------------------------------------------------------------- -// CVideoEncoder::MtroAsyncStopComplete -// Called by transcoder when all pictures have been processed -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVideoEncoder::MtroAsyncStopComplete() - { - - PRINT((_L("CVideoEncoder::MtroAsyncStopComplete()"))); - - if ( iResetRequestStatus != 0 ) - { - PRINT((_L("CVideoEncoder::MdvroStreamEnd() complete request"))); - // complete request - User::RequestComplete(iResetRequestStatus, KErrNone); - iResetRequestStatus = 0; - } - - } - -// ----------------------------------------------------------------------------- -// CVideoEncoder::GetTimeIncrementResolution -// Gets time increment resolution used in MPEG-4 -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVideoEncoder::GetTimeIncrementResolution() const - { - if ( iVolReader->TimeIncrementResolution() != 0 ) - return iVolReader->TimeIncrementResolution(); - - return iTimeIncrementResolution; - } - -// ----------------------------------------------------------------------------- -// CVideoEncoder::HandleCodingStandardSpecificInfoL -// Parses the MPEG-4 VOL header / AVC Dec. configuration record -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CVideoEncoder::HandleCodingStandardSpecificInfoL() - { - - // Parse the VOL header for mpeg-4 - if ( iMimeType.FindF(KVedMimeTypeMPEG4Visual) != KErrNotFound ) - { - HBufC8* headerData = iTranscoder->GetCodingStandardSpecificInitOutputLC(); - if ( headerData != 0 ) - { - iVolReader->ParseVolHeaderL( (TDesC8&) *headerData ); - - // Insert VOL header to bitstream buffer - TPtr8 ptr = iDataBuffer->Des(); - ptr.Append( *headerData ); - - CleanupStack::PopAndDestroy( headerData ); - } - } - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - // Parse & write SPS/PPS data for AVC - else if ( iMimeType.FindF(KVedMimeTypeAVC) != KErrNotFound ) - { - HBufC8* headerData = iTranscoder->GetCodingStandardSpecificInitOutputLC(); - - if ( headerData != 0 ) - { - - HBufC8* outputAVCHeader = 0; - // is the max. size of AVCDecoderConfigurationRecord known here ?? - outputAVCHeader = (HBufC8*) HBufC8::NewLC(16384); - TPtr8 ptr = outputAVCHeader->Des(); - - // parse header & convert it to AVCDecoderConfigurationRecord -format - iAvcEdit->ConvertAVCHeaderL(*headerData, ptr); - - // save it to avc module for later use - iAvcEdit->SaveAVCDecoderConfigurationRecordL(ptr, ETrue /* aFromEncoder */); - - CleanupStack::PopAndDestroy( 2 ); // headerData, outputAVCHeader - - } - } -#endif - - } diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/Yuv2rgb16.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/Yuv2rgb16.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation of class CYuv2Rgb16. -* YUV to EColor64K colorspace converter concrete classes. -* -*/ - - - -#include "yuv2rgb16.h" - -// --------------------------------------------------------- -// CYuv2Rgb16::CYuv2Rgb16() -// Standard C++ constructor. -// --------------------------------------------------------- -// -CYuv2Rgb16::CYuv2Rgb16() -{ - iWidth = iHeight = 0; -} - -// --------------------------------------------------------- -// CYuv2Rgb16::~CYuv2Rgb16() -// Destructor -// --------------------------------------------------------- -// -CYuv2Rgb16::~CYuv2Rgb16() -{ -} - - -// --------------------------------------------------------- -// CYuv2Rgb16::ConstructL() -// Symbian 2nd phase constructor can leave. -// --------------------------------------------------------- -// -void CYuv2Rgb16::ConstructL(TUint aWidth, TUint aHeight, TUint /*aMaxWidth*/, TUint /*aMaxHeight*/) -{ - iWidth = aWidth; - iHeight = aHeight; -} - -// --------------------------------------------------------- -// CYuv2Rgb16::Convert() -// Converts a YUV frame to a EColor64K frame -// --------------------------------------------------------- -// -void CYuv2Rgb16::Convert(const TUint8 *aYBuf, const TUint8 *aUBuf, - const TUint8 *aVBuf, - TUint aBufWidth, TUint aBufHeight, - TUint8 *aTarget, TUint aTargetScanlineLength) -{ - - - TUint cols; - TUint rows = iHeight; - - __ASSERT_ALWAYS((aBufWidth >= iWidth) && (aBufHeight >= iHeight), - User::Invariant()); - - // Convert all rows, two at a time - while ( rows ) - { - // Convert all pixels in this row, two at a time - cols = iWidth; - - TUint8* target1 = aTarget; - TUint8* target2 = aTarget + aTargetScanlineLength; - const TUint8* YPtr1 = aYBuf; - const TUint8* YPtr2 = aYBuf + aBufWidth; - const TUint8* UPtr = aUBuf; - const TUint8* VPtr = aVBuf; - - TUint y, u, v; - TInt rDiff, gDiff, bDiff; - TInt r, g, b; - - while ( cols ) - { - y = *(YPtr1)++; - u = *(UPtr)++ - 128; - v = *(VPtr)++ - 128; - - rDiff = UvToRDiff(v, u); - gDiff = UvToGDiff(v, u); - bDiff = UvToBDiff(v, u); - - // Convert upper left pixel - r = (TInt)y + rDiff; - r = r<0 ? 0 : r>255 ? 0xF800 : (r<<8)&0xF800; - g = (TInt)y - gDiff; - g = g<0 ? 0 : g>255 ? 0x07E0 : (g<<3)&0x07E0; - b = (TInt)y + bDiff; - b = b<0 ? 0 : b>255 ? 0x001F : (b>>3)&0x001F; - - // Write the pixel in RGB format - *(TUint16*)target1 = (TUint16)(r | g | b); - target1 += 2; - - // Convert upper right pixel - y = *(YPtr1)++; - - r = (TInt)y + rDiff; - r = r<0 ? 0 : r>255 ? 0xF800 : (r<<8)&0xF800; - g = (TInt)y - gDiff; - g = g<0 ? 0 : g>255 ? 0x07E0 : (g<<3)&0x07E0; - b = (TInt)y + bDiff; - b = b<0 ? 0 : b>255 ? 0x001F : (b>>3)&0x001F; - - *(TUint16*)target1 = (TUint16)(r | g | b); - target1 += 2; - - // Convert lower left pixel - y = *(YPtr2)++; - - r = (TInt)y + rDiff; - r = r<0 ? 0 : r>255 ? 0xF800 : (r<<8)&0xF800; - g = (TInt)y - gDiff; - g = g<0 ? 0 : g>255 ? 0x07E0 : (g<<3)&0x07E0; - b = (TInt)y + bDiff; - b = b<0 ? 0 : b>255 ? 0x001F : (b>>3)&0x001F; - - *(TUint16*)target2 = (TUint16)(r | g | b); - target2 += 2; - - // Convert lower right pixel - y = *(YPtr2)++; - - r = (TInt)y + rDiff; - r = r<0 ? 0 : r>255 ? 0xF800 : (r<<8)&0xF800; - g = (TInt)y - gDiff; - g = g<0 ? 0 : g>255 ? 0x07E0 : (g<<3)&0x07E0; - b = (TInt)y + bDiff; - b = b<0 ? 0 : b>255 ? 0x001F : (b>>3)&0x001F; - - *(TUint16*)target2 = (TUint16)(r | g | b); - target2 += 2; - - // Next two pixels - cols -= 2; - } - - // Next rows - rows -= 2; - aYBuf += 2*aBufWidth; - aUBuf += aBufWidth/2; - aVBuf += aBufWidth/2; - aTarget += 2*aTargetScanlineLength; - } -} diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/activequeue.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/activequeue.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,583 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Data buffering and queuing support definitions, class CActiveQueue. -* -*/ - - -// EXTERNAL RESOURCES - - -// Include Files - -#include "dataprocessor.h" -#include "activequeue.h" - - -// MEMBER FUNCTIONS - - -//============================================================================= - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - CActiveQueue() - - Standard C++ constructor - ------------------------------------------------------------------------------ -*/ - -CActiveQueue::CActiveQueue(TUint aNumberOfBlocks, TUint aBlockLength) -{ - // Remember the number of blocks and initial new block length - iInitialBlocks = aNumberOfBlocks; - iNewBlockLength = aBlockLength; - iStreamEnd = EFalse; -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - ~CActiveQueue() - - Standard C++ destructor - ------------------------------------------------------------------------------ -*/ - -CActiveQueue::~CActiveQueue() -{ - // Deallocate all blocks: - while ( iBlocks ) - { - TRAPD( error, FreeBlockL(iBlocks) ); - if (error != KErrNone) { } - } - - __ASSERT_DEBUG(iNumBlocks == 0, - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - ConstructL() - - Standard Symbian OS second-phase constructor, prepares the object for use - ------------------------------------------------------------------------------ -*/ - -void CActiveQueue::ConstructL() -{ - // Allocate initial blocks - while ( iInitialBlocks-- ) - { - // Get block - TActiveQueueBlock *block = AllocateBlockL(); - - // Add it to the free block list - block->iNextList = iFreeList; - iFreeList = block; - iNumFreeBlocks++; - } -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - SetReader() - - Sets a reader for the queue - ------------------------------------------------------------------------------ -*/ - -void CActiveQueue::SetReader(CDataProcessor *aReader, TAny *aUserPointer) -{ - iReader = aReader; - iReaderUserPointer = aUserPointer; -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - RemoveReader() - - Removes a reader from the queue - ------------------------------------------------------------------------------ -*/ - -void CActiveQueue::RemoveReader() -{ - __ASSERT_DEBUG(iReader, User::Panic(_L("CActiveQueue"), ENoReader)); - iReader = 0; -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - SetWriter() - - Sets a writer for the queue - ------------------------------------------------------------------------------ -*/ - -void CActiveQueue::SetWriter(CDataProcessor *aWriter, TAny *aUserPointer) -{ - iWriter = aWriter; - iWriterUserPointer = aUserPointer; -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - RemoveWriter() - - Removes a writer from the queue - ------------------------------------------------------------------------------ -*/ - -void CActiveQueue::RemoveWriter() -{ - __ASSERT_DEBUG(iWriter, User::Panic(_L("CActiveQueue"), ENoWriter)); - iWriter = 0; -} - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - ResetStreamEnd() - - Reset the status of the queue - ------------------------------------------------------------------------------ -*/ - -void CActiveQueue::ResetStreamEnd() -{ - iStreamEnd = EFalse; - // we should not have any blocks in full queue if we have reached stream end -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - NumFreeBlocks() - - Get the number of free blocks available for new data - ------------------------------------------------------------------------------ -*/ - -TUint CActiveQueue::NumFreeBlocks() -{ - return iNumFreeBlocks; -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - NumDataBlocks() - - Get the number of blocks with data queued - ------------------------------------------------------------------------------ -*/ - -TUint CActiveQueue::NumDataBlocks() -{ - return iNumDataBlocks; -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - GetFreeBlockL() - - Get a free block for writing data into the queue (writer) - ------------------------------------------------------------------------------ -*/ - -TPtr8 *CActiveQueue::GetFreeBlockL(TUint aBlockLength) -{ - __ASSERT_DEBUG(iWriter, User::Panic(_L("CActiveQueue"), ENoWriter)); - TActiveQueueBlock *block = 0; - - // If the requested block size is larger than the currently used length - // for new blocks, use the new size for all new blocks - if ( aBlockLength > iNewBlockLength ) - iNewBlockLength = aBlockLength; - - // Do we have free blocks? - if ( iNumFreeBlocks ) - { - // Yes, get a block from the queue: - __ASSERT_DEBUG(iFreeList != 0, - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); - block = iFreeList; - iFreeList = block->iNextList; - iNumFreeBlocks--; - - // If the block isn't large enough, discard it so that we'll allocate a - // new one. Don't discard more than one block to keep the number of - // blocks allocated constant. - if ( block->MaxLength() < (TInt) aBlockLength ) - { - FreeBlockL(block); - block = 0; - } - } - - // If we didn't get a suitable block, allocate a new one - if ( !block ) - block = AllocateBlockL(); - - __ASSERT_DEBUG(block->MaxLength() >= (TInt) aBlockLength, - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); - - block->SetLength(0); - - return block; -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - WriteBlock() - - Add a data block to the queue (writer) - ------------------------------------------------------------------------------ -*/ - -void CActiveQueue::WriteBlock(TPtr8 *aBlock) -{ - __ASSERT_DEBUG(iWriter, User::Panic(_L("CActiveQueue"), ENoWriter)); - __ASSERT_DEBUG(!iStreamEnd, - User::Panic(_L("CActiveQueue"), EWriteAfterStreamEnd)); - - // The block is really a TActiveQueueBlock - TActiveQueueBlock *block = (TActiveQueueBlock*) aBlock; - - - // Add the block to the queue: - if ( iDataQueueTail ) - { - // The queue is not empty - __ASSERT_DEBUG(iDataQueueHead && iNumDataBlocks, - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); - iDataQueueTail->iNextList = block; - iDataQueueTail = block; - block->iNextList = 0; - } - else - { - // The queue is empty -> this will be the first block - __ASSERT_DEBUG((!iDataQueueHead) && (!iNumDataBlocks), - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); - iDataQueueHead = block; - iDataQueueTail = block; - block->iNextList = 0; - } - iNumDataBlocks++; - - // If we have a reader, notify it about the new data - if ( iReader ) - iReader->InputDataAvailable(iReaderUserPointer); -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - ReadBlock() - - Read a data block from the queue (reader) - ------------------------------------------------------------------------------ -*/ - -TPtr8 *CActiveQueue::ReadBlock() -{ - __ASSERT_DEBUG(iReader, User::Panic(_L("CActiveQueue"), ENoReader)); - __ASSERT_DEBUG(((iNumDataBlocks && iDataQueueHead) || - ((!iNumDataBlocks) && (!iDataQueueHead))), - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); - - // If we don't have a block, return NULL - if ( !iNumDataBlocks ) - return 0; - - // Get the block from the queue head - TActiveQueueBlock *block = iDataQueueHead; - iDataQueueHead = block->iNextList; - iNumDataBlocks--; - if ( !iNumDataBlocks ) - { - // It was the only block in the queue - __ASSERT_DEBUG((!iDataQueueHead) && (iDataQueueTail == block), - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); - iDataQueueTail = 0; - } - __ASSERT_DEBUG((iDataQueueHead != block) && (iDataQueueTail != block), - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); - - // If it was the last block and the stream end has been signaled, notify - // the reader - if ( iStreamEnd && (!iNumDataBlocks) ) - iReader->StreamEndReached(iReaderUserPointer); - - // Return the block - return ((TPtr8*) block); -} - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - ReturnBlock() - - Return a read block back to the empty block list (reader) - ------------------------------------------------------------------------------ -*/ - -void CActiveQueue::ReturnBlock(TPtr8 *aBlock) -{ - __ASSERT_DEBUG(iReader, User::Panic(_L("CActiveQueue"), ENoReader)); - - // The block is really a TActiveQueueBlock - TActiveQueueBlock *block = (TActiveQueueBlock*) aBlock; - - - // Add it to the free list: - __ASSERT_DEBUG((((!iNumFreeBlocks) && (!iFreeList)) || - (iNumFreeBlocks && iFreeList)), - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); - - if ( block->MaxLength() == 0 ) - { - block->MaxLength(); - } - - block->iNextList = iFreeList; - iFreeList = block; - iNumFreeBlocks++; - - // If we have a writer, notify it about the empty block - if ( iWriter ) - iWriter->OutputSpaceAvailable(iWriterUserPointer); -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - WriteStreamEnd() - - Notify that the stream has ended (writer) - ------------------------------------------------------------------------------ -*/ - -void CActiveQueue::WriteStreamEnd() -{ - __ASSERT_DEBUG(iWriter, User::Panic(_L("CActiveQueue"), ENoWriter)); - - // Mark that the stream has ended - iStreamEnd = ETrue; - - // If we have a reader and there are no more blocks in the queue, signal - // the reader - if ( iReader && (!iNumDataBlocks) ) - iReader->StreamEndReached(iReaderUserPointer); -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - StreamEnded() - - Check if the writer has notified that the stream has ended (reader) - ------------------------------------------------------------------------------ -*/ - -TBool CActiveQueue::StreamEnded() -{ - return iStreamEnd; -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - AllocateBlockL() - - Allocates a new data block of size iNewBlockLengh - ------------------------------------------------------------------------------ -*/ - -TActiveQueueBlock *CActiveQueue::AllocateBlockL() -{ - // Allocate the data area for the block - TUint8 *data = (TUint8*) User::AllocLC(iNewBlockLength); - - // Allocate the block - TActiveQueueBlock *block = new (ELeave) TActiveQueueBlock(data, - iNewBlockLength); - - CleanupStack::Pop(data); - - // Add the block to the list of all blocks: - if ( iBlocks ) - { - block->iNextBlock = iBlocks; - block->iPrevBlock = 0; - iBlocks->iPrevBlock = block; - iBlocks = block; - } - else - { - block->iNextBlock = 0; - block->iPrevBlock = 0; - iBlocks = block; - } - - __ASSERT_DEBUG((iBlocks && - ((iBlocks->iNextBlock == 0) || - (iBlocks->iNextBlock != iBlocks))), - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); - - return block; -} - - - -/* ------------------------------------------------------------------------------ - - CActiveQueue - - FreeBlockL() - - Deallocates a block allocated with AllocateBlockL() - ------------------------------------------------------------------------------ -*/ - -void CActiveQueue::FreeBlockL(TActiveQueueBlock *aBlock) -{ - __ASSERT_DEBUG((((aBlock->iPrevBlock != aBlock->iNextBlock) || - (aBlock->iNextBlock == 0)) && - ((aBlock == iBlocks) || (aBlock->iPrevBlock != 0))), - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); - - // Remove the block from the list of all blocks: - if ( aBlock->iPrevBlock ) - aBlock->iPrevBlock->iNextBlock = aBlock->iNextBlock; - else - iBlocks = aBlock->iNextBlock; - if ( aBlock->iNextBlock ) - aBlock->iNextBlock->iPrevBlock = aBlock->iPrevBlock; - - // Free the data area - TUint8 *data = (TUint8*) aBlock->Ptr(); - User::Free(data); - - // Free the block: - delete aBlock; - - __ASSERT_DEBUG(((!iBlocks) || - (((iBlocks->iNextBlock == 0) || - (iBlocks->iNextBlock != iBlocks)) && - (iBlocks->iPrevBlock == 0))), - User::Panic(_L("CActiveQueue"), EInternalAssertionFailure)); -} - - - - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/audioprocessor.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/audioprocessor.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,291 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation of audio processor class. -* -*/ - - -// Include Files -#include "movieprocessorimpl.h" -#include "AudSong.h" -#include "audioprocessor.h" - -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -// Macros -#define APASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CAudioProcessor"), -30000)) - -const TUint KNumFramesInOneRun = 20; - - -// ================= MEMBER FUNCTIONS ======================= - - -// --------------------------------------------------------- -// CAudioProcessor::NewL -// Two-phased constructor. -// --------------------------------------------------------- -// -CAudioProcessor* CAudioProcessor::NewL(CMovieProcessorImpl *aMovieProcessor, CAudSong* aSong) -{ - CAudioProcessor* self = NewLC(aMovieProcessor, aSong); - CleanupStack::Pop(self); - return self; -} - -CAudioProcessor* CAudioProcessor::NewLC(CMovieProcessorImpl *aMovieProcessor, CAudSong* aSong) -{ - CAudioProcessor* self = new (ELeave) CAudioProcessor(aMovieProcessor, aSong); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - - -// --------------------------------------------------------- -// CAudioProcessor::NewL -// C++ default constructor -// --------------------------------------------------------- -// -CAudioProcessor::CAudioProcessor(CMovieProcessorImpl *aMovieProcessor, CAudSong* aSong) : CActive(EPriorityNormal) -{ - iMovieProcessor = aMovieProcessor; - iSong = aSong; - iProcessing = EFalse; -} - -// ----------------------------------------------------------------------------- -// CAudioProcessor::ConstructL -// Symbian 2nd phase constructor -// ----------------------------------------------------------------------------- -// -void CAudioProcessor::ConstructL() -{ - - if(!iSong) - { - User::Leave(KErrArgument); - } - - SetPriority( EPriorityNormal ); - // Add to active scheduler - CActiveScheduler::Add(this); - - // Make us active - SetActive(); - iStatus = KRequestPending; - -} - -// ----------------------------------------------------------------------------- -// CAudioProcessor::~CAudioProcessor -// Destructor -// ----------------------------------------------------------------------------- -// -CAudioProcessor::~CAudioProcessor() -{ - PRINT((_L("CAudioProcessor::~CAudioProcessor() begin"))); - - Cancel(); - - PRINT((_L("CAudioProcessor::~CAudioProcessor() end"))); -} - - -// ----------------------------------------------------------------------------- -// CAudioProcessor::DoCancel() -// DoCancel for AO framework -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAudioProcessor::DoCancel() -{ - // Cancel our internal request - if ( iStatus == KRequestPending ) - { - PRINT((_L("CAudioProcessor::DoCancel() cancel request"))) - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrCancel); - } -} - -// ----------------------------------------------------------------------------- -// CAudioProcessor::RunL() -// Running method of AO framework -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAudioProcessor::RunL() -{ - - if (!iProcessing) - return; - - ProcessFramesL(); - -} - - -// ----------------------------------------------------------------------------- -// CAudioProcessor::ProcessFramesL() -// Process audio frames -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAudioProcessor::ProcessFramesL() -{ - - TInt progress = 0; - HBufC8* frame = 0; - TPtr8 ptr(0,0); - TTimeIntervalMicroSeconds time(0); - - TBool gotFrame = ETrue; // true indicates end of sequence - - TInt framesProcessed = 0; - - do - { - gotFrame = iSong->SyncProcessFrameL(frame,progress,time); - - if(gotFrame) - { - break; - } - - if (frame == NULL || frame->Size() == 0) - { - continue; - } - - CleanupStack::PushL(frame); - - TInt duration = I64INT(time.Int64()); - - ptr.Set((TUint8*)frame->Ptr(),frame->Length(),frame->Length()); - - User::LeaveIfError(iMovieProcessor->WriteAllAudioFrames((TDesC8&)ptr,duration)); - - CleanupStack::Pop(); - - if(frame != 0) - { - delete frame; - frame = 0; - } - - // Increment the frame number - framesProcessed++; - - if (framesProcessed >= KNumFramesInOneRun) - { - iStatus = KRequestPending; - SetActive(); - TRequestStatus *tmp = &iStatus; - User::RequestComplete( tmp, KErrNone ); - return; - } - - } while(!gotFrame); - - if(frame!=0) - { - delete frame; - frame = 0; - } - - // finished - iProcessing = EFalse; - - iMovieProcessor->AudioProcessingComplete(KErrNone); - -} - -// ----------------------------------------------------------------------------- -// CAudioProcessor::RunError() -// RunError method of AO framework -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CAudioProcessor::RunError(TInt aError) -{ - iProcessing = EFalse; - - iMovieProcessor->AudioProcessingComplete(aError); - - return KErrNone; -} - -// ----------------------------------------------------------------------------- -// CAudioProcessor::StartL() -// Stops audio processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAudioProcessor::StartL() -{ - PRINT((_L("CAudioProcessor::StartL() begin"))); - - if ( iProcessing ) - return; - - if (iSong->ClipCount(KAllTrackIndices) == 0) - { - iMovieProcessor->AudioProcessingComplete(KErrNone); - return; - } - - iSong->SyncStartProcessingL(); - - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - - iProcessing = ETrue; - - PRINT((_L("CAudioProcessor::StartL() end"))); -} - -// ----------------------------------------------------------------------------- -// CAudioProcessor::StopL() -// Stops audio processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CAudioProcessor::StopL() -{ - PRINT((_L("CAudioProcessor::StopL() begin"))); - - if ( !iProcessing ) - return; - - Cancel(); - - iSong->SyncCancelProcess(); - - iMovieProcessor->AudioProcessingComplete(KErrNone); - - iProcessing = EFalse; - - PRINT((_L("CAudioProcessor::StopL() end"))); -} - -// End of file - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/dataprocessor.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/dataprocessor.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,190 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Base class for data processor objects. -* -*/ - - - -// EXTERNAL RESOURCES - - -// Include Files - -#include "dataprocessor.h" - - - - -// MEMBER FUNCTIONS - - -//============================================================================= - - -/* ------------------------------------------------------------------------------ - - CDataProcessor - - CDataProcessor() - - Standard C++ constructor - ------------------------------------------------------------------------------ -*/ - -CDataProcessor::CDataProcessor(TInt aPriority) - : CActive(aPriority) -{ -} - - - -/* ------------------------------------------------------------------------------ - - CDataProcessor - - ~CDataProcessor() - - Standard C++ destructor - ------------------------------------------------------------------------------ -*/ - -CDataProcessor::~CDataProcessor() -{ - Cancel(); -} - - - -/* ------------------------------------------------------------------------------ - - CDataProcessor - - ConstructL() - - Standard Symbian OS second-phase constructor - ------------------------------------------------------------------------------ -*/ - -void CDataProcessor::ConstructL() -{ - // Add to active scheduler and activate - CActiveScheduler::Add(this); - SetActive(); - iStatus = KRequestPending; -} - - - -/* ------------------------------------------------------------------------------ - - CDataProcessor - - InputDataAvailable() - - Called by CActiveQueue when input data is available, simply signals the - object - ------------------------------------------------------------------------------ -*/ - -void CDataProcessor::InputDataAvailable(TAny* /*aUserPointer*/) -{ - if ( iStatus == KRequestPending ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } -} - - - -/* ------------------------------------------------------------------------------ - - CDataProcessor - - OutputSpaceAvailable() - - Called by CActiveQueue when output space is available, simply signals the - object - ------------------------------------------------------------------------------ -*/ - -void CDataProcessor::OutputSpaceAvailable(TAny* /*aUserPointer*/) -{ - - if ( iStatus == KRequestPending ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } - - -} - - - -/* ------------------------------------------------------------------------------ - - CDataProcessor - - StreamEndReached() - - Called by CActiveQeueue after all data has been read from a queue where - stream end has been signaled. Does nothing in this base class. - ------------------------------------------------------------------------------ -*/ - -void CDataProcessor::StreamEndReached(TAny* /*aUserPointer*/) -{ -} - - - -/* ------------------------------------------------------------------------------ - - CDataProcessor - - DoCancel() - - Cancels the internal request. - ------------------------------------------------------------------------------ -*/ - -void CDataProcessor::DoCancel() -{ - if ( iStatus == KRequestPending ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrCancel); - } -} - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/epoclib.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/epoclib.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,253 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Wrappers for Symbian OS -specific system functions. -* -*/ - - -#include -#include -#include "nrctyp32.h" -#include "epoclib.h" - -#define NAMELEN 120 -#define EL_EXPORT - - -EL_EXPORT void free(TAny *ptr) - - { -#ifdef MALLOC_DEBUG - if ( !ptr ) - return; - - unsigned *p32 = (unsigned*) (((unsigned) ptr) - (NAMELEN+8)); - - if ( p32[0] != 0xdaded1d0 ) - User::Panic(_L("BadFree"), 1); - - ptr = (TAny*) p32; -#endif - - // Dangling pointer check -// User::Free(ptr); - unsigned count = (unsigned) User::AllocLen(ptr); - TUint8 *p; - - p = (TUint8*) ptr; - while ( count >> 2 ) - { - *((TUint32*)p) = 0xfeedf1d0; - p += 4; - count -= 4; - } - while ( count ) - { - *(p++) = 0x17; - count--; - } - - User::Free(ptr); - } - -#ifdef MALLOC_DEBUG -EL_EXPORT TAny *debugMalloc(u_int32 size, char *file, int line) -#else -EL_EXPORT TAny *malloc(u_int32 size) -#endif - { - // Uninit checks -// return User::AllocL(size); - TAny *ptr; - unsigned count = size; - TUint8 *p; - -#ifdef MALLOC_DEBUG - ptr = User::AllocL(size + NAMELEN+8); - p = ((TUint8*) ptr) + NAMELEN+8; -#else - ptr = User::AllocL(size); - p = (TUint8*) ptr; -#endif - - while ( count >> 2 ) - { - *((TUint32*)p) = 0xdeadbeef; - p += 4; - count -= 4; - } - while ( count ) - { - *(p++) = 0x42; - count--; - } - -#ifdef MALLOC_DEBUG - unsigned *p32 = (unsigned*) ptr; - p32[0] = 0xdaded1d0; - p32[1] = (unsigned) line; - char *c = (char*) &p32[2]; - int n = NAMELEN; - while ( (*file != 0) && n ) - { - *(c++) = *(file++); - n--; - } - return (TAny*) (((unsigned) p32) + NAMELEN + 8); -#else - return ptr; -#endif - } - -EL_EXPORT TAny *realloc(void *memblock, u_int32 size) - { -#ifdef MALLOC_DEBUG - unsigned *p32 = (unsigned*) (((unsigned) memblock) - NAMELEN - 8); - - if ( p32[0] != 0xdaded1d0 ) - User::Panic(_L("BadRealloc"), 1); - - p32 = (unsigned*) User::ReAllocL((void*) p32, size+NAMELEN+8); - return (TAny*) (((unsigned) p32) + NAMELEN + 8); -#else - return User::ReAllocL(memblock, size); -#endif - } - - -#ifdef MALLOC_DEBUG -EL_EXPORT TAny *debugCalloc(u_int32 num, u_int32 size, char *file, int line) -{ - TAny *ptr; - TUint8 *p; - - ptr = User::Alloc(num*size + NAMELEN+8); - if ( !ptr ) - return 0; - p = ((TUint8*) ptr) + NAMELEN+8; - - Mem::Fill(p, size*num, 0); - - unsigned *p32 = (unsigned*) ptr; - p32[0] = 0xdaded1d0; - p32[1] = (unsigned) line; - char *c = (char*) &p32[2]; - int n = NAMELEN; - while ( (*file != 0) && n ) - { - *(c++) = *(file++); - n--; - } - return (TAny*) p; -} -#else -EL_EXPORT TAny *calloc(u_int32 num, u_int32 size) - - { - TAny *dest = User::Alloc(size*num); - Mem::Fill(dest, size*num, 0); - return dest; - } -#endif - -EL_EXPORT TAny *memset(TAny *dest, TInt c, u_int32 size) - { - Mem::Fill(dest, size, c); - return dest; //returning the value of dest as in windows - } -EL_EXPORT TAny *memcpy(TAny *dest, const TAny *src, u_int32 size) - { - Mem::Copy(dest, src, size); - return dest; - } - -EL_EXPORT TAny *memmove(TAny *dest, const TAny *src, u_int32 count) - { - Mem::Copy(dest,src,count); - return dest; - } - -long atol( - const char *nptr - ) -{ - int c; // current char - long total; // current total - int sign; // if '-', then negative, otherwise positive - - TLex8 string((unsigned char *)nptr); - // skip whitespace - string.SkipSpace(); - - //prendre un caratere dans string lui faire le sign - c = (int)string.Peek(); - string.Inc(); - - sign = c; // save sign indication - if (c == '-' || c == '+') - // skip sign - {c = (int)string.Peek(); - string.Inc(); - } - else //If c is not a sign, it is necessary to go increment back into the descriptors to get the right - //number - { - string.UnGet(); - } - - total = 0; - - while (string.Peek().IsDigit()) - { - total = 10 * total + (c - '0'); - string.Inc(); - c = (int)string.Peek(); - - } - - if (sign == '-') - return -total; - else - return total; /* return result, negated if necessary */ -} - - -/* -*int atoi(char *nptr) - Convert string to long -* -*Purpose: -* Converts ASCII string pointed to by nptr to binary. -* Overflow is not detected. Because of this, we can just use -* atol(). -* -*Entry: -* nptr = ptr to string to convert -* -*Exit: -* return int value of the string -* -*Exceptions: -* None - overflow is not detected. -* -*******************************************************************************/ - -EL_EXPORT int atoi( - const char *nptr - ) -{ - return (int)atol(nptr); -} -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/movieprocessor.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/movieprocessor.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,221 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation of the movie processor -* interface class. -* -*/ - - -// EXTERNAL RESOURCES - -// Include Files - -#include "movieprocessorimpl.h" -#include "VedMovie.h" -#include "movieprocessor.h" -#include "VideoProcessorAudioData.h" - - -// ----------------------------------------------------------------------------- -// CMovieProcessor::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CMovieProcessor* CMovieProcessor::NewL() - - { - CMovieProcessor* self = NewLC(); - CleanupStack::Pop(self); - return self; - } - -CMovieProcessor* CMovieProcessor::NewLC() - { - CMovieProcessor* self = new (ELeave) CMovieProcessor(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -// ----------------------------------------------------------------------------- -// CMovieProcessor::CMovieProcessor() -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CMovieProcessor::CMovieProcessor() - { - iMovieProcessor=0; - } - -// ----------------------------------------------------------------------------- -// CMovieProcessor::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CMovieProcessor::ConstructL() - { - iMovieProcessor = CMovieProcessorImpl::NewL(); - } - -// ----------------------------------------------------------------------------- -// CMovieProcessor::~CMovieProcessor -// Destructor. -// ----------------------------------------------------------------------------- -// -CMovieProcessor::~CMovieProcessor() -{ - iAudioDataArray.ResetAndDestroy(); - if(iMovieProcessor) - { - delete iMovieProcessor; - iMovieProcessor=0; - } -} - -// ----------------------------------------------------------------------------- -// CMovieProcessor::StartMovieL -// Prepares the processor for processing a movie and starts processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessor::StartMovieL(CVedMovieImp* aMovie, const TDesC& aFileName, - RFile* aFileHandle,MVedMovieProcessingObserver* aObserver) - { - iMovieProcessor->StartMovieL(aMovie, aFileName, aFileHandle, aObserver); - } - - -// ----------------------------------------------------------------------------- -// CMovieProcessor::GetVideoClipPropertiesL -// Retrieves information about the given clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessor::GetVideoClipPropertiesL(const TDesC& aFileName, - RFile* aFileHandle, - TVedVideoFormat& aFormat, - TVedVideoType& aVideoType, - TSize& aResolution, - TVedAudioType& aAudioType, - TTimeIntervalMicroSeconds& aDuration, - TInt& aVideoFrameCount, - TInt& aSamplingRate, - TVedAudioChannelMode& aChannelMode) - { - - iMovieProcessor->GetClipPropertiesL(aFileName, aFileHandle, aFormat, aVideoType, - aResolution, aAudioType, aDuration, aVideoFrameCount, aSamplingRate, aChannelMode); - - return; - - } - -// ----------------------------------------------------------------------------- -// CMovieProcessor::GenerateVideoFrameInfoArrayL -// Retrieves frames parameters for a clip to array -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessor::GenerateVideoFrameInfoArrayL(const TDesC& aFileName, RFile* aFileHandle, TVedVideoFrameInfo*& aVideoFrameInfoArray) - { - iMovieProcessor->GenerateVideoFrameInfoArrayL((const TDesC&)aFileName, aFileHandle,(TVedVideoFrameInfo*&)aVideoFrameInfoArray); - return; - } - -// ----------------------------------------------------------------------------- -// CMovieProcessor::GetMovieSizeEstimateL -// Calculates file size estimate for the output file -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessor::GetMovieSizeEstimateL(const CVedMovie* aMovie) - { - return iMovieProcessor->GetMovieSizeEstimateL(aMovie); - } - -// ----------------------------------------------------------------------------- -// CMovieProcessor::GetMovieSizeEstimateForMMSL -// Calculates file size estimate for the output file -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessor::GetMovieSizeEstimateForMMSL(const CVedMovie* aMovie, TInt aTargetSize, - TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds& aEndTime) - { - return iMovieProcessor->GetMovieSizeEstimateForMMSL(aMovie, aTargetSize, aStartTime, aEndTime); - } - - -// ----------------------------------------------------------------------------- -// CMovieProcessor::StartThumbL -// Initiates thumbnail generation -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessor::StartThumbL(const TDesC& aFileName, RFile* aFileHandle, TInt aIndex, - TSize aResolution, TDisplayMode aDisplayMode, TBool aEnhance) - { - iMovieProcessor->StartThumbL(aFileName, aFileHandle, aIndex, aResolution, aDisplayMode, aEnhance); - } - - -// ----------------------------------------------------------------------------- -// CMovieProcessor::ProcessThumbL -// Starts thumbnail image generation -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessor::ProcessThumbL(TRequestStatus &aStatus, TVedTranscodeFactor* aFactor) -{ - iMovieProcessor->ProcessThumbL(aStatus, aFactor); -} - -// ----------------------------------------------------------------------------- -// CMovieProcessor::FetchThumb -// Gets a pointer to completed thumbnail bitmap -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessor::FetchThumb(CFbsBitmap*& aThumb) -{ - iMovieProcessor->FetchThumb(aThumb); -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessor::CancelProcessingL -// Stops processing the movie -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessor::CancelProcessingL() -{ - iMovieProcessor->CancelProcessingL(); -} - -// ----------------------------------------------------------------------------- -// CMovieProcessor::SetMovieSizeLimit -// Sets the maximum size for the movie -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessor::SetMovieSizeLimit(TInt aLimit) - { - iMovieProcessor->SetMovieSizeLimit(aLimit); - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/movieprocessorimpl.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/movieprocessorimpl.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6444 +0,0 @@ -/* -* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "Symbian Foundation License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Implementation for movie processor -* -*/ - - -// Include Files - -#include "movieprocessorimpl.h" -#include "statusmonitor.h" -#include "activequeue.h" -#include "mp4parser.h" -#include "mp4composer.h" -#include "videoencoder.h" -#include "yuv2rgb12.h" -#include "yuv2rgb16.h" -#include "yuv2rgb24.h" -#include "VideoProcessorAudioData.h" -#include "DisplayChain.h" -#include "VedRgb2YuvConverter.h" -#include "vedaudiosettings.h" -#include "vedvideosettings.h" -#include "AudSong.h" -#include "audioprocessor.h" -#include "SizeEstimate.h" -#include "vedavcedit.h" - -// Local Constants - -const TUint KReadBufInitSize = 512; // stream start buffer initial size -//const TInt KVideoProcessorPriority = CActive::EPriorityHigh; -const TUint KVideoQueueBlocks = 16; -const TUint KVideoQueueBlockSize = 256; -const TInt KDemuxPriority = CActive::EPriorityHigh; -const TUint KInitialAudioBufferSize = 1024; -const TUint KInitialVideoBufferSize = 10240; -const TUint KMaxVideoSpeed = 1000; -const TUint KVideoTimeScale = 5000; // for both normal & generated clips -const TUint KAMRAudioTimeScale = 8000; - -const TUint KDiskSafetyLimit = 400000; // Amount of free disk space to leave unused - -_LIT(KTempFilePath ,"c:\\system\\temp\\"); // path for temp file used in image insertion - -// An assertion macro wrapper to clean up the code a bit -#define VPASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CMovieProcessorImpl"), EInvalidInternalState)) - -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -// ================= MEMBER FUNCTIONS ======================= - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CMovieProcessorImpl* CMovieProcessorImpl::NewL() -{ - CMovieProcessorImpl* self = NewLC(); - CleanupStack::Pop(self); - return self; -} - -CMovieProcessorImpl* CMovieProcessorImpl::NewLC() -{ - CMovieProcessorImpl* self = new (ELeave) CMovieProcessorImpl(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::CMovieProcessorImpl -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CMovieProcessorImpl::CMovieProcessorImpl() -: CActive(EPriorityNormal), iReadImageDes(0,0), iReadDes(0, 0) -{ - // Reset state - iState = EStateIdle; - iDataFormat = EDataAutoDetect; - iAudioFramesInSample = KVedAudioFramesInSample; - - iStartTransitionEffect = EVedStartTransitionEffectNone; - iMiddleTransitionEffect = EVedMiddleTransitionEffectNone; - iPreviousMiddleTransitionEffect = EVedMiddleTransitionEffectNone; - iEndTransitionEffect = EVedEndTransitionEffectNone; - iSpeed = KMaxVideoSpeed; - iColorEffect = EVedColorEffectNone; - iNumberOfVideoClips=1; - iTr.iTrPrevNew = -1; - iTr.iTrPrevOrig = -1; - iStartFrameIndex = -1; - iMovieSizeLimit = 0; - iFrameParametersSize = 0; - - // We are now properly initialized - iState = EStateIdle; - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::~CMovieProcessorImpl -// Destructor. -// ----------------------------------------------------------------------------- -// -CMovieProcessorImpl::~CMovieProcessorImpl() -{ - - Cancel(); - - TInt error = KErrNone; - - TRAP(error, DoCloseVideoL()); - - DeleteClipStructures(); - - if (iFrameParameters) - { - User::Free(iFrameParameters); - iFrameParameters = 0; - } - - if (iVideoClipParameters) - { - User::Free(iVideoClipParameters); - iVideoClipParameters = 0; - } - - if (iOutAudioBuffer) { - delete iOutAudioBuffer; - iOutAudioBuffer=0; - } - - if (iOutVideoBuffer) { - delete iOutVideoBuffer; - iOutVideoBuffer=0; - } - - // although this should be released by VideoEditorEngine, - // the following is still needed in case of leave - - if(iDemux) - { - delete iDemux; - iDemux = 0; - } - - if(iVideoProcessor) - { - delete iVideoProcessor; - iVideoProcessor = 0; - } - - if (iComposer) { - delete iComposer; - iComposer = 0; - } - - if (iAudioProcessor) - { - delete iAudioProcessor; - iAudioProcessor = 0; - } - - if(iImageComposer) - { - delete iImageComposer; - iImageComposer=0; - } - - if (iImageAvcEdit) - { - delete iImageAvcEdit; - iImageAvcEdit = 0; - } - - if (iYuvImageBuf) - { - User::Free(iYuvImageBuf); - iYuvImageBuf=0; - } - - if(iVideoEncoder) - { - delete iVideoEncoder; - iVideoEncoder = 0; - } - - if(iParser) - { - delete iParser; - iParser = 0; - } - if(iVideoQueue) - { - delete iVideoQueue; - iVideoQueue = 0; - } - - if (iWaitScheduler) - { - delete iWaitScheduler; - iWaitScheduler = 0; - } - - if(iMonitor) - { - delete iMonitor; - iMonitor = 0; - } - - if (iReadBuf) - User::Free(iReadBuf); - - if (iRgbBuf) - { - delete iRgbBuf; - iRgbBuf = 0; - } - - if (iOutBitmap) - { - delete iOutBitmap; - iOutBitmap = 0; - } - - if (iSizeEstimate) - { - delete iSizeEstimate; - iSizeEstimate = 0; - } - - if (iAvcEdit) - { - delete iAvcEdit; - iAvcEdit = 0; - } - - if (iImageYuvConverter) - { - delete iImageYuvConverter; - iImageYuvConverter = 0; - } - - // for transition effect - if ( iFsConnected ) - { - TRAP(error, CloseTransitionInfoL()); - iFs.Close(); - iFsConnected = EFalse; - } -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::ConstructL() -{ - - // Allocate stream reading buffer - iReadBuf = (TUint8*) User::AllocL(KReadBufInitSize); - iBufLength = KReadBufInitSize; - - iClipFileName.Zero(); - iOutputMovieFileName.Zero(); - - iWaitScheduler = new (ELeave) CActiveSchedulerWait; - - // Add to active scheduler - CActiveScheduler::Add(this); - - iSizeEstimate = CSizeEstimate::NewL(this); - - iState = EStateIdle; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::StartMovieL -// Prepares the processor for processing a movie and starts processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::StartMovieL(CVedMovieImp* aMovie, const TDesC& aFileName, RFile* aFileHandle, - MVedMovieProcessingObserver* aObserver) -{ - - PRINT((_L("CMovieProcessorImpl::StartMovieL() begin"))) - - // reset member variables - ResetL(); - - // get arguments - iMovie = aMovie; - if (!iMovie) - User::Leave(KErrArgument); - - iOutputMovieFileName = aFileName; - iOutputFileHandle = aFileHandle; - - CVedMovieImp* movie = (iMovie); - iObserver = aObserver; - - if (!iObserver) - User::Leave(KErrArgument); - - if (iMonitor) - { - delete iMonitor; - iMonitor = 0; - } - - // Create a status monitor object: - iMonitor = new (ELeave) CStatusMonitor(iObserver, this, aMovie); - iMonitor->ConstructL(); - - // update movie properties - iFramesProcessed=0; - iNumberOfVideoClips = iMovie->VideoClipCount(); - iNumberOfAudioClips = iMovie->AudioClipCount(); - - // calculate total movie duration for progress bar: video & audio tracks. - // in milliseconds - iTotalMovieDuration = TInt64(2) * ( movie->Duration().Int64()/1000 ); - - for (TInt i = 0; i < iNumberOfVideoClips; i++) - { - CVedVideoClip* currentClip = movie->VideoClip(i); - CVedVideoClipInfo* currentInfo = currentClip->Info(); - - // Take time to generate a clip into account - if (currentInfo->Class() == EVedVideoClipClassGenerated) - { - iTotalMovieDuration += currentInfo->Duration().Int64()/1000; - } - } - - // set media types - SetOutputMediaTypesL(); - - // get transcode factors: bitstream mode & time inc. resolution - GetTranscodeFactorsL(); - - // set video transcoding parameters - SetupTranscodingL(); - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - // check if AVC editing is involved - TBool avcEditing = ( iOutputVideoType == EVideoAVCProfileBaseline ); - for(TInt i = 0; i < movie->VideoClipCount() && avcEditing == EFalse; i++) - { - CVedVideoClip* currentClip = movie->VideoClip(i); - CVedVideoClipInfo* currentInfo = currentClip->Info(); - - if( currentInfo->Class() == EVedVideoClipClassFile && - (currentInfo->VideoType() == EVedVideoTypeAVCBaselineProfile) ) - { - avcEditing = ETrue; - break; - } - } - - if (avcEditing) - { - // create AVC editing instance - iAvcEdit = CVedAVCEdit::NewL(); - } - - if (iOutputVideoType == EVideoAVCProfileBaseline) - { - // set level - iAvcEdit->SetOutputLevel( GetOutputAVCLevel() ); - } - -#endif - - // Check - //iOutputAudioType = EAudioAMR; // default is Amr if all are generated - - if ( iFsConnected == EFalse ) - { - User::LeaveIfError( iFs.Connect() ); - iFsConnected = ETrue; - } - - if (iNumberOfVideoClips) - { - iStartTransitionEffect = aMovie->StartTransitionEffect(); - iEndTransitionEffect = aMovie->EndTransitionEffect(); - CloseTransitionInfoL(); - } - - iImageEncodeProcFinished = 0; // to indicate whether encode images process is finished - iImageEncodedFlag = 0; // has an image been encoded - iFirstTimeProcessing = 0; - iTotalImagesProcessed = 0; - iImageClipCreated = 0; // has an image clip been created - - iImageVideoTimeScale = KVideoTimeScale; // Initializing to standard value - iGetFrameInProgress = 0; - iOutputAudioTimeSet = 0; - iOutputVideoTimeSet = 0; - iAllGeneratedClips = 0; // Indicates if all the clips in the movie are generated clips - 0 indicates false - iEncodeInProgress = 0; // Indicates encoding is not in progress - iFirstClipHasNoDecInfo = EFalse; - - // Allocate memory for frame parameters array - if (iFrameParameters) - User::Free(iFrameParameters); - - iFrameParameters = 0; - iFrameParameters = (struct TFrameParameters *)User::AllocL(iFrameParametersSize * sizeof(struct TFrameParameters)); - Mem::Fill(iFrameParameters, iFrameParametersSize * sizeof(TFrameParameters), 0); - - InitializeClipStructuresL(); - - // second pass starts here - // load first clip properties - iVideoClipNumber=0; - iAudioClipNumber=0; - - if (iNumberOfVideoClips) - iVideoClip = movie->VideoClip(iVideoClipNumber); - - // if clip is not file-based, then call some other initializer - TInt firstClipIsGenerated = 0; - iFirstClipIsGen = EFalse; - - // what if iNumberOfVideoClips == 0, this will fail ! - if(iNumberOfVideoClips && iVideoClip->Info()->Class() == EVedVideoClipClassGenerated) - { - // since frame parameters are not available here, use temporary instantiation for composer - TemporaryInitializeGeneratedClipL(); - // note that we may need to create a parser temporarily - firstClipIsGenerated = 1; - iFirstClipIsGen = ETrue; - } - else - { - InitializeClipL(); // check details inside initialization - } - - if(iOutputAudioType == EAudioAMR) - { - if( iAudioType == EAudioNone) - iAudioType = EAudioAMR; - iAudioFramesInSample = KVedAudioFramesInSample; - } - - else if(iOutputAudioType == EAudioAAC) - { - if( iAudioType == EAudioNone) - { - iAudioType = EAudioAAC; - iFirstClipHasNoDecInfo = ETrue; // because it has no audio so it will have no decoder specific Info - } - iAudioFramesInSample = 1; - } - - - VPASSERT(!iComposer); - // initialize composer - if (iOutputFileHandle) - iComposer = CMP4Composer::NewL(iOutputFileHandle, (CParser::TVideoFormat)iOutputVideoType, (CParser::TAudioFormat)iOutputAudioType, iAvcEdit); - else - iComposer = CMP4Composer::NewL(iOutputMovieFileName, (CParser::TVideoFormat)iOutputVideoType, (CParser::TAudioFormat)iOutputAudioType, iAvcEdit); - - iFramesProcessed = 0; - iStartingProcessing = ETrue; - - VPASSERT(iOutputVideoTimeScale); - VPASSERT(iOutputAudioTimeScale); - VPASSERT(iAudioFramesInSample); - - // write video & audio descriptions - CComposer::TStreamParameters streamParameters; - - if(iAllGeneratedClips == 0) // if all were generated initialize to default - { - if (iNumberOfVideoClips) - { - streamParameters = (CComposer::TStreamParameters &)iParser->iStreamParameters; - TSize tmpSize = iMovie->Resolution(); - streamParameters.iVideoWidth = tmpSize.iWidth; /* iVideoParameters.iWidth; */ - streamParameters.iVideoHeight = tmpSize.iHeight; /* iVideoParameters.iHeight; */ - streamParameters.iHaveAudio = ETrue; //because u always insert silent amr frames atleast//aac frames - if(iOutputAudioType == EAudioAMR) - streamParameters.iAudioFormat = (CComposer::TAudioFormat)CComposer::EAudioFormatAMR; - - else if(iOutputAudioType == EAudioAAC) - streamParameters.iAudioFormat = (CComposer::TAudioFormat)CComposer::EAudioFormatAAC; //if amr out is amr else aac if none it will be none - - } - else - { - // No video, only audio; generate black frames. Can't use iParser->iStreamParameters since iParser doesn't exist - // SetHeaderDefaults() checked the resolution from movie to iVideoParameters - streamParameters.iVideoWidth = iVideoParameters.iWidth; - streamParameters.iVideoHeight = iVideoParameters.iHeight; - } - } - else - { - - /* since all clips inserted are generated */ - iVideoType = iOutputVideoType; - - VPASSERT( (iVideoType == EVideoH263Profile0Level10) || - (iVideoType == EVideoH263Profile0Level45) || - (iVideoType == EVideoMPEG4) || - (iVideoType == EVideoAVCProfileBaseline) ); - - streamParameters.iCanSeek = ETrue; - streamParameters.iNumDemuxChannels = 1; /* Because video will be there */ - TTimeIntervalMicroSeconds movduration = TTimeIntervalMicroSeconds(movie->Duration()); - TInt64 alllength = movduration.Int64(); - streamParameters.iAudioLength = I64INT(alllength); - streamParameters.iVideoLength = I64INT(alllength); - streamParameters.iStreamLength = I64INT(alllength); - streamParameters.iVideoWidth = iVideoParameters.iWidth; - streamParameters.iVideoHeight = iVideoParameters.iHeight; - - if (iOutputAudioType == EAudioAMR) - { - streamParameters.iAudioFormat = (CComposer::TAudioFormat) CComposer::EAudioFormatAMR; - streamParameters.iHaveVideo = ETrue; - streamParameters.iNumDemuxChannels++; - streamParameters.iAudioFramesInSample = KVedAudioFramesInSample; - iAudioFramesInSample = KVedAudioFramesInSample; - } - - else if (iOutputAudioType == EAudioAAC) - { - streamParameters.iAudioFormat = (CComposer::TAudioFormat) CComposer::EAudioFormatAAC; - streamParameters.iHaveVideo = ETrue; - streamParameters.iNumDemuxChannels++; - streamParameters.iAudioFramesInSample = 1; - iAudioFramesInSample = 1; // Same as above - } - - else - { - - streamParameters.iAudioFormat = (CComposer::TAudioFormat) CComposer::EAudioFormatNone; - streamParameters.iHaveAudio =EFalse; - streamParameters.iAudioLength =0; /* reset audio length as it was set to videolength */ - streamParameters.iAudioFramesInSample = KVedAudioFramesInSample; - iAudioFramesInSample = KVedAudioFramesInSample; - } - - streamParameters.iAudioTimeScale = KAMRAudioTimeScale; - streamParameters.iVideoTimeScale = iImageVideoTimeScale; - iOutputVideoTimeScale = iImageVideoTimeScale; - iOutputAudioTimeScale = KAMRAudioTimeScale; - - } - - TAudFileProperties outProp = iMovie->Song()->OutputFileProperties(); - - if (iMovie->Song()->ClipCount(KAllTrackIndices) > 0) - { - if ( outProp.iAudioType == EAudAAC_MPEG4) - { - iOutputAudioTimeScale = outProp.iSamplingRate; - - } - } - - streamParameters.iVideoFormat = (CComposer::TVideoFormat)iOutputVideoType; - streamParameters.iStreamBitrate = iMovie->VideoStandardBitrate(); - iComposer->ComposeHeaderL(streamParameters, iOutputVideoTimeScale, iOutputAudioTimeScale, iAudioFramesInSample); - - if( firstClipIsGenerated == 1 ) - { - // since first clip is generated, destroy parser - iMonitor->PrepareComplete(); - iMonitor->ProcessingStarted(iStartingProcessing); - iStartingProcessing = EFalse; - iState = EStateProcessing; - - // since first clip is generated, destroy parser - if(iAllGeneratedClips == 1) - { - if(iParser) - { - delete iParser; - iParser =0; - } - } - } - - PRINT((_L("CMovieProcessorImpl::StartMovieL() end"))) - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::SetOutputMediaTypesL -// Set output audio/video types -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::SetOutputMediaTypesL() -{ - - CVedMovieImp* movie = (iMovie); - - if( movie->VideoType() == EVedVideoTypeH263Profile0Level10 ) - iOutputVideoType = EVideoH263Profile0Level10; - - else if ( movie->VideoType() == EVedVideoTypeH263Profile0Level45 ) - iOutputVideoType = EVideoH263Profile0Level45; - - else if ( movie->VideoType() == EVedVideoTypeMPEG4SimpleProfile ) - iOutputVideoType = EVideoMPEG4; - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - else if ( movie->VideoType() == EVedVideoTypeAVCBaselineProfile ) - iOutputVideoType = EVideoAVCProfileBaseline; -#endif - - else - User::Leave(KErrArgument); - - CAudSong* songPointer = movie->Song(); - if ( songPointer->ClipCount(KAllTrackIndices) > 0 ) - { - if( movie->AudioType() == EVedAudioTypeAMR ) - iOutputAudioType = EAudioAMR; - - else if ( movie->AudioType() == EVedAudioTypeAAC_LC ) - iOutputAudioType = EAudioAAC; - else - User::Leave(KErrArgument); - } - else - { - // no audio - iOutputAudioType = EAudioNone; - } - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetTranscodeFactorsL -// Retrieve bitstream modes for input clips -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::GetTranscodeFactorsL() -{ - - if (!iNumberOfVideoClips) - return; - - CVedMovieImp* movie = (iMovie); - - iThumbnailInProgress = ETrue; - - InitializeClipStructuresL(); - - for(TInt i = 0; i < movie->VideoClipCount(); i++) - { - CVedVideoClip* currentClip = movie->VideoClip(i); - CVedVideoClipInfo* currentInfo = currentClip->Info(); - - if( currentInfo->Class() == EVedVideoClipClassFile ) - { - TVedTranscodeFactor factor; - - if ( currentInfo->FileHandle() ) - { - iClipFileName.Zero(); - iClipFileHandle = currentInfo->FileHandle(); - } - else - { - iClipFileHandle = NULL; - iClipFileName = currentInfo->FileName(); - } - - InitializeClipL(); // opens the file & parses header - // open demux & decoder - - // Calculate the number of frames in the output clip - iFrameParametersSize += iParser->GetNumberOfVideoFrames(); - - iState = EStateProcessing; - - TInt error = iVideoProcessor->GetTranscodeFactorL(factor); - - if (error != KErrNone) - User::Leave(error); - - if ( ((factor.iStreamType == EVedVideoBitstreamModeMPEG4Resyn) - || (factor.iStreamType == EVedVideoBitstreamModeMPEG4DP) - || (factor.iStreamType == EVedVideoBitstreamModeMPEG4DP_RVLC) - || (factor.iStreamType == EVedVideoBitstreamModeMPEG4Resyn_DP) - || (factor.iStreamType == EVedVideoBitstreamModeMPEG4Resyn_DP_RVLC)) - && ( currentClip->Info()->Resolution() == movie->Resolution() ) - && ( iOutputVideoType != EVideoAVCProfileBaseline ) ) - { - // we do compressed domain transcoding for this clip, and it has - // other mpeg4 modes than the regular; we need to ensure the VOS/VOL header - // has the resync marked flag enabled - iMpeg4ModeTranscoded = ETrue; - } - - currentInfo->SetTranscodeFactor(factor); - - DoCloseVideoL(); // close all - - if (iAvcEdit) - { - delete iAvcEdit; - iAvcEdit = 0; - } - } - else - { - // Calculate the number of frames in the output clip - iFrameParametersSize += (TInt) currentInfo->VideoFrameCount(); - } - } - - iThumbnailInProgress = EFalse; - iState = EStateIdle; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::SetupTranscodingL -// Set video transcoding parameters -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::SetupTranscodingL() -{ - - if (!iNumberOfVideoClips) - return; - - CVedMovieImp* tmovie = (iMovie); - TBool transitionExists = EFalse;// Assume there are no middle transitions in any clip - TBool cutExists = EFalse; // Assuming there is no cut in any clip - TBool blackFrames = EFalse; // Assume there is no need to encode black frames in the end - TBool firstClipIsGen = EFalse; - TBool firstClipIsFullTranscoded = EFalse; - TBool clipFullTranscodingExists = EFalse; - - // Vos issues if first clip uses encoder - TBool atleastOneH263 = EFalse; - TBool atleastOneMPEG4 = EFalse; -// TBool atleastOneAVC = EFalse; - TBool differentModesExist = EFalse; - - // initially assume no mpeg4 files so no streammode - TVedVideoBitstreamMode streamMode = EVedVideoBitstreamModeUnknown; - TBool atleastOneGenerated = EFalse; // assuming that there are no generated clips - TBool allGeneratedClips = ETrue; // asssuming all are generated - iModeTranslationRequired = EFalse; // no need for translation in all generated - - TSize outputVideoResolution = tmovie->Resolution(); // since movie resolution is minimum resolution - - for(TInt i = 0; i < tmovie->VideoClipCount(); i++) - { - CVedVideoClip* currentClip = tmovie->VideoClip(i); - CVedVideoClipInfo* currentInfo = currentClip->Info(); - if( currentInfo->Class() == EVedVideoClipClassFile ) - { - allGeneratedClips = EFalse; // there is a file based clip - - if( (currentInfo->VideoType() == EVedVideoTypeH263Profile0Level10) || - (currentInfo->VideoType() == EVedVideoTypeH263Profile0Level45) ) - { - // if there is even one H263 output is H263 - atleastOneH263 = ETrue; - } - else if(currentInfo->VideoType() == EVedVideoTypeAVCBaselineProfile) - { -// atleastOneAVC = ETrue; - } - else - { - if(currentInfo->VideoType() == EVedVideoTypeMPEG4SimpleProfile) // if there is even one H263 output is H263 - { - atleastOneMPEG4 = ETrue; - if(streamMode == EVedVideoBitstreamModeUnknown) - { - // since previously no mpeg4 was found to set streammode - streamMode = currentInfo->TranscodeFactor().iStreamType; - } - else - { - if(streamMode != currentInfo->TranscodeFactor().iStreamType) // different modes in Mpeg4 - differentModesExist = ETrue; - } - } - else - { - //Error - improper or unsupported type file - User::Leave(KErrNotSupported); - } - } - - // Here check if any clip is cut and also if first clip is cut - TTimeIntervalMicroSeconds cutinTime = TTimeIntervalMicroSeconds(currentClip->CutInTime()); - if(cutinTime != TTimeIntervalMicroSeconds(0)) - { - // cut does exist so encoder will be used in at least one clip - if(i==0) // which means cut exists in first clip itself - { - iFirstClipIsCut = ETrue; - } - cutExists = ETrue; - } - - // check if the clip will be full transcoded also as then we can - // decide whether to change VOS bit and to set ModeTranslation as all would be encoded again - TSize currClipRes = currentInfo->Resolution(); - if( ( (outputVideoResolution.iWidth != currClipRes.iWidth) && - (outputVideoResolution.iHeight != currClipRes.iHeight) ) || - ( iOutputVideoType == EVideoMPEG4 && currentInfo->VideoType() == EVedVideoTypeAVCBaselineProfile ) ) - { - if(i == 0) - { - firstClipIsFullTranscoded = ETrue; //for VOS bit change - } - clipFullTranscodingExists = ETrue; - } - } - else - { - atleastOneGenerated = ETrue; - if(i == 0) // then first clip is generated - { - firstClipIsGen = ETrue; - } - } - - if( i != tmovie->VideoClipCount()-1 ) - { - if(tmovie->MiddleTransitionEffect(i) != EVedMiddleTransitionEffectNone ) - { - // this is required to check if any clips have - // middle transitions so mode translation will be required - transitionExists = ETrue; // even if all clips are of same mode - } - } - } - - if( (TVedStartTransitionEffect)tmovie->StartTransitionEffect() != EVedStartTransitionEffectNone ) - { - // even if all clips are of same mode but if it is different than what encoder uses transcoding is needed - transitionExists = ETrue; - } - - if( (TVedEndTransitionEffect)tmovie->EndTransitionEffect() != EVedEndTransitionEffectNone) - { - // even if all clips are of same mode but if it is different than what encoder uses transcoding is needed - transitionExists = ETrue; - } - if ( tmovie->Duration().Int64()/1000 > (tmovie->VideoClip(iNumberOfVideoClips-1)->EndTime().Int64()/1000) ) - { - // movie is longer than video track => black frames are encoded in the end => even if all clips are of same mode but if it is different than what encoder uses transcoding is needed - blackFrames = ETrue; - } - - if(iOutputVideoType == EVideoMPEG4) // if different modes dont exist then if output is Mpeg4 - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), output type = MPEG-4"))) - - if(differentModesExist) - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), different modes exist"))) - - // if there are differnet mode Mpeg4's then mode translation is required - iModeTranslationRequired = ETrue; // regardless of there being generated clips - } - else - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), different modes don't exist"))) - - if(atleastOneGenerated) // if there are any generated clips - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), at least one generated"))) - - if(atleastOneMPEG4) // if there is one Mpeg4 clip atleast - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), at least one MPEG-4"))) - - if( (streamMode == EVedVideoBitstreamModeMPEG4Regular) ) //generated clips mode will be regular so u need to convert others - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), streamMode is regular"))) - - // if all are regular mode no need to change mode - iModeTranslationRequired = EFalse; - } - else - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), streamMode != regular"))) - - // to regular (with resync) - iModeTranslationRequired = ETrue; - } - } - else - { - if(atleastOneH263) - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), at least one H.263"))) - iModeTranslationRequired = ETrue; - } - else - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), all are generated"))) - // all are generated no h263 or mpeg4 - iModeTranslationRequired = EFalse; - } - } - } - else - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), no generated clips"))) - - if(atleastOneH263) - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), at least one H.263"))) - iModeTranslationRequired = ETrue; - } - else - { - PRINT((_L("CMovieProcessorImpl::SetupTranscodingL(), no H.263"))) - // still open if we have MPEG-4 nonregular + encoding - iModeTranslationRequired = EFalse; - } - } - } - } - else - { - // output is H263 or AVC so mode translation not required - iModeTranslationRequired = EFalse; - } - - // make decision of mode translation based on whether there - // was a cut or transition or resolution transcoding in any clip - - if(iOutputVideoType == EVideoMPEG4) // if output is Mpeg4 - { - if ((!allGeneratedClips) && (streamMode != EVedVideoBitstreamModeMPEG4Regular)) // in case of differentModesExist, iModeTranslationRequired is already ETrue - { - // If we need to encode smth but not all (if all generated => no mix), encoding results in regular stream. - // However, if input has nonregular, we need to translate the mode - if(transitionExists || clipFullTranscodingExists || cutExists || blackFrames) - { - iModeTranslationRequired = ETrue; - } - } - // make Decision for changing the Vos of the output movie based on whether the first frame would be encoded - if(firstClipIsGen || firstClipIsFullTranscoded || ((TVedStartTransitionEffect)tmovie->StartTransitionEffect() != EVedStartTransitionEffectNone) || iFirstClipIsCut ) - { - iFirstClipUsesEncoder = ETrue; // this indicates that you may need to change Vos bit but final decision is - } // done based on whether it was due to cut on the fly - } - -} - - - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::CreateImage3GPFilesL -// creates the necessary 3gp files from the given frames -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::CreateImage3GPFilesL(TVideoOperation aCreateMode) -{ - - if (iProcessingCancelled) - return KErrNone; - - if(aCreateMode == EVideoEncodeFrame) - { - // encode frame - TTimeIntervalMicroSeconds inMicroSeconds = TTimeIntervalMicroSeconds(iVideoClip->Info()->Generator()->VideoFrameStartTime(iTotalImagesProcessed)); - - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - iVideoEncoder->EncodeFrameL(iReadImageDes, iStatus, inMicroSeconds); - - // EncodeGiven - iImageEncodedFlag = 1; - iEncodeInProgress = 1; - - return KErrNone; - } - else - { - // a frame has been encoded, write it to output 3gp buffer - - // composer composing the movie - if(iStatus == KErrNone) - { - TBool isKeyFrame = 0; - TPtrC8 buf(iVideoEncoder->GetBufferL(isKeyFrame)); - - TBool modeChanged = EFalse; - - if ( iTotalImagesProcessed == 1 && iVideoType == EVideoMPEG4 ) - { - modeChanged = ETrue; - } - - /* composing is based on isIntra only */ - TBool firstFrame = EFalse; - if(iTotalImagesProcessed == 1) - { - firstFrame = ETrue; - - // VOS header size is parsed in composer for MPEG-4 - iMP4SpecificSize = 0; - } - - TInt64 durntTest = iVideoClip->Info()->Generator()->VideoFrameDuration(iTotalImagesProcessed-1).Int64(); - TInt64 durntsix = TInt64(((I64REAL(durntTest)/(TReal)1000)*(TReal) iImageVideoTimeScale) +0.5); - TInt durnt = I64INT(durntsix); - /* converting to ticks */ - durnt = (durnt)/1000; - - iGeneratedProcessed += durntTest/1000; - IncProgressBar(); /* indicate to gui about progress */ - - iImageComposer->WriteFrames((TDesC8&)buf, buf.Size(), durnt, isKeyFrame , - 1/*numberOfFrames*/, CMP4Composer::EFrameTypeVideo, iMP4SpecificSize,modeChanged, - firstFrame,iVideoClip->Info()->TranscodeFactor().iStreamType, ETrue); - - iVideoEncoder->ReturnBuffer(); - } - /* end composing */ - - return KErrNone; - } -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::ProcessImageSetsL -// Prepares for creating the necessary 3gp files from the given frames -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::ProcessImageSetsL(TVideoOperation aCreateMode) -{ - - if (iProcessingCancelled) - return KErrNone; - - if(iTotalImagesProcessed == 0 && iImageEncodeProcFinished == 0) - { - TFileName outputFileName = TPtrC(KTempFilePath); - iCurrentMovieName = outputFileName; - iCurrentMovieName.Append( _L( "Im" ) ); - iCurrentMovieName.Append( _L( "_nokia_vpi.tmp" ) ); - -#ifdef _DEBUG - if (iOutputVideoType == EVideoAVCProfileBaseline) - VPASSERT(iImageAvcEdit); -#endif - - iImageComposer = CMP4Composer::NewL(iCurrentMovieName, (CParser::TVideoFormat)iOutputVideoType, - CParser::EAudioFormatNone, - iImageAvcEdit); - - CComposer::TStreamParameters innerStreamParameters; - /* there will be no video clips initially, so initialize to default parameters of movie */ - TSize innerRes =(TSize)iVideoClip->Info()->Resolution(); /* resolution from generator */ - innerStreamParameters.iVideoWidth = innerRes.iWidth; /* iVideoParameters.iWidth */ - innerStreamParameters.iVideoHeight = innerRes.iHeight; /* iVideoParameters.iHeight */; - /* width and height are initialised to the proper values from the clip */ - innerStreamParameters.iStreamBitrate = 25000 /* iStreamBitrate */; - - /* set the duration of the video clip */ - TTimeIntervalMicroSeconds iTempVideoLength= TTimeIntervalMicroSeconds(iVideoClip->Info()->Duration()); - TInt64 iTimeInMicro = (iTempVideoLength.Int64()/1000); - innerStreamParameters.iVideoLength= I64INT(iTimeInMicro); /* set the video length properly */ - innerStreamParameters.iStreamLength= I64INT(iTimeInMicro); - innerStreamParameters.iAudioLength = 0; - innerStreamParameters.iAudioFormat = (CComposer::TAudioFormat)0; - CVedMovieImp* tempm = (iMovie); - - if(iOutputVideoType == EVideoMPEG4) - { - /* initialize to default constants for generated clips in case of MPEG-4 */ - innerStreamParameters.iVideoFormat = (CComposer::TVideoFormat) CComposer::EVideoFormatMPEG4; - TVedTranscodeFactor tempFact; - tempFact.iStreamType = EVedVideoBitstreamModeMPEG4Regular; - tempFact.iTRes = 29; - CVedVideoClip* currentClip = tempm->VideoClip(iVideoClipNumber); - CVedVideoClipInfo* currentInfo = currentClip->Info(); - currentInfo->SetTranscodeFactor(tempFact); /* set to default values, as initialized above */ - } - else if ( (iOutputVideoType == EVideoH263Profile0Level10) || - (iOutputVideoType == EVideoH263Profile0Level45) ) - { - - innerStreamParameters.iVideoFormat = (CComposer::TVideoFormat)iOutputVideoType; - /* initialize to default constants for generated clips in case of H.263 */ - TVedTranscodeFactor tempFact; - tempFact.iStreamType = EVedVideoBitstreamModeH263; - tempFact.iTRes = 0; - CVedVideoClip* currentClip = tempm->VideoClip(iVideoClipNumber); - CVedVideoClipInfo* currentInfo = currentClip->Info(); - currentInfo->SetTranscodeFactor(tempFact); /* set to default values, as initialized above */ - } - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - else if (iOutputVideoType == EVideoAVCProfileBaseline) - { - /* initialize to default constants for generated clips in case of AVC */ - innerStreamParameters.iVideoFormat = (CComposer::TVideoFormat) CComposer::EVideoFormatAVCProfileBaseline; - TVedTranscodeFactor tempFact; - tempFact.iStreamType = EVedVideoBitstreamModeAVC; - tempFact.iTRes = 30; - CVedVideoClip* currentClip = tempm->VideoClip(iVideoClipNumber); - CVedVideoClipInfo* currentInfo = currentClip->Info(); - currentInfo->SetTranscodeFactor(tempFact); /* set to default values, as initialized above */ - } -#endif - else - User::Leave(KErrNotSupported); - - - if(iAllGeneratedClips == 1) - { - innerStreamParameters.iVideoWidth = iVideoParameters.iWidth; - innerStreamParameters.iVideoHeight = iVideoParameters.iHeight; - } - innerStreamParameters.iCanSeek = ETrue; - innerStreamParameters.iHaveVideo = ETrue; - innerStreamParameters.iHaveAudio =EFalse; - innerStreamParameters.iAudioFramesInSample =0; - innerStreamParameters.iAudioTimeScale =KAMRAudioTimeScale; /* 8000 */ - innerStreamParameters.iVideoTimeScale =iImageVideoTimeScale; - iImageComposer->ComposeHeaderL(innerStreamParameters,iImageVideoTimeScale /*iOutputVideoTimeScale*/, - iOutputAudioTimeScale, iAudioFramesInSample); - - if(!iVideoEncoder) - { - /* It should never come here as iVideoEncoder is created before in hand */ - PRINT(_L("ERROR I VIDEOENCODER DOES NOT EXIST")); - return 1; /* Indicating error */ - } - else - { - //iVideoEncoder->Start(); /* make sure it is started only once */ - } - - TInt erInitialize = CreateImage3GPFilesL(aCreateMode); - iTotalImagesProcessed++; - return erInitialize; - } - else if (aCreateMode == EVideoEncodeFrame && iImageEncodeProcFinished == 0) - { - /* for encoding, you will read from file, so increment the number of images processed */ - TInt er = CreateImage3GPFilesL(aCreateMode); - /* before incrementing the number of images processed, check if it has actually been encoded */ - - iTotalImagesProcessed++; - - return er; - } - else if(aCreateMode == EVideoWriteFrameToFile && iImageEncodeProcFinished == 0) - { - // a frame has been encoded, write it to output 3gp buffer - TInt er2 = CreateImage3GPFilesL(aCreateMode); - return er2; - } - else if(aCreateMode == EVideoWriteFrameToFile && iImageEncodeProcFinished == 1) - { - return KErrGeneral; /* This should not happen */ - } - else - { - /* This should not happen */ - return KErrGeneral; - } -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::EncodeImageFrameL -// Encodes raw frames for 3gp generated clips -// The frame is in buffer pointed to by iReadImageDes. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::EncodeImageFrameL() -{ - - if (iProcessingCancelled) - return KErrNone; - - iVideoEncoder->Stop(); - - TTimeIntervalMicroSeconds inMSeconds = TTimeIntervalMicroSeconds(iVideoClip->Info()->Generator()->VideoFrameStartTime(iTotalImagesProcessed)); - - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - iVideoEncoder->EncodeFrameL(iReadImageDes, iStatus,inMSeconds); - - iTotalImagesProcessed++; /* Now we have encoded, and previously we had not, so increment now */ - iImageEncodedFlag = 1; - iEncodeInProgress = 1; /* set to indicate encoding in progress */ - - return KErrNone; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::ProcessImageSetsL -// Decides whether to encode or request for a frame from generator, -// and in what mode to call the CreateImageFiles function -// The encoding is done calling the GetFrame, so it goes through the frame generator -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::DoImageSetProcessL() -{ - - if (iProcessingCancelled) - return; - - // we come here from RunL - - if(iImageEncodedFlag == 0 && iImageEncodeProcFinished == 0) - { - // Starting to process an image => issue GetFrame() -request - - if(iFirstTimeProcessing == 0) - { - // this will be known from a bit or flag from the video clip - iFirstTimeProcessing = 1; // this indicates that this is the first time we are getting info about this video clip - iTotalImagesProcessed = 0; - iNumOfImages = (TInt)iVideoClip->Info()->VideoFrameCount(); - } - TSize tempres = iMovie->Resolution(); - if(iTotalImagesProcessed < iNumOfImages) - { - iGetFrameInProgress = 1; // indicates that the GetFrame was called and will be in progress - iVideoClip->Info()->Generator()->GetFrameL(*this, /*0*/ iTotalImagesProcessed,&tempres, EColor4K, EFalse, 1); - } - else - { - // It should never come here though - iImageClipCreated = 1; - } - } - else if(iImageEncodedFlag == 1 && iImageEncodeProcFinished == 0) - { - // image has been encoded - - // tell the function to compose and return - iEncodeInProgress = 0; - iGetFrameInProgress = 0; // finished getting the frame, so if there's a cancel, no need to delete bitmap etc - ProcessImageSetsL(EVideoWriteFrameToFile); // composing of VedVideoClipgenerator, though its not used inside - if(iNumOfImages == iTotalImagesProcessed) /// if all images are over - { - iImageClipCreated = 1; - iImageEncodeProcFinished = 1; // finished creating the image 3GP file, so go ahead */ - iImageComposer->Close(); - - delete iImageComposer; - iImageComposer = 0; - - if(iParser) - { - delete iParser; - iParser = 0; - } - - /* set constant file name used as buffer */ - iClipFileName = TPtrC(KTempFilePath); - iClipFileName.Append( _L("Im_nokia_vpi.tmp") ); - - if (iImageAvcEdit) - { - delete iImageAvcEdit; - iImageAvcEdit = 0; - } - - if (iVideoEncoder) - { - iVideoEncoder->Stop(); - delete iVideoEncoder; - iVideoEncoder = 0; - } - - InitializeGeneratedClipL(); - /* reset the number of images for the next image set */ - iImageEncodedFlag = 0; - - if(!IsActive()) - { - SetActive(); // wait till the video encoder finishes initialising - iStatus = KRequestPending; - } - User::Free(iYuvImageBuf); - iYuvImageBuf = 0; - } - else - { - // request for a new frame - - User::Free(iYuvImageBuf); - iYuvImageBuf = 0; - TSize tempres = iMovie->Resolution(); - iGetFrameInProgress = 1; - iVideoClip->Info()->Generator()->GetFrameL(*this,iTotalImagesProcessed,&tempres,EColor4K,EFalse,1); - } - } -} - - - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::Reset -// Resets the processor for processing a new movie -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::ResetL() -{ - - // delete clip structures - DeleteClipStructures(); - - // delete video processing modules - iEncoderInitPending = EFalse; - iState = EStatePreparing; - DoCloseVideoL(); - iState = EStateIdle; - - VPASSERT(!iEncoderInitPending); - VPASSERT(!iVideoEncoder); - - if (iComposer) - { - delete iComposer; - iComposer = 0; - } - - if(iImageComposer) - { - delete iImageComposer; - iImageComposer=0; - } - - if (iImageAvcEdit) - { - delete iImageAvcEdit; - iImageAvcEdit = 0; - } - - if (iYuvImageBuf) - { - User::Free(iYuvImageBuf); - iYuvImageBuf=0; - } - - // for transition effect - if ( iFsConnected ) - { - CloseTransitionInfoL(); - iFs.Close(); - iFsConnected = EFalse; - } - - iDataFormat = EDataAutoDetect; - iStreamBitrate = 0; - iNumDemuxChannels = 0; - iOutputNumberOfFrames = 0; - iVideoType = EVideoH263Profile0Level10; - iAudioType = EAudioAMR; - iFirstFrameOfClip = EFalse; - iFirstFrameFlagSet = EFalse; - - iFirstClipUsesEncoder = EFalse; - iMpeg4ModeTranscoded = EFalse; - - iOutputVideoTimeScale = KVideoTimeScale; - iOutputAudioTimeScale = KAMRAudioTimeScale; - iOutputVideoType = EVideoNone; - iOutputAudioType = EAudioAMR; - - iProcessingCancelled = EFalse; - - iStartTransitionEffect = EVedStartTransitionEffectNone; - iMiddleTransitionEffect = EVedMiddleTransitionEffectNone; - iPreviousMiddleTransitionEffect = EVedMiddleTransitionEffectNone; - iEndTransitionEffect = EVedEndTransitionEffectNone; - iWriting1stColorTransitionFrame = EFalse; - i1stColorTransitionFrameTS = 0; - - iApplySlowMotion = ETrue; - iCurrentVideoTimeInTicks = 0.0; - iInitialClipStartTimeStamp = 0; - iStartingProcessing = EFalse; - iFramesProcessed = 0; - iProgress = 0; - iGeneratedProcessed = 0; - iAudioProcessingCompleted = EFalse; - iEncodingBlackFrames = EFalse; - - iTotalDurationInSample = 0; - iAudioProcessingCancelled = EFalse; - iWaitSchedulerStarted = EFalse; - - iCurrentMovieName.Zero(); - iAudioClipWritten = 0; - iVideoClipWritten = 0; - iDiskFull = EFalse; - iAudioFrameNumber = 0; - iVideoFrameNumber = 0; - iFrameBuffered = EFalse; - iVideoIntraFrameNumber = 0; - iVideoClipNumber=0; - iStartFrameIndex = 0; - iVideoClip=0; - iMovie=0; - iSpeed = KMaxVideoSpeed; - iColorEffect = EVedColorEffectNone; - iNumberOfVideoClips=0; - iEncoderBuffer = 0; - iEncodePending = 0; - iVideoClipDuration = 0; - iLeftOverDuration = 0; - iTimeStamp = 0; - - iThumbnailInProgress=EFalse; - iTotalMovieDuration = 0; - iFramesProcessed=0; - iStartCutTime = TTimeIntervalMicroSeconds(0); - iEndCutTime = TTimeIntervalMicroSeconds(0); - - iTr.iTrPrevNew = -1; - iTr.iTrPrevOrig = -1; - - iAudioFramesInSample = KVedAudioFramesInSample; - iAudioFramesInBuffer = 0; - iOutAudioBuffer=0; - iNumberOfAudioClipsCreated = 0; - iCurrentAudioTimeInMs = 0; - iTotalAudioTimeWrittenMs = 0; - iNumberOfAudioClips=0; - iAudioClipNumber=0; - iTimeStampListScaled = EFalse; - - iCurrentVideoSize = 0; - iCurrentAudioSize = 0; - iMovieSizeLimitExceeded = EFalse; - - iAllVideoProcessed = EFalse; - - // We are now properly initialized - iState = EStateIdle; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::CancelProcessingL -// Stops processing a movie -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::CancelProcessingL() -{ - - PRINT((_L("CancelProcessingL begin, iEncoderInitPending %d, iEncodePending %d, iEncodeInProgress %d"), - iEncoderInitPending, iEncodePending, iEncodeInProgress )); - -#ifdef _DEBUG - if (iVideoEncoder) - PRINT((_L("CancelProcessingL() - iEncodePending in encoder %d"), iVideoEncoder->IsEncodePending())); -#endif - - if (iProcessingCancelled) - { - PRINT((_L("CancelProcessingL() - Already cancelled!"))); - - if (iMonitor) - iMonitor->ProcessingCancelled(); - - return; - } - - iProcessingCancelled = ETrue; - - if (iDemux) - iDemux->Stop(); - - if (iVideoProcessor) - iVideoProcessor->Stop(); - - if (iAudioProcessor) - iAudioProcessor->StopL(); - - // delete all objects except status monitor - DoCloseVideoL(); - - if ( iVideoEncoder && iVideoEncoder->IsEncodePending() == 0 && - (iEncodePending || iEncodeInProgress) ) - { - // encoder has completed encoding request, but scheduler has - // not called RunL() yet. Reset flags so that the request will - // be handled as init complete in RunL - PRINT((_L("CancelProcessingL() - resetting encoding flags"))); - iEncoderInitPending = ETrue; - iEncodePending = iEncodeInProgress = 0; - } - - // close the rest - - // for transition effect - if ( iFsConnected ) - { - CloseTransitionInfoL(); - iFs.Close(); - iFsConnected = EFalse; - } - - if(iGetFrameInProgress == 1) - { - //VPASSERT(iEncodeInProgress == 0); - iGetFrameInProgress = 0; - - if(iVideoClip->Info()->Class() == EVedVideoClipClassGenerated) - { - iVideoClip->Info()->Generator()->CancelFrame(); - } - } - - if (iComposer) - { - iComposer->Close(); // creates the output file - delete iComposer; - iComposer = 0; - } - - if(iImageComposer) - { - delete iImageComposer; - iImageComposer=0; - } - - if (iImageAvcEdit) - { - delete iImageAvcEdit; - iImageAvcEdit = 0; - } - - - DeleteClipStructures(); - - if (!iEncoderInitPending) - { - - PRINT((_L("CMovieProcessorImpl::CancelProcessingL - calling cancelled callback"))); - // if StartMovieL() has not been called at this point, - // there is no status monitor or observer to call - if (iMonitor) - iMonitor->ProcessingCancelled(); - - iState = EStateIdle; - } - - PRINT((_L("CMovieProcessorImpl::CancelProcessingL end"))) - -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetClipPropertiesL -// Retrieves parameters for a clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::GetClipPropertiesL(const TDesC& aFileName, - RFile* aFileHandle, - TVedVideoFormat& aFormat, - TVedVideoType& aVideoType, - TSize& aResolution, - TVedAudioType& aAudioType, - TTimeIntervalMicroSeconds& aDuration, - TInt& aVideoFrameCount, - TInt& aSamplingRate, - TVedAudioChannelMode& aChannelMode) -{ - - PRINT((_L("CMovieProcessorImpl::GetClipPropertiesL() begin"))) - - TInt error = KErrNone; - if (!aFileHandle) - { - // Check that 3gp file exists. - - RFs fs; - User::LeaveIfError(fs.Connect()); - - RFile file; - error = file.Open(fs, aFileName, EFileShareReadersOnly | EFileStream | EFileRead); - if ( error != KErrNone ) - { - error = file.Open(fs, aFileName, EFileShareAny | EFileStream | EFileRead); - } - if (error == KErrNone) - { - file.Close(); - } - fs.Close(); - User::LeaveIfError(error); - - // get filename - iClipFileName = aFileName; - iClipFileHandle = NULL; - } - else - { - iClipFileHandle = aFileHandle; - iClipFileName.Zero(); - } - - CParser::TStreamParameters iStreamParams; - - // parse header - TRAP(error, ParseHeaderOnlyL(iStreamParams, iClipFileName, iClipFileHandle)); - - if (error != KErrNone && error != KErrNotSupported) - User::Leave(error); - - /* pass back clip properties */ - - // video format (file format actually) - if (iStreamParams.iFileFormat == CParser::EFileFormat3GP) - aFormat = EVedVideoFormat3GPP; - else if (iStreamParams.iFileFormat == CParser::EFileFormatMP4) - aFormat = EVedVideoFormatMP4; - else - aFormat = EVedVideoFormatUnrecognized; - - // video type - if(iStreamParams.iVideoFormat == CParser::EVideoFormatNone) - aVideoType = EVedVideoTypeNoVideo; - else if (iStreamParams.iVideoFormat == CParser::EVideoFormatH263Profile0Level10) - aVideoType = EVedVideoTypeH263Profile0Level10; - else if (iStreamParams.iVideoFormat == CParser::EVideoFormatH263Profile0Level45) - aVideoType = EVedVideoTypeH263Profile0Level45; - else if(iStreamParams.iVideoFormat == CParser::EVideoFormatMPEG4) - aVideoType = EVedVideoTypeMPEG4SimpleProfile; - else if(iStreamParams.iVideoFormat == CParser::EVideoFormatAVCProfileBaseline) - aVideoType = EVedVideoTypeAVCBaselineProfile; - else - aVideoType = EVedVideoTypeUnrecognized; - - // audio type - if(!iStreamParams.iHaveAudio/*iStreamParams.iAudioFormat == CParser::EAudioFormatNone*/) - aAudioType=EVedAudioTypeNoAudio; - else if(iStreamParams.iAudioFormat == CParser::EAudioFormatAMR) - aAudioType=EVedAudioTypeAMR; - else if (iStreamParams.iAudioFormat == CParser::EAudioFormatAAC) - aAudioType=EVedAudioTypeAAC_LC; // what about EVedAudioTypeAAC_LTP ??? - else - aAudioType=EVedAudioTypeUnrecognized; - - // Dummy values, update when AAC support is there - aSamplingRate = KVedAudioSamplingRate8k; - aChannelMode = EVedAudioChannelModeSingleChannel; - - // resolution - aResolution.iWidth = iStreamParams.iVideoWidth; - aResolution.iHeight = iStreamParams.iVideoHeight; - - // common - TUint duration = (iStreamParams.iVideoLength > iStreamParams.iAudioLength ? - iStreamParams.iVideoLength : iStreamParams.iAudioLength); - aDuration = TTimeIntervalMicroSeconds( TInt64(duration) * TInt64(1000) ); - - // get total number of video frames - aVideoFrameCount = iParser->GetNumberOfVideoFrames(); - - /***************IF Audio Type is AAC get the audio properties************************/ - - if(iStreamParams.iAudioFormat == CParser::EAudioFormatAAC) - { - //temporarily initialize iOutputAudioType and iAudioType as AudioProcessor uses it - iOutputAudioType = EAudioAAC; - iAudioType = EAudioAAC; - } - - PRINT((_L("CMovieProcessorImpl::GetClipPropertiesL() end"))) -} - - - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GenerateVideoFrameInfoArray -// Retrieves frames parameters for a clip to array -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::GenerateVideoFrameInfoArrayL(const TDesC& aFileName, RFile* aFileHandle, - TVedVideoFrameInfo*& aVideoFrameInfoArray) -{ - - PRINT((_L("CMovieProcessorImpl::GenerateVideoFrameInfoArray() begin"))) - - TInt error; - - if (!aFileHandle) - { - // Check that 3gp file exists. - RFs fs; - User::LeaveIfError(fs.Connect()); - - RFile file; - error = file.Open(fs, aFileName, EFileShareReadersOnly | EFileStream | EFileRead); - if ( error != KErrNone ) - { - error = file.Open(fs, aFileName, EFileShareAny | EFileStream | EFileRead); - } - if (error == KErrNone) - { - file.Close(); - } - fs.Close(); - User::LeaveIfError(error); - } - - // parse clip header - CParser::TStreamParameters streamParams; - - // get filename - if (aFileHandle) - { - iClipFileName.Zero(); - iClipFileHandle = aFileHandle; - } - else - { - iClipFileHandle = NULL; - iClipFileName = aFileName; - } - - // parse header - TRAP(error, ParseHeaderOnlyL(streamParams, iClipFileName, iClipFileHandle)); - - if (error != KErrNone && error != KErrNotSupported) - { - User::Leave( error ); - } - - // video type - TVedVideoType videoType = EVedVideoTypeNoVideo; - if(streamParams.iVideoFormat == CParser::EVideoFormatNone) - videoType = EVedVideoTypeNoVideo; - else if(streamParams.iVideoFormat == CParser::EVideoFormatH263Profile0Level10) - videoType = EVedVideoTypeH263Profile0Level10; - else if(streamParams.iVideoFormat == CParser::EVideoFormatH263Profile0Level45) - videoType = EVedVideoTypeH263Profile0Level45; - else if(streamParams.iVideoFormat == CParser::EVideoFormatMPEG4) - videoType = EVedVideoTypeMPEG4SimpleProfile; - else if(streamParams.iVideoFormat == CParser::EVideoFormatAVCProfileBaseline) - videoType = EVedVideoTypeAVCBaselineProfile; - else - { - User::Leave(KErrNotSupported); - } - - // frame parameters - if( (videoType == EVedVideoTypeH263Profile0Level10) || - (videoType == EVedVideoTypeH263Profile0Level45) || - (videoType == EVedVideoTypeMPEG4SimpleProfile) || - (videoType == EVedVideoTypeAVCBaselineProfile) ) - { - TInt frameCount = 0; - FillVideoFrameInfoArrayL(frameCount, (TVedVideoFrameInfo*&)aVideoFrameInfoArray); - } - - PRINT((_L("CMovieProcessorImpl::GenerateVideoFrameInfoArray() end"))) -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::FillVideoFrameInfoArray -// Fills an array containing video frame parameters: size, start time & type -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// - -void CMovieProcessorImpl::FillVideoFrameInfoArrayL(TInt& aVideoFrameCount, - TVedVideoFrameInfo*& aVideoFrameInfoArray) -{ - - PRINT((_L("CMovieProcessorImpl::FillVideoFrameInfoArrayL() begin"))) - - // get total number of video frames - aVideoFrameCount = iParser->GetNumberOfVideoFrames(); - VPASSERT(aVideoFrameCount); - // create memory for frame parameters - DO NOT delete it in MediaProcessorImpl - if(aVideoFrameInfoArray) - { - delete aVideoFrameInfoArray; - aVideoFrameInfoArray=0; - } - - // get individual frame parameters - aVideoFrameInfoArray = (TVedVideoFrameInfo*)User::AllocL(aVideoFrameCount * sizeof(class TVedVideoFrameInfo)); - - TFrameInfoParameters* frameInfoArray = (TFrameInfoParameters*)User::AllocZL((aVideoFrameCount) * sizeof(struct TFrameInfoParameters)); - - TInt i; - // Get all the frame parameters using the new function - CMP4Parser* parser = (CMP4Parser*)iParser; - TInt startIndex =0; - TInt err = parser->GetVideoFrameProperties(frameInfoArray,startIndex,aVideoFrameCount); - if(err !=0) - User::Leave(KErrAbort); - - for(i=0; iGetNumberOfFrames(); - TInt frameNumber = 0; - - // get start frame index in the input clip - iStartFrameIndex = iParser->GetStartFrameIndex(); - - TInt cutOutTime = 0; - if (!iThumbnailInProgress) - cutOutTime = I64INT( iVideoClip->CutOutTime().Int64() / TInt64(1000) ); - - TFrameInfoParameters* frameInfoArray = - (TFrameInfoParameters*)User::AllocZL((numberOfFrames) * sizeof(struct TFrameInfoParameters)); - - CleanupStack::PushL(frameInfoArray); - - // get info array from parser - CMP4Parser* parser = (CMP4Parser*)iParser; - TInt error = parser->GetVideoFrameProperties(frameInfoArray, iStartFrameIndex, numberOfFrames); - if (error != 0) - User::Leave(KErrAbort); - - while ( frameNumber < numberOfFrames ) - { - iFrameParameters[aCurrentFrameIndex].iTimeStamp = - GetVideoTimeInTicksFromMs( TInt64(frameInfoArray[frameNumber].iStartTime), EFalse ); - iFrameParameters[aCurrentFrameIndex].iType = TUint8( frameInfoArray[frameNumber].iType ); - - if (!iThumbnailInProgress && frameInfoArray[frameNumber].iStartTime > cutOutTime) - { - break; - } - - frameNumber++; - aCurrentFrameIndex++; - } - - CleanupStack::PopAndDestroy(frameInfoArray); - - PRINT((_L("CMovieProcessorImpl::FillFrameParameters() end"))) -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::IncProgressBar -// Report progress to observer -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -//- -void CMovieProcessorImpl::IncProgressBar() -{ - VPASSERT(iTotalMovieDuration > 0); - - TInt64 msProcessed = iGeneratedProcessed + iTotalAudioTimeWrittenMs + - GetVideoTimeInMsFromTicks(iCurrentVideoTimeInTicks, ETrue); - - TInt percentage = TInt( ( (I64REAL(msProcessed) / I64REAL(iTotalMovieDuration)) * 100.0) + 0.5 ); - - //VPASSERT( percentage <= 100 ); - - if (percentage > iProgress && percentage <= 100) - { - iProgress = percentage; - iMonitor->Progress(iProgress); - } -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetMovieSizeEstimateL -// Calculates an estimate for resulting movie size -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::GetMovieSizeEstimateL(const CVedMovie* aMovie) -{ - TInt fileSize=0; - iSizeEstimate->GetMovieSizeEstimateL(aMovie, (TInt&)fileSize); - return fileSize; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetMovieSizeEstimateForMMSL -// Calculates file size estimate for MMS use -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::GetMovieSizeEstimateForMMSL(const CVedMovie* aMovie, - TInt aTargetSize, - TTimeIntervalMicroSeconds aStartTime, - TTimeIntervalMicroSeconds& aEndTime) -{ - return iSizeEstimate->GetMovieSizeEstimateForMMSL(aMovie, aTargetSize, aStartTime, aEndTime); -} - - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::StartThumbL -// Initiates thumbnail extraction from clip (full resolution raw is reutrned) -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::StartThumbL(const TDesC& aFileName, - RFile* aFileHandle, - TInt aIndex, - TSize aResolution, - TDisplayMode aDisplayMode, - TBool aEnhance) -{ - - PRINT((_L("CMovieProcessorImpl::StartThumbL() begin, aIndex = %d, enhance = %d"), aIndex, aEnhance)) - - if (!aFileHandle) - { - //Check that 3gp file exists. - RFs fs; - User::LeaveIfError(fs.Connect()); - RFile file; - TInt error = file.Open(fs, aFileName, EFileShareReadersOnly | EFileStream | EFileRead); - if ( error != KErrNone ) - { - error = file.Open(fs, aFileName, EFileShareAny | EFileStream | EFileRead); - } - if (error == KErrNone) - { - file.Close(); - } - fs.Close(); - User::LeaveIfError(error); - } - - // get thumbnail parameters - if (aFileHandle) - { - iClipFileName.Zero(); - iClipFileHandle = aFileHandle; - } - else - { - iClipFileHandle = NULL; - iClipFileName = aFileName; - } - - iOutputThumbResolution.SetSize(aResolution.iWidth, aResolution.iHeight); - iThumbIndex = aIndex; - iThumbDisplayMode = aDisplayMode; - iThumbEnhance = aEnhance; - - iThumbnailInProgress = ETrue; - - // initialization - InitializeClipStructuresL(); - - InitializeClipL(); // opens the file & parses header - - // update number of frames - SetOutputNumberOfFrames(iParser->iOutputNumberOfFrames); - - PRINT((_L("CMovieProcessorImpl::StartThumbL() end"))) - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::ProcessThumbL -// Generates thumbnail from clip (actually, full resolution raw is returned) -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::ProcessThumbL(TRequestStatus &aStatus, TVedTranscodeFactor* aFactor) -{ - - PRINT((_L("CMovieProcessorImpl::ProcessThumbL() begin"))) - - iState = EStateProcessing; - iThumbnailRequestStatus = &aStatus; - - // seek to the last intra frame before desired frame - TTimeIntervalMicroSeconds startTime(0); - if ( iThumbIndex > 0 ) - { - TInt time = 0; - TUint inMs = TUint( iParser->GetVideoFrameStartTime(iThumbIndex, &time) ); - TInt64 inMicroS = TInt64( inMs ) * TInt64( 1000 ); - startTime = TTimeIntervalMicroSeconds( inMicroS ); - } - - // iOutputNumberOFrames contains the total amount of frames in clip - // without cutting - SetOutputNumberOfFrames(iParser->iOutputNumberOfFrames); - - TInt error = iParser->SeekOptimalIntraFrame(startTime, iThumbIndex, ETrue); - if (error != KErrNone) - { - iThumbnailRequestStatus = 0; - User::Leave(KErrGeneral); - } - iStartFrameIndex = iParser->GetStartFrameIndex(); - VPASSERT(iStartFrameIndex >= 0); - - error = iVideoProcessor->ProcessThumb(this, iThumbIndex, iStartFrameIndex, aFactor); - if (error != KErrNone) - { - iThumbnailRequestStatus = 0; - User::Leave(error); - } -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::NotifyThumbnailReady -// Called by thumbnail generator when thumbnail is ready -// for retrieval -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::NotifyThumbnailReady(TInt aError) -{ - - PRINT((_L("CMovieProcessorImpl::NotifyThumbnailReady() begin"))) - - if (HandleThumbnailError(aError)) - return; - - // get YUV thumb - iVideoProcessor->FetchThumb(&iYuvBuf); - - // check validity of thumbnail and associated operation - if(iThumbEnhance) // for saving to file - { - if(iThumbDisplayMode == ENone) // if no preference - iThumbDisplayMode = EColor16M; // 24-bit color image for enhancement - else if(iThumbDisplayMode != EColor16M) // invalid combination - { - HandleThumbnailError(KErrNotSupported); - return; - } - } - else // for screen display - { - if(iThumbDisplayMode == ENone) // if no preference - iThumbDisplayMode = EColor64K; // 16-bit image for some products - } - - TInt bytesPerPixel = 0; - // determine proper bit depth for the bitmap - if(iThumbDisplayMode == EColor16M) - bytesPerPixel = 3; // 24-bit rgb takes 3 bytes, stored as bbbbbbbb gggggggg rrrrrrrr - else if(iThumbDisplayMode == EColor64K || iThumbDisplayMode == EColor4K) - bytesPerPixel = 2; // 12-bit rgb takes 2 bytes, stored as ggggbbbb xxxxrrrr - else - { - HandleThumbnailError(KErrNotSupported); - return; // support for 12-, 16- and 24-bit color images only - } - - TInt error; - if ( !iRgbBuf ) - { - TSize inputFrameResolution(iParser->iStreamParameters.iVideoWidth,iParser->iStreamParameters.iVideoHeight); - - // rgb specs - TUint thumbLength = inputFrameResolution.iWidth * inputFrameResolution.iHeight; - TUint thumbUVLength = thumbLength>>2; - - VPASSERT(iYuvBuf); - // assign yuv pointers - TUint8* yBuf = iYuvBuf; - TUint8* uBuf = yBuf + thumbLength; - TUint8* vBuf = uBuf + thumbUVLength; - - // create output rgb buffer - TRAP(error, iRgbBuf = (TUint8*) User::AllocL(thumbLength * bytesPerPixel)); - if (HandleThumbnailError(error)) - return; - - TInt scanLineLength; - - // convert yuv to rgb - switch (iThumbDisplayMode) - { - - case EColor4K: - { - TInt error; - CYuv2Rgb12* yuvConverter = NULL; - TRAP(error, yuvConverter = new(ELeave) CYuv2Rgb12); - if (HandleThumbnailError(error)) - return; - scanLineLength = inputFrameResolution.iWidth * bytesPerPixel; - VPASSERT(yuvConverter); - TRAP(error, yuvConverter->ConstructL(inputFrameResolution.iWidth, inputFrameResolution.iHeight, inputFrameResolution.iWidth, inputFrameResolution.iHeight)); - if (HandleThumbnailError(error)) - return; - yuvConverter->Convert(yBuf, uBuf, vBuf, inputFrameResolution.iWidth, inputFrameResolution.iHeight, iRgbBuf, scanLineLength); - delete yuvConverter; - yuvConverter=0; - } - break; - - default: - case EColor64K: - { - TInt error; - CYuv2Rgb16* yuvConverter = NULL; - TRAP(error, yuvConverter = new(ELeave) CYuv2Rgb16); - if (HandleThumbnailError(error)) - return; - scanLineLength = inputFrameResolution.iWidth * bytesPerPixel; - VPASSERT(yuvConverter); - TRAP(error, yuvConverter->ConstructL(inputFrameResolution.iWidth, inputFrameResolution.iHeight, inputFrameResolution.iWidth, inputFrameResolution.iHeight);) - if (HandleThumbnailError(error)) - return; - yuvConverter->Convert(yBuf, uBuf, vBuf, inputFrameResolution.iWidth, inputFrameResolution.iHeight, iRgbBuf, scanLineLength); - delete yuvConverter; - yuvConverter=0; - } - break; - - case EColor16M: - { - TInt error; - CYuv2Rgb24* yuvConverter = NULL; - TRAP(error, yuvConverter = new(ELeave) CYuv2Rgb24); - if (HandleThumbnailError(error)) - return; - scanLineLength = inputFrameResolution.iWidth * bytesPerPixel; - VPASSERT(yuvConverter); - TRAP(error, yuvConverter->ConstructL(inputFrameResolution.iWidth, inputFrameResolution.iHeight, inputFrameResolution.iWidth, inputFrameResolution.iHeight)) - if (HandleThumbnailError(error)) - return; - yuvConverter->Convert(yBuf, uBuf, vBuf, inputFrameResolution.iWidth, inputFrameResolution.iHeight, iRgbBuf, scanLineLength); - delete yuvConverter; - yuvConverter=0; - } - break; - } - } - - //CFbsBitmap* iOutBitmap = 0; - - if(!iThumbEnhance) - { - const TSize inputFrameResolution(iParser->iStreamParameters.iVideoWidth,iParser->iStreamParameters.iVideoHeight); - - /* Pre-calculate pixel indices for horizontal scaling. */ - // inputFrameResolution is the resolution of the image read from video clip. - // iOutputThumbResolution is the final resolution desired by the caller. - - const TInt xIncrement = inputFrameResolution.iWidth * iOutputThumbResolution.iWidth; - const TInt xBoundary = iOutputThumbResolution.iWidth * iOutputThumbResolution.iWidth; - - TInt* xIndices = 0; - TRAPD(xIndicesErr, xIndices = new (ELeave) TInt[iOutputThumbResolution.iWidth]); - if (xIndicesErr == KErrNone) - { - TInt xDecision = xIncrement / bytesPerPixel; - TInt sourceIndex = 0; - for (TInt x = 0; x < iOutputThumbResolution.iWidth; x++) - { - while (xDecision > xBoundary) - { - xDecision -= xBoundary; - sourceIndex += bytesPerPixel; - } - - xIndices[x] = sourceIndex; - xDecision += xIncrement; - } - } - else - { - HandleThumbnailError(xIndicesErr); - return; - } - - /* Initialize bitmap. */ - TRAPD(bitmapErr, iOutBitmap = new (ELeave) CFbsBitmap); - if ((xIndicesErr == KErrNone) && (bitmapErr == KErrNone)) - { - bitmapErr = iOutBitmap->Create(iOutputThumbResolution, iThumbDisplayMode /*EColor64K*/); - if (bitmapErr == KErrNone) - { - // Lock the heap to prevent the FBS server from invalidating the address - iOutBitmap->LockHeap(); - - /* Scale to desired iOutputThumbResolution and copy to bitmap. */ - TUint8* dataAddress = (TUint8*)iOutBitmap->DataAddress(); - const TInt yIncrement = inputFrameResolution.iHeight * iOutputThumbResolution.iHeight; - const TInt yBoundary = iOutputThumbResolution.iHeight * iOutputThumbResolution.iHeight; - - TInt targetIndex = 0; - TInt sourceRowIndex = 0; - TInt yDecision = yIncrement / 2; - for (TInt y = 0; y < iOutputThumbResolution.iHeight; y++) - { - while (yDecision > yBoundary) - { - yDecision -= yBoundary; - sourceRowIndex += (inputFrameResolution.iWidth * bytesPerPixel); - } - yDecision += yIncrement; - - for (TInt x = 0; x < iOutputThumbResolution.iWidth; x++) - { - for (TInt i = 0; i < bytesPerPixel; ++i) - { - const TInt firstPixelSourceIndex = sourceRowIndex + xIndices[x] + i; - dataAddress[targetIndex] = iRgbBuf[firstPixelSourceIndex]; - targetIndex++; - } - } - } - iOutBitmap->UnlockHeap(); - } - else - { - delete iOutBitmap; iOutBitmap = 0; - HandleThumbnailError(bitmapErr); - return; - } - } - else - { - HandleThumbnailError(bitmapErr); - delete[] xIndices; xIndices = 0; - return; - } - - delete[] xIndices; - xIndices = 0; - } - else // enhance - { - TInt i,j; - // create input bitmap and buffer - CFbsBitmap* inBitmap = 0; - TRAPD(inBitmapErr, inBitmap = new (ELeave) CFbsBitmap); - if( inBitmapErr == KErrNone ) - { - // create bitmaps - TSize originalResolution(iParser->iStreamParameters.iVideoWidth, iParser->iStreamParameters.iVideoHeight); - inBitmapErr = inBitmap->Create(originalResolution, iThumbDisplayMode/*EColor16M*/); - - if( inBitmapErr == KErrNone ) - { - // fill image from rgb buffer to input bitmap buffer - TPtr8 linePtr(0,0); - TInt lineLength = inBitmap->ScanLineLength(originalResolution.iWidth, iThumbDisplayMode); - for(j=0, i=0; jSetScanLine((TDes8&)linePtr,j); - } - - // create output bitmap - TRAPD(outBitmapErr, iOutBitmap = new (ELeave) CFbsBitmap); - if( outBitmapErr == KErrNone ) - { - outBitmapErr = iOutBitmap->Create(iOutputThumbResolution, iThumbDisplayMode/*EColor16M*/); // same size as input frame - - if( outBitmapErr == KErrNone ) - { - // post-processing enhancement - TRAP(outBitmapErr, EnhanceThumbnailL((const CFbsBitmap*)inBitmap, (CFbsBitmap*)iOutBitmap)); - - } - else - { - delete inBitmap; inBitmap = 0; - delete iOutBitmap; iOutBitmap = 0; - HandleThumbnailError(outBitmapErr); - return; - } - } - else - { - delete inBitmap; inBitmap = 0; - HandleThumbnailError(outBitmapErr); - return; - } - } - else - { - delete inBitmap; inBitmap = 0; - HandleThumbnailError(inBitmapErr); - return; - } - - // delete input bitmap - delete inBitmap; - inBitmap = 0; - } - else - { - HandleThumbnailError(inBitmapErr); - return; - } - } - - // return enhanced bitmap - //aThumb = outBitmap; - //iState = EStateReadyToProcess; - - iYuvBuf = 0; - delete iRgbBuf; - iRgbBuf = 0; - - VPASSERT(iThumbnailRequestStatus); - User::RequestComplete(iThumbnailRequestStatus, KErrNone); - iThumbnailRequestStatus = 0; - - PRINT((_L("CMovieProcessorImpl::NotifyThumbnailReady() end"))) -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::HandleThumbnailError -// Handle error in thumbnail generation -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CMovieProcessorImpl::HandleThumbnailError(TInt aError) -{ - if (aError != KErrNone) - { - TInt error = aError; - -#ifndef _DEBUG - if (error < KErrHardwareNotAvailable) - error = KErrGeneral; -#endif - - VPASSERT(iThumbnailRequestStatus); - User::RequestComplete(iThumbnailRequestStatus, error); - iThumbnailRequestStatus = 0; - return ETrue; - } - return EFalse; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::FetchThumb -// Returns a pointer to completed thumbnail bitmap -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::FetchThumb(CFbsBitmap*& aThumb) -{ - aThumb = iOutBitmap; - iOutBitmap = 0; - - iState = EStateReadyToProcess; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::InitializeClipStructuresL -// Initializes internal structures for movie processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::InitializeClipStructuresL() -{ - - TTimeIntervalMicroSeconds time; - TInt i; - - // create memory for structures - // VIDEO - if(!iVideoClipParameters) - { - iVideoClipParameters = (struct TVideoClipParameters *)User::AllocL(iNumberOfVideoClips * - sizeof(struct TVideoClipParameters)); - Mem::Fill(iVideoClipParameters, iNumberOfVideoClips*sizeof(TVideoClipParameters), 0); - } - - if(!iThumbnailInProgress) - { - // create audio buffer - iOutAudioBuffer = (HBufC8*) HBufC8::NewL(KInitialAudioBufferSize); - - // create video buffer - iOutVideoBuffer = (HBufC8*) HBufC8::NewL(KInitialVideoBufferSize); - - CVedMovieImp* movie = (iMovie); - // initialize video clip parameters - for(i=0; iVideoClip(i); - time = TTimeIntervalMicroSeconds(iVideoClip->StartTime()); - iVideoClipParameters[i].iStartTime = time.Int64()/1000; - time = TTimeIntervalMicroSeconds(iVideoClip->EndTime()); - iVideoClipParameters[i].iEndTime = time.Int64()/1000; - } - - } - - return; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::DeleteClipStructures -// Frees memory allocated for internal structures -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::DeleteClipStructures() -{ - - if (iFrameParameters) - User::Free(iFrameParameters); - iFrameParameters = 0; - iFrameParametersSize = 0; - - if (iVideoClipParameters) - User::Free(iVideoClipParameters); - iVideoClipParameters = 0; - - if (iEncoderBuffer) - User::Free(iEncoderBuffer); - iEncoderBuffer = 0; - - if (iOutAudioBuffer) - delete iOutAudioBuffer; - iOutAudioBuffer=0; - - if (iOutVideoBuffer) - delete iOutVideoBuffer; - iOutVideoBuffer = 0; - -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::InitializeClipL -// Initializes the processor for processing a clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::InitializeClipL() -{ - - PRINT((_L("CMovieProcessorImpl::InitializeClipL() begin"))); - - iFirstFrameOfClip = ETrue; - iFirstFrameFlagSet = EFalse; - iModeChanged = EFalse; /* assuming that this clip's mode has not been changed */ - iVideoClipWritten = 0; - iWriting1stColorTransitionFrame = EFalse; - - // update clip properties - if (iThumbnailInProgress) - { - // just get the first frame in normal mode - iSpeed = KMaxVideoSpeed; - iColorEffect = (TVedColorEffect)EVedColorEffectNone; - iStartCutTime = 0; - iEndCutTime = 10; - } - else - { - if (iNumberOfVideoClips) - { - if ( iVideoClip->Info()->FileHandle() ) - { - iClipFileName.Zero(); - iClipFileHandle = iVideoClip->Info()->FileHandle(); - } - else - { - iClipFileHandle = NULL; - iClipFileName = (TPtrC)iVideoClip->Info()->FileName(); - } - - iSpeed = (TInt)iVideoClip->Speed(); - iColorEffect = (TVedColorEffect)iVideoClip->ColorEffect(); - iStartCutTime = TTimeIntervalMicroSeconds(iVideoClip->CutInTime()); - iEndCutTime = TTimeIntervalMicroSeconds(iVideoClip->CutOutTime()); - - iColorToneRgb = iVideoClip->ColorTone(); - ConvertColorToneRGBToYUV(iColorEffect,iColorToneRgb); - // store previous middle transition, if there is more than one middle transition - if(iVideoClipNumber > 0) - iPreviousMiddleTransitionEffect = iMiddleTransitionEffect; - // check if there is a position for middle transition for this clip - if(iMovie->MiddleTransitionEffectCount() > iVideoClipNumber) - { - iMiddleTransitionEffect = iMovie->MiddleTransitionEffect(iVideoClipNumber); - - if( ( iMiddleTransitionEffect == EVedMiddleTransitionEffectCrossfade || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeLeftToRight || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeRightToLeft || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeTopToBottom || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeBottomToTop ) && - ( iVideoClipNumber != iNumberOfVideoClips - 1 ) ) - { - TParse filename, filepath; - CVedMovieImp* movie = (iMovie); - - if( movie->VideoClip( iVideoClipNumber + 1 )->Info()->Class() == EVedVideoClipClassGenerated) - { - /************************************************************************/ - TFileName ImageMovieName(KTempFilePath); - ImageMovieName.Append( _L( "Im_" ) ); - ImageMovieName.Append( _L( "nokia_vpi.tmp" ) ); - /************************************************************************/ - - filename.Set( ImageMovieName, NULL, NULL ); - - if (iOutputFileHandle) - { - RFile* file = iOutputFileHandle; - TFileName fullName; - TInt error = file->FullName(fullName); - filepath.Set(fullName, NULL, NULL); - } - else - filepath.Set( iOutputMovieFileName, NULL, NULL ); - } - else{ - - if ( movie->VideoClip( iVideoClipNumber + 1 )->Info()->FileHandle() != NULL ) - { - - RFile* file = movie->VideoClip( iVideoClipNumber + 1 )->Info()->FileHandle(); - - TFileName origName; - TInt error = file->Name(origName); - filename.Set(origName, NULL, NULL); - - TFileName fullName; - error = file->FullName(fullName); - filepath.Set(fullName, NULL, NULL); - - } - else - { - filename.Set( movie->VideoClip( iVideoClipNumber + 1 )->Info()->FileName(), NULL, NULL ); - filepath.Set( iOutputMovieFileName, NULL, NULL ); - } - - } - - iNextClipFileName = filepath.DriveAndPath(); - iNextClipFileName.Append( filename.Name() ); - // VPI special tmp file - iNextClipFileName.Append( _L( "_" ) ); - iNextClipFileName.AppendNum( iVideoClipNumber ); - iNextClipFileName.Append( _L( "_vpi.tmp" ) ); - // try to create a tmp file - if ( iNextClip.Create( iFs, iNextClipFileName, EFileStream | EFileWrite | EFileShareExclusive ) != KErrNone ) - { - // check if the tmp file exists - if ( iNextClip.Open( iFs, iNextClipFileName, EFileStream | EFileWrite | EFileShareExclusive ) != KErrNone ) - { - iNextClip.Close(); - iNextClipFileName.Zero(); - } - } - } - } - } - - // this is in common timescale - iInitialClipStartTimeStamp = (iVideoClipNumber>0 ? iVideoClipParameters[iVideoClipNumber-1].iEndTime : 0); - } - - if (!iThumbnailInProgress) - iMonitor->StartPreparing(); - - // create an instance of the parser - if (iNumberOfVideoClips) - { - - if (!iParser) - { - if (iClipFileHandle) - iParser = (CMP4Parser*) CMP4Parser::NewL(this, iClipFileHandle); - else - iParser = (CMP4Parser*) CMP4Parser::NewL(this, iClipFileName); - } - iParser->iFirstTimeClipParsing = ETrue; - iState = EStateIdle; - // open file & parse header - CMovieProcessorImpl::TDataFormat format = CMovieProcessorImpl::EDataAutoDetect; - User::LeaveIfError(OpenStream(iClipFileName, iClipFileHandle, format)); - - if ( iThumbnailInProgress && (iHaveVideo == EFalse) ) - User::Leave(KErrNotFound); - - VPASSERT(iState == EStateOpened); - } - else - SetHeaderDefaults(); - - iState = EStatePreparing; - - if (!iThumbnailInProgress) - { - - // Since the clip does not have any audio type it can be over written by any audio type depending on output - if(iOutputAudioType == EAudioAMR) - { - if( iAudioType == EAudioNone) - iAudioType = EAudioAMR; - } - else if(iOutputAudioType == EAudioAAC) - { - if( iAudioType == EAudioNone) - { - iAudioType = EAudioAAC; - if(iVideoClipNumber == 0) - { - //because it has no audio so it will have no decoder specific Info - iFirstClipHasNoDecInfo = ETrue; - } - iAudioFramesInSample = 1; - } - } - - iEncoderInitPending = ETrue; - // complete request to finish initialising & start processing - SetActive(); - iStatus = KRequestPending; - - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - - if (iNumberOfVideoClips) - { - if (iParser) - { - // update the video clip duration in millisec. - iVideoClipDuration = (TInt64)(iVideoClip->Info()->Duration().Int64() * - (TInt64)iParser->iStreamParameters.iVideoTimeScale / (TInt64)(1000000)); - } - } - } - - else - { - // open demux & decoder - User::LeaveIfError(Prepare()); - - VPASSERT(iState == EStateReadyToProcess); - } - - PRINT((_L("CMovieProcessorImpl::InitializeClipL() end"))) -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::InitializeGeneratedClipL -// Initializes the processor for processing a generated clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::InitializeGeneratedClipL() -{ - iEncodeInProgress = 0; - iFirstFrameOfClip = ETrue; // initialized to indicate that the first frame of this clip has not yet been written - iFirstFrameFlagSet = EFalse; - iModeChanged = EFalse; /* assuming that this clip's mode has not been changed */ - iVideoClipWritten = 0; - iWriting1stColorTransitionFrame = EFalse; - - // update clip properties - if (iThumbnailInProgress) - { - /* just get the first frame in normal mode */ - iSpeed = KMaxVideoSpeed; - iColorEffect = (TVedColorEffect)EVedColorEffectNone; - iStartCutTime = 0; - iEndCutTime = 10; - } - else - { - if (iNumberOfVideoClips) - { - iSpeed = (TInt)iVideoClip->Speed(); - iColorEffect = iVideoClip->ColorEffect(); - iStartCutTime = TTimeIntervalMicroSeconds(0); /* since generated clips cannot be cut */ - iEndCutTime = TTimeIntervalMicroSeconds(iVideoClip->Info()->Duration()); - - iColorToneRgb = iVideoClip->ColorTone(); - ConvertColorToneRGBToYUV(iColorEffect,iColorToneRgb); - - /* store previous middle transition, if there is more than one middle transition */ - if(iVideoClipNumber > 0) - iPreviousMiddleTransitionEffect = iMiddleTransitionEffect; - /* since it is image clip, there will be no middletransitioneffect - check if there is a position for middle transition for this clip - */ - if(iMovie->MiddleTransitionEffectCount() > iVideoClipNumber) - { - iMiddleTransitionEffect = iMovie->MiddleTransitionEffect(iVideoClipNumber); - - if( ( iMiddleTransitionEffect == EVedMiddleTransitionEffectCrossfade || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeLeftToRight || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeRightToLeft || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeTopToBottom || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeBottomToTop ) && - ( iVideoClipNumber != iNumberOfVideoClips - 1 ) ) - { - TParse filename, filepath; - CVedMovieImp* movie = (iMovie); - if( movie->VideoClip( iVideoClipNumber + 1 )->Info()->Class() == EVedVideoClipClassGenerated) - { - /* path for storing temporary files */ - TFileName ImageMovieName(KTempFilePath); - ImageMovieName.Append( _L( "Im_" ) ); - ImageMovieName.Append( _L( "nokia_vpi.tmp" ) ); - filename.Set( ImageMovieName, NULL, NULL ); - - if (iOutputFileHandle) - { - RFile* file = iOutputFileHandle; - TFileName fullName; - TInt error = file->FullName(fullName); - filepath.Set(fullName, NULL, NULL); - } - else - filepath.Set( iOutputMovieFileName, NULL, NULL ); - } - else - { - if ( movie->VideoClip( iVideoClipNumber + 1 )->Info()->FileHandle() != NULL ) - { - RFile* file = movie->VideoClip( iVideoClipNumber + 1 )->Info()->FileHandle(); - - TFileName origName; - TInt error = file->Name(origName); - filename.Set(origName, NULL, NULL); - - TFileName fullName; - error = file->FullName(fullName); - filepath.Set(fullName, NULL, NULL); - } - else - { - filename.Set( movie->VideoClip( iVideoClipNumber + 1 )->Info()->FileName(), NULL, NULL ); - filepath.Set( iOutputMovieFileName, NULL, NULL ); - } - } - - iNextClipFileName = filepath.DriveAndPath(); - iNextClipFileName.Append( filename.Name() ); - /* tag it to indicate that its a tmp editor file */ - iNextClipFileName.Append( _L( "_" ) ); - iNextClipFileName.AppendNum( iVideoClipNumber ); - iNextClipFileName.Append( _L( "_vpi.tmp" ) ); - /* try to create a tmp file */ - if ( iNextClip.Create( iFs, iNextClipFileName, EFileStream | EFileWrite | EFileShareExclusive ) != KErrNone ) - { - /* check if the tmp file exists */ - if ( iNextClip.Open( iFs, iNextClipFileName, EFileStream | EFileWrite | EFileShareExclusive ) != KErrNone ) - { - iNextClip.Close(); - iNextClipFileName.Zero(); - } - } - } - } - } - - /* this is in common timescale */ - iInitialClipStartTimeStamp = (iVideoClipNumber>0 ? iVideoClipParameters[iVideoClipNumber-1].iEndTime : 0); - } - - if (iNumberOfVideoClips) - { - - if (!iParser) /* if file name does not exist, this may cause error while parsing */ - { - iParser = (CMP4Parser*) CMP4Parser::NewL(this, iClipFileName); - } - else - { - delete iParser; - iParser = 0; - iParser = (CMP4Parser*) CMP4Parser::NewL(this, iClipFileName); - } - - iParser->iFirstTimeClipParsing = ETrue; - iState = EStateIdle; - /* open file and parse header */ - CMovieProcessorImpl::TDataFormat format = CMovieProcessorImpl::EDataAutoDetect; - /* this will be overloaded to accomodate for the buffer type */ - - // HUOM! Meneekö tää oikein ?? - User::LeaveIfError(OpenStream(iClipFileName, NULL, format)); - VPASSERT(iState == EStateOpened); - - } - else - { - SetHeaderDefaults(); - } - - iState = EStatePreparing; - if (!iThumbnailInProgress) - { - - iEncoderInitPending = ETrue; - // async. - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - - if (iNumberOfVideoClips) - { - /* update the video clip duration in millisec. */ - iVideoClipDuration = (TInt64)(iVideoClip->Info()->Duration().Int64() * - (TInt64)iParser->iStreamParameters.iVideoTimeScale / (TInt64)(1000000)); - } - - if(iOutputAudioType == EAudioAMR) - { // setting generated clip type same as output type - if( iAudioType == EAudioNone) - iAudioType = EAudioAMR; - }else if(iOutputAudioType == EAudioAAC) - { - if( iAudioType == EAudioNone) - iAudioType = EAudioAAC; - } - - } - else /* if thumbnail is in progress */ - { - /* open demux and decoder */ - User::LeaveIfError(Prepare()); - VPASSERT(iState == EStateReadyToProcess); - } -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::TemporaryInitializeGeneratedClipL -// temporarily initializes the processor for image 3gp file creation -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::TemporaryInitializeGeneratedClipL(){ - - /* re-initialize to create new clip */ - iFirstFrameOfClip = ETrue; /* initialized to indicate that the first frame of this clip has not yet been written */ - iFirstFrameFlagSet = EFalse; - iModeChanged = EFalse; /* assuming that this clip's mode has not been changed */ - iImageClipCreated = 0; - iWriting1stColorTransitionFrame = EFalse; - - iImageEncodedFlag = 0; // has an image been encoded - iImageEncodeProcFinished = 0; - iFirstTimeProcessing = 0; - iGetFrameInProgress = 0; - iEncodeInProgress = 0; - - TInt foundFileBased = 0; - TInt index = 0; - CVedVideoClip* tempclip =0; - CVedMovieImp* tempmovie = (iMovie); - TSize mRes = tempmovie->Resolution(); - - if(iVideoClipNumber == 0) - { - while(foundFileBased == 0) - { - if(index >= iNumberOfVideoClips) - { - break; - } - else - { - tempclip = tempmovie->VideoClip(index); - index++; - if(tempclip->Info()->Class()==EVedVideoClipClassGenerated) - { - foundFileBased = 0; //You still need to search - } - else - { - foundFileBased = 1; - - if (tempclip->Info()->FileHandle()) - { - iClipFileName.Zero(); - iClipFileHandle = tempclip->Info()->FileHandle(); - } - else - { - iClipFileHandle = NULL; - iClipFileName = tempclip->Info()->FileName(); - } - } - } - } - tempmovie = 0; /* make them zero again */ - tempclip = 0; - if(foundFileBased == 0) /* no file based clips in output movie */ - { - iAllGeneratedClips =1; /* to indicate all clips to be inserted are generated */ - iVideoParameters.iWidth = mRes.iWidth; - iVideoParameters.iHeight = mRes.iHeight; - } - else - { - /* create an instance of the parser which will be used to set stream paramters from file based */ - if (iNumberOfVideoClips) - { - if (!iParser) - { - if (iClipFileHandle) - iParser = (CMP4Parser*) CMP4Parser::NewL(this, iClipFileHandle); - else - iParser = (CMP4Parser*) CMP4Parser::NewL(this, iClipFileName); - } - iParser->iFirstTimeClipParsing = ETrue; - iState = EStateIdle; - /* open file and parse header */ - iDataFormat = EData3GP; /* since file will be generated cant open with open stream so reset with standard */ - iMuxType = EMux3GP; - ParseHeaderL(); - } - } - } - - iState = EStatePreparing; - - if(iAllGeneratedClips == 1) /* all are generated clips => use H263 */ - { - //iTranscoder->SetTargetVideoType(1); /* set target video type to H263 */ - //not required as if all are generated even then output is based on engine output video type - } - iMonitor->StartPreparing(); - if (!iVideoEncoder) - { - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if (iOutputVideoType == EVideoAVCProfileBaseline) - { - VPASSERT(!iImageAvcEdit); - iImageAvcEdit = CVedAVCEdit::NewL(); - - iImageAvcEdit->SetOutputLevel( GetOutputAVCLevel() ); - } - -#endif - iVideoEncoder = CVideoEncoder::NewL(iMonitor, iImageAvcEdit, iMovie->VideoCodecMimeType()); - - iVideoEncoder->SetFrameSizeL(iMovie->Resolution()); - - // Use the max frame rate since we don't want to change the frame rate - TReal inputFrameRate = iMovie->MaximumFramerate(); - iVideoEncoder->SetInputFrameRate(inputFrameRate); - - if ( iMovie->VideoFrameRate() > 0 ) - iVideoEncoder->SetFrameRate( iMovie->VideoFrameRate() ); - if ( iMovie->VideoBitrate() > 0 ) // if there is request for restricted bitrate, use it - iVideoEncoder->SetBitrate( iMovie->VideoBitrate() ); - else if ( iMovie->VideoStandardBitrate() > 0 ) // use the given standard bitrate - iVideoEncoder->SetBitrate( iMovie->VideoStandardBitrate() ); - - if( iMovie->RandomAccessRate() > 0.0 ) - iVideoEncoder->SetRandomAccessRate( iMovie->RandomAccessRate() ); - - /* initialize encoder */ - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - iVideoEncoder->InitializeL(iStatus); - iEncoderInitPending = ETrue; - } - else - { - if((iAllGeneratedClips == 1) && (iVideoClipNumber == 0)) - { - VPASSERT(iVideoEncoder->BeenStarted() == 0); - //iVideoEncoder->Stop(); - delete iVideoEncoder; - iVideoEncoder = 0; - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if (iOutputVideoType == EVideoAVCProfileBaseline) - { - VPASSERT(!iImageAvcEdit); - iImageAvcEdit = CVedAVCEdit::NewL(); - - iImageAvcEdit->SetOutputLevel( GetOutputAVCLevel() ); - } -#endif - - iVideoEncoder = CVideoEncoder::NewL(iMonitor, iImageAvcEdit, iMovie->VideoCodecMimeType()); - - iVideoEncoder->SetFrameSizeL(iMovie->Resolution()); - - TReal inputFrameRate = iMovie->MaximumFramerate(); - iVideoEncoder->SetInputFrameRate(inputFrameRate); - - if ( iMovie->VideoFrameRate() > 0 ) - iVideoEncoder->SetFrameRate( iMovie->VideoFrameRate() ); - if ( iMovie->VideoBitrate() > 0 ) // if there is request for restricted bitrate, use it - iVideoEncoder->SetBitrate( iMovie->VideoBitrate() ); - else if ( iMovie->VideoStandardBitrate() > 0 ) // use the given standard bitrate - iVideoEncoder->SetBitrate( iMovie->VideoStandardBitrate() ); - if( iMovie->RandomAccessRate() > 0.0 ) - iVideoEncoder->SetRandomAccessRate( iMovie->RandomAccessRate() ); - - /* initialize encoder */ - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - iVideoEncoder->InitializeL(iStatus); - iEncoderInitPending = ETrue; - } - else - { - // first frame has to be intra - iVideoEncoder->SetRandomAccessPoint(); - iEncoderInitPending = ETrue; - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } - } - - -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::ParseHeaderOnlyL -// Parses the header for a given clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::ParseHeaderOnlyL(CParser::TStreamParameters& aStreamParams, - TFileName& aFileName, RFile* aFileHandle) -{ - - if (!iParser) - { - // create an instance of the parser - if (aFileHandle) - iParser = (CMP4Parser*) CMP4Parser::NewL(this, aFileHandle); - else - iParser = (CMP4Parser*) CMP4Parser::NewL(this, aFileName); - } - iParser->ParseHeaderL(aStreamParams); - - // don't read the audio properties from input files, but from audio engine - CVedMovieImp* songmovie = (iMovie); - CAudSong* songPointer = 0; - - if (songmovie) - { - songPointer = songmovie->Song(); - } - - if (songPointer) - { - TAudFileProperties prop = songPointer->OutputFileProperties(); - - aStreamParams.iHaveAudio = ETrue; - if (songPointer->ClipCount(KAllTrackIndices) == 0) - { - aStreamParams.iHaveAudio = EFalse; - } - - aStreamParams.iAudioLength = I64INT(prop.iDuration.Int64())/1000; - aStreamParams.iAudioFormat = CParser::EAudioFormatNone; - if (prop.iAudioType == EAudAMR) - { - aStreamParams.iAudioFormat = CParser::EAudioFormatAMR; - aStreamParams.iAudioFramesInSample = 5; - aStreamParams.iAudioTimeScale = 1000; - } - else if ( prop.iAudioType == EAudAAC_MPEG4 ) - { - aStreamParams.iAudioFormat = CParser::EAudioFormatAAC; - aStreamParams.iAudioFramesInSample = 1; - aStreamParams.iAudioTimeScale = prop.iSamplingRate; - } - } - - // update output parameters. - UpdateStreamParameters(iParser->iStreamParameters, aStreamParams); - SetOutputNumberOfFrames(iParser->iOutputNumberOfFrames); -} - - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::OpenStream -// Opens a clip for processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::OpenStream(TFileName aFileName, RFile* aFileHandle, TDataFormat aDataFormat) -{ - // We can only streams in idle state - if (iState != EStateIdle) - return EInvalidProcessorState; - - TInt error = KErrNone; - iDataFormat = aDataFormat; - - if (!aFileHandle) - { - - RFs fs; - RFile file; - - if(aFileName.Length() == 0) - return KErrArgument; - - // Open a file server session and open the file: - if ( (error = fs.Connect()) != KErrNone ) - return error; - - if ( (error = file.Open(fs, aFileName, EFileShareReadersOnly | EFileRead)) != KErrNone ) - { - if ( (error = file.Open(fs, aFileName, EFileShareAny | EFileRead)) != KErrNone ) - { - return error; - } - } - - // set descriptor to read buffer - TPtr8 readDes(0,0); - readDes.Set(iReadBuf, 0, KReadBufInitSize); - - // read data from the file - if ( (error = file.Read(readDes)) != KErrNone ) - return error; - - if ( readDes.Length() < 8 ) - return KErrGeneral; - - file.Close(); - fs.Close(); - - // detect if format is 3GP, 5-8 == "ftyp" - // This method is not 100 % proof, but good enough - if ( (iReadBuf[4] == 0x66) && (iReadBuf[5] == 0x74) && - (iReadBuf[6] == 0x79) && (iReadBuf[7] == 0x70) ) - { - iDataFormat = EData3GP; - iMuxType = EMux3GP; - } - else - return KErrNotSupported; - } - - // FIXME - iDataFormat = EData3GP; - iMuxType = EMux3GP; - - // parse 3GP header - CMP4Parser *parser = 0; - if ( !iParser ) - { - if (iClipFileHandle) - { - TRAP(error, (parser = CMP4Parser::NewL(this, iClipFileHandle)) ); - } - else - { - TRAP(error, (parser = CMP4Parser::NewL(this, iClipFileName)) ); - } - - if (error != KErrNone) - return error; - iParser = parser; - } - else - parser = (CMP4Parser*)iParser; - - TRAP(error, ParseHeaderL()); - - if (error != KErrNone) - return error; - - iState = EStateOpened; - - return KErrNone; - - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::CloseStream -// Closes the processed stream from parser -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::CloseStream() -{ - - PRINT((_L("CMovieProcessorImpl::CloseStream() begin - iState = %d"), iState)) - - if ( (iState != EStateOpened) && (iState != EStateProcessing) ) - return EInvalidProcessorState; - - TInt error=0; - - // delete parser - if (iParser) - { - TRAP(error, - { - delete iParser; - iParser=0; - } - ); - if (error != KErrNone) - return error; - } - - iClipFileName.Zero(); - iCurrentMovieName.Zero(); - - // We are idle again - iState = EStateIdle; - - PRINT((_L("CMovieProcessorImpl::CloseStream() end "))) - - return KErrNone; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::Prepare -// Prepares the processor for processing, opens demux & decoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::Prepare() -{ - TInt error; - TUint videoBlockSize, videoBlocks; - - // We can only prepare from preparing state - if (iState != EStatePreparing) - return EInvalidProcessorState; - - // Make sure we now know the stream format - if (iDataFormat == EDataAutoDetect) - return EUnsupportedFormat; - - // Check whether the stream has audio, video or both, and whether it is - // muxed - switch (iDataFormat) - { - case EData3GP: - // the video and audio flags are set when - // the header is parsed. - iIsMuxed = ETrue; - break; - default: - User::Panic(_L("CMovieProcessorImpl"), EInvalidInternalState); - } - - // If we have already played this stream since opening it, we'll have to - // try to rewind - - // only 3gp file format supported => iIsMuxed always true - videoBlocks = KVideoQueueBlocks; - videoBlockSize = KVideoQueueBlockSize; - - // Initialize video - VPASSERT((!iVideoQueue) && (!iVideoProcessor)); - if (iHaveVideo) - { - TRAP(error, InitVideoL(videoBlocks, videoBlockSize)); - if ( error != KErrNone ) - return error; - } - - // Initialize demux - VPASSERT(!iDemux); - VPASSERT(iIsMuxed); - TRAP(error, InitDemuxL()); - if ( error != KErrNone ) - return error; - - iState = EStateReadyToProcess; - - return KErrNone; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::InitVideoL -// Initializes the video decoder for processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::InitVideoL(TUint aQueueBlocks, TUint aQueueBlockSize) -{ - // Create video input queue - iVideoQueue = new (ELeave) CActiveQueue(aQueueBlocks, aQueueBlockSize); - iVideoQueue->ConstructL(); - - if (iThumbnailInProgress && - iParser->iStreamParameters.iVideoFormat == CParser::EVideoFormatAVCProfileBaseline) - { - if (!iAvcEdit) - { - // create AVC editing instance - iAvcEdit = CVedAVCEdit::NewL(); - } - } - - // Create correct video decoder object - - VPASSERT(!iVideoProcessor); - switch (iVideoType) - { - case EVideoH263Profile0Level10: - case EVideoH263Profile0Level45: - case EVideoMPEG4: - case EVideoAVCProfileBaseline: - // H.263 decoder handles both H.263+ and MPEG-4 - { - - iVideoProcessor = CVideoProcessor::NewL(iVideoQueue, - &iVideoParameters, - this, - iMonitor, - iAvcEdit, - iThumbnailInProgress, - CActive::EPriorityStandard); - - } - break; - - default: - User::Leave(EUnsupportedFormat); - } -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::InitDemuxL -// Initializes the demultiplexer for processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::InitDemuxL() -{ - - // Set video channel target queue - TUint i; - - // 3gp is the only supported file format - VPASSERT(iMuxType == EMux3GP); - - for ( i = 0; i < iNumDemuxChannels; i++ ) - { - if (iMP4Channels[i].iDataType == CMP4Demux::EDataVideo) - { - VPASSERT(iHaveVideo); - iMP4Channels[i].iTargetQueue = iVideoQueue; - } - } - - VPASSERT(iParser); - - iDemux = CMP4Demux::NewL(NULL /* demuxQueue */, iNumDemuxChannels, - iMP4Channels, &iMP4Parameters, - iMonitor, (CMP4Parser*)iParser, - KDemuxPriority); -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::DoStartProcessing -// Starts processing the movie -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::DoStartProcessing() -{ - - PRINT((_L("CMovieProcessorImpl::DoStartProcessing() begin"))) - - if (iNumberOfVideoClips) - { - VPASSERT(iDemux); - VPASSERT(iVideoProcessor); - VPASSERT(iState == EStateReadyToProcess); - - // start demuxing & decoding video - - iDemux->Start(); - iVideoProcessor->Start(); - if(!((iVideoClipNumber==0)&&((TVedVideoClipClass)iVideoClip->Info()->Class()==(TVedVideoClipClass)EVedVideoClipClassGenerated))) - iMonitor->ProcessingStarted(iStartingProcessing); - iStartingProcessing = EFalse; - iState = EStateProcessing; - } - else - {// audio-only case - - iState = EStateProcessing; - iMonitor->ProcessingStarted(EFalse); - - TRAPD( error, iObserver->NotifyMovieProcessingStartedL(*iMovie) ); - if (error != KErrNone) - { - if (iMonitor) - iMonitor->Error(error); - return; - } - - // process all audio clips - ProcessAudioOnly(); - } - - PRINT((_L("CMovieProcessorImpl::DoStartProcessing() end"))) - -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::ProcessAudioOnly -// Processes the movie in audio-only case -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::ProcessAudioOnly() -{ - - VPASSERT(iNumberOfAudioClips > 0); - - // write audio frames to file & encode a black video frame - TInt error; - TRAP(error, ProcessAudioL()); - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - - //VPASSERT(iEncodePending); - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::DoCloseVideoL -// Closes & deletes the structures used in processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::DoCloseVideoL() -{ - if ((iState == EStateProcessing) || (iState == EStateReadyToProcess)|| - (iState == EStatePreparing) ) - { - PRINT((_L("CMovieProcessorImpl::DoCloseVideoL() - stopping"))) - User::LeaveIfError(Stop()); - iState = EStateOpened; - } - - // If we are buffering or opening at the moment or clip is open then close it - if ( (iState == EStateOpened) || (iState == EStateReadyToProcess)) - { - PRINT((_L("CMovieProcessorImpl::DoCloseVideoL() - closing stream"))) - User::LeaveIfError(CloseStream()); - iState = EStateIdle; - } -} - - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::Stop -// Stops processing & closes modules used in processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::Stop() -{ - TInt error = KErrNone; - - // Check state - if ( (iState != EStateProcessing) && (iState != EStateReadyToProcess) && (iState != EStatePreparing) ) - return EInvalidProcessorState; - // We may also get here from the middle of a Prepare() attempt. - - PRINT((_L("CMovieProcessorImpl::Stop() begin"))) - - // Destroy the playback objects to stop playback - TRAP(error, - { - if (iDemux) - delete iDemux; - iDemux = 0; - - if (iAudioProcessor) - delete iAudioProcessor; - iAudioProcessor = 0; - - }); - if (error != KErrNone) - return error; - - - if (iVideoEncoder) - { - if (!iEncoderInitPending) - { - // Delete encoder. Don't delete now if encoding - // is not in progress at encoder and there are - // active encoding flags. This means that encoder - // has completed encoding request, but this->RunL() - // hasn't been called yet. Encoder will be deleted in RunL() - - if ( ( iVideoEncoder->IsEncodePending() == 1 ) || - ( (!iEncodePending && !iEncodeInProgress) ) ) - { - PRINT((_L("CMovieProcessorImpl::Stop() - deleting encoder"))); - Cancel(); - iVideoEncoder->Stop(); - delete iVideoEncoder; - iVideoEncoder = 0; - } - } - } - - if (iVideoProcessor) - delete iVideoProcessor; - iVideoProcessor = 0; - - if (iVideoQueue) - delete iVideoQueue; - iVideoQueue = 0; - - if (!iThumbnailInProgress && iState == EStateProcessing) - { - if (iMonitor) - iMonitor->ProcessingStopped(); - } - - iState = EStateOpened; - - PRINT((_L("CMovieProcessorImpl::Stop() end"))) - - return KErrNone; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::Close -// Stops processing and closes all submodules except status monitor -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::Close() -{ - - // delete all objects except status monitor - delete iComposer; - iComposer = 0; - DeleteClipStructures(); - TRAPD(error, DoCloseVideoL()); - if (error != KErrNone) - return error; - - iState = EStateIdle; - - return KErrNone; - -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::RunL -// Called by the active scheduler when the video encoder initialization is done -// or an ending black frame has been encoded -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::RunL() -{ - - PRINT((_L("RunL begin, iEncoderInitPending %d, iEncodePending %d, iEncodeInProgress %d"), - iEncoderInitPending, iEncodePending, iEncodeInProgress )); - - PRINT((_L("CMovieProcessorImpl::RunL begin - iEncodeInProgress %d"), iEncodeInProgress)); - - if (iAudioProcessingCompleted) - { - iAudioProcessingCompleted = EFalse; - FinalizeVideoSequenceL(); - return; - } - - if (iNumberOfVideoClips) - { - // If we come here after a generated 3gp clip has been created, - // ival == EVedVideoClipClassGenerated && iImageClipCreated == 1 - - TVedVideoClipClass ival = (TVedVideoClipClass)iVideoClip->Info()->Class(); - if(ival == EVedVideoClipClassGenerated && iImageClipCreated == 0) // iImageClipCreated will work only for single imageset currently - { - iEncoderInitPending = EFalse; // is this correct ?? - DoImageSetProcessL(); // Call function which does image file creation - return; - } - } - - if (iEncoderInitPending) - { - VPASSERT(!iEncodePending); - - PRINT((_L("CMovieProcessorImpl::RunL - encoder init complete"))); - // video encoder has been initialized => start processing - - iEncoderInitPending = EFalse; - - if (iProcessingCancelled) - { - PRINT((_L("CMovieProcessorImpl::RunL - processing cancelled"))); - if (iVideoEncoder) - { - iVideoEncoder->Stop(); - delete iVideoEncoder; - iVideoEncoder = 0; - } - PRINT((_L("CMovieProcessorImpl::RunL - calling cancelled callback"))); - if (iMonitor) - iMonitor->ProcessingCancelled(); - - return; - } - - if (iEncodingBlackFrames) - { - FinalizeVideoSequenceL(); - return; - } - - if (iNumberOfVideoClips) - { - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - CVedVideoClipInfo* currentInfo = iVideoClip->Info(); - - // Save SPS/PPS data from input file even if output type - // is not AVC. This data is needed in doing blending transitions - // from AVC input to H.263/MPEG-4 output. An optimisation - // could be to check if such transitions are present in movie - // and save only when necessary. - - if ( (currentInfo->Class() == EVedVideoClipClassFile && - currentInfo->VideoType() == EVedVideoTypeAVCBaselineProfile) || - (iOutputVideoType == EVideoAVCProfileBaseline && - currentInfo->Class() == EVedVideoClipClassGenerated) ) - { - // save SPS/PPS NAL units - TInt size = iParser->GetDecoderSpecificInfoSize(); - HBufC8* buf = (HBufC8*) HBufC8::NewLC(size); - TPtr8 ptr = buf->Des(); - User::LeaveIfError( iParser->ReadAVCDecoderSpecificInfo(ptr) ); - iAvcEdit->SaveAVCDecoderConfigurationRecordL(ptr, EFalse); - CleanupStack::PopAndDestroy(); // buf - } -#endif - - // go to the beginning of the I frame immediately preceding the start cut time - User::LeaveIfError(iParser->SeekOptimalIntraFrame(iStartCutTime, 0, ETrue)); - - TInt currentFrameIndex = iOutputNumberOfFrames; - - // update parameters - SetOutputNumberOfFrames(iParser->iOutputNumberOfFrames); - - // fill in frame parameters - FillFrameParametersL(currentFrameIndex); - - // open video decoder & demux - User::LeaveIfError(Prepare()); - } - // if ( iVideoClipNumber > 0 || class != generated ) - if( iNumberOfVideoClips == 0 || !( (iVideoClipNumber==0) && ((TVedVideoClipClass)iVideoClip->Info()->Class()==(TVedVideoClipClass)EVedVideoClipClassGenerated)) ) - iMonitor->PrepareComplete(); - - // start processing - DoStartProcessing(); - } - - else if (iEncodePending) - { - // encoding complete - iEncodePending = EFalse; - - TInt64 frameDuration; // in ticks - if ( iLeftOverDuration >= 1000 ) - { - iLeftOverDuration -= 1000; - frameDuration = iOutputVideoTimeScale; // One second in ticks - } - else - { - iLeftOverDuration = 0; - frameDuration = TInt64( TReal(iOutputVideoTimeScale)/1000.0 * I64REAL(iLeftOverDuration) + 0.5 ); - } - - if (iStatus == KErrNone) - { - // Audio-only or audio longer than video - // => black frame is encoded at the end - - PRINT((_L("CMovieProcessorImpl::RunL - encoding complete"))); - - // fetch the bitstream & write it to output file, release bitstream buffer - TBool isKeyFrame = 0; - TPtrC8 buf(iVideoEncoder->GetBufferL(isKeyFrame)); - - TReal tsInTicks = I64REAL(iTimeStamp.Int64() / TInt64(1000)) * TReal(iOutputVideoTimeScale) / 1000.0; - - User::LeaveIfError( WriteVideoFrameToFile((TDesC8&)buf, TInt64(tsInTicks + 0.5), I64INT(frameDuration), - isKeyFrame, ETrue, EFalse, ETrue ) ); - - iVideoEncoder->ReturnBuffer(); - - // do not reset flag until here so that last frame of last clip gets the correct - // duration in case slow motion is used - iApplySlowMotion = EFalse; - } -#ifdef _DEBUG - else - { - PRINT((_L("CMovieProcessorImpl::RunL - encoding failed"))); - } -#endif - - iTimeStamp = TTimeIntervalMicroSeconds(iTimeStamp.Int64() + TInt64(1000000)); - - if (iLeftOverDuration > 0) - { - // encode another frame - VPASSERT(iEncoderBuffer); - TSize tmpSize = iMovie->Resolution(); - TUint yLength = tmpSize.iWidth * tmpSize.iHeight; - TUint uvLength = yLength >> 1; - TUint yuvLength = yLength + uvLength; - TPtr8 yuvPtr(iEncoderBuffer, yuvLength, yuvLength); - - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - - iVideoEncoder->EncodeFrameL(yuvPtr, iStatus, iTimeStamp); - iEncodePending = ETrue; - - } - else - { - // movie complete, close everything - - TInt error = FinalizeVideoWrite(); - if (error != KErrNone) - { - User::Leave(KErrGeneral); - } - - error = iComposer->Close(); // creates the output file - if (error != KErrNone) - { - User::Leave(KErrGeneral); - } - - // delete all objects except status monitor - delete iComposer; - iComposer = 0; - - if(iImageComposer) - { - delete iImageComposer; - iImageComposer=0; - } - - if (iImageAvcEdit) - { - delete iImageAvcEdit; - iImageAvcEdit = 0; - } - - DeleteClipStructures(); - - DoCloseVideoL(); - - VPASSERT(!iEncoderInitPending); - - PRINT((_L("CMovieProcessorImpl::RunL - calling completed callback"))); - iMonitor->ProcessingComplete(); - iState = EStateIdle; - } - - } -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::RunError -// Called by the AO framework when RunL method has leaved -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::RunError(TInt aError) -{ - - if ( iCurClipFileName.Length() ) - { - iCurClip.Close(); - iFs.Delete( iCurClipFileName ); - iCurClipFileName.Zero(); - iCurClipDurationList.Reset(); - iCurClipTimeStampList.Reset(); - } - - iMonitor->Error(aError); - - return KErrNone; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::DoCancel -// Cancels any pending asynchronous requests -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::DoCancel() -{ - - PRINT((_L("CMovieProcessorImpl::DoCancel() begin"))) - - // Cancel our internal request - if ( iStatus == KRequestPending ) - { - PRINT((_L("CMovieProcessorImpl::DoCancel() cancel request"))) - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrCancel); - } - - PRINT((_L("CMovieProcessorImpl::DoCancel() end"))) -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::SetHeaderDefaults -// Sets appropriate default values for processing parameters -// in audio-only case -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::SetHeaderDefaults() -{ - - // set suitable default values - iHaveVideo = ETrue; - iVideoType = EVideoH263Profile0Level10; - iHaveAudio = ETrue; - iAudioType = EAudioAMR; - iNumDemuxChannels = 0; - - // resolution from movie - TSize tmpSize = iMovie->Resolution(); - iVideoParameters.iWidth = tmpSize.iWidth; - iVideoParameters.iHeight = tmpSize.iHeight; - iVideoParameters.iIntraFrequency = 0; - iVideoParameters.iNumScalabilityLayers = 0; - iVideoParameters.iReferencePicturesNeeded = 0; - // picture period in nanoseconds - iVideoParameters.iPicturePeriodNsec = TInt64(33366667); - - // output time scales - iOutputVideoTimeScale = KVideoTimeScale; - iOutputAudioTimeScale = KAMRAudioTimeScale; - - iStreamLength = 0; - iStreamSize = 0; - iStreamBitrate = 10000; - -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::ParseHeaderL -// Parses the clip header & sets internal variables accordingly -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::ParseHeaderL() -{ - TInt i; - - VPASSERT(iParser); - - if ( iMuxType != EMux3GP ) - User::Leave(EUnsupportedFormat); - - CParser::TStreamParameters streamParams; - - // parse - iParser->ParseHeaderL(streamParams); - - // don't read the audio properties from input files, but from audio engine - CVedMovieImp* songmovie = (iMovie); - CAudSong* songPointer = 0; - - if (songmovie) - { - songPointer = songmovie->Song(); - } - - if (songPointer) - { - - TAudFileProperties prop = songPointer->OutputFileProperties(); - - streamParams.iHaveAudio = ETrue; - if (songPointer->ClipCount(KAllTrackIndices) == 0) - { - streamParams.iHaveAudio = EFalse; - } - - streamParams.iAudioLength = I64INT(prop.iDuration.Int64())/1000; - streamParams.iAudioFormat = CParser::EAudioFormatNone; - if (prop.iAudioType == EAudAMR) - { - streamParams.iAudioFormat = CParser::EAudioFormatAMR; - streamParams.iAudioFramesInSample = 5; - streamParams.iAudioTimeScale = 1000; - } - else if ( prop.iAudioType == EAudAAC_MPEG4 ) - { - streamParams.iAudioFormat = CParser::EAudioFormatAAC; - streamParams.iAudioFramesInSample = 1; - streamParams.iAudioTimeScale = prop.iSamplingRate; - } - } - - // copy input stream info into parser - UpdateStreamParameters(iParser->iStreamParameters, streamParams); - - // copy parameters - iHaveVideo = streamParams.iHaveVideo; - iVideoType = (TVideoType)streamParams.iVideoFormat; - iHaveAudio = streamParams.iHaveAudio; - iAudioType = (TAudioType)streamParams.iAudioFormat; - iNumDemuxChannels = streamParams.iNumDemuxChannels; - iCanSeek = streamParams.iCanSeek; - iVideoParameters.iWidth = streamParams.iVideoWidth; - iVideoParameters.iHeight = streamParams.iVideoHeight; - iVideoParameters.iIntraFrequency = streamParams.iVideoIntraFrequency; - iVideoParameters.iNumScalabilityLayers = streamParams.iNumScalabilityLayers; - iVideoParameters.iReferencePicturesNeeded = streamParams.iReferencePicturesNeeded; - iVideoParameters.iPicturePeriodNsec = streamParams.iVideoPicturePeriodNsec; - - for (i = 0; i < (TInt)streamParams.iNumScalabilityLayers; i++) - iVideoParameters.iLayerFrameRates[i] = streamParams.iLayerFrameRates[i]; - - - // assign time scale values - if((iVideoClipNumber==0) && (iOutputVideoTimeSet==0)) - { - iOutputVideoTimeSet = 1; - iOutputVideoTimeScale = KVideoTimeScale; - } - - // change the start and end times of the video clip from msec to ticks - iVideoClipParameters[iVideoClipNumber].iStartTime = TInt64( TReal(iOutputVideoTimeScale)/1000.0 * - I64REAL(iVideoClipParameters[iVideoClipNumber].iStartTime) ); - - iVideoClipParameters[iVideoClipNumber].iEndTime = TInt64( TReal(iOutputVideoTimeScale)/1000.0 * - I64REAL(iVideoClipParameters[iVideoClipNumber].iEndTime) ); - - iVideoParameters.iTiming = CVideoProcessor::ETimeStamp; - iMP4Parameters.iPicturePeriodMs = I64INT( (iVideoParameters.iPicturePeriodNsec / TInt64(1000000)) ); - iMP4Parameters.iAudioFramesInSample = streamParams.iAudioFramesInSample; - - - if ( iHaveVideo ) - { - iMP4Channels[0].iDataType = CMP4Demux::EDataVideo; - } - - if ( iHaveAudio ) { - - iNumDemuxChannels = 1; - - // NOTE: audio is processed 'off-line' after a video - // clip has been processed. - - //iMP4Channels[i].iDataType = CMP4Demux::EDataAudio; - } - - iStreamLength = streamParams.iStreamLength; - iStreamBitrate = streamParams.iStreamBitrate; - iStreamSize = streamParams.iStreamSize; - - // Ensure that the video isn't too large - if (!iThumbnailInProgress) - { - if ( (iVideoParameters.iWidth > KVedMaxVideoWidth) || - (iVideoParameters.iHeight > KVedMaxVideoHeight) ) - User::Leave(EVideoTooLarge); - } - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::UpdateStreamParameters -// Copies stream parameters to destination structure -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::UpdateStreamParameters(CParser::TStreamParameters& aDestParameters, - CParser::TStreamParameters& aSrcParameters) -{ - TInt i; - aDestParameters.iHaveVideo = aSrcParameters.iHaveVideo; - aDestParameters.iHaveAudio = aSrcParameters.iHaveAudio; - aDestParameters.iNumDemuxChannels = aSrcParameters.iNumDemuxChannels; - aDestParameters.iFileFormat = aSrcParameters.iFileFormat; - aDestParameters.iVideoFormat = aSrcParameters.iVideoFormat; - aDestParameters.iAudioFormat = aSrcParameters.iAudioFormat; - aDestParameters.iAudioFramesInSample = aSrcParameters.iAudioFramesInSample; - aDestParameters.iVideoWidth = aSrcParameters.iVideoWidth; - aDestParameters.iVideoHeight = aSrcParameters.iVideoHeight; - aDestParameters.iVideoPicturePeriodNsec = aSrcParameters.iVideoPicturePeriodNsec; - aDestParameters.iVideoIntraFrequency = aSrcParameters.iVideoIntraFrequency; - aDestParameters.iStreamLength = aSrcParameters.iStreamLength; - aDestParameters.iVideoLength = aSrcParameters.iVideoLength; - aDestParameters.iAudioLength = aSrcParameters.iAudioLength; - aDestParameters.iCanSeek = aSrcParameters.iCanSeek; - aDestParameters.iStreamSize = aSrcParameters.iStreamSize; - aDestParameters.iStreamBitrate = aSrcParameters.iStreamBitrate; - aDestParameters.iMaxPacketSize = aSrcParameters.iMaxPacketSize; - aDestParameters.iLogicalChannelNumberVideo = aSrcParameters.iLogicalChannelNumberVideo; - aDestParameters.iLogicalChannelNumberAudio = aSrcParameters.iLogicalChannelNumberAudio; - aDestParameters.iReferencePicturesNeeded = aSrcParameters.iReferencePicturesNeeded; - aDestParameters.iNumScalabilityLayers = aSrcParameters.iNumScalabilityLayers; - for(i=0; i<(TInt)aSrcParameters.iNumScalabilityLayers; i++) - aDestParameters.iLayerFrameRates[i] = aSrcParameters.iLayerFrameRates[i]; - - aDestParameters.iFrameRate = aSrcParameters.iFrameRate; - aDestParameters.iVideoTimeScale = aSrcParameters.iVideoTimeScale; - aDestParameters.iAudioTimeScale = aSrcParameters.iAudioTimeScale; - -} - - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::FinalizeVideoClip -// Finalizes video clip once all its frames are processed -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::FinalizeVideoClip() -{ - - PRINT((_L("CMovieProcessorImpl::FinalizeVideoClip() begin"))) - - TInt error = KErrNone; - - TInt64 endPosition = TInt64(iCurrentVideoTimeInTicks + 0.5); - - if ( TransitionDuration() ) - { - endPosition += TInt64( (TReal)TransitionDuration() * (TReal)iOutputVideoTimeScale / (TReal)iParser->iStreamParameters.iVideoTimeScale + 0.5); - } - - // convert time from ticks to millisec. - endPosition = GetVideoTimeInMsFromTicks( endPosition, ETrue ); - - CVedMovieImp* movie = (iMovie); - - iLeftOverDuration = movie->Duration().Int64()/1000 - - movie->VideoClip(iNumberOfVideoClips-1)->EndTime().Int64()/1000; - - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - - // if last video clip in movie - if(iVideoClipNumber == iNumberOfVideoClips-1 || iMovieSizeLimitExceeded) - { - iAllVideoProcessed = ETrue; - if ( iFsConnected ) - { - TRAP(error, CloseTransitionInfoL()); - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - iFs.Close(); - iFsConnected = EFalse; - } - - // process all audio - TRAP(error, ProcessAudioL()); - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - } - else // process the next clip - { - - if (iCurClipFileName.Length() ) - { - iCurClip.Close(); - error = iFs.Delete( iCurClipFileName ); - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - iCurClipFileName.Zero(); - iCurClipDurationList.Reset(); - iCurClipTimeStampList.Reset(); - iTimeStampListScaled = EFalse; - } - - if ( iNextClipFileName.Length() ) - { - iNextClip.Close(); - } - - // close the video - TRAP(error, DoCloseVideoL()); - if (error != KErrNone) - { - iMonitor->Error(error); - - if ( iNextClipFileName.Length() ) - { - error = iFs.Delete( iNextClipFileName ); - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - iNextClipFileName.Zero(); - iNextClipDurationList.Reset(); - iNextClipTimeStampList.Reset(); - } - return; - } - iMonitor->Closed(); - - if ( iFsConnected ) - { - CFileMan *fileMan = 0; - TRAP(error, fileMan = CFileMan::NewL( iFs )); - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - TParse filepath; - filepath.Set( iOutputMovieFileName, NULL, NULL ); - TFileName filesToDelete = filepath.DriveAndPath(); - filesToDelete.Append( _L( "Im_nokia_vpi.tmp" ) ); - fileMan->Delete( filesToDelete,0 ); - delete fileMan; - } - - // copy from current to next - iCurClipFileName = iNextClipFileName; - iNextClipFileName.Zero(); - TInt duration; - TInt64 timestamp; - while ( iNextClipDurationList.Count() ) - { - duration = iNextClipDurationList[0]; - iNextClipDurationList.Remove( 0 ); - iCurClipDurationList.Append( duration ); - timestamp = iNextClipTimeStampList[0]; - iNextClipTimeStampList.Remove( 0 ); - iCurClipTimeStampList.Append( timestamp ); - } - - iNextClipDurationList.Reset(); - iNextClipTimeStampList.Reset(); - iCurClipIndex = 0; - - if ( iCurClipFileName.Length() ) - { - if ( iCurClip.Open(iFs, iCurClipFileName, EFileShareReadersOnly | EFileStream | EFileRead) != KErrNone ) - { - if ( iCurClip.Open(iFs, iCurClipFileName, EFileShareAny | EFileStream | EFileRead) != KErrNone ) - { - iCurClip.Close(); - iCurClipFileName.Zero(); - iCurClipDurationList.Reset(); - iCurClipTimeStampList.Reset(); - } - } - } - - VPASSERT(!iEncoderInitPending); - - // go to next clip - iVideoClipNumber++; - iVideoClip = movie->VideoClip(iVideoClipNumber); - - if(iVideoClip->Info()->Class() == EVedVideoClipClassGenerated) - { - TRAP(error, TemporaryInitializeGeneratedClipL()); - } - else - { - TRAP(error, InitializeClipL()); - } - if (error != KErrNone) - { - if ( iCurClipFileName.Length() ) - { - iCurClip.Close(); - TInt fsError = iFs.Delete( iCurClipFileName ); - if (fsError != KErrNone) - { - iMonitor->Error(fsError); - return; - } - iCurClipFileName.Zero(); - iCurClipDurationList.Reset(); - iCurClipTimeStampList.Reset(); - } - iMonitor->Error(error); - return; - } - - } - PRINT((_L("CMovieProcessorImpl::FinalizeVideoClip() end"))) -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::ProcessAudioL -// Starts audio processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::ProcessAudioL() -{ - - VPASSERT(iAudioProcessor == 0); - - CVedMovieImp* songmovie = (iMovie); - CAudSong* songPointer = songmovie->Song(); - - // always read audio decoder specific info from audio engine - TAudType audioType = songPointer->OutputFileProperties().iAudioType; - - if( audioType == EAudAAC_MPEG4 ) - { - HBufC8* audioinfo = 0; - songPointer->GetMP4DecoderSpecificInfoLC(audioinfo,64); - - if (audioinfo != 0) - { - CMP4Composer* composeInfo = (CMP4Composer*)iComposer; - User::LeaveIfError(composeInfo->WriteAudioSpecificInfo(audioinfo)); - CleanupStack::Pop(); - delete audioinfo; - audioinfo = 0; - } - - } - if( (iMovieSizeLimit > 0)&&(iMovieSizeLimitExceeded) ) - { - songPointer->SetDuration(iEndCutTime.Int64()*1000); - } - - // create audioprocessor - iAudioProcessor = CAudioProcessor::NewL(this, songPointer); - - // start processing - iAudioProcessor->StartL(); - - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::AudioProcessingComplete -// Called by audio processor when audio processing has been completed -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::AudioProcessingComplete(TInt aError) -{ - - if (aError != KErrNone) - { - iMonitor->Error(aError); - return; - } - - if (iProcessingCancelled) - return; - - TInt error = FinalizeAudioWrite(); - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - - iAudioProcessingCompleted = ETrue; - - // since this is run in audio processor's RunL, the audio processor - // cannot be deleted here. signal the AO to finish in this->RunL() - - VPASSERT(!IsActive()); - - SetActive(); - iStatus = KRequestPending; - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - - - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::FinalizeVideoSequence -// Finalizes the movie once all clips have been processed -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::FinalizeVideoSequenceL() -{ - - CVedMovieImp* movie = (iMovie); - - // calculate video left-over duration in case audio runs longer than video - iLeftOverDuration = 0; - if (iNumberOfVideoClips > 0) - { - iLeftOverDuration = movie->Duration().Int64()/1000 - - movie->VideoClip(iNumberOfVideoClips-1)->EndTime().Int64()/1000; - } - else - iLeftOverDuration = movie->Duration().Int64()/1000; - - if ( iLeftOverDuration > 0) - { - VPASSERT( iNumberOfAudioClips!=0 ); - // encode black frames - - if(iVideoProcessor) - { - delete iVideoProcessor; - iVideoProcessor = 0; - } - - if (!iVideoEncoder) - { - // create and initialise encoder - - iVideoEncoder = CVideoEncoder::NewL(iMonitor, iAvcEdit, iMovie->VideoCodecMimeType()); - - iVideoEncoder->SetFrameSizeL(iMovie->Resolution()); - - if ( iMovie->VideoFrameRate() > 0 ) - iVideoEncoder->SetFrameRate( iMovie->VideoFrameRate() ); - if ( iMovie->VideoBitrate() > 0 ) // if there is request for restricted bitrate, use it - iVideoEncoder->SetBitrate( iMovie->VideoBitrate() ); - else if ( iMovie->VideoStandardBitrate() > 0 ) // use the given standard bitrate - iVideoEncoder->SetBitrate( iMovie->VideoStandardBitrate() ); - - // use input framerate of 1 fps - iVideoEncoder->SetInputFrameRate(1.0); - - if( iMovie->RandomAccessRate() > 0.0 ) - iVideoEncoder->SetRandomAccessRate( iMovie->RandomAccessRate() ); - - // async. - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - iVideoEncoder->InitializeL(iStatus); - - iEncoderInitPending = ETrue; - iEncodingBlackFrames = ETrue; - return; - - } - TSize tmpSize = iMovie->Resolution(); - TUint yLength = tmpSize.iWidth * tmpSize.iHeight; - TUint uvLength = yLength >> 1; - TUint yuvLength = yLength + uvLength; - - if ( iEncoderBuffer == 0 ) - { - // allocate memory for encoder input YUV frame - iEncoderBuffer = (TUint8*)User::AllocL(yuvLength); - } - - // fill buffer with 'black' data - // Y - TPtr8 yuvPtr(0,0); - TInt data=5; // don't use zero - real player doesn't show all-zero frames - yuvPtr.Set(iEncoderBuffer, yLength, yLength); - yuvPtr.Fill((TChar)data, yLength); - - // U,V - data=128; - yuvPtr.Set(iEncoderBuffer + yLength, uvLength, uvLength); - yuvPtr.Fill((TChar)data, uvLength); - - yuvPtr.Set(iEncoderBuffer, yuvLength, yuvLength); - - if (iNumberOfVideoClips == 0) - iTimeStamp = 0; - else - iTimeStamp = movie->VideoClip(iNumberOfVideoClips-1)->CutOutTime(); - - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - - iVideoEncoder->EncodeFrameL(yuvPtr, iStatus, iTimeStamp); - iEncodePending = ETrue; - - return; - - } - - // movie complete, close everything - - User::LeaveIfError(FinalizeVideoWrite()); - - // delete all objects except status monitor - if (iComposer) - { - User::LeaveIfError(iComposer->Close()); - delete iComposer; - iComposer = 0; - } - - DoCloseVideoL(); - - DeleteClipStructures(); - - PRINT((_L("CMovieProcessorImpl::FinalizeVideoSequence() - calling completed callback"))) - - iMonitor->ProcessingComplete(); - iState = EStateIdle; - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::CurrentMetadataSize -// Get current metadata size -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TUint CMovieProcessorImpl::CurrentMetadataSize() -{ - TBool haveAudio; - TBool haveVideo; - TUint metadatasize = 0; - - haveAudio = EFalse; - haveVideo = EFalse; - - if ( GetOutputVideoType() == EVedVideoTypeH263Profile0Level10 || - GetOutputVideoType() == EVedVideoTypeH263Profile0Level45 ) - { - haveVideo = ETrue; - metadatasize += 574; // Constant size H.263 metadata - metadatasize += (iVideoFrameNumber * 16 + iVideoIntraFrameNumber * 4); // Content dependent H.263 metadata - } - - if ( GetOutputVideoType() == EVedVideoTypeMPEG4SimpleProfile ) - { - haveVideo = ETrue; - metadatasize += 596; // Constant size MPEG-4 video metadata - metadatasize += (iVideoFrameNumber * 16 + iVideoIntraFrameNumber * 4); // Content dependent MPEG-4 video metadata - } - - if ( GetOutputAudioType() == EVedAudioTypeAMR ) // AMR-NB - { - haveAudio = ETrue; - metadatasize += 514; // Constant size AMR metadata - metadatasize += ((iAudioFrameNumber + KVedAudioFramesInSample - 1) / KVedAudioFramesInSample) * 8; - } - - if ( GetOutputAudioType() == EVedAudioTypeAAC_LC ) // MPEG-4 AAC-LC - { - haveAudio = ETrue; - metadatasize += 514; // Constant size metadata - metadatasize += (iAudioFrameNumber * 8); - } - - if (haveAudio && haveVideo) - metadatasize -= 116; // There is only one moov and mvhd in a file - - return metadatasize; - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::BufferAMRFrames -// Collects output audio frames to a buffer and writes them -// to the output 3gp file when a whole audio sample is available -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::BufferAMRFrames(const TDesC8& aBuf, TInt aNumFrames,TInt aDuration) - -{ - - VPASSERT(iOutAudioBuffer); - TPtr8 outAudioPtr(iOutAudioBuffer->Des()); - TInt error = KErrNone; - - if((outAudioPtr.Length() + aBuf.Length()) > outAudioPtr.MaxLength()) - { - // extend buffer size - - // New size is 3/2ths of the old size, rounded up to the next - // full kilobyte - TUint newSize = (3 * outAudioPtr.MaxLength()) / 2; - newSize = (newSize + 1023) & (~1023); - TRAP(error, (iOutAudioBuffer = iOutAudioBuffer->ReAllocL(newSize)) ); - - if (error != KErrNone) - return error; - - PRINT((_L("CMovieProcessorImpl::BufferAMRFrames() - extended buffer to %d bytes"), newSize)); - - outAudioPtr.Set(iOutAudioBuffer->Des()); - } - outAudioPtr.Append(aBuf); - iTotalDurationInSample += aDuration; - iAudioFramesInBuffer += aNumFrames; - - return KErrNone; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::WriteAMRSamplesToFile -// Write buffered AMR sample(s) to composer -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::WriteAMRSamplesToFile() -{ - - VPASSERT(iOutAudioBuffer); - TPtr8 outAudioPtr(iOutAudioBuffer->Des()); - - VPASSERT(TUint(iAudioFramesInSample) == KVedAudioFramesInSample); - - while ( iAudioFramesInBuffer >= iAudioFramesInSample ) - { - // write one audio sample to file - -// TInt frameSamples = 160; -// TInt samplingRate = KVedAudioSamplingRate8k; - TInt audioSampleDurationInTicks = 0; - TPtrC8 writeDes; - TInt sampleSize = 0; -// TInt frameNum = 0; -// TInt frameSize = 0; - TUint8* frameBuffer = (TUint8*)outAudioPtr.Ptr(); - TInt error = KErrNone; - - // Gets Size of buffer of current frames - sampleSize = outAudioPtr.Length(); - - // if frame is sampled at a different rate - audioSampleDurationInTicks = GetAudioTimeInTicksFromMs(iTotalDurationInSample/1000); - - // set descriptor to sample - writeDes.Set( outAudioPtr.Left(sampleSize) ); - - // compose audio to output 3gp file - error = iComposer->WriteFrames((TDesC8&)writeDes, sampleSize, audioSampleDurationInTicks, 0 /*iAudioKeyFrame*/, - iAudioFramesInSample, CMP4Composer::EFrameTypeAudio); - - // Resetting duration to zero - iTotalDurationInSample = 0; - - if (error != KErrNone) - return error; - - if ( outAudioPtr.Length() > sampleSize ) - { - // copy rest of the data to beginning of buffer - frameBuffer = (TUint8*)outAudioPtr.Ptr(); - TInt len = outAudioPtr.Length() - sampleSize; - Mem::Copy(frameBuffer, frameBuffer + sampleSize, len); - outAudioPtr.SetLength(len); - } - else - { - VPASSERT(iAudioFramesInBuffer == iAudioFramesInSample); - outAudioPtr.SetLength(0); - } - - iAudioFramesInBuffer -= iAudioFramesInSample; - iAudioFrameNumber += iAudioFramesInSample; - } - return KErrNone; - -} - -TInt CMovieProcessorImpl::WriteAllAudioFrames(TDesC8& aBuf, TInt aDuration) -{ - - if (iDiskFull) - return KErrDiskFull; - - // check available disk space - - TInt error; - TInt64 freeSpace = 0; - // get free space on disk - TRAP(error, freeSpace = iComposer->DriveFreeSpaceL()); - if (error != KErrNone) - return error; - - // subtract metadata length from free space - freeSpace -= TInt64(CurrentMetadataSize()); - - if (freeSpace < TInt64(KDiskSafetyLimit)) - { - iDiskFull = ETrue; - return KErrDiskFull; - } - - - if ( GetOutputAudioType() == EVedAudioTypeAMR ) - { - // write frame by frame until duration >= duration for this clip - - // NOTE: clip duration not checked!!! - - TPtr8 ptr(0,0); - TUint8* buf = (TUint8*)aBuf.Ptr(); - TInt frameSize = aBuf.Length(); - - ptr.Set(buf, frameSize, frameSize); - error = BufferAMRFrames(ptr, 1,aDuration); - if ( error != KErrNone ) - return error; - iTotalAudioTimeWrittenMs += (aDuration/1000); //20; - buf += frameSize; - - } - else - { - // write buffer directly to file (1 frame per sample in AAC) - - error = KErrNone; -// TInt error = KErrNone; - TInt sampleSize = aBuf.Length(); -// const TInt framesInSample = 1; - TInt audioSampleDurationInTicks = GetAudioTimeInTicksFromMs(aDuration/1000); - - iTotalAudioTimeWrittenMs += (aDuration/1000); - - VPASSERT(iAudioFramesInSample == 1); - error = iComposer->WriteFrames(aBuf, sampleSize, audioSampleDurationInTicks, 0 /*iAudioKeyFrame*/, - iAudioFramesInSample, CMP4Composer::EFrameTypeAudio); - } - - if ( GetOutputAudioType() == EVedAudioTypeAMR ) - { - error = WriteAMRSamplesToFile(); - if ( error != KErrNone ) - return error; - } - - if ( (iTotalAudioTimeWrittenMs % 200) == 0 ) - IncProgressBar(); - - return KErrNone; - -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::FinalizeAudioWrite -// Write the remaining audio frames at the end of processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::FinalizeAudioWrite() -{ - - VPASSERT(iAudioFramesInBuffer < iAudioFramesInSample); - - if (iAudioFramesInBuffer == 0) - return KErrNone; - - if(iOutputAudioType == EAudioAAC) - { - // There should not be any frames in buffer !! - VPASSERT(0); - } - - TInt error = KErrNone; - TInt sampleSize = 0; -// TInt frameNum = 0; -// TInt frameSize = 0; - - TPtr8 outAudioPtr(iOutAudioBuffer->Des()); -// const TInt frameSamples = 160; -// const TInt samplingRate = KVedAudioSamplingRate8k; - - TInt audioSampleDurationInTicks = 0; - TPtrC8 writeDes; - TUint8* frameBuffer = (TUint8*)outAudioPtr.Ptr(); - - // Gets Size of buffer of current frames - sampleSize = outAudioPtr.Length(); - - // if frame is sampled at a different rate - audioSampleDurationInTicks = GetAudioTimeInTicksFromMs(iTotalDurationInSample/1000); - - // set descriptor to sample - writeDes.Set( outAudioPtr.Left(sampleSize) ); - - // compose audio to output 3gp file - error = iComposer->WriteFrames((TDesC8&)writeDes, sampleSize, audioSampleDurationInTicks, 0 /*iAudioKeyFrame*/, - iAudioFramesInBuffer, CMP4Composer::EFrameTypeAudio); - - iTotalDurationInSample = 0; // resetting the value in sample - - if (error != KErrNone) - return error; - - outAudioPtr.SetLength(0); - iAudioFrameNumber += iAudioFramesInBuffer; - iAudioFramesInBuffer = 0; - - - return KErrNone; - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::SetFrameType -// Sets the frame type (inter/intra) for a frame -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::SetFrameType(TInt aFrameIndex, TUint8 aType) -{ - VPASSERT(iFrameParameters); - iFrameParameters[aFrameIndex].iType = aType; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetVideoTimeInMsFromTicks -// Converts a video timestamp from ticks to milliseconds -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt64 CMovieProcessorImpl::GetVideoTimeInMsFromTicks(TInt64 aTimeStampInTicks, TBool aCommonTimeScale) const -{ - TUint timeScale = aCommonTimeScale ? iOutputVideoTimeScale : iParser->iStreamParameters.iVideoTimeScale; - VPASSERT(timeScale > 0); - return TInt64( I64REAL(aTimeStampInTicks) / (TReal)timeScale * 1000 + 0.5 ); -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetVideoTimeInTicksFromMs -// Converts a video timestamp from ms to ticks -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt64 CMovieProcessorImpl::GetVideoTimeInTicksFromMs(TInt64 aTimeStampInMs, TBool aCommonTimeScale) const -{ - TUint timeScale = aCommonTimeScale ? iOutputVideoTimeScale : iParser->iStreamParameters.iVideoTimeScale; - - VPASSERT(timeScale > 0); - - return TInt64( I64REAL(aTimeStampInMs) * (TReal)timeScale / 1000 + 0.5 ); -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetAudioTimeInMsFromTicks -// Converts an audio timestamp from ticks to milliseconds -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TUint CMovieProcessorImpl::GetAudioTimeInMsFromTicks(TUint aTimeStampInTicks) const -{ - - TUint timeScale = 0; - if(iParser) - { - timeScale = iParser->iStreamParameters.iAudioTimeScale; - } - if(timeScale == 0) - { - //means no audio in clip use output audio timescale itself - timeScale = iOutputAudioTimeScale; - } - VPASSERT(timeScale > 0); - return TUint( (TReal)aTimeStampInTicks / (TReal)timeScale * 1000 + 0.5 ); -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetAudioTimeInTicksFromMs -// Converts an audio timestamp from milliseconds to ticks -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TUint CMovieProcessorImpl::GetAudioTimeInTicksFromMs(TUint aTimeStampInMs) const - -{ - return TUint( (TReal)aTimeStampInMs * (TReal)iOutputAudioTimeScale / 1000.0 + 0.5 ); -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::WriteVideoFrameToFile -// Writes a video frame to output 3gp file -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::WriteVideoFrameToFile(TDesC8& aBuf, TInt64 aTimeStampInTicks, - TInt /*aDurationInTicks*/, TBool aKeyFrame, - TBool aCommonTimeScale, TBool aColorTransitionFlag, - TBool aFromEncoder) -{ - - //TReal duration = TReal(aDurationInTicks); - TBool lessThenZero = false; - - if (iDiskFull) - return KErrDiskFull; - - // check available disk space - - TInt64 freeSpace = 0; - TInt error; - // get free space on disk - TRAP(error, freeSpace = iComposer->DriveFreeSpaceL()); - if (error != KErrNone) - return error; - - // subtract metadata length from free space - freeSpace -= TInt64(CurrentMetadataSize()); - - if (freeSpace < TInt64(KDiskSafetyLimit)) - { - PRINT((_L("CMovieProcessorImpl::WriteVideoFrameToFile() freeSpace below limit"))) - iDiskFull = ETrue; - return KErrDiskFull; - } - - // check if we are writing the last frames of the previous - // clip while doing crossfade / wipe, iFirstFrameOfClip should - // be true when writing the first frame of current clip - if ( iCurClipTimeStampList.Count() ) - { - iFirstFrameOfClip = EFalse; - if ( aColorTransitionFlag && !iFirstFrameFlagSet ) - { - // this frame is the first one of the second clip - iFirstFrameOfClip = ETrue; - iFirstFrameFlagSet = ETrue; - } - } - - TVideoType vt = (TVideoType)iOutputVideoType; - // This may be wrong as the files may be of different types so Mp4Specific size may be required to obtained for every file - // or every clip but only if it is the first frame - if (iVideoFrameNumber == 0 || iFirstFrameOfClip) - { - if (!iNumberOfVideoClips) - { - // all clips were either from generator or were black frames - if ( iAllGeneratedClips ) - { - iMP4SpecificSize = 0; - if (vt == EVideoMPEG4) - { - iModeChanged = ETrue; - iFirstClipUsesEncoder = ETrue; - } - } - else - { - // black frames; no parser or decoder exists; - // no need to modify the vos header by the decoder, - // but this forces the composer to search for the VOS header in the 1st frame data - iModeChanged = ETrue; - } - } - - else - { - // VOS header size is parsed in composer for MPEG-4, in H.263 it is ignored - iMP4SpecificSize = 0; - } - } - - // IMPORTANT: need to make decision here whether to change VosBit - // before writing to file, if first frame was encoded - - if (vt == EVideoMPEG4) - { - if(iVideoFrameNumber == 0) - { - if(iMpeg4ModeTranscoded) - { - TBool sBitChanged = EFalse; - TRAP(error, sBitChanged = iVideoProcessor->CheckVosHeaderL((TPtrC8&)aBuf)); - if(sBitChanged) { } - PRINT((_L("CMovieProcessorImpl::WritVideoFrameToFile() bit changed: %d"), sBitChanged)) - if (error != KErrNone) - return error; - } - } - } - - TInt currentMetaDataSize = CurrentMetadataSize(); - TInt64 oldVideoTime = GetVideoTimeInMsFromTicks((TInt64) iCurrentVideoTimeInTicks, ETrue); - - if (iFrameBuffered) - { - // write buffered frame to file - - TInt64 durationMs = GetVideoTimeInMsFromTicks(aTimeStampInTicks, aCommonTimeScale) - iBufferedTimeStamp; - - if (iWriting1stColorTransitionFrame) - { - durationMs = i1stColorTransitionFrameTS - iBufferedTimeStamp; - iWriting1stColorTransitionFrame = EFalse; - } - - else if (iFirstFrameOfClip) - { - if ( iCurClipTimeStampList.Count() == 0 ) - { - VPASSERT(iVideoClipNumber > 0); - CVedMovieImp* movie = reinterpret_cast(iMovie); - // first frame of new clip - durationMs = movie->VideoClip(iVideoClipNumber-1)->CutOutTime().Int64()/1000 - iBufferedTimeStamp; - } - } - - if (durationMs < 0) - { - lessThenZero = true; - CVedMovieImp* movie = reinterpret_cast(iMovie); - TReal frameRate = (movie->VideoFrameRate() > 0.0) ? movie->VideoFrameRate() : 15.0; - durationMs = TInt64( ( 1000.0 / frameRate ) + 0.5 ); - } - - if ( iNumberOfVideoClips ) - { - TInt64 clipDuration = iVideoClip->CutOutTime().Int64()/1000 - - iVideoClip->CutInTime().Int64()/1000; - - if ( iVideoClipNumber == iNumberOfVideoClips - 1 ) - { - // Add duration of possible black ending frames - CVedMovieImp* movie = reinterpret_cast(iMovie); - clipDuration += ( movie->Duration().Int64()/1000 - - movie->VideoClip(iNumberOfVideoClips-1)->EndTime().Int64()/1000 ); - } - - if ( iVideoClipWritten + durationMs > clipDuration ) - { - durationMs = clipDuration - iVideoClipWritten; - - if ( durationMs <= 0 ) - { - TPtr8 outVideoPtr(iOutVideoBuffer->Des()); - outVideoPtr.SetLength(0); - iFrameBuffered = EFalse; - return KErrCompletion; - } - } - } - - TReal duration = I64REAL(durationMs) * TReal(iOutputVideoTimeScale) / 1000.0; - - error = WriteVideoFrameFromBuffer(duration, aColorTransitionFlag); - - if (error != KErrNone) - return error; - } - - TInt64 currentVideoTime = GetVideoTimeInMsFromTicks((TInt64) iCurrentVideoTimeInTicks, ETrue); - - iCurrentVideoSize += aBuf.Length(); - - TInt addAudio = 0; - TRAP( error, addAudio = (iMovie->Song())->GetFrameSizeEstimateL(oldVideoTime * 1000, currentVideoTime * 1000) ); - - if (error != KErrNone) - return error; - - iCurrentAudioSize += addAudio; - - PRINT((_L("CMovieProcessorImpl::WriteVideoFrameToFile() video size: %d, audio size %d, meta data %d"), iCurrentVideoSize, iCurrentAudioSize, currentMetaDataSize)) - - if (iMovieSizeLimit > 0 && iCurrentVideoSize + iCurrentAudioSize + currentMetaDataSize > iMovieSizeLimit) - { - // Cut video here - iEndCutTime = TTimeIntervalMicroSeconds(currentVideoTime); - - iMovieSizeLimitExceeded = ETrue; - - // To notify that movie has reached maximum size - return KErrCompletion; - } - - // Buffer frame - - VPASSERT(iOutVideoBuffer); - TPtr8 outVideoPtr(iOutVideoBuffer->Des()); - - if((outVideoPtr.Length() + aBuf.Length()) > outVideoPtr.MaxLength()) - { - // extend buffer size - - TUint newSize = outVideoPtr.Length() + aBuf.Length(); - // round up to the next full kilobyte - newSize = (newSize + 1023) & (~1023); - TRAP(error, (iOutVideoBuffer = iOutVideoBuffer->ReAllocL(newSize)) ); - - if (error != KErrNone) - return error; - - PRINT((_L("CMovieProcessorImpl::WriteVideoFrameToFile() - extended buffer to %d bytes"), newSize)); - - outVideoPtr.Set(iOutVideoBuffer->Des()); - } - outVideoPtr.Append(aBuf); - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if (vt == EVideoAVCProfileBaseline) - { -// TBool containsDCR = EFalse; -// if (!aFromEncoder && iFirstFrameOfClip) -// containsDCR = ETrue; - - error = iAvcEdit->ParseFrame(iOutVideoBuffer, EFalse, aFromEncoder); - if (error != KErrNone) - return error; - } -#endif - - if(!lessThenZero) - { - iBufferedTimeStamp = GetVideoTimeInMsFromTicks(aTimeStampInTicks, aCommonTimeScale); - } - iBufferedKeyFrame = aKeyFrame; - iBufferedFromEncoder = aFromEncoder; - iFrameBuffered = ETrue; - if ( iFirstFrameOfClip ) - iFirstFrameBuffered = ETrue; - - iFirstFrameOfClip = EFalse; - - iVideoFrameNumber++; - - if (aKeyFrame) - iVideoIntraFrameNumber++; - - return KErrNone; - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::FinalizeVideoWrite -// Writes the last video frame from buffer to file -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::FinalizeVideoWrite() -{ - - if ( !iFrameBuffered ) - return KErrNone; - - CVedMovieImp* movie = reinterpret_cast(iMovie); - - iApplySlowMotion = EFalse; // this duration must not be scaled - TInt64 durationMs = movie->Duration().Int64()/1000 - GetVideoTimeInMsFromTicks(iCurrentVideoTimeInTicks, ETrue); - TReal duration = I64REAL(durationMs) * TReal(iOutputVideoTimeScale) / 1000.0; - - TInt error = WriteVideoFrameFromBuffer(duration, EFalse); - - return error; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::FinalizeVideoWrite -// Writes a frame from buffer to file -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::WriteVideoFrameFromBuffer(TReal aDuration, TBool aColorTransitionFlag) -{ - - VPASSERT(iFrameBuffered); - - TReal duration = aDuration; - - // slow motion - VPASSERT(iSpeed > 0); - const TInt maxSpeed = KMaxVideoSpeed; - TReal iScaleFactor = (TReal)maxSpeed/(TReal)iSpeed; - - if( iScaleFactor != 1.0 && iApplySlowMotion ) - { - duration = duration * iScaleFactor; - } - - iCurrentVideoTimeInTicks += duration; - - // if the first frame of a clip is being buffered, - // we are now writing the last frame of previous clip - // so don't increment iVideoClipWritten yet - - // Also take into account crossfade / wipe transition - // so that iVideoClipWritten is not incremented - // for transition frames of the previous clip - if ( !iFirstFrameOfClip && ( (iCurClipTimeStampList.Count() == 0) || - aColorTransitionFlag ) ) - { - iVideoClipWritten += GetVideoTimeInMsFromTicks(aDuration, ETrue); - } - - IncProgressBar(); - - TVedVideoBitstreamMode currClipMode; - TVideoType vt = (TVideoType)iOutputVideoType; - - if (iNumberOfVideoClips > 0) - currClipMode = iVideoClip->Info()->TranscodeFactor().iStreamType; - else - { - if ( (vt == EVideoH263Profile0Level10) || (vt == EVideoH263Profile0Level45) ) - currClipMode = EVedVideoBitstreamModeH263; - else - currClipMode = EVedVideoBitstreamModeMPEG4Regular; - } - TPtr8 outVideoPtr(iOutVideoBuffer->Des()); - - TInt returnedVal = 0; - returnedVal = iComposer->WriteFrames(outVideoPtr, outVideoPtr.Size(), TInt(duration + 0.5), - iBufferedKeyFrame, 1 /*numberOfFrames*/, - CMP4Composer::EFrameTypeVideo, iMP4SpecificSize, - iModeChanged, iFirstFrameBuffered, currClipMode, iBufferedFromEncoder); - - iFirstFrameBuffered = EFalse; - - if (returnedVal == KErrWrite) - { - // frame was not written - iVideoClipWritten -= GetVideoTimeInMsFromTicks(aDuration, ETrue); - iCurrentVideoTimeInTicks -= duration; - returnedVal = KErrNone; - } - - iFrameBuffered = EFalse; - outVideoPtr.SetLength(0); - - return returnedVal; - -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::SaveVideoFrameToFile -// Save a video YUV frame to the tmp file -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::SaveVideoFrameToFile(TDesC8& aBuf, TInt aDuration, TInt64 aTimeStamp ) -{ - TBool isOpen = EFalse; - TInt errCode = KErrNone; - if ( ( errCode = iFs.IsFileOpen( iNextClipFileName, isOpen ) ) == KErrNone ) - { - if ( isOpen ) - { - if ( ( errCode = iNextClipDurationList.Append( aDuration ) ) == KErrNone ) - { - if ( ( errCode = iNextClipTimeStampList.Append( aTimeStamp ) ) == KErrNone ) - { - if ( iDiskFull ) - { - errCode = KErrDiskFull; - } - else - { - TInt64 freeSpace = 0; - // get free space on disk - TRAP( errCode, freeSpace = iComposer->DriveFreeSpaceL() ); - if ( errCode == KErrNone ) - { - // subtract yuv length from free space - freeSpace -= TInt64( aBuf.Length() ); - - if ( freeSpace < TInt64( KDiskSafetyLimit ) ) - { - iDiskFull = ETrue; - errCode = KErrDiskFull; - } - else - { - errCode = iNextClip.Write( aBuf ); - iPreviousTimeScale = iParser->iStreamParameters.iVideoTimeScale; - } - } - } - if ( errCode != KErrNone ) - { - // rollback the insertion - iNextClipDurationList.Remove( iNextClipDurationList.Count() - 1 ); - iNextClipTimeStampList.Remove( iNextClipTimeStampList.Count() - 1 ); - } - } - else - { - // rollback the insertion - iNextClipDurationList.Remove( iNextClipDurationList.Count() - 1 ); - } - } - } - else - { - errCode = KErrNotFound; - } - } - return errCode; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetVideoFrameFromFile -// Retrieve a video YUV frame from the tmp file -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::GetVideoFrameFromFile(TDes8& aBuf, TInt aLength, TInt& aDuration, TInt64& aTimeStamp) -{ - - TBool isOpen = EFalse; - TInt errCode = KErrNone; - if ( ( errCode = iFs.IsFileOpen( iCurClipFileName, isOpen ) ) == KErrNone ) - { - if ( isOpen ) - { - if ( ( errCode = iCurClip.Read( aBuf, aLength ) ) == KErrNone ) - { - if ( !iTimeStampListScaled ) - { - // change timestamps to start from zero - TInt firstTs = iCurClipTimeStampList[0]; - for ( TInt index = 0; index < iCurClipTimeStampList.Count(); ++index ) - { - iCurClipTimeStampList[index] = iCurClipTimeStampList[index] - firstTs; - } - - iOffsetTimeStamp = iCurClipTimeStampList[iCurClipTimeStampList.Count() - 1] + - iCurClipDurationList[iCurClipDurationList.Count() - 1]; - TReal scaleFactor = (TReal)iParser->iStreamParameters.iVideoTimeScale/(TReal)iPreviousTimeScale; - iOffsetTimeStamp = TInt( I64REAL(iOffsetTimeStamp) * scaleFactor + 0.5 ); - - for ( TInt index = 0; index < iCurClipDurationList.Count(); ++index ) - { - // scale up or scale down - iCurClipDurationList[index] = TInt( TReal(iCurClipDurationList[index]) * scaleFactor + 0.5 ); - iCurClipTimeStampList[index] = TInt64( I64REAL(iCurClipTimeStampList[index]) * scaleFactor + 0.5 ); - } - iTimeStampListScaled = ETrue; - } - - if ( iCurClipIndex < iCurClipDurationList.Count() ) - { - aDuration = iCurClipDurationList[iCurClipIndex]; - aTimeStamp = iCurClipTimeStampList[iCurClipIndex++]; - } - else - { - aDuration = -1; - aTimeStamp = -1; - } - - } - } - else - { - errCode = KErrNotFound; - } - } - return errCode; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetNextFrameDuration -// Get the next frame duration and timestamp -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::GetNextFrameDuration(TInt& aDuration, TInt64& aTimeStamp, - TInt aIndex, TInt& aTimeStampOffset) -{ - - TInt count = iCurClipTimeStampList.Count(); - - if (!iTimeStampListScaled) - { - // save the timestamp of first color transition frame, so that the duration of - // last frame from first clip is calculated correctly in WriteVideoFrameToFile() - i1stColorTransitionFrameTS = TInt64( I64REAL(iCurClipTimeStampList[0]) / (TReal)iPreviousTimeScale * 1000 + 0.5 ); - iWriting1stColorTransitionFrame = ETrue; - - // change timestamps to start from zero - TInt firstTs = iCurClipTimeStampList[0]; - for ( TInt index = 0; index < iCurClipTimeStampList.Count(); ++index ) - { - iCurClipTimeStampList[index] = iCurClipTimeStampList[index] - firstTs; - } - - iOffsetTimeStamp = iCurClipTimeStampList[iCurClipTimeStampList.Count() - 1] + - iCurClipDurationList[iCurClipDurationList.Count() - 1]; - TReal scaleFactor = (TReal)iParser->iStreamParameters.iVideoTimeScale/(TReal)iPreviousTimeScale; - iOffsetTimeStamp = TInt( I64REAL(iOffsetTimeStamp) * scaleFactor + 0.5 ); - - for ( TInt index = 0; index < iCurClipDurationList.Count(); ++index ) - { - // scale up or scale down - iCurClipDurationList[index] = TInt( TReal(iCurClipDurationList[index]) * scaleFactor + 0.5 ); - iCurClipTimeStampList[index] = TInt64( I64REAL(iCurClipTimeStampList[index]) * scaleFactor + 0.5 ); - } - iTimeStampListScaled = ETrue; - } - - aTimeStampOffset = iOffsetTimeStamp; - - if (aIndex >= 0) - { - // just get the values for given index, do not change iCurClipIndex - VPASSERT(aIndex < iCurClipDurationList.Count()); - aDuration = iCurClipDurationList[aIndex]; - aTimeStamp = iCurClipTimeStampList[aIndex]; - return; - } - - if ( iCurClipIndex < iCurClipDurationList.Count() ) - { - aDuration = iCurClipDurationList[iCurClipIndex]; - aTimeStamp = iCurClipTimeStampList[iCurClipIndex++]; - } - else - { - aDuration = 0; - aTimeStamp = 0; - } -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::AppendNextFrameDuration -// Append the next frame duration and timestamp -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::AppendNextFrameDuration(TInt aDuration, TInt64 aTimeStamp) -{ - if ( iCurClipDurationList.Append( aDuration ) == KErrNone ) - { - if ( iCurClipTimeStampList.Append( aTimeStamp + iOffsetTimeStamp ) != KErrNone ) - { - // rollback the insertion - iCurClipDurationList.Remove( iCurClipDurationList.Count() - 1 ); - } - } -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetNextClipStartTransitionNumber -// Get the number of transition at the start of next clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::NextClipStartTransitionNumber() -{ - TInt transitionNumber = 5; - if ( iMiddleTransitionEffect == EVedMiddleTransitionEffectCrossfade || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeLeftToRight || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeRightToLeft || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeTopToBottom || - iMiddleTransitionEffect == EVedMiddleTransitionEffectWipeBottomToTop ) - { - TInt nextClipNumber = iVideoClipNumber + 1; - CVedMovieImp* movie = (iMovie); - CVedVideoClip* videoClip = movie->VideoClip(nextClipNumber); - CVedVideoClip* origVideoClip = iVideoClip; - - TVedMiddleTransitionEffect middleTransitionEffect = EVedMiddleTransitionEffectNone; - if ( iMovie->MiddleTransitionEffectCount() > nextClipNumber ) - { - middleTransitionEffect = iMovie->MiddleTransitionEffect( nextClipNumber ); - } - - TTimeIntervalMicroSeconds startCutTime = videoClip->CutInTime(); - TTimeIntervalMicroSeconds endCutTime = videoClip->CutOutTime(); - - TInt numberOfFrame = videoClip->Info()->VideoFrameCount(); - - // temporary set iVideoClip to next video clip - iVideoClip = videoClip; - - TInt startFrameIndex = GetVideoFrameIndex( startCutTime ); - // the following is because binary search gives us frame with timestamp < startCutTime - // this frame would be out of range for movie - if ( startFrameIndex > 0 && startFrameIndex < ( numberOfFrame - 1 ) ) - startFrameIndex++; - - TInt endFrameIndex = GetVideoFrameIndex( endCutTime ); - - // determine the total number of included frames in the clip - TInt numberOfIncludedFrames = endFrameIndex - startFrameIndex + 1; - - // make sure there are enough frames to apply transition - // for transition at both ends - if ( middleTransitionEffect != EVedMiddleTransitionEffectNone ) - { - if ( middleTransitionEffect == EVedMiddleTransitionEffectCrossfade || - middleTransitionEffect == EVedMiddleTransitionEffectWipeLeftToRight || - middleTransitionEffect == EVedMiddleTransitionEffectWipeRightToLeft || - middleTransitionEffect == EVedMiddleTransitionEffectWipeTopToBottom || - middleTransitionEffect == EVedMiddleTransitionEffectWipeBottomToTop ) - { - if ( numberOfIncludedFrames < ( transitionNumber << 1 ) ) - { - transitionNumber = numberOfIncludedFrames >> 1; - } - } - else - { - if ( numberOfIncludedFrames < ( transitionNumber + 10 ) ) - { - if ( ( numberOfIncludedFrames >> 1 ) < transitionNumber ) - { - transitionNumber = numberOfIncludedFrames >> 1; - } - } - } - } - else - { - if ( numberOfIncludedFrames < transitionNumber ) - { - transitionNumber = numberOfIncludedFrames; - } - } - // reset iVideoClip back to the original video clip - iVideoClip = origVideoClip; - } - return transitionNumber; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::TransitionDuration -// Get the transition duration of current clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::TransitionDuration() -{ - TInt duration = 0; - if ( iNextClipDurationList.Count() ) - { - for ( TInt index = 0; index < iNextClipDurationList.Count() /*- 1*/; index++ ) - { - duration += iNextClipDurationList[index]; - } - } - return duration; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::CloseTransitionInfoL -// Release all internal data hold for transition effect -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::CloseTransitionInfoL() -{ - // remove old tmp files - if ( iCurClipFileName.Length() ) - { - iCurClip.Close(); - // it is ok if the tmp file does not exist - iFs.Delete( iCurClipFileName ); - iCurClipFileName.Zero(); - } - - if ( iNextClipFileName.Length() ) - { - iNextClip.Close(); - // it is ok if the tmp file does not exist - iFs.Delete( iNextClipFileName ); - iNextClipFileName.Zero(); - } - - // use file manager to delete all previously - // *_nokia_vpi.tmp files - CFileMan *fileMan = CFileMan::NewL( iFs ); - CleanupStack::PushL( fileMan ); - TParse filepath; - filepath.Set( iOutputMovieFileName, NULL, NULL ); - TFileName filesToDelete = filepath.DriveAndPath(); - filesToDelete.Append( _L( "*_nokia_vpi.tmp" ) ); - fileMan->Delete( filesToDelete ); - CleanupStack::PopAndDestroy( fileMan ); - - iCurClipDurationList.Reset(); - iNextClipDurationList.Reset(); - iCurClipTimeStampList.Reset(); - iNextClipTimeStampList.Reset(); - iCurClipIndex = 0; - iPreviousTimeScale = 0; - iOffsetTimeStamp = 0; - - // Delete Im_nokia_vpi.tmp - TFileName tmpath = TPtrC(KTempFilePath); - tmpath.Append( _L("x.3gp") ); - - // use file manager to delete all previously - CFileMan *tempfileMan = CFileMan::NewL( iFs ); - CleanupStack::PushL( tempfileMan ); - TParse tempfilepath; - tempfilepath.Set(tmpath, NULL, NULL ); - TFileName tempfilesToDelete = tempfilepath.DriveAndPath(); - tempfilesToDelete.Append( _L( "Im_nokia_vpi.tmp" ) ); - tempfileMan->Delete( tempfilesToDelete,0); - CleanupStack::PopAndDestroy( tempfileMan ); -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetVideoFrameIndex -// Gets frame index based on its timestamp -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::GetVideoFrameIndex(TTimeIntervalMicroSeconds aTime) const -{ - __ASSERT_ALWAYS((aTime >= TTimeIntervalMicroSeconds(0)) /*&& (aTime <= iMovie->Duration())*/, - TVedPanic::Panic(TVedPanic::EVideoClipInfoIllegalVideoFrameTime)); - - /* Use binary search to find the right frame. */ - - TInt videoFrameCount; - if (!iThumbnailInProgress) - videoFrameCount = iVideoClip->Info()->VideoFrameCount(); - else - videoFrameCount = iParser->GetNumberOfVideoFrames(); - - TInt start = 0; - TInt end = videoFrameCount - 1; - TInt index = -1; - while ( start <= end ) - { - index = start + ((end - start) / 2); - - TTimeIntervalMicroSeconds startTime(0); - TTimeIntervalMicroSeconds endTime(0); - - TInt tsInTicks; - startTime = TTimeIntervalMicroSeconds( TInt64(iParser->GetVideoFrameStartTime(index, &tsInTicks)) * TInt64(1000) ); - - if (index < (videoFrameCount - 1)) - endTime = TTimeIntervalMicroSeconds( TInt64(iParser->GetVideoFrameStartTime(index + 1, &tsInTicks)) * TInt64(1000) ); - else - { - TInt durationMs; - iParser->GetVideoDuration(durationMs); - endTime = TTimeIntervalMicroSeconds( TInt64(durationMs) * TInt64(1000) ); - } - - if (index < (videoFrameCount - 1)) - { - endTime = TTimeIntervalMicroSeconds(endTime.Int64() - 1); - } - - if (aTime < startTime) - { - end = index - 1; - } - else if (aTime > endTime) - { - start = index + 1; - } - else - { - break; - } - } - - return index; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::EnhanceThumbnailL -// Enhances the visual quality of the frame -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::EnhanceThumbnailL(const CFbsBitmap* aInBitmap, - CFbsBitmap* aTargetBitmap) -{ - - // create enhancement object - if(!iEnhancer) - iEnhancer = (CDisplayChain*) CDisplayChain::NewL(); - - // enhance image - iEnhancer->ProcessL(aInBitmap, aTargetBitmap); - - // clear enhancement object - delete iEnhancer; - iEnhancer=0; - -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::NotifyVideoClipGeneratorFrameCompleted -// The cal back functin called when a frame is to be obtained from the frame generator -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::NotifyVideoClipGeneratorFrameCompleted(CVedVideoClipGenerator& /*aGenerator*/, - TInt aError, - CFbsBitmap* aFrame) -{ - - if (iProcessingCancelled) - { - if (aFrame) - { - delete aFrame; aFrame = 0; - } - return; - } - - if(aError == KErrNone) - { - CFbsBitmap* aBitmapLocal = aFrame; - - if (aFrame == 0) - { - iMonitor->Error(KErrArgument); - return; - } - - VPASSERT(aFrame); - TInt error; - - // Convert the frame obtained from bitmap to YUV before giving it to encoder only if error is not there - TRAP(error, iImageYuvConverter = CVSFbsBitmapYUV420Converter::NewL(*aBitmapLocal)); - if (error != KErrNone) - { - delete aFrame; aFrame = 0; // removed the frame obtained from engine - iMonitor->Error(error); - return; - } - - VPASSERT(iImageYuvConverter); - - TRAP(error, iImageYuvConverter->ProcessL()); - if (error != KErrNone) - { - delete aFrame; aFrame = 0; // removed the frame obtained from engine - iMonitor->Error(error); - return; - } - - TRAP(error, iYuvImageBuf = (TUint8*) (TUint8*) HBufC::NewL((iImageYuvConverter->YUVData()).Length())); - if(error != KErrNone) - { - delete aFrame; aFrame = 0; // removed the frame obtained from engine - iMonitor->Error(error); - return; - } - iImageSize = (iImageYuvConverter->YUVData()).Length(); - Mem::Copy(iYuvImageBuf,(iImageYuvConverter->YUVData()).Ptr(),(iImageYuvConverter->YUVData()).Length()); // may be iYUVBuf only - iReadImageDes.Set(iYuvImageBuf,iImageSize, iImageSize); - - delete iImageYuvConverter; - iImageYuvConverter = 0; - - aBitmapLocal = 0; - if(aFrame) - { - delete aFrame; // removed the frame obtained from engine - aFrame = 0; - } - aBitmapLocal = 0; - - // finished converting to YUV - TRAP(error, ProcessImageSetsL(EVideoEncodeFrame)); // EVideoEncodeFrame indicates to encoder to encode and return later - if(error != KErrNone) - { - iMonitor->Error(error); - return; - } - } - else - { - if(aError == KErrCancel) - { - if(aFrame) - { - delete aFrame; - aFrame =0; - } - - if(iImageComposer) - { - iImageComposer->Close(); - delete iImageComposer; - iImageComposer=0; - } - - if (iImageAvcEdit) - { - delete iImageAvcEdit; - iImageAvcEdit = 0; - } - } - else - { - iMonitor->Error(aError); - } - } -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetOutputVideoType -// This function returns the video type of output movie -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TVedVideoType CMovieProcessorImpl::GetOutputVideoType() -{ - - if (iOutputVideoType == EVideoH263Profile0Level10) - return EVedVideoTypeH263Profile0Level10; - - if (iOutputVideoType == EVideoH263Profile0Level45) - return EVedVideoTypeH263Profile0Level45; - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if (iOutputVideoType == EVideoAVCProfileBaseline) - return EVedVideoTypeAVCBaselineProfile; -#endif - - if (iOutputVideoType == EVideoMPEG4) - return EVedVideoTypeMPEG4SimpleProfile; - - return EVedVideoTypeNoVideo; - -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetCurrentClipVideoType -// This function returns the video type of the current video clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TVedVideoType CMovieProcessorImpl::GetCurrentClipVideoType() -{ - - if (!iThumbnailInProgress) - { - - CVedMovieImp* movie = reinterpret_cast(iMovie); - - CVedVideoClip* currentClip = movie->VideoClip(iVideoClipNumber); - CVedVideoClipInfo* currentInfo = currentClip->Info(); - - if (currentInfo->Class() == EVedVideoClipClassGenerated) - { - switch (iOutputVideoType) - { - case EVideoH263Profile0Level10: - return EVedVideoTypeH263Profile0Level10; -// break; - - case EVideoH263Profile0Level45: - return EVedVideoTypeH263Profile0Level45; -// break; - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - case EVideoAVCProfileBaseline: - return EVedVideoTypeAVCBaselineProfile; -// break; -#endif - - case EVideoMPEG4: - return EVedVideoTypeMPEG4SimpleProfile; -// break; - - default: - return EVedVideoTypeUnrecognized; - } - } - return currentInfo->VideoType(); - } - - switch (iParser->iStreamParameters.iVideoFormat) - { - - case CParser::EVideoFormatH263Profile0Level10: - return EVedVideoTypeH263Profile0Level10; -// break; - - case CParser::EVideoFormatH263Profile0Level45: - return EVedVideoTypeH263Profile0Level45; -// break; - - case CParser::EVideoFormatMPEG4: - return EVedVideoTypeMPEG4SimpleProfile; -// break; - - case CParser::EVideoFormatAVCProfileBaseline: - return EVedVideoTypeAVCBaselineProfile; -// break; - - default: - return EVedVideoTypeUnrecognized; - } -} - - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetVideoClipTranscodeFactor Added for transcoding reqs -// This function returns the mode of the clip indicated by the location aNum -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TVedTranscodeFactor CMovieProcessorImpl::GetVideoClipTranscodeFactor(TInt aNum) -{ - CVedVideoClipInfo* curInfo = NULL; - - if(iMovie) - { - CVedMovieImp* tmovie = (iMovie); - CVedVideoClip* currentClip = tmovie->VideoClip(aNum); - CVedVideoClipInfo* currentInfo = currentClip->Info(); - curInfo = currentInfo; - } - else - { - // this means there is no movie, which can happen in case of thumb generation as processor does not have it - User::Panic(_L("CMovieProcessorImpl MoviePtr is Missing in VideoProcessor"), -1); - } - - return curInfo->TranscodeFactor(); -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetVideoClipResolution -// Panics the program on error -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TSize CMovieProcessorImpl::GetVideoClipResolution() -{ - return iVideoClip->Info()->Resolution(); -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetMovieResolution -// Gets target movie resolution -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TSize CMovieProcessorImpl::GetMovieResolution() -{ - if(iMovie) - { - return iMovie->Resolution(); - } - else - { - TSize stdres(KVedMaxVideoWidth, KVedMaxVideoHeight); - return stdres; - } -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetVideoClipFrameRate -// Gets video frame rate of current clip -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TReal CMovieProcessorImpl::GetVideoClipFrameRate() - { - - TReal rate; - iParser->GetVideoFrameRate(rate); - - return rate; - - } - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetMovieFrameRate -// Gets target movie frame rate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TReal CMovieProcessorImpl::GetMovieFrameRate() - { - return iMovie->VideoFrameRate(); - } - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetMovieVideoBitrate -// Gets target movie video bit rate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::GetMovieVideoBitrate() - { - return iMovie->VideoBitrate(); - } - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetMovieVideoBitrate -// Gets standard movie video bit rate (mandated by standard for used video codec) -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::GetMovieStandardVideoBitrate() - { - return iMovie->VideoStandardBitrate(); - } - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetMovieAudioBitrate -// Gets target movie audio bit rate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::GetMovieAudioBitrate() - { - return iMovie->AudioBitrate(); - } - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetSyncIntervalInPicture -// Gets sync interval in picture -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::GetSyncIntervalInPicture() - { - if ( iMovie ) - { - return iMovie->SyncIntervalInPicture(); - } - else - { - return 0; - } - } - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetRandomAccessRate -// Get random access rate setting -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TReal CMovieProcessorImpl::GetRandomAccessRate() - { - if ( iMovie ) - { - return iMovie->RandomAccessRate(); - } - else - { - return 0.2; - } - } - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetOutputAudioType() Added for AAC support -// This function returns the audio type of the final movie which will be created -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TVedAudioType CMovieProcessorImpl::GetOutputAudioType() //added for AAC support -{ - return DecideAudioType(iOutputAudioType); -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::DecideAudioType(TAudioType aAudioType) added for AAC support -// This function returns the audio type depending on the parameter sent -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TVedAudioType CMovieProcessorImpl::DecideAudioType(TAudioType aAudioType) //added for AAC support -{ - if( aAudioType == (TAudioType)EAudioAMR) - { - return EVedAudioTypeAMR; - } - else if(aAudioType == (TAudioType)EAudioAAC) - { - // changed EVedAudioTypeAAC_LC --> EVedAudioTypeAAC_LC --Sami - return EVedAudioTypeAAC_LC; - } - else if(aAudioType == (TAudioType)EAudioNone) - { - return EVedAudioTypeNoAudio; - } - else - { - return EVedAudioTypeUnrecognized; - } -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::SetMovieSizeLimit -// Sets the maximum size for the movie -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CMovieProcessorImpl::SetMovieSizeLimit(TInt aLimit) -{ - // reserve 2000 bytes for safety margin, since size is checked after a video frame is written to file. - iMovieSizeLimit = (aLimit - 2000 > 0) ? aLimit - 2000 : 0; -} - - -//================================== -// color tone RGB TO YUV Function -//================================== - -void CMovieProcessorImpl::ConvertColorToneRGBToYUV(TVedColorEffect aColorEffect,TRgb aColorToneRgb) -{ - TInt uVal, vVal; // to get the U,V Values of the ColorTone - - CVedVideoClipInfo* currentInfo = iVideoClip->Info(); - TVedVideoBitstreamMode streamMode = currentInfo->TranscodeFactor().iStreamType; - - // evaluate the u,v values for color toning - if (aColorEffect == EVedColorEffectToning) - { - uVal = TInt(-(0.16875*aColorToneRgb.Red()) - (0.33126*aColorToneRgb.Green()) + (0.5*aColorToneRgb.Blue()) + 0.5); - vVal = TInt((0.5*aColorToneRgb.Red()) - (0.41869*aColorToneRgb.Green()) - (0.08131*aColorToneRgb.Blue()) + 0.5); - } - - // adjust the u,v values for h.263 and mpeg-4 - if(iOutputVideoType == EVideoH263Profile0Level10 || iOutputVideoType == EVideoH263Profile0Level45 || (!(iOutputVideoType == EVideoMPEG4) && streamMode == EVedVideoBitstreamModeMPEG4ShortHeader)) - { - if(aColorEffect == EVedColorEffectBlackAndWhite) - { - uVal = 255; // codeword for value=128 - vVal = 255; // codeword for value=128 - } - else if (aColorEffect == EVedColorEffectToning) - { - uVal += 128; - vVal += 128; - - AdjustH263UV(uVal); - AdjustH263UV(vVal); - } - } - else if (iOutputVideoType == EVideoMPEG4) - { - if(aColorEffect == EVedColorEffectBlackAndWhite) - { - uVal = 0; // codeword for value=128 - vVal = 0; // codeword for value=128 - } - else if (aColorEffect == EVedColorEffectToning) - { - uVal /= 2; // do not use bit shift; may have negative values - vVal /= 2; // do not use bit shift; may have negative values - } - } - - iColorToneU = uVal; - iColorToneV = vVal; -// iMovie->VideoClipSetColorTone(0, iColorToneYUV); - -} - -//======================================= -// CMovieProcessorImpl::AdjustH263UV() -// Adjusts the UV values for Color Toning -//======================================= -void CMovieProcessorImpl::AdjustH263UV(TInt& aValue) -{ - if(aValue == 0) // end points are not used - { - aValue = 1; - } - else if (aValue == 128) // not used - { - aValue = 255; - } - else if (aValue >= 255) // end points are not used - { - aValue = 254; - } -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetOutputVideoMimeType -// Return Mime type for output video codec -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TPtrC8& CMovieProcessorImpl::GetOutputVideoMimeType() -{ - VPASSERT(iMovie); - - return iMovie->VideoCodecMimeType(); -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::GetOutputAVCLevel -// Get output AVC level -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::GetOutputAVCLevel() -{ - - VPASSERT( iOutputVideoType == EVideoAVCProfileBaseline ); - - const TPtrC8& mimeType = iMovie->VideoCodecMimeType(); - - if ( mimeType.MatchF( _L8("*profile-level-id=42800A*") ) != KErrNotFound ) - { - // baseline profile level 1 - return 10; - } - - else if ( mimeType.MatchF( _L8("*profile-level-id=42900B*") ) != KErrNotFound ) - { - // baseline profile level 1b - return 101; // internal constant for level 1b - } - - else if ( mimeType.MatchF( _L8("*profile-level-id=42800B*") ) != KErrNotFound ) - { - // baseline profile level 1.1 - return 11; - } - - else if ( mimeType.MatchF( _L8("*profile-level-id=42800C*") ) != KErrNotFound ) - { - // baseline profile level 1.2 - return 12; - } - //WVGA task - else if ( mimeType.MatchF( _L8("*profile-level-id=42800D*") ) != KErrNotFound ) - { - // baseline profile level 1.3 - return 13; - } - else if ( mimeType.MatchF( _L8("*profile-level-id=428014*") ) != KErrNotFound ) - { - // baseline profile level 2 - return 20; - } - else if ( mimeType.MatchF( _L8("*profile-level-id=428015*") ) != KErrNotFound ) - { - // baseline profile level 2.1 - return 21; - } - else if ( mimeType.MatchF( _L8("*profile-level-id=428016*") ) != KErrNotFound ) - { - // baseline profile level 2.2 - return 22; - } - else if ( mimeType.MatchF( _L8("*profile-level-id=42801E*") ) != KErrNotFound ) - { - // baseline profile level 3 - return 30; - } - else if ( mimeType.MatchF( _L8("*profile-level-id=42801F*") ) != KErrNotFound ) - { - // baseline profile level 3.1 - return 31; - } - - else if ( mimeType.MatchF( _L8("*profile-level-id=*") ) != KErrNotFound ) - { - // no other profile-level ids supported - User::Panic(_L("CMovieProcessorImpl"), EInvalidInternalState); - } - - else - { - // Default is level 1 (?) - return 10; - } - return 10; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::SuspendProcessing -// Suspends processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::SuspendProcessing() -{ - - PRINT((_L("CMovieProcessorImpl::SuspendProcessing()"))); - - iDemux->Stop(); - - return KErrNone; -} - - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::ResumeProcessing -// Resumes processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMovieProcessorImpl::ResumeProcessing(TInt& aStartFrameIndex, TInt aFrameNumber) -{ - - PRINT((_L("CMovieProcessorImpl::ResumeProcessing(), frame number = %d"), aFrameNumber)); - PRINT((_L("CMovieProcessorImpl::ResumeProcessing(), start index = %d"), iStartFrameIndex )); - - // get index of last written frame - TInt index = iStartFrameIndex + aFrameNumber; - - PRINT((_L("CMovieProcessorImpl::ResumeProcessing(), index is %d"), index)); - - TInt ticks; - // get start time for next frame - TInt time = iParser->GetVideoFrameStartTime(index + 1, &ticks); - if ( time < 0 ) - { - // time represents an error code from parser - PRINT((_L("CMovieProcessorImpl::ResumeProcessing(), error from iParser %d"), time)); - return time; - } - - PRINT((_L("CMovieProcessorImpl::ResumeProcessing(), start frame time = %d ms"), time)); - iStartCutTime = TTimeIntervalMicroSeconds(TInt64(time) * TInt64(1000)); - - // reset parser variables - iParser->Reset(); - - // seek to Intra from where to start decoding to resume processing - TInt error = iParser->SeekOptimalIntraFrame(iStartCutTime, 0, EFalse); - - if (error != KErrNone) - return error; - - aStartFrameIndex = iParser->GetStartFrameIndex(); - - PRINT((_L("CMovieProcessorImpl::ResumeProcessing(), aStartFrameIndex = %d"), aStartFrameIndex)); - - // iStartFrameIndex contains the index of the first included - // frame, which is != 0 in case the clip is cut from beginning - aStartFrameIndex -= iStartFrameIndex; - - PRINT((_L("CMovieProcessorImpl::ResumeProcessing(), aStartFrameIndex = %d"), aStartFrameIndex)); - - iVideoQueue->ResetStreamEnd(); - iDemux->Start(); - - return KErrNone; -} - -// ----------------------------------------------------------------------------- -// CMovieProcessorImpl::NeedTranscoderAnyMore -// Check if all video is processed already -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CMovieProcessorImpl::NeedTranscoderAnyMore() - { - PRINT((_L("CMovieProcessorImpl::NeedTranscoderAnyMore()"))); - if ( iAllVideoProcessed ) - { - PRINT((_L("CMovieProcessorImpl::NeedTranscoderAnyMore() EFalse"))); - return EFalse; - } - else - { - PRINT((_L("CMovieProcessorImpl::NeedTranscoderAnyMore() ETrue"))); - return ETrue; - } - - - } - - -// OTHER EXPORTED FUNCTIONS - - -//============================================================================= - - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/mp4composer.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/mp4composer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,796 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -//FC Based on Cmp4parser - - -// INCLUDE FILES -#include -#include "mp4composer.h" -#include "vedvideosettings.h" -#include "vedavcedit.h" - - -// ASSERTIONS -//#define MPASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CVideoProcessorImpl"), EInternalAssertionFailure)) - - -// MACROS -//#define ?macro ?macro_def - -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -// LOCAL CONSTANTS AND MACROS - -const TUint KFreeDiskSpaceCounter = 10; // Interval when to find out real free disk space -const TUint KMaxComposeBufferSize = 512000; // : Adjust buffer size dynamically - -#ifdef _DEBUG -const TInt KLeaveCode = CComposer::EComposerFailure; -#else -const TInt KLeaveCode = KErrGeneral; -#endif - -// ============================= LOCAL FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// RateIndex: converts sample rate to rate index used in decoder config info -// ----------------------------------------------------------------------------- -// -static TUint8 RateIndex(TInt aRate) - { - switch ( aRate ) - { - case 96000: - return 0x0; - case 88200: - return 0x1; - case 64000: - return 0x2; - case 48000: - return 0x3; - case 44100: - return 0x4; - case 32000: - return 0x5; - case 24000: - return 0x6; - case 22050: - return 0x7; - case 16000: - return 0x8; - case 12000: - return 0x9; - case 11025: - return 0xa; - case 8000: - return 0xb; - case 7350: - return 0xc; - default: - return 0xf; - } - } - - -// ================= MEMBER FUNCTIONS ======================= - -// C++ default constructor can NOT contain any code, that -// might leave. -// - -CMP4Composer::CMP4Composer() -{ - iMP4Handle = 0; - iFreeDiskSpace = 0; - iFreeDiskSpaceCounter = 0; - iFirstWrite = ETrue; - iFsOpened = EFalse; -} - -// Two-phased constructor. -CMP4Composer* CMP4Composer::NewL(const TDesC &aFileName, - CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat, - CVedAVCEdit *aAvcEdit) -{ - CMP4Composer *self = new (ELeave) CMP4Composer; - CleanupStack::PushL(self); - self->ConstructL(aFileName, aVideoFormat, aAudioFormat, aAvcEdit); - CleanupStack::Pop(); // self - return self; -} - -CMP4Composer* CMP4Composer::NewL(RFile* aFileHandle, - CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat, - CVedAVCEdit *aAvcEdit) -{ - CMP4Composer *self = new (ELeave) CMP4Composer; - CleanupStack::PushL(self); - self->ConstructL(aFileHandle, aVideoFormat, aAudioFormat, aAvcEdit); - CleanupStack::Pop(); // self - return self; -} - -// Symbian OS default constructor can leave. -void CMP4Composer::ConstructL(const TDesC &aFileName, - CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat, - CVedAVCEdit *aAvcEdit) -{ - TUint mediaType = 0; - - iOutputMovieFileName = TFileName(aFileName); - iFileHandle = NULL; - - iAvcEdit = aAvcEdit; - - // open MP4 library - - TBuf<258> temp(aFileName); - temp.ZeroTerminate(); - - MP4FileName name = reinterpret_cast( const_cast(temp.Ptr()) ); - - SetMediaOptions(aVideoFormat, aAudioFormat, mediaType); - - MP4Err error; - - // if the filename length is greater 0, then compose to file else buffer - if(aFileName.Length() > 0) - { - error = MP4ComposeOpen(&iMP4Handle, name, mediaType); - } - else - { - // initialize to compose to buffer - iComposeBuffer = (TUint8*)HBufC::NewL( KMaxComposeBufferSize ); - iComposedSize = KMaxComposeBufferSize; - error = MP4ComposeOpenToBuffer(&iMP4Handle, mediaType,(mp4_u8*)iComposeBuffer,&iComposedSize); - } - - if ( error != MP4_OK ) - User::Leave(KLeaveCode); - - SetComposerOptionsL(aVideoFormat, aAudioFormat); - -} - -void CMP4Composer::ConstructL(RFile* aFileHandle, - CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat, - CVedAVCEdit *aAvcEdit) -{ - TUint mediaType = 0; - - iOutputMovieFileName.Zero(); - iFileHandle = aFileHandle; - - iAvcEdit = aAvcEdit; - - SetMediaOptions(aVideoFormat, aAudioFormat, mediaType); - - // open MP4 library - MP4Err error; - - error = MP4ComposeOpenFileHandle(&iMP4Handle, aFileHandle, EDriveC, mediaType); - - if ( error != MP4_OK ) - User::Leave(KLeaveCode); - - SetComposerOptionsL(aVideoFormat, aAudioFormat); - -} - - -void CMP4Composer::SetMediaOptions(CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat, - TUint& aMediaFlags) - -{ - - if ( (aVideoFormat == CParser::EVideoFormatH263Profile0Level10) || - (aVideoFormat == CParser::EVideoFormatH263Profile0Level45) ) - { - aMediaFlags = MP4_TYPE_H263_PROFILE_0; - iVideoType = MP4_TYPE_H263_PROFILE_0; - } - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - else if (aVideoFormat == CParser::EVideoFormatAVCProfileBaseline) - { - aMediaFlags = MP4_TYPE_AVC_PROFILE_BASELINE; - iVideoType = MP4_TYPE_AVC_PROFILE_BASELINE; - } -#endif - else - { - aMediaFlags = MP4_TYPE_MPEG4_VIDEO; - iVideoType = MP4_TYPE_MPEG4_VIDEO; - } - - if ( aAudioFormat == CParser::EAudioFormatAMR ) - { - aMediaFlags |= MP4_TYPE_AMR_NB; - iAudioType = MP4_TYPE_AMR_NB; - } - - else if ( aAudioFormat == CParser::EAudioFormatAAC ) - { - aMediaFlags |= MP4_TYPE_MPEG4_AUDIO; // added for AAC support. - iAudioType = MP4_TYPE_MPEG4_AUDIO; - } - -} - -void CMP4Composer::SetComposerOptionsL(CParser::TVideoFormat aVideoFormat, - CParser::TAudioFormat aAudioFormat) -{ - - MP4Err error; - - TBool videoMpeg4OrAvc = ( aVideoFormat == CParser::EVideoFormatMPEG4 || - aVideoFormat == CParser::EVideoFormatAVCProfileBaseline ); - - mp4_u32 flags = 0; - flags |= MP4_FLAG_LARGEFILEBUFFER; // Note: What does this do when using RFile ? - flags |= MP4_FLAG_METADATALAST; - - // generate MP4 file format if MPEG-4/AVC video & AAC audio - if ( (videoMpeg4OrAvc && aAudioFormat == CParser::EAudioFormatAAC) || - (videoMpeg4OrAvc && aAudioFormat == CParser::EAudioFormatNone) || - (aVideoFormat == CParser::EVideoFormatNone && aAudioFormat == CParser::EAudioFormatAAC) ) - { - flags |= MP4_FLAG_GENERATE_MP4; - } - - error = MP4ComposeSetFlags(iMP4Handle, flags); - - if (error != MP4_OK) - if (error == MP4_OUT_OF_MEMORY) - { - User::LeaveNoMemory(); - } - else - { - User::Leave(KLeaveCode); - } - - // set buffer sizes; only composer buffer settings are effective for this instance - error = MP4SetCustomFileBufferSizes(iMP4Handle, K3gpMp4ComposerWriteBufferSize, K3gpMp4ComposerNrOfWriteBuffers, K3gpMp4ParserReadBufferSize ); - - if (error == MP4_OUT_OF_MEMORY) - { - User::Leave(KErrNoMemory); - } - else if ( error != MP4_OK ) - { - User::Leave(KLeaveCode); - } -} - - -// Destructor -CMP4Composer::~CMP4Composer() -{ - if (iMP4Handle) - { - MP4ComposeClose(iMP4Handle); - } - - if(iComposeBuffer) // added for Buffer support - { - User::Free(iComposeBuffer); - iComposeBuffer=0; - } - - iMP4Handle = 0; - - if (iFsOpened) - { - iFS.Close(); - iFsOpened = EFalse; - } - - -} - -// --------------------------------------------------------- -// CMP4Composer::WriteFrames -// Write the next frame(s) to file -// --------------------------------------------------------- -// -TInt CMP4Composer::WriteFrames(TDesC8& aSrcBuffer, TInt aFrameSize, - TInt aDuration, TInt aKeyFrame, - TInt aNumberOfFrames, TInt aFrameType) -{ - MP4Err error = KErrNone; - - // get the parameters - TUint32 frameSize = aFrameSize; - TUint32 duration = aDuration; - mp4_bool keyframe = (mp4_bool)aKeyFrame; - TInt numberOfFrames = aNumberOfFrames; - TFrameType frameType = (aFrameType>0 ? (aFrameType==1 ? EFrameTypeAudio : EFrameTypeVideo) - : EFrameTypeNone); - - if (frameType == EFrameTypeVideo) - { - error = MP4ComposeWriteVideoFrame(iMP4Handle, (mp4_u8*)(aSrcBuffer.Ptr()), - frameSize, duration, keyframe); - if ( error != MP4_OK ) - return KLeaveCode; - } - - else if (frameType == EFrameTypeAudio) - { - error = MP4ComposeWriteAudioFrames(iMP4Handle,(mp4_u8*)(aSrcBuffer.Ptr()), - frameSize, numberOfFrames, duration); - if ( error != MP4_OK ) - return KLeaveCode; - } - else - User::Panic(_L("CMovieProcessorImpl"), EComposerFailure); - - return KErrNone; - -} - - -TInt CMP4Composer::WriteFrames(TDesC8& aSrcBuffer, TInt aFrameSize, - TInt aDuration, TInt aKeyFrame, - TInt aNumberOfFrames, TInt aFrameType, - TInt& aMP4Size, TBool aModeChanged, - TBool aFirstFrameOfClip, TInt aMode, TBool /*aFromEncoder*/) -{ - MP4Err error = KErrNone; - - // get the parameters - TUint32 frameSize = aFrameSize; - TUint32 duration = aDuration; - mp4_bool keyframe = ( aKeyFrame ) ? ETrue : EFalse; - TInt numberOfFrames = aNumberOfFrames; - TFrameType frameType = (aFrameType > 0 ? (aFrameType == 1 ? EFrameTypeAudio : EFrameTypeVideo) - : EFrameTypeNone); - TUint8* dataPtr = (TUint8*)(aSrcBuffer.Ptr()); - TInt tmpSize = 0; - - // call this only for the first frame of every clip - if ( aFirstFrameOfClip && (iVideoType == MP4_TYPE_MPEG4_VIDEO) && (aMP4Size == 0)) - { - if ((tmpSize = GetMp4SpecificSize(aSrcBuffer,aModeChanged,aMode)) != 0) - aMP4Size = tmpSize; //This will be the new Mp4Size as it will be consider and since by reference it is maintained - } - - if (frameType == EFrameTypeVideo) - { - if ( iVideoType == MP4_TYPE_MPEG4_VIDEO ) - { - if ( iFirstWrite ) - { - // VOS - error = MP4ComposeWriteVideoDecoderSpecificInfo( iMP4Handle, - (mp4_u8*)(dataPtr/*aSrcBuffer.Ptr()*/), aMP4Size ); - iFirstWrite = EFalse; - - error = MP4ComposeWriteVideoFrame(iMP4Handle, (mp4_u8*)(dataPtr/*aSrcBuffer.Ptr()*/ + aMP4Size), - ( frameSize - aMP4Size ), duration, keyframe); - } - else - { - // for MPEG4 - check the first 32 bits to make sure we don't - // have VOS pre-pended to VOP data - if (dataPtr[0] == 0x00 && dataPtr[1] == 0x00 && dataPtr[2] == 0x01 && dataPtr[3] == 0xb0) - { // since intermediate Vos set to proper value - // Not Short Header may have User Data space problem with PSC - if ((tmpSize = GetMp4SpecificSize(aSrcBuffer,aModeChanged,aMode)) != 0) - aMP4Size = tmpSize; //This will be the new Mp4Size as it will be considered - dataPtr += aMP4Size; - frameSize -= aMP4Size; - } - - if (frameSize == 0) - return KErrWrite; - - error = MP4ComposeWriteVideoFrame(iMP4Handle, (mp4_u8*)(dataPtr), - frameSize, duration, keyframe); - } - } - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - else if ( iVideoType == MP4_TYPE_AVC_PROFILE_BASELINE ) - { - - if ( iFirstWrite || aFirstFrameOfClip) - { - if(iFirstWrite) - { - iFrameNumber = 0; - iFirstWrite = EFalse; - } - - aMP4Size = 0; - error = MP4ComposeWriteVideoFrame(iMP4Handle, (mp4_u8*)(dataPtr/*aSrcBuffer.Ptr()*/ + aMP4Size), - ( frameSize - aMP4Size ), duration, keyframe); - } - else - { - error = MP4ComposeWriteVideoFrame(iMP4Handle, (mp4_u8*)(dataPtr), - frameSize, duration, keyframe); - } - - iFrameNumber++; - } -#endif - - else // H.263 - { - error = MP4ComposeWriteVideoFrame(iMP4Handle, (mp4_u8*)(dataPtr/*aSrcBuffer.Ptr()*/), - frameSize, duration, keyframe); - - } - if ( error != MP4_OK ) - return KLeaveCode; - } - else if (frameType == EFrameTypeAudio) - { - error = MP4ComposeWriteAudioFrames(iMP4Handle,(mp4_u8*)(dataPtr/*aSrcBuffer.Ptr()*/), - frameSize, numberOfFrames, duration); - if ( error != MP4_OK ) - return KLeaveCode; - } - else - User::Panic(_L("CMovieProcessorImpl"), EComposerFailure); - - return KErrNone; -} - - - -// --------------------------------------------------------- -// CMP4Composer::ComposeHeaderL -// Get relevant stream parameters by calling mp4 library functions -// (other items were commented in a header). -// --------------------------------------------------------- -// - - -void CMP4Composer::ComposeHeaderL(CComposer::TStreamParameters& aStreamParameters, TInt aOutputVideoTimeScale, - TInt aOutputAudioTimeScale, TInt aAudioFramesInSample) -{ - MP4Err iError=KErrNone; - - TInt width = aStreamParameters.iVideoWidth; - TInt height = aStreamParameters.iVideoHeight; - TInt avgbitrate = aStreamParameters.iStreamBitrate; - TInt maxbitrate = avgbitrate; - TInt audioFramesPerSample = aAudioFramesInSample;//aStreamParameters.iAudioFramesInSample; - TInt audioTimescale = aOutputAudioTimeScale; - TInt modeSet=0x8180; - - if(iAudioType == MP4_TYPE_MPEG4_AUDIO) // added for AAC support - { - // reset for AAC audio according to the code sent for AAC support. - audioFramesPerSample = 0; - modeSet = 0; - } - - // set this to first clip's time scale - TInt timescale = aOutputVideoTimeScale; - - iError = MP4ComposeAddAudioDescription(iMP4Handle,(mp4_u32)audioTimescale, - (mp4_u8)audioFramesPerSample,(mp4_u16)modeSet); - if (iError != MP4_OK) - User::Leave(KLeaveCode); - - // write video description - iError = MP4ComposeAddVideoDescription(iMP4Handle,(mp4_u32)timescale, - (mp4_u16)width,(mp4_u16)height,(mp4_u32)maxbitrate,(mp4_u32)avgbitrate); - - if (iError != MP4_OK) - User::Leave(KLeaveCode); - - if ( aStreamParameters.iVideoFormat == EVideoFormatH263Profile0Level10 ) - { - TVideoClipProperties prop; - prop.iH263Level = 10; - MP4ComposeSetVideoClipProperties(iMP4Handle, prop); - } - - else if ( aStreamParameters.iVideoFormat == EVideoFormatH263Profile0Level45 ) - { - TVideoClipProperties prop; - prop.iH263Level = 45; - MP4ComposeSetVideoClipProperties(iMP4Handle, prop); - } - - if (!iFsOpened) // Check if file server is open already - { - User::LeaveIfError(iFS.Connect()); - iFsOpened = ETrue; - } - - if (iFileHandle == 0) - { - // get target drive number - TParse fp; - User::LeaveIfError(iFS.Parse(iOutputMovieFileName, fp)); - TPtrC driveletter = fp.Drive(); - TChar drl = driveletter[0]; - User::LeaveIfError(RFs::CharToDrive(drl, iDriveNumber)); - } - else - { - // get target drive number - TDriveInfo info; - TInt error = iFileHandle->Drive(iDriveNumber, info); - } -} - -// ----------------------------------------------------------------------------- -// CMP4Composer::DriveFreeSpaceL -// Calculate free space on a drive in bytes. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt64 CMP4Composer::DriveFreeSpaceL() -{ - TVolumeInfo volumeinfo; - - if (iFreeDiskSpaceCounter % KFreeDiskSpaceCounter == 0) - { - User::LeaveIfError(iFS.Volume(volumeinfo, iDriveNumber)); - iFreeDiskSpace = volumeinfo.iFree; - } - - iFreeDiskSpaceCounter++; - return iFreeDiskSpace; - -} - -// ----------------------------------------------------------------------------- -// CMP4Composer::GetComposedBuffer New Function added for Buffer support -// Gets the Composed buffer from the composer -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TUint8* CMP4Composer::GetComposedBuffer() -{ - return iComposeBuffer; -} - -// ----------------------------------------------------------------------------- -// CMP4Composer::GetComposedBufferSize New Function added for Buffer support -// Gets the Composed buffer size from the composer -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TUint CMP4Composer::GetComposedBufferSize() -{ - return iComposedSize; -} - -// --------------------------------------------------------- -// CMP4Composer::Close -// Closes the composer instance & creates the output 3gp file -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Composer::Close() -{ - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - - if (iVideoType == MP4_TYPE_AVC_PROFILE_BASELINE) - { - HBufC8* AVCDCR = NULL; - TInt error; - - TRAP(error, AVCDCR = (HBufC8*) HBufC8::NewL(16384)); - if (error != KErrNone) - return error; - - TPtr8 ptr = AVCDCR->Des(); - - // Construct AVC Decoder Configuration Record from the SPS / PPS sets - TRAP(error, iAvcEdit->ConstructAVCDecoderConfigurationRecordL(ptr)); - if (error != KErrNone) - { - delete AVCDCR; - return error; - } - - // Pass the AVC Decoder Configuration Record to the 3GPMP4 library - MP4Err mp4Error = MP4ComposeWriteVideoDecoderSpecificInfo( iMP4Handle, - (mp4_u8*)(ptr.Ptr()), ptr.Length()); - - delete AVCDCR; - - if (mp4Error != MP4_OK) - return EComposerFailure; - } - -#endif - - MP4Err error = MP4ComposeClose(iMP4Handle); - - iMP4Handle = 0; - - if (error != MP4_OK) - return EComposerFailure; - - if (iFsOpened) - { - iFS.Close(); - iFsOpened = EFalse; - } - - return KErrNone; -} - - -// ----------------------------------------------------------------------------- -// CMP4Composer::GetMp4SpecificSize -// Gets the length of MPEG-4 decoder specific info in aSrcBuf -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMP4Composer::GetMp4SpecificSize(TDesC8& aSrcBuf,TBool aModeChange,TInt aStreamMode) -{ - TUint8* dtPtr = (TUint8*)(aSrcBuf.Ptr()); - TInt mp4size =0; - TInt bufSize; - TInt flag; - - if (!aModeChange && (aStreamMode == 2)) //2 indicates short header in VedCommon - { - bufSize = aSrcBuf.Size()-3; - for(TInt i=0;i>2)<<2; - if (dtPtr[i] == 0x00 && dtPtr[i+1] == 0x00 && flag == 0x80) // user data ???????????? - { - mp4size=i; - break; - } - } - } - else - { - bufSize = aSrcBuf.Size()-4; - for(TInt i=0;i(aSrcBuf->Ptr()); - error = MP4ComposeWriteAudioDecoderSpecificInfo(iMP4Handle, aSrcB, aSrcBuf->Size()); - - if (error != MP4_OK) - return KErrGeneral; - - return KErrNone; -} - -// --------------------------------------------------------- -// CMP4Composer::WriteAudioSpecificInfo -// Writes the Audio decoder Specific info required in case of AAC -// Decoder specific info is derived from samplerate and # of channels -// (other items were commented in a header). -// --------------------------------------------------------- -// -// added to Support AAC audio files -TInt CMP4Composer::WriteAudioSpecificInfo(TInt aSampleRate, TInt aNumChannels) -{ - TInt error = KErrNone; - - TUint8 data[2]; - - data[0] = 2<<3; // AAC-LC - TUint8 rate = RateIndex(aSampleRate); - data[0] |= rate>>1; - data[1] = TUint8(rate<<7); - data[1] |= TUint8(aNumChannels<<3); - - error = MP4ComposeWriteAudioDecoderSpecificInfo(iMP4Handle, data, 2); - - if (error != MP4_OK) - return KErrGeneral; - - return KErrNone; -} - - -// ----------------------------------------------------------------------------- -// CMP4Composer::GetAVCDecoderSpecificInfoSize -// Gets the length of AVC decoder specific info in aSrcBuf -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CMP4Composer::GetAVCDecoderSpecificInfoSize(TDesC8& aSrcBuf) -{ - TUint8* srcPtr = (TUint8*)(aSrcBuf.Ptr()); - TInt skip = 0; -// TInt error = KErrNone; - - // skip 4 bytes for - // configVersion, profile, profile compatibility and Level - skip += 4; - - // skip 1 bytes for lengthSizeMinusOne - skip += 1; - - // skip 1 bytes for num of seq Param sets - TInt numOfSSP = 0x1F & srcPtr[skip]; - skip += 1; - - for (TInt i = 0; i < numOfSSP; i++) - { - TInt sspSize = srcPtr[skip]*256 + srcPtr[skip+1]; - skip += 2; - skip += sspSize; - } - - TInt numOfPSP = srcPtr[skip]; - skip += 1; - - for (TInt i = 0; i < numOfPSP; i++) - { - TInt pspSize = srcPtr[skip]*256 + srcPtr[skip+1]; - skip += 2; - skip += pspSize; - } - - return skip; -} - - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/mp4demux.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/mp4demux.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,748 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation of mp4 demux class. -* -*/ - - -// INCLUDE FILES -#include "movieprocessorimpl.h" -#include "statusmonitor.h" -#include "activequeue.h" -#include "dataprocessor.h" -#include "mp4demux.h" -#include "mp4parser.h" - -// ASSERTIONS -#define DASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CVideoPlayer"), EInternalAssertionFailure)) - -// LOCAL HELPER MACROS -// Debug printing, define DEBUGPRINT to get output -//#define DEBUGPRINT -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -// LOCAL CONSTANTS -const TUint KAudioReadAheadTimeMs = 100; -//const TUint KMaxMsInQueue = 600; -//const TUint KMaxMsInQueue = 300; -const TUint KMaxBytesPerRun = 4096; -const TUint KMaxBlocksInQueue = 16; - - -// MEMBER FUNCTIONS - - -//============================================================================= - -// MODULE DATA STRUCTURES -//enum ?declaration -//typedef ?declaration - -// LOCAL FUNCTION PROTOTYPES -// ?type ?function_name( ?arg_type, ?arg_type ); - -// ==================== LOCAL FUNCTIONS ==================== - -// ================= MEMBER FUNCTIONS ======================= - - -// --------------------------------------------------------- -// CMP4Demux::NewL -// Symbian two-phased constructor. -// --------------------------------------------------------- -// -CMP4Demux* CMP4Demux::NewL(CActiveQueue *anInputQueue, - TUint aNumChannels, TOutputChannel *aOutputChannels, - TStreamParameters *aParameters, - CStatusMonitor *aStatusMonitor, - CMP4Parser *aParser, - TInt aPriority) -{ - - CMP4Demux *self = new (ELeave) CMP4Demux(anInputQueue, - aNumChannels, - aOutputChannels, - aParameters, - aStatusMonitor, - aParser, - aPriority); - - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - - return self; - - -} - -// --------------------------------------------------------- -// C++ default constructor can NOT contain any code, that -// might leave. -// --------------------------------------------------------- -// -CMP4Demux::CMP4Demux(CActiveQueue *anInputQueue, - TUint aNumChannels, TOutputChannel *aOutputChannels, - TStreamParameters *aParameters, - CStatusMonitor *aStatusMonitor, - CMP4Parser *aParser, - TInt aPriority) - : CDemultiplexer(aPriority) - { - // Remember the objects - iInputQueue = anInputQueue; - iMonitor = aStatusMonitor; - iParser = aParser; - - iPicturePeriodMs = aParameters->iPicturePeriodMs; - iAudioFramesInSample = aParameters->iAudioFramesInSample; - - // Remember the channels and mux table - iNumOutputChannels = aNumChannels; - iOutputChannels = aOutputChannels; - } - -// EPOC default constructor can leave. -void CMP4Demux::ConstructL() - { - TUint i; - - // Set as a reader to the input queue - if ( iInputQueue ) - { - iInputQueue->SetReader(this, NULL); - iReaderSet = ETrue; - } - - // Set as writer to the output queues - for ( i = 0; i < iNumOutputChannels; i++ ) - iOutputChannels[i].iTargetQueue->SetWriter(this, NULL); - iWriterSet = ETrue; - - // Add us to active scheduler - CActiveScheduler::Add(this); - - iBytesDemuxed = 0; - iAudioEnd = iVideoEnd = 0; - - // Open all channels - iAudioChannel = 0; - iVideoChannel = 0; - for ( i = 0; i < iNumOutputChannels; i++ ) - { - TOutputChannel *chan = &iOutputChannels[i]; - - // Check the channel type - switch ( chan->iDataType ) - { - case EDataAudio: - - if ( !iAudioChannel ) - iAudioChannel = chan; - break; - - case EDataVideo: - - if ( !iVideoChannel ) - iVideoChannel = chan; - break; - - case EDataNone: - default: - User::Leave(CMovieProcessorImpl::EUnsupportedFormat); - } - } - - // Make us active - SetActive(); - iStatus = KRequestPending; - } - -// Destructor -CMP4Demux::~CMP4Demux() - { - - // If we are demultiplexing, stop - if ( iDemultiplexing ) - Stop(); - - // return input block - if ( iInputBlock ) - { - if (iInputQueue) - iInputQueue->ReturnBlock(iInputBlock); - iInputBlock = 0; - } - - // Remove from being a reader or a writer - if ( iReaderSet ) - { - if (iInputQueue) - iInputQueue->RemoveReader(); - } - - if ( iWriterSet ) - { - for ( TUint i = 0; i < iNumOutputChannels; i++ ) - { - if (iOutputChannels[i].iTargetQueue) - iOutputChannels[i].iTargetQueue->RemoveWriter(); - } - } - - iMonitor = 0; - iInputQueue = 0; - iParser = 0; - iOutputChannels = 0; - iVideoChannel = 0; - iAudioChannel = 0; - - Cancel(); - - } - -// --------------------------------------------------------- -// CMP4Demux::Start -// Starts demuxing -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CMP4Demux::Start() - { - if ( iDemultiplexing ) - return; - - if (!IsActive()) - { - // Make us active - SetActive(); - iStatus = KRequestPending; - } - - // Activate the object if we have data - if ( (iStatus == KRequestPending) && (!iInputQueue || iInputQueue->NumDataBlocks()) ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } - - iDemultiplexing = ETrue; - iAudioEnd = iVideoEnd = iStreamEnd = 0; - iStreamEndDemuxed = 0; - } - -// --------------------------------------------------------- -// CMP4Demux::Stop -// Stops demuxing -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CMP4Demux::Stop() - { - iDemultiplexing = EFalse; - iGotFrame = EFalse; - iFrameType = EDataNone; - } - -// --------------------------------------------------------- -// CMP4Demux::RunL -// Standard active object running method, called when new input data -// or free output space has been signaled to be available -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CMP4Demux::RunL() - { - PRINT((_L("MP4Demux::RunL() in") )); - - // If we have demuxed everything up to stream end, theres is nothing for - // us to do - if ( iStreamEndDemuxed ) - return; - - // Don't do anything if we are not demuxing - if ( !iDemultiplexing ) - { - SetActive(); - iStatus = KRequestPending; - return; - } - - // If we don't have a primary channel, we have no open channels and may as - // well quit - if ( !iAudioChannel && !iVideoChannel ) - { - iMonitor->StreamEndReached(); - return; - } - - // streaming case: - // Try to demux as long as we have a free block in the primary output queue - // and we can find more frames - // If we have both video and audio, we'll check the available space only - // in the primary audio queue, and the video queue will allocate more - // blocks as needed. This way the audio decoder will get more data as - // needed, no matter what the video bitrate is. - - // in file-reading case, GetFrameInfo() checks if there's available space - // in queues, and this info is contained in variable iGotFrame - - // send frame(s) if: - // a frame is available AND - // there are free blocks in output queue AND - // we have not demuxed too much during this run so other objects get CPU AND - // the stream end has not been demuxed - - iBytesDemuxed = 0; - - // NOTE: only video queue fullness checked for now - CActiveQueue *queue = iVideoChannel->iTargetQueue; - - TInt error = GetFrameInfo(); - if (error != KErrNone) - return; - - while ( iGotFrame && ( (iInputQueue && NumFreeBlocks() > 0) || - ( (queue->NumDataBlocks() < KMaxBlocksInQueue) && (iBytesDemuxed < KMaxBytesPerRun) ) ) && - (!iStreamEndDemuxed) ) - { - // Read & send frame(s) - TInt error = ReadAndSendFrames(); - - if ( error != KErrNone ) - { - iMonitor->Error(error); - return; - } - - // And to try get info for new frame - error = GetFrameInfo(); - if (error != KErrNone) - return; - } - - // If we have demultiplexed everything up to stream end, signal the queues - // and don't demux any more. If we have no output channels, notify the - // status monitor. - if ( iStreamEnd && (!iGotFrame) ) - { - // report stream end in streaming case - // in file-reading case, its reported in GetFrameInfo - if ( iNumOutputChannels ) - { - if ( iInputQueue ) - { - TUint i; - for ( i = 0; i < iNumOutputChannels; i++ ) - iOutputChannels[i].iTargetQueue->WriteStreamEnd(); - } - } - else - { - iMonitor->StreamEndReached(); - } - iStreamEndDemuxed = ETrue; - return; - } - - // Re-activate to get signals about new blocks - SetActive(); - iStatus = KRequestPending; - - PRINT((_L("MP4Demux::RunL() out") )); - } - - -// --------------------------------------------------------- -// CMP4Demux::StreamEndReached -// Informs the object that stream end has been reached -// (when we have an input queue, not used in file-reading case) -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CMP4Demux::StreamEndReached(TAny* /*aUserPointer*/) - { - iStreamEnd = ETrue; - - // Signal ourselves if we are demultiplexing - if ( iDemultiplexing && (iStatus == KRequestPending) ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } - } - -// --------------------------------------------------------- -// CMP4Demux::DoCancel -// Standard active object cancellation method -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CMP4Demux::DoCancel() - { - // Cancel our internal request - if ( iStatus == KRequestPending ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrCancel); - } - } - -// --------------------------------------------------------- -// CMP4Demux::GetFrameInfo -// Gets information regarding the next frame. In file-reading -// case, also sets the type of next frame to be read. -// (other items were commented in a header). -// --------------------------------------------------------- -// - -TInt CMP4Demux::GetFrameInfo() - { - - if ( iGotFrame ) - return KErrNone; - - if ( !iInputQueue ) - { - // file-reading case: set frame type according to - // queue fullness - - SetFrameType(); - if ( iFrameType == EDataNone ) - return KErrNone; - - } - - TBool frameAvailable = EFalse; - // check if parser has info & data for next frame available - TInt error = iParser->GetNextFrameInformation((CMP4Parser::TFrameType&)iFrameType, - iFrameLen, frameAvailable); - - if ( error != KErrNone ) - { - if ( error != CParser::EParserEndOfStream ) - { - iMonitor->Error(error); - return error; - } - else - { - DASSERT( iStreamEnd ); - return KErrNone; - } - - } - - if ( iInputQueue ) - { - - // Read data from input queue until we know the frame type and length - // and have data for it available - while ( !frameAvailable ) - { - // Get a new input block with data - while ( !iInputBlock ) - { - if ( (iInputBlock = iInputQueue->ReadBlock()) == NULL ) - return KErrNone; - - // Return empty blocks immediately - if ( iInputBlock->Length() == 0 ) - { - iInputQueue->ReturnBlock(iInputBlock); - iInputBlock = 0; - } - } - - // give input block to parser - error = iParser->WriteDataBlock(*iInputBlock); - if ( error != KErrNone ) - { - iMonitor->Error(error); - return error; - } - - // Return our current input block - iInputQueue->ReturnBlock(iInputBlock); - iInputBlock = 0; - - // check if parser has info & data for next frame available - error = iParser->GetNextFrameInformation((CMP4Parser::TFrameType&)iFrameType, - iFrameLen, frameAvailable); - - if ( error != KErrNone ) - { - iMonitor->Error(error); - return error; - } - } - } - else { - while ( !frameAvailable ) - { - if ( iFrameType == EDataAudio ) - { - iAudioEnd = ETrue; - iAudioChannel->iTargetQueue->WriteStreamEnd(); - PRINT((_L("MP4Demux, audio ended\n") )); - } - else - { - iVideoEnd = ETrue; - iVideoChannel->iTargetQueue->WriteStreamEnd(); - PRINT((_L("MP4Demux, video ended\n") )); - } - if ( iVideoEnd && (iAudioChannel == 0 || iAudioEnd) ) - { - iStreamEnd = ETrue; - return KErrNone; - } - iFrameType = EDataNone; - SetFrameType(); - if ( iFrameType == EDataNone ) - return KErrNone; - error = iParser->GetNextFrameInformation((CMP4Parser::TFrameType&)iFrameType, - iFrameLen, frameAvailable); - if ( error != KErrNone ) - { - iMonitor->Error(error); - return error; - } - } - } - - // at least one frame available - iGotFrame = ETrue; - return KErrNone; - } - -// --------------------------------------------------------- -// CMP4Demux::NumFreeBlocks -// Gets the number of free blocks in target queue -// Relevant in streaming -case -// (other items were commented in a header). -// --------------------------------------------------------- -// - -TUint CMP4Demux::NumFreeBlocks() - { - // check if there's space available for next frame - - CActiveQueue *queue = 0; - - // streaming case: use audio queue value for both so - // that enough audio is always available regardless of - // video bitrate. - - if ( iAudioChannel ) - queue = iAudioChannel->iTargetQueue; - else - queue = iVideoChannel->iTargetQueue; - - DASSERT(queue); - - return queue->NumFreeBlocks(); - - } - -// --------------------------------------------------------- -// CMP4Demux::SetFrameType -// Sets the type of next frame to be read -// Relevant in file-reading case -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CMP4Demux::SetFrameType() - { - - TUint audioDataBlocks = 0; - TUint audioInQueue = 0; - TUint videoDataBlocks = iVideoChannel->iTargetQueue->NumDataBlocks(); - TUint videoInQueue = videoDataBlocks * iPicturePeriodMs; - - DASSERT( iFrameType == EDataNone ); - - if ( iAudioChannel ) - { - audioDataBlocks = iAudioChannel->iTargetQueue->NumDataBlocks(); - audioInQueue = audioDataBlocks * 20 * iAudioFramesInSample; - } - - if ( iAudioChannel == 0 || iAudioEnd ) - { - iFrameType = EDataVideo; - } - - else if ( iVideoEnd ) - { - iFrameType = EDataAudio; - } - - else - { - if ( audioInQueue > videoInQueue + KAudioReadAheadTimeMs ) - iFrameType = EDataVideo; - else - iFrameType = EDataAudio; - } - - //if ( ( iFrameType == EDataVideo && videoInQueue >= KMaxMsInQueue ) || - // ( iFrameType == EDataAudio && audioInQueue >= KMaxMsInQueue + KAudioReadAheadTimeMs ) ) - // iFrameType = EDataNone; - - } - -// --------------------------------------------------------- -// CMP4Demux::ReadVideoFrames -// Read video frames to video queue -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Demux::ReadVideoFrames(TInt aCount) -{ - - while (aCount--) - { - iFrameType = EDataVideo; - - TBool frameAvailable = 0; - TInt error = iParser->GetNextFrameInformation((CMP4Parser::TFrameType&)iFrameType, - iFrameLen, frameAvailable); - - if (error !=KErrNone) - return error; - - DASSERT(frameAvailable); - - iGotFrame = ETrue; - error = ReadAndSendFrames(); - if (error !=KErrNone) - return error; - } - return KErrNone; - -} - -// --------------------------------------------------------- -// CMP4Demux::StreamEndReached -// Reads the next frame(s) from parser and writes -// them to the target queue -// (other items were commented in a header). -// --------------------------------------------------------- -// - -TInt CMP4Demux::ReadAndSendFrames() - { - - DASSERT( iGotFrame ); - - // Find the correct channel. If there is no channel open for this - // type of frames, we'll simply ignore it - TOutputChannel *chan = 0; - TUint i; - for ( i = 0; i < iNumOutputChannels; i++ ) - { - if ( iOutputChannels[i].iDataType == iFrameType ) - chan = &iOutputChannels[i]; - } - - if ( chan ) - { - // OK, we have a target channel. Get a block from its queue - - TPtr8 *block = 0; - - // NOTE: if output block does not need to be saved in any case, make it a local variable - - //PRINT((_L("framelen = %d, bytesdemuxed = %d\n"), iFrameLen, iBytesDemuxed)); - - TUint blockLen = iFrameLen; - TPtr8 readDes(0,0); - TInt error; - - if ( iFrameType == EDataVideo ) - { - // make room for timestamp - blockLen += 4; - } - - - - TRAP( error, (block = chan->iTargetQueue->GetFreeBlockL(blockLen)) ); - if ( error != KErrNone ) - return error; - - if ( iFrameType == EDataVideo ) - { - TUint8 *p = (TUint8 *)(block->Ptr()) + 4; - readDes.Set( p, 0, TInt(iFrameLen) ); - } - else - { - readDes.Set( *block ); - } - - TUint32 numReadFrames = 0; - TUint32 timeStamp; - - // read frame(s) from parser - error = iParser->ReadFrames(readDes, CMP4Parser::TFrameType(iFrameType), - numReadFrames, timeStamp); - - if ( error != KErrNone ) - return error; - - DASSERT( numReadFrames > 0 ); - - if ( iFrameType == EDataAudio ) - { - block->SetLength(readDes.Length()); - } - else - { - block->SetLength(readDes.Length() + 4); - - // put timestamp in the output block before the actual frame data - TUint* d = (TUint *)(block->Ptr()); - Mem::Copy(d, &timeStamp, 4); - } - - iBytesDemuxed += TUint( readDes.Length() ); - - // Send the block - chan->iTargetQueue->WriteBlock(block); - iFrameLen = 0; - iFrameType = EDataNone; - iGotFrame = EFalse; - } - else - { - PRINT((_L("Unknown channel\n"))); - } - - return KErrNone; - } - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/mp4parser.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/mp4parser.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1264 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -// INCLUDE FILES - -#include "movieprocessorimpl.h" -#include "mp4parser.h" -#include "vedvideosettings.h" -#include "vedaudiosettings.h" -#include "vedvolreader.h" -#include "vedavcedit.h" - -// ASSERTIONS -#define MPASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CMovieProcessorImpl"), EInternalAssertionFailure)) - -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -// LOCAL CONSTANTS AND MACROS -#ifdef _DEBUG -const TInt KErrorCode = CParser::EParserFailure; -#else -const TInt KErrorCode = KErrGeneral; -#endif - -//const TUint KNumFramesInOneRun = 10; -const TUint KVOLHeaderBufferSize = 256; -const TUint KAVCDCRBufferSize = 1024; -const TUint KMinBitrate = 128; - -// ================= MEMBER FUNCTIONS ======================= - -// C++ default constructor can NOT contain any code, that -// might leave. -// - -CMP4Parser::CMP4Parser() -{ - iMP4Handle = 0; - iVideoType = 0; - iAudioType = 0; - iBytesRead = 0; - iFirstRead = ETrue; // added for Mp4 - iFirstFrameInfo = ETrue; // added for Mp4 - iOutputNumberOfFrames = 0; - iStreamSource = ESourceNone; - iFrameNumber=0; - iFirstTimeClipParsing=ETrue; - iStartFrameIndex=0; -} - -// Two-phased constructor. - -CMP4Parser* CMP4Parser::NewL(CMovieProcessorImpl* aProcessor, const TDesC &aFileName) -{ - CMP4Parser *self = new (ELeave) CMP4Parser; - CleanupStack::PushL(self); - - if ( aFileName.Length() > 0 ) - self->iStreamSource = ESourceFile; - else - self->iStreamSource = ESourceUser; - - self->ConstructL(aProcessor,aFileName); - - CleanupStack::Pop(); // self - - return self; -} - -CMP4Parser* CMP4Parser::NewL(CMovieProcessorImpl* aProcessor, RFile* aFileHandle) -{ - CMP4Parser *self = new (ELeave) CMP4Parser; - CleanupStack::PushL(self); - - self->iStreamSource = ESourceFile; - - self->ConstructL(aProcessor,aFileHandle); - - CleanupStack::Pop(); // self - - return self; -} - -// Symbian OS default constructor can leave. - -void CMP4Parser::ConstructL(CMovieProcessorImpl* aProcessor, const TDesC &aFileName) -{ - MP4Err error; - iProcessor = aProcessor; - - // open MP4 library - if ( iStreamSource == ESourceFile ) - { - TBuf<258> temp(aFileName); - temp.ZeroTerminate(); - - MP4FileName name = reinterpret_cast( const_cast(temp.Ptr()) ); - - error = MP4ParseOpen(&iMP4Handle, name); - if ( error == MP4_OK ) - { - // set buffer sizes; only parser buffer size is effective for this instance - error = MP4SetCustomFileBufferSizes(iMP4Handle, K3gpMp4ComposerWriteBufferSize, K3gpMp4ComposerNrOfWriteBuffers, K3gpMp4ParserReadBufferSize ); - } - } - else - { - // buffer - error = MP4ParseOpen(&iMP4Handle, 0); - } - - if (error == MP4_OUT_OF_MEMORY) - { - User::Leave(KErrNoMemory); - } - else if ( error != MP4_OK ) - { - User::Leave(KErrorCode); - } -} - -void CMP4Parser::ConstructL(CMovieProcessorImpl* aProcessor, RFile* aFileHandle) -{ - MP4Err error; - iProcessor = aProcessor; - - // open MP4 library - error = MP4ParseOpenFileHandle(&iMP4Handle, aFileHandle); - - if ( error == MP4_OK ) - { - // set buffer sizes; only parser buffer size is effective for this instance - error = MP4SetCustomFileBufferSizes(iMP4Handle, K3gpMp4ComposerWriteBufferSize, K3gpMp4ComposerNrOfWriteBuffers, K3gpMp4ParserReadBufferSize ); - } - - if (error == MP4_OUT_OF_MEMORY) - { - User::Leave(KErrNoMemory); - } - else if ( error != MP4_OK ) - { - User::Leave(KErrorCode); - } -} - -// Destructor -CMP4Parser::~CMP4Parser() -{ - if (iMP4Handle) - MP4ParseClose(iMP4Handle); - - iMP4Handle = 0; -} - - - -// --------------------------------------------------------- -// CMP4Parser::WriteDataBlockL -// Write a block of data to parser -// (other items were commented in a header). -// --------------------------------------------------------- -// - -TInt CMP4Parser::WriteDataBlock(const TDes8& aBlock) -{ - - MPASSERT(iStreamSource != ESourceFile); - MP4Err error = MP4ParseWriteData(iMP4Handle, (mp4_u8*)(aBlock.Ptr()), mp4_u32(aBlock.Length()) ); - - if ( error == MP4_OUT_OF_MEMORY ) - return KErrNoMemory; - else if ( error == MP4_ERROR ) - return KErrorCode; - else - return KErrNone; - -} - -// --------------------------------------------------------- -// CMP4Parser::GetNextFrameInformation -// Get type (streaming-case), length and availability of next frame to be fetched -// using MP4 library API functions -// (other items were commented in a header). -// --------------------------------------------------------- -// - -TInt CMP4Parser::GetNextFrameInformation(TFrameType& aType, TUint& aLength, TBool& aIsAvailable) -{ - - // If aType == EFrameTypeNone, the type of next frame is retrieved - // (valid only in streaming case) - // Otherwise, only the length of next specified type of frame is retrieved - MPASSERT(iStreamSource != ESourceNone); - - mp4_u32 type = MP4_TYPE_NONE; - MP4Err error; - - aIsAvailable = 0; - if ( iNextFrameType == EFrameTypeNone ) - // if the mp4 library is reading a file, a frame has always been read when - // we come here - // otherwise it might be that a complete frame was not available yet - // and we come here to ask again - { - if ( aType == EFrameTypeNone ) - { - MPASSERT(iStreamSource == ESourceUser); - - // get next frame type - error = MP4ParseNextFrameType(iMP4Handle, &type); - - if ( error == MP4_NOT_AVAILABLE ) - return KErrNone; - else if ( error == MP4_NO_FRAME ) - return EParserEndOfStream; // no video or audio frames left, stream ended - else if ( error == MP4_INVALID_INPUT_STREAM ) - return KErrCorrupt; - else if ( error != MP4_OK ) - return KErrorCode; - else - { - MPASSERT(error == MP4_OK); - } - - switch ( type ) - { - case MP4_TYPE_H263_PROFILE_0: - case MP4_TYPE_MPEG4_VIDEO: - - MPASSERT( type == iVideoType ); - iNextFrameType = EFrameTypeVideo; - break; - - case MP4_TYPE_AMR_NB: - MPASSERT( type == iAudioType ); - iNextFrameType = EFrameTypeAudio; - break; - - default: - return KErrNotSupported; - } - } - else - { - // library reads the file - //MPASSERT(iStreamSource == ESourceFile); - type = ( aType == EFrameTypeVideo ) ? iVideoType : iAudioType; - iNextFrameType = aType; - } - - // get length for the frame - mp4_u32 length = 0, mp4Specific = 0; - MPASSERT( type != MP4_TYPE_NONE ); - if ( (iFirstFrameInfo) && - ((iVideoType == MP4_TYPE_MPEG4_VIDEO) || (iVideoType == MP4_TYPE_AVC_PROFILE_BASELINE)) ) - { - error = MP4ParseReadVideoDecoderSpecificInfo( iMP4Handle, 0, 0, &mp4Specific ); - iFirstFrameInfo = EFalse; - } - error = MP4ParseNextFrameSize(iMP4Handle, type, &length); - MPASSERT( error != MP4_NOT_AVAILABLE ); - - if ( length == 0 || error == MP4_NO_REQUESTED_FRAME ) - { - // file-reading case: all frames of this type have been read - // and the caller should try with the other type - MPASSERT( length == 0 ); - iNextFrameType = EFrameTypeNone; - aLength = 0; - return KErrNone; - } - else if ( error == MP4_INVALID_INPUT_STREAM ) - return KErrCorrupt; - else if ( error != MP4_OK ) - return KErrorCode; - else if ( length > iMaxVideoFrameLength ) - { - PRINT((_L("CMP4Parser::GetNextFrameInformation() too large video frame size %d, return KErrCorrupt"),length)); - return KErrCorrupt; - } - else - iNextFrameLength = TUint(length + mp4Specific); - - } - MPASSERT(iNextFrameType != EFrameTypeNone); - MPASSERT(iNextFrameLength != 0); - - // check if frame is available - if ( iStreamSource == ESourceUser ) - { - error = MP4ParseIsFrameAvailable(iMP4Handle, type); - if ( error != MP4_OK && error != MP4_NOT_AVAILABLE ) - return KErrorCode; - aIsAvailable = ( error == MP4_NOT_AVAILABLE ) ? EFalse : ETrue; - } - else - aIsAvailable = ETrue; - - aType = iNextFrameType; - aLength = iNextFrameLength; - - return KErrNone; -} - -// --------------------------------------------------------- -// CMP4Parser::ReadFrames -// Read the next frame(s) from file / stream -// (other items were commented in a header). -// --------------------------------------------------------- -// - -TInt CMP4Parser::ReadFrames(TDes8& aDstBuffer, TFrameType aType, TUint32& aNumRead, - TUint32& aTimeStamp) -{ - MP4Err error; - mp4_u32 returnedSize = 0; - mp4_bool keyFrame = 0; - - MPASSERT( iNextFrameType != EFrameTypeNone && aType == iNextFrameType ); - MPASSERT( iNextFrameLength != 0 ); - -#ifdef _DEBUG - mp4_u32 type = MP4_TYPE_NONE; // buffer support - type = ( aType == EFrameTypeVideo ) ? iVideoType : iAudioType; // buffer support - if (iStreamSource == ESourceUser) - MPASSERT( MP4ParseIsFrameAvailable(iMP4Handle, type) == MP4_OK ); -#endif - - - if (aType == EFrameTypeVideo) - { - TUint32 iTimeStampInTicks=0; - mp4_u32 mp4Specific = 0; - - if ( (iFirstRead) && - ((iVideoType == MP4_TYPE_MPEG4_VIDEO) || (iVideoType == MP4_TYPE_AVC_PROFILE_BASELINE)) ) - { - error = MP4ParseReadVideoDecoderSpecificInfo( iMP4Handle, (mp4_u8*)(aDstBuffer.Ptr() + aDstBuffer.Length()), - mp4_u32( aDstBuffer.MaxLength() ), &mp4Specific ); - iFirstRead = EFalse; - } - - error = MP4ParseReadVideoFrame(iMP4Handle, (mp4_u8*)(aDstBuffer.Ptr() + aDstBuffer.Length()+ mp4Specific), - mp4_u32( aDstBuffer.MaxLength() ), &returnedSize, (mp4_u32*)&aTimeStamp, - &keyFrame, &iTimeStampInTicks); - - returnedSize += mp4Specific; - iFrameNumber++; - aNumRead = 1; - } - else - { - error = MP4ParseReadAudioFrames(iMP4Handle, (mp4_u8*)(aDstBuffer.Ptr()), - mp4_u32(aDstBuffer.MaxLength()), &returnedSize, (mp4_u32*)&aTimeStamp, - (mp4_u32*)&aNumRead, NULL); - - //PRINT((_L("audio TS:%d, "), aTimeStamp)); - } - - MPASSERT(error != MP4_BUFFER_TOO_SMALL); - aDstBuffer.SetLength(aDstBuffer.Length() + TInt(returnedSize)); - iBytesRead += returnedSize; - iNextFrameType = EFrameTypeNone; - iNextFrameLength = 0; - - //PRINT((_L("error=%d, numReturned=%d, returnedSize=%d, bufferSize=%d\n"), - // error, aNumRead, returnedSize, aDstBuffer.MaxLength())); - - if (error == MP4_NOT_AVAILABLE) - return EParserNotEnoughData; - else if ( error == MP4_INVALID_INPUT_STREAM ) - return KErrCorrupt; - else if ( error != MP4_OK ) - return KErrorCode; - else - return KErrNone; -} - - -// --------------------------------------------------------- -// CMP4Parser::Reset -// Resets the parser to its initial state -// (other items were commented in a header). -// --------------------------------------------------------- -// - -TInt CMP4Parser::Reset() -{ - MP4Err error; - - if ( iStreamSource == ESourceFile ) - { - mp4_u32 audioPos, videoPos; - - // seek to very beginning - error = MP4ParseSeek(iMP4Handle, 0, &audioPos, &videoPos, EFalse); - if ( error != MP4_OK ) - return KErrorCode; - - MPASSERT( videoPos == 0 && (iAudioType == 0 || audioPos == 0) ); - - } - else - { - // close & open library to make sure old data is flushed - error = MP4ParseClose(iMP4Handle); - - if ( error != MP4_OK ) - return KErrorCode; - error = MP4ParseOpen(&iMP4Handle, 0); - if ( error != MP4_OK ) - return KErrorCode; - } - - iBytesRead = 0; - iNextFrameType = EFrameTypeNone; - iNextFrameLength = 0; - - return KErrNone; -} - - -// --------------------------------------------------------- -// CMP4Parser::ParseHeaderL -// Get relevant stream parameters by calling mp4 library functions -// (other items were commented in a header). -// --------------------------------------------------------- -// - -TInt CMP4Parser::ParseHeaderL(CParser::TStreamParameters& aStreamParameters) -{ - - PRINT((_L("CMP4Parser::ParseHeaderL() begin"))); - - MP4Err error; - mp4_double frameRate = 0; - TBool hasVideo = ETrue; - - // Reset channel info - aStreamParameters.iHaveVideo = EFalse; - aStreamParameters.iHaveAudio = EFalse; - aStreamParameters.iNumDemuxChannels = 0; - aStreamParameters.iFileFormat = EFileFormatUnrecognized; - aStreamParameters.iVideoFormat = EVideoFormatNone; - aStreamParameters.iAudioFormat = EAudioFormatNone; - aStreamParameters.iVideoLength = 0; - aStreamParameters.iAudioLength = 0; - aStreamParameters.iStreamLength = 0; - aStreamParameters.iAudioFramesInSample = 0; - aStreamParameters.iVideoPicturePeriodNsec = 0; - aStreamParameters.iCanSeek = EFalse; - aStreamParameters.iFrameRate=0; - aStreamParameters.iVideoTimeScale=0; - aStreamParameters.iAudioTimeScale=0; - iAudioType = 0; - iVideoType = 0; - iNumberOfFrames=0; - - // get video description - error = MP4ParseRequestVideoDescription(iMP4Handle, (mp4_u32 *)&aStreamParameters.iVideoLength, - &frameRate, &iVideoType, (mp4_u32 *)&aStreamParameters.iVideoWidth, - (mp4_u32 *)&aStreamParameters.iVideoHeight, (mp4_u32 *)&aStreamParameters.iVideoTimeScale); - - if ( error == MP4_NOT_AVAILABLE ) - User::Leave(KErrorCode); - else if ( error == MP4_INVALID_INPUT_STREAM ) - User::Leave(KErrCorrupt); - else if ( error == MP4_NO_VIDEO ) - { - hasVideo = EFalse; - aStreamParameters.iVideoWidth = aStreamParameters.iVideoHeight = 0; - } - else if ( error != MP4_OK ) - User::Leave(KErrorCode); - else - { - MPASSERT(error == MP4_OK); - } - - // get audio description. ask also for averagebitrate to get error if the track is empty; the information is needed later on - mp4_u32 averagebitrate = 0; - - error = MP4ParseRequestAudioDescription(iMP4Handle, (mp4_u32 *)&aStreamParameters.iAudioLength, - &iAudioType, (mp4_u8*)&aStreamParameters.iAudioFramesInSample, (mp4_u32 *)&aStreamParameters.iAudioTimeScale, &averagebitrate ); - - if ( (error == MP4_ERROR) && ((iAudioType == MP4_TYPE_MPEG4_AUDIO) || (iAudioType == MP4_TYPE_AMR_NB) || (iAudioType == MP4_TYPE_AMR_WB))) - { - // a special case: there may be audio track but it is empty; if type was recognized, mark as no audio - PRINT((_L("CMP4Parser::ParseHeaderL() problems with getting audio description, mark no audio since audio type was recognized"))); - iAudioType = MP4_NO_AUDIO; - error = MP4_NO_AUDIO; - } - if(error == MP4_NOT_AVAILABLE) - User::Leave(EParserNotEnoughData); - else if ( error == MP4_INVALID_INPUT_STREAM ) - User::Leave(KErrCorrupt); - else if ( error != MP4_NO_AUDIO && error != MP4_OK ) - User::Leave(KErrorCode); - else - { - MPASSERT(error == MP4_OK || error == MP4_NO_AUDIO); - } - - // store the sample size for sanity checking purposes - iMaxAMRSampleSize = KVedMaxAMRFrameSize * aStreamParameters.iAudioFramesInSample; - - if (aStreamParameters.iVideoLength > 0) - aStreamParameters.iStreamLength = aStreamParameters.iVideoLength; - - if (aStreamParameters.iAudioLength > aStreamParameters.iVideoLength) - aStreamParameters.iStreamLength = aStreamParameters.iAudioLength; - - aStreamParameters.iFrameRate = frameRate; - - if(hasVideo) - { - - if ( iVideoType == MP4_TYPE_MPEG4_VIDEO ) - { - // read video resolution from VOL header - - HBufC8* tmpBuffer = (HBufC8*) HBufC8::NewLC(KVOLHeaderBufferSize); - TPtr8 tmpPtr = tmpBuffer->Des(); - mp4_u32 volSize = 0; - MP4Err volError = 0; - - volError = MP4ParseReadVideoDecoderSpecificInfo( iMP4Handle, - (mp4_u8*)(tmpPtr.Ptr()), - KVOLHeaderBufferSize, - &volSize ); - - if ( volError != MP4_OK ) - { - User::Leave(KErrorCode); - } - tmpPtr.SetLength(volSize); - - CVedVolReader* tmpVolReader = CVedVolReader::NewL(); - CleanupStack::PushL(tmpVolReader); - - tmpVolReader->ParseVolHeaderL(tmpPtr); - - aStreamParameters.iVideoWidth = tmpVolReader->Width(); - aStreamParameters.iVideoHeight = tmpVolReader->Height(); - - CleanupStack::PopAndDestroy(tmpVolReader); - CleanupStack::PopAndDestroy(tmpBuffer); - - } - - else if ( iVideoType == MP4_TYPE_AVC_PROFILE_BASELINE ) - { - // read resolution from SPS - - HBufC8* tmpBuffer = (HBufC8*) HBufC8::NewLC(KAVCDCRBufferSize); - TPtr8 ptr = tmpBuffer->Des(); - - // read decoder specific info - User::LeaveIfError( ReadAVCDecoderSpecificInfo(ptr) ); - - // create AVC editing instance - CVedAVCEdit* avcEdit = CVedAVCEdit::NewL(); - CleanupStack::PushL(avcEdit); - - TSize resolution(0,0); - User::LeaveIfError( avcEdit->GetResolution(ptr, resolution) ); - - CleanupStack::PopAndDestroy(avcEdit); - CleanupStack::PopAndDestroy(tmpBuffer); - - aStreamParameters.iVideoWidth = resolution.iWidth; - aStreamParameters.iVideoHeight = resolution.iHeight; - } - - - iNumberOfFrames = GetNumberOfVideoFrames(); - MPASSERT(iNumberOfFrames); - - if (iFirstTimeClipParsing) // update only at the first parsing of a clip - { - // update the frame numbers - - iOutputNumberOfFrames = iProcessor->GetOutputNumberOfFrames(); - - if (iOutputNumberOfFrames == 0) - { - iOutputNumberOfFrames += iNumberOfFrames; // total number of frames in all clips - } - else if (!iProcessor->IsThumbnailInProgress()) - { - iOutputNumberOfFrames += iNumberOfFrames; - } - } - - MPASSERT(frameRate > 0); - if (frameRate > 0) - aStreamParameters.iVideoPicturePeriodNsec = TInt64( TReal(1000000000) / TReal(frameRate) ); - else - aStreamParameters.iVideoPicturePeriodNsec = TInt64(33366667); - - if ( iVideoType == MP4_TYPE_H263_PROFILE_0 || iVideoType == MP4_TYPE_H263_PROFILE_3 ) - { - TVideoClipProperties prop; - prop.iH263Level = 0; - MP4ParseGetVideoClipProperties(iMP4Handle, prop); - - iMaxVideoFrameLength = KMaxCodedPictureSizeQCIF; - if (prop.iH263Level == 45) - { - aStreamParameters.iVideoFormat = EVideoFormatH263Profile0Level45; - } - else - { - aStreamParameters.iVideoFormat = EVideoFormatH263Profile0Level10; - } - } - else if ( iVideoType == MP4_TYPE_MPEG4_VIDEO ) - { - aStreamParameters.iVideoFormat = EVideoFormatMPEG4; - if ( aStreamParameters.iVideoWidth <= KVedResolutionQCIF.iWidth ) - { - iMaxVideoFrameLength = KMaxCodedPictureSizeMPEG4L0BQCIF;//distinction between L0 and L0B not possible here - } - else if (aStreamParameters.iVideoWidth <= KVedResolutionCIF.iWidth ) - { - iMaxVideoFrameLength = KMaxCodedPictureSizeMPEG4CIF; - } - else - { - // VGA - iMaxVideoFrameLength = KMaxCodedPictureSizeVGA; - } - } - - else if ( iVideoType == MP4_TYPE_AVC_PROFILE_BASELINE ) - { - - // : Is it possible to dig up the level here ?? - aStreamParameters.iVideoFormat = EVideoFormatAVCProfileBaseline; - - if ( aStreamParameters.iVideoWidth <= KVedResolutionQCIF.iWidth ) - { - iMaxVideoFrameLength = KMaxCodedPictureSizeAVCLevel1B; //distinction between L0 and L0B not possible here ?? - } - else if (aStreamParameters.iVideoWidth <= KVedResolutionCIF.iWidth ) - { - iMaxVideoFrameLength = KMaxCodedPictureSizeAVCLevel1_2; - } - else - { - // default - iMaxVideoFrameLength = KMaxCodedPictureSizeAVCLevel1_2; - } - } - } - - if ( error == MP4_OK ) - { - // stream contains audio - if ( iAudioType == MP4_TYPE_AMR_NB ) - aStreamParameters.iAudioFormat = EAudioFormatAMR; - else - { - if ( iAudioType == MP4_TYPE_MPEG4_AUDIO ) - aStreamParameters.iAudioFormat = EAudioFormatAAC; - } - } - - TBool videoMpeg4OrAVC = ( iVideoType == MP4_TYPE_MPEG4_VIDEO || - iVideoType == MP4_TYPE_AVC_PROFILE_BASELINE ); - - if ( (videoMpeg4OrAVC && iAudioType == MP4_TYPE_MPEG4_AUDIO) || - (videoMpeg4OrAVC && iAudioType == MP4_TYPE_NONE) || - (iVideoType == MP4_TYPE_NONE && iAudioType == MP4_TYPE_MPEG4_AUDIO) ) - aStreamParameters.iFileFormat = EFileFormatMP4; - - else if (iVideoType != MP4_TYPE_NONE || iAudioType != MP4_TYPE_NONE) - aStreamParameters.iFileFormat = EFileFormat3GP; - - if ( aStreamParameters.iStreamLength == 0 ) - aStreamParameters.iFileFormat = EFileFormatUnrecognized; - - if ( aStreamParameters.iVideoFormat != EVideoFormatNone ) - { - aStreamParameters.iHaveVideo = ETrue; - aStreamParameters.iNumDemuxChannels++; - } - - if ( aStreamParameters.iAudioFormat != EAudioFormatNone ) - { - aStreamParameters.iHaveAudio = ETrue; - aStreamParameters.iNumDemuxChannels++; - } - - aStreamParameters.iMaxPacketSize = 0; // N/A - aStreamParameters.iLogicalChannelNumberVideo = 0; // N/A - aStreamParameters.iLogicalChannelNumberAudio = 0; // N/A - - // get stream description - error = MP4ParseRequestStreamDescription(iMP4Handle, (mp4_u32 *)&aStreamParameters.iStreamSize, - (mp4_u32 *)&aStreamParameters.iStreamBitrate); - if ( error != MP4_OK ) - User::Leave(KErrorCode); - - // do sanity-check for bitrate - if (aStreamParameters.iStreamBitrate < KMinBitrate) - User::Leave(KErrCorrupt); - - aStreamParameters.iReferencePicturesNeeded = 0; - aStreamParameters.iNumScalabilityLayers = 0; - - // determine if the stream contains INTRA frames so seeking is possible - // If the stream contains more than one INTRA frame, seeking is - // allowed. - - if (hasVideo) - { - mp4_u32 position = aStreamParameters.iStreamLength + 1000; - mp4_u32 audioTime, videoTime; - - // Seek past stream duration to find out the position of last INTRA frame - error = MP4ParseSeek(iMP4Handle, position, &audioTime, &videoTime, ETrue); - if ( error != MP4_OK ) - User::Leave(KErrorCode); - - if (videoTime != 0) - { - // at least two INTRAs - aStreamParameters.iCanSeek = ETrue; - } - - // rewind file back to beginning - error = MP4ParseSeek(iMP4Handle, 0, &audioTime, &videoTime, EFalse); - if ( error != MP4_OK ) - User::Leave(KErrorCode); - } - - PRINT((_L("CMP4Parser::ParseHeaderL() end"))); - - return KErrNone; -} - - -// --------------------------------------------------------- -// CMP4Parser::IsStreamable -// Finds out whether input stream is multiplexed so that -// it can be streamed, i.e. played while receiving the stream. -// (other items were commented in a header). -// --------------------------------------------------------- -// - -TInt CMP4Parser::IsStreamable() -{ - MP4Err error; - - error = MP4ParseIsStreamable(iMP4Handle); - if ( error == MP4_NOT_AVAILABLE ) - return EParserNotEnoughData; - else if ( error == MP4_INVALID_INPUT_STREAM ) - return KErrNotSupported; - else if ( error == MP4_ERROR ) - return KErrorCode; - else - return ( error == MP4_OK ) ? 1 : 0; -} - - -// --------------------------------------------------------- -// CMP4Parser::Seek -// Seeks the file to desired position in milliseconds -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Parser::Seek(TUint32 aPositionInMs, TUint32& anAudioTimeAfter, TUint32& aVideoTimeAfter) -{ - - MP4Err error = MP4_OK; - MPASSERT(iStreamSource == ESourceFile); - error = MP4ParseSeek(iMP4Handle, aPositionInMs, &anAudioTimeAfter, &aVideoTimeAfter, ETrue); - if (error != MP4_OK) - return KErrorCode; - - return KErrNone; -} - - - -TInt CMP4Parser::GetNumberOfFrames() -{ - return iNumberOfFrames; -} - -// --------------------------------------------------------- -// CMP4Parser::SeekOptimalIntraFrame -// Seeks to INTRA frame position before given time -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Parser::SeekOptimalIntraFrame(TTimeIntervalMicroSeconds aStartTime, TInt /*aIndex*/, TBool aFirstTime) -{ - MP4Err error = KErrNone; - TInt revisedNumberOfFrames = 0; - mp4_u32 audioTime = 0; - mp4_u32 videoTime = 0; -// mp4_u32 timeScale = 0; - - // calculate the start time of the cut operation - TInt64 startTime = aStartTime.Int64() / TInt64(1000); - mp4_u32 startPosition = (mp4_u32)( I64INT(startTime) ); // in milliseconds - - TBool intraFound = (startPosition == 0); - - if (!aFirstTime) - intraFound = 0; - - // First check if the first included frame is intra - if (!intraFound) - { - // seek to previous frame preceding start time or at start time - error = MP4ParseSeek(iMP4Handle, startPosition, &audioTime, &videoTime, EFalse); - if (error != MP4_OK) - { - return KErrorCode; - } - MPASSERT(videoTime <= startPosition); - - // get index of the frame - TInt index = iProcessor->GetVideoFrameIndex(TTimeIntervalMicroSeconds(videoTime*1000)); - - if (videoTime < startPosition) - { - // if there was no frame at start time, seek - // one frame forward to the first included frame - index++; - } - - // get frame type - mp4_bool frameType; - error = MP4ParseGetVideoFrameType(iMP4Handle, index, &frameType); - if (error != MP4_OK) - { - return KErrorCode; - } - if (frameType == 1) - { - intraFound = ETrue; - iStartFrameIndex = index; - - mp4_u32 timeInTicks; - // get timestamp of matched frame to startPosition - error = MP4ParseGetVideoFrameStartTime(iMP4Handle, index, &timeInTicks, &startPosition); - if (error != MP4_OK) - { - return KErrorCode; - } - - // Now seek to found Intra in 1 ms increments. The loop is needed - // because due to rounding error, MP4Parser may seek to previous - // frame instead of the I-frame at startPosition - TInt seekTime = startPosition; - videoTime = 0; - - while (videoTime != startPosition) - { - error = MP4ParseSeek(iMP4Handle, seekTime, &audioTime, &videoTime, EFalse); - if (error != MP4_OK) - { - return KErrorCode; - } - MPASSERT(videoTime <= startPosition); - seekTime++; // add 1 ms - } - - } - } - - if (!intraFound) - { - // seek to the I-frame preceding the start time - error = MP4ParseSeek(iMP4Handle, startPosition, &audioTime, &videoTime, ETrue); - if (error != MP4_OK) - { - return KErrorCode; - } - } - - if (videoTime != 0) - { - if (!intraFound) - { - // get index of the intra frame - TInt64 time = TInt64(TUint(videoTime)) * TInt64(1000); - iStartFrameIndex = iProcessor->GetVideoFrameIndex(TTimeIntervalMicroSeconds( time )); - } - - if (aFirstTime) - { - revisedNumberOfFrames = iNumberOfFrames - iStartFrameIndex; - // update movie and clip number of frames - iOutputNumberOfFrames -= iStartFrameIndex; - iNumberOfFrames = revisedNumberOfFrames; - } - - PRINT((_L("CMP4Parser::SeekOptimalIntraFrame() revised = %d"),revisedNumberOfFrames)); - PRINT((_L("CMP4Parser::SeekOptimalIntraFrame() iNumberOfFrames = %d"),iNumberOfFrames)); - PRINT((_L("CMP4Parser::SeekOptimalIntraFrame() iStartFrameIndex = %d"),iStartFrameIndex)); - PRINT((_L("CMP4Parser::SeekOptimalIntraFrame() iOutputNumberOfFrames = %d"),iOutputNumberOfFrames)); - iFrameNumber = iStartFrameIndex; - } - return KErrNone; -} - -// --------------------------------------------------------- -// CMP4Parser::GetNumberOfVideoFrames -// Gets the number of video frames in clip -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Parser::GetNumberOfVideoFrames() -{ - mp4_u32 numberOfFrames = 0; - MP4Err error = 0; - - error = MP4ParseGetNumberOfVideoFrames(iMP4Handle, &numberOfFrames); - - if (error != MP4_OK) - return 0; - - return numberOfFrames; - -} - -// --------------------------------------------------------- -// CMP4Parser::GetVideoFrameSize -// Gets the size of video frame at given index -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Parser::GetVideoFrameSize(TInt aIndex) -{ - mp4_u32 frameSize = 0; - mp4_u32 mp4Specific = 0; - MP4Err error = 0; - - if ( aIndex == 0 && iVideoType == MP4_TYPE_MPEG4_VIDEO ) - { - error = MP4ParseReadVideoDecoderSpecificInfo( iMP4Handle, 0, 0, &mp4Specific ); - - if ( error != MP4_OK && error != MP4_BUFFER_TOO_SMALL ) - return KErrorCode; - } - - error = MP4ParseGetVideoFrameSize(iMP4Handle, aIndex, &frameSize); - - if (error != MP4_OK) - return KErrorCode; - - return frameSize + mp4Specific; - -} - - - -// --------------------------------------------------------- -// CMP4Parser::GetVideoFrameStartTime -// Returns frame start time in millisec - optional iTimestamp for start time in ticks -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Parser::GetVideoFrameStartTime(TInt aIndex, TInt* aTimeStampInTicks) -{ - - MP4Err error = 0; - mp4_u32 timeStampInMs = 0; - - MPASSERT(aTimeStampInTicks); - - PRINT((_L("CMP4Parser::GetVideoFrameStartTime(), get time for index %d"), aIndex)); - error = MP4ParseGetVideoFrameStartTime(iMP4Handle, aIndex, (mp4_u32*)aTimeStampInTicks, &timeStampInMs); - - if (error != MP4_OK) - { - PRINT((_L("CMP4Parser::GetVideoFrameStartTime(), error from MP4 parser %d"), error)); - return KErrorCode; - } - - PRINT((_L("CMP4Parser::GetVideoFrameStartTime(), time in ms %d"), timeStampInMs)); - return timeStampInMs; - -} - - -// --------------------------------------------------------- -// CMP4Parser::GetVideoFrameType -// Gets the type of video frame at given index -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt8 CMP4Parser::GetVideoFrameType(TInt aIndex) -{ - - MP4Err error = 0; - mp4_bool frameType; - - error = MP4ParseGetVideoFrameType(iMP4Handle, aIndex, &frameType); - - if (error != MP4_OK) - return KErrGeneral; - - return TInt8(frameType); -} - - -// --------------------------------------------------------- -// CMP4Parser::GetVideoFrameProperties -// Gets frame properties -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Parser::GetVideoFrameProperties(TFrameInfoParameters* aVideoFrameInfoArray, - TUint32 aStartIndex, TUint32 aSizeOfArray) -{ - MP4Err error; - error = MP4GetVideoFrameProperties(iMP4Handle,aStartIndex,aSizeOfArray,aVideoFrameInfoArray); - - if (error != MP4_OK) - return KErrorCode; - - return KErrNone; -} - - -// --------------------------------------------------------- -// CMP4Parser::ParseAudioInfo -// Gets the frame information (frame size) for audio in the current clip -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Parser::ParseAudioInfo(TInt& aAudioFrameSize) -{ - MP4Err error; - mp4_u32 audioLength=0; - mp4_u32 audioType=0; - mp4_u32 audioFramesInSample=0; - mp4_u32 audioTimeScale=0; - mp4_u32 avgBitRate=0; - mp4_double frameLength = 0.02; // 20 ms - - error = MP4ParseRequestAudioDescription(iMP4Handle, (mp4_u32 *)&audioLength, - &audioType, (mp4_u8*)&audioFramesInSample, (mp4_u32 *)&audioTimeScale, (mp4_u32*)&avgBitRate); - aAudioFrameSize = ((mp4_u32)((mp4_double)avgBitRate*frameLength)>>3); - - return error; -} - -TInt CMP4Parser::GetMP4SpecificSize() -{ - MP4Err error = 0; - mp4_u32 mp4Specific = 0; - if ( iVideoType == MP4_TYPE_MPEG4_VIDEO ) - { - error = MP4ParseReadVideoDecoderSpecificInfo( iMP4Handle, 0, 0, &mp4Specific ); - if ( error != MP4_OK && error != MP4_BUFFER_TOO_SMALL ) - return KErrGeneral; - } - return mp4Specific; -} - -// --------------------------------------------------------- -// CMP4Parser::ReadAudioDecoderSpecificInfoL -// Gets the decoder specific info from the current file filled so that it can be composed to output file -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Parser::ReadAudioDecoderSpecificInfoL(HBufC8*& aBytes, TInt aBufferSize) -{ - aBytes = HBufC8::NewL(aBufferSize); - CleanupStack::PushL(aBytes); - mp4_u8 *buffer = new (ELeave) mp4_u8[aBufferSize]; - mp4_u32 decspecinfosize = 0; - - MP4Err err = MP4ParseReadAudioDecoderSpecificInfo( - iMP4Handle, - buffer, - aBufferSize, - &decspecinfosize); - if (err == MP4_OK) - { - for (TInt a = 0 ; a < (TInt)decspecinfosize ; a++) - { - aBytes->Des().Append(buffer[a]); - } - } - else - { - delete[] buffer; - buffer = 0; - CleanupStack::PopAndDestroy(aBytes); - aBytes = 0; - User::Leave(KErrGeneral); - } - delete[] buffer; - buffer = 0; - CleanupStack::Pop(aBytes); - return ETrue; -} - -// --------------------------------------------------------- -// CMP4Parser::SetDefaultAudioDecoderSpecificInfoL -// Gets the default decoder specific info filled so that it can be composed to output file -// the default info is for a 16 KHz, mono LC type AAC only -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CMP4Parser::SetDefaultAudioDecoderSpecificInfoL(HBufC8*& aBytes, TInt aBufferSize) -{ - aBytes = HBufC8::NewL(aBufferSize); - CleanupStack::PushL(aBytes); - - const TUint8 frameDecSpecInfo[] = {0x14,0x08}; //the decoder specific - const TInt frameSize = 2; //constant as maximum size of decoderspecific info is 2 - - for (TInt a = 0 ; a < frameSize ; a++) - { - aBytes->Des().Append(frameDecSpecInfo[a]); - } - CleanupStack::Pop(aBytes); - return ETrue; -} - - -TInt CMP4Parser::GetAudioBitrate(TInt& aBitrate) -{ - - mp4_u32 length; - mp4_u32 type; - mp4_u8 framesPerSample; - mp4_u32 timeScale; - mp4_u32 averageBitrate; - - MP4Err error = 0; - - error = MP4ParseRequestAudioDescription(iMP4Handle, &length, - &type, &framesPerSample, &timeScale, &averageBitrate); - - if ( error != 0 ) - return KErrGeneral; - - aBitrate = averageBitrate; - - return KErrNone; - - -} - -TInt CMP4Parser::GetVideoFrameRate(TReal& aFrameRate) -{ - - mp4_u32 length; - mp4_double frameRate; - mp4_u32 videoType; - mp4_u32 width; - mp4_u32 height; - mp4_u32 timeScale; - - MP4Err error = 0; - - // get video description - error = MP4ParseRequestVideoDescription(iMP4Handle, &length, &frameRate, - &videoType, &width, &height, &timeScale); - - if ( error != 0 ) - return KErrGeneral; - - TReal temp = frameRate * 2.0; - TInt temp2 = TInt(temp + 0.5); - - aFrameRate = temp2 / 2.0; - - return KErrNone; -} - -TInt CMP4Parser::GetDecoderSpecificInfoSize() -{ - - MPASSERT(iMP4Handle); - - mp4_u32 mp4Specific = 0; - - MP4Err error = MP4ParseReadVideoDecoderSpecificInfo( iMP4Handle, 0, 0, &mp4Specific ); - - if ( error != MP4_OK && error != MP4_BUFFER_TOO_SMALL ) - return KErrGeneral; - - return mp4Specific; -} - -TInt CMP4Parser::ReadAVCDecoderSpecificInfo(TDes8& buf) -{ - - mp4_u32 mp4Specific = 0; - - MP4Err error = MP4ParseReadVideoDecoderSpecificInfo( iMP4Handle, (mp4_u8*)(buf.Ptr()), - mp4_u32( buf.MaxLength() ), &mp4Specific ); - - - if (error != MP4_OK) - return KErrorCode; - - buf.SetLength(mp4Specific); - - return KErrNone; - -} - -TInt CMP4Parser::GetVideoDuration(TInt& aDurationInMs) -{ - - mp4_u32 length; - mp4_double frameRate; - mp4_u32 videoType; - mp4_u32 width; - mp4_u32 height; - mp4_u32 timeScale; - - MP4Err error = 0; - - // get video description - error = MP4ParseRequestVideoDescription(iMP4Handle, &length, &frameRate, - &videoType, &width, &height, &timeScale); - - if ( error != MP4_OK ) - return KErrGeneral; - - aDurationInMs = length; - - return KErrNone; - -} - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/mpeg4timer.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/mpeg4timer.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation for MPEG-4 timing functions. -* -*/ - - -/* -* Includes -*/ - -#include "mpeg4timer.h" -#include "vedvideosettings.h" - -// Debug print macro -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x -#else -#define PRINT(x) -#endif - - -/* -* ~CMPEG4Timer -* -* Parameters: -* -* Function: -* Destruction -* Returns: -* -* Error codes: -* None -* -*/ -CMPEG4Timer::~CMPEG4Timer() -{ -} - -/* -* NewL -* -* Parameters: -* -* Function: -* Symbian two-phased constructor -* Returns: -* pointer to constructed object, or NULL -* Error codes: -* None -* -*/ -CMPEG4Timer* CMPEG4Timer::NewL(CMovieProcessorImpl * aMovProcessor, TInt aTimeIncrementResolution) -{ - CMPEG4Timer* self = new (ELeave) CMPEG4Timer(); - CleanupStack::PushL( self ); - self->ConstructL(aMovProcessor, aTimeIncrementResolution); - CleanupStack::Pop(); - return self; -} - -/* -* ConstructL -* -* Parameters: -* -* Function: -* Symbian 2nd phase constructor (can leave) -* Returns: -* None -* Error codes: -* None -* -*/ -void CMPEG4Timer::ConstructL(CMovieProcessorImpl * aMovProcessor, TInt aTimeIncrementResolution) -{ - iProcessor = aMovProcessor; - iMPEG4TimeStamp.modulo_time_base = 0; - iMPEG4TimeStamp.time_inc = 0; - iPrevModuloTimeBaseVal = 0; - iMPEG4TimeResolution = aTimeIncrementResolution; - iMPEG4DurationInMsSinceLastModulo = 0; -} - - - -/* -* GetMPEG4DurationInMsSinceLastModulo -* -* Parameters: -* -* Function: -* This function gets the frame duration in millisec from the last frame with modulo base larger than zero -* Returns: -* Frame duration -* Error codes: -* None -* -*/ -TInt64 CMPEG4Timer::GetMPEG4DurationInMsSinceLastModulo() -{ - return iMPEG4DurationInMsSinceLastModulo; -} - -/* -* UpdateMPEG4Time -* -* Parameters: -* -* Function: -* This function updates the time stamp and duration of the last frame for MPEG-4 video -* Returns: -* Nothing -* Error codes: -* None -* -*/ -void CMPEG4Timer::UpdateMPEG4Time(TInt aAbsFrameNumber, TInt /*aFrameNumber*/, TInt aTimeScale) -{ - TInt cur = aAbsFrameNumber; - TInt next = cur+1; - TInt64 frameDuration; - int Tdiff; - - iPrevModuloTimeBaseVal += iMPEG4TimeStamp.modulo_time_base; - - iMPEG4DurationInMsSinceLastModulo = (TInt)((TReal)(iPrevModuloTimeBaseVal * iMPEG4TimeResolution + iMPEG4TimeStamp.time_inc)/ - (TReal)(iMPEG4TimeResolution) * 1000000.0 + 0.5); - - if(next >= iProcessor->GetOutputNumberOfFrames()) - frameDuration = iProcessor->GetVideoTimeInMsFromTicks( I64INT( (iProcessor->GetVideoClipDuration() - iProcessor->VideoFrameTimeStamp(cur)) ), EFalse)*1000; - else - frameDuration = iProcessor->GetVideoTimeInMsFromTicks(iProcessor->VideoFrameTimeStamp(next) - iProcessor->VideoFrameTimeStamp(cur), EFalse)*1000; - - if (frameDuration <0 ) - frameDuration = 100000; - - frameDuration = TInt( I64REAL(frameDuration) / (TReal)aTimeScale * 1000.0 + 0.5); - - if ( I64INT(frameDuration) > KVedMaxFrameDuration ) - { - // max duration is limited since there are some variables e.g. in video decoder than can handle only limited length fields. - PRINT((_L("CMPEG4Timer::UpdateMPEG4Time() limiting frame duration to 30 sec"))); - frameDuration = KVedMaxFrameDuration; - } - Tdiff = TInt(iMPEG4TimeStamp.time_inc + I64REAL(frameDuration) * iMPEG4TimeResolution/1000000.0 + 0.5); - iMPEG4TimeStamp.modulo_time_base = Tdiff/iMPEG4TimeResolution; - iMPEG4TimeStamp.time_inc = Tdiff - (iMPEG4TimeResolution * iMPEG4TimeStamp.modulo_time_base); - -} - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/statusmonitor.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/statusmonitor.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,531 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video player status monitor definitions, class CStatusMonitor. -* -*/ - - -// EXTERNAL RESOURCES - - -// Include Files - -#include "movieprocessorimpl.h" -#include "statusmonitor.h" -#include "vedmovie.h" - - -// LOCAL CONSTANTS AND MACROS -// Debug print macro -#if defined _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - - -// MEMBER FUNCTIONS - - -//============================================================================= - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - CStatusMonitor() - - Standard C++ constructor - ------------------------------------------------------------------------------ -*/ - -CStatusMonitor::CStatusMonitor(MVedMovieProcessingObserver *anObserver, - CMovieProcessorImpl *aMovieProcessor, - CVedMovie *aMovie, TInt aPriority) - : CActive(aPriority) -{ - // Remember the objects - iObserver = anObserver; - iProcessor = aMovieProcessor; - iMovie = aMovie; - // Initialize status: - - iPrepared = EFalse; - iPreparing = EFalse; - - iProcessingStarted = EFalse; - iProcessing = EFalse; - iClipProcessed = EFalse; - iComplete = EFalse; - iCancelled = EFalse; - iError = KErrNone; - iOutError = KErrNone; - -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - ~CStatusMonitor() - - Standard C++ destructor - ------------------------------------------------------------------------------ -*/ - -CStatusMonitor::~CStatusMonitor() -{ - Cancel(); -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - ConstructL() - - Symbian OS second-phase constructor - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::ConstructL() -{ - // Add to active scheduler: - CActiveScheduler::Add(this); - - // Make us active: - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - Error() - - An error has occurred - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::Error(TInt anErrorCode) -{ - // Remember the error - iError = anErrorCode; - -#ifndef _DEBUG - if (iError < KErrHardwareNotAvailable) - iError = KErrGeneral; -#endif - - PRINT((_L("CStatusMonitor::Error() Error = %d "), iError )); - - // Activate the object: - if ( iStatus == KRequestPending ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - StartOpening() - - The stream opening has been started - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::StartPreparing() -{ - __ASSERT_DEBUG((!iPrepared) && (!iPreparing) && (!iProcessing), - User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); - - // Note the state change: - iPreparing = ETrue; -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - Opened() - - The stream has been opened and it is ready for playback - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::PrepareComplete() -{ - __ASSERT_DEBUG((!iPrepared) && iPreparing && (!iProcessing), - User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); - - // Note the state change - iPrepared = ETrue; - iPreparing = EFalse; - -} - -void CStatusMonitor::StreamEndReached() -{ - - -} - -void CStatusMonitor::Progress(TInt aPercentage) -{ - PRINT((_L("CStatusMonitor::Progress() Progress = %d "), aPercentage )); - - iObserver->NotifyMovieProcessingProgressed(*iMovie, aPercentage); -} - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - Closed() - - The stream has been closed - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::Closed() -{ - __ASSERT_DEBUG((iPrepared || iPreparing) && (!iProcessing), - User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); - - // Note the state change: - iPreparing = EFalse; - - // Do not report a stream open if one had been done - iPrepared = EFalse; -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - ProcessingStarted() - - Processing has been started - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::ProcessingStarted(TBool aNotifyObserver) -{ - __ASSERT_DEBUG( (!iProcessing) && (!iProcessingStarted) && (iPrepared), - User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); - - // Note the state change: - iProcessing = ETrue; - - if (aNotifyObserver) - { - iProcessingStarted = ETrue; - - // Activate the object: - if ( iStatus == KRequestPending ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } - } -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - ProcessingStopped() - - Processing has been stopped - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::ProcessingStopped() -{ - __ASSERT_DEBUG(iProcessing, - User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); - - // Note the state change: - iProcessing = EFalse; -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - ClipProcessed() - - The video clip end has been reached - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::ClipProcessed() -{ - __ASSERT_DEBUG( (iProcessing), - User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); - - // Note the stream end: - iClipProcessed = ETrue; - - // Activate the object: - if ( iStatus == KRequestPending ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } -} - -void CStatusMonitor::ProcessingComplete() -{ - __ASSERT_DEBUG((!iProcessing), - User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); - - // Note the stream end: - iComplete = ETrue; - - // Activate the object: - if ( iStatus == KRequestPending ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } -} - -void CStatusMonitor::ProcessingCancelled() -{ - __ASSERT_DEBUG((!iProcessing), - User::Panic(_L("CVideoProcessor"), EInvalidStateTransition)); - - iCancelled = ETrue; - - // Activate the object: - if ( iStatus == KRequestPending ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - FatalError() - - A fatal non-recovereable error has occurred - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::FatalError(TInt anError) -{ - PRINT((_L("CStatusMonitor::FatalError Error = %d "), anError )); - - // Pass the error to the observer - iObserver->NotifyMovieProcessingCompleted(*iMovie, anError); - - // The observer returned -- panic the program - User::Panic(_L("CVideoProcessor"), anError); - -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - RunL() - - The active object running method, called by the active scheduler when the - object has been activated. - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::RunL() -{ - TInt error; - - // Re-activate us: - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - - // Check if an error occurred: - if ( iError != KErrNone ) - { - // Yes, stop processing if we are processing, close stream if it was open: - if ( iProcessing ) - { - if ( iProcessor ) - { - iProcessor->CancelProcessingL(); - } - iProcessing = EFalse; - } - else - { - if ( iPrepared || iPreparing ) - { - if ( iProcessor ) - { - iProcessor->CancelProcessingL(); - } - iPreparing = EFalse; - iPrepared = EFalse; - } - } - - // Report the error to the observer: - //iObserver->NotifyMovieProcessingCompleted(*iMovie, iError); - iOutError = iError; - iError = KErrNone; - - - } - - else - { - // Nope, no errors - - // If processing has been started, report that: - if ( iProcessingStarted ) - { - iProcessingStarted = EFalse; - TRAP(error, iObserver->NotifyMovieProcessingStartedL(*iMovie)); - if ( error != KErrNone ) - FatalError(error); - } - else if ( iCancelled ) - { - // processing has been cancelled - iCancelled = EFalse; - iComplete = EFalse; - iClipProcessed = EFalse; - - if ( iOutError == KErrNone ) - iObserver->NotifyMovieProcessingCompleted(*iMovie, KErrCancel); - else - iObserver->NotifyMovieProcessingCompleted(*iMovie, iOutError); - - iOutError = KErrNone; - - } - - else if ( iClipProcessed ) - { - // a clip has been processed - iClipProcessed = EFalse; - iProcessor->FinalizeVideoClip(); - } - - else - { - if ( iComplete ) - { - // If the movie has been completed, report that: - iComplete = EFalse; - iObserver->NotifyMovieProcessingCompleted(*iMovie, KErrNone); - - } - } - } -} - - - -/* ------------------------------------------------------------------------------ - - CStatusMonitor - - DoCancel() - - Cancels the internal request - ------------------------------------------------------------------------------ -*/ - -void CStatusMonitor::DoCancel() -{ - // Cancel it: - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrCancel); -} - - - - -// OTHER EXPORTED FUNCTIONS - - -//============================================================================= - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/videoprocessor.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/videoprocessor.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6628 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation for video processor. -* -*/ - - -// Include Files - -#include "vedcommon.h" -#include "movieprocessorimpl.h" -#include "statusmonitor.h" -#include "activequeue.h" -#include "dataprocessor.h" -#include "h263dmai.h" // CVedH263Dec -#include "mp4parser.h" -#include "videoencoder.h" -#include "videoprocessor.h" -#include "mpeg4timer.h" -#include "vedvolreader.h" -#include "vedvideosettings.h" -#include "vedavcedit.h" - -// Local constants -const TUint KInitialDataBufferSize = 8192; // initial frame data buffer size -const TUint KH263StartCodeLength = 3; // H.263 picture start code length -const TUint KMPEG4StartCodeLength = 4; // MPEG4 picture start code length -//const TUint KMaxEncodingDelay = 500000; // time to wait for encoding to complete in microsec. -const TUint KDefaultTimeIncrementResolution = 30000; -const TUint KAVCNotCodedFrameBuffer = 128; -const TUint KMaxItemsInProcessingQueue = 3; // note! this must be synchronized with KTRMinNumberOfBuffersCodedPicture setting in transcoder! - - -#ifdef _DEBUG -const TInt KErrorCode = CVideoProcessor::EDecoderFailure; -#else -const TInt KErrorCode = KErrGeneral; -#endif - -// An assertion macro wrapper to clean up the code a bit -#define VDASSERT(x, n) __ASSERT_DEBUG(x, User::Panic(_L("CVideoProcessor"), EInternalAssertionFailure+n)) - -// Debug print macro - -#ifdef _DEBUG -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - -// ================= STATIC FUNCTIONS ======================= - -// --------------------------------------------------------- -// AddBits -// Static helper function to add bits to byte-buffer -// --------------------------------------------------------- -// -static void AddBits(TUint8* aBuf, TInt& aBitIndex, TInt& aByteIndex, TInt aBits, TInt aNrOfBits) - { - // aBitIndex = 8 => first bit in the left - // aBitIndex = 1 => last bit in the right - while ( aBitIndex < aNrOfBits ) - { - // divide into n bytes - aBuf[aByteIndex++] |= TUint8( aBits >> (aNrOfBits-aBitIndex) ); - aNrOfBits -= aBitIndex; - aBitIndex = 8; - } - // all bits fit into 1 byte - aBitIndex -= aNrOfBits; - aBuf[aByteIndex] |= TUint8( aBits << aBitIndex ); - if (aBitIndex == 0) - { - aBitIndex = 8; - aByteIndex++; - } - } - - - -// ================= MEMBER FUNCTIONS ======================= - - - -// --------------------------------------------------------- -// CVideoProcessor::NewL -// Symbian two-phased constructor. -// --------------------------------------------------------- -// - -CVideoProcessor* CVideoProcessor::NewL(CActiveQueue *anInputQueue, - CVideoProcessor::TStreamParameters *aStreamParameters, - CMovieProcessorImpl* aProcessor, - CStatusMonitor *aStatusMonitor, - CVedAVCEdit *aAvcEdit, - TBool aThumbnailMode, - TInt aPriority) -{ - CVideoProcessor *self = new (ELeave) CVideoProcessor(anInputQueue, - aStreamParameters, - aProcessor, - aStatusMonitor, - aAvcEdit, - aThumbnailMode, - aPriority); - - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - - return self; - -} - -// --------------------------------------------------------- -// CVideoProcessor::CVideoProcessor -// Constructor. -// --------------------------------------------------------- -// -CVideoProcessor::CVideoProcessor(CActiveQueue *anInputQueue, - TStreamParameters *aStreamParameters, - CMovieProcessorImpl* aProcessor, - CStatusMonitor *aStatusMonitor, - CVedAVCEdit *aAvcEdit, - TBool aThumbnailMode, - TInt aPriority) : CVideoDecoder(aPriority), - iWriteDes(0,0), - iThumbnailMode(aThumbnailMode) -{ - - // Remember the objects - iQueue = anInputQueue; - iMonitor = aStatusMonitor; - iProcessor = aProcessor; - iAvcEdit = aAvcEdit; - - // Remember the stream parameters - iVideoWidth = aStreamParameters->iWidth; - iVideoHeight = aStreamParameters->iHeight; - - // Color Toning - iFirstFrameQp = 0; - - iTiming = aStreamParameters->iTiming; - // Reset state - iReaderSet = EFalse; - iDecoding = EFalse; - iStreamEnd = EFalse; - iPreviousFrameIncluded = EFalse; - iFrameOperation = EDecodeAndWrite; - - iTrPrevious = -1; - - iFirstFrameFlag = ETrue; - iDecodePending = EFalse; - - iTranscoderStarted = EFalse; - iDecodingSuspended = EFalse; - - iStartTransitionColor = EColorNone; - iEndTransitionColor = EColorNone; - iStartNumberOfTransitionFrames = KNumTransitionFrames; - iEndNumberOfTransitionFrames = KNumTransitionFrames; - iNextTransitionNumber = -1; - iProcessingComplete = EFalse; - iStreamEndRead = EFalse; - - iPreviousTimeStamp = TTimeIntervalMicroSeconds(-1); - - iFirstRead = ETrue; - - iThumbDecoded = EFalse; - - iMaxItemsInProcessingQueue = KMaxItemsInProcessingQueue; - - iDataFormat = EDataUnknown; - - iLastWrittenFrameNumber = -1; - - iInitializing = ETrue; -} - - -// --------------------------------------------------------- -// CVideoProcessor::~CVideoProcessor() -// Destructor -// --------------------------------------------------------- -// -CVideoProcessor::~CVideoProcessor() -{ - - // If we are decoding, stop - if (iDecoding) - Stop(); - - // Remove from being a reader - if (iReaderSet) - { - // Return current block and all - // blocks from input queue - if (iBlock) - { - if (iQueue) - iQueue->ReturnBlock(iBlock); - } - - if (iQueue) - iBlock = iQueue->ReadBlock(); - - while (iBlock) - { - if (iQueue) - { - iQueue->ReturnBlock(iBlock); - iBlock = iQueue->ReadBlock(); - } - } - iBlockPos = 0; - - if (iQueue) - iQueue->RemoveReader(); - } - Cancel(); - - if (iTransCoder) - { - if (iTranscoderStarted) - { - TRAPD(error, iTransCoder->StopL()); - if (error != KErrNone) { } - } - delete iTransCoder; - iTransCoder = 0; - } - - iFrameInfoArray.Reset(); - - // Close the decoder instance if one has been opened - if (iDecoder) - delete iDecoder; - iDecoder = 0; - - // Deallocate buffers - if (iDataBuffer) - User::Free(iDataBuffer); - - if (iOutVideoFrameBuffer) - User::Free(iOutVideoFrameBuffer); - - if (iFrameBuffer) - User::Free(iFrameBuffer); - - if ( iColorTransitionBuffer ) - User::Free( iColorTransitionBuffer ); - - if ( iOrigPreviousYUVBuffer ) - User::Free( iOrigPreviousYUVBuffer ); - - if (iMediaBuffer) - delete iMediaBuffer; - iMediaBuffer = 0; - - if (iDecoderSpecificInfo) - delete iDecoderSpecificInfo; - iDecoderSpecificInfo = 0; - - if (iOutputVolHeader) - delete iOutputVolHeader; - iOutputVolHeader = 0; - - if (iDelayedBuffer) - delete iDelayedBuffer; - iDelayedBuffer = 0; - - if (iMPEG4Timer) - delete iMPEG4Timer; - iMPEG4Timer = 0; - - if (iTimer) - delete iTimer; - iTimer = 0; - - if (iNotCodedFrame) - delete iNotCodedFrame; - iNotCodedFrame = 0; - -} - - -// --------------------------------------------------------- -// CVideoProcessor::ConstructL() -// Symbian 2nd phase constructor can leave. -// --------------------------------------------------------- -// -void CVideoProcessor::ConstructL() -{ - // Set as a reader to the input queue - iQueue->SetReader(this, NULL); - iReaderSet = ETrue; - - // Add us to active scheduler - CActiveScheduler::Add(this); - - iMediaBuffer = new (ELeave)CCMRMediaBuffer; - - // Allocate buffers - iDataBuffer = (TUint8*) User::AllocL(KInitialDataBufferSize); - iBufferLength = KInitialDataBufferSize; - - if ( iThumbnailMode ) - { - TSize a = iProcessor->GetMovieResolution(); - TInt length = a.iWidth*a.iHeight; - - length += (length>>1); - iFrameBuffer = (TUint8*)User::AllocL(length); - } - - TSize size(iVideoWidth, iVideoHeight); - - if (!iThumbnailMode) - { - // Open a decoder instance - iDecoder = CVedH263Dec::NewL(size, 1 /*iReferencePicturesNeeded*/); - - // create timer - iTimer = CCallbackTimer::NewL(*this); - } - - // Make us active - SetActive(); - iStatus = KRequestPending; -} - - -// --------------------------------------------------------- -// CVideoProcessor::Start -// Starts decoding -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::Start() -{ - if ( iDecoding ) - return; - - // Activate the object if we have data - if ( (!iDecodePending) && (iStatus == KRequestPending) && iQueue->NumDataBlocks() ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } - - iDecoding = ETrue; -} - -// --------------------------------------------------------- -// CVideoProcessor::Stop -// Stops decoding -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CVideoProcessor::Stop() -{ - iDecoding = EFalse; - - if (iTimer) - iTimer->CancelTimer(); - - if (iTranscoderStarted) - { - TRAPD(error, iTransCoder->StopL()); - if (error != KErrNone) { } - iTranscoderStarted = EFalse; - } -} - -// --------------------------------------------------------- -// CVideoProcessor::RunL -// Standard active object running method -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CVideoProcessor::RunL() -{ - PRINT((_L("CVideoProcessor::RunL() in"))) - - // Don't decode if we aren't decoding - if (!iDecoding) - { - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - PRINT((_L("CVideoProcessor::RunL() out from !iDecoding branch"))) - return; - } - - if (iTranscoderInitPending) - { - iTranscoderInitPending = EFalse; - if (iStatus != KErrNone) - { - if (!iThumbnailMode) - { - VDASSERT(iMonitor, 101); - iMonitor->Error(iStatus.Int()); - } - else - { - iProcessor->NotifyThumbnailReady(iStatus.Int()); - } - - return; - } - // at this point we have already read a frame, - // so now start processing - iTransCoder->StartL(); - - // stop if a fatal error has occurred in starting - // the transcoder (decoding stopped in MtroFatalError) - if (!iDecoding) - return; - - iTranscoderStarted = ETrue; - - if (!iThumbnailMode) - { - ProcessFrameL(); - if (iDecodePending) - return; - } - else - { - ProcessThumb(ETrue); - return; - } - } - - if (iDecodePending) - { - iDecodePending = EFalse; - - if (iThumbnailMode) - { - if (iThumbDecoded) - { - PRINT((_L("CVideoProcessor::RunL() - thumb decoded"))) - ProcessThumb(EFalse); - } - else - { - PRINT((_L("CVideoProcessor::RunL() - thumb not decoded"))) - ReadAndWriteThumbFrame(); - } - return; - } - } - - if (iProcessingComplete) - { - PRINT((_L("CVideoProcessor::RunL() iProcessingComplete == ETrue"))) - VDASSERT(iMonitor, 102); - iMonitor->ClipProcessed(); - return; - } - - if (iFirstColorTransitionFrame) - { - Process2ndColorTransitionFrameL(); - return; - } - - while (!iDecodePending && !iDelayedWrite && !iTranscoderInitPending && - ReadFrame() ) - { - // process it - if ( ProcessFrameL() ) - { - // clip processed up until cut-out time, stop - if (iFrameInfoArray.Count()) - { - PRINT((_L("CVideoProcessor::RunL() - stream end reached, wait for frames"))); - iStreamEnd = iStreamEndRead = ETrue; - - // if there are still frames to be encoded, start timer - // since encoder may skip the rest of the frames - if ( IsNextFrameBeingEncoded() ) - { - PRINT((_L("CVideoProcessor::RunL(), set timer"))); - if ( !iTimer->IsPending() ) - iTimer->SetTimer( TTimeIntervalMicroSeconds32( iMaxEncodingDelay ) ); - } - return; - } - - iTimer->CancelTimer(); - if (iTranscoderStarted) - { - iTransCoder->StopL(); - iTranscoderStarted = EFalse; - } - VDASSERT(iMonitor, 103); - iMonitor->ClipProcessed(); - PRINT((_L("CVideoProcessor::RunL() out from ProcessFrameL == ETrue"))) - return; - } - } - - if ( !iDecodePending && !iDelayedWrite && !iTranscoderInitPending ) - { - - // We didn't get a frame - if (iStreamEnd) - { - iStreamEndRead = ETrue; - PRINT((_L("CVideoProcessor::RunL() - stream end reached"))); - if (iFrameInfoArray.Count()) - { - PRINT((_L("CVideoProcessor::RunL() - stream end reached, wait for frames"))); - // wait until frames have been processed - - // if there are still frames to be encoded, start timer - // since encoder may skip the rest of the frames - if ( IsNextFrameBeingEncoded() ) - { - PRINT((_L("CVideoProcessor::RunL(), set timer"))); - if ( !iTimer->IsPending() ) - iTimer->SetTimer( TTimeIntervalMicroSeconds32( iMaxEncodingDelay ) ); - } - return; - } - else - { - iTimer->CancelTimer(); - VDASSERT(iMonitor, 104); - iMonitor->ClipProcessed(); - } - } - else - { - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - } - } - - PRINT((_L("CVideoProcessor::RunL() out"))) - -} - -// ----------------------------------------------------------------------------- -// CVideoProcessor::RunError -// Called by the AO framework when RunL method has leaved -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CVideoProcessor::RunError(TInt aError) -{ - - if ((aError == CVedH263Dec::EDecoderNoIntra) || (aError == CVedH263Dec::EDecoderCorrupted)) - { - if (!iThumbnailMode) - iMonitor->Error(KErrCorrupt); - else - iProcessor->NotifyThumbnailReady(KErrCorrupt); - } - else - { - if (!iThumbnailMode) - iMonitor->Error(aError); - else - iProcessor->NotifyThumbnailReady(aError); - } - - return KErrNone; -} - - -// --------------------------------------------------------- -// CVideoProcessor::Process2ndColorTransitionFrameL -// Processes the second frame of a color transition double frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -TBool CVideoProcessor::Process2ndColorTransitionFrameL() -{ - - TFrameInformation frameInfo; - frameInfo.iTranscoderMode = EFullWithIM; - frameInfo.iFrameNumber = iFrameNumber; - frameInfo.iEncodeFrame = ETrue; - frameInfo.iKeyFrame = EFalse; - frameInfo.iTransitionFrame = ETrue; - frameInfo.iTransitionPosition = EPositionStartOfClip; - frameInfo.iTransitionColor = iStartTransitionColor; - frameInfo.iTransitionFrameNumber = iTransitionFrameNumber; - frameInfo.iModificationApplied = EFalse; - frameInfo.iRepeatFrame = ETrue; - - TInt duration; - // get timestamp - iProcessor->GetNextFrameDuration(duration, frameInfo.iTimeStamp, iTimeStampIndex, iTimeStampOffset); - iTimeStampIndex++; - - frameInfo.iTimeStamp += iCutInTimeStamp; - - TTimeIntervalMicroSeconds ts = (iProcessor->GetVideoTimeInMsFromTicks(frameInfo.iTimeStamp, EFalse)) * 1000; - - if (ts <= iPreviousTimeStamp) - { - // adjust timestamp so that its bigger than ts of previous frame - TReal frameRate = iProcessor->GetVideoClipFrameRate(); - VDASSERT(frameRate > 0.0, 105); - TInt64 durationMs = TInt64( ( 1000.0 / frameRate ) + 0.5 ); - durationMs /= 2; // add half the duration of one frame - - ts = TTimeIntervalMicroSeconds( iPreviousTimeStamp.Int64() + durationMs*1000 ); - - frameInfo.iTimeStamp = iProcessor->GetVideoTimeInTicksFromMs( ts.Int64()/1000, EFalse ); - - ts = iProcessor->GetVideoTimeInMsFromTicks(frameInfo.iTimeStamp, EFalse) * 1000; - - PRINT((_L("CVideoProcessor::Process2ndColorTransitionFrameL() - adjusted timestamp, prev = %d, new = %d"), - I64INT( iPreviousTimeStamp.Int64() ) / 1000, I64INT( ts.Int64() ) / 1000)); - - } - - - iFrameInfoArray.Append(frameInfo); - - iPreviousTimeStamp = ts; - - iFirstColorTransitionFrame = EFalse; - - CCMRMediaBuffer::TBufferType bt = - (iDataFormat == EDataH263) ? CCMRMediaBuffer::EVideoH263 : CCMRMediaBuffer::EVideoMPEG4; - - if (!iNotCodedFrame) - GenerateNotCodedFrameL(); - - PRINT((_L("CVideoProcessor::Process2ndColorTransitionFrameL() - sending not coded"))); - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if (iDataFormat == EDataAVC) - { - TPtr8 ptr(iNotCodedFrame->Des()); - - TInt length = iNotCodedFrame->Length(); - iAvcEdit->ProcessAVCBitStreamL((TDes8&)(ptr), length, 0 /*dummy*/, EFalse ); - ptr.SetLength(length); - iDataLength = iCurrentFrameLength = length; - } -#endif - - iMediaBuffer->Set( TPtrC8(iNotCodedFrame->Des().Ptr(), iNotCodedFrame->Length()), - bt, - iNotCodedFrame->Length(), - EFalse, - ts ); - - iDecodePending = ETrue; - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - - PRINT((_L("CVideoProcessor::Process2ndColorTransitionFrameL() - WriteCodedBuffer, frame #%d, timestamp %d ms"), - iFrameNumber, I64INT( ts.Int64() ) / 1000 )); - iTransCoder->WriteCodedBufferL(iMediaBuffer); - - iFrameNumber++; - - return ETrue; - -} - - -// --------------------------------------------------------- -// CVideoProcessor::GenerateNotCodedFrameL -// Generate bitstream for not coded frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::GenerateNotCodedFrameL() -{ - - TSize resolution = iProcessor->GetVideoClipResolution(); - - if (iDataFormat == EDataH263) - { - // H.263 QCIF picture header - TInt headerSize = 7; - TUint8 notCodedH263[] = { 0x00, 0x00, 0x80, 0x02, 0x0a, 0x0c, 0x3f }; - TUint8 lsbMask[8] = { 255, 254, 252, 248, 240, 224, 192, 128 }; - - - if ( resolution == TSize(128,96) ) - notCodedH263[4] = 0x06; // set source format as sub-QCIF - - else if ( resolution == TSize(352, 288) ) - notCodedH263[4] = 0x0e; // set source format as CIF - - else if ( resolution != TSize(176,144) ) - User::Panic(_L("CVideoProcessor"), EInternalAssertionFailure); - - TInt numMBs = ( resolution.iWidth / 16 ) * ( resolution.iHeight / 16 ); - - // one COD bit for each MB, the last byte of the pic header already contains 6 MB bits - TInt bitsLeft = numMBs - 6; - - TInt bufSize = headerSize + ( bitsLeft / 8 ) + ( bitsLeft % 8 != 0 ); - - VDASSERT(!iNotCodedFrame, 117); - iNotCodedFrame = (HBufC8*) HBufC8::NewL(bufSize); - - TPtr8 buf(iNotCodedFrame->Des()); - buf.Copy(notCodedH263, headerSize); - - TInt index = headerSize; - TUint8* ptr = const_cast(buf.Ptr()); - - // set COD bit to 1 for all macroblocks - while (bitsLeft >= 8) - { - ptr[index++] = 0xff; - bitsLeft -= 8; - } - - if (bitsLeft) - { - TUint8 val = 0; - val |= lsbMask[8 - bitsLeft]; - ptr[index] = val; - } - buf.SetLength(bufSize); - } - - else if (iDataFormat == EDataMPEG4) - { - VDASSERT(iDataFormat == EDataMPEG4, 115); - - TUint8 vopStartCodeMPEG4[] = { 0x00, 0x00, 0x01, 0xb6 }; - - TInt headerSize = 4; - - // calculate the number of bits needed for vop_time_increment - TInt numTiBits; - for (numTiBits = 1; ((iInputTimeIncrementResolution - 1) >> numTiBits) != 0; numTiBits++) - { - } - - VDASSERT(numTiBits <= 16, 116); - - TInt numMBs = ( resolution.iWidth / 16 ) * ( resolution.iHeight / 16 ); - - // get VOP size - // vop_start_code: 32 - // vop_coding_type + modulo_time_base + marker_bit: 4 - // no. of bits for vop_time_increment - // marker_bit + vop_coded bit: 2 - // rounding_type: 1 - // intra_dc_vlc_thr: 3 - // vop_quant: 5 - // vop_fcode_forward: 3 - // not_coded for each MB: numMBs - TInt bufSizeBits = headerSize * 8 + 4 + numTiBits + 2 + 1 + 3 + 5 + 3 + numMBs;//DP mode not included! - if ( (iInputStreamMode == EVedVideoBitstreamModeMPEG4DP) - || (iInputStreamMode == EVedVideoBitstreamModeMPEG4DP_RVLC) - || (iInputStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP) - || (iInputStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP_RVLC) - ) - { - // Motion marker in DP mode - bufSizeBits+=17; - } - TInt bufSize = ( bufSizeBits / 8 ) + 1; // always 1-8 stuffing bits - - VDASSERT(!iNotCodedFrame, 118); - iNotCodedFrame = (HBufC8*) HBufC8::NewL(bufSize); - - TPtr8 buf(iNotCodedFrame->Des()); - buf.SetLength(bufSize); - buf.FillZ(); - buf.SetLength(0); - buf.Copy(vopStartCodeMPEG4, headerSize); - - TUint8* ptr = const_cast(buf.Ptr()); - TInt shift = 8; - TInt index = headerSize; - AddBits(ptr, shift, index, 1, 2); // vop_coding_type - AddBits(ptr, shift, index, 0, 1); // modulo_time_base - AddBits(ptr, shift, index, 1, 1); // marker_bit - - // vop_time_increment is left to zero (skip FillZ bits) - AddBits(ptr, shift, index, 0, numTiBits); - - // marker (1 bit; 1) - AddBits(ptr, shift, index, 1, 1); - // vop_coded (1 bit; 1=coded) - AddBits(ptr, shift, index, 1, 1); - - // vop_rounding_type (1 bit) (0) - AddBits(ptr, shift, index, 0, 1); - - // intra_dc_vlc_thr (3 bits) (0 = Intra DC, but don't care) - AddBits(ptr, shift, index, 0, 3); - - // vop_quant (5 bits) (1-31) - AddBits(ptr, shift, index, 10, 5); - - // vop_fcode_forward (3 bits) (1-7, 0 forbidden) - AddBits(ptr, shift, index, 1, 3); - - // Macroblocks - - // one COD bit for each MB - TInt bitsLeft = numMBs; - - // set COD bit to 1 for all macroblocks (== not coded) - while (bitsLeft >= 8) - { - AddBits(ptr, shift, index, 0xff, 8); - bitsLeft -= 8; - } - - TUint8 lsb[8] = { 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01 }; - if (bitsLeft) - { - TUint8 val = 0; - val = lsb[8 - bitsLeft]; - AddBits(ptr, shift, index, val, bitsLeft); - } - // If DP mode is used, should add motion marker here: 1 11110000 00000001 - if ( (iInputStreamMode == EVedVideoBitstreamModeMPEG4DP) - || (iInputStreamMode == EVedVideoBitstreamModeMPEG4DP_RVLC) - || (iInputStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP) - || (iInputStreamMode == EVedVideoBitstreamModeMPEG4Resyn_DP_RVLC) - ) - { - AddBits(ptr, shift, index, 0x01, 1); - AddBits(ptr, shift, index, 0xf0, 8); - AddBits(ptr, shift, index, 0x01, 8); - } - - // insert stuffing in last byte - TUint8 stuffing[8] = { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f }; - ptr[bufSize - 1] |= stuffing[shift-1]; - - buf.SetLength(bufSize); - - } - else - { -#ifdef VIDEOEDITORENGINE_AVC_EDITING - - VDASSERT(iDataFormat == EDataAVC, 115); - - VDASSERT(!iNotCodedFrame, 118); - iNotCodedFrame = (HBufC8*) HBufC8::NewL(KAVCNotCodedFrameBuffer); - - TPtr8 buf( const_cast(iNotCodedFrame->Des().Ptr()), - KAVCNotCodedFrameBuffer, KAVCNotCodedFrameBuffer ); - - TInt len = iAvcEdit->GenerateNotCodedFrame( buf, iModifiedFrameNumber++ ); - - if (len == 0) - User::Leave(KErrArgument); - - TPtr8 temp(iNotCodedFrame->Des()); - temp.SetLength(len); -#else - VDASSERT(0, 190); -#endif - } - - -} - -// --------------------------------------------------------- -// CVideoProcessor::ProcessFrameL -// Processes one input frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -TBool CVideoProcessor::ProcessFrameL() - { - - - PRINT((_L("CVideoProcessor::ProcessFrameL() begin"))); - - VDASSERT(iCurrentFrameLength,1); - - TInt frameInRange = 0; - TInt frameDuration = 0; - TBool keyFrame = EFalse; - TTimeIntervalMicroSeconds startCutTime = TTimeIntervalMicroSeconds(0); - TTimeIntervalMicroSeconds endCutTime = TTimeIntervalMicroSeconds(0); - TTimeIntervalMicroSeconds frameTime = TTimeIntervalMicroSeconds(0); - - TInt trP = iProcessor->GetTrPrevNew(); - TInt trD = iProcessor->GetTrPrevOrig(); - - // transitions - iTransitionFrame = 0; // is this a transition frame? - iTransitionPosition = EPositionNone; - iTransitionColor = EColorNone; - iFirstTransitionFrame = 0; // is this the first transition frame in this instance? - TBool endColorTransitionFrame = EFalse; - - TBool decodeCurrentFrame = 0; // do we need to decode frame for transition effect? - - // book-keeping - startCutTime = iProcessor->GetStartCutTime(); - endCutTime = iProcessor->GetEndCutTime(); - iRepeatFrame = EFalse; - - if(iInitializing) - { - - // determine if we need to do full transcoding - iFullTranscoding = DetermineResolutionChange() || DetermineFrameRateChange() || - DetermineBitRateChange(); - - // Do full transcoding for MPEG-4 => H.263. MPEG-4 => MPEG-4 and H.263 => MPEG-4 can be done in compressed domain - if ( iProcessor->GetCurrentClipVideoType() == EVedVideoTypeMPEG4SimpleProfile && - iProcessor->GetOutputVideoType() != EVedVideoTypeMPEG4SimpleProfile ) - iFullTranscoding = ETrue; - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - // Do full transcoding for AVC => H.263/MPEG-4 - if ( iProcessor->GetCurrentClipVideoType() == EVedVideoTypeAVCBaselineProfile && - iProcessor->GetOutputVideoType() != EVedVideoTypeAVCBaselineProfile ) - iFullTranscoding = ETrue; - - // Do full transcoding for H.263/MPEG-4 => AVC - if ( iProcessor->GetCurrentClipVideoType() != EVedVideoTypeAVCBaselineProfile && - iProcessor->GetOutputVideoType() == EVedVideoTypeAVCBaselineProfile ) - iFullTranscoding = ETrue; - - // Do color effects for AVC in spatial domain - if ( iProcessor->GetOutputVideoType() == EVedVideoTypeAVCBaselineProfile && - iProcessor->GetColorEffect() != EVedColorEffectNone ) - iFullTranscoding = ETrue; -#endif - - // determine transition parameters for the clip - DetermineClipTransitionParameters(iTransitionEffect,iStartOfClipTransition, - iEndOfClipTransition,iStartTransitionColor,iEndTransitionColor); - - if (!iTransCoder) - { - // initialize transcoder, normal mode - CreateAndInitializeTranscoderL(iProcessor->GetCurrentClipVideoType(), CTRTranscoder::EFullTranscoding); - return EFalse; - } - - if ( iColorTransitionBuffer ) - { - User::Free( iColorTransitionBuffer ); - iColorTransitionBuffer = 0; - } - - if ( iOrigPreviousYUVBuffer ) - { - User::Free( iOrigPreviousYUVBuffer ); - iOrigPreviousYUVBuffer = 0; - } - - iFirstFrameInRange = 0; - iFirstIncludedFrameNumber = -1; - iTimeStampIndex = 0; - iTimeStampOffset = 0; - //iProcessor->iOutputFramesInClip=0; - iPreviousFrameIncluded = EFalse; - iNumberOfFrames = iProcessor->GetClipNumberOfFrames(); - - // calculate number of included frames - if(iTransitionEffect) - { - GetNumberOfTransitionFrames(startCutTime, endCutTime); - } - iInitializing = EFalse; - } - - TInt startFrame = iProcessor->GetOutputNumberOfFrames() - iNumberOfFrames; - TInt absFrameNumber = startFrame + iFrameNumber; - - VDASSERT(startCutTime <= endCutTime,2); - - // microseconds - frameTime = TTimeIntervalMicroSeconds(iProcessor->GetVideoTimeInMsFromTicks( - iProcessor->VideoFrameTimeStamp(absFrameNumber), EFalse) * 1000); - keyFrame = iProcessor->VideoFrameType(absFrameNumber); - - TInt cur = absFrameNumber; - TInt next = cur+1; - - TTimeIntervalMicroSeconds frameDurationInMicroSec(0); - - // frameDuration is in ticks, with timescale of the current input clip - if(next >= iProcessor->GetOutputNumberOfFrames()) - { - frameDurationInMicroSec = - (iProcessor->GetVideoTimeInMsFromTicks(iProcessor->GetVideoClipDuration(), EFalse) * TInt64(1000)) - frameTime.Int64(); - - frameDuration = I64INT(iProcessor->GetVideoClipDuration() - iProcessor->VideoFrameTimeStamp(cur) ); - } - else - { - frameDuration = I64INT( iProcessor->VideoFrameTimeStamp(next) - iProcessor->VideoFrameTimeStamp(cur) ); - frameDurationInMicroSec = - TTimeIntervalMicroSeconds(iProcessor->GetVideoTimeInMsFromTicks(TInt64(frameDuration), EFalse) * 1000); - } - - TTimeIntervalMicroSeconds frameEndTime = - TTimeIntervalMicroSeconds( frameTime.Int64() + frameDurationInMicroSec.Int64() ); - - // endCutTime is in TTimeIntervalMicroSeconds - - // check if frame is in range for decoding/editing - frameInRange = ((frameEndTime <= endCutTime) ? 1 : 0); - if(frameInRange) - { - - // transition is applied only for frame included in the output movie - if(frameTime >= startCutTime) - { - // find the offset for the first included frame in the clip - if(!iFirstFrameInRange) - { - iFirstFrameInRange = 1; - iFirstIncludedFrameNumber = iFrameNumber; - iModifiedFrameNumber = iFrameNumber + 1; // +1 since number is incremented after modifying - } - TInt relativeIncludedFrameNumber = iFrameNumber - iFirstIncludedFrameNumber; - - if(iTransitionEffect) - { - // check if this is a transition frame & set transition parameters - SetTransitionFrameParams(relativeIncludedFrameNumber, decodeCurrentFrame); - } - } - - // check if this is an end color transition frame - if ( iTransitionFrame && iTransitionPosition == EPositionEndOfClip && - iEndTransitionColor == EColorTransition ) - { - endColorTransitionFrame = ETrue; - iFrameToEncode = EFalse; - } - - // check if we need to include this frame into output movie - if (frameTime < startCutTime) - { - // decode, but do not include in output movie - // iPreviousFrameIncluded = EFalse; - iFrameToEncode = EFalse; - iFrameOperation = EDecodeNoWrite; - // for decoding frames not writable to output movie, do not decode - // with any effects, because all information is need at P->I conversion - } - else // include in output movie - { - - // check if we need to encode it again as I-frame - if (iFullTranscoding || (!iPreviousFrameIncluded && !keyFrame) || iTransitionFrame) - { - // need to decode as P and encode as I - - if (!endColorTransitionFrame) - iFrameToEncode = ETrue; - - iFrameOperation = EDecodeNoWrite; - // for first decoding of P frame in a clip, do not decode with any effects; - // instead, apply the effects in the spatial domain after decoding it as P; - // then feed it to the encoder with the applied special effects - } - else - { - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - // check if we need to encode AVC frames after - // encoded cut frame or starting transition - if (iDataFormat == EDataAVC && iEncodeUntilIDR) - { - TPtr8 ptr(iDataBuffer, iCurrentFrameLength, iBufferLength); - - if (iAvcEdit->IsNALUnitIDR(ptr)) - iEncodeUntilIDR = 0; - else - { - // encode - iFrameOperation = EDecodeNoWrite; - if (!endColorTransitionFrame) - iFrameToEncode = ETrue; - } - } -#endif - - if (!iEncodeUntilIDR) - { - // just copy the frame data as it is - - TInt colorEffect = TColorEffect2TInt(iProcessor->GetColorEffect()); - - iFrameToEncode = EFalse; - if(decodeCurrentFrame) - iFrameOperation = EDecodeAndWrite; - else - iFrameOperation = (colorEffect==0/*None*/ ? EWriteNoDecode : EDecodeAndWrite); - } - } - iPreviousFrameIncluded = ETrue; - } - - } - else - { - // no need to include frame in output movie - iPreviousFrameIncluded = EFalse; - iFrameToEncode = EFalse; - iFrameOperation = ENoDecodeNoWrite; - - // stop processing - return ETrue; - } - - TBool modeChanged = GetModeChangeL(); // do we need to change the current mode? - - /* added to handle Mp4Specific size problem */ - if(modeChanged && !iFullTranscoding) - { - iProcessor->SetClipModeChanged(modeChanged); //if it is not set, it will be default false - } - - if (iFrameOperation == EDecodeAndWrite) - PRINT((_L("CVideoProcessor::ProcessFrameL() frame operation = EDecodeAndWrite"))); - if (iFrameOperation == EWriteNoDecode) - PRINT((_L("CVideoProcessor::ProcessFrameL() frame operation = EWriteNoDecode"))); - if (iFrameOperation == EDecodeNoWrite) - PRINT((_L("CVideoProcessor::ProcessFrameL() frame operation = EDecodeNoWrite"))); - if (iFrameOperation == ENoDecodeNoWrite) - PRINT((_L("CVideoProcessor::ProcessFrameL() frame operation = ENoDecodeNoWrite"))); - - PRINT((_L("CVideoProcessor::ProcessFrameL() iFrameToEncode = %d"), iFrameToEncode)); - - TBool volHeaderIncluded = EFalse; - - if( (iFrameOperation == EDecodeAndWrite) || (iFrameOperation == EWriteNoDecode) || - ((iFrameOperation == EDecodeNoWrite) && !iFullTranscoding && iFirstFrameFlag) ) - // the last line is to enable processing of the 1st frame also if it would be decoded with transcoder, - // to enable processing of the MPEG-4 VOL header by vedh263d. - { - - TPtr8 ptr(0,0); - TBool doCompressedDomainTC = modeChanged || iProcessor->GetColorEffect() != EVedColorEffectNone; - - // If we need to do compressed domain bitstream manipulation at some - // point of the clip, all frames must be decoded by vedh263d to be - // able to start bitstream modification in the middle of the clip, e.g. - // after a transition. If we are processing MPEG-4, all frames are - // manipulated by the decoder for changing timing information - - if ( doCompressedDomainTC || (iDataFormat == EDataMPEG4 /*&& !iTransitionFrame*/) ) - { - // use h263decoder to do bitstream modification - - // (if this is an end color transition frame, iFrameOperation is - // EDecodeNoWrite && iFrameToEncode == 0 - - TInt frameOp = 1; // EDecodeAndWrite - - if ( iFrameOperation == EDecodeNoWrite ) - frameOp = 2; - - if ( iFrameOperation == EWriteNoDecode && !modeChanged ) - frameOp = 3; // EWriteNoDecode - - TInt frameSize; - - if (iDataFormat == EDataMPEG4 && iFirstFrameFlag) - { - InsertDecoderSpecificInfoL(); - volHeaderIncluded = ETrue; - } - - // use h263decoder to do compressed domain transcoding - PRINT((_L("CVideoProcessor::ProcessFrameL() decode using vedh263d"))); - DecodeFrameL(frameOp, modeChanged, frameSize); - ptr.Set(iOutVideoFrameBuffer, frameSize, frameSize); - } - else - { - // copy bitstream directly - ptr.Set(iDataBuffer, iCurrentFrameLength, iCurrentFrameLength); - } - - if (iFrameOperation == EDecodeAndWrite || iFrameOperation == EWriteNoDecode) - { -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if (iDataFormat == EDataAVC && iTransitionEffect && - iStartTransitionColor == EColorTransition) - { - if (!(iAvcEdit->IsNALUnitIDR(ptr))) - { - // modify frame number - VDASSERT( (iFrameNumber > iFirstIncludedFrameNumber), 182 ); - iAvcEdit->ModifyFrameNumber(ptr, iModifiedFrameNumber++); - PRINT((_L("CVideoProcessor::ProcessFrameL() modified frame no. => #%d"), iModifiedFrameNumber - 1)); - } - else - iModifiedFrameNumber = 1; // this frame is IDR, start numbering from zero - } -#endif - // Write to file - if ( WriteFrameToFileL(ptr, frameDuration, absFrameNumber) ) - return ETrue; - } - - if (iFrameOperation == EWriteNoDecode || - (iFrameOperation == EDecodeAndWrite && !decodeCurrentFrame && doCompressedDomainTC)) - { - // NOTE: The 2nd condition is for B&W & compr.domain TC - - // if we are doing only compressed domain transcoding, theres no need to - // decode the frame using transcoder - - // Throw away the data for this frame: - VDASSERT(iDataLength >= iCurrentFrameLength,4); - Mem::Copy(iDataBuffer, iDataBuffer + iCurrentFrameLength, - iDataLength - iCurrentFrameLength); - iDataLength = iDataLength - iCurrentFrameLength; - iCurrentFrameLength = 0; - - // update and fetch the new Time Code for MPEG4 ES - if (iProcessor->GetOutputVideoType() == EVedVideoTypeMPEG4SimpleProfile && - frameInRange && (frameTime >= startCutTime) ) - - { - iMPEG4Timer->UpdateMPEG4Time(absFrameNumber, iFrameNumber, iProcessor->GetSlowMotionSpeed()); - } - - iFrameNumber++; - return EFalse; - } - } - - // process using transcoder - if (iFrameOperation == EDecodeNoWrite || iFrameOperation == EDecodeAndWrite) - { - WriteFrameToTranscoderL(absFrameNumber, keyFrame, volHeaderIncluded); - } - - // update and fetch the new Time Code for MPEG4 ES - if (iProcessor->GetOutputVideoType() == EVedVideoTypeMPEG4SimpleProfile && - frameInRange && (frameTime >= startCutTime) ) - { - iMPEG4Timer->UpdateMPEG4Time(absFrameNumber, iFrameNumber, iProcessor->GetSlowMotionSpeed()); - } - - iProcessor->SetTrPrevNew(trP); - iProcessor->SetTrPrevOrig(trD); - - if (!iFirstColorTransitionFrame) - iFrameNumber++; - - PRINT((_L("CVideoProcessor::ProcessFrameL() end"))); - - return EFalse; -} - - -// --------------------------------------------------------- -// CVideoProcessor::WriteFrameToFileL -// Write frame to file -// (other items were commented in a header). -// --------------------------------------------------------- -// -TBool CVideoProcessor::WriteFrameToFileL(TPtr8& aBuf, TInt aDurationInTicks, TInt aFrameNumber) -{ - - // if there's a frame waiting to be encoded, we must not - // write this frame now. It will be written after all to-be-encoded - // frames have been written. New frames must not be processed - // until the delayed write has been completed - - iDelayedWrite = !IsEncodeQueueEmpty(); - - if (iDelayedWrite) - { - PRINT((_L("CVideoProcessor::WriteFrameToFileL() delayed write"))); - // save frame for later writing - if (iDelayedBuffer) - delete iDelayedBuffer; - iDelayedBuffer = 0; - - iDelayedBuffer = (HBufC8*) HBufC8::NewL(aBuf.Length()); - - TPtr8 db(iDelayedBuffer->Des()); - db.Copy(aBuf); - - iDelayedTimeStamp = iProcessor->VideoFrameTimeStamp(aFrameNumber) + iTimeStampOffset; - iDelayedKeyframe = iProcessor->VideoFrameType(aFrameNumber); - iDelayedFrameNumber = iFrameNumber; - if ( IsNextFrameBeingEncoded() ) - { - // start timer to wait for encoding to complete - if ( !iTimer->IsPending() ) - iTimer->SetTimer( TTimeIntervalMicroSeconds32( iMaxEncodingDelay ) ); - } - } - else - { - // write now - TInt error = iProcessor->WriteVideoFrameToFile(aBuf, - ( iProcessor->VideoFrameTimeStamp(aFrameNumber) + iTimeStampOffset ), - aDurationInTicks, iProcessor->VideoFrameType(aFrameNumber), EFalse, EFalse, EFalse ); - - // If movie has reached maximum size then stop processing - if (error == KErrCompletion) - { - iFrameInfoArray.Reset(); - return ETrue; - } - - // save frame number - iLastWrittenFrameNumber = iFrameNumber; - - User::LeaveIfError(error); - } - - return EFalse; - -} - - -// --------------------------------------------------------- -// CVideoProcessor::WriteFrameToTranscoderL -// Write frame to transcoder -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::WriteFrameToTranscoderL(TInt aFrameNumber, TBool aKeyFrame, TBool aVolHeaderInBuffer) -{ - - VDASSERT(iDataFormat != EDataUnknown, 30); - - // TODO: new buffertype for H.264 - CCMRMediaBuffer::TBufferType bt = - (iDataFormat == EDataH263) ? CCMRMediaBuffer::EVideoH263 : CCMRMediaBuffer::EVideoMPEG4; - - // insert dec. specific info header to beginning of buffer if it has not been sent - if (!iDecoderSpecificInfoSent && - ( iDataFormat == EDataAVC || (iDataFormat == EDataMPEG4 && !aVolHeaderInBuffer) ) ) - { - PRINT((_L("CVideoProcessor::WriteFrameToTranscoderL() - insert header"), iTranscoderMode)); - InsertDecoderSpecificInfoL(); - } - - // determine transcoder mode for this frame - TTranscoderMode mode; - - if (iFrameToEncode) - { - if ( iTransitionFrame || (iProcessor->GetColorEffect() != EVedColorEffectNone) ) - { - PRINT((_L("CVideoProcessor::WriteFrameToTranscoderL() encode current frame with intermediate modification"))); - mode = EFullWithIM; - } - else - { - PRINT((_L("CVideoProcessor::WriteFrameToTranscoderL() encode current frame"))); - mode = EFull; - } - } - else - { - PRINT((_L("CVideoProcessor::WriteFrameToTranscoderL() only decode current frame"))); - mode = EDecodeOnly; - } - - PRINT((_L("CVideoProcessor::WriteFrameToTranscoderL() iTranscoderMode %d"), iTranscoderMode)); - if (iTranscoderMode != mode) - { - if (mode == EDecodeOnly) - { - iTransCoder->EnableEncoder(EFalse); - iTransCoder->EnablePictureSink(ETrue); - } - else if (mode == EFull) - { - iTransCoder->EnableEncoder(ETrue); - iTransCoder->EnablePictureSink(EFalse); - } - else - { - iTransCoder->EnableEncoder(ETrue); - iTransCoder->EnablePictureSink(ETrue); - } - iTranscoderMode = mode; - } - - if (iFrameToEncode) - { - // should we encode an I-frame ? - if( (iTransitionFrame && iFirstTransitionFrame) || - (iFrameNumber == iFirstIncludedFrameNumber) || - iFirstFrameAfterTransition ) - { - iTransCoder->SetRandomAccessPoint(); - } - } - - TFrameInformation frameInfo; - frameInfo.iTranscoderMode = iTranscoderMode; - frameInfo.iFrameNumber = iFrameNumber; - frameInfo.iEncodeFrame = iFrameToEncode; - frameInfo.iKeyFrame = aKeyFrame; - - // this timestamp is in ticks for writing the frame - frameInfo.iTimeStamp = iProcessor->VideoFrameTimeStamp(aFrameNumber) + iTimeStampOffset; - frameInfo.iTransitionFrame = iTransitionFrame; - frameInfo.iTransitionPosition = iTransitionPosition; - frameInfo.iTransitionColor = iTransitionColor; - frameInfo.iTransitionFrameNumber = iTransitionFrameNumber; - frameInfo.iModificationApplied = EFalse; - - if(iTransitionFrame && iTransitionPosition == EPositionStartOfClip && - iStartTransitionColor == EColorTransition) - { - TInt duration; - TInt64 currentTimeStamp = iProcessor->VideoFrameTimeStamp(aFrameNumber); - - // get timestamp for 1st frame - iProcessor->GetNextFrameDuration(duration, frameInfo.iTimeStamp, iTimeStampIndex, iTimeStampOffset); - iTimeStampIndex++; - - if (iFirstTransitionFrame) - iCutInTimeStamp = currentTimeStamp; - - frameInfo.iTimeStamp += iCutInTimeStamp; - - // the duration parameter is not used actually, so no need to figure it out - iProcessor->AppendNextFrameDuration(duration, currentTimeStamp - iCutInTimeStamp); - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if (iDataFormat == EDataAVC) - { - - TPtr8 ptr(iDataBuffer, iCurrentFrameLength, iBufferLength); - if (!iDecoderSpecificInfoSent) - { - ptr.Set(iDataBuffer + iProcessor->GetDecoderSpecificInfoSize(), - iCurrentFrameLength - iProcessor->GetDecoderSpecificInfoSize(), iBufferLength); - } - - // Store PPS id - iAvcEdit->StoreCurrentPPSId( ptr ); - - if (iNotCodedFrame) - delete iNotCodedFrame; - iNotCodedFrame = 0; - } -#endif - - frameInfo.iRepeatFrame = EFalse; - iFirstColorTransitionFrame = ETrue; // to indicate that iDataBuffer must not be flushed - // in MtroReturnCodedBuffer - } - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if ( iDataFormat == EDataAVC && iTransitionEffect && iStartTransitionColor == EColorTransition && - (iFrameNumber > iFirstIncludedFrameNumber) && iFrameOperation != EDecodeAndWrite) - { - TPtr8 ptr(iDataBuffer, iCurrentFrameLength, iBufferLength); - - if (!iDecoderSpecificInfoSent) - { - ptr.Set(iDataBuffer + iProcessor->GetDecoderSpecificInfoSize(), - iCurrentFrameLength - iProcessor->GetDecoderSpecificInfoSize(), iBufferLength); - } - - if (!(iAvcEdit->IsNALUnitIDR(ptr))) - { - // modify frame number - iAvcEdit->ModifyFrameNumber(ptr, iModifiedFrameNumber++); - PRINT((_L("CVideoProcessor::WriteFrameToTranscoderL() modified frame no. => #%d"), iModifiedFrameNumber - 1)); - } - else - iModifiedFrameNumber = 1; // this frame is IDR, start numbering from zero - } -#endif - - // get timestamp in microseconds - TTimeIntervalMicroSeconds ts = - (iProcessor->GetVideoTimeInMsFromTicks(frameInfo.iTimeStamp, EFalse)) * 1000; - - if (ts <= iPreviousTimeStamp) - { - // adjust timestamp so that its bigger than ts of previous frame - TReal frameRate = iProcessor->GetVideoClipFrameRate(); - VDASSERT(frameRate > 0.0, 106); - TInt64 durationMs = TInt64( ( 1000.0 / frameRate ) + 0.5 ); - durationMs /= 2; // add half the duration of one frame - - ts = TTimeIntervalMicroSeconds( iPreviousTimeStamp.Int64() + durationMs*1000 ); - - frameInfo.iTimeStamp = iProcessor->GetVideoTimeInTicksFromMs( ts.Int64()/1000, EFalse ); - - ts = iProcessor->GetVideoTimeInMsFromTicks(frameInfo.iTimeStamp, EFalse) * 1000; - - PRINT((_L("CVideoProcessor::WriteFrameToTranscoderL() - adjusted timestamp, prev = %d, new = %d"), - I64INT( iPreviousTimeStamp.Int64() ) / 1000, I64INT( ts.Int64() ) / 1000)); - - } - - iFrameInfoArray.Append(frameInfo); - - iPreviousTimeStamp = ts; - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if (iDataFormat == EDataAVC) - { - TPtr8 ptr(iDataBuffer, iCurrentFrameLength, iBufferLength); - // This has to be updated when cutting from beginning ?? - iAvcEdit->ProcessAVCBitStreamL((TDes8&)(ptr), (TInt&)(iCurrentFrameLength), - iProcessor->GetDecoderSpecificInfoSize(), !iDecoderSpecificInfoSent ); - iDataLength = iCurrentFrameLength; - - } -#endif - - iMediaBuffer->Set( TPtrC8(iDataBuffer, iBufferLength), - bt, - iCurrentFrameLength, - aKeyFrame, - ts); - - iDecodePending = ETrue; - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - - - PRINT((_L("CVideoProcessor::WriteFrameToTranscoderL() - transcoder mode is %d"), iTranscoderMode)); - - PRINT((_L("CVideoProcessor::WriteFrameToTranscoderL() - WriteCodedBuffer, frame #%d, timestamp %d ms"), - iFrameNumber, I64INT( ts.Int64() ) / 1000 )); - - PRINT((_L("CVideoProcessor::WriteFrameToTranscoderL() - %d items in queue"), iFrameInfoArray.Count())); - - iTransCoder->WriteCodedBufferL(iMediaBuffer); - -} - - -// --------------------------------------------------------- -// CVideoProcessor::InsertDecoderSpecificInfoL -// Insert AVC dec. config record in the beginning of slice NAL('s) -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::InsertDecoderSpecificInfoL() -{ - - if (iDataFormat == EDataMPEG4) - { - if ( (iDataLength + iDecoderSpecificInfo->Length()) > iBufferLength ) - { - // extend buffer size - TUint newSize = iDataLength + iDecoderSpecificInfo->Length(); - iDataBuffer = (TUint8*) User::ReAllocL(iDataBuffer, newSize); - iBufferLength = newSize; - } - Mem::Copy(iDataBuffer+iDecoderSpecificInfo->Length(), iDataBuffer, iCurrentFrameLength); - Mem::Copy(iDataBuffer, iDecoderSpecificInfo->Des().Ptr(), iDecoderSpecificInfo->Length()); - iCurrentFrameLength += iDecoderSpecificInfo->Length(); - iDataLength += iDecoderSpecificInfo->Length(); - - return; - } - - VDASSERT( iDataFormat == EDataAVC, 182 ); - - // get number of slice NAL's in buffer - TInt frameLen = 0; - TInt numSliceNalUnits = 0; - TUint8* frameLenPtr = iDataBuffer; - - while (frameLen < iCurrentFrameLength) - { - TInt nalLen = 0; - - nalLen = (frameLenPtr[0] << 24) + (frameLenPtr[1] << 16) + - (frameLenPtr[2] << 8) + frameLenPtr[3] + 4; // +4 for length field - - frameLenPtr += nalLen; - frameLen += nalLen; - numSliceNalUnits++; - } - - // get no. of SPS & PPS - - TUint8* ptr = const_cast(iDecoderSpecificInfo->Des().Ptr()); - - TInt index = 4; // Skip version and length information - ptr[index] |= 0x03; // set no. bytes used for length to 4 - - index++; - TInt numSPS = ptr[index] & 0x1f; - - index++; - - // Loop all SPS units - for (TInt i = 0; i < numSPS; ++i) - { - TInt SPSSize = (ptr[index] << 8) + ptr[index + 1]; - index += 2; - index += SPSSize; - } - TInt numPPS = ptr[index]; - - // Align at 32-bit boundrary - TInt payLoadLen = iCurrentFrameLength + iDecoderSpecificInfo->Length(); - TInt alignmentBytes = (payLoadLen % 4 != 0) * ( 4 - (payLoadLen % 4) ); - - // get needed buffer length - TInt minBufLen = iCurrentFrameLength + iDecoderSpecificInfo->Length() + alignmentBytes + - ( (numSliceNalUnits + numSPS + numPPS) * 8 ) + 4; - - // ReAllocate buffer - if (iBufferLength < minBufLen) - { - iDataBuffer = (TUint8*) User::ReAllocL(iDataBuffer, minBufLen); - iBufferLength = minBufLen; - - PRINT((_L("CVideoProcessor::XXX() reallocated databuffer, new length = %d"),iBufferLength)); - } - - // move slice NAL's the amount of DCR length - Mem:: Copy(iDataBuffer + iDecoderSpecificInfo->Length(), iDataBuffer, iCurrentFrameLength); - - // copy SPS/PPS data in the beginning - Mem:: Copy(iDataBuffer, iDecoderSpecificInfo->Des().Ptr(), iDecoderSpecificInfo->Length()); - - iCurrentFrameLength += iDecoderSpecificInfo->Length(); - -} - -// --------------------------------------------------------- -// CVideoProcessor::GetModeChangeL -// Determine need to compr. domain transcoding -// (other items were commented in a header). -// --------------------------------------------------------- -// -TBool CVideoProcessor::GetModeChangeL() -{ - - TInt videoClipNumber = iProcessor->GetVideoClipNumber(); - - // iProcessor->GetModeTranslationMPEG4() returns the overall decision for inserted MPEG4 clips - - TVedTranscodeFactor tFact = iProcessor->GetVideoClipTranscodeFactor(videoClipNumber); - - TBool fModeChanged = EFalse; - - if (iProcessor->GetOutputVideoType() == EVedVideoTypeMPEG4SimpleProfile) //MPEG4 - { - - switch (tFact.iStreamType) - { - case EVedVideoBitstreamModeUnknown: - case EVedVideoBitstreamModeMPEG4Regular: - case EVedVideoBitstreamModeMPEG4Resyn: - fModeChanged = EFalse; // already the target mode - break; - case EVedVideoBitstreamModeH263: - fModeChanged = ETrue; - break; - case EVedVideoBitstreamModeMPEG4ShortHeader: - default: // other MPEG4 modes - // if all the MPEG4 (note: it is also considered as MPEG4 type) have the same mode - // no need to do the mode translation - fModeChanged = iProcessor->GetModeTranslationMpeg4() ? ETrue: EFalse; - break; - } - - } - else if ( (iProcessor->GetOutputVideoType() == EVedVideoTypeH263Profile0Level10) || - (iProcessor->GetOutputVideoType() == EVedVideoTypeH263Profile0Level45) ) - { - - if (tFact.iStreamType == EVedVideoBitstreamModeH263 || - tFact.iStreamType == EVedVideoBitstreamModeMPEG4ShortHeader|| - tFact.iStreamType ==EVedVideoBitstreamModeUnknown) - { - fModeChanged = EFalse; - } - else - { - fModeChanged = ETrue; - } - } - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - else if (iProcessor->GetOutputVideoType() == EVedVideoTypeAVCBaselineProfile) - fModeChanged = EFalse; -#endif - - else // EVedVideoTypeNoVideo - { - User::Leave(KErrNotSupported); - } - - return fModeChanged; - -} - -// --------------------------------------------------------- -// CVideoProcessor::DecodeFrameL -// Decode frame in iDataBuffer using vedh263d -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::DecodeFrameL(TInt aOperation, TBool aModeChanged, TInt& aFrameSizeInBytes) -{ - - VDASSERT(iDataFormat == EDataH263 || iDataFormat == EDataMPEG4, 136); - - // go into the decoder - TVedColorEffect vedEffect = iProcessor->GetColorEffect(); - CVedH263Dec::TColorEffect effect = (vedEffect == EVedColorEffectNone) ? - CVedH263Dec::EColorEffectNone : ((vedEffect == EVedColorEffectBlackAndWhite) ? CVedH263Dec::EColorEffectBlackAndWhite : CVedH263Dec::EColorEffectToning); - - vdeDecodeParamters_t decodeParams; - - // Assign the ColorTone value of the ColorTone - // U,V value for the color toning - TInt colorToneU; - TInt colorToneV; - iProcessor->GetColorTone((TInt&)colorToneU, (TInt&)colorToneV); - - decodeParams.aColorToneU = colorToneU; - decodeParams.aColorToneV = colorToneV; - decodeParams.aColorEffect = effect; - decodeParams.aFrameOperation = aOperation; - decodeParams.aGetDecodedFrame = EFalse; //getDecodedFrame; // no need to get YUV - decodeParams.aSMSpeed = iProcessor->GetSlowMotionSpeed(); - - TInt trD = iProcessor->GetTrPrevOrig(); - TInt trP = iProcessor->GetTrPrevNew(); - - decodeParams.aTrD = &trD; - decodeParams.aTrP = &trP; - decodeParams.aVideoClipNumber = iProcessor->GetVideoClipNumber(); - - TVedTranscodeFactor tFact = iProcessor->GetVideoClipTranscodeFactor(decodeParams.aVideoClipNumber); - - decodeParams.streamMode = tFact.iStreamType; - decodeParams.iTimeIncrementResolution = tFact.iTRes; - decodeParams.aGetVideoMode = EFalse; - decodeParams.aOutputVideoFormat = iProcessor->GetOutputVideoType(); - - decodeParams.fModeChanged = aModeChanged; - decodeParams.fHaveDifferentModes = iProcessor->GetModeTranslationMpeg4() ? ETrue: EFalse; - /* Color Toning */ - decodeParams.aFirstFrameQp = iFirstFrameQp; - - // : Optimisation - If the frame is to be encoded, there is no need - // to process it using vedh263d in all cases, for example when - // doing end transition. In start transition case it has to be done - // so that compressed domain transcoding can continue after transition - - // before decoding, set the time infomation in the decoder parameters - decodeParams.aMPEG4TimeStamp = iMPEG4Timer->GetMPEG4TimeStampPtr(); - decodeParams.aMPEG4TargetTimeResolution = iMPEG4Timer->GetMPEG4TimeResolutionPtr(); - - decodeParams.vosHeaderSize = 0; - - // +3 includes the next PSC or EOS in the bit buffer - TPtrC8 inputPtr(iDataBuffer, iCurrentFrameLength + (iDataFormat==EDataH263 ? KH263StartCodeLength : KMPEG4StartCodeLength)); - - // check output buffer size & reallocate if its too small - if ( TReal(iOutVideoFrameBufferLength) < TReal(iCurrentFrameLength) * 1.5 ) - { - TInt newLen = TInt( TReal(iCurrentFrameLength) * 1.5 ); - - iOutVideoFrameBuffer = (TUint8*) User::ReAllocL(iOutVideoFrameBuffer, newLen); - iOutVideoFrameBufferLength = newLen; - - PRINT((_L("CVideoProcessor::DecodeFrameL() reallocated output buffer, new size = %d"), - iOutVideoFrameBufferLength)); - } - - TPtr8 outputPtr(iOutVideoFrameBuffer, 0, iOutVideoFrameBufferLength); - - TInt frameSize = 0; - TBool wasFirstFrame = iFirstFrameFlag; // need to save the value since it may be changed inside - iDecoder->DecodeFrameL(inputPtr, outputPtr, iFirstFrameFlag, frameSize, &decodeParams); - - if (frameSize > (TInt)iCurrentFrameLength) - { - // decoder used more data than was in the buffer => corrupted bitstream - PRINT((_L("CVideoProcessor::DecodeFrameL() decoder used more data than was in the buffer => corrupted bitstream"))); - User::Leave( KErrCorrupt ); - } - - aFrameSizeInBytes = outputPtr.Length(); - - /* record first frame QP */ - if ((iFrameNumber==0) && wasFirstFrame) - { - iFirstFrameQp = decodeParams.aFirstFrameQp; - - if (iProcessor->GetOutputVideoType() == EVedVideoTypeMPEG4SimpleProfile) - { - PRINT((_L("CVideoProcessor::DecodeFrameL() save VOS header, size %d"), decodeParams.vosHeaderSize)); - // sync the vol headers - if ( decodeParams.vosHeaderSize > iOutputVolHeader->Des().MaxLength() ) - { - delete iOutputVolHeader; - iOutputVolHeader = NULL; - iOutputVolHeader = HBufC8::NewL(decodeParams.vosHeaderSize); - } - iOutputVolHeader->Des().Copy( outputPtr.Ptr(), decodeParams.vosHeaderSize ); - } - } - - PRINT((_L("CVideoProcessor::DecodeFrameL() out"))); -} - -// --------------------------------------------------------- -// CVideoProcessor::CreateAndInitializeTranscoderL -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::CreateAndInitializeTranscoderL(TVedVideoType aInputType, CTRTranscoder::TTROperationalMode aMode) -{ - - PRINT((_L("CVideoProcessor::CreateAndInitializeTranscoderL() begin"))); - - VDASSERT(iTransCoder == 0, 27); - - iTransCoder = CTRTranscoder::NewL(*this); - - TBufC8<256> inputMime; - -// TInt volLength = 0; - TInt outputBufferSize = 0; - iInputMPEG4ProfileLevelId = 0; - - if (aInputType == EVedVideoTypeMPEG4SimpleProfile) - { - // Get the VOL header from the frame data - CVedVolReader* reader = CVedVolReader::NewL(); - CleanupStack::PushL(reader); - // Get pointer to the frame data - TPtrC8 inputPtr(iDecoderSpecificInfo->Des()); - reader->ParseVolHeaderL((TDesC8&) inputPtr); - - iInputMPEG4ProfileLevelId = reader->ProfileLevelId(); - - iInputTimeIncrementResolution = reader->TimeIncrementResolution(); - - iInputStreamMode = reader->BitstreamMode(); - - switch (iInputMPEG4ProfileLevelId) - { - case 8: - inputMime = _L8("video/mp4v-es; profile-level-id=8"); - outputBufferSize = KMaxCodedPictureSizeMPEG4QCIF / 2; - break; - - case 9: - inputMime = _L8("video/mp4v-es; profile-level-id=9"); - outputBufferSize = KMaxCodedPictureSizeMPEG4L0BQCIF / 2; - break; - - case 1: - inputMime = _L8("video/mp4v-es; profile-level-id=1"); - outputBufferSize = KMaxCodedPictureSizeMPEG4QCIF / 2; - break; - - case 2: - inputMime = _L8("video/mp4v-es; profile-level-id=2"); - outputBufferSize = KMaxCodedPictureSizeMPEG4CIF / 2; - break; - - case 3: - inputMime = _L8("video/mp4v-es; profile-level-id=3"); - outputBufferSize = KMaxCodedPictureSizeMPEG4CIF / 2; - break; - - case 4: - inputMime = _L8("video/mp4v-es; profile-level-id=4"); - outputBufferSize = KMaxCodedPictureSizeVGA / 2; - break; - - default: - inputMime = _L8("video/mp4v-es; profile-level-id=8"); - outputBufferSize = KMaxCodedPictureSizeMPEG4QCIF / 2; - break; - } - -// volLength = reader->HeaderSize(); - CleanupStack::PopAndDestroy(reader); - } - - else if (aInputType == EVedVideoTypeH263Profile0Level10) - { - inputMime = _L8("video/H263-2000; profile=0; level=10"); - outputBufferSize = KMaxCodedPictureSizeQCIF / 2; - } - - else if (aInputType == EVedVideoTypeH263Profile0Level45) - { - inputMime = _L8("video/H263-2000; profile=0; level=45"); - outputBufferSize = KMaxCodedPictureSizeQCIF / 2; - } - - else if (aInputType == EVedVideoTypeAVCBaselineProfile) - { - // get input avc level - VDASSERT( iAvcEdit != 0, 181 ); - VDASSERT( iDecoderSpecificInfo, 181 ); - - TPtr8 info = iDecoderSpecificInfo->Des(); - User::LeaveIfError( iAvcEdit->GetLevel(info, iInputAVCLevel) ); - - switch (iInputAVCLevel) - { - case 10: - inputMime = _L8("video/H264; profile-level-id=42800A"); - outputBufferSize = KMaxCodedPictureSizeAVCLevel1 / 2; - break; - - case 101: - inputMime = _L8("video/H264; profile-level-id=42900B"); - outputBufferSize = KMaxCodedPictureSizeAVCLevel1B / 2; - break; - - case 11: - inputMime = _L8("video/H264; profile-level-id=42800B"); - outputBufferSize = KMaxCodedPictureSizeAVCLevel1_1 / 2; - break; - - case 12: - inputMime = _L8("video/H264; profile-level-id=42800C"); - outputBufferSize = KMaxCodedPictureSizeAVCLevel1_2 / 2; - break; - - // NOTE: Levels 1.3 and 2 are enabled for testing purposes, - // to be removed - case 13: - inputMime = _L8("video/H264; profile-level-id=42800D"); - outputBufferSize = KMaxCodedPictureSizeAVCLevel1_3 / 2; - break; - - case 20: - inputMime = _L8("video/H264; profile-level-id=428014"); - outputBufferSize = KMaxCodedPictureSizeAVCLevel2 / 2; - break; - - //WVGA task - case 21: - inputMime = _L8("video/H264; profile-level-id=428015"); - outputBufferSize = KMaxCodedPictureSizeAVCLevel2_1 / 2; - break; - - case 22: - inputMime = _L8("video/H264; profile-level-id=428016"); - outputBufferSize = KMaxCodedPictureSizeAVCLevel2_2 / 2; - break; - - case 30: - inputMime = _L8("video/H264; profile-level-id=42801E"); - outputBufferSize = KMaxCodedPictureSizeAVCLevel3 / 2; - break; - - case 31: - inputMime = _L8("video/H264; profile-level-id=42801F"); - outputBufferSize = KMaxCodedPictureSizeAVCLevel3_1 / 2; - break; - - default: - User::Leave(KErrNotSupported); - break; - } - } - - else - User::Leave(KErrNotSupported); - - if ( !(iTransCoder->SupportsInputVideoFormat(inputMime) ) ) - { - User::Leave(KErrNotSupported); - } - - - // default framerate is 15 fps - TReal frameRate = 15.0; - - iOutputBitRate = 64000; - - if ( aMode == CTRTranscoder::EFullTranscoding ) - { - // get output mime type - SetOutputVideoCodecL(iProcessor->GetOutputVideoMimeType()); - - if ( !(iTransCoder->SupportsOutputVideoFormat(iOutputMimeType) ) ) - { - User::Leave(KErrNotSupported); - } - - // check output resolution - TSize outputResolution = iProcessor->GetMovieResolution(); - - if ( (outputResolution.iWidth > iMaxOutputResolution.iWidth) || (outputResolution.iHeight > iMaxOutputResolution.iHeight)) - { - if ( iArbitrarySizeAllowed ) // This is for future-proofness. Currently the checking of standard sizes below overrules this one - { - if ( outputResolution.iWidth * outputResolution.iHeight > iMaxOutputResolution.iWidth*iMaxOutputResolution.iHeight ) - { - PRINT((_L("CVideoProcessor::CreateAndInitializeTranscoderL() too high resolution requested"))); - User::Leave( KErrNotSupported ); - } - } - else - { - PRINT((_L("CVideoProcessor::CreateAndInitializeTranscoderL() incompatible or too high resolution requested"))); - User::Leave( KErrNotSupported ); - } - } - - // check size. For now only standard sizes are allowed - if ( (outputResolution != KVedResolutionSubQCIF) && - (outputResolution != KVedResolutionQCIF) && - (outputResolution != KVedResolutionCIF) && - (outputResolution != KVedResolutionQVGA) && - (outputResolution != KVedResolutionVGA16By9) && - (outputResolution != KVedResolutionVGA) && - //WVGA task - (outputResolution != KVedResolutionWVGA) ) - { - User::Leave( KErrArgument ); - } - - // check output frame rate - TReal movieFrameRate = iProcessor->GetMovieFrameRate(); - - if ( movieFrameRate > 0.0 ) - { - if ( movieFrameRate <= iMaxOutputFrameRate ) - { - frameRate = TReal32(movieFrameRate); - } - else - { - frameRate = iMaxOutputFrameRate; - } - } - - // check output bitrate - TInt movieBitRate = iProcessor->GetMovieVideoBitrate(); - TInt standardBitRate = iProcessor->GetMovieStandardVideoBitrate(); - - if ( movieBitRate > 0 ) - { - if ( movieBitRate <= iMaxOutputBitRate ) - { - iOutputBitRate = movieBitRate; - } - else - { - iOutputBitRate = iMaxOutputBitRate; - } - } - else if ( standardBitRate > 0 ) - { - if ( standardBitRate <= iMaxOutputBitRate ) - { - iOutputBitRate = standardBitRate; - } - else - { - iOutputBitRate = iMaxOutputBitRate; - } - } - } - else - { - iOutputMimeType = KNullDesC8; - } - - TTRVideoFormat videoInputFormat; - TTRVideoFormat videoOutputFormat; - - if (!iThumbnailMode) - { - videoInputFormat.iSize = iProcessor->GetVideoClipResolution(); - videoOutputFormat.iSize = iProcessor->GetMovieResolution(); - } - else - { - videoInputFormat.iSize = videoOutputFormat.iSize = TSize(iVideoWidth, iVideoHeight); - } - - videoInputFormat.iDataType = CTRTranscoder::ETRDuCodedPicture; - - if (aMode == CTRTranscoder::EFullTranscoding) - videoOutputFormat.iDataType = CTRTranscoder::ETRDuCodedPicture; - else - videoOutputFormat.iDataType = CTRTranscoder::ETRYuvRawData420; - - - iTransCoder->OpenL( this, - aMode, - inputMime, - iOutputMimeType, - videoInputFormat, - videoOutputFormat, - EFalse ); - - - iTransCoder->SetVideoBitRateL(iOutputBitRate); - - if (!iThumbnailMode) - { - // check framerate: target framerate cannot be larger than source framerate - TReal inputFR = iProcessor->GetVideoClipFrameRate(); - if ( inputFR <= 15.0 ) - { - inputFR = 15.0; - } - else - { - inputFR = 30.0; - } - if (frameRate > inputFR) - frameRate = inputFR; - } - - iTransCoder->SetFrameRateL(frameRate); - iTransCoder->SetChannelBitErrorRateL(0.0); - - // dummy - TTRVideoCodingOptions codingOptions; - codingOptions.iSyncIntervalInPicture = iProcessor->GetSyncIntervalInPicture(); - codingOptions.iMinRandomAccessPeriodInSeconds = (TInt) (1.0 / iProcessor->GetRandomAccessRate()); - codingOptions.iDataPartitioning = EFalse; - codingOptions.iReversibleVLC = EFalse; - codingOptions.iHeaderExtension = 0; - - iTransCoder->SetVideoCodingOptionsL(codingOptions); - - TSize targetSize; - if (!iThumbnailMode) - targetSize = iProcessor->GetMovieResolution(); - else - targetSize = TSize(iVideoWidth, iVideoHeight); - - iTransCoder->SetVideoPictureSinkOptionsL(targetSize, this); - - iTransCoder->EnableEncoder(EFalse); - iTransCoder->EnablePictureSink(ETrue); - iTranscoderMode = EDecodeOnly; - - // set init. data - TPtrC8 initData; - if (aInputType == EVedVideoTypeMPEG4SimpleProfile || - aInputType == EVedVideoTypeAVCBaselineProfile) - { - initData.Set(iDecoderSpecificInfo->Des()); - } - else - initData.Set(iDataBuffer, iCurrentFrameLength); - - iDecoderSpecificInfoSent = EFalse; - - iTransCoder->SetDecoderInitDataL( initData ); - - if (!iThumbnailMode) - { - // allocate output bitstream buffer for processing with vedh263d - VDASSERT( outputBufferSize != 0, 52 ); - iOutVideoFrameBuffer = (TUint8*) User::AllocL(outputBufferSize); - iOutVideoFrameBufferLength = outputBufferSize; - } - - iTranscoderInitPending = ETrue; - - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - - - iTransCoder->InitializeL(); - - // Get processing time estimate from transcoder, divide it by the framerate to get processing time per frame - // and then multiply it by 2 to get some safety margin and by unit conversion factor 1000000. - // The delay is used to determine if a frame was skipped, hence there should be some margin. -#ifdef __WINSCW__ - iMaxEncodingDelay = 5000000; // emulator can be really slow, use 5 seconds timeout -#else - iMaxEncodingDelay = (TUint)(2*1000000*iTransCoder->EstimateTranscodeTimeFactorL(videoInputFormat,videoOutputFormat)/frameRate); -#endif - - iMaxItemsInProcessingQueue = iTransCoder->GetMaxFramesInProcessing(); - - PRINT((_L("CVideoProcessor::CreateAndInitializeTranscoderL() end"))); -} - -// --------------------------------------------------------- -// CVideoProcessor::MtroInitializeComplete -// Called by transcoder to indicate init. completion -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::MtroInitializeComplete(TInt aError) -{ - - TInt error = aError; - TInt outputTimeIncrementResolution = KDefaultTimeIncrementResolution; - - PRINT((_L("CVideoProcessor::MtroInitializeComplete() error = %d"), aError)); - - if ( !iThumbnailMode && (aError == KErrNone) && - ( (iProcessor->GetOutputVideoType() == EVedVideoTypeMPEG4SimpleProfile) -#ifdef VIDEOEDITORENGINE_AVC_EDITING - || (iProcessor->GetOutputVideoType() == EVedVideoTypeAVCBaselineProfile) -#endif - ) ) - { - PRINT((_L("CVideoProcessor::MtroInitializeComplete() calling GetCodingStandardSpecificInitOutputLC"))); - - // get & save vol header from encoder - TRAP(error, - { - iOutputVolHeader = iTransCoder->GetCodingStandardSpecificInitOutputLC(); - CleanupStack::Pop(); - }); - - iOutputVolHeaderWritten = EFalse; - - if ( error == KErrNone ) - { - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if (iProcessor->GetOutputVideoType() == EVedVideoTypeAVCBaselineProfile) - { - // Check if we need to use encoder - // : Are there any other cases where encoder is used _ - if ( iFullTranscoding || iTransitionEffect || - iProcessor->GetStartCutTime() != TTimeIntervalMicroSeconds(0) ) - { - HBufC8* outputAVCHeader = 0; - // is the max. size of AVCDecoderConfigurationRecord known here ?? - TRAP(error, outputAVCHeader = (HBufC8*) HBufC8::NewL(16384)); - - if (error == KErrNone) - { - TPtr8 ptr = outputAVCHeader->Des(); - - // parse header & convert it to AVCDecoderConfigurationRecord -format - TRAP(error, iAvcEdit->ConvertAVCHeaderL(*iOutputVolHeader, ptr)); - - if (error == KErrNone) - { - TRAP(error, iAvcEdit->SaveAVCDecoderConfigurationRecordL(ptr, ETrue)); - } - } - if (outputAVCHeader) - delete outputAVCHeader; - } - - iEncodeUntilIDR = 0; - if ( iStartOfClipTransition != 0 || - iProcessor->GetStartCutTime() != TTimeIntervalMicroSeconds(0) ) - { - // we need to use encoder at the beginning, now determine - // if we have to encode frames after cut / transition until - // input frame is IDR - iEncodeUntilIDR = iAvcEdit->EncodeUntilIDR(); - } - } - else -#endif - { - - VDASSERT(iOutputVolHeader, 49); - - // get time increment resolution using vol reader - CVedVolReader* reader = NULL; - TRAP( error, reader = CVedVolReader::NewL() ); - - if ( error == KErrNone ) - { - TRAP( error, reader->ParseVolHeaderL( (TDesC8&) *iOutputVolHeader ) ); - if (error == KErrNone) - { - outputTimeIncrementResolution = reader->TimeIncrementResolution(); - } - delete reader; - } - } - - } - } - - if (error == KErrNone) - { - // create MPEG-4 timing instance - TRAP(error, iMPEG4Timer = CMPEG4Timer::NewL(iProcessor, outputTimeIncrementResolution)); - } - - // enable pausing - if ( ((iFullTranscoding) - || (iProcessor->GetStartCutTime() > 0)) - && (iStartOfClipTransition == 0) - && (iEndOfClipTransition == 0) ) - { - // safe to enable pausing during transcoding: - // only when doing full transcoding or cutting from the beginning, but not if transitions - // rules out e.g. thumbnails, and codec-free cases - iTransCoder->EnablePausing(ETrue); - } - - VDASSERT(iTranscoderInitPending, 28); - // complete request - TRequestStatus *status = &iStatus; - User::RequestComplete(status, error); - -} - -// --------------------------------------------------------- -// CVideoProcessor::MtroFatalError -// Called by transcoder to indicate a fatal error -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::MtroFatalError(TInt aError) -{ - PRINT((_L("CVideoProcessor::MtroFatalError() %d"), aError)); - - if (iFullTranscoding || iThumbnailMode || iTransitionEffect || (iProcessor->GetStartCutTime() > 0)) - { - // ok, this is fatal, continue the method - PRINT((_L("CVideoProcessor::MtroFatalError() transcoder is in use, this is fatal"))); - } - else - { - // transcoder not in use, ignore - PRINT((_L("CVideoProcessor::MtroFatalError() transcoder not in use, ignore"))); - return; - } - - // stop decoding - Stop(); - - if (!iThumbnailMode) - iMonitor->Error(aError); - else - iProcessor->NotifyThumbnailReady(aError); - -} - -// --------------------------------------------------------- -// CVideoProcessor::MtroSuspend -// Suspends processing -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::MtroSuspend() -{ - - PRINT((_L("CVideoProcessor::MtroSuspend()"))); - - if (iProcessingComplete || (!iProcessor->NeedTranscoderAnyMore())) - { - PRINT((_L("CVideoProcessor::MtroSuspend(), this clip done or no video at all to process any more, ignore"))); - return; - } - - Cancel(); - iDecoding = EFalse; - iDecodePending = EFalse; - iDecodingSuspended = EFalse; - - if (iTimer) - iTimer->CancelTimer(); - - iProcessor->SuspendProcessing(); - - // flush input queue - if (iBlock) - iQueue->ReturnBlock(iBlock); - iBlock = iQueue->ReadBlock(); - while (iBlock) - { - iQueue->ReturnBlock(iBlock); - iBlock = iQueue->ReadBlock(); - } - iBlockPos = 0; - - iTranscoderMode = EUndefined; // force to reset the mode when writing the next picture - -} - -// --------------------------------------------------------- -// CVideoProcessor::MtroResume -// Re-starts processing after pause -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::MtroResume() -{ - PRINT((_L("CVideoProcessor::MtroResume()"))); - - if (iProcessingComplete) - { - PRINT((_L("CVideoProcessor::MtroResume(), processing of this clip completed, continue"))); - // fake RunL with this flag - iDecoding = ETrue; - if (!IsActive()) - { - // Make us active - PRINT((_L("CVideoProcessor::MtroResume() set active"))); - SetActive(); - iStatus = KRequestPending; - } - } - - if (!iProcessor->NeedTranscoderAnyMore()) - { - PRINT((_L("CVideoProcessor::MtroResume(), no video to process any more, ignore"))); - return; - } - - // flush frame info array and cancel timer - if (iTimer) - iTimer->CancelTimer(); - iFrameInfoArray.Reset(); - - Start(); - - TInt error = iProcessor->ResumeProcessing(iFrameNumber, iLastWrittenFrameNumber); - if (error != KErrNone) - iMonitor->Error(error); - - iNumberOfFrames = iProcessor->GetClipNumberOfFrames(); - iPreviousTimeStamp = TTimeIntervalMicroSeconds(-1); - - iDataLength = iCurrentFrameLength = 0; - iDataFormat = EDataUnknown; - - iStreamEnd = iStreamEndRead = 0; - - // reset also delayed buffer; it will need to be anyway re-read - delete iDelayedBuffer; - iDelayedBuffer = 0; - iDelayedWrite = EFalse; - - PRINT((_L("CVideoProcessor::MtroResume() - iFrameNumber = %d"), iFrameNumber)); - - if (!IsActive()) - { - // Make us active - PRINT((_L("CVideoProcessor::MtroResume() set active"))); - SetActive(); - iStatus = KRequestPending; - } - - PRINT((_L("CVideoProcessor::MtroResume() out"))); - -} - -// --------------------------------------------------------- -// CVideoProcessor::MtroReturnCodedBuffer -// Called by transcoder to return bitstream buffer -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::MtroReturnCodedBuffer(CCMRMediaBuffer* aBuffer) -{ - - VDASSERT(aBuffer == iMediaBuffer, 29); - - iIsThumbFrameBeingCopied = EFalse; - iDecoderSpecificInfoSent = ETrue; - -#ifdef _DEBUG - TTimeIntervalMicroSeconds ts = aBuffer->TimeStamp(); - - PRINT((_L("CVideoProcessor::MtroReturnCodedBuffer() timeStamp = %d ms"), - I64INT( ts.Int64() ) / 1000 )); - -#endif - - if (!iFirstColorTransitionFrame) - { - // Throw away the data for this frame: - VDASSERT(iDataLength >= iCurrentFrameLength,4); - Mem::Copy(iDataBuffer, iDataBuffer + iCurrentFrameLength, - iDataLength - iCurrentFrameLength); - iDataLength = iDataLength - iCurrentFrameLength; - iCurrentFrameLength = 0; - } - - if (!iThumbnailMode) - { - - // check if the next frame in queue is waiting to be encoded - // and start timer to detect possible frameskip - if ( IsNextFrameBeingEncoded() ) - { - if ( !iTimer->IsPending() ) - iTimer->SetTimer( TTimeIntervalMicroSeconds32( iMaxEncodingDelay ) ); - } - - if (iFrameInfoArray.Count() >= iMaxItemsInProcessingQueue) - { - PRINT((_L("CVideoProcessor::MtroReturnCodedBuffer() - %d items in queue, suspend decoding"), - iFrameInfoArray.Count() )); - - iDecodingSuspended = ETrue; - - return; - } - - VDASSERT(IsActive(), 40); - VDASSERT(iDecodePending, 41); - - // complete request - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } - else if (iDataFormat == EDataAVC) - { - - VDASSERT(IsActive(), 40); - VDASSERT(iDecodePending, 41); - - // NOTE: it would make sense to call AsyncStopL() here, - // but at least in WINSCW it didn't have any effect - //if (iThumbFramesToWrite == 0) - //{ - //iTransCoder->AsyncStopL(); - //iTranscoderStarted = EFalse; - //} - - if (iStatus == KRequestPending) - { - PRINT((_L("CVideoProcessor::MtroReturnCodedBuffer() - completing request"))); - // complete request - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } - } -} - -// --------------------------------------------------------- -// CVideoProcessor::MtroSetInputFrameRate -// Called by transcoder to request inout framerate -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::MtroSetInputFrameRate(TReal& aRate) -{ - TReal rate = iProcessor->GetVideoClipFrameRate(); - - if ( rate <= 15.0 ) - { - rate = 15.0; - } - else - { - rate = 30.0; - } - - aRate = rate; -} - -// --------------------------------------------------------- -// CVideoProcessor::MtroAsyncStopComplete -// Called by transcoder after async. stop is complete -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::MtroAsyncStopComplete() -{ - PRINT((_L("CVideoProcessor::MtroAsyncStopComplete()"))); -} - -// --------------------------------------------------------- -// CVideoProcessor::MtroPictureFromTranscoder -// Called by transcoder to return a decoded picture -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::MtroPictureFromTranscoder(TTRVideoPicture* aPicture) -{ - - TTimeIntervalMicroSeconds decodedTs = aPicture->iTimestamp; - - PRINT((_L("CVideoProcessor::MtroPictureFromTranscoder(), timestamp %d ms"), - I64INT( decodedTs.Int64() ) / 1000 )); - - if (iThumbnailMode) - { - iThumbDecoded = ETrue; - - // handle thumbnail - HandleThumbnailFromTranscoder(aPicture); - - return; - } - - // search the decoded frame from list - TInt index; - for (index = 0; index < iFrameInfoArray.Count(); ) - { - PRINT((_L("CVideoProcessor::MtroPictureFromTranscoder(), checking frame with index %d"), index)); - - TTimeIntervalMicroSeconds ts = - (iProcessor->GetVideoTimeInMsFromTicks(iFrameInfoArray[index].iTimeStamp, EFalse)) * 1000; - - if (ts < decodedTs && ( (iFrameInfoArray[index].iEncodeFrame == EFalse) || - (iFrameInfoArray[index].iTranscoderMode == EFullWithIM && - iFrameInfoArray[index].iModificationApplied == 0) ) ) - { - // if there are decode-only or transcoding w/intermediate modification - // frames in the queue before this one, remove those - PRINT((_L("CVideoProcessor::MtroPictureFromTranscoder(), removing frame with timestamp %d ms"), - I64INT( ts.Int64() ) / 1000 )); - - iFrameInfoArray.Remove(index); - // don't increment index - continue; - } - - if (ts == decodedTs) - { - PRINT((_L("CVideoProcessor::MtroPictureFromTranscoder(), found decoded frame at index %d"), index)); - break; - } - - index++; - } - - // If decoded frame is unexpected, i.e. it is not found from book-keeping, - // or it is not an intermediate modification frame, return frame here - // and continue - if ( index >= iFrameInfoArray.Count() || - ( iFrameInfoArray[index].iEncodeFrame == 1 && - iFrameInfoArray[index].iTranscoderMode != EFullWithIM ) ) - { - PRINT((_L("CVideoProcessor::MtroPictureFromTranscoder(), unexpected decoded frame, iTranscoderMode %d"), iTranscoderMode)); - // send picture back to transcoder - TInt error = KErrNone; - TRAP( error, iTransCoder->SendPictureToTranscoderL(aPicture) ); - if ( error != KErrNone ) - { - iMonitor->Error(error); - } - return; - } - - if (iFrameInfoArray[index].iEncodeFrame == EFalse) - { - // handle decode-only frame - HandleDecodeOnlyFrameFromTranscoder(aPicture, index); - return; - } - - // check color effect - TInt colorEffect = TColorEffect2TInt( iProcessor->GetColorEffect() ); - if (colorEffect != 0/*None*/) - { - // U,V value for the color toning - TInt colorToneU; - TInt colorToneV; - iProcessor->GetColorTone((TInt&)colorToneU, (TInt&)colorToneV); - // apply color effect - ApplySpecialEffect( colorEffect, const_cast(aPicture->iRawData->Ptr()), colorToneU, colorToneV ); - - } - - if(iFrameInfoArray[index].iTransitionFrame == 1) - { - // apply transition to frame - HandleTransitionFrameFromTranscoder(aPicture, index); - } - - iFrameInfoArray[index].iModificationApplied = ETrue; - - // send picture back to transcoder for encoding - TInt error = KErrNone; - TRAP( error, iTransCoder->SendPictureToTranscoderL(aPicture) ); - if ( error != KErrNone ) - { - iMonitor->Error(error); - return; - } - - // check if the next frame is waiting to be encoded, set timer if so - if ( IsNextFrameBeingEncoded() ) - { - if ( !iTimer->IsPending() ) - iTimer->SetTimer( TTimeIntervalMicroSeconds32( iMaxEncodingDelay ) ); - } - -} - - -// --------------------------------------------------------- -// CVideoProcessor::HandleThumbnailFromTranscoder -// Handle thumbnail frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::HandleThumbnailFromTranscoder(TTRVideoPicture* aPicture) -{ - - TInt error = KErrNone; - - PRINT((_L("CVideoProcessor::HandleThumbnailFromTranscoder() begin"))); - - if (iProcessingComplete) - { - // if requested thumbnail has been done already, - // just release picture and return - PRINT((_L("CVideoProcessor::HandleThumbnailFromTranscoder(), thumb already finished, returning"))); - - TRAP( error, iTransCoder->SendPictureToTranscoderL(aPicture) ); - if ( error != KErrNone ) - { - iMonitor->Error(error); - return; - } - return; - } - - TInt yuvLength = iVideoWidth*iVideoHeight; - yuvLength += (yuvLength >> 1); - // copy to iFrameBuffer - Mem::Copy(iFrameBuffer, aPicture->iRawData->Ptr(), yuvLength); - - // release picture - TRAP( error, iTransCoder->SendPictureToTranscoderL(aPicture) ); - if ( error != KErrNone ) - { - iProcessor->NotifyThumbnailReady(error); - return; - } - - VDASSERT(iDecodePending, 33); - VDASSERT(IsActive(), 150); - - if (iStatus == KRequestPending) - { - - PRINT((_L("CVideoProcessor::HandleThumbnailFromTranscoder(), complete request"))); - // complete request - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } - - PRINT((_L("CVideoProcessor::HandleThumbnailFromTranscoder() end"))); -} - -// --------------------------------------------------------- -// CVideoProcessor::HandleDecodeOnlyFrameFromTranscoder -// Handle decode-only frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::HandleDecodeOnlyFrameFromTranscoder(TTRVideoPicture* aPicture, TInt aIndex) -{ - - VDASSERT(iFrameInfoArray[aIndex].iTranscoderMode == EDecodeOnly, 43); - - if ( iFrameInfoArray[aIndex].iTransitionFrame && - iFrameInfoArray[aIndex].iTransitionPosition == EPositionEndOfClip ) - { - if ( iEndTransitionColor == EColorTransition ) - { - // Save decoded frame to file - - TSize a = iProcessor->GetMovieResolution(); - TInt yuvLength = a.iWidth*a.iHeight; - yuvLength += (yuvLength>>1); - TPtr8 ptr(0,0); - TUint8* tmpBuf=0; - - ptr.Set( *aPicture->iRawData ); - tmpBuf = const_cast(aPicture->iRawData->Ptr()); - - TInt colorEffect = TColorEffect2TInt( iProcessor->GetColorEffect() ); - if (colorEffect != 0 /*None*/) - { - // U,V value for the color toning - TInt colorToneU; - TInt colorToneV; - iProcessor->GetColorTone((TInt&)colorToneU, (TInt&)colorToneV); - // apply special effect - ApplySpecialEffect( colorEffect, tmpBuf, colorToneU, colorToneV ); - } - - TInt frameDuration = GetFrameDuration(iFrameInfoArray[aIndex].iFrameNumber); - - if (frameDuration <= 0) - { - TReal frameRate = iProcessor->GetVideoClipFrameRate(); - VDASSERT(frameRate > 0.0, 107); - TInt timeScale = iProcessor->GetVideoClipTimeScale(); - TInt64 durationMs = TInt64( ( 1000.0 / frameRate ) + 0.5 ); - - // in ticks - frameDuration = TInt( ( (TReal)durationMs * (TReal)timeScale / 1000.0 ) + 0.5 ); - } - - TInt error = iProcessor->SaveVideoFrameToFile( ptr, frameDuration, iFrameInfoArray[aIndex].iTimeStamp ); - if ( error != KErrNone ) - { - PRINT((_L("CVideoProcessor::HandleDecodeOnlyFrameFromTranscoder() - SaveVideoFrameToFile failed"))); - iMonitor->Error(error); - return; - } - } - } - - iFrameInfoArray.Remove(aIndex); - - PRINT((_L("CVideoProcessor::HandleDecodeOnlyFrameFromTranscoder() - removed decode only pic, %d items in queue"), - iFrameInfoArray.Count())); - - // release picture - TInt error = KErrNone; - TRAP( error, iTransCoder->SendPictureToTranscoderL(aPicture) ); - if ( error != KErrNone ) - { - iMonitor->Error(error); - return; - } - - if (iStreamEndRead && iFrameInfoArray.Count() == 0 ) - { - PRINT((_L("CVideoProcessor::HandleDecodeOnlyFrameFromTranscoder() - stream end read, no frames left"))); - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - iTimer->CancelTimer(); - iProcessingComplete = ETrue; - // activate object to end processing - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - return; - } - - if (iDecodingSuspended && !iStreamEndRead) - { - if (iFrameInfoArray.Count() < iMaxItemsInProcessingQueue && !iDelayedWrite) - { - PRINT((_L("CVideoProcessor::HandleDecodeOnlyFrameFromTranscoder() - Resume decoding"))); - iDecodingSuspended = EFalse; - // activate object to start decoding - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - return; - } - } - - // check if the next frame is waiting to be encoded, set timer if so - if ( IsNextFrameBeingEncoded() ) - { - if ( !iTimer->IsPending() ) - iTimer->SetTimer( TTimeIntervalMicroSeconds32( iMaxEncodingDelay ) ); - } - - return; - -} - - -// --------------------------------------------------------- -// CVideoProcessor::HandleTransitionFrameFromTranscoder -// Handle transition frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::HandleTransitionFrameFromTranscoder(TTRVideoPicture* aPicture, TInt aIndex) -{ - - // apply transition effect in spatial domain (to yuv data in encoder buffer) - if ( iFrameInfoArray[aIndex].iTransitionPosition == EPositionStartOfClip && - iStartTransitionColor == EColorTransition ) - { - // Do blending transition: wipe / crossfade - - TSize a = iProcessor->GetMovieResolution(); - TInt yuvLength = a.iWidth*a.iHeight; - yuvLength += (yuvLength>>1); - - if (iFrameInfoArray[aIndex].iRepeatFrame == 0) - { - if( !iColorTransitionBuffer ) - { - iColorTransitionBuffer = (TUint8*)User::Alloc( yuvLength ); - if (!iColorTransitionBuffer) - { - iMonitor->Error(KErrNoMemory); - return; - } - } - - if( !iOrigPreviousYUVBuffer ) - { - iOrigPreviousYUVBuffer = (TUint8*)User::Alloc( yuvLength ); - if (!iOrigPreviousYUVBuffer) - { - iMonitor->Error(KErrNoMemory); - return; - } - } - - TPtr8 ptr( iColorTransitionBuffer, 0, yuvLength ); - - if ( iProcessor->GetVideoFrameFromFile( ptr, yuvLength, iFrameDuration, iTimeStamp ) != KErrNone ) - //|| iFrameDuration == 0 || iTimeStamp == 0 ) - { - // failure in reading frame data from previous clip - // continue using the current frame data - Mem::Copy( iColorTransitionBuffer, aPicture->iRawData->Ptr(), yuvLength ); - } - else - { - // buffer frame from previous clip (read from file) - Mem::Copy( iOrigPreviousYUVBuffer, iColorTransitionBuffer, yuvLength ); - if ( iStartOfClipTransition == (TInt)EVedMiddleTransitionEffectCrossfade ) - { - // Target frame is the one read from file, iColorTransitionBuffer - ApplyBlendingTransitionEffect( iColorTransitionBuffer, const_cast(aPicture->iRawData->Ptr()), - 0 /* repeatFrame */, iFrameInfoArray[aIndex].iTransitionFrameNumber); - } - else - { - // Target frame is the one read from file, iColorTransitionBuffer - ApplySlidingTransitionEffect( iColorTransitionBuffer, const_cast(aPicture->iRawData->Ptr()), (TVedMiddleTransitionEffect)iStartOfClipTransition, - 0 /* repeatFrame */, iFrameInfoArray[aIndex].iTransitionFrameNumber); - } - // copy frame from edited buffer to transcoder buffer - Mem::Copy( const_cast(aPicture->iRawData->Ptr()), iColorTransitionBuffer, yuvLength ); - } - } - else - { - // repeatFrame - - if ( iStartOfClipTransition == (TInt)EVedMiddleTransitionEffectCrossfade ) - { - ApplyBlendingTransitionEffect( iOrigPreviousYUVBuffer, const_cast(aPicture->iRawData->Ptr()), - 1 /* repeatFrame */, iFrameInfoArray[aIndex].iTransitionFrameNumber); - } - else - { - ApplySlidingTransitionEffect( iOrigPreviousYUVBuffer, const_cast(aPicture->iRawData->Ptr()), (TVedMiddleTransitionEffect)iStartOfClipTransition, - 1 /* repeatFrame */, iFrameInfoArray[aIndex].iTransitionFrameNumber ); - } - // copy frame from edited buffer to transcoder buffer - Mem::Copy( const_cast(aPicture->iRawData->Ptr()), iOrigPreviousYUVBuffer, yuvLength ); - } - } - else - { - // apply transition effect in spatial domain (to yuv data in encoder buffer) - - // Do fading transition - ApplyFadingTransitionEffect(const_cast(aPicture->iRawData->Ptr()), iFrameInfoArray[aIndex].iTransitionPosition, iFrameInfoArray[aIndex].iTransitionColor, - iFrameInfoArray[aIndex].iTransitionFrameNumber); - } - -} - -// --------------------------------------------------------- -// CVideoProcessor::ProcessThumb -// Starts thumbnail generation -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoProcessor::ProcessThumb(MThumbnailObserver* aThumbObserver, TInt aFrameIndex, TInt aStartFrameIndex, TVedTranscodeFactor* aFactor) -{ - TInt error; -// TInt goodFrame = 0; -// TInt frameSkip = 10; -// TInt frameNumber = aStartFrameIndex; - TPtrC8 inputPtr; - TPtr8 outputPtr(0,0); - - iThumbObserver = aThumbObserver; - iThumbFrameIndex = aFrameIndex; - iThumbFrameNumber = aStartFrameIndex; - iFramesToSkip = 0; - iNumThumbFrameSkips = 0; - iPreviousTimeStamp = TTimeIntervalMicroSeconds(-1); - iProcessingComplete = EFalse; - - iThumbFramesToWrite = iProcessor->GetOutputNumberOfFrames() - iThumbFrameNumber; - - // get transcode factor to determine input stream type - TRAP(error, GetTranscodeFactorL(*aFactor)); - if (error != KErrNone) - return error; - - TVedVideoType inType; - if (aFactor->iStreamType == EVedVideoBitstreamModeH263) - inType = EVedVideoTypeH263Profile0Level10; - - else if (aFactor->iStreamType == EVedVideoBitstreamModeAVC) - inType = EVedVideoTypeAVCBaselineProfile; - - else - inType = EVedVideoTypeMPEG4SimpleProfile; - - if (aFactor->iStreamType == EVedVideoTypeUnrecognized || - aFactor->iStreamType == EVedVideoTypeNoVideo) - return KErrorCode; - - iDecoding = ETrue; - - // first frame is now read in iDataBuffer, initialize transcoder - TRAP(error, CreateAndInitializeTranscoderL(inType, CTRTranscoder::EDecoding)) - if (error != KErrNone) - return error; - - // wait for initialisation to complete => RunL - - return KErrNone; - -} - -// --------------------------------------------------------- -// CVideoProcessor::ProcessThumb -// Processes a thumbnail frame internally -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::ProcessThumb(TBool aFirstFrame) -{ - - PRINT((_L("CVideoProcessor::ProcessThumb() - begin()"))); - - iThumbDecoded = EFalse; - - if (aFirstFrame) - { - // frame read in iDataBuffer, decode - CCMRMediaBuffer::TBufferType bt = - (iDataFormat == EDataH263) ? CCMRMediaBuffer::EVideoH263 : CCMRMediaBuffer::EVideoMPEG4; - TInt index = iThumbFrameNumber - ( iProcessor->GetOutputNumberOfFrames() - - iProcessor->GetClipNumberOfFrames() ); - TTimeIntervalMicroSeconds ts = - TTimeIntervalMicroSeconds(iProcessor->GetVideoTimeInMsFromTicks(iProcessor->VideoFrameTimeStamp(index), ETrue) * TInt64(1000) ); - - // Get the AVC bit stream and add NAL headers - if(iDataFormat == EDataAVC) - { - TInt error = KErrNone; - - // insert dec.config. record in the beginning of buffer - TRAP( error, InsertDecoderSpecificInfoL() ); - if (error != KErrNone) - { - iProcessor->NotifyThumbnailReady(error); - return; - } - - PRINT((_L("CVideoProcessor::ProcessThumb() - ProcessAVCBitStream()"))); - - TPtr8 ptr(iDataBuffer, iCurrentFrameLength, iBufferLength); - TRAP( error, iAvcEdit->ProcessAVCBitStreamL((TDes8&)(ptr), (TInt&)(iCurrentFrameLength), - iProcessor->GetDecoderSpecificInfoSize(), ETrue ) ); - - if (error != KErrNone) - { - iProcessor->NotifyThumbnailReady(error); - return; - } - iDataLength = iCurrentFrameLength; - - } - - // insert VOL header to beginning of buffer - if (iDataFormat == EDataMPEG4) - { - TRAPD( error, InsertDecoderSpecificInfoL() ); - if (error != KErrNone) - { - iProcessor->NotifyThumbnailReady(error); - return; - } - } - - iMediaBuffer->Set( TPtrC8(iDataBuffer, iBufferLength), - bt, - iCurrentFrameLength, - ETrue, // keyFrame - ts - ); - - iPreviousTimeStamp = ts; - - iIsThumbFrameBeingCopied = ETrue; - iDecodePending = ETrue; - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - - PRINT((_L("CVideoProcessor::ProcessThumb() - WriteCodedBuffer, thumb frame #%d, timestamp %d ms"), - iThumbFrameNumber, I64INT( ts.Int64() ) / 1000 )); - - TRAPD( err, iTransCoder->WriteCodedBufferL(iMediaBuffer) ); - if (err != KErrNone) - { - // ready - FinalizeThumb(err); - return; - } - iThumbFramesToWrite--; - - return; - } - - if (iThumbFrameIndex == 0) - { - // ready - FinalizeThumb(KErrNone); - return; - } - - iThumbFrameNumber++; - - if (iDataFormat == EDataAVC) - { - // In AVC case, we have to stop decoding before the very last - // frames are decoded, since for some reason the transcoder/decoder - // does not decode those frames - - // get max number of buffered frames according to spec - TInt buffered = iAvcEdit->GetMaxAVCFrameBuffering(iInputAVCLevel, TSize(iVideoWidth, iVideoHeight)); - - if (iThumbFrameNumber > iProcessor->GetOutputNumberOfFrames() - 1 - buffered ) - { - // ready - FinalizeThumb(KErrNone); - return; - } - } - - if (iThumbFrameIndex < 0) - { - if (iFramesToSkip == 0) - { - PRINT((_L("CVideoProcessor::ProcessThumb() frameskip done %d times"), iNumThumbFrameSkips)); - - // limit the number of frame skip cycles to 3, because with - // near-black or near-white videos we may never find a good thumb. - // => max. 30 frames are decoded to get the thumb - - // check quality & frame skip cycles - if ( CheckFrameQuality(iFrameBuffer) || iNumThumbFrameSkips >= 3 ) - { - // quality ok or searched long enough, return - FinalizeThumb(KErrNone); - return; - } - iFramesToSkip = 10; - iNumThumbFrameSkips++; - } - else - iFramesToSkip--; - - // read new frame & decode - } - - if (iThumbFrameIndex > 0) - { - if (iThumbFrameNumber > iThumbFrameIndex) - { - // ready - FinalizeThumb(KErrNone); - return; - } - // read new frame & decode - } - - if (iIsThumbFrameBeingCopied) - { - PRINT((_L("CVideoProcessor::ProcessThumb() - thumb being copied, activate"))); - // Re-activate to wait for MtroReturnCodedBuffer - iDecodePending = ETrue; - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - } - else - { - PRINT((_L("CVideoProcessor::ProcessThumb() - read and write new"))); - // send new frame for decoding - ReadAndWriteThumbFrame(); - } - - PRINT((_L("CVideoProcessor::ProcessThumb() - end"))); - -} - -// --------------------------------------------------------- -// CVideoProcessor::ReadAndWriteThumbFrame -// Reads a new frame to input queue and sends it to transcoder -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::ReadAndWriteThumbFrame() -{ - - PRINT((_L("CVideoProcessor::ReadAndWriteThumbFrame() - begin, thumb frames to write %d"), - iThumbFramesToWrite)); - - TInt error = KErrNone; - - if ( iThumbFramesToWrite ) - { - // read new frame to input queue - if(iThumbFrameNumber < (iProcessor->GetOutputNumberOfFrames())) // do not read last frame (already read!) - { - CMP4Demux *demux = (CMP4Demux *)iProcessor->GetDemux(); - error = demux->ReadVideoFrames(1); - if (error != KErrNone) - { - FinalizeThumb(error); - return; - } - } - else - { - // no frames left, return - FinalizeThumb(KErrNone); - return; - } - - iDataLength = 0; - iCurrentFrameLength = 0; - iDataFormat = EDataUnknown; - - if (ReadFrame()) - { - // frame read in iDataBuffer, decode - CCMRMediaBuffer::TBufferType bt = - (iDataFormat == EDataH263) ? CCMRMediaBuffer::EVideoH263 : CCMRMediaBuffer::EVideoMPEG4; - - TInt index = iThumbFrameNumber - ( iProcessor->GetOutputNumberOfFrames() - - iProcessor->GetClipNumberOfFrames() ); - - TTimeIntervalMicroSeconds ts = - TTimeIntervalMicroSeconds(iProcessor->GetVideoTimeInMsFromTicks(iProcessor->VideoFrameTimeStamp(index), ETrue) * TInt64(1000) ); - - if (ts <= iPreviousTimeStamp) - { - // adjust timestamp so that its bigger than ts of previous frame - TReal frameRate = iProcessor->GetVideoClipFrameRate(); - VDASSERT(frameRate > 0.0, 108); - TInt64 durationMs = TInt64( ( 1000.0 / frameRate ) + 0.5 ); - durationMs /= 2; // add half the duration of one frame - - ts = TTimeIntervalMicroSeconds( iPreviousTimeStamp.Int64() + durationMs*1000 ); - } - - iPreviousTimeStamp = ts; - - // Get the AVC bit stream and add NAL headers - if(iDataFormat == EDataAVC) - { - TPtr8 ptr(iDataBuffer, iCurrentFrameLength, iBufferLength); - TRAPD( error, iAvcEdit->ProcessAVCBitStreamL((TDes8&)(ptr), (TInt&)(iCurrentFrameLength), - iProcessor->GetDecoderSpecificInfoSize(), EFalse ) ); - - if (error != KErrNone) - { - FinalizeThumb(error); - return; - } - iDataLength = iCurrentFrameLength; - } - - iMediaBuffer->Set( TPtrC8(iDataBuffer, iBufferLength), - bt, - iCurrentFrameLength, - iProcessor->GetVideoFrameType(index), - ts ); - - iIsThumbFrameBeingCopied = ETrue; - iDecodePending = ETrue; - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - - PRINT((_L("CVideoProcessor::ProcessThumb() - WriteCodedBuffer, thumb frame #%d, timestamp %d ms"), - iThumbFrameNumber, I64INT( ts.Int64() ) / 1000 )); - - TRAPD( err, iTransCoder->WriteCodedBufferL(iMediaBuffer) ); - if (err != KErrNone) - { - FinalizeThumb(err); - } - iThumbFramesToWrite--; - return; - } - } - - else - { - if (iDataFormat == EDataAVC) - { - PRINT((_L("CVideoProcessor::ReadAndWriteThumbFrame() - all frames written, wait for output"))); - // all necessary frames written to decoder, now wait for output frames - iDecodePending = ETrue; - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - } - else - { - FinalizeThumb(KErrNone); - } - } - - PRINT((_L("CVideoProcessor::ReadAndWriteThumbFrame() - end"))); -} - -// --------------------------------------------------------- -// CVideoProcessor::FinalizeThumb -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::FinalizeThumb(TInt aError) -{ - iProcessingComplete = ETrue; - if (iTranscoderStarted) - { - TRAPD( err, iTransCoder->StopL() ); - if (err != KErrNone) { } - iTranscoderStarted = EFalse; - } - iProcessor->NotifyThumbnailReady(aError); -} - -// --------------------------------------------------------- -// CVideoProcessor::FetchThumb -// For getting a pointer to YUV thumbnail frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoProcessor::FetchThumb(TUint8** aYUVDataPtr) -{ - *aYUVDataPtr = iFrameBuffer; - - return KErrNone; -} - - -// --------------------------------------------------------- -// CVideoProcessor::GetTranscodeFactorL -// Gets the transcode factor from the current clip -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoProcessor::GetTranscodeFactorL(TVedTranscodeFactor& aFactor) -{ - // start reading video frames - CMP4Demux *demux = (CMP4Demux *)iProcessor->GetDemux(); - TInt error = demux->ReadVideoFrames(1); - - if (error != KErrNone) - User::Leave(error); - - // seek to and decode first frame - if (!ReadFrame()) - User::Leave(KErrCorrupt); - - // Get pointer to the frame data - TPtr8 inputPtr(0,0); - if ( iDataFormat == EDataH263 ) - inputPtr.Set(iDataBuffer, iCurrentFrameLength + KH263StartCodeLength, iCurrentFrameLength + KH263StartCodeLength); - else - inputPtr.Set(iDecoderSpecificInfo->Des()); - - if(iDataFormat == EDataAVC) - { - // @@ HARI AVC harcode for now - // Set transcode factors - aFactor.iTRes = 30; - aFactor.iStreamType = EVedVideoBitstreamModeAVC; - } - else - { - // Get the VOL header from the frame data - CVedVolReader* reader = CVedVolReader::NewL(); - CleanupStack::PushL(reader); - reader->ParseVolHeaderL((TDesC8&) inputPtr); - - // Set transcode factors - aFactor.iTRes = reader->TimeIncrementResolution(); - aFactor.iStreamType = reader->BitstreamMode(); - - CleanupStack::PopAndDestroy(reader); - } - - return KErrNone; -} - - - -// --------------------------------------------------------- -// CVideoProcessor::CheckFrameQuality -// Checks if a frame has "good" or "legible" quality -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoProcessor::CheckFrameQuality(TUint8* aYUVDataPtr) -{ - TInt i; - TInt minValue = 255; - TInt maxValue = 0; - TInt goodFrame = 1; - TInt runningSum=0; - TInt averageValue=0; - TInt pixelSkips = 4; - TInt numberOfSamples=0; - TInt minMaxDeltaThreshold = 20; - TInt extremeRegionThreshold = 20; - TInt ySize = iVideoWidth*iVideoHeight; - - // gather image statistics - for(i=0, numberOfSamples=0; i maxValue) - maxValue = *aYUVDataPtr; - if(*aYUVDataPtr < minValue) - minValue = *aYUVDataPtr; - } - VDASSERT(numberOfSamples,10); - averageValue = runningSum/numberOfSamples; - - // make decision based statistics - if((maxValue - minValue) < minMaxDeltaThreshold) - goodFrame = 0; - else - { - if(averageValue < (minValue + extremeRegionThreshold) || - averageValue > (maxValue - extremeRegionThreshold)) - goodFrame = 0; - } - return goodFrame; -} - - -// --------------------------------------------------------- -// CVideoProcessor::ReadFrame -// Reads a frame from input queue to internal buffer -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoProcessor::ReadFrame() -{ - - TUint doNow; - - if (iProcessor->GetCurrentClipVideoType() == EVedVideoTypeAVCBaselineProfile) - iDataFormat = EDataAVC; - - // Determine data format if needed - if ( iDataFormat == EDataUnknown ) - { - // We'll need four bytes of data - while ( iDataLength < 4 ) - { - // Get a block (we can't have one as we go here only at the stream - // start) - VDASSERT(!iBlock,11); - while ( (!iBlock) || (iBlock->Length() == 0) ) - { - if ( iBlock ) - iQueue->ReturnBlock(iBlock); - if ( (iBlock = iQueue->ReadBlock()) == NULL ) - return EFalse; - } - iBlockPos = 0; - - // get timestamp for first frame - if ( iTiming == ETimeStamp ) - { - VDASSERT( (TUint)iBlock->Length() >= 8,12 ); - iBlockPos += 4; - } - - // Copy data from block to buffer: - doNow = 4 - iDataLength; - if ( doNow > (TUint) iBlock->Length() - iBlockPos ) - doNow = iBlock->Length() - iBlockPos; - Mem::Copy(iDataBuffer+iDataLength, iBlock->Ptr()+iBlockPos, doNow); - iDataLength += doNow; - iBlockPos += doNow; - - // Return the block if it doesn't have any more data - if ( ((TInt)iBlockPos == iBlock->Length()) ) - { - iQueue->ReturnBlock(iBlock); - iBlock = 0; - } - } - - // OK, we have 4 bytes of data. Check if the buffer starts with a - // H.263 PSC: - if ( (iDataBuffer[0] == 0) && (iDataBuffer[1] == 0) && - ((iDataBuffer[2] & 0xfc) == 0x80) ) - { - // Yes, this is a H.263 stream - iDataFormat = EDataH263; - } - - // It should be MPEG-4, check if it starts with MPEG 4 Visual - // Object Sequence start code, Visual Object start code, Video - // Object start code, or Video Object Layer start code - else if ( ((iDataBuffer[0] == 0) && (iDataBuffer[1] == 0) && (iDataBuffer[2] == 1) && (iDataBuffer[3] == 0xb0)) || - ((iDataBuffer[0] == 0) && (iDataBuffer[1] == 0) && (iDataBuffer[2] == 1) && (iDataBuffer[3] == 0xb6)) || - ((iDataBuffer[0] == 0) && (iDataBuffer[1] == 0) && (iDataBuffer[2] == 1) && (iDataBuffer[3] == 0xb3)) || - ((iDataBuffer[0] == 0) && (iDataBuffer[1] == 0) && (iDataBuffer[2] == 1) && (iDataBuffer[3] == 0xb5)) || - ((iDataBuffer[0] == 0) && (iDataBuffer[1] == 0) && (iDataBuffer[2] == 1) && ((iDataBuffer[3] >> 5) == 0)) || - ((iDataBuffer[0] == 0) && (iDataBuffer[1] == 0) && (iDataBuffer[2] == 1) && ((iDataBuffer[3] >> 4) == 2))) - { - iDataFormat = EDataMPEG4; - } - else - { - PRINT((_L("CVideoProcessor::ReadFrame() - no PSC or MPEG-4 start code in the start of the buffer"))); - if (iMonitor) - iMonitor->Error(KErrCorrupt); - return EFalse; - } - } - - // Determine the start code length - TUint startCodeLength = 0; - switch (iDataFormat) - { - case EDataH263: - startCodeLength = KH263StartCodeLength; - break; - case EDataMPEG4: - startCodeLength = KMPEG4StartCodeLength ; - break; - case EDataAVC: - break; - - default: - User::Panic(_L("CVideoPlayer"), EInternalAssertionFailure); - } - - // If the stream has ended, we have no blocks and no data for even a - // picture start code, we can't get a frame - if( iDataFormat == EDataH263 ) - { - if ( iStreamEnd && (iQueue->NumDataBlocks() == 0) && - (iCurrentFrameLength <= startCodeLength) && (iDataLength <= startCodeLength) ) - return EFalse; - } - else - { - if ( iStreamEnd && (iQueue->NumDataBlocks() == 0) && - (iCurrentFrameLength <= startCodeLength) && (iDataLength < startCodeLength) ) - return EFalse; - } - - switch(iDataFormat) - { - case EDataH263: - return ReadH263Frame(); -// break; - - case EDataMPEG4: - return ReadMPEG4Frame(); -// break; - - case EDataAVC: - return ReadAVCFrame(); -// break; - - default: - User::Panic(_L("CVideoProcessor"), EInternalAssertionFailure); - - } - - return ETrue; -} - - -// --------------------------------------------------------- -// CVideoProcessor::ReadH263Frame -// Reads a H.263 frame from input queue to internal buffer -// (other items were commented in a header). -// --------------------------------------------------------- -// -TBool CVideoProcessor::ReadH263Frame() -{ - - VDASSERT( iDataFormat == EDataH263, 17 ); - - TInt offset = 0; - if ( iTiming == ETimeStamp ) - offset = 4; - - // There should be one PSC at the buffer start, - // and no other PSCs up to iDataLength - if ( (iDataLength >= KH263StartCodeLength) && - ((iDataBuffer[0] != 0) || (iDataBuffer[1] != 0) || ((iDataBuffer[2] & 0xfc) != 0x80)) ) - { - PRINT((_L("CVideoProcessor::ReadH263Frame() - no PSC in the start of the buffer"))) - if (iMonitor) - iMonitor->Error(KErrCorrupt); - return EFalse; - } - - if (iCurrentFrameLength < KH263StartCodeLength ) - iCurrentFrameLength = KH263StartCodeLength; - - TBool gotPSC = EFalse; - while (!gotPSC) - { - // If we don't have a block at the moment, get one and check if it - // has a new PSC - while (!iBlock) - { - if ((iBlock = iQueue->ReadBlock()) == NULL) - { - if (!iStreamEnd && !iProcessor->IsThumbnailInProgress()) - return EFalse; - - // No more blocks in the stream. If we have more data than - // just a PSC, use the remaining as the last frame. We'll - // append an End Of Stream (EOS) codeword to the stream end - // to keep the decoder happy - if (iDataLength <= 3) - return EFalse; - iCurrentFrameLength = iDataLength; - if (iBufferLength < (iDataLength+3)) - { - iBufferLength += 3; - TUint8* tmp = (TUint8*) User::ReAlloc(iDataBuffer, iBufferLength); - if ( !tmp ) - { - if (iMonitor) - iMonitor->Error(KErrNoMemory); - return EFalse; - } - iDataBuffer = tmp; - } - iDataBuffer[iCurrentFrameLength] = 0; - iDataBuffer[iCurrentFrameLength+1] = 0; - iDataBuffer[iCurrentFrameLength+2] = 0xfc; - iDataLength += 3; - return ETrue; - } - - iBlockPos = 0; - // Return empty blocks immediately - if ( iBlock->Length() == 0 ) - { - iQueue->ReturnBlock(iBlock); - iBlock = 0; - } - } - - // If we are at the start of a block, check if it begins with a PSC - if ( iBlockPos == 0 ) - { - if ( (iBlock->Length() > 2 + offset) && - ( ((*iBlock)[0+offset] == 0) && ((*iBlock)[1+offset] == 0) && (((*iBlock)[2+offset] & 0xfc) == 0x80) ) ) - { - gotPSC = ETrue; - iCurrentFrameLength = iDataLength; // timestamps not copied to buffer - - if (iTiming == ETimeStamp) - { - iBlockPos += offset; - } - } - else - { - PRINT((_L("CVideoProcessor::ReadH263Frame() - no PSC in the start of the buffer"))) - if (iMonitor) - iMonitor->Error( KErrCorrupt ); - return EFalse; - } - } - - // If we still have data in our current block, copy it to the buffer - // Make sure we have enough space - TUint copyBytes = iBlock->Length() - iBlockPos; - if (copyBytes) - { - while (iBufferLength < (iDataLength + copyBytes)) - { - // New size is 3/2ths of the old size, rounded up to the next - // full kilobyte - TUint newSize = (3 * iBufferLength) / 2; - newSize = (newSize + 1023) & (~1023); - - TUint8* tmp = (TUint8*) User::ReAlloc(iDataBuffer, newSize); - if (!tmp) - { - if (iMonitor) - iMonitor->Error(KErrNoMemory); - return EFalse; - } - iDataBuffer = tmp; - iBufferLength = newSize; - } - Mem::Copy(&iDataBuffer[iDataLength], iBlock->Ptr() + iBlockPos, - copyBytes); - iBlockPos += copyBytes; - iDataLength += copyBytes; - } - - // OK, block used, throw it away - VDASSERT(iBlock->Length() == (TInt)iBlockPos,16); - iQueue->ReturnBlock(iBlock); - iBlock = 0; - } - - return ETrue; -} - - - -// --------------------------------------------------------- -// CVideoProcessor::ReadMPEG4Frame -// Reads a MPEG-4 frame from input queue to internal buffer -// (other items were commented in a header). -// --------------------------------------------------------- -// -TBool CVideoProcessor::ReadMPEG4Frame() -{ - - VDASSERT( (iDataFormat == EDataMPEG4 && iTiming == ETimeStamp), 17 ); - - // The following code assumes that there is one complete video frame - // in each input block. This is true for 3GP input streams. - - // get a new block if we don't have one - while (!iBlock) - { - if ((iBlock = iQueue->ReadBlock()) == NULL) - return EFalse; - - iBlockPos = 0; - // Return empty blocks immediately - if (iBlock->Length() == 0) - { - iQueue->ReturnBlock(iBlock); - iBlock = 0; - } - } - - // If we are at the start of a block, save timestamp - if (iBlockPos == 0) - { - //TUint* p = (TUint*)iBlock->Ptr(); - //AI: iRenderFrameTime = TInt64( (TUint)((*p)*1000) ); - iBlockPos += 4; // skip timestamp - } - - if (iFirstRead) - { - // allocate buffer for header - VDASSERT(!iDecoderSpecificInfo, 160); - iDecoderSpecificInfo = (HBufC8*) HBufC8::New(iProcessor->GetDecoderSpecificInfoSize()); - if (!iDecoderSpecificInfo) - { - iMonitor->Error(KErrNoMemory); - return EFalse; - } - - TPtr8 ptr(iDecoderSpecificInfo->Des()); - - // first copy already read bytes from iDataBuffer - ptr.Copy(iDataBuffer, iDataLength); - - TInt copyNow = iProcessor->GetDecoderSpecificInfoSize() - iDataLength; - iDataLength = 0; - - // then copy the rest from input buffer - ptr.Append(iBlock->Ptr() + iBlockPos, copyNow); - iBlockPos += copyNow; - iDecoderSpecificInfoSent = EFalse; - - iFirstRead = EFalse; - - } - - TUint copyBytes = iBlock->Length() - iBlockPos; - if (copyBytes) - { - // Make sure we have enough space - // +4 is for inserting a start code at the end of the frame - while (iBufferLength < (iDataLength + copyBytes + 4)) - { - // New size is 3/2ths of the old size, rounded up to the next - // full kilobyte - TUint newSize = (3 * iBufferLength) / 2; - newSize = (newSize + 1023) & (~1023); - TUint8* tmp = (TUint8*) User::ReAlloc(iDataBuffer, newSize); - if (!tmp) - { - if (iMonitor) - iMonitor->Error(KErrNoMemory); - return EFalse; - } - iDataBuffer = tmp; - iBufferLength = newSize; - } - Mem::Copy(&iDataBuffer[iDataLength], iBlock->Ptr() + iBlockPos, - copyBytes); - iBlockPos += copyBytes; - iDataLength += copyBytes; - } - - // OK, block used, throw it away - VDASSERT((iBlock->Length() == (TInt)iBlockPos),18); - iQueue->ReturnBlock(iBlock); - iBlock = 0; - - // check for VOS end code - if ( (iDataBuffer[0] == 0 ) && (iDataBuffer[1] == 0 ) && - (iDataBuffer[2] == 0x01) && (iDataBuffer[3] == 0xb1) ) - return EFalse; - - // insert VOP start code at the end, the decoder needs it - iDataBuffer[iDataLength++] = 0; - iDataBuffer[iDataLength++] = 0; - iDataBuffer[iDataLength++] = 0x01; - iDataBuffer[iDataLength++] = 0xb6; - iCurrentFrameLength = iDataLength; - - // we have a complete frame - return ETrue; - -} - - -// --------------------------------------------------------- -// CVideoProcessor::ReadAVCFrame -// Reads an AVC frame from input queue to internal buffer -// (other items were commented in a header). -// --------------------------------------------------------- -// -TBool CVideoProcessor::ReadAVCFrame() -{ - - VDASSERT( iDataFormat == EDataAVC, 17 ); - - // get a new block if we don't have one - while (!iBlock) - { - if ((iBlock = iQueue->ReadBlock()) == NULL) - return EFalse; - - iBlockPos = 0; - // Return empty blocks immediately - if (iBlock->Length() == 0) - { - iQueue->ReturnBlock(iBlock); - iBlock = 0; - } - } - - // skip 4 bytes for the timestamp - TInt skip = 4; -// TInt numSPS = 0; -// TInt numPPS = 0; - - // set this to point to the start of frame length field - TUint8* frameLenPtr = const_cast(iBlock->Ptr()) + skip; - // how much space needed for frame data - TInt frameLen = 0; - - TInt totalFrameLen = iBlock->Length() - skip; - - if (iFirstRead) - { - TInt index = skip + 4; // Skip timestamp + version etc. - TUint8* temp = const_cast(iBlock->Ptr()); - - // get no. bytes used for length - iFrameLengthBytes = ( temp[index] & 0x3 ) + 1; - - // save DCR - VDASSERT(!iDecoderSpecificInfo, 160); - - iDecoderSpecificInfo = (HBufC8*) HBufC8::New(iProcessor->GetDecoderSpecificInfoSize()); - if (!iDecoderSpecificInfo) - { - iMonitor->Error(KErrNoMemory); - return EFalse; - } - - TPtr8 ptr(iDecoderSpecificInfo->Des()); - ptr.Copy(iBlock->Ptr() + skip, iProcessor->GetDecoderSpecificInfoSize()); - iDecoderSpecificInfoSent = EFalse; - - // advance pointer over info to point to length field - frameLenPtr += iProcessor->GetDecoderSpecificInfoSize(); - - // add to frame len. since it is used to calculate the minimum buffer size - //frameLen += iProcessor->GetDecoderSpecificInfoSize(); - - totalFrameLen -= iProcessor->GetDecoderSpecificInfoSize(); - skip += iProcessor->GetDecoderSpecificInfoSize(); - - iFirstRead = EFalse; - } - - - - TInt numSliceNalUnits = 0; - while (frameLen < totalFrameLen) - { - TInt nalLen = 0; - switch (iFrameLengthBytes) - { - case 1: - nalLen = frameLenPtr[0] + 1; // +1 for length field - break; - - case 2: - nalLen = (frameLenPtr[0] << 8) + frameLenPtr[1] + 2; // +2 for length field - break; - - case 3: - nalLen = (frameLenPtr[0] << 16) + (frameLenPtr[1] << 8) + - frameLenPtr[2] + 3; // +3 for length field - break; - - case 4: - nalLen = (frameLenPtr[0] << 24) + (frameLenPtr[1] << 16) + - (frameLenPtr[2] << 8) + frameLenPtr[3] + 4; // +4 for length field - break; - - default: - if (iMonitor) - iMonitor->Error(KErrCorrupt); - return EFalse; - } - frameLenPtr += nalLen; - frameLen += nalLen; - numSliceNalUnits++; - } - - if ( iFrameLengthBytes != 4 ) - frameLen += numSliceNalUnits * ( (iFrameLengthBytes == 1) ? 3 : 2 ); - - // reserve space for alignment - TInt addBytes = (frameLen % 4 != 0) * ( 4 - (frameLen % 4) ); - - // reserve space for slice NAL unit offset and size fields - addBytes += (numSliceNalUnits * 8); - - // reserve space for number of NAL units (4) - addBytes += 4; - - // Make sure we have enough space - while (iBufferLength < (iDataLength + frameLen + addBytes)) - { - // New size is 3/2ths of the old size, rounded up to the next - // full kilobyte - TUint newSize = (3 * iBufferLength) / 2; - newSize = (newSize + 1023) & (~1023); - TUint8* tmp = (TUint8*) User::ReAlloc(iDataBuffer, newSize); - if (!tmp) - { - iMonitor->Error(KErrNoMemory); - return EFalse; - } - - iDataBuffer = tmp; - iBufferLength = newSize; - } - - iBlockPos += skip; - - if (iFrameLengthBytes == 4) - { - // just copy directly, no need to change length field - Mem::Copy(&iDataBuffer[iDataLength], iBlock->Ptr() + skip, frameLen); - iDataLength += frameLen; - iBlockPos += frameLen; - } - else - { - // have to change length field for each NAL - TUint8* srcPtr = const_cast(iBlock->Ptr()) + skip; - while (numSliceNalUnits--) - { - // read length - TInt nalLen = 0; - switch (iFrameLengthBytes) - { - case 1: - nalLen = srcPtr[0]; - srcPtr += 1; // skip length field - iBlockPos += 1; - break; - - case 2: - nalLen = (srcPtr[0] << 8) + srcPtr[1]; - srcPtr += 2; // skip length field - iBlockPos += 2; - break; - - case 3: - nalLen = (srcPtr[0] << 16) + (srcPtr[1] << 8) + srcPtr[2]; - srcPtr += 3; // skip length field - iBlockPos += 3; - break; - - default: - if (iMonitor) - iMonitor->Error(KErrCorrupt); - return EFalse; - } - - // code length with 4 bytes - iDataBuffer[iDataLength] = TUint8((nalLen >> 24) & 0xff); - iDataBuffer[iDataLength + 1] = TUint8((nalLen >> 16) & 0xff); - iDataBuffer[iDataLength + 2] = TUint8((nalLen >> 8) & 0xff); - iDataBuffer[iDataLength + 3] = TUint8(nalLen & 0xff); - iDataLength += 4; - // copy NAL data - Mem::Copy(&iDataBuffer[iDataLength], srcPtr, nalLen); - iDataLength += nalLen; - srcPtr += nalLen; - iBlockPos += nalLen; - } - } - - // OK, block used, throw it away - VDASSERT((iBlock->Length() == (TInt)iBlockPos),18); - iQueue->ReturnBlock(iBlock); - iBlock = 0; - - iCurrentFrameLength = iDataLength; - - // we have a complete frame - return ETrue; - -} - - - -// --------------------------------------------------------- -// CVideoProcessor::DetermineClipTransitionParameters -// Sets transition frame parameters -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoProcessor::DetermineClipTransitionParameters(TInt& aTransitionEffect, - TInt& aStartOfClipTransition, - TInt& aEndOfClipTransition, - TTransitionColor& aStartTransitionColor, - TTransitionColor& aEndTransitionColor) -{ - TInt error=KErrNone; - // find if transition effect is to be applied - TInt numberOfVideoClips = iProcessor->GetNumberOfVideoClips(); - TInt videoClipNumber = iProcessor->GetVideoClipNumber(); - TVedStartTransitionEffect startTransitionEffect = iProcessor->GetStartTransitionEffect(); - TVedEndTransitionEffect endTransitionEffect = iProcessor->GetEndTransitionEffect(); - TVedMiddleTransitionEffect middleTransitionEffect = iProcessor->GetMiddleTransitionEffect(); - TVedMiddleTransitionEffect previousMiddleTransitionEffect = iProcessor->GetPreviousMiddleTransitionEffect(); - - // is transition effect to be applied anywhere in the movie? - if(startTransitionEffect==EVedStartTransitionEffectNone && - middleTransitionEffect==EVedMiddleTransitionEffectNone && - endTransitionEffect==EVedEndTransitionEffectNone && - previousMiddleTransitionEffect==EVedMiddleTransitionEffectNone) - aTransitionEffect=0; - else - aTransitionEffect=1; - // where is the transition effect to be applied - beginning, end or both? - if(aTransitionEffect) - { - // if first video clip - if(videoClipNumber==0) - { - switch(startTransitionEffect) - { - default: - case EVedStartTransitionEffectNone: - case EVedStartTransitionEffectLast: - aStartOfClipTransition=0; - aStartTransitionColor = EColorNone; - break; - case EVedStartTransitionEffectFadeFromBlack: - aStartOfClipTransition=1; - aStartTransitionColor = EColorBlack; - break; - case EVedStartTransitionEffectFadeFromWhite: - aStartOfClipTransition=1; - aStartTransitionColor = EColorWhite; - break; - } - // do we need transition at the end of this clip? - if(videoClipNumber==numberOfVideoClips-1) // last clip? - { - switch(endTransitionEffect) - { - default: - case EVedEndTransitionEffectNone: - case EVedEndTransitionEffectLast: - aEndOfClipTransition=0; - aEndTransitionColor = EColorNone; - break; - case EVedEndTransitionEffectFadeToBlack: - aEndOfClipTransition=1; - aEndTransitionColor = EColorBlack; - break; - case EVedEndTransitionEffectFadeToWhite: - aEndOfClipTransition=1; - aEndTransitionColor = EColorWhite; - break; - } - } - else // middle clip - { - switch(middleTransitionEffect) - { - default: - case EVedMiddleTransitionEffectNone: - case EVedMiddleTransitionEffectLast: - aEndOfClipTransition=0; - aEndTransitionColor = EColorNone; - break; - case EVedMiddleTransitionEffectDipToBlack: - aEndOfClipTransition=1; - aEndTransitionColor = EColorBlack; - break; - case EVedMiddleTransitionEffectDipToWhite: - aEndOfClipTransition=1; - aEndTransitionColor = EColorWhite; - break; - //change - case EVedMiddleTransitionEffectCrossfade: - aEndOfClipTransition=TInt(EVedMiddleTransitionEffectCrossfade); - aEndTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeLeftToRight: - aEndOfClipTransition=TInt(EVedMiddleTransitionEffectWipeLeftToRight); - aEndTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeRightToLeft: - aEndOfClipTransition=TInt(EVedMiddleTransitionEffectWipeRightToLeft); - aEndTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeTopToBottom: - aEndOfClipTransition=TInt(EVedMiddleTransitionEffectWipeTopToBottom); - aEndTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeBottomToTop: - aEndOfClipTransition=TInt(EVedMiddleTransitionEffectWipeBottomToTop); - aEndTransitionColor = EColorTransition; - break; - } - } - } - // else its the middle or last clip - else - { - // do we need transition at the beginning of this clip? - switch(previousMiddleTransitionEffect) - { - default: - case EVedMiddleTransitionEffectNone: - case EVedMiddleTransitionEffectLast: - aStartOfClipTransition=0; - aStartTransitionColor = EColorNone; - break; - case EVedMiddleTransitionEffectDipToBlack: - aStartOfClipTransition=1; - aStartTransitionColor = EColorBlack; - break; - case EVedMiddleTransitionEffectDipToWhite: - aStartOfClipTransition=1; - aStartTransitionColor = EColorWhite; - break; - - case EVedMiddleTransitionEffectCrossfade: - aStartOfClipTransition=TInt(EVedMiddleTransitionEffectCrossfade); - aStartTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeLeftToRight: - aStartOfClipTransition=TInt(EVedMiddleTransitionEffectWipeLeftToRight); - aStartTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeRightToLeft: - aStartOfClipTransition=TInt(EVedMiddleTransitionEffectWipeRightToLeft); - aStartTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeTopToBottom: - aStartOfClipTransition=TInt(EVedMiddleTransitionEffectWipeTopToBottom); - aStartTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeBottomToTop: - aStartOfClipTransition=TInt(EVedMiddleTransitionEffectWipeBottomToTop); - aStartTransitionColor = EColorTransition; - break; - } - // do we need transition at the end of this clip? - if(videoClipNumber==numberOfVideoClips-1) // last clip? - { - switch(endTransitionEffect) - { - default: - case EVedEndTransitionEffectNone: - case EVedEndTransitionEffectLast: - aEndOfClipTransition=0; - aEndTransitionColor = EColorNone; - break; - case EVedEndTransitionEffectFadeToBlack: - aEndOfClipTransition=1; - aEndTransitionColor = EColorBlack; - break; - case EVedEndTransitionEffectFadeToWhite: - aEndOfClipTransition=1; - aEndTransitionColor = EColorWhite; - break; - } - } - else // middle clip - { - switch(middleTransitionEffect) - { - default: - case EVedMiddleTransitionEffectNone: - case EVedMiddleTransitionEffectLast: - aEndOfClipTransition=0; - aEndTransitionColor = EColorNone; - break; - case EVedMiddleTransitionEffectDipToBlack: - aEndOfClipTransition=1; - aEndTransitionColor = EColorBlack; - break; - case EVedMiddleTransitionEffectDipToWhite: - aEndOfClipTransition=1; - aEndTransitionColor = EColorWhite; - break; - //change - case EVedMiddleTransitionEffectCrossfade: - aEndOfClipTransition=TInt(EVedMiddleTransitionEffectCrossfade); - aEndTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeLeftToRight: - aEndOfClipTransition=TInt(EVedMiddleTransitionEffectWipeLeftToRight); - aEndTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeRightToLeft: - aEndOfClipTransition=TInt(EVedMiddleTransitionEffectWipeRightToLeft); - aEndTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeTopToBottom: - aEndOfClipTransition=TInt(EVedMiddleTransitionEffectWipeTopToBottom); - aEndTransitionColor = EColorTransition; - break; - case EVedMiddleTransitionEffectWipeBottomToTop: - aEndOfClipTransition=TInt(EVedMiddleTransitionEffectWipeBottomToTop); - aEndTransitionColor = EColorTransition; - break; - } - } - } - } - return error; -} - - -// --------------------------------------------------------- -// CVideoProcessor::GetNumberOfTransitionFrames -// Calculate the number of transition frames -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::GetNumberOfTransitionFrames(TTimeIntervalMicroSeconds aStartCutTime, - TTimeIntervalMicroSeconds aEndCutTime) -{ - - TInt startFrameIndex = iProcessor->GetVideoFrameIndex(aStartCutTime); - // the following is because binary search gives us frame with timestamp < startCutTime - // this frame would be out of range for movie - if(startFrameIndex > 0 && startFrameIndex < iNumberOfFrames-1) - startFrameIndex++; - TInt endFrameIndex = iProcessor->GetVideoFrameIndex(aEndCutTime); - // adjust frame indices for cut video clip - startFrameIndex -= iProcessor->GetStartFrameIndex(); - endFrameIndex -= iProcessor->GetStartFrameIndex(); - if(startFrameIndex < 0) - startFrameIndex = 0; - if(endFrameIndex < 0) - endFrameIndex = 0; - if(endFrameIndex>= 1; - - // if there are not enough frames saved from previous - // clip, the transition must be shortened accordingly - if (iProcessor->GetNumberOfSavedFrames() < iStartNumberOfTransitionFrames) - iStartNumberOfTransitionFrames = iProcessor->GetNumberOfSavedFrames(); - - iEndNumberOfTransitionFrames >>= 1; - if ( iNumberOfIncludedFrames < (iStartNumberOfTransitionFrames + iEndNumberOfTransitionFrames) ) - { - iStartNumberOfTransitionFrames = iNumberOfIncludedFrames >> 1; - iEndNumberOfTransitionFrames = iNumberOfIncludedFrames - iStartNumberOfTransitionFrames; - } - } - else - { - if ( iStartTransitionColor == EColorTransition ) - { - iStartNumberOfTransitionFrames >>= 1; - - // if there are not enough frames saved from previous - // clip, the transition must be shortened accordingly - if (iProcessor->GetNumberOfSavedFrames() < iStartNumberOfTransitionFrames) - iStartNumberOfTransitionFrames = iProcessor->GetNumberOfSavedFrames(); - } - - if ( iEndTransitionColor == EColorTransition ) - iEndNumberOfTransitionFrames >>= 1; - - if ( iNumberOfIncludedFrames < (iStartNumberOfTransitionFrames + iEndNumberOfTransitionFrames) ) - { - if ( iStartTransitionColor == EColorTransition ) - { - if ( ( iNumberOfIncludedFrames >> 1 ) > iStartNumberOfTransitionFrames ) - { - iEndNumberOfTransitionFrames = iNumberOfIncludedFrames - iStartNumberOfTransitionFrames; - } - else - { - iStartNumberOfTransitionFrames = iNumberOfIncludedFrames >> 1; - iEndNumberOfTransitionFrames = iNumberOfIncludedFrames - iStartNumberOfTransitionFrames; - } - } - else if ( iEndTransitionColor == EColorTransition ) - { - if ( ( iNumberOfIncludedFrames >> 1 ) > iEndNumberOfTransitionFrames ) - { - iStartNumberOfTransitionFrames = iNumberOfIncludedFrames - iEndNumberOfTransitionFrames; - } - else - { - iStartNumberOfTransitionFrames = iNumberOfIncludedFrames >> 1; - iEndNumberOfTransitionFrames = iNumberOfIncludedFrames - iStartNumberOfTransitionFrames; - } - } - else - { - iStartNumberOfTransitionFrames = iNumberOfIncludedFrames >> 1; - iEndNumberOfTransitionFrames = iNumberOfIncludedFrames - iStartNumberOfTransitionFrames; - } - } - } - } - // if transition is at one end only - else - { - if ( iStartOfClipTransition ) - { - iEndNumberOfTransitionFrames = 0; - if ( iStartTransitionColor == EColorTransition ) - { - iStartNumberOfTransitionFrames >>= 1; - - // if there are not enough frames saved from previous - // clip, the transition must be shortened accordingly - if (iProcessor->GetNumberOfSavedFrames() < iStartNumberOfTransitionFrames) - iStartNumberOfTransitionFrames = iProcessor->GetNumberOfSavedFrames(); - } - - if ( iNumberOfIncludedFrames < iStartNumberOfTransitionFrames ) - { - iStartNumberOfTransitionFrames = iNumberOfIncludedFrames; - } - } - else - { - iStartNumberOfTransitionFrames = 0; - if ( iEndTransitionColor == EColorTransition ) - { - iEndNumberOfTransitionFrames >>= 1; - } - if ( iNumberOfIncludedFrames < iEndNumberOfTransitionFrames ) - { - iEndNumberOfTransitionFrames = iNumberOfIncludedFrames; - } - } - } - // fetch the last Intra before transition begins. - // should be done after the cutting as well. - - iLastIntraFrameBeforeTransition=0; - if(iNumberOfIncludedFrames > 2) //so that we could loop to find the last intra. - { - TInt i; - TInt j=iProcessor->GetStartFrameIndex(); // processor needs frame index from beginning of clip - for(i=endFrameIndex-iEndNumberOfTransitionFrames; i>=startFrameIndex;i--) - { - if(iProcessor->GetVideoFrameType(i+j) == 1) // absolute index needed here! - { - iLastIntraFrameBeforeTransition=i; - break; - } - } - } - -} - -// --------------------------------------------------------- -// CVideoProcessor::SetTransitionFrameParams -// Set parameters for a transition frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::SetTransitionFrameParams(TInt aIncludedFrameNumber, TBool& aDecodeFrame) -{ - - // if transition is to be applied at the beginning of the clip - if(iStartOfClipTransition) - { - iFirstFrameAfterTransition = EFalse; - // this is for start-of-clip transition - if(aIncludedFrameNumber < iStartNumberOfTransitionFrames) - { - // if its first transition frame - if(aIncludedFrameNumber == 0) - { - iFirstTransitionFrame = 1; - iTransitionFrameNumber = 0; - } - else - { - iTransitionFrameNumber++; - } - - if ( iStartTransitionColor == EColorTransition ) - { - // ignore this transition if the previous clip has less transition frames - // than this clip's transition frames - if ( iTransitionFrameNumber < ( iProcessor->NumberOfTransition() - iTransitionFrameNumber ) ) - { - iTransitionFrame = 1; - iTransitionPosition = EPositionStartOfClip; - aDecodeFrame = ETrue; - iTransitionColor = iStartTransitionColor; - } - else - { - iPreviousFrameIncluded = EFalse; - } - } - else - { - iTransitionFrame = 1; - iTransitionPosition = EPositionStartOfClip; - aDecodeFrame = EFalse; - iTransitionColor = iStartTransitionColor; - } - - } - else - { - // if this is first frame after transition, we need to encode it as intra - // treat/simulate it as if its the start of the cut point. - if(aIncludedFrameNumber == iStartNumberOfTransitionFrames) - { - iFirstFrameAfterTransition = ETrue; - iPreviousFrameIncluded = EFalse; - } - } - } - - // if transition is to be applied at the end of the clip - if(iEndOfClipTransition && iTransitionFrame == 0) - { - // this is for end-of-clip transition - if(aIncludedFrameNumber >= iNumberOfIncludedFrames - iEndNumberOfTransitionFrames) - { - // if its first transition frame - if(aIncludedFrameNumber == iNumberOfIncludedFrames - iEndNumberOfTransitionFrames) - { - iFirstTransitionFrame = 1; - iTransitionFrameNumber = 0; - } - else - { - iTransitionFrameNumber++; - } - - if ( iEndTransitionColor == EColorTransition ) - { - // get the next clip's start transition information - GetNextClipTransitionInfo(); - // if next clip's start transition number is less than current clip's - // end transition number, then DO NOT treat current frame as the - // the transition frame - if ( ( iEndNumberOfTransitionFrames - iTransitionFrameNumber ) <= iNextTransitionNumber ) - { - iTransitionFrame = 1; - iTransitionPosition = EPositionEndOfClip; - aDecodeFrame = ETrue; - iTransitionColor = iEndTransitionColor; - } - } - else - { - iTransitionFrame = 1; - iTransitionPosition = EPositionEndOfClip; - aDecodeFrame = EFalse; - iTransitionColor = iEndTransitionColor; - } - } - else - { - // if this is first frame, we need to start decoding from here - // treat/simulate it as if its the nearest preceding intra frame. - if(iFrameNumber >= iLastIntraFrameBeforeTransition) - aDecodeFrame = ETrue; - - // In AVC case, if there is also starting transition, decode - // all frames after that since frame numbering must be consistent - // for AVC decoding to work - if (iDataFormat == EDataAVC && iStartOfClipTransition) - aDecodeFrame = ETrue; - - } // end-of-clip transition - } - -} - - - -// --------------------------------------------------------- -// CVideoProcessor::ApplyFadingTransitionEffect -// Applies fading transition effect for a YUV frame -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CVideoProcessor::ApplyFadingTransitionEffect(TUint8* aYUVPtr, - TTransitionPosition aTransitionPosition, - TTransitionColor aTransitionColor, - TInt aTransitionFramenumber) -{ - TInt i; - - TSize movieSize = iProcessor->GetMovieResolution(); - TInt yLength = movieSize.iWidth * movieSize.iHeight; - - TInt uLength = yLength>>2; - TUint8* yFrame = (TUint8*)aYUVPtr; - TUint8* uFrame = (TUint8*)(yFrame+yLength); - TUint8* vFrame = (TUint8*)(uFrame+uLength); - TInt position; - TChar chr; - TInt value; - TPtr8 ptr(0,0); - - // look-up tables to avoid floating point operations due to fractional weighting - // corresponding to 0.1, 26 values quantized to 8 - const TUint8 quantTable1[8] = { - 4, 7, 10, 13, 16, 19, 22, 24 }; - // corresponding to 0.2, 52 values quantized to 16 - const TUint8 quantTable2[16] = { - 4, 8, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 50 }; - // corresponding to 0.3, 77 values quantized to 16 - const TUint8 quantTable3[16] = { - 5, 10, 15, 20, 24, 29, 33, 38, 42, 47, 51, 56, 61, 66, 71, 75 }; - // corresponding to 0.4, 103 values quantized to 32 - const TUint8 quantTable4[32] = { - 5, 10, 14, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, - 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 101 }; - // corresponding to 0.5, 128 values quantized to 32 - const TUint8 quantTable5[32] = { - 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63, - 67, 71, 75, 79, 83, 87, 91, 95, 99, 103, 107, 111, 115, 119, 123, 126 }; - // corresponding to 0.6, 154 values quantized to 32 - const TUint8 quantTable6[32] = { - 5, 13, 20, 27, 32, 36, 41, 45, 50, 54, 59, 63, 68, 72, 77, 81, - 86, 90, 95, 99, 103, 108, 112, 117, 121, 126, 130, 135, 139, 144, 148, 152 }; - // corresponding to 0.7, 179 values quantized to 64 - const TUint8 quantTable7[64] = { - 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, - 53, 56, 59, 62, 65, 68, 71, 74, 77, 80, 83, 86, 89, 92, 95, 98, - 101, 104, 107, 110, 113, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, - 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 178 }; - // corresponding to 0.8, 204 values quantized to 64 - const TUint8 quantTable8[64] = { - 5, 10, 15, 20, 25, 29, 33, 36, 40, 42, 45, 48, 51, 54, 57, 60, - 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108, - 111, 114, 117, 120, 123, 126, 129, 132, 135, 138, 141, 144, 147, 150, 153, 156, - 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 203 }; - // corresponding to 0.9, 230 values quantized to 64 - const TUint8 quantTable9[64] = { - 5, 10, 15, 19, 23, 26, 30, 33, 37, 40, 44, 47, 51, 54, 58, 61, - 65, 68, 72, 75, 79, 82, 86, 89, 93, 96, 100, 103, 107, 110, 114, 117, - 121, 124, 128, 131, 135, 138, 142, 145, 149, 152, 156, 159, 163, 166, 170, 173, - 177, 180, 184, 187, 191, 194, 198, 201, 205, 208, 212, 215, 219, 222, 226, 228 }; - const TUint8 indexTable[10]={1,2,3,4,5,6,7,8,9,10}; - - // figure out if the transition is at the beginning or end of the clip - TInt index; - switch(aTransitionPosition) - { - case EPositionStartOfClip: // start-of-clip transition - if( (index = iStartNumberOfTransitionFrames - aTransitionFramenumber-1) < 0 ) index = 0; - break; - case EPositionEndOfClip: // end-of-clip transition - if( (index = aTransitionFramenumber) >= iEndNumberOfTransitionFrames ) index = iEndNumberOfTransitionFrames - 1; - break; - default: - index = 0; - break; - } - position = indexTable[index]; - - if(aTransitionColor==EColorWhite) - { - switch(position) // white - { - case 10: // 0% frame1, 100% frame2 - // Y - value = 254; chr = value; - ptr.Set(yFrame, yLength, yLength); - ptr.Fill(chr); - // U,V - value = 128; chr = value; - ptr.Set(uFrame, uLength<<1, uLength<<1); - ptr.Fill(chr); - break; - case 9: // 10% frame1, 90% frame2 - value = quantTable9[63]; // 90% of 254 (white) - for(i=0; i>5] + value); - value = 113; // 90% of 128 - for(i=0; i>5] + value); - *vFrame = (TUint8)(quantTable1[(*vFrame)>>5] + value); - } - break; - case 8: // 20% frame1, 80% frame2 - value = quantTable8[63]; // 80% of 254 (white) - for(i=0; i>4] + value); - value = 98; // 80% of 128 - for(i=0; i>4] + value); - *vFrame = (TUint8)(quantTable2[(*vFrame)>>4] + value); - } - break; - case 7: // 30% frame1, 70% frame2 - value = quantTable7[63]; // 70% of 254 (white) - for(i=0; i>4] + value); - value = 86; // 70% of 128 - for(i=0; i>4] + value); - *vFrame = (TUint8)(quantTable3[(*vFrame)>>4] + value); - } - break; - case 6: // 40% frame1, 60% frame2 - value = quantTable6[31]; // 60% of 254 (white) - for(i=0; i>3] + value); - value = 72; //77; // 60% of 128 - for(i=0; i>3] + value); - *vFrame = (TUint8)(quantTable4[(*vFrame)>>3] + value); - } - break; - case 5: // 50% frame1, 50% frame2 - value = quantTable5[31]; // 50% of 254 (white) - for(i=0; i>3] + value); - value = 62; // 50% of 128 - for(i=0; i>3] + value); - *vFrame = (TUint8)(quantTable5[(*vFrame)>>3] + value); - } - break; - case 4: // 60% frame1, 40% frame2 - value = quantTable4[31]; // 40% of 254 (white) - for(i=0; i>3] + value); - value = 44; //51; // 40% of 128 - for(i=0; i>3] + value); - *vFrame = (TUint8)(quantTable6[(*vFrame)>>3] + value); - } - break; - case 3: // 70% frame1, 30% frame2 - value = quantTable3[15]; // 30% of 254 (white) - for(i=0; i>2] + value); - value = 28; //38; // 30% of 128 - for(i=0; i>2] + value); - *vFrame = (TUint8)(quantTable7[(*vFrame)>>2] + value); - } - break; - case 2: // 80% frame1, 20% frame2 - value = quantTable2[15]; // 20% of 254 (white) - for(i=0; i>2] + value); - value = 18; //25; // 20% of 128 - for(i=0; i>2] + value); - *vFrame = (TUint8)(quantTable8[(*vFrame)>>2] + value); - } - break; - case 1: // 90% frame1, 10% frame2 - value = quantTable1[7]; // 10% of 254 (white) - for(i=0; i>2] + value); - value = 8; //13; // 10% of 128 - for(i=0; i>2] + value); - *vFrame = (TUint8)(quantTable9[(*vFrame)>>2] + value); - } - break; - default: // e.g., 100% frame1, 0% frame2 - break; - } - } - else if(aTransitionColor==EColorBlack) // black - { - switch(position) - { - case 10: // 0% frame1, 100% frame2 - // Y - value = 4; chr = value; - ptr.Set(yFrame, yLength, yLength); - ptr.Fill(chr); - // U,V - value = 128; chr = value; - ptr.Set(uFrame, uLength<<1, uLength<<1); - ptr.Fill(chr); - break; - case 9: // 10% frame1, 90% frame2 - for(i=0; i>5]); - value = 113; // 90% of 128 - for(i=0; i>5] + value); - *vFrame = (TUint8)(quantTable1[(*vFrame)>>5] + value); - } - break; - case 8: // 20% frame1, 80% frame2 - for(i=0; i>4]); - value = 98; // 80% of 128 - for(i=0; i>4] + value); - *vFrame = (TUint8)(quantTable2[(*vFrame)>>4] + value); - } - break; - case 7: // 30% frame1, 70% frame2 - for(i=0; i>4]); - value = 86; // 70% of 128 - for(i=0; i>4] + value); - *vFrame = (TUint8)(quantTable3[(*vFrame)>>4] + value); - } - break; - case 6: // 40% frame1, 60% frame2 - for(i=0; i>3]); - value = 72; //77; // 60% of 128 - for(i=0; i>3] + value); - *vFrame = (TUint8)(quantTable4[(*vFrame)>>3] + value); - } - break; - case 5: // 50% frame1, 50% frame2 - for(i=0; i>3]); - value = 62; // 50% of 128 - for(i=0; i>3] + value); - *vFrame = (TUint8)(quantTable5[(*vFrame)>>3] + value); - } - break; - case 4: // 60% frame1, 40% frame2 - for(i=0; i>3]); - value = 44; //51; // 40% of 128 - for(i=0; i>3] + value); - *vFrame = (TUint8)(quantTable6[(*vFrame)>>3] + value); - } - break; - case 3: // 70% frame1, 30% frame2 - for(i=0; i>2]); - value = 28; //38; // 30% of 128 - for(i=0; i>2] + value); - *vFrame = (TUint8)(quantTable7[(*vFrame)>>2] + value); - } - break; - case 2: // 80% frame1, 20% frame2 - for(i=0; i>2]); - value = 18; //25; // 20% of 128 - for(i=0; i>2] + value); - *vFrame = (TUint8)(quantTable8[(*vFrame)>>2] + value); - } - break; - case 1: // 90% frame1, 10% frame2 - for(i=0; i>2]); - value = 8; //13; // 10% of 128 - for(i=0; i>2] + value); - *vFrame = (TUint8)(quantTable9[(*vFrame)>>2] + value); - } - break; - default: // e.g., 100% frame1, 0% frame2 - break; - } - } - return; -} - -// --------------------------------------------------------- -// CVideoProcessor::ApplyBlendingTransitionEffect -// Applies blending transition effect between two YUV frames -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::ApplyBlendingTransitionEffect(TUint8* aYUVPtr1, - TUint8* aYUVPtr2, - TInt aRepeatFrame, - TInt aTransitionFramenumber) -{ - TInt i; - TSize tempSize = iProcessor->GetMovieResolution(); - - TInt yLength = tempSize.iWidth*tempSize.iHeight; - TInt uLength = yLength>>2; - TInt yuvLength = yLength + (yLength>>1); - TUint8* yFrame1 = (TUint8*)aYUVPtr1; - TUint8* uFrame1 = (TUint8*)(yFrame1+yLength); - TUint8* vFrame1 = (TUint8*)(uFrame1+uLength); - TUint8* yFrame2 = (TUint8*)aYUVPtr2; - TUint8* uFrame2 = (TUint8*)(yFrame2+yLength); - TUint8* vFrame2 = (TUint8*)(uFrame2+uLength); - TInt position; - TPtr8 ptr(0,0); - const TInt numberOfTables = 10; - - // corresponding to 0.1, 26 values quantized to 8 - const TUint8 quantTable1[8] = { - 4, 7, 10, 13, 16, 19, 22, 24 }; - // corresponding to 0.2, 52 values quantized to 16 - const TUint8 quantTable2[16] = { - 4, 8, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 50 }; - // corresponding to 0.3, 77 values quantized to 16 - const TUint8 quantTable3[16] = { - 5, 10, 15, 20, 24, 29, 33, 38, 42, 47, 51, 56, 61, 66, 71, 75 }; - // corresponding to 0.4, 103 values quantized to 32 - const TUint8 quantTable4[32] = { - 5, 10, 14, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, - 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 101 }; - // corresponding to 0.5, 128 values quantized to 32 - const TUint8 quantTable5[32] = { - 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63, - 67, 71, 75, 79, 83, 87, 91, 95, 99, 103, 107, 111, 115, 119, 123, 126 }; - // corresponding to 0.6, 154 values quantized to 32 - const TUint8 quantTable6[32] = { - 5, 13, 20, 27, 32, 36, 41, 45, 50, 54, 59, 63, 68, 72, 77, 81, - 86, 90, 95, 99, 103, 108, 112, 117, 121, 126, 130, 135, 139, 144, 148, 152 }; - // corresponding to 0.7, 179 values quantized to 64 - const TUint8 quantTable7[64] = { - 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, - 53, 56, 59, 62, 65, 68, 71, 74, 77, 80, 83, 86, 89, 92, 95, 98, - 101, 104, 107, 110, 113, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, - 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 178 }; - // corresponding to 0.8, 204 values quantized to 64 - const TUint8 quantTable8[64] = { - 5, 10, 15, 20, 25, 29, 33, 36, 40, 42, 45, 48, 51, 54, 57, 60, - 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108, - 111, 114, 117, 120, 123, 126, 129, 132, 135, 138, 141, 144, 147, 150, 153, 156, - 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 203 }; - // corresponding to 0.9, 230 values quantized to 64 - const TUint8 quantTable9[64] = { - 5, 10, 15, 19, 23, 26, 30, 33, 37, 40, 44, 47, 51, 54, 58, 61, - 65, 68, 72, 75, 79, 82, 86, 89, 93, 96, 100, 103, 107, 110, 114, 117, - 121, 124, 128, 131, 135, 138, 142, 145, 149, 152, 156, 159, 163, 166, 170, 173, - 177, 180, 184, 187, 191, 194, 198, 201, 205, 208, 212, 215, 219, 222, 226, 228 }; - - const TUint8 indexTable[10]={1,2,3,4,5,6,7,8,9,10}; - - // figure out the position of the index (determines which table to use) - TInt frameNumber = aTransitionFramenumber; - if(frameNumber>=iStartNumberOfTransitionFrames) frameNumber=iStartNumberOfTransitionFrames-1; - TInt index = (frameNumber<<1) + aRepeatFrame; - if(index>=numberOfTables) index=numberOfTables-1; - position = indexTable[index]; - - // calculate new values - switch(position) - { - case 10: // 0% frame1, 100% frame2 - ptr.Set(yFrame1,yuvLength,yuvLength); - ptr.Copy(yFrame2,yuvLength); - break; - case 9: // 10% frame1, 90% frame2 - for(i=0; i>5] + quantTable9[(*yFrame2)>>2]); - for(i=0; i>5] + quantTable9[(*uFrame2)>>2] - 10); - *vFrame1 = (TUint8)(quantTable1[(*vFrame1)>>5] + quantTable9[(*vFrame2)>>2] - 10); - } - break; - case 8: // 20% frame1, 80% frame2 - for(i=0; i>4] + quantTable8[(*yFrame2)>>2]); - for(i=0; i>4] + quantTable8[(*uFrame2)>>2] - 15); - *vFrame1 = (TUint8)(quantTable2[(*vFrame1)>>4] + quantTable8[(*vFrame2)>>2] - 15); - } - break; - case 7: // 30% frame1, 70% frame2 - for(i=0; i>4] + quantTable7[(*yFrame2)>>2]); - for(i=0; i>4] + quantTable7[(*uFrame2)>>2] - 15); - *vFrame1 = (TUint8)(quantTable3[(*vFrame1)>>4] + quantTable7[(*vFrame2)>>2] - 15); - } - break; - case 6: // 40% frame1, 60% frame2 - for(i=0; i>3] + quantTable6[(*yFrame2)>>3]); - for(i=0; i>3] + quantTable6[(*uFrame2)>>3] - 10); - *vFrame1 = (TUint8)(quantTable4[(*vFrame1)>>3] + quantTable6[(*vFrame2)>>3] - 10); - } - break; - case 5: // 50% frame1, 50% frame2 - for(i=0; i>3] + quantTable5[(*yFrame2)>>3]); - for(i=0; i>3] + quantTable5[(*uFrame2)>>3] - 5); - *vFrame1 = (TUint8)(quantTable5[(*vFrame1)>>3] + quantTable5[(*vFrame2)>>3] - 5); - } - break; - case 4: // 60% frame1, 40% frame2 - for(i=0; i>3] + quantTable4[(*yFrame2)>>3]); - for(i=0; i>3] + quantTable4[(*uFrame2)>>3] - 10); - *vFrame1 = (TUint8)(quantTable6[(*vFrame1)>>3] + quantTable4[(*vFrame2)>>3] - 10); - } - break; - case 3: // 70% frame1, 30% frame2 - for(i=0; i>2] + quantTable3[(*yFrame2)>>4]); - for(i=0; i>2] + quantTable3[(*uFrame2)>>4] - 8); - *vFrame1 = (TUint8)(quantTable7[(*vFrame1)>>2] + quantTable3[(*vFrame2)>>4] - 8); - } - break; - case 2: // 80% frame1, 20% frame2 - for(i=0; i>2] + quantTable2[(*yFrame2)>>4]); - for(i=0; i>2] + quantTable2[(*uFrame2)>>4] - 8); - *vFrame1 = (TUint8)(quantTable8[(*vFrame1)>>2] + quantTable2[(*vFrame2)>>4] - 8); - } - break; - case 1: // 90% frame1, 10% frame2 - for(i=0; i>2] + quantTable1[(*yFrame2)>>5]); - for(i=0; i>2] + quantTable1[(*uFrame2)>>5] - 5); - *vFrame1 = (TUint8)(quantTable9[(*vFrame1)>>2] + quantTable1[(*vFrame2)>>5] - 5); - } - break; - default: // e.g., 100% frame1, 0% frame2 - break; - } - return; -} - - -// --------------------------------------------------------- -// CVideoProcessor::ApplySlidingTransitionEffect -// Applies sliding transition effect between two YUV frames -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::ApplySlidingTransitionEffect(TUint8* aYUVPtr1, - TUint8* aYUVPtr2, - TVedMiddleTransitionEffect aVedMiddleTransitionEffect, - TInt aRepeatFrame, - TInt aTransitionFramenumber) -{ - TInt i; - TSize tempSize = iProcessor->GetMovieResolution(); - TInt yLength = tempSize.iWidth*tempSize.iHeight; - TInt uLength = yLength>>2; - TInt yWidth = tempSize.iWidth; - TInt uWidth = tempSize.iWidth>>1; - TInt yHeight = tempSize.iHeight; - TInt uHeight = tempSize.iHeight>>1; - TUint8* yFrame1 = (TUint8*)aYUVPtr1; - TUint8* uFrame1 = (TUint8*)(yFrame1+yLength); - TUint8* vFrame1 = (TUint8*)(uFrame1+uLength); - TUint8* yFrame2 = (TUint8*)aYUVPtr2; - TUint8* uFrame2 = (TUint8*)(yFrame2+yLength); - TUint8* vFrame2 = (TUint8*)(uFrame2+uLength); - TPtr8 ptr(0,0); - TInt offset = 0; - TInt ySliceWidth = 0; - TInt uSliceWidth = 0; - TInt sliceSize = 0; - TInt frameNumber = (aTransitionFramenumber<<1) + aRepeatFrame; - - switch(aVedMiddleTransitionEffect) - { - case EVedMiddleTransitionEffectWipeLeftToRight: - // figure out the amount of data to change - VDASSERT(iStartNumberOfTransitionFrames,19); - ySliceWidth = (TInt)((TReal)yWidth * (TReal)(frameNumber+1)/(TReal)(iStartNumberOfTransitionFrames<<1) + 0.5); - if(ySliceWidth>yWidth) ySliceWidth = yWidth; - uSliceWidth = ySliceWidth>>1; - // copy the relevant portions of the image from frame2 to frame1 - // y - for(i=0; iyWidth) ySliceWidth = yWidth; - uSliceWidth = ySliceWidth>>1; - // evaluate the yuv offsets and new positions to point to in the buffer - offset = yWidth-ySliceWidth; - yFrame1+=offset; - yFrame2+=offset; - offset = uWidth-uSliceWidth; - uFrame1+=offset; - uFrame2+=offset; - vFrame1+=offset; - vFrame2+=offset; - // copy the relevant portions of the image from frame2 to frame1 - // y - for(i=0; iyHeight) ySliceWidth = yHeight; - uSliceWidth = ySliceWidth>>1; - // copy the relevant portions of the image from frame2 to frame1 - // y - sliceSize = ySliceWidth * yWidth; - ptr.Set(yFrame1,sliceSize,sliceSize); - ptr.Copy(yFrame2,sliceSize); - // u,v - sliceSize = uSliceWidth * uWidth; - ptr.Set(uFrame1,sliceSize,sliceSize); - ptr.Copy(uFrame2,sliceSize); - ptr.Set(vFrame1,sliceSize,sliceSize); - ptr.Copy(vFrame2,sliceSize); - break; - case EVedMiddleTransitionEffectWipeBottomToTop: - // figure out the amount of data to change - VDASSERT(iStartNumberOfTransitionFrames,22); - ySliceWidth = (TInt)((TReal)yHeight * (TReal)(frameNumber+1)/(TReal)(iStartNumberOfTransitionFrames<<1) + 0.5); - if(ySliceWidth>yHeight) ySliceWidth = yHeight; - uSliceWidth = ySliceWidth>>1; - // evaluate the yuv offsets and new positions to point to in the buffer - offset = (yHeight-ySliceWidth) * yWidth; - yFrame1+=offset; - yFrame2+=offset; - offset = (uHeight-uSliceWidth) * uWidth; - uFrame1+=offset; - uFrame2+=offset; - vFrame1+=offset; - vFrame2+=offset; - // copy the relevant portions of the image from frame2 to frame1 - // y - sliceSize = ySliceWidth * yWidth; - ptr.Set(yFrame1,sliceSize,sliceSize); - ptr.Copy(yFrame2,sliceSize); - // u,v - sliceSize = uSliceWidth * uWidth; - ptr.Set(uFrame1,sliceSize,sliceSize); - ptr.Copy(uFrame2,sliceSize); - ptr.Set(vFrame1,sliceSize,sliceSize); - ptr.Copy(vFrame2,sliceSize); - break; - case EVedMiddleTransitionEffectNone: - case EVedMiddleTransitionEffectDipToBlack: - case EVedMiddleTransitionEffectDipToWhite: - case EVedMiddleTransitionEffectCrossfade: - case EVedMiddleTransitionEffectLast: - default: - break; - } - return; -} - - -// --------------------------------------------------------- -// CVideoProcessor::ApplySpecialEffect -// Applies color effect for a YUV frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::ApplySpecialEffect(TInt aColorEffect, TUint8* aYUVDataPtr, - TInt aColorToneU, TInt aColorToneV) -{ - VDASSERT(aYUVDataPtr,23); - VDASSERT(iVideoWidth,24); - VDASSERT(iVideoHeight,25); - TChar chr; - TInt value; - TInt offset; - TInt length; - // Values for the U & V Fill parameters - TInt uFillValue, vFillValue; - TPtr8 ptr(0,0); - TSize tempSize = iProcessor->GetMovieResolution(); - - // asad - check if mpeg4, then change pixel range from (-128,127) to (0,255) - if (iProcessor->GetOutputVideoType() == EVedVideoTypeMPEG4SimpleProfile) - { - // U - aColorToneU += 128; - if (aColorToneU<0) aColorToneU = 0; - if (aColorToneU>255) aColorToneU = 255; - // V - aColorToneV += 128; - if (aColorToneV<0) aColorToneV = 0; - if (aColorToneV>255) aColorToneV = 255; - } - TChar uChr, vChr; - switch(aColorEffect) - { - case 0/*None*/: - return; - case 1/*BW*/: - value = 128; - chr = value; - offset = tempSize.iWidth*tempSize.iHeight; - length = offset>>1; // u,v data length (2*L/2*W/2) - ptr.Set((TUint8*)(aYUVDataPtr+offset), length, length); - ptr.Fill((TChar)chr); - break; - case 2: - offset = tempSize.iWidth*tempSize.iHeight; - length = offset>>2; - uFillValue = aColorToneU; - uChr = uFillValue; - vFillValue = aColorToneV; - vChr = vFillValue; - - ptr.Set((TUint8*)(aYUVDataPtr + offset), length, length); - ptr.Fill((TChar)uChr); - - offset = 1.25 * offset; // For filling the v-value - ptr.Set((TUint8*)(aYUVDataPtr + offset), length, length); - ptr.Fill((TChar)vChr); - break; - default: - return; - } -} - -// --------------------------------------------------------- -// CVideoProcessor::TFrameOperation2TInt -// Converts frame operation enumeration to int -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoProcessor::TFrameOperation2TInt(TDecoderFrameOperation aFrameOperation) -{ - switch(aFrameOperation) - { - case EDecodeAndWrite: - return 1; - case EDecodeNoWrite: - return 2; - case EWriteNoDecode: - return 3; - case ENoDecodeNoWrite: - return 4; - default: - return KErrGeneral; - } -} - -// --------------------------------------------------------- -// CVideoProcessor::TColorEffect2TInt -// Converts color effect enumeration to int -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoProcessor::TColorEffect2TInt(TVedColorEffect aColorEffect) -{ - switch(aColorEffect) - { - case EVedColorEffectNone: - return 0; - case EVedColorEffectBlackAndWhite: - return 1; - case EVedColorEffectToning: - return 2; - default: - return KErrGeneral; - } -} - - - -// --------------------------------------------------------- -// CVideoProcessor::InputDataAvailable -// Overridden CDataProcessor::InputDataAvailable() method -// Called when new input blocks are available -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::InputDataAvailable(TAny* /*aUserPointer*/) -{ - PRINT((_L("CVideoProcessor::InputDataAvailable()"))); - // Signal ourselves if we are decoding and a request is not - // pending: - if ( iDecoding && !iTranscoderInitPending && !iDecodePending && - (iStatus == KRequestPending) ) - { - PRINT((_L("CVideoProcessor::InputDataAvailable() - complete request"))); - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } -} - - -// --------------------------------------------------------- -// CVideoProcessor::StreamEndReached -// Overridden CDataProcessor::StreamEndReached() method -// Called when input stream has ended -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CVideoProcessor::StreamEndReached(TAny* /*aUserPointer*/) -{ - PRINT((_L("CVideoProcessor::StreamEndReached()"))); - iStreamEnd = ETrue; -} - -// --------------------------------------------------------- -// CVideoProcessor::DoCancel -// Cancels any asynchronous requests pending. -// -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::DoCancel() -{ - - // Cancel our internal request - if ( iStatus == KRequestPending ) - { - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrCancel); - } - -} - -// --------------------------------------------------------- -// CVideoProcessor::GetNextClipTransitionInfo -// Get the start transition info of the next clip. -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CVideoProcessor::GetNextClipTransitionInfo() -{ - if ( iNextTransitionNumber == -1 ) - { - iNextTransitionNumber = iProcessor->NextClipStartTransitionNumber(); - } -} - -// --------------------------------------------------------- -// CVideoProcessor::DetermineResolutionChange -// This function checks if the video clip is needed to be resampled -// (other items were commented in a header). -// --------------------------------------------------------- -// Resolution Transcoder, check if this video clip need to be resample - -TBool CVideoProcessor::DetermineResolutionChange() -{ - TSize VideoClipResolution = iProcessor->GetVideoClipResolution(); - TSize MovieResolution = iProcessor->GetMovieResolution(); - if (VideoClipResolution != MovieResolution) - return ETrue; - else - return EFalse; -} - -// --------------------------------------------------------- -// CVideoProcessor::DetermineFrameRateChange -// This function checks if the frame rate must be changed -// => clip re-encoded -// (other items were commented in a header). -// --------------------------------------------------------- -// -TBool CVideoProcessor::DetermineFrameRateChange() - { - - TReal clipFrameRate = iProcessor->GetVideoClipFrameRate(); - TReal movieFrameRate = iProcessor->GetMovieFrameRate(); - - // Do re-encoding only when reducing frame rate, - // otherwise we would have to come up with new frames - if ( movieFrameRate > 0 && clipFrameRate > movieFrameRate ) - return ETrue; - - return EFalse; - - } - -// --------------------------------------------------------- -// CVideoProcessor::DetermineFrameRateChange -// This function checks if the bitrate must be changed -// => clip re-encoded -// (other items were commented in a header). -// --------------------------------------------------------- -// -TBool CVideoProcessor::DetermineBitRateChange() - { - - // : AVC bitrate transcoding from a higher level - // to lower if resolution transcoding is not needed - - if ( iProcessor->GetMovieVideoBitrate() > 0 ) // movie has bitrate restriction => need to transcode - return ETrue; - - if ( iProcessor->GetOutputVideoType() == EVedVideoTypeH263Profile0Level10 ) - { - if (iDataFormat == EDataH263) - { - if ( (iProcessor->GetCurrentClipVideoType() != EVedVideoTypeH263Profile0Level10) && - (iProcessor->GetCurrentClipVideoType() != EVedVideoTypeUnrecognized) ) - return ETrue; - } - - else if (iDataFormat == EDataMPEG4) - { - // level 0 and level 1 max bitrate is 64 kb/s - // others need to be transcoded - if (iInputMPEG4ProfileLevelId != 8 && iInputMPEG4ProfileLevelId != 1) - return ETrue; - } - } - - return EFalse; - - } - - -// --------------------------------------------------------- -// CVideoProcessor::GetFrameDuration -// Calculates the duration of current frame -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CVideoProcessor::GetFrameDuration(TInt aFrameNumber) -{ - // calculate frame duration in ticks - TInt startFrame = iProcessor->GetOutputNumberOfFrames() - iNumberOfFrames; - TInt absFrameNumber = startFrame + aFrameNumber; - TInt cur = absFrameNumber; - TInt next = cur+1; - - // frameDuration is in ticks, with timescale of the current input clip - if(next >= iProcessor->GetOutputNumberOfFrames()) - { - return I64INT(iProcessor->GetVideoClipDuration() - iProcessor->VideoFrameTimeStamp(cur) ); - } - else - { - return I64INT( iProcessor->VideoFrameTimeStamp(next) - iProcessor->VideoFrameTimeStamp(cur) ); - } -} - -// --------------------------------------------------------- -// CVideoProcessor::CheckVosHeaderL -// Checks whether the resynch bit is set if set then resets to zero -// (other items were commented in a header). -// @return TBool -// --------------------------------------------------------- -// - -TBool CVideoProcessor::CheckVosHeaderL(TPtrC8& aBuf) -{ - return iDecoder->CheckVOSHeaderL((TPtrC8&)aBuf); -} - - -// --------------------------------------------------------- -// CVideoProcessor::RenderFrame -// The H.263 decoder calls this function when a decoded -// frame is available for retrieving -// @return TInt -// --------------------------------------------------------- -// -TInt CVideoProcessor::RenderFrame(TAny* aFrame) -{ - iDecoder->FrameRendered(aFrame); - return KErrNone; -} - -// --------------------------------------------------------- -// CVideoProcessor::MtoTimerElapsed -// Called when timer has elapsed -// --------------------------------------------------------- -// -void CVideoProcessor::MtoTimerElapsed(TInt aError) -{ - - PRINT((_L("CVideoProcessor::MtoTimerElapsed() begin"))); - - if (aError != KErrNone) - { - iMonitor->Error(aError); - return; - } - - VDASSERT(iFrameInfoArray[0].iEncodeFrame == 1, 110); - - // if next frame in encode queue is an intermediate modification frame - // and modification has not yet been applied, start waiting timer again - if ( ( (iFrameInfoArray[0].iTransitionFrame == 1) || - (iProcessor->GetColorEffect() != EVedColorEffectNone) ) && - iFrameInfoArray[0].iModificationApplied == 0 ) - { - PRINT((_L("CVideoProcessor::MtoTimerElapsed() - modification not done yet, set timer"))); - - iTimer->SetTimer( TTimeIntervalMicroSeconds32( GetEncodingDelay() ) ); - return; - } - - PRINT((_L("CVideoProcessor::MtoTimerElapsed() - removing pic with ts %d ms"), - I64INT(iProcessor->GetVideoTimeInMsFromTicks(iFrameInfoArray[0].iTimeStamp, EFalse)) )) - - // save frame number to be able to recover in case the frame - // gets encoded regardless of the delay - iSkippedFrameNumber = iFrameInfoArray[0].iFrameNumber; - - // remove skipped frame from queue - iFrameInfoArray.Remove(0); - - PRINT((_L("CVideoProcessor::MtoTimerElapsed() - %d items in queue"), iFrameInfoArray.Count())); - - if (iDecodingSuspended && !iStreamEndRead) - { - if (iFrameInfoArray.Count() < iMaxItemsInProcessingQueue && !iDelayedWrite) - { - PRINT((_L("CVideoProcessor::MtoTimerElapsed() - Resume decoding"))); - iDecodingSuspended = EFalse; - // activate object to start decoding - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - return; - } - } - - if ( !IsEncodeQueueEmpty() ) - { - // if there are still frames to be encoded, and next one is waiting, - // set timer again - if ( IsNextFrameBeingEncoded() ) - { - if ( !iTimer->IsPending() ) - { - PRINT((_L("CVideoProcessor::MtoTimerElapsed(), set timer again"))); - iTimer->SetTimer( TTimeIntervalMicroSeconds32( iMaxEncodingDelay ) ); - } - } - return; - } - - if (iDelayedWrite) - { - PRINT((_L("CVideoProcessor::MtoTimerElapsed(), writing delayed frame"))); - // write delayed frame - TRAPD( error, WriteDelayedFrameL() ); - if (error != KErrNone) - { - iMonitor->Error(aError); - return; - } - } - - if ( iStreamEndRead ) - { - if ( iFrameInfoArray.Count() != 0 ) - { - // return now if we have read stream end, but there are still frames waiting - // to be decoded => processing will be completed in MtroPictureFromTranscoder - PRINT((_L("CVideoProcessor::MtoTimerElapsed(), end read but frames in progress, return"))); - return; - } - - else - { - // activate to stop processing - PRINT((_L("CVideoProcessor::MtoTimerElapsed(), end read and all frames processed, stopping"))); - iProcessingComplete = ETrue; - } - } - - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - // activate object to continue/end processing - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - PRINT((_L("CVideoProcessor::MtoTimerElapsed() end"))); -} - -// --------------------------------------------------------- -// CVideoProcessor::WriteBufferL -// Called by transcoder to pass an encoded buffer -// --------------------------------------------------------- -// -void CVideoProcessor::WriteBufferL(CCMRMediaBuffer* aBuffer) -{ - if ( iFrameInfoArray.Count() == 0 ) - { - PRINT((_L("CVideoProcessor::WriteBufferL() not ready to receive buffer, return"))); - return; - } - - if ( ((iFrameInfoArray[0].iTranscoderMode != EFullWithIM) && - (iFrameInfoArray[0].iTranscoderMode != EFull)) || - (iFrameInfoArray[0].iEncodeFrame != 1) ) - { - PRINT((_L("CVideoProcessor::WriteBufferL() encoded picture received but not expected, ignore & return"))); - return; - } - - - // cancel timer - iTimer->CancelTimer(); - - if (aBuffer->Type() == CCMRMediaBuffer::EVideoMPEG4DecSpecInfo) - { - // should not happen - return; - } - - TTimeIntervalMicroSeconds encodedTs = aBuffer->TimeStamp(); - - PRINT((_L("CVideoProcessor::WriteBufferL(), timestamp %d ms, keyFrame = %d"), - I64INT( encodedTs.Int64() ) / 1000, aBuffer->RandomAccessPoint() )); - - TBool removeItem = ETrue; - TInt64 timeStamp = 0; - TInt frameNumber = 0; - - while (iFrameInfoArray.Count()) - { - TTimeIntervalMicroSeconds ts = (iProcessor->GetVideoTimeInMsFromTicks(iFrameInfoArray[0].iTimeStamp, EFalse)) * 1000; - - if (ts < encodedTs) - { - // a frame has been skipped - iFrameInfoArray.Remove(0); - PRINT((_L("CVideoProcessor::WriteBufferL() frame skipped - number of items in queue: %d"), iFrameInfoArray.Count())); - } - else if (ts > encodedTs) - { - // this frame has most likely been treated as skipped using timer, - // but it was encoded regardless - removeItem = EFalse; - frameNumber = iSkippedFrameNumber; - timeStamp = iProcessor->GetVideoTimeInTicksFromMs( encodedTs.Int64() / 1000, EFalse ); - - PRINT((_L("CVideoProcessor::WriteBufferL() frame skipped falsely, ts in ticks = %d"), I64INT(timeStamp))); - break; - } - else - { - // normal case, encoded frame timestamp is as expected - timeStamp = iFrameInfoArray[0].iTimeStamp; - frameNumber = iFrameInfoArray[0].iFrameNumber; - break; - } - } - - VDASSERT(iFrameInfoArray.Count(), 50); - - // set descriptor for writing the frame - TPtr8 writeDes(0,0); - writeDes.Set(const_cast(aBuffer->Data().Ptr()), - aBuffer->Data().Length(), aBuffer->Data().Length()); - - HBufC8* tempBuffer = 0; - TInt error; - - if ( (iProcessor->GetOutputVideoType() == EVedVideoTypeMPEG4SimpleProfile) && - (!iOutputVolHeaderWritten) && (frameNumber >= iFirstIncludedFrameNumber) ) - { - VDASSERT(iOutputVolHeader, 51); - - // MPEG-4 output: - // Encoded frame is the first one of the clip, insert VOL header at the beginning - // Allocate a temp buffer to include vol header and the encoded frame - TInt length = iOutputVolHeader->Length() + aBuffer->Data().Length(); - TRAP(error, tempBuffer = (HBufC8*) HBufC8::NewL(length) ); - - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - - TPtr8 ptr( tempBuffer->Des() ); - ptr.Copy(iOutputVolHeader->Des()); - ptr.Append(aBuffer->Data()); - - writeDes.Set(tempBuffer->Des()); - iOutputVolHeaderWritten = ETrue; - } - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - if (iProcessor->GetOutputVideoType() == EVedVideoTypeAVCBaselineProfile) - { - - // get number of NAL units - TUint8* tmp = const_cast(aBuffer->Data().Ptr() + aBuffer->Data().Length()); - - tmp -= 4; - TInt numNalUnits = TInt(tmp[0]) + (TInt(tmp[1])<<8) + (TInt(tmp[2])<<16) + (TInt(tmp[3])<<24); - - TInt totalLength = 0; - - // get nal_unit_type of first NAL - TUint8* type = const_cast(aBuffer->Data().Ptr()); - TInt nalType = *type & 0x1F; - - PRINT((_L("CVideoProcessor::WriteBufferL() - # of NAL units = %d, frame # = %d, nal_unit_type = %d"), - numNalUnits, frameNumber, nalType)); - - if (nalType != 1 && nalType != 5) - { - // there are extra SPS/PPS units in the beginning - // of the buffer, skip those - numNalUnits--; - - if (numNalUnits == 0) - { - PRINT((_L("CVideoProcessor::WriteBufferL() No NAL units left, return"))); - return; - } - - // point to first length field - tmp = const_cast(aBuffer->Data().Ptr() + aBuffer->Data().Length()); - tmp -= 4; // # - tmp -= numNalUnits * 8; // offset & length for each NAL - tmp += 4; // skip offset - - // get NAL length - TInt len = TInt(tmp[0]) + (TInt(tmp[1])<<8) + (TInt(tmp[2])<<16) + (TInt(tmp[3])<<24); - type += len; - nalType = *type & 0x1F; - - while (nalType != 1 && nalType != 5 && numNalUnits) - { - numNalUnits--; - tmp += 8; - len = TInt(tmp[0]) + (TInt(tmp[1])<<8) + (TInt(tmp[2])<<16) + (TInt(tmp[3])<<24); - type += len; - nalType = *type & 0x1F; - } - tmp = const_cast(aBuffer->Data().Ptr() + aBuffer->Data().Length()) - 4; - } - - if (numNalUnits == 0) - { - PRINT((_L("CVideoProcessor::WriteBufferL() No NAL units left, return"))); - return; - } - - // rewind to last length field - tmp -= 4; - - // get total length of slices - for (TInt x = numNalUnits; x > 0; x--) - { - totalLength += TInt(tmp[0]) + (TInt(tmp[1])<<8) + (TInt(tmp[2])<<16) + (TInt(tmp[3])<<24); - tmp -= 8; - } - - TInt tempLength = totalLength + numNalUnits*4; - - // allocate output buffer - TRAP(error, tempBuffer = (HBufC8*) HBufC8::NewL(tempLength) ); - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - - TUint8* dst = const_cast(tempBuffer->Des().Ptr()); - TUint8* src = const_cast(aBuffer->Data().Ptr()); - - // point to first offset field - tmp += 4; - - for (TInt x = numNalUnits; x > 0; x--) - { - // get length - tmp += 4; - TInt length = TInt(tmp[0]) + (TInt(tmp[1])<<8) + (TInt(tmp[2])<<16) + (TInt(tmp[3])<<24); - - // set length - dst[0] = TUint8((length >> 24) & 0xff); - dst[1] = TUint8((length >> 16) & 0xff); - dst[2] = TUint8((length >> 8) & 0xff); - dst[3] = TUint8(length & 0xff); - dst += 4; - - // copy data - TPtr8 ptr(dst, length); - ptr.Copy(src, length); - - dst += length; - src += length; - - // point to next offset field - tmp +=4; - } - - writeDes.Set(tempBuffer->Des()); - writeDes.SetLength(tempLength); - - } -#endif - - // Figure out are we writing frames from the first - // or second clip in color transition - - TBool colorTransitionFlag = ETrue; - TInt index = KNumTransitionFrames / 4; - - if ( iFrameInfoArray[0].iTransitionFrame == 1 && - iFrameInfoArray[0].iTransitionPosition == EPositionStartOfClip && - iStartTransitionColor == EColorTransition ) - { - if ( ( (iFrameInfoArray[0].iTransitionFrameNumber == index) && - (iFrameInfoArray[0].iRepeatFrame == 0) ) || - iFrameInfoArray[0].iTransitionFrameNumber < index ) - { - colorTransitionFlag = EFalse; - } - } - - // write frame - error = iProcessor->WriteVideoFrameToFile((TDesC8&)writeDes, - timeStamp, 0 /*dummy*/, - aBuffer->RandomAccessPoint(), EFalse, colorTransitionFlag, ETrue ); - - if (tempBuffer) - delete tempBuffer; - - if (error == KErrCompletion) - { - PRINT((_L("CVideoProcessor::WriteBufferL() - processing complete"))); - // stop processing - iProcessingComplete = ETrue; - iFrameInfoArray.Reset(); - VDASSERT(iTranscoderStarted, 51); - iTransCoder->StopL(); - iTranscoderStarted = EFalse; - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - - // activate object to end processing - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - return; - } - - else if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - - TInt startFrame = iProcessor->GetOutputNumberOfFrames() - iNumberOfFrames; - TInt absFrameNumber = startFrame + frameNumber; - - // save frame number - iLastWrittenFrameNumber = frameNumber; - - iProcessor->SetFrameType(absFrameNumber, aBuffer->RandomAccessPoint()); - - if (removeItem) - { - iFrameInfoArray.Remove(0); - - PRINT((_L("CVideoProcessor::WriteBufferL() - removed encoded pic, %d items in queue"), iFrameInfoArray.Count())); - } - else - PRINT((_L("CVideoProcessor::WriteBufferL() - did not remove encoded pic, %d items in queue"), iFrameInfoArray.Count())); - - - if (iDecodingSuspended && !iStreamEndRead) - { - if (iFrameInfoArray.Count() < iMaxItemsInProcessingQueue && !iDelayedWrite) - { - PRINT((_L("CVideoProcessor::WriteBufferL() - Resume decoding"))); - iDecodingSuspended = EFalse; - // activate object to start decoding - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - return; - } - } - - // if there are still frames to be encoded, start timer again - if ( !IsEncodeQueueEmpty() ) - { - // check if the next frame in queue is waiting to be encoded, set timer if so - if ( IsNextFrameBeingEncoded() ) - { - if ( !iTimer->IsPending() ) - { - PRINT((_L("CVideoProcessor::WriteBufferL(), set timer"))); - iTimer->SetTimer( TTimeIntervalMicroSeconds32( iMaxEncodingDelay ) ); - } - } - return; - } - - if (iStreamEndRead && !iDelayedWrite) - { - - PRINT((_L("CVideoProcessor::WriteBufferL() - stream end read & !iDelayedWrite"))); - - // stream end has been read - if (iFrameInfoArray.Count() == 0) - { - PRINT((_L("CVideoProcessor::WriteBufferL() - stream end read, no frames left"))); - // end - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - iProcessingComplete = ETrue; - // activate object to end processing - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - } - // else there are frames to be decoded, processing will be completed - // MtroPictureFromTranscoder - return; - } - - if (iDelayedWrite) - { - if ( IsEncodeQueueEmpty() ) - { - PRINT((_L("CVideoProcessor::WriteBufferL() writing delayed frame"))); - - TRAP(error, WriteDelayedFrameL()); - if (error != KErrNone) - { - iMonitor->Error(error); - return; - } - - if ( iStreamEndRead ) - { - if ( iFrameInfoArray.Count() != 0 ) - { - // return now if we have read stream end, but there are still frames waiting - // to be decoded => processing will be completed in MtroPictureFromTranscoder - PRINT((_L("CVideoProcessor::WriteBufferL(), end read but frames in progress, return"))); - return; - } - else - { - // activate to stop processing - PRINT((_L("CVideoProcessor::WriteBufferL(), end read and all frames processed, stopping"))); - iProcessingComplete = ETrue; - } - } - - if (!IsActive()) - { - SetActive(); - iStatus = KRequestPending; - } - // activate object to continue/end processing - TRequestStatus *status = &iStatus; - User::RequestComplete(status, KErrNone); - return; - } - else - { - // check if the next frame in queue is waiting to be encoded, set timer if so - if ( IsNextFrameBeingEncoded() ) - { - if ( !iTimer->IsPending() ) - { - PRINT((_L("CVideoProcessor::WriteBufferL() - iDelayedWrite, set timer"))); - iTimer->SetTimer( TTimeIntervalMicroSeconds32( iMaxEncodingDelay ) ); - } - return; - } - } - } - -} - -// --------------------------------------------------------- -// CVideoProcessor::IsEncodeQueueEmpty -// (other items were commented in a header) -// --------------------------------------------------------- -// -TBool CVideoProcessor::IsEncodeQueueEmpty() -{ - - // check if there are still frames waiting to be encoded - for (TInt i = 0; i < iFrameInfoArray.Count(); i++) - { - if (iFrameInfoArray[i].iEncodeFrame == 1) - { - return EFalse; - } - } - return ETrue; - -} - -// --------------------------------------------------------- -// CVideoProcessor::IsNextFrameBeingEncoded -// (other items were commented in a header) -// --------------------------------------------------------- -// -TBool CVideoProcessor::IsNextFrameBeingEncoded() -{ - - // check if the next frame in queue is waiting to be encoded - if ( iFrameInfoArray.Count() && (iFrameInfoArray[0].iEncodeFrame == 1) ) - { - - VDASSERT( ( iFrameInfoArray[0].iTranscoderMode == EFull || - iFrameInfoArray[0].iTranscoderMode == EFullWithIM ), 120 ); - - if ( (iFrameInfoArray[0].iTranscoderMode == EFull) || - (iFrameInfoArray[0].iModificationApplied == 1) ) - { - return ETrue; - } - } - - return EFalse; - -} - -// --------------------------------------------------------- -// CVideoProcessor::GetEncodingDelay -// (other items were commented in a header) -// --------------------------------------------------------- -// -TInt CVideoProcessor::GetEncodingDelay() -{ - - // number of decode only -frames in queue before first encode frame - TInt numDecodeFrames = 0; - - TInt i; - for (i = 0; i < iFrameInfoArray.Count(); i++) - { - // get index of next encode frame in queue - if (iFrameInfoArray[i].iEncodeFrame == 1) - break; - else - numDecodeFrames++; - } - - VDASSERT(i < iFrameInfoArray.Count(), 112); - - TInt delay = iMaxEncodingDelay; - - // If the next frame in encoding queue is an intermediate modification frame - // (either transition frame or color effect has to be applied) - // and modification has not been applied to it, double the default delay - if ( ( (iFrameInfoArray[0].iTransitionFrame == 1) || - (iProcessor->GetColorEffect() != EVedColorEffectNone) ) && - iFrameInfoArray[0].iModificationApplied == 0 ) - { - PRINT((_L("CVideoProcessor::GetEncodingDelay() - double the delay"))); - delay <<= 1; - } - - // add time to process decode-only frames to delay - delay += numDecodeFrames * (iMaxEncodingDelay / 2); - - PRINT((_L("CVideoProcessor::GetEncodingDelay() - encoding delay = %d ms, num decode frames %d"), delay/1000, numDecodeFrames)); - - return delay; - - - -} - -// --------------------------------------------------------- -// CVideoProcessor::WriteDelayedFrameL -// (other items were commented in a header) -// --------------------------------------------------------- -// -void CVideoProcessor::WriteDelayedFrameL() -{ - - PRINT((_L("CVideoProcessor::WriteDelayedFrameL() begin"))); - - // write the delayed frame - TPtr8 ptr(iDelayedBuffer->Des()); - - TInt error = iProcessor->WriteVideoFrameToFile(ptr, - iDelayedTimeStamp, 0 /*dummy*/, - iDelayedKeyframe, EFalse, EFalse, EFalse ); - - if (error == KErrCompletion) - { - PRINT((_L("CVideoProcessor::WriteDelayedFrameL() write delayed frame, processing complete"))); - VDASSERT(iTranscoderStarted, 51); - iTransCoder->StopL(); - iTranscoderStarted = EFalse; - iFrameInfoArray.Reset(); - iTimer->CancelTimer(); - iProcessingComplete = ETrue; - } - else if (error != KErrNone) - { - User::Leave(error); - } - - // save frame number - iLastWrittenFrameNumber = iDelayedFrameNumber; - - delete iDelayedBuffer; - iDelayedBuffer = 0; - iDelayedWrite = EFalse; - - PRINT((_L("CVideoProcessor::WriteDelayedFrameL() end"))); - -} - -TInt CVideoProcessor::SetVideoFrameSize(TSize /*aSize*/) -{ - - PRINT((_L("CVideoProcessor::SetVideoFrameSize()"))) - - return KErrNone; -} - -TInt CVideoProcessor::SetAverageVideoBitRate(TInt /*aBitRate*/) -{ - - PRINT((_L("CVideoProcessor::SetAverageVideoBitRate()"))) - - return KErrNone; -} - - -TInt CVideoProcessor::SetMaxVideoBitRate(TInt /*aBitRate*/) -{ - PRINT((_L("CVideoProcessor::SetMaxVideoBitRate()"))) - - return KErrNone; -} - -TInt CVideoProcessor::SetAverageAudioBitRate(TInt /*aBitRate*/) -{ - PRINT((_L("CVideoProcessor::SetAverageAudioBitRate()"))) - - return KErrNone; -} - -// --------------------------------------------------------- -// CVideoProcessor::SetVideoCodecL() -// Interpret and store video mime type -// --------------------------------------------------------- -// -void CVideoProcessor::SetOutputVideoCodecL(const TPtrC8& aMimeType) - { - TBuf8<256> string; - TBuf8<256> newMimeType; - string = KVedMimeTypeH263; - string += _L8( "*" ); - - iMaxOutputFrameRate = 15.0; - iArbitrarySizeAllowed = EFalse; - - if ( aMimeType.MatchF( (const TDesC8& )string ) != KErrNotFound ) - { - // H.263 - - newMimeType = KVedMimeTypeH263; - - if ( aMimeType.MatchF( _L8("*profile*") ) != KErrNotFound ) - { - // profile given, check if we support it - if ( aMimeType.MatchF( _L8("*profile=0*")) != KErrNotFound ) - { - // profile 0 requested - newMimeType += _L8( "; profile=0" ); - } - else - { - // no other profiles supported - PRINT((_L("CVideoEncoder::SetVideoCodecL() unsupported profile"))); - User::Leave(KErrNotSupported); - } - } - else - { - // no profile is given => assume 0 - newMimeType += _L8( "; profile=0" ); - } - - if ( aMimeType.MatchF( _L8("*level=10*") ) != KErrNotFound ) - { - iMaxOutputBitRate = iOutputBitRate = KVedBitRateH263Level10; - iMaxOutputResolution = KVedResolutionQCIF; - //dataBufferSize = KMaxCodedPictureSizeQCIF; - newMimeType += _L8( "; level=10" ); - } - else if ( aMimeType.MatchF( _L8("*level=45*") ) != KErrNotFound ) - { - iMaxOutputBitRate = iOutputBitRate = KVedBitRateH263Level45; - iMaxOutputResolution = KVedResolutionQCIF; - //dataBufferSize = KMaxCodedPictureSizeQCIF; - newMimeType += _L8( "; level=45" ); - } - else if ( aMimeType.MatchF( _L8("*level*") ) != KErrNotFound ) - { - // no other levels supported - PRINT((_L("CVideoEncoder::SetVideoCodecL() unsupported level"))); - User::Leave(KErrNotSupported); - } - else - { - // if no level is given assume 10 - iMaxOutputBitRate = iOutputBitRate = KVedBitRateH263Level10; - iMaxOutputResolution = KVedResolutionQCIF; - //dataBufferSize = KMaxCodedPictureSizeQCIF; - newMimeType += _L8( "; level=10" ); - } - } - else - { - string = KVedMimeTypeMPEG4Visual; - string += _L8( "*" ); - - if ( aMimeType.MatchF( string ) != KErrNotFound ) - { - // MPEG-4 Visual - newMimeType = KVedMimeTypeMPEG4Visual; - if ( aMimeType.MatchF( _L8("*profile-level-id=8*") ) != KErrNotFound ) - { - // simple profile level 0 - iMaxOutputBitRate = iOutputBitRate = KVedBitRateMPEG4Level0; - iMaxOutputResolution = KVedResolutionQCIF; - // define max size 10K - //dataBufferSize = KMaxCodedPictureSizeMPEG4QCIF; - newMimeType += _L8("; profile-level-id=8"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=9*") ) != KErrNotFound ) - { - // simple profile level 0b - iMaxOutputBitRate = iOutputBitRate = KVedBitRateMPEG4Level0; - iMaxOutputResolution = KVedResolutionQCIF; - // define max size 10K - //dataBufferSize = KMaxCodedPictureSizeMPEG4QCIF; - newMimeType += _L8("; profile-level-id=9"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=1*") ) != KErrNotFound ) - { - // simple profile level 1 - iMaxOutputBitRate = iOutputBitRate = KVedBitRateMPEG4Level0; - iMaxOutputResolution = KVedResolutionQCIF; - // define max size 10K - //dataBufferSize = KMaxCodedPictureSizeMPEG4QCIF; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=1"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=2*") ) != KErrNotFound ) - { - // simple profile level 2 - //dataBufferSize = KMaxCodedPictureSizeMPEG4CIF; - iMaxOutputResolution = KVedResolutionCIF; - iMaxOutputBitRate = iOutputBitRate = KVedBitRateMPEG4Level2; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=2"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=3*") ) != KErrNotFound ) - { - // simple profile level 3 - //dataBufferSize = KMaxCodedPictureSizeMPEG4CIF; - iMaxOutputBitRate = iOutputBitRate = KVedBitRateMPEG4Level2; - iMaxOutputResolution = KVedResolutionCIF; - iMaxOutputFrameRate = 30.0; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=3"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=4*") ) != KErrNotFound ) - { - // simple profile level 4a - iMaxOutputBitRate = iOutputBitRate = KVedBitRateMPEG4Level4A; - //dataBufferSize = KMaxCodedPictureSizeVGA; - iMaxOutputResolution = KVedResolutionVGA; - iMaxOutputFrameRate = 30.0; - iArbitrarySizeAllowed = ETrue; - newMimeType += _L8("; profile-level-id=4"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=*") ) != KErrNotFound ) - { - // no other profile-level ids supported - PRINT((_L("CVideoEncoder::SetVideoCodecL() unsupported MPEG-4 profile-level"))); - User::Leave(KErrNotSupported); - } - else - { - // Default is level 0 in our case (normally probably level 1) - iMaxOutputBitRate = iOutputBitRate = KVedBitRateMPEG4Level0; - iMaxOutputResolution = KVedResolutionQCIF; - // define max size 10K - //dataBufferSize = KMaxCodedPictureSizeMPEG4QCIF; - newMimeType += _L8("; profile-level-id=8"); - } - } - - else - { - -#ifdef VIDEOEDITORENGINE_AVC_EDITING - string = KVedMimeTypeAVC; - string += _L8( "*" ); - - if ( aMimeType.MatchF( string ) != KErrNotFound ) - { - // AVC - newMimeType = KVedMimeTypeAVC; - if ( aMimeType.MatchF( _L8("*profile-level-id=42800A*") ) != KErrNotFound ) - { - // baseline profile level 1 - iMaxOutputBitRate = iOutputBitRate = KVedBitRateAVCLevel1; - iMaxOutputResolution = KVedResolutionQCIF; - newMimeType += _L8("; profile-level-id=42800A"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42900B*") ) != KErrNotFound ) - { - // baseline profile level 1b - iMaxOutputBitRate = iOutputBitRate = KVedBitRateAVCLevel1b; - iMaxOutputResolution = KVedResolutionQCIF; - newMimeType += _L8("; profile-level-id=42900B"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42800B*") ) != KErrNotFound ) - { - // baseline profile level 1.1 - iMaxOutputBitRate = iOutputBitRate = KVedBitRateAVCLevel1_1; - iMaxOutputResolution = KVedResolutionCIF; - newMimeType += _L8("; profile-level-id=42800B"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42800C*") ) != KErrNotFound ) - { - // baseline profile level 1.2 - iMaxOutputBitRate = iOutputBitRate = KVedBitRateAVCLevel1_2; - iMaxOutputResolution = KVedResolutionCIF; - newMimeType += _L8("; profile-level-id=42800C"); - } - //WVGA task - else if ( aMimeType.MatchF( _L8("*profile-level-id=42801E*") ) != KErrNotFound ) - { - // baseline profile level 3.0 - iMaxOutputBitRate = iOutputBitRate = KVedBitRateAVCLevel3; - iMaxOutputResolution = KVedResolutionWVGA; - newMimeType += _L8("; profile-level-id=42801E"); - } - - else if ( aMimeType.MatchF( _L8("*profile-level-id=42801F*") ) != KErrNotFound ) - { - // baseline profile level 3.1 - iMaxOutputBitRate = iOutputBitRate = KVedBitRateAVCLevel3_1; - iMaxOutputResolution = KVedResolutionWVGA; - newMimeType += _L8("; profile-level-id=42801F"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=*") ) != KErrNotFound ) - { - // no other profile-level ids supported - PRINT((_L("CVideoEncoder::SetVideoCodecL() unsupported AVC profile-level"))); - User::Leave(KErrNotSupported); - } - else - { - // Default is level 1 (?) - iMaxOutputBitRate = iOutputBitRate = KVedBitRateAVCLevel1; - iMaxOutputResolution = KVedResolutionQCIF; - newMimeType += _L8("; profile-level-id=42800A"); - } - } - - else - { - // unknown mimetype - User::Leave( KErrNotSupported ); - } -#else - - // unknown mimetype - User::Leave( KErrNotSupported ); - -#endif - } - } - - // successfully interpreted the input mime type - iOutputMimeType = newMimeType; - - /*if ( iDataBuffer ) - { - delete iDataBuffer; - iDataBuffer = NULL; - } - iDataBuffer = (HBufC8*) HBufC8::NewL(dataBufferSize); */ - - } - -// --------------------------------------------------------- -// CVideoProcessor::GetVosHeaderSize() -// Gets the size of MPEG-4 VOS header (from encoder) -// --------------------------------------------------------- -// -TInt CVideoProcessor::GetVosHeaderSize() -{ - VDASSERT(iOutputVolHeader, 190); - - return iOutputVolHeader->Length(); -} - -// --------------------------------------------------------- -// CCallbackTimer::NewL() -// Two-phased constructor -// --------------------------------------------------------- -// -CCallbackTimer* CCallbackTimer::NewL(MTimerObserver& aObserver) -{ - - CCallbackTimer* self = new (ELeave) CCallbackTimer(aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - - return self; -} - -// --------------------------------------------------------- -// CCallbackTimer::CCallbackTimer() -// C++ default constructor. -// --------------------------------------------------------- -// -CCallbackTimer::CCallbackTimer(MTimerObserver& aObserver) : - CActive(EPriorityStandard), iObserver(aObserver) - -{ -} - -// --------------------------------------------------------- -// CCallbackTimer::~CCallbackTimer() -// Destructor -// --------------------------------------------------------- -// -CCallbackTimer::~CCallbackTimer() -{ - Cancel(); - - if ( iTimerCreated ) - { - iTimer.Close(); - iTimerCreated = EFalse; - } -} - -// --------------------------------------------------------- -// CCallbackTimer::ConstructL() -// Symbian 2nd phase constructor -// --------------------------------------------------------- -// -void CCallbackTimer::ConstructL() -{ - // Create a timer - User::LeaveIfError(iTimer.CreateLocal()); - iTimerCreated = ETrue; - - // Add us to active scheduler - CActiveScheduler::Add(this); -} - -// --------------------------------------------------------- -// CCallbackTimer::SetTimer() -// Set timer -// --------------------------------------------------------- -// -void CCallbackTimer::SetTimer(TTimeIntervalMicroSeconds32 aDuration) -{ - -// __ASSERT_DEBUG(!iTimerRequestPending != 0, -5000); //CSI: #174-D: expression has no effect, just an assert debug no effect intended -// __ASSERT_DEBUG(iTimerCreated, -5001); - - PRINT((_L("CCallbackTimer::SetTimer()"))) - - // activate timer to wait for encoding - SetActive(); - iStatus = KRequestPending; - iTimer.After(iStatus, aDuration); - iTimerRequestPending = ETrue; - -} - -// --------------------------------------------------------- -// CCallbackTimer::CancelTimer() -// Cancel timer -// --------------------------------------------------------- -// -void CCallbackTimer::CancelTimer() -{ - PRINT((_L("CCallbackTimer::CancelTimer()"))) - Cancel(); -} - -// --------------------------------------------------------- -// CCallbackTimer::RunL() -// AO running method -// --------------------------------------------------------- -// -void CCallbackTimer::RunL() -{ - if ( iTimerRequestPending ) - { - iTimerRequestPending = EFalse; - - // call observer - iObserver.MtoTimerElapsed(KErrNone); - } -} - -// --------------------------------------------------------- -// CCallbackTimer::DoCancel() -// AO cancelling method -// --------------------------------------------------------- -// -void CCallbackTimer::DoCancel() -{ - - // Cancel our timer request if we have one - if ( iTimerRequestPending ) - { - iTimer.Cancel(); - iTimerRequestPending = EFalse; - return; - } - -} - -// --------------------------------------------------------- -// CCallbackTimer::RunError() -// AO RunL error method -// --------------------------------------------------------- -// -TInt CCallbackTimer::RunError(TInt aError) -{ - Cancel(); - - // call observer - iObserver.MtoTimerElapsed(aError); - - return KErrNone; -} - - -// End of File - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/yuv2rgb12.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/yuv2rgb12.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,433 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation of class CYuv2Rgb12. -* YUV to EColor4K colorspace converter concrete classes. -* -*/ - -/* ------------------------------------------------------------------------------ - - DESCRIPTION - - - ------------------------------------------------------------------------------ -*/ - - -// EXTERNAL RESOURCES - - -// Include Files - -#include -#include "yuvconverter.h" -#include "yuv2rgb12.h" -#include "brightnesscontrast.h" - - -// MEMBER FUNCTIONS - - -//============================================================================= - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb12 - - CYuv2Rgb12() - - Standard C++ constructor - ------------------------------------------------------------------------------ -*/ - -CYuv2Rgb12::CYuv2Rgb12() -{ - iRgbLookupTable = 0; - iGamma = 65536; - iBrightnessContrast = KMedBrightnessContrastIndex; -} - - - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb12 - - ~CYuv2Rgb12() - - Standard C++ destructor - ------------------------------------------------------------------------------ -*/ - -CYuv2Rgb12::~CYuv2Rgb12() -{ - User::Free(iRgbLookupTable); -} - - - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb12 - - ConstructL() - - Standard Symbian OS second-phase constructor. Initializes the object. - ------------------------------------------------------------------------------ -*/ - -void CYuv2Rgb12::ConstructL(TUint aWidth, TUint aHeight, TUint aMaxWidth, TUint aMaxHeight) -{ - // Remember the dimensions -// __ASSERT_ALWAYS(((aWidth & 3) == 0) && ((aHeight & 3) == 0), -// User::Leave(KErrArgument)); - iWidth = aWidth; - iHeight = aHeight; - if ( iWidth > aMaxWidth ) { - iCropWidth = (iWidth-aMaxWidth)/2; - iWidth = aMaxWidth; - } - else { - iCropWidth = 0; - } - if ( iHeight > aMaxHeight ) { - iCropHeight = (iHeight-aMaxHeight)/2; - iHeight = aMaxHeight; - } - else { - iCropHeight = 0; - } - - // Allocate the RGB saturate/gamma lookup table - iRgbLookupTable = (TUint8*) User::AllocL(ESaturateLength); - - // Initialize brightness & contrast value, this will calculate the conversion table - // Since this uses the median index, it makes no difference if the preferred - // enhancement is this or gamma. Furthermore, changes to the value will be done using - // the appropriate method. - SetBrightnessContrast(KMaxBCInputIndex/2); - -} - - - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb12 - - SetGamma() - - Sets the conversion gamma value and recalculates the look-up table - Please use the SetBrightnessContrast method for Series 60 display - ------------------------------------------------------------------------------ -*/ -void CYuv2Rgb12::SetGamma(TInt aGamma) -{ - TInt i, v; - TReal vNorm; - - // Remember gamma and convert it to floating point - iGamma = aGamma; - TReal fGamma = TReal(iGamma) / TReal(65536); - - // Calculate table entries for all possible RGB values: - for ( i = 0; i < ESaturateLength; i++ ) - { - // Actual RGB value for this table index - v = 298 * (i - ESaturateOffset - 16) / 256; - // (see Convert()) - - // Saturate if <0 or >255, otherwise calculate gamma - if ( v < 0 ) - v = 0; - else if ( v > 255 ) - v = 255; - else - { - // Normalize v: - vNorm = TReal(v) / TReal(255); - - // Gamma-correct: v = v ^ gamma - Math::Pow(vNorm, vNorm, fGamma); - - // Scale back to [0..255] and clamp: - vNorm = (TReal(255) * vNorm) + 0.5; - v = (TInt) vNorm; - if ( v < 0 ) v = 0; - if ( v > 255 ) v = 255; - } - - // 12bpp RGB has range [0..15] for all components, store to table: - iRgbLookupTable[i] = (TUint8) (v >> 4); - } -} - - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb12 - - SetBrightnessContrast() - - Sets the index to the predefined brightness&contrast lookup table - (KBrightnessContrastEnhParam) and recalculates the RGB look-up table - The algorithm was developed by IMAAMI for Kenny display. - ------------------------------------------------------------------------------ -*/ -void CYuv2Rgb12::SetBrightnessContrast(TInt aBCIndex) -{ - TInt i, v; - TReal vNorm; - - // Convert & remember brightness-contrast index. aBCIndex == 0 to KMaxBCInputIndex. - iBrightnessContrast = (aBCIndex*KMaxBrightnessContrastIndex)/KMaxBCInputIndex; - - - // Calculate table entries for all possible RGB values: - for ( i = 0; i < ESaturateLength; i++ ) - { - // Actual RGB value for this table index - v = 298 * (i - ESaturateOffset - 16) / 256; - // (see Convert()) - - // Saturate if <0 or >255, otherwise calculate value - if ( v < 0 ) - v = 0; - else if ( v > 255 ) - v = 255; - else - { - - // Normalize v: - vNorm = TReal(v) / TReal(255); - - vNorm = KBrightnessContrastEnhParam[iBrightnessContrast].a * vNorm + KBrightnessContrastEnhParam[iBrightnessContrast].b; - if ( vNorm < 0 ) - vNorm = 0; - else if ( vNorm > 1 ) - vNorm = 1; - Math::Pow( vNorm, vNorm, KBrightnessContrastEnhParam[iBrightnessContrast].g ); - - // Scale back to [0..255] and clamp: - vNorm = (TReal(255) * vNorm) + 0.5; - v = (TInt) vNorm; - if ( v < 0 ) v = 0; - if ( v > 255 ) v = 255; - } - - // 12bpp RGB has range [0..15] for all components, store to table: - iRgbLookupTable[i] = (TUint8) (v >> 4); - } -} - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb12 - - Convert() - - Converts a YUV frame to a ERgb12 frame - ------------------------------------------------------------------------------ -*/ - -void CYuv2Rgb12::Convert(const TUint8 *aYBuf, const TUint8 *aUBuf, - const TUint8 *aVBuf, - TUint aBufWidth, TUint aBufHeight, - TUint8 *aTarget, TUint aTargetScanlineLength) -{ - TUint cols; - TUint rows = iHeight; - TUint8 *target; - TUint8 *target2; - const TUint8 *yb, *yb2; - TInt y; - TInt uval, vval; - TUint8 val; - TUint8 *rgbLookup = iRgbLookupTable + ESaturateOffset; - TUint8 *rLookup, *gLookup, *bLookup; - - __ASSERT_ALWAYS((aBufWidth >= iWidth) && (aBufHeight >= iHeight), - User::Invariant()); - - // cropping needed? - if ( iCropWidth > 0 ) { - // sets offset to buffers; from now on increments below will always result - // the same offset, since the increment is aBufWidth - aYBuf += iCropWidth; - aUBuf += iCropWidth/2; - aVBuf += iCropWidth/2; - } - if ( iCropHeight > 0 ) { - // skip lines on top - aYBuf += iCropHeight*aBufWidth; - aUBuf += (iCropHeight/2)*aBufWidth/2; - aVBuf += (iCropHeight/2)*aBufWidth/2; - } - - // We don't interpolate the chrominance values at all, since that way we - // can save a lot of multiplications. This actually doesn't affect the - // subjective picture quality much, if at all, with natural images. - - // Conversion is done 2x2 pixels at a time - - // Luminance-only conversion? - if ( (aUBuf != NULL) && (aVBuf != NULL) ) - { - // Full conversion - - // Convert all rows, two at a time - while ( rows ) - { - // Convert all pixels in this row, two at a time - cols = iWidth; - target = aTarget; - target2 = aTarget + aTargetScanlineLength; - yb = aYBuf; - yb2 = aYBuf + aBufWidth; - - while ( cols ) - { - // Traditional conversion: - // R = 1.1643828125 * (Y-16) + 1.59602734375 * (Cr-128) - // G = 1.1643828125 * (Y-16) + -0.39178515625 * (Cb-128) + -0.81296875 * (Cr-128) - // B = 1.1643828125 * (Y-16) + 2.01723046875 * (Cb-128) - - // => - // R = 1.1643828125 * (Y - 16 + 1.370706718285 * (Cr-128)) - // G = 1.1643828125 * (Y - 16 + -0.336474527143 * (Cb-128) + -0.6981971 * (Cr-128)) - // B = 1.1643828125 * (Y - 16 + 1.732446105434 * (Cb-128)) - - // We'll create a lookup-table for 1.1643828125 * (x - 16). The - // range needs go from -222 to 476 plus room for dithering. - - // Component lookups based on chrominance values for this 2x2 - // block - vval = ((TInt) aVBuf[0]) - 128; - //verified: shift to right is arithmetic in ARM-GCC => shifting of signed values is allowed - rLookup = &rgbLookup[(351 * vval) >> 8]; - uval = ((TInt) aUBuf[0]) - 128; - gLookup = &rgbLookup[(-86*uval - 179*vval) >> 8]; - bLookup = &rgbLookup[(444 * uval) >> 8]; - - // Bitmap format: ggggbbbb xxxxrrrr - - // Upper left pixel - y = yb[0]; - target[0] = (TUint8) ((gLookup[y] << 4) | bLookup[y]); - target[1] = rLookup[y]; - - // Upper right pixel - y = yb[1] + 8; - target[2] = (TUint8) ((gLookup[y] << 4) | bLookup[y]); - target[3] = rLookup[y]; - - // Lower left: - y = yb2[0] + 12; - target2[0] = (TUint8) ((gLookup[y] << 4) | bLookup[y]); - target2[1] = rLookup[y]; - - // Lower right: - y = yb2[1] + 4; - target2[2] = (TUint8) ((gLookup[y] << 4) | bLookup[y]); - target2[3] = rLookup[y]; - - // Next two pixels: - target += 4; - target2 += 4; - yb += 2; - yb2 += 2; - aUBuf++; - aVBuf++; - cols -= 2; - } - - // Next rows - rows -= 2; - aYBuf += 2*aBufWidth; - aUBuf += (aBufWidth - iWidth)/2; - aVBuf += (aBufWidth - iWidth)/2; - aTarget += 2*aTargetScanlineLength; - } - } - else - { - // No chrominance given, do a luminance-only conversion - - // Convert all rows, two at a time - while ( rows ) - { - // Convert all pixels in this row, two at a time - cols = iWidth; - target = aTarget; - target2 = aTarget + aTargetScanlineLength; - yb = aYBuf; - yb2 = aYBuf + aBufWidth; - - while ( cols ) - { - // Upper left: - val = rgbLookup[yb[0]]; - target[0] = (TUint8) ((val << 4) | val); - target[1] = val; - - // Upper right: - val = rgbLookup[yb[1] + 8]; - target[2] = (TUint8) ((val << 4) | val); - target[3] = val; - - // Lower left: - val = rgbLookup[yb[0] + 12]; - target2[0] = (TUint8) ((val << 4) | val); - target2[1] = val; - - // Lower right: - val = rgbLookup[yb[1] + 4]; - target2[2] = (TUint8) ((val << 4) | val); - target2[3] = val; - - // Next two pixels: - target += 4; - target2 += 4; - yb += 2; - yb2 += 2; - cols -= 2; - } - - // Next row - rows -= 2; - aYBuf += aBufWidth; - aTarget += aTargetScanlineLength; - } - } -} - - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/yuv2rgb24.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/yuv2rgb24.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,419 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation of class CYuv2Rgb24. -* YUV to EColor16M colorspace converter concrete classes. -* -*/ - - - - -// EXTERNAL RESOURCES - - -// Include Files - -#include -#include "yuvconverter.h" -#include "yuv2rgb24.h" -#include "brightnesscontrast.h" - - -// MEMBER FUNCTIONS - - -//============================================================================= - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb24 - - CYuv2Rgb24() - - Standard C++ constructor - ------------------------------------------------------------------------------ -*/ - -CYuv2Rgb24::CYuv2Rgb24() -{ - iRgbLookupTable = 0; - iGamma = 65536; - iBrightnessContrast = KMedBrightnessContrastIndex; - -} - - - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb24 - - ~CYuv2Rgb24() - - Standard C++ destructor - ------------------------------------------------------------------------------ -*/ - -CYuv2Rgb24::~CYuv2Rgb24() -{ - User::Free(iRgbLookupTable); -} - - - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb24 - - ConstructL() - - Standard Symbian OS second-phase constructor. Initializes the object. - ------------------------------------------------------------------------------ -*/ - -void CYuv2Rgb24::ConstructL(TUint aWidth, TUint aHeight, TUint aMaxWidth, TUint aMaxHeight) -{ - // Remember the dimensions -// __ASSERT_ALWAYS(((aWidth & 1) == 0) && ((aHeight & 1) == 0), -// User::Leave(KErrArgument)); - iWidth = aWidth; - iHeight = aHeight; - if ( iWidth > aMaxWidth ) { - iCropWidth = (iWidth-aMaxWidth)/2; - iWidth = aMaxWidth; - } - else { - iCropWidth = 0; - } - if ( iHeight > aMaxHeight ) { - iCropHeight = (iHeight-aMaxHeight)/2; - iHeight = aMaxHeight; - } - else { - iCropHeight = 0; - } - - // Allocate the RGB saturate/gamma lookup table - iRgbLookupTable = (TUint8*) User::AllocL(ESaturateLength); - - // Initialize brightness & contrast value, this will calculate the conversion table - // Since this uses the median index, it makes no difference if the preferred - // enhancement is this or gamma. Furthermore, changes to the value will be done using - // the appropriate method. - SetBrightnessContrast(KMaxBCInputIndex/2); -} - - - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb24 - - SetGamma() - - Sets the conversion gamma value and recalculates the look-up table - ------------------------------------------------------------------------------ -*/ - -void CYuv2Rgb24::SetGamma(TInt aGamma) -{ - TInt i, v; - TReal vNorm; - - // Remember gamma and convert it to floating point - iGamma = aGamma; - TReal fGamma = TReal(iGamma) / TReal(65536); - - // Calculate table entries for all possible RGB values: - for ( i = 0; i < ESaturateLength; i++ ) - { - // Actual RGB value for this table index - v = i - ESaturateOffset; - - // Saturate if <0 or >255, otherwise calculate gamma - if ( v < 0 ) - v = 0; - else if ( v > 255 ) - v = 255; - else - { - // Normalize v: - vNorm = TReal(v) / TReal(255); - - // Gamma-correct: v = v ^ gamma - Math::Pow(vNorm, vNorm, fGamma); - - // Scale back to [0..255] and clamp: - vNorm = (TReal(255) * vNorm) + 0.5; - v = (TInt) vNorm; - if ( v < 0 ) v = 0; - if ( v > 255 ) v = 255; - } - - // 24bpp RGB has range [0..255] for all components, store to table: - iRgbLookupTable[i] = (TUint8) v; - } -} - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb24 - - SetBrightnessContrast() - - Sets the index to the predefined brightness&contrast lookup table - (KBrightnessContrastEnhParam) and recalculates the RGB look-up table - The algorithm was developed by IMAAMI for Kenny display. - ------------------------------------------------------------------------------ -*/ -void CYuv2Rgb24::SetBrightnessContrast(TInt aBCIndex) -{ - TInt i, v; - TReal vNorm; - - // Convert & remember brightness-contrast index. aBCIndex == 0 to KMaxBCInputIndex. - iBrightnessContrast = (aBCIndex*KMaxBrightnessContrastIndex)/KMaxBCInputIndex; - - // Calculate table entries for all possible RGB values: - for ( i = 0; i < ESaturateLength; i++ ) - { - // Actual RGB value for this table index - v = 298 * (i - ESaturateOffset - 16) / 256; - // (see Convert()) - - // Saturate if <0 or >255, otherwise calculate value - if ( v < 0 ) - v = 0; - else if ( v > 255 ) - v = 255; - else - { - - // Normalize v: - vNorm = TReal(v) / TReal(255); - - vNorm = KBrightnessContrastEnhParam[iBrightnessContrast].a * vNorm + KBrightnessContrastEnhParam[iBrightnessContrast].b; - if ( vNorm < 0 ) - vNorm = 0; - else if ( vNorm > 1 ) - vNorm = 1; - Math::Pow( vNorm, vNorm, KBrightnessContrastEnhParam[iBrightnessContrast].g ); - - // Scale back to [0..255] and clamp: - vNorm = (TReal(255) * vNorm) + 0.5; - v = (TInt) vNorm; - if ( v < 0 ) v = 0; - if ( v > 255 ) v = 255; - } - - // 24bpp RGB has range [0..255] for all components, store to table: - iRgbLookupTable[i] = (TUint8) v; - } -} - - -/* ------------------------------------------------------------------------------ - - CYuv2Rgb24 - - Convert() - - Converts a YUV frame to a EColor16M frame - ------------------------------------------------------------------------------ -*/ - -void CYuv2Rgb24::Convert(const TUint8 *aYBuf, const TUint8 *aUBuf, - const TUint8 *aVBuf, - TUint aBufWidth, TUint aBufHeight, - TUint8 *aTarget, TUint aTargetScanlineLength) -{ - TUint cols; - TUint rows = iHeight; - TUint8 *target; - TUint8 *target2; - const TUint8 *yb, *yb2; - TInt rc, gc, bc; - TInt y; - TInt uval, vval; - TUint8 val; - - - __ASSERT_ALWAYS((aBufWidth >= iWidth) && (aBufHeight >= iHeight), - User::Invariant()); - - // Cropping needed? - if ( iCropWidth > 0 ) { - //sets offset to buffers; from now on increments below will always result the same offset, since the increment is aBufWidth - aYBuf += iCropWidth; - aUBuf += iCropWidth/2; - aVBuf += iCropWidth/2; - } - if ( iCropHeight > 0 ) { - //skip lines on top - aYBuf += iCropHeight*aBufWidth; - aUBuf += (iCropHeight/2)*aBufWidth/2; - aVBuf += (iCropHeight/2)*aBufWidth/2; - } - // We don't interpolate the chrominance values at all, since that way we - // can save a lot of multiplications. This actually doesn't affect the - // subjective picture quality much, if at all, with natural images. - - // Conversion is done 2x2 pixels at a time - - // Luminance-only conversion? - if ( (aUBuf != NULL) && (aVBuf != NULL) ) - { - // Full conversion - - // Convert all rows, two at a time - while ( rows ) - { - // Convert all pixels in this row, two at a time - cols = iWidth; - target = aTarget; - target2 = aTarget + aTargetScanlineLength; - yb = aYBuf; - yb2 = aYBuf + aBufWidth; - - while ( cols ) - { - // Charles Poynton: Color FAQ - // (http://www.inforamp.net/~poynton/ColorFAQ.html) - // 30. How do I encode Y'CBCR components from computer R'G'B' ? - - // [normalized] - // R = 1.1643828125 * (Y-16) + 1.59602734375 * (Cr-128) - // G = 1.1643828125 * (Y-16) + -0.39178515625 * (Cb-128) + -0.81296875 * (Cr-128) - // B = 1.1643828125 * (Y-16) + 2.01723046875 * (Cb-128) - - // We'll use fixed-point with 16 bits of fractional part for - // accuracy. Besides, 24bpp RGB is not likely to be used in - // low-CPU devices in the near future... - - // Red chrominance part for this 2x2 block: - vval = ((TInt) aVBuf[0]) - 128; - rc = 104597 * vval; - - // Green chrominance: - uval = ((TInt) aUBuf[0]) - 128; - gc = -25676*uval - 53279*vval; - - // Blue chrominance: - bc = 132201 * uval; - - // Upper left pixel y part for all components: - y = 76309 * (((TInt) yb[0]) - 16) + 32768; // round up - - // Calculate components and store: - // Bitmap format: bbbbbbbb gggggggg rrrrrrrr - target[0] = iRgbLookupTable[((y+bc) >> 16) + ESaturateOffset]; - target[1] = iRgbLookupTable[((y+gc) >> 16) + ESaturateOffset]; - target[2] = iRgbLookupTable[((y+rc) >> 16) + ESaturateOffset]; - - // Upper right pixel: - y = 76309 * (((TInt) yb[1]) - 16) + 32768; - target[3] = iRgbLookupTable[((y+bc) >> 16) + ESaturateOffset]; - target[4] = iRgbLookupTable[((y+gc) >> 16) + ESaturateOffset]; - target[5] = iRgbLookupTable[((y+rc) >> 16) + ESaturateOffset]; - - // Lower left: - y = 76309 * (((TInt) yb2[0]) - 16) + 32768; - target2[0] = iRgbLookupTable[((y+bc) >> 16) + ESaturateOffset]; - target2[1] = iRgbLookupTable[((y+gc) >> 16) + ESaturateOffset]; - target2[2] = iRgbLookupTable[((y+rc) >> 16) + ESaturateOffset]; - - // Lower right: - y = 76309 * (((TInt) yb2[1]) - 16) + 32768; - target2[3] = iRgbLookupTable[((y+bc) >> 16) + ESaturateOffset]; - target2[4] = iRgbLookupTable[((y+gc) >> 16) + ESaturateOffset]; - target2[5] = iRgbLookupTable[((y+rc) >> 16) + ESaturateOffset]; - - // Next two pixels: - target += 6; - target2 += 6; - yb += 2; - yb2 += 2; - aUBuf++; - aVBuf++; - cols -= 2; - } - - // Next rows - rows -= 2; - aYBuf += 2*aBufWidth; - aUBuf += (aBufWidth - iWidth)/2; - aVBuf += (aBufWidth - iWidth)/2; - aTarget += 2*aTargetScanlineLength; - } - } - else - { - // No chrominance given, do a luminance-only conversion - - // Convert all rows - while ( rows ) - { - // Convert all pixels in this row, two at a time - cols = iWidth; - target = aTarget; - - while ( cols ) - { - // Do a pixel: - y = 76309 * (((TInt) aYBuf[0]) - 16) + 32768; - val = iRgbLookupTable[(y >> 16) + ESaturateOffset]; - target[0] = val; - target[1] = val; - target[2] = val; - - // And another one: - y = 76309 * (((TInt) aYBuf[1]) - 16) + 32768; - val = iRgbLookupTable[(y >> 16) + ESaturateOffset]; - target[3] = val; - target[4] = val; - target[5] = val; - - // Next two pixels: - target += 6; - aYBuf += 2; - cols -= 2; - } - - // Next row - rows--; - aYBuf += aBufWidth - iWidth; - aTarget += aTargetScanlineLength; - } - } -} - - - - - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/bwins/vedtranscoderu.def --- a/videoeditorengine/vedtranscoder/bwins/vedtranscoderu.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?NewL@CTRTranscoder@@SAPAV1@AAVMTRTranscoderObserver@@@Z @ 1 NONAME ; class CTRTranscoder * CTRTranscoder::NewL(class MTRTranscoderObserver &) - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/eabi/vedtranscoderu.def --- a/videoeditorengine/vedtranscoder/eabi/vedtranscoderu.def Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -EXPORTS - _ZN13CTRTranscoder4NewLER21MTRTranscoderObserver @ 1 NONAME - _ZTI13CTRTranscoder @ 2 NONAME ; ## - _ZTV13CTRTranscoder @ 3 NONAME ; ## - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/group/bld.inf --- a/videoeditorengine/vedtranscoder/group/bld.inf Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS - -PRJ_MMPFILES -vedtranscoder.mmp diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/group/vedtranscoder.mmp --- a/videoeditorengine/vedtranscoder/group/vedtranscoder.mmp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* The media recorder DLL project definition file. -* -*/ - - -// To get the MW_LAYER_SYSTEMINCLUDE-definition -#include - - -TARGET vedtranscoder.dll -TARGETTYPE dll -UID 0x1000008d 0x10204BF1 //KSharedLibraryUid - -VENDORID VID_DEFAULT -CAPABILITY CAP_GENERAL_DLL - -SOURCEPATH ../src - -SOURCE Ctrtranscoder.cpp -SOURCE Ctrtranscoderimp.cpp -SOURCE Ctrvideodecoderclient.cpp -SOURCE Ctrvideoencoderclient.cpp -SOURCE Ctrscaler.cpp - -USERINCLUDE ../inc - -// Default system include paths for middleware layer modules. -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/mmf/common -SYSTEMINCLUDE /epoc32/include/mmf/devvideo - -// Symbian OS libraries -LIBRARY euser.lib -LIBRARY devvideo.lib -LIBRARY centralrepository.lib - - -//EXPORTUNFROZEN - -// End of File - - diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/CVEDSPPreprocessingCIM.h --- a/videoeditorengine/vedtranscoder/inc/CVEDSPPreprocessingCIM.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* HwDevice plugin. -* -*/ - - -/** -* @Example of the CI usage: -* 1. -* MVEDSPPreprocessingCI* preprocCI; -* preprocCI = (MVEDSPPreprocessingCI*)iDevvrInstance->CustomInterface( hwdevUid, KVEDSPHwDevicePreprocCIUid ); -* -* where: -* CDEVVRVideoRecord iDevvrInstance - The inctance of the DeviceVideoRecord; -* TUid hwdevUid - Encode HwDevice Uid; -* KVEDSPHwDevicePreprocCIUid - Custom Interface Uid; -* -* -* 2. TInt errCode = preprocessCI->SetPreprocessing( preprocessMode ); -* -* where: -* TBool preprocessMode - Preprocessing mode setting; ETrue - ON / EFalse - OFF; -* -* Preprocessing mode can be set ON / OFF only before initializing of the DeviceVideoRecord; -* -*/ - - -#ifndef __MVEDSPPREPROCESSCI_H -#define __MVEDSPPREPROCESSCI_H - - -// INCLUDES - -// CONSTANTS -const TUid KVEDSPHwDevicePreprocCIUid = {0x101F86D8}; // Preprocessing custom interface Uid - - -// MACROS - -// DATA TYPES - -// FORWARD DECLARATIONS - -// CLASS DECLARATION - -class MVEDSPPreprocessingCI - { - public: - - /** - * Enables / Disables preprocessing mode - * @since 2.6 - * @param aMode ETrue - enable preprocessing - * @return KErrNone - Success, otherwise KErrNotReady - unable to process operation - */ - virtual TInt SetPreprocessing( TBool aMode ) = 0; - - }; - - - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/buffermanagementci.h --- a/videoeditorengine/vedtranscoder/inc/buffermanagementci.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,209 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - -#ifndef BUFFERMANAGEMENTCI_H -#define BUFFERMANAGEMENTCI_H - -// INCLUDES -#include - - -// CONSTANTS - -/** Buffer Management Custom Interface UID */ -const TUid KMmfVideoBuffermanagementUid = { 0x10204bea }; - - -// CLASS DECLARATIONS - -class MMmfVideoBufferManagementObserver; - -/** - * Buffer Management Custom Interface main interface class. Media - * devices that support this custom interface implement this class. - * - * The Buffer Management Custom Interface enchances the MDF DevVideo - * data flow model by enabling target media devices to allocate input - * data buffers for uncompressed data input. This lets client - * applications and source media devices write the input data directly - * into a suitable memory area that the target media device can use, - * possibly eliminating one extra memory copy from the data path. This - * is especially important with hardware implementations, where the - * target hardware may only have access to specially allocated memory - * that only the media device can allocate. - * - * The interface is typically implemented in pre-processing, encoding, - * and post-processing media devices. It is mainly used for video - * encoder memory buffer input in applications like video editors, and - * when using hardware-accelerated post-processors with software video - * decoders. - */ - -class MMmfVideoBufferManagement - { -public: - /** A class used to signal the buffer options used. */ - class TBufferOptions - { - public: - /** - * The number of input buffers that the media device * - * has. This is the number of buffers the client can request * - * through MmvbmGetBufferL() before writing any back. - */ - TUint iNumInputBuffers; - - /** - * Buffer size in pixels. This should match the input data - * picture size, optionally with padding to meet coding - * standard requirements. - */ - TSize iBufferSize; - }; - - - /** - * Sets the observer object to use. The observer gets notified - * when new buffers are available and when buffers need to be - * released back to the media device. - * - * This method can only be called before the media device has - * been initialised with InitializeL(). - * - * @param aObserver The observer object to use. - */ - virtual void MmvbmSetObserver(MMmfVideoBufferManagementObserver* aObserver) = 0; - - /** - * Enables input buffer management mode. In buffer management mode - * the target media device allocates memory for input buffers and - * the client can only use input buffers allocated with - * MmvbmGetBufferL(). - * - * This method can only be called before the media device has been - * initialised with InitializeL(). This method must be called if - * the client uses MmvbmGetBufferL(). - * - * @param aEnable ETrue if input buffer management mode is used. - */ - virtual void MmvbmEnable(TBool aEnable) = 0; - - /** - * Sets the buffer options to use. The client can request the - * number of input buffers that should be available, but typically - * only few (one or two) buffers can be used. - * - * This method can only be called before the media device has been - * initialised with InitializeL(). - * - * @param aOptions The buffer options to use, see TBufferOptions. - * - * @leave KErrNotSupported The requested buffer options are not - * supported. Typically the client has requested too many input - * buffers. - */ - virtual void MmvbmSetBufferOptionsL(const TBufferOptions& aOptions) = 0; - - /** - * Gets the buffer options currently in use. - * - * This method can only be called before the media device has been - * initialised with InitializeL(). - * - * @param aOptions Target buffer options data structure. - */ - virtual void MmvbmGetBufferOptions(TBufferOptions& aOptions) = 0; - - /** - * Gets a new input picture buffer. The client can then write data - * into the buffer and write it back to the media device with - * WritePictureL(). - * - * This method can only be called after the media device has been - * initialised with InitializeL(). This method can only be called - * in buffer management mode, i.e. if the client has called - * MmvbmEnable(ETrue). - * - * Note that target-allocated and client-allocated input buffers - * cannot be mixed. In buffer management mode only input buffers - * allocated with this method can be sent to the media device. - * - * If a client has retrieved buffers with MmvbmGetBufferL(), it - * must be prepated to release them synchronously at any point if - * MmmfBufferManagementObserver::MmvbmoReleaseBuffers() is - * called. This may happen if the target media device suddenly - * loses access to the buffers due to DSA abort, resource - * management conflict, or media device destruction. - * - * @param aSize The requested buffer size, in pixels. The buffer - * size should match the picture size set at initialisation phase, - * or otherwise suitable buffer may not be available. If the size - * is smaller than the size set at initialisation phase, the - * allocated buffer may be larger than requested. - * - * @return A new input picture buffer. If no free buffers are - * available, the return value is NULL. - * - * @leave General The method will leave if an error occurs. Lack - * of free buffers is not considered an error. - */ - virtual TVideoPicture* MmvbmGetBufferL(const TSize& aSize) = 0; - - /** - * Releases an input buffer back to the media device without using - * it. This method is mainly used as a response to a - * MmvbmReleaseBuffers() callback. - * - * @param aBuffer The buffer to release. - */ - virtual void MmvbmReleaseBuffer(TVideoPicture* aBuffer) = 0; - }; - - -/** - * An observer class for the buffer management custom interface. - * Clients and source media devices using the interface - * must implement this class. -*/ -class MMmfVideoBufferManagementObserver - { -public: - /** - * Notifies the observer that one or more new input buffers are - * available. The client can then use MmvbmGetBufferL() to get a - * buffer. - */ - virtual void MmvbmoNewBuffers() = 0; - - /** - * Notifies the observer all outstanding input buffers must be - * released immediately. The client must synchronously call - * MmvbmReleaseBuffer() for all buffers it has allocated but not - * returned before returning from this method. This method is - * mainly used when the target media device loses access to the - * buffers, as a result of a Direct Screen Access abort, resource - * management override, or media device desctruction. - */ - virtual void MmvbmoReleaseBuffers() = 0; - }; - - -#endif // BUFFERMANAGEMENTCI_H - -// End of File diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrcommon.h --- a/videoeditorengine/vedtranscoder/inc/ctrcommon.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Common elements / data types. -* -*/ - - -#ifndef CTRCOMMON_H -#define CTRCOMMON_H - -// INCLUDES -#include - - -/** -* Video coding options -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -class TTRVideoCodingOptions - { - public: - // Segment interval in picture. In H.263 baseline this means number of non-empty GOB headers - // (1=every GOB has a header), in H.264 and MPEG-4 the segement size in bytes. - // Default is 0 == no segments inside picture - // Coding standard & used profile etc. limit the value. - TInt iSyncIntervalInPicture; - - // Time between random access points (I-Frame) - TUint iMinRandomAccessPeriodInSeconds; - - // Relevant to MPEG4 only. Specifies whether data partitioning is in use. - // When equal to ETrue, data partitioning is in use. - TBool iDataPartitioning; - - // Relevant to MPEG4 only. Specifies whether reversible variable length coding is in use. - // When equal to ETrue, reversible variable length coding is in use. - // Valid only if iDataPartitioned is equal to ETrue. - TBool iReversibleVLC; - - // Relevant to MPEG4 only. Header extension code. - TUint iHeaderExtension; - }; - - -/** -* Video format -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -class TTRVideoFormat - { - public: - // Video picture size - TSize iSize; - - // Video data type - TInt iDataType; - }; - - - -/** -* Video picture -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -class TTRVideoPicture - { - public: - // Picture data - TPtr8* iRawData; - - // Picture size in pixels - TSize iDataSize; - - // Picture timestamp - TTimeIntervalMicroSeconds iTimestamp; - - // Queue element - TDblQueLink iLink; - - // Misc user info - TAny* iUser; - }; - - -/** -* Display options -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -class TTRDisplayOptions - { - public: - // The video output rectangle on screen - TRect iVideoRect; - - // Initial clipping region to use - TRegion iClipRegion; - }; - - -/** -* TTREventItem -* @lib TRANSCODER.LIB -*/ -class CTREventItem : public CBase - { - public: - // Timestamp from which to start iAction - TTimeIntervalMicroSeconds iTimestamp; - - // EnableEncoder setting status - TBool iEnableEncoderStatus; - - // Enable PS setting status - TBool iEnablePictureSinkStatus; - - // RandomAccess client's setting - TBool iRandomAccessStatus; - - // Enable / Disable encoder client setting - TBool iEnableEncoderClientSetting; - - // Enable / Disable picture sink client's setting - TBool iEnablePictureSinkClientSetting; - - // Queue link - TDblQueLink iLink; - - public: - // Reset item's setting - inline void Reset() - { - // Reset setting statuses & ts - iTimestamp = -1; - iEnableEncoderStatus = EFalse; - iEnablePictureSinkStatus = EFalse; - iRandomAccessStatus = EFalse; - }; - }; - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrdevvideoclientobserver.h --- a/videoeditorengine/vedtranscoder/inc/ctrdevvideoclientobserver.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* DevVideoClient observer. -* -*/ - - -#ifndef CTRDEVVICEOCLIENTOBSERVER_H -#define CTRDEVVICEOCLIENTOBSERVER_H - - -// INCLUDES -#include -#include -#include - - -/** -* Devvideo client observer -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -class MTRDevVideoClientObserver - { - public: - /** - * Reports an error from the devVideo client - * @param aError Error reason - * @return void - */ - virtual void MtrdvcoFatalError(TInt aError) = 0; - - /** - * Reports that data encoding process has been finished - * @param none - * @return void - */ - virtual void MtrdvcoEncStreamEnd() = 0; - - /** - * Reports that data decoding process has been finished - * @param none - * @return void - */ - virtual void MtrdvcoDecStreamEnd() = 0; - - /** - * Returns video picture from the video encoder client - * @param aPicture video picture - * @return void - */ - virtual void MtrdvcoEncoderReturnPicture(TVideoPicture* aPicture) = 0; - - /** - * Returns videopicture from the renderer - * @param aPicture Video picture - * @return none - */ - virtual void MtrdvcoRendererReturnPicture(TVideoPicture* aPicture) = 0; - - /** - * Supplies new decoded picture - * @param aPicture Video picture - * @return none - */ - virtual void MtrdvcoNewPicture(TVideoPicture* aPicture) = 0; - - /** - * Supplies new encoded bitstream buffer - * @param aBuffer Media buffer - * @return none - */ - virtual void MtrdvcoNewBuffer(CCMRMediaBuffer* aBuffer) = 0; - - /** - * Informs about initializing video encoder client - * @param aError Initializing error status - * @return void - */ - virtual void MtrdvcoEncInitializeComplete(TInt aError) = 0; - - /** - * Informs about initializing video decoder client - * @param aError Initializing error status - * @return void - */ - virtual void MtrdvcoDecInitializeComplete(TInt aError) = 0; - - /** - * Returns media bitstream buffer to the client - * @param aBuffer Bitstream media buffer - * @return void - */ - virtual void MtrdvcoReturnCodedBuffer(CCMRMediaBuffer* aBuffer) = 0; - - /** - * Notifies the transcoder about available picture buffers through BMCI or MDF - * @param none - * @return void - */ - virtual void MtrdvcoNewBuffers() = 0; - - /** - * Indicates that a media device has lost its resources - * @param aFromDecoder Flag to indicate source - * @return none - */ - virtual void MtrdvcoResourcesLost(TBool aFromDecoder) = 0; - - /** - * Indicates that a media device has regained its resources - * @return none - */ - virtual void MtrdvcoResourcesRestored() = 0; - }; - - - - -#endif // CTRDEVVICEOCLIENTOBSERVER_H diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrhwsettings.h --- a/videoeditorengine/vedtranscoder/inc/ctrhwsettings.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video settings. -* -*/ - - - -#ifndef CTRHWSETTINGS_H -#define CTRHWSETTINGS_H - -// Constants for processing time estimates -const TReal KTRDecodeTimeFactorH263HW = 0.04; -const TReal KTRDecodeTimeFactorH263SW = 0.05; -const TReal KTRDecodeTimeFactorH264HW = 0.05; -const TReal KTRDecodeTimeFactorH264SW = 0.05; -const TReal KTRDecodeTimeFactorMPEG4HW = 0.05; -const TReal KTRDecodeTimeFactorMPEG4SW = 0.05; - -const TReal KTREncodeTimeFactorH263HW = 0.07; -const TReal KTREncodeTimeFactorH263SW = 0.08; -const TReal KTREncodeTimeFactorH264HW = 0.07; -const TReal KTREncodeTimeFactorH264SW = 0.08; -const TReal KTREncodeTimeFactorMPEG4HW = 0.07; -const TReal KTREncodeTimeFactorMPEG4SW = 0.08; - -const TReal KTRResampleTimeFactorBilinear = 0.06; -const TReal KTRResampleTimeFactorDouble = 0.05; -const TReal KTRResampleTimeFactorHalve = 0.05; - -const TReal KTRTimeFactorScale = 1.0 / 640.0; - -const TInt KTRFallbackDecoderUidH263 = 0x10206674; // ARM Decoder -const TInt KTRFallbackDecoderUidH264 = 0x102073ef; // ARM Decoder -const TInt KTRFallbackDecoderUidMPEG4 = 0x10206674; // ARM Decoder - -const TInt KTRFallbackEncoderUidH263 = 0x10282CFC; // ARM Encoder -const TInt KTRFallbackEncoderUidH264 = 0x20001C13; // ARM Encoder -const TInt KTRFallbackEncoderUidMPEG4 = 0x10282CFD; // ARM Encoder - -const TInt KTRMaxFramesInProcessingDefault = 3; -const TInt KTRMaxFramesInProcessingScaling = 5; - -const TReal KTRWideThreshold = 1.5; - -#endif // CTRHWSETTINGS_H diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrprivatecrkeys.h --- a/videoeditorengine/vedtranscoder/inc/ctrprivatecrkeys.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* -*/ - - - -#ifndef CTRPRIVATECRKEYS_H -#define CTRPRIVATECRKEYS_H - -const TUid KCRUidTranscoder = {0x10204C07}; - -const TUint32 KTRH263DecoderUid = 0x0001; -const TUint32 KTRH264DecoderUid = 0x0002; -const TUint32 KTRMPEG4DecoderUid = 0x0003; - -const TUint32 KTRH263EncoderUid = 0x0011; -const TUint32 KTRH264EncoderUid = 0x0012; -const TUint32 KTRMPEG4EncoderUid = 0x0013; - -const TUint32 KTRH263DecoderLowResUid = 0x0021; -const TUint32 KTRH264DecoderLowResUid = 0x0022; -const TUint32 KTRMPEG4DecoderLowResUid = 0x0023; - -const TUint32 KTRH263EncoderLowResUid = 0x0031; -const TUint32 KTRH264EncoderLowResUid = 0x0032; -const TUint32 KTRMPEG4EncoderLowResUid = 0x0033; - -const TUint32 KTRH263DecoderLowResThreshold = 0x0041; -const TUint32 KTRH264DecoderLowResThreshold = 0x0042; -const TUint32 KTRMPEG4DecoderLowResThreshold = 0x0043; - -const TUint32 KTRH263EncoderLowResThreshold = 0x0051; -const TUint32 KTRH264EncoderLowResThreshold = 0x0052; -const TUint32 KTRMPEG4EncoderLowResThreshold = 0x0053; - -#endif // CTRPRIVATECRKEYS_H diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrscaler.h --- a/videoeditorengine/vedtranscoder/inc/ctrscaler.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,126 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Resampling framework for YUV 4.2.0. -* -*/ - - - -#ifndef CTRSCALER_H -#define CTRSCALER_H - - -// INCLUDES -#include -#include "ctrcommon.h" - - -// Scaler operations -enum EResamplingOpereation - { - EOperationNone, - EDoubleSize, // Resize to 200% - EUpSampling, // Resize to 101% or more - EOperationCopy, // No resize (100%) - EOperationCopyWithBB, // No resize, add black borders - EDownSampling, // Resize to 99% or less - EHalveSize, // Resize to 50% - EUpDownSampling // Resize with strech - }; - -// Scaler class, supports resampling operations with YUV 4.2.0 format; -NONSHARABLE_CLASS(CTRScaler) : public CBase - { - public: - static CTRScaler* NewL(); - - // Destructor - ~CTRScaler(); - - public: - void Scale(); - - // Sets operations - void SetScalerOptionsL( TPtr8& aSrc, TPtr8& aTrg, TSize& aSrcSize, TSize& aTrgSize ); - - // Checks if aspect ratio is wide - TBool IsWideAspectRatio(TSize aSize); - - // Calculates intermediate resolution for use with black boxing - TBool GetIntermediateResolution(TSize aSrcSize, TSize aTrgSize, TSize& aTargetResolution, TSize& aBlackBoxing); - - // Returns a time estimate of how long it takes to resample a frame - TReal EstimateResampleFrameTime(const TTRVideoFormat& aInput, const TTRVideoFormat& aOutput); - - private: - CTRScaler(); - - // Second phase constructor - void ConstructL(); - - // Resampling operations - void ResampleBilinear(TSize& aSrcSize, TSize& aTrgSize, TSize& aBlackBoxing); - void ResampleHalve(TSize& aSrcSize, TSize& aTrgSize, TSize& aBlackBoxing); - void ResampleDouble(TSize& aSrcSize, TSize& aTrgSize); - - // Called when resizing to less than 50% of the original size - void DoHalveAndBilinearResampleL(); - - // No resampling, copy frame and add black borders. - void CopyWithBlackBoxing(TSize& aSrcSize, TSize& aTrgSize, TSize& aBlackBoxing); - - private: - // Source buffer - TUint8* iSrc; - - // Destination buffer - TUint8* iTrg; - - // Source resolution - TSize iSrcSize; - - // Target resolution - TSize iTrgSize; - - // Resampling operation - TInt iOperation; - - // Trg data size - TUint iTrgDataSize; - - // Initial src ptr - TUint8* iSrcInit; - - // Initial trg ptr - TUint8* iTrgInit; - - // Scale X - TInt iScaleXInt; - - // Scale Y - TInt iScaleYInt; - - TPtr8* iTrgBuffer; - - // For storing width/height of black border area - TSize iBlackBoxing; - - }; - - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrsettings.h --- a/videoeditorengine/vedtranscoder/inc/ctrsettings.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,247 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video settings. -* -*/ - - - -#ifndef CTRSETTINGS_H -#define CTRSETTINGS_H - -// INCLUDES -#include - - -// MACROS -#ifdef _DEBUG -#define DEBUGPRINT -#endif - -// Debug print macro -#ifdef DEBUGPRINT -#include -#define PRINT(x) RDebug::Print x; -#else -#define PRINT(x) -#endif - - -// CONSTANTS - - -// Transcoder states -enum TRStates - { - ETRNone, - ETROpened, - ETRInitializing, - ETRInitialized, - ETRRunning, - ETRPaused, - ETRStopping, - ETRStopped, - ETRFatalError - }; - -enum TRCodecTypes - { - EH263, - EMpeg4, - EH264 - }; - -// Input format parameters -// Planar (first Y frame, then U, then V) -const TYuvDataLayout KTRYuvLayout = EYuvDataPlanar; - -// YUV-RGB conversion coefficients to use: YUV data with range 0 (Y [16-235]) and conversion coefficients according to BT.601.5 -const TYuvCoefficients KTRYuvCoefficients = EYuvBt601Range0; - -// Aspect ratio, in H.263 default is 12:11, but camera probably provides 1:1 -const TInt KTRAspectRatioNum = 12; -const TInt KTRAspectRatioDenom = 11; - - -// Quality is more important than delay in non real-time mode -const TReal KTRLatencyQualityTradeoffNonRT = 1.0; - -// Tradeoff for real-time mode -const TReal KTRLatencyQualityTradeoffRT = 0.3; - -// range is [0...100] -const TUint KTRPictureQuality = 50; - -// (1.0 means the picture quality is sacrificed -// "all the way" to match the target fps -const TReal KTRQualityTemporalTradeoff = 0.8; - - -// 720x576,720x288,360x288 -// PAL 1, 2, 3 - -// KTRDefaultSrcRate -const TReal KTRDefaultSrcRate = 15.0; - -// KTRDefaultAccessRate -const TReal KTRDefaultAccessRate = 0.2; - -// Number of video segments -const TUint KTRMinNumberOfBuffersVideoSegment = 25; -const TUint KTRMinNumberOfBuffersCodedPicture = 4; - -// Min number of bitstream buffers for decoder -const TUint KTRDecoderMinNumberOfBuffers = 2; - -// Number of internal buffers for resampled uncompressed data -const TUint KTRMinNumberOfResampledPictureBuffers = 4; - -// Codec levels -const TUint KTRH263CodecLevel10 = 10; -const TUint KTRH263CodecLevel20 = 20; -const TUint KTRH263CodecLevel30 = 30; -const TUint KTRH263CodecLevel40 = 40; -const TUint KTRH263CodecLevel45 = 45; -const TUint KTRH263CodecLevel50 = 50; -const TUint KTRH263CodecLevel60 = 60; -const TUint KTRH263CodecLevel70 = 70; - -const TUint KTRH264CodecLevel10 = 110; -const TUint KTRH264CodecLevel10b = 119; -const TUint KTRH264CodecLevel11 = 111; -const TUint KTRH264CodecLevel12 = 112; -const TUint KTRH264CodecLevel13 = 113; -const TUint KTRH264CodecLevel20 = 120; -const TUint KTRH264CodecLevel21 = 121; -const TUint KTRH264CodecLevel22 = 122; -const TUint KTRH264CodecLevel30 = 130; -//WVGA task -const TUint KTRH264CodecLevel31 = 131; - -const TUint KTRMPEG4CodecLevel0 = 0; -const TUint KTRMPEG4CodecLevel1 = 1; -const TUint KTRMPEG4CodecLevel2 = 2; -const TUint KTRMPEG4CodecLevel3 = 3; -const TUint KTRMPEG4CodecLevel0b = 9; -const TUint KTRMPEG4CodecLevel4a = 4; - -// Bitstream buffer size -const TUint KTRMaxBufferSizeLevel10 = 16384; -const TUint KTRMaxBufferSizeLevel20 = 65536; -const TUint KTRMaxBufferSizeLevel30 = 65536; -const TUint KTRMaxBufferSizeLevel40 = 32768; -const TUint KTRMaxBufferSizeLevel45 = 16384; -const TUint KTRMaxBufferSizeLevel50 = 32768; -const TUint KTRMaxBufferSizeLevel60 = 32768; -const TUint KTRMaxBufferSizeLevel70 = 32768; - -const TUint KTRMaxBufferSizeH264Level10 = 19688; -const TUint KTRMaxBufferSizeH264Level10b = 39375; -const TUint KTRMaxBufferSizeH264Level11 = 56250; -const TUint KTRMaxBufferSizeH264Level12 = 112500; -const TUint KTRMaxBufferSizeH264Level13 = 225000; -const TUint KTRMaxBufferSizeH264Level20 = 225000; -const TUint KTRMaxBufferSizeH264Level21 = 450000; -const TUint KTRMaxBufferSizeH264Level22 = 450000; -const TUint KTRMaxBufferSizeH264Level30 = 1125000; -//WVGA task -const TUint KTRMaxBufferSizeH264Level31 = 2250000; - -const TUint KTRMaxBufferSizeLevel0 = 20480; -const TUint KTRMaxBufferSizeLevel0b = 40960; -const TUint KTRMaxBufferSizeLevel1 = 20480; -const TUint KTRMaxBufferSizeLevel2 = 81920; -const TUint KTRMaxBufferSizeLevel3 = 81920; -const TUint KTRMaxBufferSizeLevel4a = 163840; - -// Bit rates for different profiles / levels, [kbps] -const TUint KTRMaxBitRateH263Level10 = 64000; -const TUint KTRMaxBitRateH263Level20 = 128000; -const TUint KTRMaxBitRateH263Level30 = 384000; -const TUint KTRMaxBitRateH263Level40 = 384000; -const TUint KTRMaxBitRateH263Level45 = 128000; -const TUint KTRMaxBitRateH263Level50 = 384000; -const TUint KTRMaxBitRateH263Level60 = 384000; -const TUint KTRMaxBitRateH263Level70 = 384000; - -const TUint KTRMaxBitRateH264Level10 = 64000; -const TUint KTRMaxBitRateH264Level10b = 128000; -const TUint KTRMaxBitRateH264Level11 = 192000; -const TUint KTRMaxBitRateH264Level12 = 384000; -const TUint KTRMaxBitRateH264Level13 = 768000; -const TUint KTRMaxBitRateH264Level20 = 2000000; -const TUint KTRMaxBitRateH264Level21 = 4000000; -const TUint KTRMaxBitRateH264Level22 = 4000000; -const TUint KTRMaxBitRateH264Level30 = 10000000; -//WVGA task -const TUint KTRMaxBitRateH264Level31 = 20000000; - -const TUint KTRMaxBitRateMPEG4Level0 = 64000; -const TUint KTRMaxBitRateMPEG4Level0b = 128000; -const TUint KTRMaxBitRateMPEG4Level1 = 64000; -const TUint KTRMaxBitRateMPEG4Level2 = 128000; -const TUint KTRMaxBitRateMPEG4Level3 = 384000; -const TUint KTRMaxBitRateMPEG4Level4a = 4000000; - - -// Target framerate default -const TReal KTRTargetFrameRateDefault = 15.0; - -// Default segment size -const TUint KTRDefaultSegmentSize = 256; - -// Min segment size -const TUint KTRMinSegmentSize = 256; - -// Max desc8 length -const TUint KMaxDesC8Length = 256; - -// Image size -const TUint KTRQCIFWidth = 176; -const TUint KTRQCIFHeight = 144; -const TUint KTRSubQCIFWidth = 128; -const TUint KTRSubQCIFHeight = 96; -const TUint KTRCIFWidth = 352; -const TUint KTRCIFHeight = 288; -const TUint KTRPALWidth = 720; -const TUint KTRPAL2Height = 288; -const TUint KTRPAL1Height = 576; -const TUint KTRQVGAWidth = 320; -const TUint KTRQVGAHeight = 240; -const TUint KTRVGAWidth = 640; -const TUint KTRVGAHeight = 480; -const TUint KTR4CIFWidth = 704; -const TUint KTR4CIFHeight = 576; -const TUint KTRVGA16By9Width = 640; -const TUint KTRVGA16By9Height = 352; -//WVGA task -const TUint KTRWVGAWidth = 864; -const TUint KTRWVGAHeight = 480; - -// Number of TVideoPictures in TranscoderPicture queue -const TUint KTRPictureBuffersNumber = 2; - -// Number fo TTRVideoPicture containers in TRTranscoderQueue -const TUint KTRPictureContainersNumber = 5; - -// Number of picture buffers allocated by encoder plugin (if BufferManagementCI is available) -// Only few (one or two) buffers can be used: See mdf extensions spec for details -const TUint KTRPictureBuffersNumberBMCI = 2; - -// X0 would be enough.. ? -const TUint KNumberOfEvents = 50; - -#endif // CTRSETTINGS_H diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrtranscoder.h --- a/videoeditorengine/vedtranscoder/inc/ctrtranscoder.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,342 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Transcoder. -* -*/ - - -#ifndef CTRTRANSCODER_H -#define CTRTRANSCODER_H - - -// INCLUDES -#include -#include -#include // for CFbsScreenDevice -#include -#include "ctrcommon.h" - - -// FORWARD DECLARATIONS -class MTRVideoPictureSink; -class MTRTranscoderObserver; -class MCMRMediaSink; - - -// CLASS DECLARATION -/** -* CTranscoder interface class -* Using CTRTranscoder: -* - Create the transcoder instance -* - Open the transcoder with specified options -* - Give settings -* - Initialize the transcoder with given options -* - Start transcoding after initializing is completed with MtroInitializeComplete observer callback. -* - Stop transcoding -* - Delete the transcoder instance -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -class CTRTranscoder : public CBase - { - public: - - // Video data format - enum TTRVideoDataType - { - ETRDuCodedPicture = 0, // Each data unit contains one coded video picture - ETRDuVideoSegment, // Each data unit contains one coded video segment (according resync value (MPEG4) and GOB header in H.263) - ETRYuvRawData420, // Each data unit represents uncompressed video picture in YUV 4:2:0 format - ETRYuvRawData422 // Each data unit represents uncompressed video picture in YUV 4:2:2 format - }; - - // Transcoder operational mode - enum TTROperationalMode - { - EFullTranscoding = 0, // Full transcoding operation - EDecoding, // Decoding only (picture resampling is possible) - EEncoding, // Encoding only (picture resampling is possible) - EResampling, // Picture resampling only (for YUV In / Out data) - EOperationNone // None - }; - - public: // Constructors and destructor - /** - * Two-phased constructor. Create an instance the transcoder instance - * @param aObserver Transcoder observer - * @return CTranscoder instance. Can leave with Symbian error code - */ - IMPORT_C static CTRTranscoder* NewL(MTRTranscoderObserver& aObserver); - - /** - * Destructor. - */ - virtual ~CTRTranscoder(); - - - public: - /** - * Open the transcoder. Instantiates other submodules based on the selected operational mode. - * @param aMediaSink MCMRMediaSink for encoded data output - * @param aMode Mode for the transcoder, operation to perform - * @param aMimeTypeInputFormat Mime type for input format - * @param aMimeTypeOutputFormat Mime type for otput format - * @param aRealTimeProcessing Specifies how to process data. ETrue - Real-time processing; EFalse - non-real time. - * If the processing cannot be performed in real-time, the transcoder process data as fast as it can. - * @return void. Can leave (KErrNotSupported - selected operation or codecs are not supported, - * @ or any other Symbian error code ) - */ - virtual void OpenL( MCMRMediaSink* aMediaSink, - CTRTranscoder::TTROperationalMode aMode, - const TDesC8& aInputMimeType, - const TDesC8& aOutputMimeType, - const TTRVideoFormat& aVideoInputFormat, - const TTRVideoFormat& aVideoOutputFormat, - TBool aRealTime ) = 0; - - // Information methods - /** - * - * @param - * @return - */ - virtual TBool SupportsInputVideoFormat(const TDesC8& aMimeType) = 0; - - /** - * - * @param - * @return - */ - virtual TBool SupportsOutputVideoFormat(const TDesC8& aMimeType) = 0; - - /** - * Initializes the transcoder. Initializing completes asynchronously with MtroInitializeComplete observer callback. - * @param none - * @return void - */ - virtual void InitializeL() = 0; - - /** - * Starts transcoding. - * @param none - * @return void. Can leave with Symbian error code in case of an error. - */ - virtual void StartL() = 0; - - /** - * Stops transcoding synchronously. Use this method to stop data processing synchronously. In this case - * all active requests are cancelled and data that was not processed is returned to data owner immediately. - * @param none - * @return void. Can leave with Symbian error code in case of an error. - */ - virtual void StopL() = 0; - - /** - * Stops transcoding asynchronously. The transcoder use this signal to ensure that the remaining data gets processed, - * without waiting for new data. This method is mainly useful for file-to-file conversions and other non-realtime - * processing. - * @param none - * @return void. Can leave with Symbian error code in case of an error. - */ - virtual void AsyncStopL() = 0; - - /** - * Pauses transcoding. - * @param - * @return void. Can leave with Symbian error code in case of an error. - */ - virtual void PauseL() = 0; - - /** - * Resumes transcoding. - * @param - * @return void. Can leave with Symbian error code in case of an error. - */ - virtual void Resume() = 0; - - - // AA - virtual void SetDecoderInitDataL(TPtrC8& aInitData) = 0; - - /** - * Sets bit rate parameter for transcoded bitstream. Can be run-time setting - * @param aBitRate Bitrate - * @return void Can leave with KErrNotSupported - */ - virtual void SetVideoBitRateL(TUint aBitRate) = 0; - - /** - * Sets frame rate for decoded bitstream. Can be run-time setting. - * @param aFrameRate Frame rate - * @return void Can leave with KErrNotSupported - */ - virtual void SetFrameRateL(TReal aFrameRate) = 0; - - /** - * Sets channel bit error rate. Can be run-time setting - * @param aErrorRate Channel expected error rate. - * aErrorRate = 0.0 - low bit error rate or error is not expected - * aErrorRate = 0.00001 - medium bit error rate - * aErrorRate = 0.0001 - high bit error rate - * @return void - */ - virtual void SetChannelBitErrorRateL(TReal aErrorRate) = 0; - - /** - * Sets misc video coding options - * @param aOptions Coding options - * @return void - */ - virtual void SetVideoCodingOptionsL(TTRVideoCodingOptions& aOptions) = 0; - - /** - * Makes a request to retrieve the intermediate content from the transcoder - * @param aRetrieve: ETrue - retrieve; EFalse - don't retrieve. - * @param aSize Requested picture size for intermediate decoded picture - * @param aSink - * @return void Can leave with KErrNotSupported, if the intermediate picture size is not supported - */ - //virtual void RetrieveIntermediateContentL(TSize& aSize, MTRVideoPictureSink* aSink) = 0; - virtual void SetVideoPictureSinkOptionsL(TSize& aSize, MTRVideoPictureSink* aSink) = 0; - - /** - * Makes a request to use direct screen access - * @param aUseDSA Use Direct Screen Access (DSA). ETrue - use DSA; EFalse - don't use DSA. - * @param aOptions Display options, valid only if aUseDSA is set to ETrue - * @return void Can leave with KErrNotSupported, the DSA is not supported. - */ - virtual void UseDirectScreenAccessL(TBool aUseDSA, CFbsScreenDevice& aScreenDevice, TTRDisplayOptions& aOptions) = 0; - - /** - * Gets the current output bit rate for transcoded bit stream - * @param none - * @return TUint Bit rate - */ - virtual TUint GetVideoBitRateL() = 0; - - /** - * Gets the current frame rate for transcoded stream - * @param none - * @return TReal Framerate - */ - virtual TReal GetFrameRateL() = 0; - - /** - * Retrieve currently used codec for transcoding stream - * @param aVideoMimeType video mime type - * @return void - */ - virtual void GetVideoCodecL(TDes8& aVideoMimeType) = 0; - - /** - * Get transcoded picture size - * @param aSize Picture size - * @return void - */ - virtual void GetTranscodedPictureSizeL(TSize& aSize) = 0; - - // Data transfer methods - /** - * Sends filled buffer with new portion of the bitstream to transcoder. Note, this is asynchronous operation, - * and this bufer is returned back with Transcoder Observer call MtroReturnCodedBuffer(aBuffer); - * @param aBuffer Media buffer. It is not allowed to use this buffer on the client side until it is returned back - * from the transcoder with MtroReturnCodedBuffer(aBuffer). - * @return void - */ - virtual void WriteCodedBufferL(CCMRMediaBuffer* aBuffer) = 0; - - /** - * Sends video picture to transcoder / releases decoded picture (Decode mode) - * @param aPicture Video picture - * @return void - */ - virtual void SendPictureToTranscoderL(TTRVideoPicture* aPicture) = 0; - - /** - * Resample picture in Resampling only mode. The client should specify souce picture and buffer for target - * resampled picture - * @param aSrc Source picture - * @param aTrg Target picture - * @return void - */ - virtual void ResampleL(TPtr8& aSrc, TPtr8& aTrg) = 0; - - - // Video Editor specific API: - /** - * Gets coding-standard specific initialization output. The buffer is pushed to the cleanup stack, - * and the caller is responsible for deallocating it. - * @param none - * @return HBufC8 Coding options (VOL header) - */ - virtual HBufC8* GetCodingStandardSpecificInitOutputLC() = 0; - - /** - * Enables / Disables use of picture sink; Note: This method is relevant only for full transcoding use cases; - * This cnage is applied for the next written coded buffer with WriteCodedBufferL - * @param aEnable ETrue: Picture sink is enabled; EFalse: Picture sink is disabled - * @return none - */ - virtual void EnablePictureSink(TBool aEnable) = 0; - - /** - * Enable / Disable use of Encoder; Note: This method is relevant only for full transcoding use cases; - * By default encoding is always enabled in FullTranscoding mode - * This cnage is applied for the next written coded buffer with WriteCodedBufferL - * @param aEnable ETue: Encoder is enabled; EFalse: Encoder is disabled - * @return none - */ - virtual void EnableEncoder(TBool aEnable) = 0; - - /** - * Requests random access point to the following transcoded picture - * This change is applied for the next written coded buffer with WriteCodedBufferL - * @param none - * @return none - */ - virtual void SetRandomAccessPoint() = 0; - - /** - * Returns a time estimate of how long it takes to process one second of the input video with the - * current transcoder settings. OpenL must be called before calling this function. Estimate - * will be more accurate if InitializeL is called before calling this function. - * @param aInput Input video format - * @param aOutput Output video format - * @return TReal Time estimate in seconds - */ - virtual TReal EstimateTranscodeTimeFactorL(const TTRVideoFormat& aInput, const TTRVideoFormat& aOutput) = 0; - - /** - * Get max number of frames in processing. - * This is just a recommendation, not a hard limit. - * @return TInt Number of frames - */ - virtual TInt GetMaxFramesInProcessing() = 0; - - /** - * Enable / Disable pausing of transcoding if resources are lost. If enabled transcoder - * will notify the observer about resource losses by calling MtroSuspend / MtroResume - * @param aEnable ETrue: Pausing is enabled - * EFalse: Pausing is disabled and resource losses will cause a fatal error - * @return none - */ - virtual void EnablePausing(TBool aEnable) = 0; - }; - - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrtranscoderimp.h --- a/videoeditorengine/vedtranscoder/inc/ctrtranscoderimp.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,715 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Transcoder. -* -*/ - - -#ifndef CTRTRANSCODERIMP_H -#define CTRTRANSCODERIMP_H - - -// INCLUDES -#include "ctrtranscoder.h" -#include "ctrdevvideoclientobserver.h" - - -// FORWARD DECLARATIONS -class CTRVideoDecoderClient; -class CTRVideoEncoderClient; -class CTRScaler; - - -// CONSTANTS -const TInt KTRErrNotReady = -1001; - - -// CLASS DECLARATION - -/** -* CTranscoder Implementation class -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -NONSHARABLE_CLASS(CTRTranscoderImp) : public CTRTranscoder, public MTRDevVideoClientObserver, public CActive - { - public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CTRTranscoderImp* NewL(MTRTranscoderObserver& aObserver); - - /** - * Destructor. - */ - ~CTRTranscoderImp(); - - public: // Transcoder methods - /** - * From CTranscoder. Open the transcoder. Instantiates other submodules based on the selected operational mode. - * @param aMediaSink MCMRMediaSink for encoded data output - * @param aMode Mode for the transcoder, operation to perform - * @param aMimeTypeInputFormat Mime type for input format - * @param aMimeTypeOutputFormat Mime type for otput format - * @param aRealTimeProcessing Specifies how to process data. ETrue - Real-time processing; EFalse - non-real time. - * If the processing cannot be performed in real-time, the transcoder process data as fast as it can. - * @return void. Can leave (KErrNotSupported - selected operation or codecs are not supported, - * @ or any other Symbian error code ) - */ - void OpenL( MCMRMediaSink* aMediaSink, - CTRTranscoder::TTROperationalMode aMode, - const TDesC8& aInputMimeType, - const TDesC8& aOutputMimeType, - const TTRVideoFormat& aVideoInputFormat, - const TTRVideoFormat& aVideoOutputFormat, - TBool aRealTime ); - - // Information methods - /** - * Check support for input format - * @param aMimeType MIME type - * @return TBool: ETrue - supports; EFalse - does not support - */ - TBool SupportsInputVideoFormat(const TDesC8& aMimeType); - - /** - * Check support for output format - * @param aMimeType MIME type - * @return TBool: ETrue - supports; EFalse - does not support - */ - TBool SupportsOutputVideoFormat(const TDesC8& aMimeType); - - // Control - /** - * From CTranscoder. Initializes the transcoder. Initializing completes asynchronously with MtroInitializeComplete observer callback. - * @param none - * @return void - */ - void InitializeL(); - - /** - * From CTranscoder. Starts transcoding. - * @param none - * @return void. Can leave with Symbian error code in case of an error. - */ - void StartL(); - - /** - * From CTranscoder. Stops transcoding synchronously. Use this method to stop data processing synchronously. In this case - * all active requests are cancelled and data that was not processed is returned to data owner immediately. - * @param none - * @return void. Can leave with Symbian error code in case of an error. - */ - void StopL(); - - /** - * From CTranscoder. Stops transcoding asynchronously. The transcoder use this signal to ensure that the remaining data gets processed, - * without waiting for new data. This method is mainly useful for file-to-file conversions and other non-realtime - * processing. - * @param none - * @return void. Can leave with Symbian error code in case of an error. - */ - void AsyncStopL(); - - /** - * From CTranscoder. Pauses transcoding. - * @param - * @return void. Can leave with Symbian error code in case of an error. - */ - inline void PauseL(){}; - - /** - * From CTranscoder. Resumes transcoding. - * @param - * @return void. - */ - inline void Resume(){}; - - // Settings - /** - * From CTranscoder. Sets bit rate parameter for transcoded bitstream. Can be run-time setting - * @param aBitRate Bitrate - * @return void Can leave with KErrNotSupported - */ - void SetVideoBitRateL(TUint aBitRate); - - /** - * From CTranscoder. Sets frame rate for decoded bitstream. Can be run-time setting. - * @param aFrameRate Frame rate - * @return void Can leave with KErrNotSupported - */ - void SetFrameRateL(TReal aFrameRate); - - /** - * From CTranscoder. Sets channel bit error rate. Can be run-time setting - * @param aErrorRate Channel expected error rate. - * aErrorRate = 0.0 - low bit error rate or error is not expected - * aErrorRate = 0.00001 - medium bit error rate - * aErrorRate = 0.0001 - high bit error rate - * @return void - */ - void SetChannelBitErrorRateL(TReal aErrorRate); - - /** - * From CTranscoder. Sets misc video coding options - * @param aOptions Coding options - * @return void - */ - void SetVideoCodingOptionsL(TTRVideoCodingOptions& aOptions); - - /** - * From CTranscoder. Makes a request to retrieve the intermediate content from the transcoder - * @param aRetrieve: ETrue - retrieve; EFalse - don't retrieve. - * @param aSize Requested picture size for intermediate decoded picture - * @return void Can leave with KErrNotSupported, if the intermediate picture size is not supported - */ - void SetVideoPictureSinkOptionsL(TSize& aSize, MTRVideoPictureSink* aSink); - - /** - * From CTranscoder. Makes a request to use direct screen access - * @param aUseDSA Use Direct Screen Access (DSA). ETrue - use DSA; EFalse - don't use DSA. - * @param aOptions Display options, valid only if aUseDSA is set to ETrue - * @return void Can leave with KErrNotSupported, the DSA is not supported. - */ - void UseDirectScreenAccessL(TBool aUseDSA, CFbsScreenDevice& aScreenDevice, TTRDisplayOptions& aOptions); - - /** - * From CTranscoder. Gets the current output bit rate for transcoded bit stream - * @param none - * @return TUint Bit rate - */ - TUint GetVideoBitRateL(); - - /** - * From CTranscoder. Gets the current frame rate for transcoded stream - * @param none - * @return TReal Framerate - */ - TReal GetFrameRateL(); - - /** - * From CTranscoder. Retrieve currently used codec for transcoding stream - * @param aVideoMimeType video mime type - * @return void - */ - void GetVideoCodecL(TDes8& aVideoMimeType); - - /** - * From CTranscoder. Get transcoded picture size - * @param aSize Picture size - * @return void - */ - void GetTranscodedPictureSizeL(TSize& aSize); - - // Data transfer methods - /** - * Sends filled buffer with new portion of the bitstream to transcoder. Note, this is asynchronous operation, - * and this bufer is returned back with Transcoder Observer call MtroReturnCodedBuffer(aBuffer); - * @param aBuffer Media buffer. It is not allowed to use this buffer on the client side until it is returned back - * from the transcoder with MtroReturnCodedBuffer(aBuffer). - * @return void - */ - void WriteCodedBufferL(CCMRMediaBuffer* aBuffer); - - /** - * From CTranscoder. Sends video picture to transcoder / releases decoded picture (Decode mode) - * @param aPicture Video picture - * @return void - */ - void SendPictureToTranscoderL(TTRVideoPicture* aPicture); - - /** - * Resample picture in Resampling only mode. The client should specify souce picture and buffer for target - * resampled picture - * @param aSrc Source picture - * @param aTrg Target picture - * @return void - */ - void ResampleL(TPtr8& aSrc, TPtr8& aTrg); - - // MTRDevVideoClientObserver implementation - /** - * From MTRDevVideoClientObserver. Reports an error from the devVideo client - * @param aError Error reason - * @return void - */ - void MtrdvcoFatalError(TInt aError); - - /** - * From MTRDevVideoClientObserver. Reports that data encoding process has been finished - * @param none - * @return void - */ - void MtrdvcoEncStreamEnd(); - - /** - * From MTRDevVideoClientObserver. Reports that data decoding process has been finished - * @param none - * @return void - */ - void MtrdvcoDecStreamEnd(); - - /** - * From MTRDevVideoClientObserver. Returns video picture from the video encoder client - * @param aPicture video picture - * @return void - */ - void MtrdvcoEncoderReturnPicture(TVideoPicture* aPicture); - - /** - * From MTRDevVideoClientObserver. Returns videopicture from the renderer - * @param aPicture video picture - * @return void - */ - void MtrdvcoRendererReturnPicture(TVideoPicture* aPicture); - - /** - * From MTRDevVideoClientObserver. Informs about initializing video encoder client - * @param aError Initializing error status - * @return void - */ - void MtrdvcoEncInitializeComplete(TInt aError); - - /** - * From MTRDevVideoClientObserver. Informs about initializing video decoder client - * @param aError Initializing error status - * @return void - */ - void MtrdvcoDecInitializeComplete(TInt aError); - - /** - * From MTRDevVideoClientObserver. Supplies new encoded bitstream buffer - * @param aPicture Decoded picture - * @return void - */ - void MtrdvcoNewPicture(TVideoPicture* aPicture); - - /** - * Supplies new encoded bitstream buffer - * @param - * @return void - */ - void MtrdvcoNewBuffer(CCMRMediaBuffer* aBuffer); - /** - * Returns media bitstream buffer to the client - * @param aBuffer Bitstream media buffer - * @return void - */ - void MtrdvcoReturnCodedBuffer(CCMRMediaBuffer* aBuffer); - - - // AA - void SetDecoderInitDataL(TPtrC8& aInitData); - - /** - * Gets coding-standard specific initialization output. The buffer is pushed to the cleanup stack, - * and the caller is responsible for deallocating it. - * @param none - * @return HBufC8 Coding options (VOL header) - */ - HBufC8* GetCodingStandardSpecificInitOutputLC(); - - /** - * Enable / Disable use of picture sink; Note: This method is relevant only for full transcoding use cases; - * - * @param aEnable ETrue: Picture sink is enabled; EFalse: Picture sink is disabled - * @return none - */ - void EnablePictureSink(TBool aEnable); - - /** - * Enable / Disable use of Encoder; Note: This method is relevant only for full transcoding use cases; - * By default encoding is always enabled in FullTranscoding mode - * - * @param aEnable ETrue: Encoder is enabled; EFalse: Encoder is disabled - * @return none - */ - void EnableEncoder(TBool aEnable); - - /** - * Requests random access point to the following transcoded picture - * This change is applied for the next written coded buffer with WriteCodedBufferL - * @param none - * @return none - */ - void SetRandomAccessPoint(); - - /** - * From MTRDevVideoClientObserver. Notifies the transcoder about available picture buffers throug CI or MDF - * @param none - * @return none - */ - void MtrdvcoNewBuffers(); - - /** - * Returns a time estimate of how long it takes to process one second of the input video with the - * current transcoder settings. OpenL must be called before calling this function. Estimate - * will be more accurate if InitializeL is called before calling this function. - * @param aInput Input video format - * @param aOutput Output video format - * @return TReal Time estimate in seconds - */ - TReal EstimateTranscodeTimeFactorL(const TTRVideoFormat& aInput, const TTRVideoFormat& aOutput); - - /** - * From CTranscoder. Get max number of frames in processing. - * This is just a recommendation, not a hard limit. - * @return TInt Number of frames - */ - TInt GetMaxFramesInProcessing(); - - /** - * Enable / Disable pausing of transcoding if resources are lost. If enabled transcoder - * will notify the observer about resource losses by calling MtroSuspend / MtroResume - * @param aEnable ETrue: Pausing is enabled - * EFalse: Pausing is disabled and resource losses will cause a fatal error - * @return none - */ - void EnablePausing(TBool aEnable); - - /** - * Indicates that a media device has lost its resources - * @param aFromDecoder Flag to indicate source of resource loss - * @return none - */ - void MtrdvcoResourcesLost(TBool aFromDecoder); - - /** - * Indicates that a media device has regained its resources - * @return none - */ - void MtrdvcoResourcesRestored(); - - protected: - /** - * From CActive. - * @param - * @return void - */ - void RunL(); - - /** - * From CActive. - * @param - * @return void - */ - void DoCancel(); - - /** - * From CActive. - * @param aError error - * @return void - */ - TInt RunError(TInt aError); - - private: - /** - * C++ default constructor. - */ - CTRTranscoderImp(MTRTranscoderObserver& aObserver); - - /** - * Symbian 2nd phase constructor, can leave - */ - void ConstructL(); - - /** - * Parses mime type - * @param aInputMimeType Input mime tipe - * @param aVideoInputFormat Output mime type - * @param aInOutMime ETrue - input mime, EFalse - * @return void - */ - void ParseMimeTypeL(const TDesC8& aInputMimeType, TBool aInOutMime); - - /** - * Check picture size if valid - * @param - * @return void - */ - TBool IsValid(TSize& aSize); - - /** - * Handles initialize complete call - * @param - * @return void - */ - void InitComplete(); - - /** - * Allocate transcoder buffers and other data structures - * @param - * @return void - */ - void AllocateBuffersL(); - - /** - * Makes a new request - * @param - * @return void - */ - void DoRequest(); - - /** - * Loads codec Uids from central repository - * @return void - */ - void LoadCodecUids(); - - private: - // Transcoder Observer - MTRTranscoderObserver& iObserver; - - // Video decoder client - CTRVideoDecoderClient* iVideoDecoderClient; - - // Video Encoder client - CTRVideoEncoderClient* iVideoEncoderClient; - - // Scaler - CTRScaler* iScaler; - - // Processing mode (RT / Non-RT) - TBool iRealTime; - - // MediaSink for output transcoded stream - MCMRMediaSink* iMediaSink; - - // MTRVideoPictureSink - MTRVideoPictureSink* iPictureSink; - - // MTRVideoPictureSink temp sink - MTRVideoPictureSink* iPictureSinkTemp; - - // Enable / disable encoder flag (relevant only for full transcoding use cases) - TBool iEncoderEnabled; - - // Input picture size - TSize iInputPictureSize; - - // Picture size after decoding - TSize iDecodedPictureSize; - - // Output picture size - TSize iOutputPictureSize; - - // Intermediate picture size - TSize iIntermediatePictureSize; - - // Operational mode - TInt iMode; - - // Transcoder state - TInt iState; - - // Encoder init status - TInt iEncoderInitStatus; - - // Decoder init status - TInt iDecoderInitStatus; - - // Codec level - TInt iInputCodecLevel; - - // Codec level - TInt iOutputCodecLevel; - - // Request status - TRequestStatus* iStat; - - // Encoder stream end status - TBool iEncoderStreamEnd; - - // Decoder stream end status - TBool iDecoderStreamEnd; - - // Input mimetype - TBufC8<256> iInputMimeType; - - // Short mimetype - TBufC8<256> iInputShortMimeType; - - // Output mimetype - TBufC8<256> iOutputMimeType; - - // Short mimetype - TBufC8<256> iOutputShortMimeType; - - // Max bit rate - TUint iOutputMaxBitRate; - - // Input codec - TInt iInputCodec; - - // Output codec - TInt iOutputCodec; - - // Input Max Bit Rate - TUint iInputMaxBitRate; - - // Input max picture size - TSize iInputMaxPictureSize; - - // Output max picture size - TSize iOutputMaxPictureSize; - - // Transcoder picture queue - TDblQue iTranscoderPictureQueue; - - // Transcoder picture queue - TDblQue iEncoderPictureQueue; - - // CI picture buffers queue - TDblQue iCIPictureBuffersQueue; - - // Transcoder events queue - TDblQue iTranscoderEventQueue; - - // Transcoder events queue - TDblQue iTranscoderEventSrc; - - // Transcoder async events queue - TDblQue iTranscoderAsyncEventQueue; - - // Transcoder TRVideoPicture queue - TDblQue iTranscoderTRPictureQueue; - - // TVideopicture container wait queue - TDblQue iContainerWaitQueue; - - // Data array - TUint8** iDataArray; - - // Events - CTREventItem* iEvents; - - // TVideo picture array - TVideoPicture* iVideoPictureArray; - - // TTRVideo picture array - TTRVideoPicture* iTRVideoPictureArray; - - // Decoded picture - TVideoPicture* iDecodedPicture; - - // Picture container to client - TTRVideoPicture iPicureToClient; - - // Temp video picture - TVideoPicture* iVideoPictureTemp; - - // Set bitrate flag - TBool iBitRateSetting; - - // Fatal error - TInt iFatalError; - - // Data transfer optimization (applicable only to full transcoding mode) - TBool iOptimizedDataTransfer; - - // Set random access point flag - TBool iSetRandomAccessPoint; - - // EnableEncoder setting status flag - TBool iEncoderEnabledSettingChanged; - - // EnableEncoder setting from the client - TBool iEncoderEnableClientSetting; - - // EnablePicture sink transcoder setting - TBool iPictureSinkEnabled; - - // EnablePictureSink setting status flag - TBool iPictureSinkSettingChanged; - - // PictuereSink enabled client's setting - TBool iPictureSinkClientSetting; - - // Wait picture from client - TTRVideoPicture* iWaitPictureFromClient; - - // Wait new decoded picture - TVideoPicture* iWaitNewDecodedPicture; - - // New event - CTREventItem* iNewEvent; - - // Acync event - CTREventItem* iAsyncEvent; - - // Current setting - TBool iCurrentPictureSinkEnabled; - - // Current setting - TBool iCurrentEncoderEnabled; - - // Current setting - TBool iCurrentRandomAccess; - - // Current async PS setting - TBool iCurrentAsyncPictureSinkEnabled; - - // Current async enc setting - TBool iCurrentAsyncEncoderEnabled; - - // Current async setting - TBool iCurrentAsyncRandomAccess; - - // Asynchronous stop is used - TBool iAsyncStop; - - // Max number of frames sent to transcoder at a time - // This is just a recommendation, not a hard limit - TInt iMaxFramesInProcessing; - - // Default decoder uids for different codecs - TInt iH263DecoderUid; - TInt iH264DecoderUid; - TInt iMPEG4DecoderUid; - - // Default encoder uids for different codecs - TInt iH263EncoderUid; - TInt iH264EncoderUid; - TInt iMPEG4EncoderUid; - - // Decoder uids for low resolutions - TInt iH263DecoderLowResUid; - TInt iH264DecoderLowResUid; - TInt iMPEG4DecoderLowResUid; - - // Max width of low resolutions - TInt iH263DecoderLowResThreshold; - TInt iH264DecoderLowResThreshold; - TInt iMPEG4DecoderLowResThreshold; - - // Decoder uids for low resolutions - TInt iH263EncoderLowResUid; - TInt iH264EncoderLowResUid; - TInt iMPEG4EncoderLowResUid; - - // Max width of low resolutions - TInt iH263EncoderLowResThreshold; - TInt iH264EncoderLowResThreshold; - TInt iMPEG4EncoderLowResThreshold; - - // Flag to store resource loss source (decoder / encoder) - TBool iDecoderResourceLost; - - }; - - -#endif // CTRTRANSCODERIMP_H diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrtranscoderobserver.h --- a/videoeditorengine/vedtranscoder/inc/ctrtranscoderobserver.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Transcoder observer. -* -*/ - - -#ifndef CTRTRANSCODEROBSERVER_H -#define CTRTRANSCODEROBSERVER_H - - -// INCLUDES -#include -#include "ctrcommon.h" - - -/** -* Transcoder observer interface class. Every client should implement this class. -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -class MTRTranscoderObserver - { - public: - /** - * Reports initialize status to the client - * @param aError Error status - * @return void - */ - virtual void MtroInitializeComplete(TInt aError) = 0; - - /** - * Reports run-time error to the client - * @param aError Run-time error - * @return void - */ - virtual void MtroFatalError(TInt aError) = 0; - - /** - * Returns media bitstream buffer to the client - * @param aBuffer Bitstream media buffer - * @return void - */ - virtual void MtroReturnCodedBuffer(CCMRMediaBuffer* aBuffer) = 0; - - /** - * Request to the client to set FrameRate of the input sequence. - * @param aRate Framerate of the input sequence (in frames per second) - * @return void - */ - virtual void MtroSetInputFrameRate(TReal& aRate) = 0; - - /** - * Completes async request - * @param none - * @return void - */ - virtual void MtroAsyncStopComplete() = 0; - - /** - * Notifies that resources were lost and transcoding has to be suspended - * @param none - * @return void - */ - virtual void MtroSuspend() = 0; - - /** - * Notifies that resources were restored and transcoding can now continue - * @param none - * @return void - */ - virtual void MtroResume() = 0; - }; - - - -#endif diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrvideodecoderclient.h --- a/videoeditorengine/vedtranscoder/inc/ctrvideodecoderclient.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,388 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video decoder client. -* -*/ - - - -#ifndef CTRVIDEODECODERCLIENT_H -#define CTRVIDEODECODERCLIENT_H - -// INCLUDES -#include -#include -#include -#include - -#include "ctrcommon.h" - - -// FORWARD DECLARATIONS -class MTRDevVideoClientObserver; -class CCMRMediaBuffer; - - -/** -* Video decoder client -* @lib TRANSCODER.LIB -*/ -NONSHARABLE_CLASS(CTRVideoDecoderClient) : public CBase, public MMMFDevVideoPlayObserver, public MMmfVideoResourceObserver - - { - public: // Constuctor / destructor - - /** - * Two-phased constructor. - */ - static CTRVideoDecoderClient* NewL(MTRDevVideoClientObserver& aObserver); - - /** - * Destructor. - */ - ~CTRVideoDecoderClient(); - - // Information methods - /** - * Checks codec support by MIME type - * @param aFormat MIME type - * @param aShortFormat MIME type (short version) - * @param aUid Uid of the codec to check - * @param aFallbackUid Fallback Uid incase the first one is not found - * @return TBool value: ETrue - givemn MIME type is supported; EFalse - no support; - */ - TBool SupportsCodec(const TDesC8& aFormat, const TDesC8& aShortFormat, TInt aUid, TInt aFallbackUid); - - /** - * Gets codec info - * @param none - * @return none - */ - void GetCodecInfoL(); - - /** - * Sets codec parameters - * @param aCodecType Codec type - * @param aCodecLevel Codec level - * @param aInputFormat Input video format - * @param aOutputFormat Output video format - * @return none - */ - void SetCodecParametersL(TInt aCodecType, TInt aCodecLevel, const TTRVideoFormat& aInputFormat, - const TTRVideoFormat& aOutputFormat); - - /** - * From MMMFDevVideoPlayObserver. Notifies the client that one or more new empty input buffers are available - * @param none - * @return none - */ - void MdvpoNewBuffers(); - - /** - * From MMMFDevVideoPlayObserver. Returns a used input video picture back to the caller - * @param aPicture Video picture - * @return none - */ - void MdvpoReturnPicture(TVideoPicture *aPicture); - - /** - * From MMMFDevVideoPlayObserver. Delivers supplemental information from a coded data unit - * @param aData Data, aTimestamp TimeStamp info, aPictureId Picture Id - * @return none - */ - void MdvpoSupplementalInformation(const TDesC8 &aData, const TTimeIntervalMicroSeconds &aTimestamp, - const TPictureId &aPictureId); - - /** - * From MMMFDevVideoPlayObserver. Back channel information from the decoder, indicating a picture loss - * without specifying the lost picture - * @param none - * @return none - */ - void MdvpoPictureLoss(); - - /** - * From MMMFDevVideoPlayObserver. Back channel information from the decoder, indicating the pictures that have been lost - * @param aPictures Array with picture Ids - * @return none - */ - void MdvpoPictureLoss(const TArray< TPictureId > &aPictures); - - /** - * From MMMFDevVideoPlayObserver. Back channel information from the decoder, indicating the loss of consecutive - * macroblocks in raster scan order - * @param aFirstMacroblock First macroblock, aNumMacroblocks, Number of macroblocks, aPicture PictureId - * @return none - */ - void MdvpoSliceLoss(TUint aFirstMacroblock, TUint aNumMacroblocks, const TPictureId &aPicture); - - /** - * From MMMFDevVideoPlayObserver. Back channel information from the decoder, indicating a reference picture - * selection request - * @param aSelectionData Selection data - * @return none - */ - void MdvpoReferencePictureSelection(const TDesC8 &aSelectionData); - - /** - * From MMMFDevVideoPlayObserver. Called when a timed snapshot request has been completed - * @param aError Error, aPictureData Picture data, aPresentationTimestamp Presentation timestamp, aPictureId picture Id - * @return - */ - void MdvpoTimedSnapshotComplete(TInt aError, TPictureData *aPictureData, - const TTimeIntervalMicroSeconds &aPresentationTimestamp, const TPictureId &aPictureId); - - /** - * From MMMFDevVideoPlayObserver. Notifies the client that one or more new output pictures are available - * @param none - * @return none - */ - void MdvpoNewPictures(); - - /** - * From MMMFDevVideoPlayObserver. Reports a fatal decoding or playback error - * @param aError Rin-time error - * @return none - */ - void MdvpoFatalError(TInt aError); - - /** - * From MMMFDevVideoPlayObserver. Reports that DevVideoPlay initialization has completed - * @param aError Init error status - * @return none - */ - void MdvpoInitComplete(TInt aError); - - /** - * From MMMFDevVideoPlayObserver. Reports that the input video stream end has been reached and all pictures - * have been processed - * @param none - * @return none - */ - void MdvpoStreamEnd(); - - /** - * Returns used videopicture - * @param aPicture Video picture - * @return none - */ - void ReturnPicture(TVideoPicture* aPicture); - - /** - * Starts decoding - * @param none - * @return none - */ - void StartL(); - - /** - * Stops decoding synchronously - * @param none - * @return none - */ - void StopL(); - - /** - * Stops decoding asynchronously - * @param none - * @return none - */ - void AsyncStopL(); - - /** - * Pauses decoding - * @param none - * @return none - */ - void Pause(); - - /** - * Resumes decoding - * @param none - * @return none - */ - void ResumeL(); - - /** - * Checks codec info - * @param aUid Decoder Uid - * @return TBool ETrue - accelerated codec; EFalse - non-accelerated codec - */ - TBool CheckCodecInfoL(TUid aUid); - - /** - * Initialize decoder client - * @param none - * @return none - */ - void InitializeL(); - - /** - * Select decoder - * @param none - * @return none - */ - void SelectDecoderL(); - - /** - * Send buffer - * @param aBuffer Media buffer - * @return none - */ - void SendBufferL(CCMRMediaBuffer* aBuffer); - - /** - * Write coded buffer - * @param aBuffer Media buffer - * @return none - */ - void WriteCodedBufferL(CCMRMediaBuffer* aBuffer); - - /** - * Returns a time estimate on long it takes to decode one frame with the current settings - * @param aInput Input video format - * @param aCodecType EH263 or EMpeg4 - * @return TReal time estimate in seconds - */ - TReal EstimateDecodeFrameTimeL(const TTRVideoFormat& aInput, TInt aCodecType); - - /** - * Checks if decoder supports scaling and enables scaling if supported. - * Disables scaling if aInputSize is equal to aOutputSize or scaling is not supported. - * @param aInputSize Source picture size - * @param aOutputSize Decoded picture size - * @return TBool ETrue if scaling is supported, EFalse otherwise - */ - TBool SetDecoderScaling(TSize& aInputSize, TSize& aOutputSize); - - /** - * Enable / Disable resource observer - * @param aEnable ETrue: Observer is enabled, EFalse observer is disabled - * @return none - */ - void EnableResourceObserver(TBool aEnable); - - /** - * From MMmfVideoResourceObserver. Indicates that a media device has lost its resources - * @param aMediaDevice UID for the media device that lost resources - * @return none - */ - void MmvroResourcesLost(TUid aMediaDevice); - - /** - * From MMmfVideoResourceObserver. Indicates that a media device has regained its resources - * @param aMediaDevice UID for the media device that regained resources - * @return none - */ - void MmvroResourcesRestored(TUid aMediaDevice); - - private: - /** - * C++ default constructor. - */ - CTRVideoDecoderClient(MTRDevVideoClientObserver& aObserver); - - /** - * Symbian 2nd phase constructor, can leave - */ - void ConstructL(); - - private: - // Observer - MTRDevVideoClientObserver& iObserver; - - // DevVideoPlay - CMMFDevVideoPlay* iDevVideoPlay; - - // Decoder mime type - TBuf8<256> iMimeType; - - // Short version mime type - TBuf8<256> iShortMimeType; - - // Uncompressed format - TUncompressedVideoFormat iUncompressedFormat; - - // Compressed format - CCompressedVideoFormat* iCompresedFormat; - - // HwDevice Uid - THwDeviceId iHwDeviceId; - - // Video coded input buffer - TVideoInputBuffer* iInputBuffer; - - // Decoded picture - TVideoPicture* iDecodedPicture; - - // Uid of the selected codec - TUid iUid; - - // Fallback codec to use if the first one doesn't work - TUid iFallbackUid; - - // Coded buffer - CCMRMediaBuffer* iCodedBuffer; - - // Codec type - TInt iCodecType; - - // Codec level - TInt iCodecLevel; - - // Buffer options - CMMFDevVideoPlay::TBufferOptions iBufferOptions; - - // Fatal error code - TInt iFatalError; - - // Input format - TTRVideoFormat iInputFormat; - - // Output format - TTRVideoFormat iOutputFormat; - - // Data unit type - TVideoDataUnitType iDataUnitType; - - // Stop - TBool iStop; - - // Pause - TBool iPause; - - // Last ts - TTimeIntervalMicroSeconds iLastTimestamp; - - // If selected decoder is accelerated or not - TBool iAcceleratedCodecSelected; - - // If scaling is used or not - TBool iScalingInUse; - - // Decoded picture size if scaling is used - TSize iScaledOutputSize; - - // If deblocking should be used when scaling - TBool iScalingWithDeblocking; - - // Video resource handler custom interface - MMmfVideoResourceHandler* iVideoResourceHandlerCI; - }; - - - -#endif // CTRVIDEODECODERCLIENT_H diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrvideoencoderclient.h --- a/videoeditorengine/vedtranscoder/inc/ctrvideoencoderclient.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,471 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video decoder client. -* -*/ - - - -#ifndef CTRVIDEOENCODERCLIENT_H -#define CTRVIDEOENCODERCLIENT_H - - -// INCLUDES -#include -#include // Common data types -#include // CmmfBuffer -#include // TRequestStatus -#include - -// When the flag SPP_BUFFER_MGMT_CI_HEADER_SYMBIAN is NOT defined, -// Buffer management interface is specified in Symbian header -#ifndef SPP_BUFFER_MGMT_CI_HEADER_SYMBIAN -#include -#else -#include -#include "buffermanagementci.h" -#endif - -#include "ctrcommon.h" -#include "ctrsettings.h" - -#ifndef SPP_BUFFER_MGMT_CI_HEADER_SYMBIAN -/** Buffer Management Custom Interface UID */ -const TUid KMmfVideoBuffermanagementUid = { 0x10204bea }; -#endif - -// FORWARD DECLARATIONS -class MTRDevVideoClientObserver; - - -// CONSTANTS - - -/** -* Video encoder client -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -class TUidAndRate - { - public: - // Encoder Uid - TUid iUid; - - // Max supported framerate - TReal iMaxRate; - }; - -/** -* Video encoder client -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -NONSHARABLE_CLASS(CTRVideoEncoderClient) : public CBase, public MMMFDevVideoRecordObserver, public MMmfVideoBufferManagementObserver, - public MMmfVideoResourceObserver - { - public: // Constuctor / destructor - - /** - * Two-phased constructor. - */ - static CTRVideoEncoderClient* NewL(MTRDevVideoClientObserver& aObserver); - - /** - * Destructor. - */ - ~CTRVideoEncoderClient(); - - // Information methods - /** - * Check codec's support by MIME type - * @param aFormat Codec MIME type - * @param aShortFormat Codec MIME type (short version) - * @param aUid Uid of the codec to check - * @param aFallbackUid Fallback Uid incase the first codec is not found - * @return TBool: ETrue - supports, EFalse - Does not support - */ - TBool SupportsCodec(const TDesC8& aFormat, const TDesC8& aShortFormat, TInt aUid, TInt aFallbackUid); - - /** - * Sets codec parameters - * @param aCodecType Codec type - * @param aCodecLevel Codec level - * @param aInputFormat Input video format - * @param aOutputFormat Output video format - * @return none - */ - void SetCodecParametersL(TInt aCodecType, TInt aCodecLevel, const TTRVideoFormat& aInputFormat, - const TTRVideoFormat& aOutputFormat); - - /** - * Sets real-time operation - * @param aRealTime Real-time operatiopn - * @return none - */ - void SetRealTime(TBool aRealTime); - - /** - * From MMMFDevVideoRecordObserver. Returns a used input video picture back to the caller. - * The picture memory can be re-used or freed - * @param aPicture Video Picture - * @return none - */ - void MdvroReturnPicture(TVideoPicture* aPicture); - - /** - * From MMMFDevVideoRecordObserver. Signals that the supplemental info send request has completed - * @param none - * @return none - */ - void MdvroSupplementalInfoSent(); - - /** - * From MMMFDevVideoRecordObserver. Notifies the client that one or more new output buffers are available - * @param none - * @return none - */ - void MdvroNewBuffers(); - - /** - * From MMMFDevVideoRecordObserver. Reports a fatal encoding or capturing error - * @param aError Run-time error - * @return none - */ - void MdvroFatalError(TInt aError); - - /** - * From MMMFDevVideoRecordObserver. Reports that DevVideoRecord initialization has completed - * @param aError Init error - * @return none - */ - void MdvroInitializeComplete(TInt aError); - - /** - * From MMMFDevVideoRecordObserver. Reports that the input video data end has been reached and all pictures - * have been processed - * @param none - * @return none - */ - void MdvroStreamEnd(); - - /** - * Encode picture - * @param aPicture Video picture to encode - * @return none - */ - void EncodePictureL(TVideoPicture* aPicture); - - /** - * Starts encoding - * @param none - * @return none - */ - void StartL(); - - /** - * Stops encoding synchronously - * @param none - * @return none - */ - void StopL(); - - /** - * Stops encoding asynchronously - * @param none - * @return none - */ - void AsyncStopL(); - - /** - * Sets target bitrate - * @param aBitRate bitrate - * @return none - */ - void SetBitRate(TUint aBitRate); - - /** - * Sets target frame rate - * @param aFrameRate Target frame rate - * @return none - */ - void SetFrameRate(TReal& aFrameRate); - - /** - * Sets Channel bit-error rate - * @param aErrorRate error rate - * @return none - */ - void SetChannelBitErrorRate(TReal aErrorRate); - - /** - * Sets Video coding options - * @param aOptions Coding options - * @return none - */ - void SetVideoCodingOptionsL(TTRVideoCodingOptions& aOptions); - - /** - * Gets current video bitrate - * @param none - * @return Video bitrate - */ - TUint GetVideoBitRateL(); - - /** - * Gets Current frame rate - * @param none - * @return Frame rate - */ - TReal GetFrameRateL(); - - /** - * Sets Input / source frame rate - * @param aFrameRate Input / Source frame rate - * @return none - */ - void SetInputFrameRate(TReal aFrameRate); - - /** - * Initialize encoder - * @param none - * @return none - */ - void InitializeL(); - - /** - * Select encoder - * @param none - * @return none - */ - void SelectEncoderL(); - - /** - * Get Coding standard / specific output (VOL / VOS / VO Header) - * @param none - * @return Coding standard / specific output (VOL / VOS / VO Header) - */ - HBufC8* GetCodingStandardSpecificInitOutputLC(); - - /** - * Select encoder - * @param none - * @return none - */ - void UseDataTransferOptimizationL(); - - /** - * Informs about new buffers available in DevVideoPlay queue - * @param none - * @return none - */ - void MmvbmoNewBuffers(); - - /** - * Release buffers request - * @param none - * @return none - */ - void MmvbmoReleaseBuffers(); - - /** - * Gets target video picture buffer - * @param none - * @return Video picture - */ - TVideoPicture* GetTargetVideoPictureL(); - - /** - * Sets Random access point - * @param none - * @return none - */ - void SetRandomAccessPoint(); - - /** - * Returns a time estimate on long it takes to encode one frame with the current settings - * @param aOutput Output video format - * @param aCodecType EH263 or EMpeg4 - * @return TReal time estimate in seconds - */ - TReal EstimateEncodeFrameTimeL(const TTRVideoFormat& aOutput, TInt aCodecType); - - /** - * Pauses encoding - * @param none - * @return none - */ - void Pause(); - - /** - * Resumes encoding - * @param none - * @return none - */ - void Resume(); - - /** - * Enable / Disable resource observer - * @param aEnable ETrue: Observer is enabled, EFalse observer is disabled - * @return none - */ - void EnableResourceObserver(TBool aEnable); - - /** - * From MMmfVideoResourceObserver. Indicates that a media device has lost its resources - * @param aMediaDevice UID for the media device that lost resources - * @return none - */ - void MmvroResourcesLost(TUid aMediaDevice); - - /** - * From MMmfVideoResourceObserver. Indicates that a media device has regained its resources - * @param aMediaDevice UID for the media device that regained resources - * @return none - */ - void MmvroResourcesRestored(TUid aMediaDevice); - - private: - /** - * C++ default constructor. - */ - CTRVideoEncoderClient(MTRDevVideoClientObserver& aObserver); - - /** - * Symbian 2nd phase constructor, can leave - */ - void ConstructL(); - - /** - * Checks codec info - * @param aUid Decoder Uid - * @return TBool ETrue - accelerated codec; EFalse - non-accelerated codec - */ - TBool CheckCodecInfoL(TUid aUid); - - private: - // Observer - MTRDevVideoClientObserver& iObserver; - - // DevVideoRecord - CMMFDevVideoRecord* iDevVideoRecord; - - // Encoder mime type - TBuf8<256> iMimeType; - - // Short version mime type - TBuf8<256> iShortMimeType; - - // Uid of the selected codec - TUid iUid; - - // Fallback codec to use if the first codec doesn't work - TUid iFallbackUid; - - // Max frame rate - TReal iMaxFrameRate; - - // Uncompressed format - TUncompressedVideoFormat iUncompressedFormat; - - // Compressed format - CCompressedVideoFormat* iCompresedFormat; - - // Picture size - TSize iPictureSize; - - // Rate control options - TRateControlOptions iRateControlOptions; - - // Coding options - TTRVideoCodingOptions iCodingOptions; - - // HwDevice Uid - THwDeviceId iHwDeviceId; - - // MPEG4 VOL header - TBufC8<256> iVolHeader; - - // Output buffer type - TInt iBufferType; - - // Output media buffer - CCMRMediaBuffer* iOutputMediaBuffer; - - // Request status - TRequestStatus* iStat; - - // Real-time processing - TBool iRealTime; - - // State - TInt iState; - - // Src frame rate - TReal iSrcRate; - - // Output data type - TInt iOutputDataType; - - // Codec level - TInt iCodecLevel; - - // Codec type - TInt iCodecType; - - // Error rate - TReal iErrorRate; - - // Fatal error code - TInt iFatalError; - - // Vol data sending status - TBool iVolHeaderSent; - - // Vol header status - TBool iRemoveHeader; - - // Vol header length - TUint iVolLength; - - // Rate control options - TRateControlOptions iRateOptions; - - // Rate setting - TBool iBitRateSetting; - - // Buffer Management CI - MMmfVideoBufferManagement* iVideoBufferManagementCI; - - // Last ts - TTimeIntervalMicroSeconds iLastTimestamp; - - // If selected encoder is accelerated or not - TBool iAcceleratedCodecSelected; - - // ETrue if random access point was requested - TBool iSetRandomAccessPoint; - - // Number of H.264 SPS/PPS NAL units from encoder - TInt iNumH264SPSPPS; - - // Video resource handler custom interface - MMmfVideoResourceHandler* iVideoResourceHandlerCI; - }; - - - -#endif // CTRVIDEOENCODERCLIENT_H diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/inc/ctrvideopicturesink.h --- a/videoeditorengine/vedtranscoder/inc/ctrvideopicturesink.h Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Transcoder observer. -* -*/ - - -#ifndef CTRVIDEOPICTURESINK_H -#define CTRVIDEOPICTURESINK_H - - -// INCLUDES -#include "ctrcommon.h" - - -/** -* Transcoder observer interface class. Every client should implement this class. -* @lib TRANSCODER.LIB -* @since 3.1 -*/ -class MTRVideoPictureSink - { - public: - /** - * Sends videopicture to the client (if retrieve intermediate content was called) / returns encoded picture back - * @param TTRVideoPicture Uncompressed videopicture - * @return void - */ - virtual void MtroPictureFromTranscoder(TTRVideoPicture* aPicture) = 0; - }; - - -#endif // CTRVIDEOPICTURESINK_H diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/src/Ctrscaler.cpp --- a/videoeditorengine/vedtranscoder/src/Ctrscaler.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,791 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Resampling framework for YUV 4.2.0. -* -*/ - - - -// INCLUDES -#include "ctrscaler.h" -#include "ctrsettings.h" -#include "ctrhwsettings.h" -#include - - -// Debug print macro -#ifdef _DEBUG - #include - #define PRINT(x) RDebug::Print x; -#else - #define PRINT(x) -#endif - - -// An assertion macro wrapper to clean up the code a bit -#define VPASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CTRScaler"), KErrAbort)) - - -// Macros for fixed point math -#define FP_BITS 15 // Number of bits to use for FP decimals -#define FP_FP(x) (static_cast((x) * 32768.0)) -#define FP_ONE (1 << FP_BITS) -#define FP_MUL(x,y) (((x) * (y)) >> FP_BITS) -#define FP_FRAC(x) ((x) & (FP_ONE - 1)) -#define FP_INT(x) ((x) >> FP_BITS) - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CTRScaler::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CTRScaler* CTRScaler::NewL() - { - // Standard two phase construction - CTRScaler* self = new (ELeave) CTRScaler(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - - return self; - } - - -// ----------------------------------------------------------------------------- -// CTRScaler::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CTRScaler::ConstructL() - { - } - - -// ----------------------------------------------------------------------------- -// CTRScaler::CTRScaler -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -CTRScaler::CTRScaler() - { - // Scaler does not perform any operation before initializing - iOperation = EOperationNone; - iTrgBuffer = NULL; - } - - -// --------------------------------------------------------- -// CTRScaler::~CTRScaler() -// Destructor -// --------------------------------------------------------- -// -CTRScaler::~CTRScaler() - { - } - -// --------------------------------------------------------- -// CTRScaler::IsWideAspectRatio() -// Checks if aspect ratio is wide -// --------------------------------------------------------- -// -TBool CTRScaler::IsWideAspectRatio(TSize aSize) - { - return ( TReal(aSize.iWidth) / TReal(aSize.iHeight) ) > KTRWideThreshold; - } - -// ----------------------------------------------------------------------------- -// CTRScaler::SetupScalerL -// Sets the scaler options (src buffer, dest buffer (could be the same as a src), src resolution, trg resolution) -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRScaler::SetScalerOptionsL(TPtr8& aSrc, TPtr8& aTrg, TSize& aSrcSize, TSize& aTrgSize ) - { - - - PRINT((_L("CTRScaler::SetScalerOptionsL, src = (%d, %d), trg = (%d, %d)"), - aSrcSize.iWidth, aSrcSize.iHeight, aTrgSize.iWidth, aTrgSize.iHeight)); - - // Check settings - if ( ( !aSrc.Ptr() ) || ( !aTrg.Ptr() ) || - ( aSrcSize.iWidth == 0) || ( aSrcSize.iHeight == 0 ) || - ( aTrgSize.iWidth == 0) || ( aTrgSize.iHeight == 0 ) || - ( aSrc.MaxLength() < ( aSrcSize.iWidth * aSrcSize.iHeight * 3 / 2 ) ) || - ( aTrg.MaxLength() < ( aTrgSize.iWidth * aTrgSize.iHeight * 3 / 2 ) ) - ) - { - PRINT((_L("CTRScaler::SetupScalerL(), Given options are not supported"))) - User::Leave(KErrNotSupported); - } - else - { - TReal remainder = 0.0; - iTrgBuffer = NULL; - - // We don't support non-multiple output yet - Math::Mod( remainder, static_cast(aTrgSize.iWidth), 4.0 ); - - if ( remainder == 0.0 ) - { - Math::Mod( remainder, static_cast(aTrgSize.iHeight), 4.0 ); - } - - if ( remainder != 0.0 ) - { - PRINT((_L("CTRScaler::SetupScalerL(), Scaler does not support output resolution that is not multiple by 4"))) - User::Leave(KErrNotSupported); - } - - TSize targetSize = aTrgSize; - // check if black boxing is needed - TBool srcWide = IsWideAspectRatio(aSrcSize); - TBool dstWide = IsWideAspectRatio(aTrgSize); - - iBlackBoxing = TSize(0,0); - - TBool doScaling = ETrue; - if (srcWide != dstWide) - { - TSize resolution(0,0); - - doScaling = GetIntermediateResolution(aSrcSize, aTrgSize, resolution, iBlackBoxing); - - // Set the whole image to black - TUint yLength = aTrgSize.iWidth * aTrgSize.iHeight; - TUint uvLength = yLength >> 1; - - // Y - TInt data = 0; - TPtr8 tempPtr(0,0); - tempPtr.Set(const_cast(aTrg.Ptr()), yLength, yLength); - tempPtr.Fill((TChar)data, yLength); - - // U,V - data = 127; - tempPtr.Set(const_cast(aTrg.Ptr()) + yLength, uvLength, uvLength); - tempPtr.Fill((TChar)data, uvLength); - - aTrgSize = resolution; - PRINT((_L("CTRScaler::SetScalerOptionsL, blackboxing width = %d, height = %d"), iBlackBoxing.iWidth, iBlackBoxing.iHeight)); - } - - if ( !doScaling ) - { - // No need to perform resampling operation, copy data with black boxing - iOperation = EOperationCopyWithBB; - } - - else if ( (aTrgSize.iWidth == aSrcSize.iWidth) && (aTrgSize.iHeight == aSrcSize.iHeight) ) - { - // No need to perform resampling operation, just copy data - iOperation = EOperationCopy; - } - else if ( (aTrgSize.iWidth == aSrcSize.iWidth * 2) && (aTrgSize.iHeight == aSrcSize.iHeight * 2) ) - { - // Resolution is doubled - iOperation = EDoubleSize; - } - else if ( (aTrgSize.iWidth * 2 == aSrcSize.iWidth) && (aTrgSize.iHeight * 2 == aSrcSize.iHeight) ) - { - // Resolution is halved - iOperation = EHalveSize; - } - else if ( (aTrgSize.iWidth > aSrcSize.iWidth) && (aTrgSize.iHeight > aSrcSize.iHeight) ) - { - // Resolution is increased - iOperation = EUpSampling; - } - else if ( (aTrgSize.iWidth < aSrcSize.iWidth) && (aTrgSize.iHeight < aSrcSize.iHeight) ) - { - // Resolution is decreased - iOperation = EDownSampling; - } - else - { - // The image is streched ie. vertical resolution increases and horizontal decreases or vice versa - iOperation = EUpDownSampling; - } - - // Set given settings - iSrc = const_cast( aSrc.Ptr() ); - iTrg = const_cast( aTrg.Ptr() ); - iSrcSize = aSrcSize; - iTrgSize = aTrgSize; - iSrcInit = iSrc; - iTrgInit = iTrg; - aTrgSize = targetSize; // recover target size since it's a reference - iTrgDataSize = aTrgSize.iWidth * aTrgSize.iHeight * 3 / 2; - iTrgBuffer = &aTrg; - } - } - -// --------------------------------------------------------- -// CTRScaler::GetIntermediateResolution() -// Calculates intermediate resolution for use with black boxing -// --------------------------------------------------------- -// -TBool CTRScaler::GetIntermediateResolution(TSize aSrcSize, TSize aTrgSize, - TSize& aTargetResolution, TSize& aBlackBoxing) - { - - TSize resolution; - TBool doScaling = ETrue; - - TBool srcWide = IsWideAspectRatio(aSrcSize); - TBool dstWide = IsWideAspectRatio(aTrgSize); - - VPASSERT(srcWide != dstWide); - - if (dstWide) - { - // Pillarboxing - - // scale height to destination - TReal factor = TReal(aTrgSize.iHeight) / TReal(aSrcSize.iHeight); - - resolution.iWidth = TInt( aSrcSize.iWidth * factor ); - - if (resolution.iWidth & 0x1 > 0) - resolution.iWidth++; - - resolution.iHeight = aTrgSize.iHeight; - - while ( (aTrgSize.iWidth - resolution.iWidth) % 4 != 0 ) - { - resolution.iWidth += 2; - } - - aBlackBoxing.iWidth = (aTrgSize.iWidth - resolution.iWidth) / 2; - - if ( factor == 1.0 ) - { - // source and destination heights are the same, - // meaning source width is smaller and we don't - // have to scale, just do pillarboxing - doScaling = EFalse; - - // set target width - resolution.iWidth = aTrgSize.iWidth; - } - - } - else - { - // Letterboxing - - // scale width to destination - TReal factor = TReal(aTrgSize.iWidth) / TReal(aSrcSize.iWidth); - - resolution.iHeight = TInt( aSrcSize.iHeight * factor ); - - if (resolution.iHeight & 0x1 > 0) - resolution.iHeight++; - - resolution.iWidth = aTrgSize.iWidth; - - while ( (aTrgSize.iHeight - resolution.iHeight) % 4 != 0 ) - { - resolution.iHeight += 2; - } - - aBlackBoxing.iHeight = (aTrgSize.iHeight - resolution.iHeight) / 2; - - if ( factor == 1.0 ) - { - // source and destination widths are the same, - // meaning source height is smaller and we don't - // have to scale, just do letterboxing - doScaling = EFalse; - - // set target height - resolution.iHeight = aTrgSize.iHeight; - } - } - - PRINT((_L("CTRScaler::GetIntermediateResolution, resolution = (%d, %d), bb = (%d, %d)"), - resolution.iWidth, resolution.iHeight, aBlackBoxing.iWidth, aBlackBoxing.iHeight)); - - aTargetResolution = resolution; - - return doScaling; - - -} - - -// ----------------------------------------------------------------------------- -// CTRScaler::Scale() -// Scale the image -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRScaler::Scale() - { - TSize srcSizeUV = TSize( iSrcSize.iWidth / 2, iSrcSize.iHeight / 2 ); - TSize trgSizeUV = TSize( iTrgSize.iWidth / 2, iTrgSize.iHeight / 2 ); - TSize blackBoxingUV = TSize( iBlackBoxing.iWidth / 2, iBlackBoxing.iHeight / 2 ); - - switch( iOperation ) - { - case EOperationCopy: - { - // Src / Trg resolutions are the same, no needs to perform resampling - if ( iSrc != iTrg ) - { - // Copy data, if different memory areas are specified - Mem::Copy( iTrg, iSrc, iTrgDataSize ); - } - else - { - // The same memory fragment is specified for the output; Keep it without changes; - } - } - break; - - case EOperationCopyWithBB: - { - // Copy with black boxing - CopyWithBlackBoxing(iSrcSize, iTrgSize, iBlackBoxing); - CopyWithBlackBoxing(srcSizeUV, trgSizeUV, blackBoxingUV); - CopyWithBlackBoxing(srcSizeUV, trgSizeUV, blackBoxingUV); - } - break; - - case EDownSampling: - { - TInt error = KErrNoMemory; - - // If scaling to less than 50% of the source size - if ( (iTrgSize.iWidth * 2 < iSrcSize.iWidth) && (iTrgSize.iHeight * 2 < iSrcSize.iHeight) ) - { - // Try to do the scaling in two steps - TRAP( error, DoHalveAndBilinearResampleL() ); - } - - // If the above failed or scaling to 51% or higher - if ( error != KErrNone ) - { - // Resample the Y, U & V components - ResampleBilinear(iSrcSize, iTrgSize, iBlackBoxing); - ResampleBilinear(srcSizeUV, trgSizeUV, blackBoxingUV); - ResampleBilinear(srcSizeUV, trgSizeUV, blackBoxingUV); - } - } - break; - - case EUpSampling: - case EUpDownSampling: - { - // Resample the Y, U & V components - ResampleBilinear(iSrcSize, iTrgSize, iBlackBoxing); - ResampleBilinear(srcSizeUV, trgSizeUV, blackBoxingUV); - ResampleBilinear(srcSizeUV, trgSizeUV, blackBoxingUV); - } - break; - - case EDoubleSize: - { - // Resample the Y, U & V components to double size - ResampleDouble(iSrcSize, iTrgSize); - ResampleDouble(srcSizeUV, trgSizeUV); - ResampleDouble(srcSizeUV, trgSizeUV); - } - break; - - case EHalveSize: - { - // Resample the Y, U & V components to half size - ResampleHalve(iSrcSize, iTrgSize, iBlackBoxing); - ResampleHalve(srcSizeUV, trgSizeUV, blackBoxingUV); - ResampleHalve(srcSizeUV, trgSizeUV, blackBoxingUV); - } - break; - - case EOperationNone: - { - PRINT((_L("CTRScaler::Scale(), Scaler was not initialized yet to perform any operation"))) - return; - } -// break; - - default: - { - } - } - - // Recover source and target data pointers - iSrc = iSrcInit; - iTrg = iTrgInit; - - // Set Dsc length - if (iTrgBuffer) - { - iTrgBuffer->SetLength(iTrgDataSize); - } - } - -// ----------------------------------------------------------------------------- -// CTRScaler::CopyWithBlackBoxing() -// Copies frame to target buffer applying black borders -// ----------------------------------------------------------------------------- -// -void CTRScaler::CopyWithBlackBoxing(TSize& aSrcSize, TSize& aTrgSize, TSize& aBlackBoxing) -{ - - if (aBlackBoxing.iHeight != 0) - { - - TInt copyLength = aSrcSize.iWidth * aSrcSize.iHeight; - - iTrg += aBlackBoxing.iHeight * aTrgSize.iWidth; - Mem::Copy(iTrg, iSrc, copyLength); - - iTrg += copyLength; - iTrg += aBlackBoxing.iHeight * aTrgSize.iWidth; - iSrc += copyLength; - - } - - else if (aBlackBoxing.iWidth != 0) - { - - TInt i; - iTrg += aBlackBoxing.iWidth; - - for (i = 0; i < iTrgSize.iHeight; i++) - { - // copy one row - Mem::Copy(iTrg, iSrc, aSrcSize.iWidth); - iSrc += aSrcSize.iWidth; - iTrg += aSrcSize.iWidth; - iTrg += aBlackBoxing.iWidth * 2; - } - - // subtract the width of one pillar - iTrg -= aBlackBoxing.iWidth; - - } -} - - -// ----------------------------------------------------------------------------- -// CTRScaler::DoHalveAndBilinearResampleL() -// First resamples an image to half size and then uses bilinear resample to -// scale it to requested size. -// ----------------------------------------------------------------------------- -// -void CTRScaler::DoHalveAndBilinearResampleL() - { - // Make sure the scale factor is correct - VPASSERT( (iTrgSize.iWidth * 2 < iSrcSize.iWidth) && - (iTrgSize.iHeight * 2 < iSrcSize.iHeight) ); - - TSize srcSizeUV = TSize( iSrcSize.iWidth / 2, iSrcSize.iHeight / 2 ); - TSize trgSizeUV = TSize( iTrgSize.iWidth / 2, iTrgSize.iHeight / 2 ); - TSize blackBoxingUV = TSize( iBlackBoxing.iWidth / 2, iBlackBoxing.iHeight / 2 ); - - // Calculate the size for the temporary image where we store the intermediate result - TSize tempSize = TSize( iSrcSize.iWidth / 2, iSrcSize.iHeight / 2 ); - TSize tempSizeUV = TSize( tempSize.iWidth / 2, tempSize.iHeight / 2 ); - - // Allocate memory for the temporary image - TUint8* tempBuffer = (TUint8*) User::AllocLC(tempSize.iWidth * tempSize.iHeight * 3 / 2); - - // Set the temporary image as the target - iTrg = tempBuffer; - - TSize zeroBlackBox = TSize(0,0); - // Resample the Y, U & V components to half size - ResampleHalve(iSrcSize, tempSize, zeroBlackBox); - ResampleHalve(srcSizeUV, tempSizeUV, zeroBlackBox); - ResampleHalve(srcSizeUV, tempSizeUV, zeroBlackBox); - - // Set the temporary image as the source and recover the original target - iSrc = tempBuffer; - iTrg = iTrgInit; - - // Resample the Y, U & V components - ResampleBilinear(tempSize, iTrgSize, iBlackBoxing); - ResampleBilinear(tempSizeUV, trgSizeUV, blackBoxingUV); - ResampleBilinear(tempSizeUV, trgSizeUV, blackBoxingUV); - - // Release the temporary buffer - CleanupStack::PopAndDestroy(tempBuffer); - } - -// ----------------------------------------------------------------------------- -// CTRScaler::ResampleBilinear() -// Resamples an image with bilinear filtering. The target pixel is generated by -// linearly interpolating the four nearest source pixels in x- and y-directions. -// ----------------------------------------------------------------------------- -// -void CTRScaler::ResampleBilinear(TSize& aSrcSize, TSize& aTrgSize, TSize& aBlackBoxing) - { - TInt i = 0, j = 0; - TInt x = 0, y = 0; - TInt fx = 0, fy = 0; - TInt weightFactor = 0; - - // Pointers to the source memory - TUint8* srcRowPosition = 0; - TUint8* srcPixelPosition = 0; - - // Calculate the scale factor using the max indices of the source and target images - TReal scaleX = TReal(aSrcSize.iWidth - 1) / TReal(aTrgSize.iWidth - 1); - TReal scaleY = TReal(aSrcSize.iHeight - 1) / TReal(aTrgSize.iHeight - 1); - - // Convert the scale factor to fixed point - iScaleXInt = FP_FP(scaleX) - 1; // subtract 1 so we don't go outside the source image - iScaleYInt = FP_FP(scaleY) - 1; - - if ( aBlackBoxing.iWidth != 0 ) - { - // increment target pointer over first 'pillar' - iTrg += aBlackBoxing.iWidth; - } - else if ( aBlackBoxing.iHeight != 0 ) - { - // increment target pointer over top letterboxed area - iTrg += aTrgSize.iWidth * aBlackBoxing.iHeight; - } - - // Loop target rows - for( i = 0, y = 0; i < aTrgSize.iHeight; i++ ) - { - // Calculate the row position of the source - srcRowPosition = iSrc + FP_INT(y) * aSrcSize.iWidth; - - fy = FP_FRAC(y); // Fractational part of the row position - - // Loop target columns - for( j = 0, x = 0; j < aTrgSize.iWidth; j++ ) - { - // Calculate the pixel position in the source - srcPixelPosition = srcRowPosition + FP_INT(x); - - // Calculate the weight factor for blending - fx = FP_FRAC(x); - weightFactor = FP_MUL(fx, fy); - - // Blend using the four nearest pixels - *(iTrg) = FP_INT( - *(srcPixelPosition) * (weightFactor + FP_ONE - fx - fy) + - *(srcPixelPosition + 1) * (fx - weightFactor) + - *(srcPixelPosition + aSrcSize.iWidth) * (fy - weightFactor) + - *(srcPixelPosition + 1 + aSrcSize.iWidth) * weightFactor ); - - iTrg++; // Move on to the next target pixel - x += iScaleXInt; // Calculate the column for the next source pixel - } - - y += iScaleYInt; // Calculate the row for the next source pixels - - if ( aBlackBoxing.iWidth != 0 ) - { - // increment target pointer over two pillars, one at the end of this row, - // other one at the beginning of the next row - iTrg += aBlackBoxing.iWidth * 2; - } - } - - // Update pointers - iSrc += aSrcSize.iWidth * aSrcSize.iHeight; - - if ( aBlackBoxing.iWidth != 0 ) - { - // subtract the width of one pillar - iTrg -= aBlackBoxing.iWidth; - } - else if ( aBlackBoxing.iHeight != 0 ) - { - // increment over bottom letterboxed area - iTrg += aBlackBoxing.iHeight * aTrgSize.iWidth; - } - - } - -// ----------------------------------------------------------------------------- -// CTRScaler::ResampleHalve() -// Resamples an image to half size. For each target pixel a 2x2 pixel area is -// read from the source and blended together to produce the target color. -// ----------------------------------------------------------------------------- -// -void CTRScaler::ResampleHalve(TSize& aSrcSize, TSize& aTrgSize, TSize& aBlackBoxing) - { - TInt i = 0, j = 0; - - // Make sure the scale factor is correct - VPASSERT( (aTrgSize.iWidth * 2 == aSrcSize.iWidth) && - (aTrgSize.iHeight * 2 == aSrcSize.iHeight) ); - - if ( aBlackBoxing.iHeight != 0 ) - { - // increment target pointer over top letterboxed area - iTrg += aTrgSize.iWidth * aBlackBoxing.iHeight; - } - - // Loop target rows - for( i = 0; i < aTrgSize.iHeight; i++ ) - { - // Loop target columns - for( j = 0; j < aTrgSize.iWidth; j++ ) - { - // Calculate the target pixel by blending the 4 nearest source pixels - *(iTrg) = ( - *(iSrc) + - *(iSrc + 1) + - *(iSrc + aSrcSize.iWidth) + - *(iSrc + 1 + aSrcSize.iWidth) - ) >> 2; // divide by 4 - - iTrg++; // Move on to the next target pixel - iSrc += 2; // Sample every second column from the source - } - - iSrc += aSrcSize.iWidth; // Sample every second row from the source - } - - if ( aBlackBoxing.iHeight != 0 ) - { - // increment over bottom letterboxed area - iTrg += aBlackBoxing.iHeight * aTrgSize.iWidth; - } - } - -// ----------------------------------------------------------------------------- -// CTRScaler::ResampleDouble() -// Resamples an image to double size. A 2x2 pixel area is generated using -// the four nearest pixels from the source and written to the target image. -// ----------------------------------------------------------------------------- -// -void CTRScaler::ResampleDouble(TSize& aSrcSize, TSize& aTrgSize) - { - TInt i = 0, j = 0; - - // Make sure the scale factor is correct - VPASSERT( (aTrgSize.iWidth == aSrcSize.iWidth * 2) && - (aTrgSize.iHeight == aSrcSize.iHeight * 2) ); - - // Generate 2x2 target pixels in each loop - - // Loop every second target row - for( i = 0; i < aTrgSize.iHeight - 2; i += 2 ) - { - // Loop every second target column - for( j = 0; j < aTrgSize.iWidth - 2; j += 2 ) - { - // Top-left pixel: Copy as it is - *(iTrg) = *(iSrc); - - // Top-right pixel: Blend the pixels on the left and right - *(iTrg + 1) = (*(iSrc) + *(iSrc + 1)) >> 1; - - // Bottom-left pixel: Blend the above and below pixels - *(iTrg + aTrgSize.iWidth) = (*(iSrc) + *(iSrc + aSrcSize.iWidth)) >> 1; - - // Bottom-right pixel: Blend the four nearest pixels - *(iTrg + 1 + aTrgSize.iWidth) = ( - *(iSrc) + - *(iSrc + 1) + - *(iSrc + aSrcSize.iWidth) + - *(iSrc + 1 + aSrcSize.iWidth) - ) >> 2; - - iTrg += 2; // Move on to the next 2x2 group of pixels - iSrc++; // Sample the next pixel from source - } - - // The last 2x2 pixels on this row need to be handled separately - - // Top-left and top-right pixels: Copy as it is - *(iTrg) = *(iTrg + 1) = *(iSrc); - - // Bottom-left and bottom-right pixels: Blend the above and below pixels - *(iTrg + aTrgSize.iWidth) = *(iTrg + 1 + aTrgSize.iWidth) = ( - *(iSrc) + - *(iSrc + aSrcSize.iWidth) - ) >> 1; - - iTrg += 2 + aTrgSize.iWidth; // Move on to the beginning of the next row - iSrc++; // Sample the next pixel from source - } - - // Handle the last row - for( j = 0; j < aTrgSize.iWidth - 2; j += 2 ) - { - // Top-left and bottom-left pixels: Copy as it is - *(iTrg) = *(iTrg + aTrgSize.iWidth) = *(iSrc); - - // Top-right and bottom-right pixels: Blend the pixels on the left and right - *(iTrg + 1) = *(iTrg + 1 + aTrgSize.iWidth) = ( - *(iSrc) + - *(iSrc + 1) - ) >> 1; - - iTrg += 2; // Move on to the next 2x2 group of pixels - iSrc++; // Sample the next pixel from source - } - - // Handle the last 2x2 group of pixels - - // Copy all four pixels - *(iTrg) = *(iTrg + 1) = *(iTrg + aTrgSize.iWidth) = *(iTrg + 1 + aTrgSize.iWidth) = *(iSrc); - - // Update pointers to the beginning of the next image - iTrg += 2 + aTrgSize.iWidth; - iSrc++; - } - -// ----------------------------------------------------------------------------- -// CTRScaler::EstimateResampleFrameTime -// Returns a time estimate of how long it takes to resample a frame -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TReal CTRScaler::EstimateResampleFrameTime(const TTRVideoFormat& aInput, const TTRVideoFormat& aOutput) - { - // Assume bilinear filtering is used by default - TReal time = KTRResampleTimeFactorBilinear; - - if ( (aOutput.iSize.iWidth == aInput.iSize.iWidth) && (aOutput.iSize.iHeight == aInput.iSize.iHeight) ) - { - // No need for resampling - return 0.0; - } - else if ( (aOutput.iSize.iWidth == aInput.iSize.iWidth * 2) && (aOutput.iSize.iHeight == aInput.iSize.iHeight * 2) ) - { - // Resolution is doubled - time = KTRResampleTimeFactorDouble; - } - else if ( (aOutput.iSize.iWidth * 2 == aInput.iSize.iWidth) && (aOutput.iSize.iHeight * 2 == aInput.iSize.iHeight) ) - { - // Resolution is halved - time = KTRResampleTimeFactorHalve; - } - - // Multiply the time by the resolution of the output frame - time *= static_cast(aOutput.iSize.iWidth + aOutput.iSize.iHeight) * KTRTimeFactorScale; - - PRINT((_L("CTRScaler::EstimateResampleFrameTime(), resample frame time: %.2f"), time)) - - return time; - } - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/src/Ctrtranscoder.cpp --- a/videoeditorengine/vedtranscoder/src/Ctrtranscoder.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Transcoder. -* -*/ - - - -// INCLUDE FILES -#include "ctrtranscoder.h" -#include "ctrtranscoderimp.h" - - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CTRTranscoder::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -EXPORT_C CTRTranscoder* CTRTranscoder::NewL(MTRTranscoderObserver& aObserver) - { - CTRTranscoderImp* self = CTRTranscoderImp::NewL(aObserver); - return self; - } - - -// --------------------------------------------------------- -// CTRTranscoder::~CTRTranscoder() -// Destructor -// --------------------------------------------------------- -// -CTRTranscoder::~CTRTranscoder() - { - } - - - -#ifndef EKA2 - -// ----------------------------------------------------------------------------- -// E32Dll DLL Entry point -// ----------------------------------------------------------------------------- -// -GLDEF_C TInt E32Dll(TDllReason /*aReason*/) - { - return(KErrNone); - } - -#endif - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/src/Ctrtranscoderimp.cpp --- a/videoeditorengine/vedtranscoder/src/Ctrtranscoderimp.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4118 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Transcoder Implementation. -* -*/ - - - -// INCLUDE FILES -#include -#include "ctrvideopicturesink.h" -#include "ctrtranscoderobserver.h" -#include "ctrtranscoderimp.h" -#include "ctrsettings.h" -#include "ctrhwsettings.h" -#include "ctrvideodecoderclient.h" -#include "ctrvideoencoderclient.h" -#include "ctrscaler.h" -#include "ctrprivatecrkeys.h" - - -// MACROS -#define TRASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CTRANSCODERIMP"), KErrAbort)) - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CTRTranscoderImp* CTRTranscoderImp::NewL(MTRTranscoderObserver& aObserver) - { - PRINT(_L("CTRTranscoderImp::NewL(), In")) - - CTRTranscoderImp* self = new (ELeave) CTRTranscoderImp(aObserver); - CleanupStack::PushL( reinterpret_cast(self) ); - self->ConstructL(); - CleanupStack::Pop(); - - PRINT(_L("CTRTranscoderImp::NewL(), Out")) - return self; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::CTRTranscoderImp -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CTRTranscoderImp::CTRTranscoderImp(MTRTranscoderObserver& aObserver) : - CActive(EPriorityStandard), - iObserver(aObserver) - { - CActiveScheduler::Add(this); - iVideoDecoderClient = NULL; - iVideoEncoderClient = NULL; - iRealTime = EFalse; - iMediaSink = NULL; - iScaler = NULL; - iPictureSink = NULL; - iPictureSinkTemp = NULL; - iState = ETRNone; - iEncoderInitStatus = KTRErrNotReady; /*Internal error status*/ - iDecoderInitStatus = KTRErrNotReady; - iEncoderStreamEnd = EFalse; - iDecoderStreamEnd = EFalse; - iDataArray = NULL; - iVideoPictureArray = NULL; - iDecodedPicture = NULL; - iBitRateSetting = EFalse; - iFatalError = KErrNone; - iOptimizedDataTransfer = EFalse; - iEncoderEnabled = ETrue; - iPictureSinkEnabled = EFalse; - iPictureSinkClientSetting = EFalse; - iSetRandomAccessPoint = EFalse; - iEncoderEnabledSettingChanged = EFalse; - iPictureSinkSettingChanged = EFalse; - iEncoderEnableClientSetting = ETrue; - iWaitPictureFromClient = NULL; - iWaitNewDecodedPicture = NULL; - iNewEvent = NULL; - iCurrentPictureSinkEnabled = EFalse; - iCurrentAsyncPictureSinkEnabled = EFalse; - iCurrentEncoderEnabled = ETrue; - iCurrentAsyncEncoderEnabled = ETrue; - iCurrentRandomAccess = EFalse; - iAsyncStop = EFalse; - iMaxFramesInProcessing = KTRMaxFramesInProcessingDefault; - - - // Set offset for queues - iTranscoderPictureQueue.SetOffset( static_cast( _FOFF( TVideoPicture, iLink ))); - iEncoderPictureQueue.SetOffset( static_cast( _FOFF( TVideoPicture, iLink ))); - iCIPictureBuffersQueue.SetOffset( static_cast( _FOFF( TVideoPicture, iLink ))); - iTranscoderTRPictureQueue.SetOffset( static_cast( _FOFF( TTRVideoPicture, iLink ))); - iContainerWaitQueue.SetOffset( static_cast( _FOFF( TVideoPicture, iLink ))); - iTranscoderEventSrc.SetOffset( static_cast( _FOFF( CTREventItem, iLink ))); - iTranscoderEventQueue.SetOffset( static_cast( _FOFF( CTREventItem, iLink ))); - iTranscoderAsyncEventQueue.SetOffset( static_cast( _FOFF( CTREventItem, iLink ))); - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::ConstructL() - { - PRINT((_L("CTRTranscoderImp::ConstructL(), In"))) - - // Allocate ivent quque - iEvents = NULL; - iEvents = new (ELeave) CTREventItem[KNumberOfEvents]; - - // Fill event's queue - for (TInt i = 0; i < KNumberOfEvents; i ++) - { - iEvents[i].Reset(); - iTranscoderEventSrc.AddLast( iEvents[i] ); - } - - LoadCodecUids(); - - PRINT((_L("CTRTranscoderImp::ConstructL(), Out"))) - } - - -// --------------------------------------------------------- -// CTRTranscoderImp::~CTRTranscoderImp() -// Destructor -// --------------------------------------------------------- -// -CTRTranscoderImp::~CTRTranscoderImp() - { - PRINT((_L("CTRTranscoderImp::~CTRTranscoderImp(), In"))) - TInt i = 0; - - - if ( iState == ETRRunning ) - { - TRAPD(status, this->StopL()); - PRINT((_L("CTRTranscoderImp::~CTRTranscoderImp(), StopL status[%d]"), status)) - - if (status != KErrNone) - { - // Nothing to do, since destruction of the app - } - } - - Cancel(); - - if (iVideoDecoderClient) - { - delete iVideoDecoderClient; - iVideoDecoderClient = NULL; - } - - if (iVideoEncoderClient) - { - delete iVideoEncoderClient; - iVideoEncoderClient = NULL; - } - - if (iScaler) - { - delete iScaler; - iScaler = NULL; - } - - if (iDataArray) - { - for (i = 0; i < KTRPictureBuffersNumber; i ++) - { - if ( iDataArray[i] ) - { - delete[] iDataArray[i]; - iDataArray[i] = NULL; - } - } - - delete[] iDataArray; - iDataArray = NULL; - } - - if ( (iMode == EEncoding) && (iInputPictureSize == iOutputPictureSize) ) - { - // Clean iRawData ptrs, since the actual memory was allocated by the client - if (iVideoPictureArray) - { - for (i = 0; i < KTRPictureBuffersNumber; i ++) - { - if (iVideoPictureArray[i].iData.iRawData) - { - iVideoPictureArray[i].iData.iRawData = NULL; - } - } - } - } - - if (iVideoPictureArray) - { - for (i = 0; i < KTRPictureBuffersNumber; i ++) - { - if (iVideoPictureArray[i].iData.iRawData) - { - delete iVideoPictureArray[i].iData.iRawData; - iVideoPictureArray[i].iData.iRawData = NULL; - } - } - - delete[] iVideoPictureArray; - iVideoPictureArray = NULL; - } - - if (iTRVideoPictureArray) - { - delete[] iTRVideoPictureArray; - iTRVideoPictureArray = NULL; - } - - if (iEvents) - { - delete[] iEvents; - } - - PRINT((_L("CTRTranscoderImp::~CTRTranscoderImp(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::SupportsInputVideoFormat -// Checks whether given input format is supported -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CTRTranscoderImp::SupportsInputVideoFormat(const TDesC8& aMimeType) - { - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat(), In"))) - TBool supports = EFalse; - - - if ( aMimeType == KNullDesC8 ) - { - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat(), Mime type is undefined"))) - return EFalse; - } - - // Check video decoder - if (!iVideoDecoderClient) - { - // Parse MIME - TRAPD(status, this->ParseMimeTypeL(aMimeType, ETrue)); - - if (status != KErrNone) - { - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat(), ParseMimeTypeL[%d]"), status)) - return EFalse; - } - - // Create the decoder client first - TRAP( status, iVideoDecoderClient = CTRVideoDecoderClient::NewL(*this) ); - - if (status != KErrNone) - { - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat(), VideoDecClient status[%d]"), status)) - iVideoDecoderClient = NULL; - return EFalse; - } - } - - // Choose the correct codec Uids to use - TInt preferredUid = 0; - TInt fallbackUid = 0; - TInt resolutionUid = 0; - - if (iInputCodec == EH263) - { - preferredUid = iH263DecoderUid; - fallbackUid = KTRFallbackDecoderUidH263; - - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat() H.263, preferred = 0x%x"), preferredUid)) - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat() H.263, fallback = 0x%x"), fallbackUid)) - - if (iInputPictureSize.iWidth <= iH263DecoderLowResThreshold) - { - resolutionUid = iH263DecoderLowResUid; - - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat() H.263, below, resolutions = 0x%x"), resolutionUid)) - } - } - else if (iInputCodec == EH264) - { - preferredUid = iH264DecoderUid; - fallbackUid = KTRFallbackDecoderUidH264; - - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat() AVC, preferred = 0x%x"), preferredUid)) - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat() AVC, fallback = 0x%x"), fallbackUid)) - - if (iInputPictureSize.iWidth <= iH264DecoderLowResThreshold) - { - resolutionUid = iH264DecoderLowResUid; - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat() AVC, below, resolutions = 0x%x"), resolutionUid)) - } - } - else - { - preferredUid = iMPEG4DecoderUid; - fallbackUid = KTRFallbackDecoderUidMPEG4; - - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat() MPEG-4, preferred = 0x%x"), preferredUid)) - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat() MPEG-4, fallback = 0x%x"), fallbackUid)) - - if (iInputPictureSize.iWidth <= iMPEG4DecoderLowResThreshold) - { - resolutionUid = iMPEG4DecoderLowResUid; - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat() MPEG-4, below, resolutions = 0x%x"), resolutionUid)) - } - } - - if (resolutionUid != 0) - { - preferredUid = resolutionUid; - } - - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat() preferred = 0x%x"), preferredUid)) - - supports = iVideoDecoderClient->SupportsCodec(iInputMimeType, iInputShortMimeType, preferredUid, fallbackUid); - - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat(), supports[%d] Out"), supports)) - return supports; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::SupportsOutputVideoFormat -// Checks whether given output format is supported -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CTRTranscoderImp::SupportsOutputVideoFormat(const TDesC8& aMimeType) - { - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat(), In"))) - TBool supports = EFalse; - - - if ( aMimeType == KNullDesC8 ) - { - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat(), Mime type is undefined"))) - return EFalse; - } - - // Check video encoder - if (!iVideoEncoderClient) - { - // Parse MIME - TRAPD(status, this->ParseMimeTypeL(aMimeType, EFalse)); - - if (status != KErrNone) - { - PRINT((_L("CTRTranscoderImp::SupportsInputVideoFormat(), ParseMimeTypeL[%d]"), status)) - return EFalse; - } - - // Create the encoder client first - TRAP(status, iVideoEncoderClient = CTRVideoEncoderClient::NewL(*this) ); - - if (status != KErrNone) - { - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat(), VideoEncClient status[%d]"), status)) - iVideoEncoderClient = NULL; - return EFalse; - } - } - - // Choose the correct codec Uids to use - TInt preferredUid = 0; - TInt fallbackUid = 0; - TInt resolutionUid = 0; - - if (iOutputCodec == EH263) - { - preferredUid = iH263EncoderUid; - fallbackUid = KTRFallbackEncoderUidH263; - - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat() H.263, preferred = 0x%x"), preferredUid)) - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat() H.263, fallback = 0x%x"), fallbackUid)) - - if (iOutputPictureSize.iWidth <= iH263EncoderLowResThreshold) - { - resolutionUid = iH263EncoderLowResUid; - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat() H.263, below, resolutions = 0x%x"), resolutionUid)) - } - } - else if (iOutputCodec == EH264) - { - preferredUid = iH264EncoderUid; - fallbackUid = KTRFallbackEncoderUidH264; - - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat() AVC, preferred = 0x%x"), preferredUid)) - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat() AVC, fallback = 0x%x"), fallbackUid)) - - if (iOutputPictureSize.iWidth <= iH264EncoderLowResThreshold) - { - resolutionUid = iH264EncoderLowResUid; - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat() AVC, below, resolutions = 0x%x"), resolutionUid)) - } - } - else - { - preferredUid = iMPEG4EncoderUid; - fallbackUid = KTRFallbackEncoderUidMPEG4; - - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat() MPEG-4, preferred = 0x%x"), preferredUid)) - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat() MPEG-4, fallback = 0x%x"), fallbackUid)) - - if (iOutputPictureSize.iWidth <= iMPEG4EncoderLowResThreshold) - { - resolutionUid = iMPEG4EncoderLowResUid; - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat() MPEG-4, below, resolutions = 0x%x"), resolutionUid)) - } - } - - if (resolutionUid != 0) - { - preferredUid = resolutionUid; - } - - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat() preferred = 0x%x"), preferredUid)) - - supports = iVideoEncoderClient->SupportsCodec(iOutputMimeType, iOutputShortMimeType, preferredUid, fallbackUid); - - PRINT((_L("CTRTranscoderImp::SupportsOutputVideoFormat(), supports[%d] Out"), supports)) - return supports; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::LoadCodecUids -// Loads codec Uids from central repository -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::LoadCodecUids() - { - PRINT((_L("CTRTranscoderImp::LoadCodecUids(), In"))) - - CRepository* repository = NULL; - - TRAPD(error, repository = CRepository::NewL(KCRUidTranscoder)); - - if (error != KErrNone) - { - PRINT((_L("CTRTranscoderImp::LoadCodecUids(), Error: %d, Out"), error)) - return; - } - - if (repository->Get(KTRH263DecoderUid, iH263DecoderUid) != KErrNone) - { - iH263DecoderUid = 0; - } - if (repository->Get(KTRH264DecoderUid, iH264DecoderUid) != KErrNone) - { - iH264DecoderUid = 0; - } - if (repository->Get(KTRMPEG4DecoderUid, iMPEG4DecoderUid) != KErrNone) - { - iMPEG4DecoderUid = 0; - } - - if (repository->Get(KTRH263EncoderUid, iH263EncoderUid) != KErrNone) - { - iH263EncoderUid = 0; - } - if (repository->Get(KTRH264EncoderUid, iH264EncoderUid) != KErrNone) - { - iH264EncoderUid = 0; - } - if (repository->Get(KTRMPEG4EncoderUid, iMPEG4EncoderUid) != KErrNone) - { - iMPEG4EncoderUid = 0; - } - - if (repository->Get(KTRH263DecoderLowResUid, iH263DecoderLowResUid) != KErrNone) - { - iH263DecoderLowResUid = 0; - } - if (repository->Get(KTRH264DecoderLowResUid, iH264DecoderLowResUid) != KErrNone) - { - iH264DecoderLowResUid = 0; - } - if (repository->Get(KTRMPEG4DecoderLowResUid, iMPEG4DecoderLowResUid) != KErrNone) - { - iMPEG4DecoderLowResUid = 0; - } - - if (repository->Get(KTRH263EncoderLowResUid, iH263EncoderLowResUid) != KErrNone) - { - iH263EncoderLowResUid = 0; - } - if (repository->Get(KTRH264EncoderLowResUid, iH264EncoderLowResUid) != KErrNone) - { - iH264EncoderLowResUid = 0; - } - if (repository->Get(KTRMPEG4EncoderLowResUid, iMPEG4EncoderLowResUid) != KErrNone) - { - iMPEG4EncoderLowResUid = 0; - } - - if (repository->Get(KTRH263DecoderLowResThreshold, iH263DecoderLowResThreshold) != KErrNone) - { - iH263DecoderLowResThreshold = 0; - } - if (repository->Get(KTRH264DecoderLowResThreshold, iH264DecoderLowResThreshold) != KErrNone) - { - iH264DecoderLowResThreshold = 0; - } - if (repository->Get(KTRMPEG4DecoderLowResThreshold, iMPEG4DecoderLowResThreshold) != KErrNone) - { - iMPEG4DecoderLowResThreshold = 0; - } - - if (repository->Get(KTRH263EncoderLowResThreshold, iH263EncoderLowResThreshold) != KErrNone) - { - iH263EncoderLowResThreshold = 0; - } - if (repository->Get(KTRH264EncoderLowResThreshold, iH264EncoderLowResThreshold) != KErrNone) - { - iH264EncoderLowResThreshold = 0; - } - if (repository->Get(KTRMPEG4EncoderLowResThreshold, iMPEG4EncoderLowResThreshold) != KErrNone) - { - iMPEG4EncoderLowResThreshold = 0; - } - - delete repository; - - PRINT((_L("CTRTranscoderImp::LoadCodecUids(), Out"))) - } - - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::OpenL -// Opens the transcoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::OpenL( MCMRMediaSink* aMediaSink, - CTRTranscoder::TTROperationalMode aMode, - const TDesC8& aInputMimeType, - const TDesC8& aOutputMimeType, - const TTRVideoFormat& aVideoInputFormat, - const TTRVideoFormat& aVideoOutputFormat, - TBool aRealTime ) - { - PRINT((_L("CTRTranscoderImp::OpenL(), In, OperationalMode[%d]"), aMode)) - TBool supports = EFalse; - - if (iState != ETRNone) - { - PRINT((_L("CTRTranscoderImp::OpenL(), Transcoder is in wrong state"))) - User::Leave(KErrNotReady); - } - - // Set picture size - - // If decoding then accept all resolutions that are divisible by 16 - if ( (aMode == EDecoding) && - ((aVideoInputFormat.iSize.iWidth & 0xf) == 0) && - ((aVideoInputFormat.iSize.iHeight & 0xf) == 0) && - ((aVideoOutputFormat.iSize.iWidth & 0xf) == 0) && - ((aVideoOutputFormat.iSize.iHeight & 0xf) == 0) ) - { - iOutputPictureSize = aVideoOutputFormat.iSize; - iInputPictureSize = aVideoInputFormat.iSize; - } - else if ( ( this->IsValid( const_cast(aVideoOutputFormat.iSize) ) ) && - ( this->IsValid( const_cast(aVideoInputFormat.iSize) ) ) ) - { - iOutputPictureSize = aVideoOutputFormat.iSize; - iInputPictureSize = aVideoInputFormat.iSize; - } - else - { - PRINT((_L("CTRTranscoderImp::OpenL(), picture size is not valid"))) - User::Leave(KErrNotSupported); - } - - // By default the decoded picture is the same size as the input picture - iDecodedPictureSize = iInputPictureSize; - - // Create Scaler - if (!iScaler) - { - PRINT((_L("CTRTranscoderImp::OpenL(), create scaler"))) - iScaler = CTRScaler::NewL(); - } - - - switch(aMode) - { - case EFullTranscoding: - { - if ( (aInputMimeType != KNullDesC8) && (aOutputMimeType != KNullDesC8) && (aMediaSink != NULL) ) - { - if ( (aVideoInputFormat.iDataType != CTRTranscoder::ETRDuCodedPicture) && - (aVideoInputFormat.iDataType != CTRTranscoder::ETRDuVideoSegment) || - (aVideoOutputFormat.iDataType != CTRTranscoder::ETRDuCodedPicture) && - (aVideoOutputFormat.iDataType != CTRTranscoder::ETRDuVideoSegment) ) - { - PRINT((_L("CTRTranscoderImp::OpenL(), data format is not supported in selected operational mode"))) - User::Leave(KErrNotSupported); - } - - // Parse mime type and check / define max parameters for requested codec profile-level. - this->ParseMimeTypeL(aInputMimeType, ETrue); - this->ParseMimeTypeL(aOutputMimeType, EFalse); - - if (!iVideoDecoderClient) - { - iVideoDecoderClient = CTRVideoDecoderClient::NewL(*this); - } - - // Check input format - supports = this->SupportsInputVideoFormat( iInputShortMimeType.Des() ); - - if (!supports) - { - PRINT((_L("CTRTranscoderImp::OpenL(), Input format is not supported by video decoder"))) - User::Leave(KErrNotSupported); - } - - if (!iVideoEncoderClient) - { - iVideoEncoderClient = CTRVideoEncoderClient::NewL(*this); - } - - // Check output format - supports = this->SupportsOutputVideoFormat( iOutputShortMimeType.Des() ); - - if (!supports) - { - PRINT((_L("CTRTranscoderImp::OpenL(), Output format is not supported by video encoder"))) - User::Leave(KErrNotSupported); - } - } - else - { - // Inform user about wrong argument - User::Leave(KErrArgument); - } - - // Set codec parameters - iVideoDecoderClient->SetCodecParametersL(iInputCodec, iInputCodecLevel, aVideoInputFormat, aVideoOutputFormat); - iVideoEncoderClient->SetCodecParametersL(iOutputCodec, iOutputCodecLevel, aVideoInputFormat, aVideoOutputFormat); - - TBool srcWide = iScaler->IsWideAspectRatio(iInputPictureSize); - TBool dstWide = iScaler->IsWideAspectRatio(iOutputPictureSize); - - if (srcWide != dstWide) - { - // get intermediate size from scaler - TSize resolution; - TSize bb = TSize(0,0); - - TBool scale = iScaler->GetIntermediateResolution(iInputPictureSize, iOutputPictureSize, - resolution, bb); - - if (scale && iVideoDecoderClient->SetDecoderScaling(iInputPictureSize, resolution)) - { - - PRINT((_L("CTRTranscoderImp::OpenL(), decoder scaling supported"))) - - //iDecodedPictureSize = iOutputPictureSize; - iDecodedPictureSize = resolution; - - // NOTE: What if decoder init. fails, this would have to be reseted! - // Increase the max number of frames in processing since scaling is used - iMaxFramesInProcessing = KTRMaxFramesInProcessingScaling; - } - } - - else if (iVideoDecoderClient->SetDecoderScaling(iInputPictureSize, iOutputPictureSize)) - { - // Scaling is supported - iDecodedPictureSize = iOutputPictureSize; - - // Increase the max number of frames in processing since scaling is used - iMaxFramesInProcessing = KTRMaxFramesInProcessingScaling; - } - - iVideoEncoderClient->SetRealTime(aRealTime); - - break; - } - - case EDecoding: - { - if ( aInputMimeType != KNullDesC8 ) - { - if ( (aVideoInputFormat.iDataType != CTRTranscoder::ETRDuCodedPicture) && - (aVideoInputFormat.iDataType != CTRTranscoder::ETRDuVideoSegment) || - (aVideoOutputFormat.iDataType != CTRTranscoder::ETRYuvRawData420) && - (aVideoOutputFormat.iDataType != CTRTranscoder::ETRYuvRawData422) ) - { - PRINT((_L("CTRTranscoderImp::OpenL(), data format is not supported in selected operational mode"))) - User::Leave(KErrNotSupported); - } - - // Check mime - this->ParseMimeTypeL(aInputMimeType, ETrue); - - if (!iVideoDecoderClient) - { - iVideoDecoderClient = CTRVideoDecoderClient::NewL(*this); - } - - // Check input format - supports = this->SupportsInputVideoFormat( iInputShortMimeType.Des() ); - - if (!supports) - { - PRINT((_L("CTRTranscoderImp::OpenL(), Input format is not supported by video decoder"))) - User::Leave(KErrNotSupported); - } - } - else - { - // Inform user about wrong argument - User::Leave(KErrArgument); - } - - // Set codec information - iVideoDecoderClient->SetCodecParametersL(iInputCodec, iInputCodecLevel, aVideoInputFormat, aVideoOutputFormat); - - // Check if decoder supports scaling - if (iVideoDecoderClient->SetDecoderScaling(iInputPictureSize, iOutputPictureSize)) - { - // Scaling is supported - iDecodedPictureSize = iOutputPictureSize; - } - - break; - } - - case EEncoding: - { - if ( aMediaSink && (aOutputMimeType != KNullDesC8) ) - { - if ( (aVideoInputFormat.iDataType != CTRTranscoder::ETRYuvRawData420) && - (aVideoInputFormat.iDataType != CTRTranscoder::ETRYuvRawData422) || - (aVideoOutputFormat.iDataType != CTRTranscoder::ETRDuCodedPicture) && - (aVideoOutputFormat.iDataType != CTRTranscoder::ETRDuVideoSegment) ) - { - PRINT((_L("CTRTranscoderImp::OpenL(), data format is not supported in selected operational mode"))) - User::Leave(KErrNotSupported); - } - - // Check mime - this->ParseMimeTypeL(aOutputMimeType, EFalse); - - if (!iVideoEncoderClient) - { - iVideoEncoderClient = CTRVideoEncoderClient::NewL(*this); - } - - // Check output format - supports = this->SupportsOutputVideoFormat( iOutputShortMimeType.Des() ); - - if (!supports) - { - PRINT((_L("CTRTranscoderImp::OpenL(), Output format is not supported by video encoder"))) - User::Leave(KErrNotSupported); - } - } - else - { - // Inform user about wrong argument - User::Leave(KErrArgument); - } - - // Set codec parameters - iVideoEncoderClient->SetCodecParametersL(iOutputCodec, iOutputCodecLevel, aVideoInputFormat, aVideoOutputFormat); - - break; - } - - case EResampling: - { - if ( (aVideoInputFormat.iDataType != CTRTranscoder::ETRYuvRawData420) || - (aVideoOutputFormat.iDataType != CTRTranscoder::ETRYuvRawData420) ) - { - PRINT((_L("CTRTranscoderImp::OpenL(), data format is not supported in selected operational mode"))) - User::Leave(KErrNotSupported); - } - - break; - } - - default: - { - // Given option is not supported - User::Leave(KErrNotSupported); - } - } - - iMode = aMode; - iRealTime = aRealTime; - iMediaSink = aMediaSink; - iState = ETROpened; - - if ( (iMode == EFullTranscoding) || (iMode == EEncoding) ) - { - // Get frame rate for initial input coded stream - TReal frameRate = 0.0; - iObserver.MtroSetInputFrameRate(frameRate); - - if (frameRate > 0.0) - { - iVideoEncoderClient->SetInputFrameRate(frameRate); - } - } - - PRINT((_L("CTRTranscoderImp::OpenL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::SetVideoBitRateL -// Sets video bitrate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::SetVideoBitRateL(TUint aBitRate) - { - PRINT((_L("CTRTranscoderImp::SetVideoBitRateL(), In"))) - - if ( (iState != ETROpened) && (iState != ETRInitialized) && (iState != ETRRunning) ) - { - PRINT((_L("CTRTranscoderImp::SetVideoBitRateL(), Transcoder is in wrong state"))) - User::Leave(KErrNotReady); - } - - if (iVideoEncoderClient) - { - iVideoEncoderClient->SetBitRate(aBitRate); - } - - iBitRateSetting = ETrue; - - PRINT((_L("CTRTranscoderImp::SetVideoBitRateL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::SetFrameRateL -// Sets frame rate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::SetFrameRateL(TReal aFrameRate) - { - PRINT((_L("CTRTranscoderImp::SetFrameRateL(), In"))) - - if ( (iState != ETROpened) && (iState != ETRInitialized) && (iState != ETRRunning) ) - { - PRINT((_L("CTRTranscoderImp::SetFrameRateL(), Transcoder is in wrong state"))) - User::Leave(KErrNotReady); - } - - if (iVideoEncoderClient) - { - iVideoEncoderClient->SetFrameRate(aFrameRate); - } - - PRINT((_L("CTRTranscoderImp::SetFrameRateL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::SetChannelBitErrorRateL -// Sets channel bit error rate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::SetChannelBitErrorRateL(TReal aErrorRate) - { - PRINT((_L("CTRTranscoderImp::SetChannelBitErrorRateL(), In"))) - - if ( (iState != ETROpened) && (iState != ETRInitialized) && (iState != ETRRunning) ) - { - PRINT((_L("CTRTranscoderImp::SetChannelBitErrorRateL(), Transcoder is in wrong state"))) - User::Leave(KErrNotReady); - } - - if (iVideoEncoderClient) - { - iVideoEncoderClient->SetChannelBitErrorRate(aErrorRate); - } - - PRINT((_L("CTRTranscoderImp::SetChannelBitErrorRateL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::SetVideoCodingOptionsL -// Sets video coding options -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::SetVideoCodingOptionsL(TTRVideoCodingOptions& aOptions) - { - if (iState != ETROpened) - { - PRINT((_L("CTRTranscoderImp::SetVideoCodingOptionsL(), Transcoder is in wrong state"))) - User::Leave(KErrNotReady); - } - - if (iVideoEncoderClient) - { - iVideoEncoderClient->SetVideoCodingOptionsL(aOptions); - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::SetVideoPictureSinkOptionsL -// Sets picture sing and options for intermediate format -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::SetVideoPictureSinkOptionsL(TSize& aSize, MTRVideoPictureSink* aSink) - { - if (iState == ETRNone) - { - PRINT((_L("CTRTranscoderImp::SetVideoPictureSinkOptionsL(), Transcoder is in wrong state"))) - User::Leave(KErrNotReady); - } - - if (aSink) - { - if ((iMode != EDecoding) && (!this->IsValid(aSize))) - { - PRINT((_L("CTRTranscoderImp::SetVideoPictureSinkOptionsL(), invalid size"))) - User::Leave(KErrNotSupported); - } - - switch(iMode) - { - case EFullTranscoding: - case EDecoding: - { - if ( aSize == iOutputPictureSize ) - { - iIntermediatePictureSize = aSize; - } - else - { - // In full transcoding mode (intermediate picture size = outputTarget size) is supported only - PRINT((_L("CTRTranscoderImp::SetVideoPictureSinkOptionsL(), Intermediate picture size is not supported"))) - User::Leave(KErrNotSupported); - } - } - break; - - case EEncoding: - { - if ( (aSize == iInputPictureSize) || (aSize == iOutputPictureSize) ) - { - iIntermediatePictureSize = aSize; - } - else - { - PRINT((_L("CTRTranscoderImp::SetVideoPictureSinkOptionsL(), invalid intermediate size"))) - User::Leave(KErrNotSupported); - } - } - break; - - case EResampling: - { - // No need to check size, since it's iOutputPictureSize; - iIntermediatePictureSize = iOutputPictureSize; - } - break; - - case EOperationNone: - { - // Operation is not set yet - User::Leave(KErrNotReady); - } - break; - - default: - { - // Operation is not set yet - User::Leave(KErrNotReady); - break; - } - } - - // Set picture sink - iPictureSink = aSink; - iPictureSinkTemp = aSink; - iPictureSinkEnabled = ETrue; - iPictureSinkClientSetting = ETrue; - iCurrentPictureSinkEnabled = ETrue; - iCurrentAsyncPictureSinkEnabled = ETrue; - } - else - { - User::Leave(KErrArgument); - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::UseDirectScreenAccessL -// Requests using of DSA -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::UseDirectScreenAccessL(TBool /*aUseDSA*/, CFbsScreenDevice& /*aScreenDevice*/, - TTRDisplayOptions& /*aOptions*/) - { - // Not supported yet - User::Leave(KErrNotSupported); - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::ParseMimeTypeL -// Parses given MIME type -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::ParseMimeTypeL(const TDesC8& aMimeType, TBool aInOutMime) - { - TUint maxBitRate = 0; - TInt codecType = 0; - TBuf8<256> shortMimeType; - TBuf8<256> newMimeType; - TInt width = 0; - TUint codecLevel = 0; - - - if (aMimeType == KNullDesC8) - { - User::Leave(KErrArgument); - } - - if ( aMimeType.MatchF( _L8("*video/H263-2000*") ) != KErrNotFound ) - { - // H.263 - codecType = EH263; - shortMimeType = _L8("video/H263-2000"); - newMimeType = shortMimeType; - - if ( aMimeType.MatchF( _L8("*profile*") ) != KErrNotFound ) - { - // Profile info is given, check it - if ( aMimeType.MatchF( _L8("*profile=0*") ) != KErrNotFound ) - { - // Check level info - newMimeType += _L8("; profile=0"); - } - else if ( aMimeType.MatchF( _L8("*profile=3*") ) != KErrNotFound ) - { - // Check level info - newMimeType += _L8("; profile=3"); - } - else - { - // We don't support any other profiles yet - PRINT((_L("CTRTranscoderImp::ParseMimeTypeL(), profile is not supported"))) - User::Leave(KErrNotSupported); - } - } - else - { - // Set defaults for profile=0; - newMimeType += _L8("; profile=0"); - } - - - // Check level info - if ( aMimeType.MatchF( _L8("*level=*") ) != KErrNotFound ) - { - if ( aMimeType.MatchF( _L8("*level=10*") ) != KErrNotFound ) - { - // Set level=10; - maxBitRate = KTRMaxBitRateH263Level10; - codecLevel = KTRH263CodecLevel10; - newMimeType += _L8("; level=10"); - } - else if ( aMimeType.MatchF( _L8("*level=20*") ) != KErrNotFound ) - { - // Set level=20; - maxBitRate = KTRMaxBitRateH263Level20; - codecLevel = KTRH263CodecLevel20; - newMimeType += _L8("; level=20"); - } - else if ( aMimeType.MatchF( _L8("*level=30*") ) != KErrNotFound ) - { - // Set level=30; - maxBitRate = KTRMaxBitRateH263Level30; - codecLevel = KTRH263CodecLevel30; - newMimeType += _L8("; level=30"); - } - else if ( aMimeType.MatchF( _L8("*level=40*") ) != KErrNotFound ) - { - // Set level=40; - maxBitRate = KTRMaxBitRateH263Level40; - codecLevel = KTRH263CodecLevel40; - newMimeType += _L8("; level=40"); - } - else if ( aMimeType.MatchF( _L8("*level=45*") ) != KErrNotFound ) - { - // Set level=45; - maxBitRate = KTRMaxBitRateH263Level45; - codecLevel = KTRH263CodecLevel45; - newMimeType += _L8("; level=45"); - } - else if ( aMimeType.MatchF( _L8("*level=50*") ) != KErrNotFound ) - { - // Set level=50; - maxBitRate = KTRMaxBitRateH263Level50; - codecLevel = KTRH263CodecLevel50; - newMimeType += _L8("; level=50"); - } - else if ( aMimeType.MatchF( _L8("*level=60*") ) != KErrNotFound ) - { - // Set level=60; - maxBitRate = KTRMaxBitRateH263Level60; - codecLevel = KTRH263CodecLevel60; - newMimeType += _L8("; level=60"); - } - else if ( aMimeType.MatchF( _L8("*level=70*") ) != KErrNotFound ) - { - // Set level=70; - maxBitRate = KTRMaxBitRateH263Level70; - codecLevel = KTRH263CodecLevel70; - newMimeType += _L8("; level=70"); - } - else - { - // We don't support any other levels - PRINT((_L("CTRTranscoderImp::ParseMimeTypeL(), level is not supported"))) - User::Leave(KErrNotSupported); - } - } - else - { - // Codec level is not specified, check requested picture size and set mime - if (aInOutMime) - { - width = iInputPictureSize.iWidth; - } - else - { - width = iOutputPictureSize.iWidth; - } - - switch( width ) - { - case KTRSubQCIFWidth: - case KTRQCIFWidth: - { - // Set defaults for level=10; - maxBitRate = KTRMaxBitRateH263Level10; - codecLevel = KTRH263CodecLevel10; - newMimeType += _L8("; level=10"); - break; - } - - case KTRCIFWidth: - { - // Set defaults for level=30; - maxBitRate = KTRMaxBitRateH263Level30; - codecLevel = KTRH263CodecLevel30; - newMimeType += _L8("; level=30"); - break; - } - - case KTRPALWidth: - { - // Set defaults for level=60; - maxBitRate = KTRMaxBitRateH263Level60; - codecLevel = KTRH263CodecLevel60; - newMimeType += _L8("; level=60"); - break; - } - - default: - { - // Set defaults for level=10; - maxBitRate = KTRMaxBitRateH263Level10; - codecLevel = KTRH263CodecLevel10; - newMimeType += _L8("; level=10"); - break; - } - } - } - } - else if ( (aMimeType.MatchF( _L8("*video/H264*") ) != KErrNotFound) ) - { - // H.264 (AVC) - codecType = EH264; - shortMimeType = _L8("video/H264"); - newMimeType = shortMimeType; - - // Check profile-level - if ( aMimeType.MatchF( _L8("*profile-level-id=*") ) != KErrNotFound ) - { - if ( aMimeType.MatchF( _L8("*profile-level-id=42800A*") ) != KErrNotFound ) - { - maxBitRate = KTRMaxBitRateH264Level10; - codecLevel = KTRH264CodecLevel10; - newMimeType += _L8("; profile-level-id=42800A"); // Level 1 - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42900B*") ) != KErrNotFound ) - { - maxBitRate = KTRMaxBitRateH264Level10b; - codecLevel = KTRH264CodecLevel10b; - newMimeType += _L8("; profile-level-id=42900B"); // Level 1b - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42800B*") ) != KErrNotFound ) - { - maxBitRate = KTRMaxBitRateH264Level11; - codecLevel = KTRH264CodecLevel11; - newMimeType += _L8("; profile-level-id=42800B"); // Level 1.1 - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42800C*") ) != KErrNotFound ) - { - maxBitRate = KTRMaxBitRateH264Level12; - codecLevel = KTRH264CodecLevel12; - newMimeType += _L8("; profile-level-id=42800C"); // Level 1.2 - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42800D*") ) != KErrNotFound ) - { - maxBitRate = KTRMaxBitRateH264Level13; - codecLevel = KTRH264CodecLevel13; - newMimeType += _L8("; profile-level-id=42800D"); // Level 1.3 - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=428014*") ) != KErrNotFound ) - { - maxBitRate = KTRMaxBitRateH264Level20; - codecLevel = KTRH264CodecLevel20; - newMimeType += _L8("; profile-level-id=428014"); // Level 2 - } - //WVGA task - else if ( aMimeType.MatchF( _L8("*profile-level-id=428015*") ) != KErrNotFound ) - { - maxBitRate = KTRMaxBitRateH264Level21; - codecLevel = KTRH264CodecLevel21; - newMimeType += _L8("; profile-level-id=428015"); // Level 2.1 - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=428016*") ) != KErrNotFound ) - { - maxBitRate = KTRMaxBitRateH264Level22; - codecLevel = KTRH264CodecLevel22; - newMimeType += _L8("; profile-level-id=428016"); // Level 2.2 - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42801E*") ) != KErrNotFound ) - { - maxBitRate = KTRMaxBitRateH264Level30; - codecLevel = KTRH264CodecLevel30; - newMimeType += _L8("; profile-level-id=42801E"); // Level 3 - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=42801F*") ) != KErrNotFound ) - { - maxBitRate = KTRMaxBitRateH264Level31; - codecLevel = KTRH264CodecLevel31; - newMimeType += _L8("; profile-level-id=42801F"); // Level 3.1 - } - else - { - // We don't support any other levels - PRINT((_L("CTRTranscoderImp::ParseMimeTypeL(), profile-level-id is not supported"))) - User::Leave(KErrNotSupported); - } - } - else - { - // profile-level-id is not specified, check requested picture size - if (aInOutMime) - { - width = iInputPictureSize.iWidth; - } - else - { - width = iOutputPictureSize.iWidth; - } - - switch( width ) - { - case KTRSubQCIFWidth: - case KTRQCIFWidth: - { - // Set level 1 - maxBitRate = KTRMaxBitRateH264Level10; - codecLevel = KTRH264CodecLevel10; - newMimeType += _L8("; profile-level-id=42800A"); - break; - } - - case KTRQVGAWidth: - case KTRCIFWidth: - { - // Set level 1.2 - maxBitRate = KTRMaxBitRateH264Level12; - codecLevel = KTRH264CodecLevel12; - newMimeType += _L8("; profile-level-id=42800C"); - break; - } - case KTRWVGAWidth: - { - // Set level 3.1 - maxBitRate = KTRMaxBitRateH264Level31; - codecLevel = KTRH264CodecLevel31; - newMimeType += _L8("; profile-level-id=42801F"); - break; - } - - default: - { - // Set level 1 - maxBitRate = KTRMaxBitRateH264Level10; - codecLevel = KTRH264CodecLevel10; - newMimeType += _L8("; profile-level-id=42800A"); - break; - } - } - } - } - else if ( (aMimeType.MatchF( _L8("*video/mp4v-es*") ) != KErrNotFound) || - (aMimeType.MatchF( _L8("*video/MP4V-ES*") ) != KErrNotFound) ) - { - // MPEG-4 Visual - codecType = EMpeg4; - shortMimeType = _L8("video/mp4v-es"); // Set short mime - newMimeType = shortMimeType; - - // Check profile-level - if ( aMimeType.MatchF( _L8("*profile-level-id=*") ) != KErrNotFound ) - { - if ( aMimeType.MatchF( _L8("*profile-level-id=8*") ) != KErrNotFound ) - { - // Set defaults for profile-level-id=8 - newMimeType += _L8("; profile-level-id=8"); - } - else if( aMimeType.MatchF( _L8("*profile-level-id=1*") ) != KErrNotFound ) - { - // Set profile-level-id=1 - maxBitRate = KTRMaxBitRateMPEG4Level1; - codecLevel = KTRMPEG4CodecLevel1; - newMimeType += _L8("; profile-level-id=1"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=2*") ) != KErrNotFound ) - { - // Set profile-level-id=2 - maxBitRate = KTRMaxBitRateMPEG4Level2; - codecLevel = KTRMPEG4CodecLevel2; - newMimeType += _L8("; profile-level-id=2"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=3*") ) != KErrNotFound ) - { - // Set profile-level-id=3 - maxBitRate = KTRMaxBitRateMPEG4Level3; - codecLevel = KTRMPEG4CodecLevel3; - newMimeType += _L8("; profile-level-id=3"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=9*") ) != KErrNotFound ) - { - // Set profile-level-id=9 - maxBitRate = KTRMaxBitRateMPEG4Level0b; - codecLevel = KTRMPEG4CodecLevel0b; - newMimeType += _L8("; profile-level-id=9"); - } - else if ( aMimeType.MatchF( _L8("*profile-level-id=4*") ) != KErrNotFound ) - { - // Set profile-level-id=4 - maxBitRate = KTRMaxBitRateMPEG4Level4a; - codecLevel = KTRMPEG4CodecLevel4a; - newMimeType += _L8("; profile-level-id=4"); - } - else - { - // We don't support any other levels - PRINT((_L("CTRTranscoderImp::ParseMimeTypeL(), profile-level-id is not supported"))) - User::Leave(KErrNotSupported); - } - } - else - { - // profile-level-id is not specified, check requested picture size - // Set defaults for profile-level-id=8 - if (aInOutMime) - { - width = iInputPictureSize.iWidth; - } - else - { - width = iOutputPictureSize.iWidth; - } - - switch( width ) - { - case KTRSubQCIFWidth: - case KTRQCIFWidth: - { - // Set profile-level-id=0 - codecLevel = KTRMPEG4CodecLevel0; - maxBitRate = KTRMaxBitRateMPEG4Level0; - newMimeType += _L8("; profile-level-id=8"); - break; - } - - case KTRQVGAWidth: - case KTRCIFWidth: - { - // Set profile-level-id=3 - maxBitRate = KTRMaxBitRateMPEG4Level3; - codecLevel = KTRMPEG4CodecLevel3; - newMimeType += _L8("; profile-level-id=3"); - break; - } - - case KTRVGAWidth: - { - // Set profile-level-id=4 (4a) - maxBitRate = KTRMaxBitRateMPEG4Level4a; - codecLevel = KTRMPEG4CodecLevel4a; - newMimeType += _L8("; profile-level-id=4"); - break; - } - - default: - { - // Set profile-level-id=0 - maxBitRate = KTRMaxBitRateMPEG4Level0; - codecLevel = KTRMPEG4CodecLevel0; - newMimeType += _L8("; profile-level-id=8"); - break; - } - } - } - } - else - { - PRINT((_L("CTRTranscoderImp::ParseMimeL(), there is curently no support for this type"))) - User::Leave(KErrNotSupported); - } - - if (aInOutMime) - { - // Mime type was set for Input format - iInputCodecLevel = codecLevel; - iInputCodec = codecType; - iInputMaxBitRate = maxBitRate; - - iInputMimeType = newMimeType; - iInputShortMimeType = shortMimeType; - } - else - { - // Mime type was set for Output format - iOutputCodecLevel = codecLevel; - iOutputCodec = codecType; - iOutputMaxBitRate = maxBitRate; - - iOutputMimeType = newMimeType; - iOutputShortMimeType = shortMimeType; - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::IsValid -// Checks whether the size is valid -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CTRTranscoderImp::IsValid(TSize& aSize) - { - TBool valid = EFalse; - - switch(aSize.iWidth) - { - case KTRSubQCIFWidth: - { - if (aSize.iHeight == KTRSubQCIFHeight) - { - valid = ETrue; - } - break; - } - - case KTRQCIFWidth: - { - if (aSize.iHeight == KTRQCIFHeight) - { - valid = ETrue; - } - break; - } - - case KTRCIFWidth: - { - if (aSize.iHeight == KTRCIFHeight) - { - valid = ETrue; - } - break; - } - - case KTRQVGAWidth: - { - if (aSize.iHeight == KTRQVGAHeight) - { - valid = ETrue; - } - break; - } - - case KTRVGAWidth: - { - if (aSize.iHeight == KTRVGAHeight || aSize.iHeight == KTRVGA16By9Height) - { - valid = ETrue; - } - break; - } - case KTRWVGAWidth: - { - if (aSize.iHeight == KTRWVGAHeight) - { - valid = ETrue; - } - break; - } - - case KTR4CIFWidth: - { - if (aSize.iHeight == KTR4CIFHeight) - { - valid = ETrue; - } - break; - } - - case KTRPALWidth: - { - if ( (aSize.iHeight == KTRPAL2Height) || (aSize.iHeight == KTRPAL1Height) ) - { - valid = ETrue; - } - break; - } - - default: - { - valid = EFalse; - } - } - - return valid; - } - - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::GetVideoBitRateL -// Gets video bitrate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TUint CTRTranscoderImp::GetVideoBitRateL() - { - if (iVideoEncoderClient) - { - return iVideoEncoderClient->GetVideoBitRateL(); - } - - // Otherwise return 0, in case if it's called before initializing or in different operating mode - // e.g. (without encoding) - return 0; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::GetFrameRateL -// Gets frame rate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TReal CTRTranscoderImp::GetFrameRateL() - { - if (iVideoEncoderClient) - { - return iVideoEncoderClient->GetFrameRateL(); - } - - // Otherwise return 0, in case if it's called before initializing or in different operating mode - // e.g. (without encoding) - return 0; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::GetVideoCodecL -// Gets current video codec in use -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::GetVideoCodecL(TDes8& aVideoMimeType) - { - if (iState == ETRNone) - { - aVideoMimeType = KNullDesC8; - } - else - { - aVideoMimeType = iOutputShortMimeType; - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::GetTranscodedPictureSizeL -// Gets output transcoded picture size -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::GetTranscodedPictureSizeL(TSize& aSize) - { - aSize = iOutputPictureSize; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::InitializeL -// Initializes transcider -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::InitializeL() - { - PRINT((_L("CTRTranscoderImp::InitializeL(), In"))) - TInt status = KErrNone; - - - if (iState != ETROpened) - { - PRINT((_L("CTRTranscoderImp::InitializeL(), Transcoder is in wrong state"))) - User::Leave(KErrNotReady); - } - - switch(iMode) - { - case EFullTranscoding: - { - iVideoDecoderClient->InitializeL(); - - // Check encoder client if it supports optimized data transfer - TRAP( status, iVideoEncoderClient->UseDataTransferOptimizationL() ); - if (status == KErrNone) - { - iOptimizedDataTransfer = ETrue; - } - - TRAP(status, iVideoEncoderClient->InitializeL()); - - if (status != KErrNone) - { - iEncoderInitStatus = status; - InitComplete(); - } - - break; - } - - case EDecoding: - { - iEncoderInitStatus = KErrNone; - iVideoDecoderClient->InitializeL(); - break; - } - - case EEncoding: - { - iDecoderInitStatus = KErrNone; - iVideoEncoderClient->InitializeL(); - break; - } - - case EResampling: - { - // Resampler is already created - iState = ETRInitialized; - iObserver.MtroInitializeComplete(KErrNone); - return; - } - - default: - { - // Transcoder is not ready to be initialized - User::Leave(KErrNotReady); - break; - } - } - - PRINT((_L("CTRTranscoderImp::InitializeL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::MtrdvcoEncInitializeComplete -// Encoder initializing is completed with aError -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoEncInitializeComplete(TInt aError) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoEncInitializeComplete(), status[%d]"), aError)) - - if (aError == KErrHardwareNotAvailable) - { - // Encoder needs to be reinitialized - - // Check if encoder client supports optimized data transfer - iOptimizedDataTransfer = EFalse; - TRAPD( status, iVideoEncoderClient->UseDataTransferOptimizationL() ); - if (status == KErrNone) - { - iOptimizedDataTransfer = ETrue; - } - - PRINT((_L("CTRTranscoderImp::MtrdvcoEncInitializeComplete(), Trying to reinitialize encoder"))) - TRAP(status, iVideoEncoderClient->InitializeL()); - - if (status == KErrNone) - { - // Reinitialization done so wait for the next initialize complete call - return; - } - } - - iEncoderInitStatus = aError; - this->InitComplete(); - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::MtrdvcoDecInitializeComplete -// Decoder initializing is completed with aError -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoDecInitializeComplete(TInt aError) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoDecInitializeComplete(), status[%d]"), aError)) - - if (aError == KErrHardwareNotAvailable) - { - // Decoder needs to be reinitialized - - // Check if decoder supports scaling - iDecodedPictureSize = iInputPictureSize; - - // Set to default - iMaxFramesInProcessing = KTRMaxFramesInProcessingDefault; - - TBool srcWide = iScaler->IsWideAspectRatio(iInputPictureSize); - TBool dstWide = iScaler->IsWideAspectRatio(iOutputPictureSize); - - if (srcWide != dstWide) - { - - PRINT((_L("CTRTranscoderImp::MtrdvcoDecInitializeComplete(), black boxing needed"))) - - // get intermediate resolution from scaler - TSize resolution; - TSize bb = TSize(0,0); - - TBool scale = iScaler->GetIntermediateResolution(iInputPictureSize, iOutputPictureSize, - resolution, bb); - - PRINT((_L("CTRTranscoderImp::MtrdvcoDecInitializeComplete(), int. resolution (%d, %d), scale = %d"), - resolution.iWidth, resolution.iHeight, TInt(scale))) - - if (scale && iVideoDecoderClient->SetDecoderScaling(iInputPictureSize, resolution)) - { - - PRINT((_L("CTRTranscoderImp::MtrdvcoDecInitializeComplete(), decoder scaling supported"))) - - iDecodedPictureSize = resolution; - //iDecodedPictureSize = iOutputPictureSize; - - iMaxFramesInProcessing = KTRMaxFramesInProcessingScaling; - } - } - - else if (iVideoDecoderClient->SetDecoderScaling(iInputPictureSize, iOutputPictureSize)) - { - // Scaling is supported - iDecodedPictureSize = iOutputPictureSize; - - iMaxFramesInProcessing = KTRMaxFramesInProcessingScaling; - } - - PRINT((_L("CTRTranscoderImp::MtrdvcoDecInitializeComplete(), Trying to reinitialize decoder"))) - TRAPD(status, iVideoDecoderClient->InitializeL()); - - if (status == KErrNone) - { - // Reinitialization done so wait for the next initialize complete call - return; - } - } - - iDecoderInitStatus = aError; - this->InitComplete(); - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::InitComplete -// Checks and reports init status to the client -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::InitComplete() - { - TInt status = KErrNone; - - if ( (iEncoderInitStatus != KTRErrNotReady) && (iDecoderInitStatus != KTRErrNotReady) ) - { - // Both were initialized, check statuses - if ( (iEncoderInitStatus == KErrNone) && (iDecoderInitStatus == KErrNone) ) - { - // Both are ok, - // Allocate buffers for intrnal use - TRAP( status, this->AllocateBuffersL() ); - - if (status == KErrNone) - { - iState = ETRInitialized; - } - - // Inform the client - iObserver.MtroInitializeComplete(status); - } - else if (iDecoderInitStatus == KErrNone) - { - // Report encoder init error - iObserver.MtroInitializeComplete(iEncoderInitStatus); - } - else - { - // Report decoder init error - iObserver.MtroInitializeComplete(iDecoderInitStatus); - } - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::StartL -// Starts data processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::StartL() - { - if ( (iState == ETRInitialized) || (iState == ETRStopped) ) - { - switch(iMode) - { - case EFullTranscoding: - { - // Reset flag here - iAsyncStop = EFalse; - - iVideoDecoderClient->StartL(); - - if (!iBitRateSetting) - { - this->SetVideoBitRateL(iOutputMaxBitRate); - } - - iVideoEncoderClient->StartL(); - } - break; - - case EDecoding: - { - iVideoDecoderClient->StartL(); - } - break; - - case EEncoding: - { - if (!iBitRateSetting) - { - this->SetVideoBitRateL(iOutputMaxBitRate); - } - - iVideoEncoderClient->StartL(); - } - break; - - case EResampling: - { - // Nothing to do - } - break; - - default: - { - // Should never be reached - TRASSERT(0); - } - } - - iState = ETRRunning; - } - else - { - PRINT((_L("CTRTranscoderImp::StartL(), called in wrong state"))) - User::Leave(KErrNotReady); - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::AllocateBuffersL -// Allocates internal buffers -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::AllocateBuffersL() - { - PRINT((_L("CTRTranscoderImp::AllocateBuffersL(), In"))) - TInt i = 0; - TUint dataBufferSize = 0; - - - // Assume we are using 420 as a middle temporal format - dataBufferSize = iOutputPictureSize.iWidth * iOutputPictureSize.iHeight * 3 / 2; - PRINT((_L("CTRTranscoderImp::AllocateBuffersL(), data buffer size[%d]"), dataBufferSize)) - - // Allocate TVideoPicture containers - iVideoPictureArray = new (ELeave) TVideoPicture[ KTRPictureBuffersNumber ]; - - for (i = 0; i < KTRPictureBuffersNumber; i ++) - { - // Reset iRawData ptr - iVideoPictureArray[i].iData.iRawData = NULL; - } - - switch (iMode) - { - case EFullTranscoding: - { - // Allocate TTRVideoPicture containers (since the client requested to provide - // intermediate trancsoded content ) - iTRVideoPictureArray = new (ELeave)TTRVideoPicture[KTRPictureContainersNumber]; - - // Add TR picture containers to the queue - for (i = 0; i < KTRPictureContainersNumber; i ++) - { - iTranscoderTRPictureQueue.AddLast( iTRVideoPictureArray[i] ); - } - - if (iOptimizedDataTransfer) - { - // If optimized data transfer is used, no other allocations required. - return; - } - } - break; - - case EDecoding: - { - if ( iDecodedPictureSize == iOutputPictureSize ) - { - // Resampling and data allocation is not required - return; - } - } - break; - - case EEncoding: - { - if ( iInputPictureSize == iOutputPictureSize ) - { - // Allocation data buffers for iVideoPictureArray is not needed, TVideoPicture - // containers are enough in this case. Initialize the queue - for (i = 0; i < KTRPictureBuffersNumber; i ++) - { - iTranscoderPictureQueue.AddLast( iVideoPictureArray[i] ); - } - - return; - } - } - break; - - case EResampling: - { - // Nothing to do - return; - } - - default: - { - PRINT((_L("CTRTranscoderImp::AllocateBuffersL(), Not ready, mode[%d]"), iMode)) - User::Leave(KErrNotReady); - } - break; - } - - // Common part - // Allocate data buffers - iDataArray = new (ELeave) TUint8*[ KTRPictureBuffersNumber ]; - - for ( i = 0; i < KTRPictureBuffersNumber; i ++ ) - { - iDataArray[i] = NULL; - } - - for ( i = 0; i < KTRPictureBuffersNumber; i ++ ) - { - iDataArray[i] = new (ELeave) TUint8[dataBufferSize]; - PRINT((_L("CTRTranscoderImp::AllocateBuffersL(), data buffer[%d], [0x%x], allocated"), i, iDataArray[i])) - } - - // Initialize the queue - for ( i = 0; i < KTRPictureBuffersNumber; i ++ ) - { - iVideoPictureArray[i].iData.iRawData = new (ELeave) TPtr8(0, 0, 0); - iVideoPictureArray[i].iData.iRawData->Set(iDataArray[i], dataBufferSize, dataBufferSize); - iVideoPictureArray[i].iData.iDataSize.SetSize(iOutputPictureSize.iWidth, - iOutputPictureSize.iHeight); - iTranscoderPictureQueue.AddLast( iVideoPictureArray[i] ); - PRINT((_L("CTRTranscoderImp::AllocateBuffersL(), picture[%d], added to the queue"), i)) - PRINT((_L("CTRTranscoderImp::AllocateBuffersL(), picture data[0x%x]"), - iVideoPictureArray[i].iData.iRawData->Ptr() )) - } - - PRINT((_L("CTRTranscoderImp::AllocateBuffersL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::WriteCodedBufferL -// Writes coded buffer to transcoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::WriteCodedBufferL(CCMRMediaBuffer* aBuffer) - { - PRINT((_L("CTRTranscoderImp::WriteCodedBufferL(), In"))) - CTREventItem* newEvent = NULL; - - if (!aBuffer) - { - PRINT((_L("CTRTranscoderImp::WriteCodedBufferL(), Client sends invalid data"))) - User::Leave(KErrArgument); - } - - if (iState == ETRRunning) - { - if (iSetRandomAccessPoint) - { - // Get new item from the eventsrc - if (!iTranscoderEventSrc.IsEmpty()) - { - newEvent = iTranscoderEventSrc.First(); - newEvent->iLink.Deque(); - } - else - { - PRINT((_L("CTRTranscoderImp::WriteCodedBufferL(), iTranscoderEventSrc queue is empty, abort"))) - iObserver.MtroFatalError(KErrAbort); - return; - } - - if (newEvent) - { - newEvent->iTimestamp = aBuffer->TimeStamp(); - newEvent->iRandomAccessStatus = ETrue; - PRINT((_L("CTRTranscoderImp::WriteCodedBufferL(), picture[%f] RandomAccess"), I64REAL(aBuffer->TimeStamp().Int64()) )) - } - - iSetRandomAccessPoint = EFalse; - } - - if (iPictureSinkSettingChanged) - { - if (!newEvent) - { - // Get new item from the event src queue - if (!iTranscoderEventSrc.IsEmpty()) - { - newEvent = iTranscoderEventSrc.First(); - newEvent->iLink.Deque(); - } - else - { - PRINT((_L("CTRTranscoderImp::WriteCodedBufferL(), iTranscoderEventSrc queue is empty, abort"))) - iObserver.MtroFatalError(KErrAbort); - return; - } - } - - if (newEvent) - { - newEvent->iTimestamp = aBuffer->TimeStamp(); - newEvent->iEnablePictureSinkStatus = ETrue; - newEvent->iEnablePictureSinkClientSetting = iPictureSinkClientSetting; - PRINT((_L("CTRTranscoderImp::WriteCodedBufferL(), picture[%f] PS[%d]"), I64REAL(aBuffer->TimeStamp().Int64()), iPictureSinkClientSetting )) - } - - // Reset change flag - iPictureSinkSettingChanged = EFalse; - } - - // encoder enabled / disabled - if (iEncoderEnabledSettingChanged) - { - if (!newEvent) - { - // Get new item from the eventsrc - if (!iTranscoderEventSrc.IsEmpty()) - { - newEvent = iTranscoderEventSrc.First(); - newEvent->iLink.Deque(); - } - else - { - PRINT((_L("CTRTranscoderImp::WriteCodedBufferL(), iTranscoderEventSrc queue is empty, abort"))) - iObserver.MtroFatalError(KErrAbort); - return; - } - } - - if (newEvent) - { - newEvent->iTimestamp = aBuffer->TimeStamp(); - newEvent->iEnableEncoderStatus = ETrue; - newEvent->iEnableEncoderClientSetting = iEncoderEnableClientSetting; - PRINT((_L("CTRTranscoderImp::WriteCodedBufferL(), picture[%f] Enc[%d]"), I64REAL(aBuffer->TimeStamp().Int64()), iEncoderEnableClientSetting )) - } - - // Reset change flag - iEncoderEnabledSettingChanged = EFalse; - } - - if (newEvent) - { - // Put it to transcoder event queue - iTranscoderEventQueue.AddLast(*newEvent); - } - - // Write buffer to DecoderClient - iVideoDecoderClient->WriteCodedBufferL(aBuffer); - } - else - { - PRINT((_L("CTRTranscoderImp::WriteCodedBufferL(), wrong state"))) - User::Leave(KErrNotReady); - } - - PRINT((_L("CTRTranscoderImp::WriteCodedBufferL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::MtroReturnCodedBuffer -// Returns coded buffer -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoReturnCodedBuffer(CCMRMediaBuffer* aBuffer) - { - iObserver.MtroReturnCodedBuffer(aBuffer); - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::MtrdvcoNewPicture -// New decoded picture is available -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoNewPicture(TVideoPicture* aDecodedPicture) - { - TInt status = KErrNone; - TVideoPicture* picture = NULL; - CTREventItem* nextEvent = NULL; - MTRVideoPictureSink* pictureSink = iPictureSinkTemp; // - TBool pictureSinkEnabled = iCurrentPictureSinkEnabled; - TBool encoderEnabled = iCurrentEncoderEnabled; - - if (iState == ETRFatalError) - { - // Nothing to do - return; - } - - if (!aDecodedPicture) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), decoded picture is not valid"))) - iObserver.MtroFatalError(KErrAlreadyExists); - return; - } - else if (!aDecodedPicture->iData.iRawData) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), picture raw data is not valid"))) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - iObserver.MtroFatalError(KErrAlreadyExists); - return; - } - - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), decoded picture timestamp [%f]"), I64REAL(aDecodedPicture->iTimestamp.Int64()) )) - - switch(iMode) - { - case EFullTranscoding: - { - if ( !iNewEvent && !iTranscoderEventQueue.IsEmpty() ) - { - // Get new event - iNewEvent = iTranscoderEventQueue.First(); - iNewEvent->iLink.Deque(); - - // Check the next event if there are any - if (!iTranscoderEventQueue.IsEmpty()) - { - nextEvent = iTranscoderEventQueue.First(); - - if (aDecodedPicture->iTimestamp >= nextEvent->iTimestamp) - { - // Should not happen normally, indicate an error - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), Previous event was not handled properly, abort data processing"))) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - iObserver.MtroFatalError(KErrAlreadyExists); - return; - } - } - } - - if (iNewEvent) - { - // Check timestamp for this event - if (aDecodedPicture->iTimestamp >= iNewEvent->iTimestamp) - { - // Perform requested client's operation - // 1. PictureSinkStatus - if (iNewEvent->iEnablePictureSinkStatus) - { - pictureSinkEnabled = iNewEvent->iEnablePictureSinkClientSetting; - } - - // 2. EnableEncoderStatus - if (iNewEvent->iEnableEncoderStatus) - { - encoderEnabled = iNewEvent->iEnableEncoderClientSetting; - } - - // 3. Random access - if (iNewEvent->iRandomAccessStatus) - { - iCurrentRandomAccess = iNewEvent->iRandomAccessStatus; - } - - // This event is already handled, it's not new anymore - if (!pictureSinkEnabled && !encoderEnabled) - { - // Picture is returned to decoder, we don't need any actions for that - iNewEvent->Reset(); - iTranscoderEventSrc.AddLast(*iNewEvent); - } - else if (pictureSinkEnabled) - { - if (iIntermediatePictureSize == iDecodedPictureSize) - { - // Picture is sent to the client first, decoded picture is not returned - // to decoder until it's hold by the client. - // No new events are handled here, act according global settings. - iNewEvent->Reset(); - iTranscoderEventSrc.AddLast(*iNewEvent); - } - else - { - // Picture is processed acynchronously first - iTranscoderAsyncEventQueue.AddLast(*iNewEvent); - - // Keep previous current global setting - iCurrentAsyncPictureSinkEnabled = iCurrentPictureSinkEnabled; - iCurrentAsyncEncoderEnabled = iCurrentEncoderEnabled; - } - } - else // encoderEnabled otherwise - { - // Picture is processed acynchronously first - iTranscoderAsyncEventQueue.AddLast(*iNewEvent); - - // Keep previous current global setting - iCurrentAsyncPictureSinkEnabled = iCurrentPictureSinkEnabled; - iCurrentAsyncEncoderEnabled = iCurrentEncoderEnabled; - } - - // Reset new event - iNewEvent = NULL; - - // Update current settings - iCurrentPictureSinkEnabled = pictureSinkEnabled; - iCurrentEncoderEnabled = encoderEnabled; - } - } - - // Settings now defined, act accordingly - if (!pictureSinkEnabled && !encoderEnabled) - { - // Nothing to do with this picture, return it to decoder - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), return picture[%f] to decoder"), I64REAL(aDecodedPicture->iTimestamp.Int64()) )) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - return; - } - - if (pictureSinkEnabled) - { - pictureSink = iPictureSinkTemp; - - if (!pictureSink) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), picture sink was not set, report to client!"))) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - iObserver.MtroFatalError(KErrNotReady); - return; - } - } - else - { - pictureSink = NULL; - } - - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), PS[%d], Enc[%d], RandAcc[%d] for [%f]"), pictureSinkEnabled, encoderEnabled, iCurrentRandomAccess, I64REAL(aDecodedPicture->iTimestamp.Int64()) )) - - if ( pictureSink && (iIntermediatePictureSize == iDecodedPictureSize) ) - { - // Since the client requested to provide initial decoded picture, send - // it first, and only then resample and encode. (See SendPictureToTranscoder) - if (!iTranscoderTRPictureQueue.IsEmpty()) - { - TTRVideoPicture* pictureToClient = iTranscoderTRPictureQueue.First(); - pictureToClient->iLink.Deque(); - pictureToClient->iRawData = aDecodedPicture->iData.iRawData; - pictureToClient->iDataSize = aDecodedPicture->iData.iDataSize; - pictureToClient->iTimestamp = aDecodedPicture->iTimestamp; - - // Store picture until it's returned from the client - iDecodedPicture = aDecodedPicture; - - // Deliver picture to the client - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), send picture to the client via sink"))) - pictureSink->MtroPictureFromTranscoder(pictureToClient); - } - else - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), iTranscoderTRPictureQueue is empty, abort operation"))) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - iObserver.MtroFatalError(KErrAbort); - } - - return; - } - - if (iOptimizedDataTransfer) - { - // We need a new picture buffer every time !!! - if ( !iCIPictureBuffersQueue.IsEmpty() ) - { - picture = iCIPictureBuffersQueue.First(); - picture->iLink.Deque(); - } - else - { - TRAP( status, picture = iVideoEncoderClient->GetTargetVideoPictureL() ); - } - - if (status != KErrNone) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), GetTargetVideoPictureL failed [%d]"), status)) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - iObserver.MtroFatalError(status); - return; - } - else if (picture) - { - // Set options for picture - picture->iData.iDataSize = iOutputPictureSize; - - // we don't support resampling for 422, set default for 420 length - // Add check of output data format (422 or 420) in the future and set dataLength properly - TInt length = iOutputPictureSize.iWidth * iOutputPictureSize.iHeight * 3 / 2; - - if ( length > picture->iData.iRawData->MaxLength() ) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), length exceeds CI buffer maxlength[%d, %d]"), length, picture->iData.iRawData->MaxLength() )) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - iObserver.MtroFatalError(KErrGeneral); - return; - } - - // set length - picture->iData.iRawData->SetLength(length); - } - else - { - if (iRealTime) // (picture is not available, act according realtime mode) - { - // Picture buffer is not available from encoder hwdevice - // return decoded picture back, otherwise suspend decoding.. - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), Picture buffer is not available through CI, Drop") )) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - return; - } - else - { - // Keep picture and does not return it to DecoderClient before processing - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), Picture buffer is not available through CI, store") )) - iWaitNewDecodedPicture = aDecodedPicture; - return; - } - } - } - else - { - if (!iTranscoderPictureQueue.IsEmpty()) - { - picture = iTranscoderPictureQueue.First(); - } - else - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), iTranscoderPictureQueue is empty"))) - - if (iRealTime) // (picture is not available, act according realtime mode) - { - // Picture buffer is not available from encoder hwdevice - // return decoded picture back, otherwise suspend decoding.. - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), Picture buffer is not available fromEncoder, Drop") )) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - return; - } - else - { - // Keep picture and does not return it to DecoderClient before processing - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), Picture buffer is not available fromEncoder, store") )) - iWaitNewDecodedPicture = aDecodedPicture; - return; - } - } - } - - if (picture) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), picture[0x%x], data[0x%x]"), - picture, picture->iData.iRawData->Ptr() )) - - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), decPicture[0x%x], data[0x%x]"), - aDecodedPicture, aDecodedPicture->iData.iRawData->Ptr() )) - - // Resample this picture - TRAP(status, iScaler->SetScalerOptionsL( *(aDecodedPicture->iData.iRawData), *(picture->iData.iRawData), - aDecodedPicture->iData.iDataSize, picture->iData.iDataSize ) ); - if (status != KErrNone) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), Set scaler options failed[%d]"), status)) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - iObserver.MtroFatalError(status); - return; - } - - if (!iOptimizedDataTransfer) - { - // Remove picture from transcoder queue - picture->iLink.Deque(); - } - - // Scale - iScaler->Scale(); - picture->iData.iDataFormat = EYuvRawData; - picture->iTimestamp = aDecodedPicture->iTimestamp; - - // Put resampled picture to encoder queue - iEncoderPictureQueue.AddLast(*picture); - - // Make request to process this picture - this->DoRequest(); - - // Return used picture to decoder - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - } - else - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), Transcoder picture queue is empty, skip this buffer"))) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - } - } - break; - - case EDecoding: - { - if (!iPictureSink) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), iPictureSink was not set"))) - iObserver.MtroFatalError(KErrNotReady); - return; - } - - if (aDecodedPicture->iData.iDataSize.iWidth != iDecodedPictureSize.iWidth || - aDecodedPicture->iData.iDataSize.iHeight != iDecodedPictureSize.iHeight ) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), picture size is not valid"))) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - iObserver.MtroFatalError(KErrAlreadyExists); - return; - } - - // Store picture until it's returned from the client - iDecodedPicture = aDecodedPicture; - - if (iDecodedPictureSize == iOutputPictureSize) - { - // Send picture directly to the client - iPicureToClient.iRawData = aDecodedPicture->iData.iRawData; - iPicureToClient.iDataSize = aDecodedPicture->iData.iDataSize; - iPicureToClient.iTimestamp = aDecodedPicture->iTimestamp; - iPictureSink->MtroPictureFromTranscoder(&iPicureToClient); - } - else - { - // Resample this picture to desired size and send to the client - if ( !iTranscoderPictureQueue.IsEmpty() ) - { - iVideoPictureTemp = iTranscoderPictureQueue.First(); - iVideoPictureTemp->iLink.Deque(); - - // Resample this picture - TRAP(status, iScaler->SetScalerOptionsL( *(aDecodedPicture->iData.iRawData), *(iVideoPictureTemp->iData.iRawData), - aDecodedPicture->iData.iDataSize, iVideoPictureTemp->iData.iDataSize ) ); - if (status != KErrNone) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), Set scaler options failed[%d]"), status)) - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - iObserver.MtroFatalError(status); - return; - } - - iScaler->Scale(); - iPicureToClient.iRawData = iVideoPictureTemp->iData.iRawData; - iPicureToClient.iDataSize = iVideoPictureTemp->iData.iDataSize; - iPicureToClient.iTimestamp = aDecodedPicture->iTimestamp; - - // Return decoded picture to decoder - iVideoDecoderClient->ReturnPicture(aDecodedPicture); - - // Sent picture to the client - iPictureSink->MtroPictureFromTranscoder(&iPicureToClient); - } - } - } - break; - - default: - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewPicture(), observer should not be called in this mode"))) - iObserver.MtroFatalError(KErrAlreadyExists); - return; - } - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::DoRequest -// Makes a new request -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::DoRequest() - { - if ( !this->IsActive() ) - { - this->SetActive(); - iStat = &iStatus; - User::RequestComplete( iStat, KErrNone ); - } - else - { - PRINT((_L("CTRTranscoderImp::DoRequest(), AO is already active"))) - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::RunL -// CActive's RunL implementation -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::RunL() - { - PRINT((_L("CTRTranscoderImp::RunL(), In"))) - TVideoPicture* picture = NULL; - MTRVideoPictureSink* pictureSink = iPictureSinkTemp; - TBool pictureSinkEnabled = iCurrentAsyncPictureSinkEnabled; - TBool encoderEnabled = iCurrentAsyncEncoderEnabled; - TBool randomAccess = EFalse; - - - if ( !iEncoderPictureQueue.IsEmpty() ) - { - switch(iMode) - { - case EFullTranscoding: - { - // Encode all pictures in the queue - TInt count = 0; - - - while ( !iEncoderPictureQueue.IsEmpty() ) - { - PRINT((_L("CTRTranscoderImp::RunL(), count[%d]"), count)) - count ++; - picture = iEncoderPictureQueue.First(); - - // Check event queue - if (!iAsyncEvent && !iTranscoderAsyncEventQueue.IsEmpty()) - { - // Trasnscoder configuration is unknown, handle new event - iAsyncEvent = iTranscoderAsyncEventQueue.First(); - iAsyncEvent->iLink.Deque(); - } - - if (iAsyncEvent) - { - // Check timestamp for this event - if (picture->iTimestamp >= iAsyncEvent->iTimestamp) - { - // Perform requested client's operation - // 1. PictureSinkStatus - if (iAsyncEvent->iEnablePictureSinkStatus) - { - pictureSinkEnabled = iAsyncEvent->iEnablePictureSinkClientSetting; - } - - // 2. EnableEncoderStatus - if (iAsyncEvent->iEnableEncoderStatus) - { - encoderEnabled = iAsyncEvent->iEnableEncoderClientSetting; - } - - // 3. RandomAccess - if (iAsyncEvent->iRandomAccessStatus) - { - randomAccess = iAsyncEvent->iRandomAccessStatus; - } - - // This event is already handled, we don't need it anymore - iAsyncEvent->Reset(); - iTranscoderEventSrc.AddLast(*iAsyncEvent); - iAsyncEvent = NULL; - - // Update current settings - iCurrentAsyncPictureSinkEnabled = pictureSinkEnabled; - iCurrentAsyncEncoderEnabled = encoderEnabled; - iCurrentAsyncRandomAccess = randomAccess; - } - } - // Else: Event queue is empty, act according async global options - - // Settings now defined, act accordingly - PRINT((_L("CTRTranscoderImp::RunL(), PS[%d], Enc[%d], RandAcc[%d] for [%f]"), - pictureSinkEnabled, encoderEnabled, randomAccess, I64REAL(picture->iTimestamp.Int64()) )) - - if (pictureSinkEnabled) - { - if (!pictureSink) - { - PRINT((_L("CTRTranscoderImp::RunL(), Picture sink was not set, time to panic"))) - TRASSERT(0); - } - - // Send decoded picture to the client first, and encode it after returning - if (!iTranscoderTRPictureQueue.IsEmpty()) - { - picture->iLink.Deque(); - - TTRVideoPicture* pictureToClient = iTranscoderTRPictureQueue.First(); - pictureToClient->iLink.Deque(); - pictureToClient->iRawData = picture->iData.iRawData; - pictureToClient->iDataSize = picture->iData.iDataSize; - pictureToClient->iTimestamp = picture->iTimestamp; - - // Keep TVideoPicture container to the iContainerWaitQueue until the picture is returned back. - iContainerWaitQueue.AddLast(*picture); - - // Deliver picture to the client - pictureSink->MtroPictureFromTranscoder(pictureToClient); - // - // return; - } - else - { - PRINT((_L("CTRTranscoderImp::RunL(), iTranscoderTRPictureQueue is empty, abort"))) - iObserver.MtroFatalError(KErrAbort); - return; - } - } - else if (!encoderEnabled) - { - // All picture in this queue must be encoded - PRINT((_L("CTRTranscoderImp::RunL(), All pictures from iEncoderPictureQueue must be encoded, error!"))) - TRASSERT(0); - } - else - { - // Send picture to encoder - picture = iEncoderPictureQueue.First(); - picture->iLink.Deque(); - - if (randomAccess) - { - iVideoEncoderClient->SetRandomAccessPoint(); - randomAccess = EFalse; - } - - iVideoEncoderClient->EncodePictureL(picture); - } - } // END while loop - } - break; - - case EDecoding: - { - // Send decoded picture to the client. - if (!iTranscoderTRPictureQueue.IsEmpty()) - { - picture = iEncoderPictureQueue.First(); - picture->iLink.Deque(); - - // Take Transcoder picture container - TTRVideoPicture* pictureToClient = iTranscoderTRPictureQueue.First(); - pictureToClient->iLink.Deque(); - - pictureToClient->iRawData = picture->iData.iRawData; - pictureToClient->iDataSize = picture->iData.iDataSize; - pictureToClient->iTimestamp = picture->iTimestamp; - - if (iPictureSink) - { - iPictureSink->MtroPictureFromTranscoder(pictureToClient); - } - else - { - // Should not happen - PRINT((_L("CTRTranscoderImp::RunL(), Decoding, PictureSink is not valid"))) - TRASSERT(0); - } - - // Keep TVideoPicture container to the iContainerWaitQueue until the picture is returned back. - iContainerWaitQueue.AddLast(*picture); - } - } - break; - - case EEncoding: - { - // Send picture to video encoder - if ( !iEncoderPictureQueue.IsEmpty() ) - { - picture = iEncoderPictureQueue.First(); - picture->iLink.Deque(); - iVideoEncoderClient->EncodePictureL(picture); - } - } - break; - - case EResampling: - { - PRINT((_L("CTRTranscoderImp::RunL(), should not be called in Resampling mode"))) - TRASSERT(0); - } - break; - - case EOperationNone: - { - User::Leave(KErrNotReady); - } - break; - - default: - { - User::Leave(KErrNotReady); - } - break; - } - } - - PRINT((_L("CTRTranscoderImp::RunL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::DoCancel -// Cancel -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::DoCancel() - { - // Nothing to do - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::RunError -// Handles AO leave -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CTRTranscoderImp::RunError(TInt aError) - { - PRINT((_L("CTRTranscoderImp::RunError(), seems RunL leaved, error[%d]."), aError)) - - iObserver.MtroFatalError(aError); - - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::MtrdvcoEncoderReturnPicture -// Returns picture from encoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoEncoderReturnPicture(TVideoPicture* aPicture) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoEncoderReturnPicture()"))) - TTRVideoPicture* pictureToClient = NULL; - TInt status = KErrNone; - - - if (!aPicture) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoEncoderReturnPicture(), picture is not valid"))) - iObserver.MtroFatalError(KErrAlreadyExists); - return; - } - else if (!aPicture->iData.iRawData) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoEncoderReturnPicture(), picture raw data is not valid"))) - iObserver.MtroFatalError(KErrAlreadyExists); - return; - } - - switch(iMode) - { - case EFullTranscoding: - { - // if (BuffManCI) { nothing to do, possibly send next picture for encoder, if available } - // Put returned picture to the iTranscoderPictureQueue - if (!iOptimizedDataTransfer) - { - iTranscoderPictureQueue.AddLast(*aPicture); - - // There could be some decoded pictures waiting for processing, check it - this->MtrdvcoNewBuffers(); - } - else - { - PRINT((_L("CTRTranscoderImp::MtrdvcoEncoderReturnPicture(), Nothing to do here, since optimized data transfer in use"))) - return; - } - - if ( !iEncoderPictureQueue.IsEmpty() ) - { - // If there are pictures available in EncoderPicture for processing, initiate data transfer from here - PRINT((_L("CTRTranscoderImp::MtrdvcoEncoderReturnPicture(), some pictures were not processed in iEncoderPictureQueue"))) - TRAP(status, this->RunL()); - - if (status != KErrNone) - { - // Indicate eror status to the client - PRINT((_L("CTRTranscoderImp::MtrdvcoEncoderReturnPicture(), error[%d]"), status)) - iObserver.MtroFatalError(status); - return; - } - } - } - break; - - case EDecoding: - { - // Should not happen - PRINT((_L("CTRTranscoderImp::MtrdvcoEncoderReturnPicture(), Encoder returns picture in Decoding mode"))) - TRASSERT(0); - } - - break; - - case EEncoding: - { - // Put picture to transcoder queue - iTranscoderPictureQueue.AddLast(*aPicture); - - if (iInputPictureSize == iOutputPictureSize) - { - // Find TRPicture container corresponding to picture data & return it to the client; - if ( !iTranscoderTRPictureQueue.IsEmpty() ) - { - pictureToClient = iTranscoderTRPictureQueue.First(); - pictureToClient->iLink.Deque(); - - if (pictureToClient->iRawData == aPicture->iData.iRawData) - { - // Return picture - iPictureSink->MtroPictureFromTranscoder(pictureToClient); - } - else - { - TPtr8 tmp(*pictureToClient->iRawData); - iTranscoderTRPictureQueue.AddLast(*pictureToClient); - - // Encoder returns pictures in different order than they were sent - // Check next picture - pictureToClient = iTranscoderTRPictureQueue.First(); - pictureToClient->iLink.Deque(); - - while (*pictureToClient->iRawData != tmp) - { - if ( pictureToClient->iRawData == aPicture->iData.iRawData ) - { - // Return picture - iPictureSink->MtroPictureFromTranscoder(pictureToClient); - return; - } - else - { - // Put back to the queue this picture and check the next one - iTranscoderTRPictureQueue.AddLast(*pictureToClient); - pictureToClient = iTranscoderTRPictureQueue.First(); - pictureToClient->iLink.Deque(); - } - } - - // The picture has already been removed from the TR picture queue. - // Probably the client thought a frame was skipped and sent a new picture for encoding, - // therefore the client is not expecting us to send anything back => do nothing - - PRINT((_L("CTRTranscoderImp::MtrdvcoEncoderReturnPicture(), Picture already returned, nothing to do"))) - } - } - } - } - break; - - case EResampling: - { - // Should not happen - PRINT((_L("CTRTranscoderImp::MtrdvcoEncoderReturnPicture(), Encoder returns picture in Resampling mode."))) - TRASSERT(0); - } - break; - - default: - { - PRINT((_L("CTRTranscoderImp::MtrdvcoEncoderReturnPicture(), default case"))) - TRASSERT(0); - } - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::SendPictureToTranscoderL -// Receives picture from the client -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::SendPictureToTranscoderL(TTRVideoPicture* aPicture) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), In"))) - TVideoPicture* picture = NULL; - TInt status = KErrNone; - TBool encoderEnabled = EFalse; - TBool randomAccess = EFalse; - - if (iState == ETRFatalError) - { - // Nothing to do - return; - } - - if ( (iState != ETRRunning) && (iState != ETRPaused) && - (iState != ETRStopped) && (iMode != EDecoding) ) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), wrong state"))) - User::Leave(KErrNotReady); - } - - if (!aPicture) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Client sends invalid data"))) - User::Leave(KErrArgument); - } - else if (!aPicture->iRawData) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Client sends invalid raw data"))) - User::Leave(KErrArgument); - } - - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), picture timestamp [%f]"), I64REAL(aPicture->iTimestamp.Int64()) )) - - switch(iMode) - { - case EFullTranscoding: - { - if (!iPictureSinkTemp) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Client did not set picture sink! leave"))) - User::Leave(KErrNotReady); - } - - if (iIntermediatePictureSize == iDecodedPictureSize) - { - // Picture path is Decoder->Client->Transcoder - // Decoder does not generate new picture until this one have not been returned - // Act according global settings defined in NewPicture - encoderEnabled = iCurrentEncoderEnabled; - randomAccess = iCurrentRandomAccess; - - // Reset it here - iCurrentRandomAccess = EFalse; - } - else - { - // Picture was processed asynchronously - // Set global async options - encoderEnabled = iCurrentAsyncEncoderEnabled; - randomAccess = iCurrentAsyncRandomAccess; - - // Reset it here - iCurrentAsyncRandomAccess = EFalse; - } - - if (!encoderEnabled) - { - // Put TRPicture container to the queue in any case - iTranscoderTRPictureQueue.AddLast(*aPicture); - - // Nothing to do for this picture, return it to decoder - if (iIntermediatePictureSize == iDecodedPictureSize) - { - if (iDecodedPicture) - { - // Return & reset - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), return picture [%f] to decoder"), I64REAL(iDecodedPicture->iTimestamp.Int64()) )) - TVideoPicture* decodedPicture = iDecodedPicture; - iDecodedPicture = NULL; - iVideoDecoderClient->ReturnPicture(decodedPicture); - } - } - else - { - // If picture was sent to the client asynchronously, nothing to return to decoder - // Picture path is Decoder->Transcoder->client->Transcoder - // Picture was taken from iTranscoderPictureQueue, put it back, since it's not encoded - // Take container for TVideoPicture - if ( !iContainerWaitQueue.IsEmpty() ) - { - // Take container - picture = iContainerWaitQueue.First(); - picture->iLink.Deque(); - picture->iData.iRawData = aPicture->iRawData; - picture->iData.iDataSize = aPicture->iDataSize; - picture->iTimestamp = aPicture->iTimestamp; - - if (!iOptimizedDataTransfer) - { - iTranscoderPictureQueue.AddLast(*picture); - } - else - { - iCIPictureBuffersQueue.AddLast(*picture); - - // Some pictures were not processed yet and wait for processing - this->MtrdvcoNewBuffers(); - } - } - } - - return; - } - - - // Client returns processed picture. (Resample, if needed) and send it to encoder; - if ( /*iPictureSink &&*/ (iIntermediatePictureSize == iDecodedPictureSize) ) - { - // Check input picture size - if ( aPicture->iDataSize != iDecodedPictureSize ) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), The client sets wrong picture size"))) - User::Leave(KErrArgument); - } - - // AA Tuning..(Codecs AOs can be higher priority, so if there are any pictures in iEncoderPictureQueue waiting for processing, send those first) - if ( (iDecodedPictureSize == iOutputPictureSize) && (!iEncoderPictureQueue.IsEmpty()) ) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), some pictures were not processed in iEncoderPictureQueue"))) - this->RunL(); - } - - if (iOptimizedDataTransfer) - { - if ( !iCIPictureBuffersQueue.IsEmpty() ) - { - // Target video picture buffer is already available, use it - picture = iCIPictureBuffersQueue.First(); - picture->iLink.Deque(); - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), picture is already available"))) - } - else - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), picture not available, request new;"))) - // Picture was already returned with WritePictureL - TRAP( status, picture = iVideoEncoderClient->GetTargetVideoPictureL() ); - } - - if (status != KErrNone) - { - // return decoded picture to decoder - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), GetTargetVideoPictureL leved with [%d]"), status)) - - if (iDecodedPicture) - { - // Return & reset - TVideoPicture* decodedPicture = iDecodedPicture; - iDecodedPicture = NULL; - iVideoDecoderClient->ReturnPicture(decodedPicture); - } - - // Report the error to the client - iObserver.MtroFatalError(status); - return; - } - else if (picture) - { - // Set options for picture - picture->iData.iDataSize = iOutputPictureSize; - - // we don't support resampling for 422, set default for 420 length - // Add check of output data format (422 or 420) in the future and set dataLength properly - TInt length = iOutputPictureSize.iWidth * iOutputPictureSize.iHeight * 3 / 2; - - if ( length > picture->iData.iRawData->MaxLength() ) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), length exceeds CI buffer maxlength[%d, %d]"), length, picture->iData.iRawData->MaxLength() )) - - if (iDecodedPicture) - { - // Return & reset - TVideoPicture* decodedPicture = iDecodedPicture; - iDecodedPicture = NULL; - iVideoDecoderClient->ReturnPicture(decodedPicture); - } - - iObserver.MtroFatalError(KErrGeneral); - return; - } - - // set length - picture->iData.iRawData->SetLength(length); - } - else - { - if (iRealTime) // (picture is not available, act according realtime mode) - { - // Picture buffer is not available from encoder hwdevice - // return decoded picture back, otherwise suspend decoding.. - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Picture buffer is not available through CI, Drop") )) - - if (iDecodedPicture) - { - iVideoDecoderClient->ReturnPicture(iDecodedPicture); - } - - return; - } - else - { - // Keep picture and does not return it to DecoderClient before processing - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Picture buffer is not available through CI, store") )) - iWaitPictureFromClient = aPicture; - return; - } - } - } - else - { - if ( !iTranscoderPictureQueue.IsEmpty() ) - { - picture = iTranscoderPictureQueue.First(); - } - else - { - // AA (don't report FatalError & wait for newBuffers callback from the encoder) - // return decoded picture to decoder - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), iTranscoderPictureQueue is empty"))) - - if (iRealTime) // (picture is not available, act according realtime mode) - { - // Picture buffer is not available from encoder hwdevice - // return decoded picture back, otherwise suspend decoding.. - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Picture buffer is not available FromEncoder, Drop") )) - - if (iDecodedPicture) - { - iVideoDecoderClient->ReturnPicture(iDecodedPicture); - } - - return; - } - else - { - // Keep picture and does not return it to DecoderClient before processing - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Picture buffer is not available FromEncoder, store") )) - iWaitPictureFromClient = aPicture; - return; - } - } - } - - if (picture) - { - // Returned picture was not resampled. Resample it first. - TRAP(status, iScaler->SetScalerOptionsL( *(aPicture->iRawData), - *(picture->iData.iRawData), - aPicture->iDataSize, - picture->iData.iDataSize ) ); - if (status != KErrNone) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Set scaler options failed[%d]"), status)) - - if (iDecodedPicture) - { - // Return & reset - TVideoPicture* decodedPicture = iDecodedPicture; - iDecodedPicture = NULL; - iVideoDecoderClient->ReturnPicture(decodedPicture); - } - - iTranscoderTRPictureQueue.AddLast(*aPicture); - - // Inform the client with an error - User::Leave(status); - } - - if ( !iOptimizedDataTransfer ) - { - // Remove picture from transcoder queue - picture->iLink.Deque(); - } - - // Scale picture - iScaler->Scale(); - - // Set params - picture->iTimestamp = aPicture->iTimestamp; - } - } - else - { - // Send picture to encoder without resampling - // Take container for TVideoPicture - if ( !iContainerWaitQueue.IsEmpty() ) - { - // Take container - picture = iContainerWaitQueue.First(); - picture->iLink.Deque(); - picture->iData.iRawData = aPicture->iRawData; - picture->iData.iDataSize = aPicture->iDataSize; - picture->iTimestamp = aPicture->iTimestamp; - } - } - - // Put client's container to TRPicture queue - iTranscoderTRPictureQueue.AddLast(*aPicture); - - if (picture) - { - // Encode picture - if (randomAccess) - { - iVideoEncoderClient->SetRandomAccessPoint(); - } - - iVideoEncoderClient->EncodePictureL(picture); - } - - // AA - // return decoded picture here, if there's some available - if (iDecodedPicture) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Return decoded picture now"))) - - // Return & reset - TVideoPicture* decodedPicture = iDecodedPicture; - iDecodedPicture = NULL; - iVideoDecoderClient->ReturnPicture(decodedPicture); - } - } - break; - - case EDecoding: - { - // Client returns decoded picture back. - if (iDecodedPictureSize == iOutputPictureSize) - { - if (iDecodedPicture) - { - iVideoDecoderClient->ReturnPicture(iDecodedPicture); - } - } - else - { - // Put picture back to the queue - iTranscoderPictureQueue.AddLast(*iVideoPictureTemp); - } - } - break; - - case EEncoding: - { - // Check input picture size - if ( aPicture->iDataSize != iInputPictureSize ) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Encoding: The client sets wrong picture size"))) - User::Leave(KErrArgument); - } - - // Client writes new picture to encode. Encode it and return back; - if (!iPictureSink) - { - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), picture sink is not set by the client"))) - User::Leave(KErrNotReady); - } - - if ( !iTranscoderPictureQueue.IsEmpty() ) - { - picture = iTranscoderPictureQueue.First(); - - if (iInputPictureSize != iOutputPictureSize) - { - // Resample this picture first, since picture sizes are different - iScaler->SetScalerOptionsL( *(aPicture->iRawData), *(picture->iData.iRawData), aPicture->iDataSize, - picture->iData.iDataSize ); - - // Scale - iScaler->Scale(); - } - else - { - picture->iData.iDataSize = aPicture->iDataSize; - picture->iData.iRawData = aPicture->iRawData; - } - - picture->iData.iDataFormat = EYuvRawData; - picture->iTimestamp = aPicture->iTimestamp; - - // Remove picture from transcoder queue - picture->iLink.Deque(); - - // Put video picture to encoder queue - iEncoderPictureQueue.AddLast(*picture); - - // Make request to process this picture - this->DoRequest(); - - if (iInputPictureSize != iOutputPictureSize) - { - // Return picture to the client - iPictureSink->MtroPictureFromTranscoder(aPicture); - } - // Add picture to TR queue unless it's already there - else if ( iTranscoderTRPictureQueue.IsEmpty() || - ((iTranscoderTRPictureQueue.First() != aPicture) && - (iTranscoderTRPictureQueue.Last() != aPicture)) ) - { - // Keep aPicture until picture is returned by the encoder - iTranscoderTRPictureQueue.AddLast(*aPicture); - } - } - } - break; - - case EResampling: - { - User::Leave(KErrInUse); - } - break; - - case EOperationNone: - { - User::Leave(KErrNotReady); - } - break; - - default: - { - User::Leave(KErrNotReady); - } - break; - } - - PRINT((_L("CTRTranscoderImp::SendPictureToTranscoderL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::MtrdvcoNewBuffer -// New buffer from the Video encoder is available -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoNewBuffer(CCMRMediaBuffer* aBuffer) - { - if (!aBuffer) - { - // Should never happend - PRINT((_L("CTRTranscoderImp::MtrdvcoNewBuffer(), EncoderClient sends invalid data, panic"))) - TRASSERT(0); - } - - if (!iMediaSink) - { - // Should never happend at this point - PRINT((_L("CTRTranscoderImp::MtrdvcoNewBuffer(), invalid media sink, panic"))) - TRASSERT(0); - } - - TRAPD(status, iMediaSink->WriteBufferL(aBuffer)); - if (status != KErrNone) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewBuffer(), WriteBufferL status[%d]"), status)) - iObserver.MtroFatalError(status); - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::ResampleL -// Resamples video picture to new resolution -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::ResampleL(TPtr8& aSrc, TPtr8& aTrg) - { - PRINT((_L("CTRTranscoderImp::ResampleL(), In"))) - - if ( (iState != ETRInitialized) && (iState != ETRRunning) ) - { - PRINT((_L("CTRTranscoderImp::ResampleL(), called in wrong state"))) - User::Leave(KErrNotReady); - } - - if (iMode != EResampling) - { - PRINT((_L("CTRTranscoderImp::ResampleL(), supported only in Resampling mode"))) - User::Leave(KErrInUse); - } - - if (iScaler) - { - // SetScaler options - iScaler->SetScalerOptionsL(aSrc, aTrg, iInputPictureSize, iOutputPictureSize); - iScaler->Scale(); - } - else - { - PRINT((_L("CTRTranscoderImp::ResampleL(), scaler is not valid"))) - TRASSERT(0); - } - - PRINT((_L("CTRTranscoderImp::ResampleL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::StopL -// Stops data processing synchronously -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::StopL() - { - PRINT((_L("CTRTranscoderImp::StopL(), In"))) - - - if ( (iState != ETRRunning) && (iState != ETRPaused) && (iState != ETRFatalError) ) - { - PRINT((_L("CTRTranscoderImp::StopL(), wrong state, leave"))) - User::Leave(KErrNotReady); - } - - switch(iMode) - { - case EFullTranscoding: - { - // Discard all frames waiting to be sent to encoder - iEncoderPictureQueue.Reset(); - - iVideoDecoderClient->StopL(); - iVideoEncoderClient->StopL(); - iState = ETRStopped; - } - break; - - case EDecoding: - { - iVideoDecoderClient->StopL(); - iState = ETRStopped; - } - break; - - case EEncoding: - { - iVideoEncoderClient->StopL(); - iState = ETRStopped; - } - break; - - case EResampling: - { - iState = ETRStopped; - } - break; - - case EOperationNone: - { - User::Leave(KErrNotReady); - } - break; - - default: - { - } - break; - } - - PRINT((_L("CTRTranscoderImp::StopL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::AsyncStopL -// Stops data processing asynchronously -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::AsyncStopL() - { - PRINT((_L("CTRTranscoderImp::AsyncStopL(), Async In"))) - - - if (iState != ETRRunning) - { - PRINT((_L("CTRTranscoderImp::AsyncStopL() Async, wrong state"))) - User::Leave(KErrNotReady); - } - - switch(iMode) - { - case EFullTranscoding: - { - iAsyncStop = ETrue; - iVideoDecoderClient->AsyncStopL(); - } - break; - - case EDecoding: - { - iEncoderStreamEnd = ETrue; - iVideoDecoderClient->AsyncStopL(); - iState = ETRStopped; - } - break; - - case EEncoding: - { - iDecoderStreamEnd = ETrue; - iVideoEncoderClient->AsyncStopL(); - iState = ETRStopped; - } - break; - - case EResampling: - { - // Just complete asyncStop right here - iObserver.MtroAsyncStopComplete(); - iState = ETRStopped; - } - break; - - case EOperationNone: - { - User::Leave(KErrNotReady); - } - break; - - default: - { - User::Leave(KErrNotReady); - } - } - - - PRINT((_L("CTRTranscoderImp::AsyncStopL(), Async Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::MtrdvcoEncStreamEnd -// Informs that last data was processed by encoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoEncStreamEnd() - { - PRINT((_L("CTRTranscoderImp::MtrdvcoEncStreamEnd()"))) - iEncoderStreamEnd = ETrue; - - if (iDecoderStreamEnd) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoEncStreamEnd(), MtroAsyncStopComplete"))) - iObserver.MtroAsyncStopComplete(); - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::DecoderStreamEnd -// Informs that last data was processed by decoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoDecStreamEnd() - { - PRINT((_L("CTRTranscoderImp::MtrdvcoDecStreamEnd()"))) - TInt status = KErrNone; - iDecoderStreamEnd = ETrue; - - if (iEncoderStreamEnd) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoDecStreamEnd(), MtroAsyncStopComplete"))) - iObserver.MtroAsyncStopComplete(); - return; - } - - if (iAsyncStop) - { - // Call now asyncStop for encoder - TRAP(status, iVideoEncoderClient->AsyncStopL()); - - if (status != KErrNone) - { - // Report error to the client during stop - PRINT((_L("CTRTranscoderImp::MtrdvcoDecStreamEnd(), EncAsyncStop status[%d]"), status)) - iObserver.MtroFatalError(status); - } - - iState = ETRStopped; - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::MtrdvcoRendererReturnPicture -// Receives picture from renderer -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoRendererReturnPicture(TVideoPicture* /*aPicture*/) - { - } - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::MtrdvcoFatalError -// Reports the fatal error to the client -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoFatalError(TInt aError) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoFatalError(), error[%d]"), aError)) - iFatalError = aError; - iState = ETRFatalError; - iObserver.MtroFatalError(aError); - } - - -// AA (PV requires to use that, otherwise depends on the decoder hwdevice & decoder itself) -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::SetDecoderInitDataL -// Sends init data for decoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::SetDecoderInitDataL(TPtrC8& /*aInitData*/) - { - // Remove this API in the future; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::GetCodingStandardSpecificInitOutputLC -// Retrieve coding options from encoder client -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -HBufC8* CTRTranscoderImp::GetCodingStandardSpecificInitOutputLC() - { - if ( iState != ETRInitialized ) - { - PRINT((_L("CTRTranscoderImp::GetCodingStandardSpecificInitOutputLC(), wrong state, leave"))) - User::Leave(KErrNotReady); - } - - if (iVideoEncoderClient) - { - return iVideoEncoderClient->GetCodingStandardSpecificInitOutputLC(); - } - else - { - return NULL; - } - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::EnablePictureSink -// Enable / Disable picture sink -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::EnablePictureSink(TBool aEnable) - { - if (iMode != EFullTranscoding) - { - // nothing to do in other mode - PRINT((_L("CTRTranscoderImp::EnablePictureSink(), nothing to do, wrong mode"))) - return; - } - - if (iPictureSinkClientSetting != aEnable) - { - // Setting was changed - iPictureSinkSettingChanged = ETrue; - PRINT((_L("CTRTranscoderImp::EnablePictureSink(), EnablePictureSink setting changed[%d]"), aEnable)) - } - - iPictureSinkClientSetting = aEnable; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::EnableEncoder -// Enable / Disable encoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::EnableEncoder(TBool aEnable) - { - if (iMode != EFullTranscoding) - { - // nothing to do in other mode - PRINT((_L("CTRTranscoderImp::EnableEncoder(), nothing to do, wrong mode"))) - return; - } - - if (iEncoderEnableClientSetting != aEnable) - { - // Setting was changed - iEncoderEnabledSettingChanged = ETrue; - PRINT((_L("CTRTranscoderImp::EnableEncoder(), EnableEncoder setting changed[%d]"), aEnable)) - } - - iEncoderEnableClientSetting = aEnable; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::SetRandomAccessPoint -// Sets random access -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::SetRandomAccessPoint() - { - if (iMode != EFullTranscoding) - { - // nothing to do in other mode - PRINT((_L("CTRTranscoderImp::EnableEncoder(), nothing to do, wrong mode"))) - return; - } - - iSetRandomAccessPoint = ETrue; - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::MtrdvcoNewBuffers -// New buffers from encoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoNewBuffers() - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewBuffers()"))) - TInt status = KErrNone; - TTRVideoPicture* pictureFromClient = NULL; - TVideoPicture* newDecodedPicture = NULL; - - - if (iRealTime) - { - // Should never be called in normal data flow or realTime mode, ignore this call! - PRINT((_L("CTRTranscoderImp::MtrdvcoNewBuffers(), return immediately"))) - return; - } - - // Use this call to initiate data transfer if there are available decoded picture waiting for processing - if (iWaitPictureFromClient) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewBuffers(), iWaitPictureFromClient, [0x%x], call SendPictureToTranscoderL()"), iWaitPictureFromClient)) - - // Simulate call from the client since picture was not processed - pictureFromClient = iWaitPictureFromClient; - - // Reset picture, it can be reinitialized in the following call - iWaitPictureFromClient = NULL; - - TRAP( status, this->SendPictureToTranscoderL(pictureFromClient) ); - - if (status != KErrNone) - { - // Report error to the client - PRINT((_L("CTRTranscoderImp::MtrdvcoNewBuffers(), status[%d]"), status)) - iObserver.MtroFatalError(status); - } - - return; - } - - if (iWaitNewDecodedPicture) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoNewBuffers(), iWaitNewDecodedPicture[0x%x]"), iWaitNewDecodedPicture)) - newDecodedPicture = iWaitNewDecodedPicture; - - // Reset newdecoded picture - iWaitNewDecodedPicture = NULL; - - // Simulate new decoded picture call - this->MtrdvcoNewPicture(newDecodedPicture); - } - } - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::EstimateTranscodeTimeFactorL -// Returns a time estimate of how long it takes to process one second of the input video -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TReal CTRTranscoderImp::EstimateTranscodeTimeFactorL(const TTRVideoFormat& aInput, const TTRVideoFormat& aOutput) - { - PRINT((_L("CTRTranscoderImp::EstimateTranscodeTimeFactorL(), In"))) - - if ( iState == ETRNone ) - { - PRINT((_L("CTRTranscoderImp::EstimateTranscodeTimeFactorL(), Transcoder is in wrong state"))) - User::Leave(KErrNotReady); - } - - // Get frame rate for output / input video - TReal time = 0.0; - TReal encodeFrameRate = GetFrameRateL(); - TReal decodeFrameRate = 0.0; - iObserver.MtroSetInputFrameRate(decodeFrameRate); - - // Use default frames rates if not set - if (encodeFrameRate == 0.0) encodeFrameRate = KTRDefaultSrcRate; - if (decodeFrameRate == 0.0) decodeFrameRate = KTRDefaultSrcRate; - - PRINT((_L("CTRTranscoderImp::EstimateTranscodeTimeFactorL(), encode frame rate: %.2f"), encodeFrameRate)) - PRINT((_L("CTRTranscoderImp::EstimateTranscodeTimeFactorL(), decode frame rate: %.2f"), decodeFrameRate)) - - switch(iMode) - { - case EFullTranscoding: - { - // Estimate the time for decoding, encoding and possible resampling - time += iVideoEncoderClient->EstimateEncodeFrameTimeL(aOutput, iOutputCodec) * encodeFrameRate; - time += iVideoDecoderClient->EstimateDecodeFrameTimeL(aInput, iInputCodec) * decodeFrameRate; - time += iScaler->EstimateResampleFrameTime(aInput, aOutput) * decodeFrameRate; - - break; - } - - case EDecoding: - { - // Estimate the time for decoding and possible resampling - time += iVideoDecoderClient->EstimateDecodeFrameTimeL(aInput, iInputCodec) * decodeFrameRate; - time += iScaler->EstimateResampleFrameTime(aInput, aOutput) * decodeFrameRate; - - break; - } - - case EEncoding: - { - // Estimate the time for encoding and possible resampling - time += iVideoEncoderClient->EstimateEncodeFrameTimeL(aOutput, iOutputCodec) * encodeFrameRate; - time += iScaler->EstimateResampleFrameTime(aInput, aOutput) * encodeFrameRate; - - break; - } - - case EResampling: - { - // Estimate the time for resampling - time += iScaler->EstimateResampleFrameTime(aInput, aOutput) * decodeFrameRate; - - break; - } - - default: - { - // Transcoder is not ready - User::Leave(KErrNotReady); - break; - } - } - - PRINT((_L("CTRTranscoderImp::EstimateTranscodeTimeFactorL(), time factor: %.2f"), time)) - - PRINT((_L("CTRTranscoderImp::EstimateTranscodeTimeFactorL(), Out"))) - - return time; - } - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::GetMaxFramesInProcessing -// Get max number of frames in processing -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TInt CTRTranscoderImp::GetMaxFramesInProcessing() - { - return iMaxFramesInProcessing; - } - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::EnablePausing -// Enable / Disable pausing of transcoding if resources are lost -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::EnablePausing(TBool aEnable) - { - if (iVideoDecoderClient) - { - iVideoDecoderClient->EnableResourceObserver(aEnable); - } - - if (iVideoEncoderClient) - { - iVideoEncoderClient->EnableResourceObserver(aEnable); - } - - } - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::::MmvroResourcesLost -// Indicates that a media device has lost its resources -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoResourcesLost(TBool aFromDecoder) - { - PRINT((_L("CTRTranscoderImp::MtrdvcoResourcesLost(), In"))) - - if ( (iState == ETRRunning) || (iState == ETRInitialized) || (iState == ETRStopped) ) - { - iVideoDecoderClient->Pause(); - iState = ETRPaused; - - iDecoderResourceLost = aFromDecoder; - - if (!aFromDecoder) - iVideoEncoderClient->Pause(); - - // Return decoded picture - if (iWaitNewDecodedPicture) - { - iVideoDecoderClient->ReturnPicture(iWaitNewDecodedPicture); - iWaitNewDecodedPicture = NULL; - } - - iObserver.MtroSuspend(); - } - - PRINT((_L("CTRTranscoderImp::MtrdvcoResourcesLost(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRTranscoderImp::::MmvroResourcesRestored -// Indicates that a media device has regained its resources -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRTranscoderImp::MtrdvcoResourcesRestored() - { - PRINT((_L("CTRTranscoderImp::MtrdvcoResourcesRestored(), In"))) - - if ( (iState == ETRPaused) || (iState == ETRInitialized) || (iState == ETRStopped) ) - { - // Clear all events - if( iNewEvent ) - { - iNewEvent->Reset(); - iTranscoderEventSrc.AddLast(*iNewEvent); - iNewEvent = NULL; - } - - while( !iTranscoderEventQueue.IsEmpty() ) - { - // Get new event - iNewEvent = iTranscoderEventQueue.First(); - iNewEvent->iLink.Deque(); - - iNewEvent->Reset(); - iTranscoderEventSrc.AddLast(*iNewEvent); - iNewEvent = NULL; - } - - if( iAsyncEvent ) - { - iAsyncEvent->Reset(); - iTranscoderEventSrc.AddLast(*iAsyncEvent); - iAsyncEvent = NULL; - } - - while( !iTranscoderAsyncEventQueue.IsEmpty() ) - { - // Get new event - iAsyncEvent = iTranscoderAsyncEventQueue.First(); - iAsyncEvent->iLink.Deque(); - - iAsyncEvent->Reset(); - iTranscoderEventSrc.AddLast(*iAsyncEvent); - iAsyncEvent = NULL; - } - - // Force update of PS / EE settings - iPictureSinkSettingChanged = ETrue; - iEncoderEnabledSettingChanged = ETrue; - - TRAPD( error, iVideoDecoderClient->ResumeL() ); - if( error != KErrNone ) { } - - if (!iDecoderResourceLost) - { - iVideoEncoderClient->Resume(); - } - - iState = ETRRunning; - - iObserver.MtroResume(); - } - - PRINT((_L("CTRTranscoderImp::MtrdvcoResourcesRestored(), Out"))) - } - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/src/Ctrvideodecoderclient.cpp --- a/videoeditorengine/vedtranscoder/src/Ctrvideodecoderclient.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1468 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video decoder client. -* -*/ - - - -// INCLUDE FILES -#include -#include "ctrvideodecoderclient.h" -#include "ctrtranscoder.h" -#include "ctrdevvideoclientobserver.h" -#include "ctrsettings.h" -#include "ctrhwsettings.h" - - -// MACROS -#define TRASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CTRANSCODERVIDEODECODERCLIENT"), -10010)) - - -// CONSTANTS - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CTRVideoDecoderClient* CTRVideoDecoderClient::NewL(MTRDevVideoClientObserver& aObserver) - { - PRINT((_L("CTRVideoDecoderClient::NewL(), In"))) - CTRVideoDecoderClient* self = new (ELeave) CTRVideoDecoderClient(aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - - PRINT((_L("CTRVideoDecoderClient::NewL(), Out"))) - return self; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::CTRVideoDecoderClient -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CTRVideoDecoderClient::CTRVideoDecoderClient(MTRDevVideoClientObserver& aObserver) : - iObserver(aObserver) - { - iDevVideoPlay = NULL; - iCompresedFormat = NULL; - iUid = TUid::Null(); - iFallbackUid = TUid::Null(); - iHwDeviceId = THwDeviceId(0); - iInputBuffer = NULL; - iCodedBuffer = NULL; - iDecodedPicture = NULL; - - iVideoResourceHandlerCI = NULL; - - iFatalError = KErrNone; - iDataUnitType = EDuCodedPicture; - iStop = EFalse; - iLastTimestamp = -1; - iAcceleratedCodecSelected = EFalse; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::ConstructL() - { - iDevVideoPlay = CMMFDevVideoPlay::NewL(*this); - } - - -// --------------------------------------------------------- -// CTRVideoDecoderClient::~CTRVideoDecoderClient() -// Destructor -// --------------------------------------------------------- -// -CTRVideoDecoderClient::~CTRVideoDecoderClient() - { - PRINT((_L("CTRVideoDecoderClient::~CTRVideoDecoderClient(), In"))) - - if (iDevVideoPlay) - { - delete iDevVideoPlay; - iDevVideoPlay = NULL; - } - - iInputBuffer = NULL; - - if (iCompresedFormat) - { - delete iCompresedFormat; - } - - PRINT((_L("CTRVideoDecoderClient::~CTRVideoDecoderClient(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::SupportsCodec -// Checks whether this coded is supported -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CTRVideoDecoderClient::SupportsCodec(const TDesC8& aFormat, const TDesC8& aShortFormat, TInt aUid, TInt aFallbackUid) - { - TBool supports = EFalse; - TBool preferredFound = EFalse; - TBool fallbackFound = EFalse; - - if (iDevVideoPlay) - { - RArray decoders; - - TRAPD( status, iDevVideoPlay->FindDecodersL(aShortFormat, 0/*aPreProcType*/, decoders, EFalse/*aExactMatch*/) ); - - if( status != KErrNone ) - { - PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), status[%d]"), status)) - supports = EFalse; - } - else if( decoders.Count() <= 0 ) - { - PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), No decoders found"))) - supports = EFalse; - } - else - { - - PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), %d decoders found"), decoders.Count() )) - - // Check if any of the found decoders matches with the given Uids - for( TInt i = 0; i < decoders.Count(); ++i ) - { - - PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), found codec 0x%x"), decoders[i].iUid)) - - if( decoders[i].iUid == aUid ) - { - PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), preferred found"))) - iUid = decoders[i]; - preferredFound = ETrue; - } - if( decoders[i].iUid == aFallbackUid ) - { - PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), fallback found"))) - iFallbackUid = decoders[i]; - fallbackFound = ETrue; - } - - if( preferredFound && fallbackFound ) - { - // No need to search anymore - break; - } - } - } - - decoders.Reset(); - decoders.Close(); - } - - if( !preferredFound ) - { - // Preferred decoder was not found => Probably the given decoder Uid is wrong - PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), No supported decoders found"))) - supports = EFalse; - } - else - { - PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), Supported decoder found: 0x%x"), iUid.iUid)) - iMimeType = aFormat; - iShortMimeType = aShortFormat; - supports = ETrue; - } - - return supports; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::SetCodecParametersL -// Sets codec parameters -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::SetCodecParametersL(TInt aCodecType, TInt aCodecLevel, const TTRVideoFormat& aInputFormat, - const TTRVideoFormat& aOutputFormat) - { - PRINT((_L("CTRVideoDecoderClient::SetCodecParametersL(), In"))) - TInt status = KErrNone; - iCodecType = aCodecType; - iCodecLevel = aCodecLevel; - iInputFormat = aInputFormat; - iOutputFormat = aOutputFormat; - - // Input format - if (!iCompresedFormat) - { - iCompresedFormat = CCompressedVideoFormat::NewL( iMimeType ); - } - - TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iUid) ); - - if (status != KErrNone) - { - // Try again with the fallback decoder if one exists - if( (iFallbackUid != TUid::Null()) && (iFallbackUid.iUid != iUid.iUid) ) - { - TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iFallbackUid) ); - - if (status != KErrNone) - { - PRINT((_L("CTRVideoDecoderClient::SetCodecParametersL(), Failed to get codec info"))) - User::Leave(KErrNotSupported); - } - - PRINT((_L("CTRVideoDecoderClient::SetCodecParametersL(), Reverting to fallback decoder"))) - - // Fallback ok, take it - iUid = iFallbackUid; - } - else - { - PRINT((_L("CTRVideoDecoderClient::SetCodecParametersL(), No suitable decoders found"))) - User::Leave(KErrNotSupported); - } - } - - PRINT((_L("CTRVideoDecoderClient::SetCodecParametersL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::CheckCodecInfoL -// Checks coded info -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CTRVideoDecoderClient::CheckCodecInfoL(TUid aUid) - { - CVideoDecoderInfo* decoderInfo = NULL; // Decoder info for retrieving capabilities - TInt status = KErrNone; - TBool accelerated = EFalse; - - - // Check decoder - PRINT((_L("CTRVideoDecoderClient::CheckCodecInfoL(), getting info from [0x%x]"), aUid.iUid )) - decoderInfo = iDevVideoPlay->VideoDecoderInfoLC( aUid ); - - if (!decoderInfo) - { - PRINT((_L("CTRVideoDecoderClient::CheckCodecInfoL(), getting info from [0x%x] failed[%d]"), aUid.iUid, status )) - User::Leave(KErrNotSupported); - } // AA skip info check before symbian fix - else /* if ( !decoderInfo->SupportsFormat(*iCompresedFormat) ) // Check input format - { - PRINT((_L("CTRVideoDecoderClient::CheckCodecInfoL(), Input format is not supported"))) - status = KErrNotSupported; - } - else */ - { - // Check max rate for requested image format - TSize maxSize = decoderInfo->MaxPictureSize(); - - if ( (iInputFormat.iSize.iWidth > maxSize.iWidth) || (iInputFormat.iSize.iHeight > maxSize.iHeight) ) - { - PRINT((_L("CTRVideoDecoderClient::CheckCodecInfoL(), Picture size is not supported"))) - status = KErrNotSupported; - } - } - - accelerated = decoderInfo->Accelerated(); - - // Delete codec info - CleanupStack::PopAndDestroy(decoderInfo); - - if (status != KErrNone) - { - User::Leave(status); - } - - return accelerated; - } - - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::InitializeL -// Initializes encoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::InitializeL() - { - PRINT((_L("CTRVideoDecoderClient::InitializeL(), In"))) - TUint maxBufferSize = 0; - TInt status = KErrNone; - - - switch(iInputFormat.iDataType) - { - case CTRTranscoder::ETRDuCodedPicture: - { - iDataUnitType = EDuCodedPicture; - break; - } - - case CTRTranscoder::ETRDuVideoSegment: - { - iDataUnitType = EDuVideoSegment; - break; - } - - default: - { - // Should never happend. Decoder does not support uncompressed input format. - TRASSERT(0); - } - } - - iBufferOptions.iMinNumInputBuffers = KTRDecoderMinNumberOfBuffers; - - // Select decoder first - this->SelectDecoderL(); - - // Set now output format for this device - TRAP(status, iDevVideoPlay->SetOutputFormatL(iHwDeviceId, iUncompressedFormat)); - - // 3. Buffer options - iBufferOptions.iPreDecodeBufferSize = 0; // "0" - use default decoder value - iBufferOptions.iMaxPostDecodeBufferSize = 0; // No limitations - iBufferOptions.iPreDecoderBufferPeriod = 0; - iBufferOptions.iPostDecoderBufferPeriod = 0; - - // Check max coded picture size for specified codec level - switch(iCodecLevel) - { - case KTRH263CodecLevel10: - { - maxBufferSize = KTRMaxBufferSizeLevel10; - break; - } - - case KTRH263CodecLevel20: - { - maxBufferSize = KTRMaxBufferSizeLevel20; - break; - } - - case KTRH263CodecLevel30: - { - maxBufferSize = KTRMaxBufferSizeLevel30; - break; - } - - case KTRH263CodecLevel40: - { - maxBufferSize = KTRMaxBufferSizeLevel40; - break; - } - - case KTRH263CodecLevel50: - { - maxBufferSize = KTRMaxBufferSizeLevel50; - break; - } - - case KTRH263CodecLevel60: - { - maxBufferSize = KTRMaxBufferSizeLevel60; - break; - } - - case KTRH263CodecLevel70: - { - maxBufferSize = KTRMaxBufferSizeLevel70; - break; - } - - case KTRH264CodecLevel10: - { - maxBufferSize = KTRMaxBufferSizeH264Level10; - break; - } - - case KTRH264CodecLevel10b: - { - maxBufferSize = KTRMaxBufferSizeH264Level10b; - break; - } - - case KTRH264CodecLevel11: - { - maxBufferSize = KTRMaxBufferSizeH264Level11; - break; - } - - case KTRH264CodecLevel12: - { - maxBufferSize = KTRMaxBufferSizeH264Level12; - break; - } - - case KTRH264CodecLevel13: - { - maxBufferSize = KTRMaxBufferSizeH264Level13; - break; - } - - case KTRH264CodecLevel20: - { - maxBufferSize = KTRMaxBufferSizeH264Level20; - break; - } - - case KTRH264CodecLevel30: - { - maxBufferSize = KTRMaxBufferSizeH264Level30; - break; - } - - case KTRH264CodecLevel31: - { - maxBufferSize = KTRMaxBufferSizeH264Level31; - break; - } - - case KTRMPEG4CodecLevel0: - { - maxBufferSize = KTRMaxBufferSizeLevel0; - break; - } - - case KTRMPEG4CodecLevel1: - { - maxBufferSize = KTRMaxBufferSizeLevel1; - break; - } - - case KTRMPEG4CodecLevel2: - { - maxBufferSize = KTRMaxBufferSizeLevel2; - break; - } - - case KTRMPEG4CodecLevel3: - { - maxBufferSize = KTRMaxBufferSizeLevel3; - break; - } - - case KTRMPEG4CodecLevel0b: - { - maxBufferSize = KTRMaxBufferSizeLevel0b; - break; - } - - case KTRMPEG4CodecLevel4a: - { - maxBufferSize = KTRMaxBufferSizeLevel4a; - break; - } - - default: - { - maxBufferSize = KTRMaxBufferSizeLevel0; - break; - } - } - - iBufferOptions.iMaxInputBufferSize = maxBufferSize; - PRINT((_L("CTRVideoDecoderClient::InitializeL(), InputBufferSize[%d], NumberOfBuffers[%d]"), - iBufferOptions.iMaxInputBufferSize, iBufferOptions.iMinNumInputBuffers )) - - iDevVideoPlay->SetBufferOptionsL(iBufferOptions); - - if (iScalingInUse) - { - PRINT((_L("CTRVideoDecoderClient::InitializeL(), Enabling scaling"))) - if (iScalingWithDeblocking) - { - // Enable scaling with deblocking - iDevVideoPlay->SetPostProcessTypesL(iHwDeviceId, EPpScale | EPpDeblocking); - } - else - { - // Deblocking not supported, enable just scaling - iDevVideoPlay->SetPostProcessTypesL(iHwDeviceId, EPpScale); - } - - iDevVideoPlay->SetScaleOptionsL(iHwDeviceId, iScaledOutputSize, EFalse); - } - - // Initialize devVideoPlay - iDevVideoPlay->Initialize(); - - PRINT((_L("CTRVideoDecoderClient::InitializeL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::SelectDecoderL -// Selects decoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::SelectDecoderL() - { - PRINT(( _L("CTRVideoDecoderClient::SelectDecoderL(), In") )) - TInt status = KErrNone; - TBool exit = EFalse; - - TVideoDataUnitEncapsulation dataUnitEncapsulation = EDuElementaryStream; - - // Use generic payload encapsulation for H.264 - if (iCodecType == EH264) - { - dataUnitEncapsulation = EDuGenericPayload; - } - - if (iUid != TUid::Null()) - { - TRAP( status, iHwDeviceId = iDevVideoPlay->SelectDecoderL(iUid) ); - } - else - { - // Probably the error already exists, if iUid == NULL; - status = KErrAlreadyExists; - } - - while (!exit ) - { - if (status == KErrNone) - { - // To get Output format list devvideoplay requires to define output format first. - iDevVideoPlay->SetInputFormatL(iHwDeviceId, *iCompresedFormat, iDataUnitType, dataUnitEncapsulation, ETrue); - - // It's time to check input format support (since the plugin is loaded to the memory) - iUncompressedFormat.iDataFormat = EYuvRawData; - - TUncompressedVideoFormat uncFormat; - TBool found = EFalse; - TInt pattern1, pattern2; - TInt dataLayout; - - switch (iOutputFormat.iDataType) - { - case CTRTranscoder::ETRYuvRawData420: - { - pattern1 = EYuv420Chroma1; - pattern2 = EYuv420Chroma2; - dataLayout = EYuvDataPlanar; - } - break; - - case CTRTranscoder::ETRYuvRawData422: - { - pattern1 = EYuv422Chroma1; - pattern2 = EYuv422Chroma2; - dataLayout = EYuvDataInterleavedBE; - } - break; - - default: - { - // set 420 as a default - pattern1 = EYuv420Chroma1; - pattern2 = EYuv420Chroma2; - dataLayout = EYuvDataPlanar; - } - } - - RArray supportedOutputFormats; - TRAP(status, iDevVideoPlay->GetOutputFormatListL( iHwDeviceId, supportedOutputFormats )); - - TInt formatCount = 0; - if (status == KErrNone) - { - formatCount = supportedOutputFormats.Count(); - PRINT((_L("CTRVideoDecoderClient::InitializeL(), formatCount[%d]"), formatCount )) - } - - if (formatCount <= 0) - { - supportedOutputFormats.Close(); - status = KErrAlreadyExists; - PRINT((_L("CTRVideoDecoderClient::InitializeL(), There are no supported output formats") )) - //User::Leave(KErrNotSupported); - } - else - { - // Check the most important paramers - for ( TInt i = 0; i < formatCount; i ++ ) - { - uncFormat = supportedOutputFormats[i]; - PRINT((_L("CTRVideoDecoderClient::InitializeL(), pattern[%d]"), uncFormat.iYuvFormat.iPattern )) - - if ( (uncFormat.iDataFormat == iUncompressedFormat.iDataFormat) && - (uncFormat.iYuvFormat.iDataLayout == dataLayout) && - ( (uncFormat.iYuvFormat.iPattern == pattern1) || - (uncFormat.iYuvFormat.iPattern == pattern2) ) ) - { - // Assign the rest of parameters - iUncompressedFormat = uncFormat; - found = ETrue; - exit = ETrue; - supportedOutputFormats.Close(); - break; - } - } - - if (!found) - { - supportedOutputFormats.Close(); - status = KErrAlreadyExists; - PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Supported format was not found") )) - //User::Leave(KErrNotSupported); - } - } - - } - else - { - if (iScalingInUse) - { - // We can't revert to fallback decoder here since scaling has been taken into use - // and we can't check here if the fallback decoder supports scaling nor - // disable scaling if it's not supported - PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Failed to select decoder"))) - User::Leave(KErrNotSupported); - } - - // Try again with the fallback decoder if one exists - if( (iFallbackUid != TUid::Null()) && (iFallbackUid.iUid != iUid.iUid) ) - { - PRINT((_L("CTRVideoDecoderClient::SelectEncoderL(), Reverting to fallback decoder"))) - iUid = iFallbackUid; - } - else - { - PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Failed to select decoder"))) - User::Leave(KErrNotSupported); - } - - TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iUid) ); - - if (status != KErrNone) - { - PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Failed to get codec info"))) - User::Leave(KErrNotSupported); - } - - TRAP(status, iHwDeviceId = iDevVideoPlay->SelectDecoderL(iUid)); - - if (status != KErrNone) - { - PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Failed to select decoder"))) - User::Leave(KErrNotSupported); - } - } - } - - PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoInitComplete -// Notifies for initialization complete with init status -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoInitComplete(TInt aError) - { - if ((aError == KErrHardwareNotAvailable) || (aError == KErrNotSupported)) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoInitComplete(), Error in initialization"))) - - // Map both error codes to the same - aError = KErrNotSupported; - - // Try again with the fallback decoder if one exists - while( (iFallbackUid != TUid::Null()) && (iFallbackUid.iUid != iUid.iUid) ) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoInitComplete(), Reverting to fallback decoder"))) - - iUid = iFallbackUid; - - // Devvideo must be recreated from scratch - if (iDevVideoPlay) - { - delete iDevVideoPlay; - iDevVideoPlay = NULL; - } - - TRAPD( status, iDevVideoPlay = CMMFDevVideoPlay::NewL(*this) ); - if (status != KErrNone) - { - // Something went wrong, let CTRTranscoderImp handle the error - PRINT((_L("CTRVideoDecoderClient::MdvpoInitComplete(), Failed to create DevVideoPlay"))) - break; - } - - TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iUid) ); - if (status != KErrNone) - { - // Fallback decoder can not be used, let CTRTranscoderImp handle the error - PRINT((_L("CTRVideoDecoderClient::MdvpoInitComplete(), Failed to get codec info"))) - break; - } - - // We are now ready to reinitialize the decoder, let CTRTranscoderImp do it - aError = KErrHardwareNotAvailable; - break; - } - } - - iObserver.MtrdvcoDecInitializeComplete(aError); - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::StartL -// Starts decoding -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::StartL() - { - PRINT((_L("CTRVideoDecoderClient::StartL(), In"))) - - // Start decoding - if (iFatalError == KErrNone) - { - iDevVideoPlay->Start(); - } - - if (!iInputBuffer) - { - // Get buffer from the decoder to fill - iInputBuffer = iDevVideoPlay->GetBufferL(iBufferOptions.iMaxInputBufferSize); - } - - // Reset iStop - iStop = EFalse; - iPause = EFalse; - - // Reset ts monitor - iLastTimestamp = -1; - - PRINT((_L("CTRVideoDecoderClient::StartL(), Out"))) - } - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::Pause -// Pauses decoding -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::Pause() - { - PRINT((_L("CTRVideoDecoderClient::Pause(), In"))) - - // Pause decoding - iDevVideoPlay->Pause(); - - // Return coded buffer to client since it can not be send to decoder now - if (iCodedBuffer) - { - CCMRMediaBuffer* codedBuffer = iCodedBuffer; - - // Reset buffer ptr - iCodedBuffer = NULL; - - iObserver.MtrdvcoReturnCodedBuffer(codedBuffer); - } - - // Get all pictures from devvideoplay and return them to decoder - TVideoPicture* picture = NULL; - TRAPD(status, picture = iDevVideoPlay->NextPictureL()); - - while ((picture != NULL) && (status == KErrNone)) - { - PRINT((_L("CTRVideoDecoderClient::Pause(), Sending picture [0x%x] back to decoder"), picture)) - - iDevVideoPlay->ReturnPicture(picture); - picture = NULL; - - TRAP(status, picture = iDevVideoPlay->NextPictureL()); - } - - // Input buffer is not valid anymore - iInputBuffer = NULL; - - iPause = ETrue; - - PRINT((_L("CTRVideoDecoderClient::Pause(), Out"))) - } - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::ResumeL -// Resumes decoding -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::ResumeL() - { - PRINT((_L("CTRVideoDecoderClient::ResumeL(), In"))) - - // Start decoding - if (iFatalError == KErrNone) - { - iDevVideoPlay->Resume(); - } - - if (!iInputBuffer) - { - // Get buffer from the decoder to fill - iInputBuffer = iDevVideoPlay->GetBufferL(iBufferOptions.iMaxInputBufferSize); - } - - // Reset ts monitor - iLastTimestamp = -1; - - iPause = EFalse; - - PRINT((_L("CTRVideoDecoderClient::ResumeL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoNewBuffers() -// New buffers are available -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoNewBuffers() - { - TInt status = KErrNone; - - - if (iStop) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoNewBuffers(), Stop was already called, nothing to do"))) - return; - } - - // One or more new empty input buffers are available - if (!iInputBuffer) - { - // Get buffer from the decoder to fill - TRAP(status, iInputBuffer = iDevVideoPlay->GetBufferL(iBufferOptions.iMaxInputBufferSize)); - - if (status != KErrNone) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoNewBuffers(), GetBufferL status[%d]"), status)) - iObserver.MtrdvcoFatalError(status); - return; - } - - if (!iInputBuffer) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoNewBuffers(), There are available buffer, but decoder returned NULL"))) - - // Report an error or wait for the next MdvpoNewBuffers ?: Wait, GetBufferL is called when client send new coded buffer. - //iObserver.MtrdvcoFatalError(KErrAlreadyExists); - return; - } - } - - if (iCodedBuffer) - { - CCMRMediaBuffer* codedBuffer = iCodedBuffer; - - // Reset buffer ptr - iCodedBuffer = NULL; - - // Send coded buffer, since the client has already done request - TRAP(status, this->SendBufferL(codedBuffer)); - if (status != KErrNone) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoNewBuffers(), Send buffer error[%d]"), status)) - iObserver.MtrdvcoFatalError(status); - return; - } - } - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::WriteCodedBufferL -// Writes coded data to decoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::WriteCodedBufferL(CCMRMediaBuffer* aBuffer) - { - PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), In"))) - CCMRMediaBuffer::TBufferType bufferType; - - if (!aBuffer) - { - PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), Input buffer is invalid, Leave"))) - User::Leave(KErrArgument); - } - - if (iFatalError != KErrNone) - { - PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), FatalError was reported by decoder"))) - - // Return coded buffer - iObserver.MtrdvcoReturnCodedBuffer(aBuffer); - return; - } - - TTimeIntervalMicroSeconds ts = aBuffer->TimeStamp(); - - if ( ts <= iLastTimestamp) - { - // Prevent propagation of the error now - PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), Client sends invalid data (ts field), Leave"))) - User::Leave(KErrArgument); - } - else - { - iLastTimestamp = ts; - } - - if (aBuffer->BufferSize() <= 0) - { - PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), Input data buffer is invalid (empty), Leave"))) - User::Leave(KErrArgument); - } - - bufferType = aBuffer->Type(); - - if ( ( bufferType != CCMRMediaBuffer::EVideoH263 ) && - ( bufferType != CCMRMediaBuffer::EVideoMPEG4 ) ) // : Add H264 - { - PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), [%d] This data type is not supported, Leave"), aBuffer->Type() )) - User::Leave(KErrNotSupported); - } - - if (!iInputBuffer) - { - // Request new empty buffer - iInputBuffer = iDevVideoPlay->GetBufferL(iBufferOptions.iMaxInputBufferSize); - } - - if (iInputBuffer) - { - this->SendBufferL(aBuffer); - } - else - { - iCodedBuffer = aBuffer; - } - - PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::SendBufferL -// Sends buffer to decoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::SendBufferL(CCMRMediaBuffer* aBuffer) - { - PRINT((_L("CTRVideoDecoderClient::SendBufferL(), In"))) - - if (iStop) - { - PRINT((_L("CTRVideoDecoderClient::SendBufferL(), Stop was already called, nothing to do, out"))) - iObserver.MtrdvcoReturnCodedBuffer(aBuffer); - return; - } - - PRINT((_L("CTRVideoDecoderClient::SendBufferL(), iInputBuffer[%d], aBuffer[%d]"), iInputBuffer->iData.MaxLength(), - aBuffer->BufferSize() )) - - if ( iInputBuffer->iData.MaxLength() < aBuffer->BufferSize() ) - { - PRINT((_L("CTRVideoDecoderClient::SendBufferL(), buffer length exceeds max length"))) - User::Leave(KErrOverflow); - } - - iInputBuffer->iData.Copy( aBuffer->Data().Ptr(), aBuffer->BufferSize() ); - iInputBuffer->iData.SetLength( aBuffer->BufferSize() ); - - // Data unit presentation timestamp. Valid if EPresentationTimestamp is set in the options. - // If the input bitstream does not contain timestamp information, this field should be valid, - // otherwise pictures cannot be displayed at the correct time. If the input bitstream contains - // timestamp information (such as the TR syntax element of H.263 bitstreams) and valid - // iPresentationTimestamp is provided, the value of iPresentationTimestamp is used in playback. - iInputBuffer->iOptions = TVideoInputBuffer::EPresentationTimestamp; - iInputBuffer->iPresentationTimestamp = aBuffer->TimeStamp(); - /*Other data: TBC*/ - - TVideoInputBuffer* inputBuffer = iInputBuffer; - - // Reset InputBuffer ptr - iInputBuffer = NULL; - - // Write data to decoder - iDevVideoPlay->WriteCodedDataL(inputBuffer); - - // return buffer only after it's writtent to decoder (client could write next buffer synchronously from observer call) - // Return buffer to the client immediately after copying - iObserver.MtrdvcoReturnCodedBuffer(aBuffer); - - PRINT((_L("CTRVideoDecoderClient::SendBufferL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoNewPictures -// New decoded pictures available from decoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoNewPictures() - { - PRINT((_L("CTRVideoDecoderClient::MdvpoNewPictures(), In"))) - - TInt status = KErrNone; - - // 1 or more decoded pictures are available - if (!iDecodedPicture) - { - // Get new picture - TRAP(status, iDecodedPicture = iDevVideoPlay->NextPictureL()); - - if (status != KErrNone) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoNewPictures(), NextPicture status[%d]"), status)) - iObserver.MtrdvcoFatalError(status); - return; - } - - if (!iDecodedPicture) - { - // Error: DevVideo notified of new buffers, but returns NULL - PRINT((_L("CTRVideoDecoderClient::MdvpoNewPictures(), DevVideo notified of new buffers, but returns NULL"))) - iObserver.MtrdvcoFatalError(KErrAlreadyExists); - return; - } - - // Send new picture to the client - iObserver.MtrdvcoNewPicture(iDecodedPicture); - } - else - { - // Previous picture still was not returned by the client, nothing to do. - // SetActive(); // ??? - } - - PRINT((_L("CTRVideoDecoderClient::MdvpoNewPictures(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::ReturnPicture -// Returns picture -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::ReturnPicture(TVideoPicture* aPicture) - { - PRINT((_L("CTRVideoDecoderClient::ReturnPicture(), In"))) - TInt status = KErrNone; - - - iDevVideoPlay->ReturnPicture(aPicture); - - // Reset decoded picture - iDecodedPicture = NULL; - - if (iPause) - { - // Nothing else to do when paused - PRINT((_L("CTRVideoDecoderClient::ReturnPicture(), Out"))) - return; - } - - TRAP(status, iDecodedPicture = iDevVideoPlay->NextPictureL()); - - if (status != KErrNone) - { - PRINT((_L("CTRVideoDecoderClient::ReturnPicture(), NextPicture status[%d]"), status)) - iObserver.MtrdvcoFatalError(status); - return; - } - - if (iDecodedPicture) - { - // Send new picture to the client - iObserver.MtrdvcoNewPicture(iDecodedPicture); - } - - PRINT((_L("CTRVideoDecoderClient::ReturnPicture(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::StopL -// Stops decoding synchronously -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::StopL() - { - PRINT((_L("CTRVideoDecoderClient::StopL(), In"))) - - iStop = ETrue; - iPause = EFalse; - - if (iFatalError == KErrNone) - { - iDevVideoPlay->Stop(); - } - - PRINT((_L("CTRVideoDecoderClient::StopL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::AsyncStopL -// Stops decoding asynchronously -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::AsyncStopL() - { - PRINT((_L("CTRVideoDecoderClient::StopL(), Async In"))) - - if (iFatalError == KErrNone) - { - iDevVideoPlay->InputEnd(); - } - - iStop = ETrue; - - PRINT((_L("CTRVideoDecoderClient::StopL(), Async Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoStreamEnd -// Indicates when stream end is reached -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoStreamEnd() - { - PRINT((_L("CTRVideoDecoderClient::MdvpoStreamEnd()"))) - iObserver.MtrdvcoDecStreamEnd(); - } - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoReturnPicture -// Returns a used input video picture back to the caller. The picture memory can be re-used or freed (only relevant to postprocessor) -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoReturnPicture(TVideoPicture* /*aPicture*/) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoReturnPicture()"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoSupplementalInformation -// Sends SupplementalInformation -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoSupplementalInformation(const TDesC8& /*aData*/, - const TTimeIntervalMicroSeconds& /*aTimestamp*/, - const TPictureId& /*aPictureId*/) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoSupplementalInformation()"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoPictureLoss -// Back channel information from the decoder, indicating a picture loss without specifying the lost picture -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoPictureLoss() - { - PRINT((_L("CTRVideoDecoderClient::MdvpoPictureLoss(), report an error"))) - iObserver.MtrdvcoFatalError(KErrAbort); - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoPictureLoss -// Back channel information from the decoder, indicating the pictures that have been lost -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoPictureLoss(const TArray< TPictureId >& /*aPictures*/) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoPictureLoss(), pictureId: report an error"))) - iObserver.MtrdvcoFatalError(KErrAbort); - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoSliceLoss -// Reports that slice is lost -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoSliceLoss(TUint /*aFirstMacroblock*/, TUint /*aNumMacroblocks*/, - const TPictureId& /*aPicture*/) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoSliceLoss()"))) - // This error is not considered a s fatal for decoder or application, nothing to do - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoReferencePictureSelection -// Back channel information from the decoder, indicating a reference picture selection request. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoReferencePictureSelection(const TDesC8& /*aSelectionData*/) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoReferencePictureSelection()"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoTimedSnapshotComplete -// Called when a timed snapshot request has been completed. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoTimedSnapshotComplete(TInt /*aError*/, TPictureData* /*aPictureData*/, - const TTimeIntervalMicroSeconds& /*aPresentationTimestamp*/, - const TPictureId& /*aPictureId*/) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoTimedSnapshotComplete()"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MdvpoFatalError -// Reports the fatal error to the client -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MdvpoFatalError(TInt aError) - { - PRINT((_L("CTRVideoDecoderClient::MdvpoFatalError(), error[%d]"), aError)) - iFatalError = aError; - iObserver.MtrdvcoFatalError(iFatalError); - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::EstimateDecodeFrameTimeL -// Returns a time estimate on long it takes to decode one frame -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TReal CTRVideoDecoderClient::EstimateDecodeFrameTimeL(const TTRVideoFormat& aInput, TInt aCodecType) - { - if (iUid == TUid::Null()) - { - PRINT((_L("CTRVideoDecoderClient::EstimateDecodeFrameTimeL(), no decoder selected yet"))) - User::Leave(KErrNotReady); - } - - TReal time = 0.0; - - // Select the predefined constant using the current settings - if (aCodecType == EH263) - { - time = iAcceleratedCodecSelected ? KTRDecodeTimeFactorH263HW : KTRDecodeTimeFactorH263SW; - } - else if (aCodecType == EH264) - { - time = iAcceleratedCodecSelected ? KTRDecodeTimeFactorH264HW : KTRDecodeTimeFactorH264SW; - } - else - { - time = iAcceleratedCodecSelected ? KTRDecodeTimeFactorMPEG4HW : KTRDecodeTimeFactorMPEG4SW; - } - - // Multiply the time by the resolution of the input frame - time *= static_cast(aInput.iSize.iWidth + aInput.iSize.iHeight) * KTRTimeFactorScale; - - PRINT((_L("CTRVideoDecoderClient::EstimateDecodeFrameTimeL(), decode frame time: %.2f"), time)) - - return time; - } - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::SetDecoderScaling -// Checks if decoder supports scaling and enables scaling if supported -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CTRVideoDecoderClient::SetDecoderScaling(TSize& aInputSize, TSize& aOutputSize) - { - PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), In"))) - - CPostProcessorInfo* ppInfo = NULL; - TBool scalingSupported = EFalse; - - // Check that the given sizes are valid - if( (aInputSize.iWidth == 0) || (aInputSize.iHeight == 0) || - (aOutputSize.iWidth == 0) || (aOutputSize.iHeight == 0) ) - { - PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), invalid input/output size"))) - return EFalse; - } - - iScalingInUse = EFalse; - iScalingWithDeblocking = EFalse; - - if( aInputSize == aOutputSize ) - { - PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), scaling disabled"))) - return EFalse; - } - - // Get post processor info - TRAPD( status, ppInfo = iDevVideoPlay->PostProcessorInfoLC( iUid ); CleanupStack::Pop( ppInfo ) ); - - if( (status != KErrNone) || !ppInfo ) - { - PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), getting info from [0x%x] failed"), iUid.iUid )) - return EFalse; - } - - if( ppInfo->SupportsArbitraryScaling() ) - { - PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), arbitrary scaling supported"))) - scalingSupported = ETrue; - } - else if( (aInputSize.iWidth * aOutputSize.iHeight) != (aInputSize.iHeight * aOutputSize.iWidth) ) - { - // Aspect ratio needs to be changed but decoder does not support arbitrary scaling => not supported - scalingSupported = EFalse; - } - else - { - RArray scaleFactors = ppInfo->SupportedScaleFactors(); - - for( TInt i = 0; i < scaleFactors.Count(); ++i ) - { - if( (aInputSize.iWidth * scaleFactors[i].iScaleNum) == (aOutputSize.iWidth * scaleFactors[i].iScaleDenom) ) - { - PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), supported scale factors found"))) - scalingSupported = ETrue; - break; - } - } - } - - if( scalingSupported ) - { - if( ppInfo->SupportsCombination( EPpScale | EPpDeblocking ) ) - { - // Deblocking should be used with scaling if supported - PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), deblocking supported"))) - iScalingWithDeblocking = ETrue; - } - - iScalingInUse = ETrue; - iScaledOutputSize = aOutputSize; - } - - // Delete codec info - delete ppInfo; - - PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), Out"))) - - return scalingSupported; - } - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::EnableResourceObserver -// Enable / Disable resourece observer -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::EnableResourceObserver(TBool aEnable) - { - PRINT((_L("CTRVideoDecoderClient::EnableResourceObserver(), In"))) - - iVideoResourceHandlerCI = (MMmfVideoResourceHandler*)iDevVideoPlay->CustomInterface( iHwDeviceId, KUidMmfVideoResourceManagement ); - PRINT((_L("CTRVideoDecoderClient::EnableResourceObserver(), iVideoResourceHandlerCI[0x%x]"), iVideoResourceHandlerCI)) - - if (iVideoResourceHandlerCI) - { - if (aEnable) - { - iVideoResourceHandlerCI->MmvrhSetObserver(this); - PRINT((_L("CTRVideoDecoderClient::EnableResourceObserver(), Enabled"))) - } - else - { - iVideoResourceHandlerCI->MmvrhSetObserver(NULL); - } - } - - PRINT((_L("CTRVideoDecoderClient::EnableResourceObserver(), Out"))) - } - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MmvroResourcesLost -// Indicates that a media device has lost its resources -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MmvroResourcesLost(TUid /*aMediaDevice*/) - { - iObserver.MtrdvcoResourcesLost(ETrue); - } - - -// ----------------------------------------------------------------------------- -// CTRVideoDecoderClient::MmvroResourcesRestored -// Indicates that a media device has regained its resources -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoDecoderClient::MmvroResourcesRestored(TUid /*aMediaDevice*/) - { - iObserver.MtrdvcoResourcesRestored(); - } - - -// End of file diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedtranscoder/src/Ctrvideoencoderclient.cpp --- a/videoeditorengine/vedtranscoder/src/Ctrvideoencoderclient.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1824 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Video encoder client. -* -*/ - - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include -#include "ctrtranscoder.h" -#include "ctrvideoencoderclient.h" -#include "ctrdevvideoclientobserver.h" -#include "ctrsettings.h" -#include "ctrhwsettings.h" - - -// MACROS -#define TRASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CTRANSCODERVIDEOENCODERCLIENT"), -10000)) - - -// CONSTANTS - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CTRVideoEncoderClient* CTRVideoEncoderClient::NewL(MTRDevVideoClientObserver& aObserver) - { - PRINT((_L("CTRVideoEncoderClient::NewL(), In"))) - CTRVideoEncoderClient* self = new (ELeave) CTRVideoEncoderClient(aObserver); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - - PRINT((_L("CTRVideoEncoderClient::NewL(), Out"))) - return self; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::CTRVideoEncoderClient -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CTRVideoEncoderClient::CTRVideoEncoderClient(MTRDevVideoClientObserver& aObserver) : - iObserver(aObserver) - { - iDevVideoRecord = NULL; - iOutputMediaBuffer = NULL; - iCompresedFormat = NULL; - iUid = TUid::Null(); - iFallbackUid = TUid::Null(); - iRealTime = EFalse; - iState = ETRNone; - iCodingOptions.iSyncIntervalInPicture = 0; - iCodingOptions.iHeaderExtension = 0; - iCodingOptions.iDataPartitioning = EFalse; - iCodingOptions.iReversibleVLC = EFalse; - iSrcRate = 0.0; - iVolHeaderSent = EFalse; - iRemoveHeader = EFalse; - iVolLength = 0; - iRateOptions.iControl = EBrControlStream; - iRateOptions.iPictureRate = KTRTargetFrameRateDefault; - iRateOptions.iBitrate = KTRMaxBitRateH263Level10; - iBitRateSetting = EFalse; - iFatalError = KErrNone; - iErrorRate = 0.0; - iVolHeader = KNullDesC8; - iVideoBufferManagementCI = NULL; - iLastTimestamp = -1; - iAcceleratedCodecSelected = EFalse; - iSetRandomAccessPoint = EFalse; - iNumH264SPSPPS = 0; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::ConstructL() - { - iDevVideoRecord = CMMFDevVideoRecord::NewL(*this); - iOutputMediaBuffer = new(ELeave)CCMRMediaBuffer; - } - - -// --------------------------------------------------------- -// CTRVideoEncoderClient::~CTRVideoEncoderClient() -// Destructor -// --------------------------------------------------------- -// -CTRVideoEncoderClient::~CTRVideoEncoderClient() - { - PRINT((_L("CTRVideoEncoderClient::~CTRVideoEncoderClient(), In"))) - - if (iDevVideoRecord) - { - delete iDevVideoRecord; - iDevVideoRecord = NULL; - } - - if (iCompresedFormat) - { - delete iCompresedFormat; - } - - if (iOutputMediaBuffer) - { - delete iOutputMediaBuffer; - } - - PRINT((_L("CTRVideoEncoderClient::~CTRVideoEncoderClient(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::SupportsInputFormat -// Checks whether given input format is supported -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CTRVideoEncoderClient::SupportsCodec(const TDesC8& aFormat, const TDesC8& aShortFormat, TInt aUid, TInt aFallbackUid) - { - TBool supports = EFalse; - TBool preferredFound = EFalse; - TBool fallbackFound = EFalse; - - if (iDevVideoRecord) - { - RArray encoders; - - TRAPD( status, iDevVideoRecord->FindEncodersL(aShortFormat, 0/*aPreProcType*/, encoders, EFalse/*aExactMatch*/) ); - - if( status != KErrNone ) - { - PRINT((_L("CTRVideoEncoderClient::SupportsCodec(), status[%d]"), status)) - supports = EFalse; - } - else if( encoders.Count() <= 0 ) - { - PRINT((_L("CTRVideoEncoderClient::SupportsCodec(), No encoders found"))) - supports = EFalse; - } - else - { - - PRINT((_L("CTRVideoEncoderClient::SupportsCodec(), %d encoders found"), encoders.Count() )) - - // Check if any of the found encoders matches with the given Uids - for( TInt i = 0; i < encoders.Count(); ++i ) - { - - PRINT((_L("CTRVideoEncoderClient::SupportsCodec(), found codec 0x%x"), encoders[i].iUid)) - - if( encoders[i].iUid == aUid ) - { - PRINT((_L("CTRVideoEncoderClient::SupportsCodec(), preferred found"))) - iUid = encoders[i]; - preferredFound = ETrue; - } - if( encoders[i].iUid == aFallbackUid ) - { - PRINT((_L("CTRVideoEncoderClient::SupportsCodec(), fallback found"))) - iFallbackUid = encoders[i]; - fallbackFound = ETrue; - } - - if( preferredFound && fallbackFound ) - { - // No need to search anymore - break; - } - } - } - - encoders.Reset(); - encoders.Close(); - } - -#if !( defined (__WINS__) || defined (__WINSCW__) ) - if( !preferredFound ) -#else - if( !preferredFound && !fallbackFound ) -#endif - { - // Preferred encoder was not found => Probably the given encoder Uid is wrong - PRINT((_L("CTRVideoEncoderClient::SupportsCodec(), No supported encoders found"))) - supports = EFalse; - } - else - { - PRINT((_L("CTRVideoEncoderClient::SupportsCodec(), Supported encoder found: 0x%x"), iUid.iUid)) - iMimeType = aFormat; - iShortMimeType = aShortFormat; - supports = ETrue; - } - - return supports; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::SetCodecParametersL -// Sets codec parameters -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::SetCodecParametersL(TInt aCodecType, TInt aCodecLevel, const TTRVideoFormat& aInputFormat, - const TTRVideoFormat& aOutputFormat) - { - PRINT((_L("CTRVideoEncoderClient::SetCodecParametersL(), In"))) - TInt status = KErrNone; - iCodecType = aCodecType; - iCodecLevel = aCodecLevel; - iPictureSize = aOutputFormat.iSize; - iOutputDataType = aOutputFormat.iDataType; - - // RAW YUV - iUncompressedFormat.iDataFormat = EYuvRawData; - - // U & V samples are taken from the middle of four luminance samples - // (as specified in H.263 spec) - switch ( aInputFormat.iDataType ) - { - case CTRTranscoder::ETRYuvRawData420: - { - iUncompressedFormat.iYuvFormat.iPattern = EYuv420Chroma2; - break; - } - - case CTRTranscoder::ETRYuvRawData422: - { - iUncompressedFormat.iYuvFormat.iPattern = EYuv422Chroma2; - break; - } - - default: - { - iUncompressedFormat.iYuvFormat.iPattern = EYuv420Chroma2; - break; - } - } - - // Output format - if (!iCompresedFormat) - { - iCompresedFormat = CCompressedVideoFormat::NewL( iMimeType ); - } - - TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iUid) ); - - if (status != KErrNone) - { - // Try again with the fallback encoder if one exists - if( (iFallbackUid != TUid::Null()) && (iFallbackUid.iUid != iUid.iUid) ) - { - TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iFallbackUid) ); - - if (status != KErrNone) - { - PRINT((_L("CTRVideoEncoderClient::SetCodecParametersL(), Failed to get codec info"))) - User::Leave(KErrNotSupported); - } - - PRINT((_L("CTRVideoEncoderClient::SetCodecParametersL(), Reverting to fallback encoder"))) - - // Fallback ok, take it - iUid = iFallbackUid; - } - else - { - PRINT((_L("CTRVideoEncoderClient::SetCodecParametersL(), No suitable encoders found"))) - User::Leave(KErrNotSupported); - } - } - - // AA Set codec here (final hwdevice Uid should be known before checking CI buffermanag support) - // Select encoder first - this->SelectEncoderL(); - - PRINT((_L("CTRVideoEncoderClient::SetCodecParametersL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::CheckCodecInfoL -// Checks codec info -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TBool CTRVideoEncoderClient::CheckCodecInfoL(TUid aUid) - { - CVideoEncoderInfo* encoderInfo = NULL; // Encoder info for retrieving capabilities - iMaxFrameRate = 0; - TInt status = KErrNone; - TUint32 dataUnitType = 0; - TBool accelerated = EFalse; - - switch(iOutputDataType) - { - case CTRTranscoder::ETRDuCodedPicture: - { - dataUnitType = EDuCodedPicture; - break; - } - - case CTRTranscoder::ETRDuVideoSegment: - { - dataUnitType = EDuVideoSegment; - break; - } - - default: - { - PRINT((_L("CTRVideoEncoderClient::CheckCodecInfoL(), should leave at the earlier stage, panic"))) - TRASSERT(0); - } - } - - // Check encoder - PRINT((_L("CTRVideoEncoderClient::CheckCodecInfoL(), getting info from [0x%x]"), aUid.iUid )) - encoderInfo = iDevVideoRecord->VideoEncoderInfoLC( aUid ); - - PRINT((_L("CTRVideoEncoderClient::CheckCodecInfoL(), info [0x%x]"), encoderInfo )) - - if (!encoderInfo) - { - PRINT((_L("CTRVideoEncoderClient::CheckCodecInfoL(), getting info from [0x%x] failed[%d]"), aUid.iUid, status )) - User::Leave(KErrNotSupported); - } - else - { - // Check input format - // 1. retrieve supported formats from encoder hwdevice (since exact options are unknown) - RArray supportedInputFormats = encoderInfo->SupportedInputFormats(); - - TInt formatCount = supportedInputFormats.Count(); - - if (formatCount <= 0) - { - supportedInputFormats.Close(); - PRINT((_L("CTRVideoEncoderClient::CheckCodecInfoL(), There are no supported input formats") )) - User::Leave(KErrNotSupported); - } - else - { - TUncompressedVideoFormat uncFormat; - TBool found = EFalse; - TInt pattern1, pattern2; - TInt dataLayout; - - if (iUncompressedFormat.iYuvFormat.iPattern == EYuv420Chroma2) - { - pattern1 = EYuv420Chroma1; - pattern2 = EYuv420Chroma2; - dataLayout = EYuvDataPlanar; - } - else - { - pattern1 = EYuv422Chroma1; - pattern2 = EYuv422Chroma2; - dataLayout = EYuvDataInterleavedBE; - } - - // Check the most important paramers - for ( TInt i = 0; i < formatCount; i ++ ) - { - uncFormat = supportedInputFormats[i]; - - if ( (uncFormat.iDataFormat == iUncompressedFormat.iDataFormat) && - (uncFormat.iYuvFormat.iDataLayout == dataLayout) && - ( (uncFormat.iYuvFormat.iPattern == pattern1) || - (uncFormat.iYuvFormat.iPattern == pattern2) ) ) - { - // Assign the rest of parameters - iUncompressedFormat = uncFormat; - - if ( iCodecType != EH263 ) - { - // Set aspect ratio to 1:1 (square) - iUncompressedFormat.iYuvFormat.iAspectRatioNum = 1; - iUncompressedFormat.iYuvFormat.iAspectRatioDenom = 1; - } - - found = ETrue; - break; - } - } - - if (!found) - { - supportedInputFormats.Close(); - PRINT((_L("CTRVideoEncoderClient::CheckCodecInfoL(), Supported format is not found") )) - User::Leave(KErrNotSupported); - } - } - - /*if ( !encoderInfo->SupportsOutputFormat(*iCompresedFormat) ) // comment until symbian error is fixed - { - PRINT((_L("CTRVideoEncoderClient::CheckCodecInfoL(), Output format is not supported"))) - status = KErrNotSupported; - } - else */ - if ( (encoderInfo->SupportedDataUnitTypes() & dataUnitType) != dataUnitType ) - { - PRINT((_L("CTRVideoEncoderClient::CheckCodecInfoL(), There's no support for this DUType"))) - status = KErrNotSupported; - } - else - { - // Get max rate for requested image format - RArray rateAndSize = encoderInfo->MaxPictureRates(); - TUint rates = rateAndSize.Count(); - - TSize picSize = iPictureSize; - if ( picSize == TSize(640, 352) ) // Use VGA max frame rate for VGA 16:9 - picSize = TSize(640, 480); - - for ( TUint i = 0; i < rates; i++ ) - { - if ( rateAndSize[i].iPictureSize == picSize ) - { - status = KErrNone; - iMaxFrameRate = rateAndSize[i].iPictureRate; - PRINT((_L("CTRVideoEncoderClient::CheckCodecInfoL(), Needed picture size found!"))) - break; - } - - status = KErrNotSupported; - } - } - } - - accelerated = encoderInfo->Accelerated(); - - // Delete codec info - CleanupStack::PopAndDestroy(encoderInfo); - - if (status != KErrNone) - { - User::Leave(status); - } - - return accelerated; - } - - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::SetBitRate -// Sets video bitrate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::SetBitRate(TUint aBitRate) - { - if ( (iState == ETRInitialized) || (iState == ETRRunning) || (iState == ETRPaused) ) - { - iRateOptions.iBitrate = aBitRate; - iRateOptions.iPictureQuality = KTRPictureQuality; - iRateOptions.iQualityTemporalTradeoff = KTRQualityTemporalTradeoff; - - if (iRealTime) - { - iRateOptions.iLatencyQualityTradeoff = KTRLatencyQualityTradeoffRT; - } - else - { - iRateOptions.iLatencyQualityTradeoff = KTRLatencyQualityTradeoffNonRT; - } - - // Set bit rate to Encoder - iDevVideoRecord->SetRateControlOptions(0/*Layer 0 is supported*/, iRateOptions); - iBitRateSetting = ETrue; - } - else - { - // Keep bit rate and set it later - iRateOptions.iBitrate = aBitRate; - } - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::SetRealTime -// Sets encoder mode to operate real-time -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::SetRealTime(TBool aRealTime) - { - iRealTime = aRealTime; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::SetFrameRate -// Sets frame rate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::SetFrameRate(TReal& aFrameRate) - { - if ( (iState == ETRInitialized) || (iState == ETRRunning) || (iState == ETRPaused) ) - { - iRateOptions.iPictureRate = aFrameRate; - - // The target frame rate must not be greater than the source frame rate - if ( (iSrcRate > 0.0) && (iRateOptions.iPictureRate > iSrcRate) ) - { - iRateOptions.iPictureRate = iSrcRate; - } - - if (iRealTime) - { - iRateOptions.iLatencyQualityTradeoff = KTRLatencyQualityTradeoffRT; - } - else - { - iRateOptions.iLatencyQualityTradeoff = KTRLatencyQualityTradeoffNonRT; - } - - // Set framerate rate to Encoder - iDevVideoRecord->SetRateControlOptions(0/*Layer 0 is supported*/, iRateOptions); - } - else - { - // Keep frame rate and set it later - iRateOptions.iPictureRate = aFrameRate; - - // The target frame rate must not be greater than the source frame rate - if ( (iSrcRate > 0.0) && (iRateOptions.iPictureRate > iSrcRate) ) - { - iRateOptions.iPictureRate = iSrcRate; - } - } - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::SetChannelBitErrorRate -// Sets channel bit error rate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::SetChannelBitErrorRate(TReal aErrorRate) - { - if ( (iState == ETRInitialized) || (iState == ETRRunning) || (iState == ETRPaused) ) - { - // Run-time setting - iDevVideoRecord->SetChannelBitErrorRate(0/*Error protection level number*/, aErrorRate, 0.0/*Std deviation*/); - } - else - { - iErrorRate = aErrorRate; - } - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::SetVideoCodingOptionsL -// Sets video coding options -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::SetVideoCodingOptionsL(TTRVideoCodingOptions& aOptions) - { - iCodingOptions = aOptions; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::GetVideoBitRateL -// Gets video bitrate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TUint CTRVideoEncoderClient::GetVideoBitRateL() - { - return iRateOptions.iBitrate; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::GetFrameRateL -// Gets frame rate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TReal CTRVideoEncoderClient::GetFrameRateL() - { - return iRateOptions.iPictureRate; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::SetInputFrameRate -// Sets source framerate -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::SetInputFrameRate(TReal aFrameRate) - { - iSrcRate = aFrameRate; - - // The target frame rate must not be greater than the source frame rate - if ( (iSrcRate > 0.0) && (iRateOptions.iPictureRate > iSrcRate) ) - { - iRateOptions.iPictureRate = iSrcRate; - } - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::InitializeL -// Initializes encoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::InitializeL() - { - PRINT((_L("CTRVideoEncoderClient::InitializeL(), In"))) - TVideoDataUnitType dataUnitType = EDuCodedPicture; - TEncoderBufferOptions bufferOptions; - TUint maxBufferSize = 0; - - - // Give Init settings - // 1. Set output format. Output format was already set in SetCodecParametersL - switch(iOutputDataType) - { - case CTRTranscoder::ETRDuCodedPicture: - { - dataUnitType = EDuCodedPicture; - bufferOptions.iMinNumOutputBuffers = KTRMinNumberOfBuffersCodedPicture; - break; - } - - case CTRTranscoder::ETRDuVideoSegment: - { - dataUnitType = EDuVideoSegment; - bufferOptions.iMinNumOutputBuffers = KTRMinNumberOfBuffersVideoSegment; - break; - } - - default: - { - // Should never happend. Encoder does not support uncompressed output format. - TRASSERT(0); - } - } - - TVideoDataUnitEncapsulation dataUnitEncapsulation = EDuElementaryStream; - - // Use generic payload encapsulation for H.264 - if (iCodecType == EH264) - { - dataUnitEncapsulation = EDuGenericPayload; - } - - iDevVideoRecord->SetOutputFormatL(iHwDeviceId, *iCompresedFormat, dataUnitType, dataUnitEncapsulation, EFalse); - - // 2. Set input format - iDevVideoRecord->SetInputFormatL(iHwDeviceId, iUncompressedFormat, iPictureSize); - - // 3. Buffer options - bufferOptions.iMaxPreEncoderBufferPictures = bufferOptions.iMinNumOutputBuffers; - bufferOptions.iHrdVbvSpec = EHrdVbvNone; - bufferOptions.iHrdVbvParams.Set(NULL, 0); - - // Check max coded picture size for specified codec level - switch(iCodecLevel) - { - case KTRH263CodecLevel10: - { - maxBufferSize = KTRMaxBufferSizeLevel10; - break; - } - - case KTRH263CodecLevel20: - { - maxBufferSize = KTRMaxBufferSizeLevel20; - break; - } - - case KTRH263CodecLevel30: - { - maxBufferSize = KTRMaxBufferSizeLevel30; - break; - } - - case KTRH263CodecLevel40: - { - maxBufferSize = KTRMaxBufferSizeLevel40; - break; - } - - case KTRH263CodecLevel45: - { - maxBufferSize = KTRMaxBufferSizeLevel45; - break; - } - - case KTRH263CodecLevel50: - { - maxBufferSize = KTRMaxBufferSizeLevel50; - break; - } - - case KTRH263CodecLevel60: - { - maxBufferSize = KTRMaxBufferSizeLevel60; - break; - } - - case KTRH263CodecLevel70: - { - maxBufferSize = KTRMaxBufferSizeLevel70; - break; - } - - case KTRH264CodecLevel10: - { - maxBufferSize = KTRMaxBufferSizeH264Level10; - break; - } - - case KTRH264CodecLevel10b: - { - maxBufferSize = KTRMaxBufferSizeH264Level10b; - break; - } - - case KTRH264CodecLevel11: - { - maxBufferSize = KTRMaxBufferSizeH264Level11; - break; - } - - case KTRH264CodecLevel12: - { - maxBufferSize = KTRMaxBufferSizeH264Level12; - break; - } - - case KTRH264CodecLevel13: - { - maxBufferSize = KTRMaxBufferSizeH264Level13; - break; - } - - case KTRH264CodecLevel20: - { - maxBufferSize = KTRMaxBufferSizeH264Level20; - break; - } - - case KTRH264CodecLevel30: - { - maxBufferSize = KTRMaxBufferSizeH264Level30; - break; - } - - case KTRH264CodecLevel31: - { - maxBufferSize = KTRMaxBufferSizeH264Level31; - break; - } - - case KTRMPEG4CodecLevel1: - case KTRMPEG4CodecLevel0: - { - maxBufferSize = KTRMaxBufferSizeLevel0; - break; - } - - case KTRMPEG4CodecLevel0b: - { - maxBufferSize = KTRMaxBufferSizeLevel0b; - break; - } - - case KTRMPEG4CodecLevel2: - { - maxBufferSize = KTRMaxBufferSizeLevel2; - break; - } - - case KTRMPEG4CodecLevel3: - { - maxBufferSize = KTRMaxBufferSizeLevel3; - break; - } - - case KTRMPEG4CodecLevel4a: - { - maxBufferSize = KTRMaxBufferSizeLevel4a; - break; - } - - default: - { - maxBufferSize = KTRMaxBufferSizeLevel0; - } - } - - bufferOptions.iMaxOutputBufferSize = maxBufferSize; - bufferOptions.iMaxCodedPictureSize = bufferOptions.iMaxOutputBufferSize; - - if ((iCodecType != EH263) && (iCodingOptions.iSyncIntervalInPicture > 0)) - { - // Set segment target size - if ( iCodingOptions.iSyncIntervalInPicture < KTRMinSegmentSize ) - { - bufferOptions.iMaxCodedSegmentSize = KTRMinSegmentSize; - } - else if (iCodingOptions.iSyncIntervalInPicture > bufferOptions.iMaxCodedPictureSize) - { - bufferOptions.iMaxCodedSegmentSize = bufferOptions.iMaxCodedPictureSize; - } - else - { - bufferOptions.iMaxCodedSegmentSize = iCodingOptions.iSyncIntervalInPicture; - } - } - else - { - // Set segment size to max video coded picture size - bufferOptions.iMaxCodedSegmentSize = bufferOptions.iMaxCodedPictureSize; - } - - PRINT((_L("CTRVideoEncoderClient::InitializeL(), iMaxOutputBufferSize[%d], iMinNumOutputBuffers[%d]"), - bufferOptions.iMaxOutputBufferSize, bufferOptions.iMinNumOutputBuffers )) - - iDevVideoRecord->SetBufferOptionsL(bufferOptions); - - // 4. Random access point - TReal accessRate = KTRDefaultAccessRate; /* ~0.2 fps */ - - if (iCodingOptions.iMinRandomAccessPeriodInSeconds > 0) - { - accessRate = 1.0 / TReal(iCodingOptions.iMinRandomAccessPeriodInSeconds); - } - - PRINT((_L("CTRVideoEncoderClient::InitializeL(), RandomAcessRate[%f]"), accessRate)); - iDevVideoRecord->SetMinRandomAccessRate(accessRate); - - // 5. Other coding options - if (iCodecType == EH263) - { - if (iCodingOptions.iSyncIntervalInPicture > 0) - { - TH263VideoMode h263CodingOptions; - - h263CodingOptions.iAllowedPictureTypes = EH263PictureTypeI | EH263PictureTypeP; - h263CodingOptions.iForceRoundingTypeToZero = ETrue; - h263CodingOptions.iPictureHeaderRepetition = 0; - h263CodingOptions.iGOBHeaderInterval = iCodingOptions.iSyncIntervalInPicture; - - TPckgC h263OptionsPckg(h263CodingOptions); - iDevVideoRecord->SetCodingStandardSpecificOptionsL(h263OptionsPckg); - } - } - else if (iCodecType == EH264) - { - // H.264 options - TAvcVideoMode avcCodingOptions; - - avcCodingOptions.iAllowedPictureTypes = EAvcPictureTypeI | EAvcPictureTypeP; - avcCodingOptions.iFlexibleMacroblockOrder = EFalse; - avcCodingOptions.iRedundantPictures = EFalse; - avcCodingOptions.iDataPartitioning = iCodingOptions.iDataPartitioning; - avcCodingOptions.iFrameMBsOnly = ETrue; - avcCodingOptions.iMBAFFCoding = EFalse; - avcCodingOptions.iEntropyCodingCABAC = EFalse; - avcCodingOptions.iWeightedPPrediction = EFalse; - avcCodingOptions.iWeightedBipredicitonMode = 0; - avcCodingOptions.iDirect8x8Inference = EFalse; - - TPckgC avc4OptionsPckg(avcCodingOptions); - iDevVideoRecord->SetCodingStandardSpecificOptionsL(avc4OptionsPckg); - } - else - { - // Mpeg4 options - TMPEG4VisualMode mpeg4CodingOptions; - mpeg4CodingOptions.iShortHeaderMode = EFalse; - mpeg4CodingOptions.iMPEG4VisualNormalMPEG4Mode.iHeaderExtension = iCodingOptions.iHeaderExtension; - mpeg4CodingOptions.iMPEG4VisualNormalMPEG4Mode.iDataPartitioning = iCodingOptions.iDataPartitioning; - mpeg4CodingOptions.iMPEG4VisualNormalMPEG4Mode.iReversibleVLC = iCodingOptions.iReversibleVLC; - - mpeg4CodingOptions.iMPEG4VisualNormalMPEG4Mode.iAllowedVOPTypes = EMPEG4VisualVOPTypeI; - - TPckgC mpeg4OptionsPckg(mpeg4CodingOptions); - iDevVideoRecord->SetCodingStandardSpecificOptionsL(mpeg4OptionsPckg); - } - - // Set source - if (iSrcRate <= 0.0) - { - iSrcRate = KTRDefaultSrcRate; /* ~15.0 fps */ - } - - iDevVideoRecord->SetSourceMemoryL(iSrcRate, ETrue, iRealTime); - - // Initialize devVideoRecord - iDevVideoRecord->Initialize(); - - // Set media buffer type - if (iCodecType == EH263) - { - // Set H.263 - iBufferType = CCMRMediaBuffer::EVideoH263; - } - else if (iCodecType == EH264) - { - // Set H.264 - iBufferType = CCMRMediaBuffer::EVideoMPEG4; // : What to set here? - } - else - { - // Set MPEG4 - iBufferType = CCMRMediaBuffer::EVideoMPEG4; - } - - PRINT((_L("CTRVideoEncoderClient::InitializeL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::SelectEncoderL -// Selects encoder -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::SelectEncoderL() - { - PRINT((_L("CTRVideoEncoderClient::SelectEncoderL(), In"))) - TInt status = KErrNone; - - if (iUid != TUid::Null()) - { - TRAP(status, iHwDeviceId = iDevVideoRecord->SelectEncoderL(iUid)); - } - else - { - // Probably the error already exists, if iUid == NULL; - status = KErrAlreadyExists; - } - - if (status != KErrNone) - { - // Try again with the fallback encoder if one exists - if( (iFallbackUid != TUid::Null()) && (iFallbackUid.iUid != iUid.iUid) ) - { - PRINT((_L("CTRVideoEncoderClient::SelectEncoderL(), Reverting to fallback encoder"))) - iUid = iFallbackUid; - } - else - { - PRINT((_L("CTRVideoEncoderClient::SelectDecoderL(), Failed to select encoder"))) - User::Leave(KErrNotSupported); - } - - TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iUid) ); - - if (status != KErrNone) - { - PRINT((_L("CTRVideoEncoderClient::SelectDecoderL(), Failed to get codec info"))) - User::Leave(KErrNotSupported); - } - - TRAP(status, iHwDeviceId = iDevVideoRecord->SelectEncoderL(iUid)); - - if (status != KErrNone) - { - PRINT((_L("CTRVideoEncoderClient::SelectDecoderL(), Failed to select encoder"))) - User::Leave(KErrNotSupported); - } - } - - PRINT((_L("CTRVideoEncoderClient::SelectEncoderL(), Out"))) - } - - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::MdvroInitializeComplete -// Informs init status with received error code -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::MdvroInitializeComplete(TInt aError) - { - if (aError == KErrNone) - { - iState = ETRInitialized; - } - else if ((aError == KErrHardwareNotAvailable) || (aError == KErrNotSupported)) - { - PRINT((_L("CTRVideoEncoderClient::MdvroInitializeComplete(), Error in initialization"))) - - // Map both error codes to the same - aError = KErrNotSupported; - - // Try again with the fallback encoder if one exists - while( (iFallbackUid != TUid::Null()) && (iFallbackUid.iUid != iUid.iUid) ) - { - PRINT((_L("CTRVideoEncoderClient::MdvroInitializeComplete(), Reverting to fallback encoder"))) - - iUid = iFallbackUid; - - // Devvideo must be recreated from scratch - if (iDevVideoRecord) - { - delete iDevVideoRecord; - iDevVideoRecord = NULL; - } - - TRAPD( status, iDevVideoRecord = CMMFDevVideoRecord::NewL(*this) ); - if (status != KErrNone) - { - // Something went wrong, let CTRTranscoderImp handle the error - PRINT((_L("CTRVideoEncoderClient::MdvroInitializeComplete(), Failed to create DevVideoRecord"))) - break; - } - - TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iUid) ); - if (status != KErrNone) - { - // Fallback encoder can not be used, let CTRTranscoderImp handle the error - PRINT((_L("CTRVideoEncoderClient::MdvroInitializeComplete(), Failed to get codec info"))) - break; - } - - TRAP( status, SelectEncoderL() ); - if (status != KErrNone) - { - // Fallback encoder can not be used, let CTRTranscoderImp handle the error - PRINT((_L("CTRVideoEncoderClient::MdvroInitializeComplete(), Failed to select encoder"))) - break; - } - - // We are now ready to reinitialize the encoder, let CTRTranscoderImp do it - aError = KErrHardwareNotAvailable; - break; - } - } - - iObserver.MtrdvcoEncInitializeComplete(aError); - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::StartL -// Starts encoding -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::StartL() - { - PRINT((_L("CTRVideoEncoderClient::StartL(), In"))) - - if ( (iCodecType == EMpeg4) && (iVolHeader == KNullDesC8) ) - { - // Before starting the encoder, request config data - HBufC8* condigDecInfo = iDevVideoRecord->CodingStandardSpecificInitOutputLC(); - - if (condigDecInfo) - { - PRINT((_L("CTRVideoEncoderClient::StartL(), Vol header length[%d]"), condigDecInfo->Length())) - - if ( (condigDecInfo->Length() > 0) && (condigDecInfo->Length() <= KMaxDesC8Length /*256*/) ) - { - iVolHeader.Des().Copy( condigDecInfo->Des() ); - - // Keep vol length for further use - iVolLength = iVolHeader.Des().Length(); - PRINT((_L("CTRVideoEncoderClient::StartL(), VolLength[%d]"), iVolLength)) - } - - CleanupStack::PopAndDestroy(condigDecInfo); - } - else - { - PRINT((_L("CTRVideoEncoderClient::StartL(), Invalid codingDecInfo, leave"))) - User::Leave(KErrAlreadyExists); - } - - PRINT((_L("CTRVideoEncoderClient::StartL(), Out"))) - } - - - // Set Rate control options - if (!iBitRateSetting) - { - iRateOptions.iPictureQuality = KTRPictureQuality; - iRateOptions.iQualityTemporalTradeoff = KTRQualityTemporalTradeoff; - - if (iRealTime) - { - iRateOptions.iLatencyQualityTradeoff = KTRLatencyQualityTradeoffRT; - } - else - { - iRateOptions.iLatencyQualityTradeoff = KTRLatencyQualityTradeoffNonRT; - } - - iDevVideoRecord->SetRateControlOptions(0/*Layer 0 is supported*/, iRateOptions); - iBitRateSetting = ETrue; - } - - if ( (iCodecType != EH263) && (iCodingOptions.iSyncIntervalInPicture > 0) ) - { - // Set resync value (segment target size) - iDevVideoRecord->SetSegmentTargetSize(0/*aLayer*/, - iCodingOptions.iSyncIntervalInPicture/*aSizeBytes*/, - 0/*aSizeMacroblocks*/); - } - - // Start encoding - if (iFatalError == KErrNone) - { - iDevVideoRecord->Start(); - iState = ETRRunning; - } - - // Reset ts monitor - iLastTimestamp = -1; - - iSetRandomAccessPoint = EFalse; - - PRINT((_L("CTRVideoEncoderClient::StartL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::EncodePictureL -// Encodes video picture -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::EncodePictureL(TVideoPicture* aPicture) - { - PRINT((_L("CTRVideoEncoderClient::EncodePictureL(), In"))) - - if (aPicture) - { - if (iFatalError == KErrNone) - { - // Set rest of picture options - aPicture->iOptions = TVideoPicture::ETimestamp; - PRINT((_L("CTRVideoEncoderClient::EncodePictureL(), picture timestamp [%d]"), TInt(aPicture->iTimestamp.Int64()) )) - - TTimeIntervalMicroSeconds ts = aPicture->iTimestamp; - - if ( ts <= iLastTimestamp) - { - // Prevent propagation of the error now - PRINT((_L("CTRVideoEncoderClient::EncodePictureL(), Picture timestamp less than previously encoded"))) - PRINT((_L("CTRVideoEncoderClient::EncodePictureL(), Dropping picture!!!"))) - iObserver.MtrdvcoEncoderReturnPicture(aPicture); - - PRINT((_L("CTRVideoEncoderClient::EncodePictureL(), Out"))) - return; - } - else - { - iLastTimestamp = ts; - } - - // If random access point was requested - if( iSetRandomAccessPoint ) - { - PRINT((_L("CTRVideoEncoderClient::EncodePictureL(), Instant Refresh requested"))); - aPicture->iOptions |= TVideoPicture::EReqInstantRefresh; - iSetRandomAccessPoint = EFalse; - } - else - { - aPicture->iOptions &= ~(TVideoPicture::EReqInstantRefresh); - } - - aPicture->iData.iDataFormat = EYuvRawData; // Force data format to YUV - - iDevVideoRecord->WritePictureL(aPicture); - } - else - { - PRINT((_L("CTRVideoEncoderClient::EncodePictureL(), Operation is not possible, since FatalError was reported by low-level[%d]"), iFatalError)) - return; - } - } - else - { - PRINT((_L("CTRVideoEncoderClient::EncodePictureL(), Picture is not valid, leave"))) - User::Leave(KErrArgument); - } - - PRINT((_L("CTRVideoEncoderClient::EncodePictureL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::MdvroReturnPicture -// Returns picture -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::MdvroReturnPicture(TVideoPicture *aPicture) - { - iObserver.MtrdvcoEncoderReturnPicture(aPicture); - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::MdvroNewBuffers -// New buffers are available in the system -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::MdvroNewBuffers() - { - TVideoOutputBuffer* newBuffer = NULL; - TInt status = KErrNone; - - - if ( (iCodecType == EMpeg4) && (!iVolHeaderSent) && (iVolHeader != KNullDesC8) ) - { - // Send vol header first to the client - iOutputMediaBuffer->Set( iVolHeader.Des(), - CCMRMediaBuffer::EVideoMPEG4DecSpecInfo, - iVolHeader.Des().Length(), - 0, - 0 ); - - iObserver.MtrdvcoNewBuffer(iOutputMediaBuffer); - iVolHeaderSent = ETrue; - - // VOS+VO+VOL header is now going to be stored to metadata, it must not be included in mediadata so remove it from the next buffer - iRemoveHeader = ETrue; - } - - // Get new buffer and forward it to the client - while( iDevVideoRecord->NumDataBuffers() > 0 ) - { - TRAP(status, newBuffer = iDevVideoRecord->NextBufferL()); - if (status != KErrNone) - { - PRINT((_L("CTRVideoEncoderClient::MdvroNewBuffers(), NextBufferL failed[%d]"), status)) - iObserver.MtrdvcoFatalError(status); - return; - } - - if (newBuffer) - { - PRINT((_L("CTRVideoEncoderClient::MdvroNewBuffers(), dataBuffer length[%d]"), newBuffer->iData.Length())) - - // Check data length if valid - if (newBuffer->iData.Length() <= 0) - { - // Data length is invalid - PRINT((_L("CTRVideoEncoderClient::MdvroNewBuffers(), encoder generates invalid bitstream, abort data processing"))) - iObserver.MtrdvcoFatalError(KErrAbort); - return; - } - - TBool outputMediaBufferSet = EFalse; - - // Remove vol header if needed from the bitstream - if ( iRemoveHeader ) - { - iRemoveHeader = EFalse; - - if ( iCodecType == EMpeg4 ) - { - // check if we need to remove VOS+VO+VOL header from the bitstream, since it is - // stored in metadata, and having it in 2 places may cause interoperability problems - - // Since the length of the vol is already known, remove that data from the beginning of - // the first buffer - if ( (iVolLength > 0) && (iVolLength < newBuffer->iData.Length()) ) - { - TPtr8* buffer = reinterpret_cast(&newBuffer->iData); - buffer->Delete(0, iVolLength); - } - } - - else if ( iCodecType == EH264 ) - { - - TPtr8* ptr = reinterpret_cast(&newBuffer->iData); - TPtr8& buffer(*ptr); - - // Offset to the end - TInt readOffset = buffer.Length(); - readOffset -= 4; - - TInt numNALUnits = 0; - TInt writeOffset = 0; - TInt firstFrameStart = 0; - TInt alignmentBytes = 0; - - numNALUnits = TInt(buffer[readOffset]) + - (TInt(buffer[readOffset + 1]) << 8 ) + - (TInt(buffer[readOffset + 2]) << 16) + - (TInt(buffer[readOffset + 3]) << 24); - - // figure out the payload length of all NAL's to - // determine the number of alignment bytes - - // point to first length field - readOffset -= (numNALUnits - 1) * 8; - readOffset -= 4; - - TInt allNALsLength = 0; - - for (TInt i = 0; i < numNALUnits; i++) - { - TInt len = TInt(buffer[readOffset]) + - (TInt(buffer[readOffset + 1]) << 8) + - (TInt(buffer[readOffset + 2]) << 16) + - (TInt(buffer[readOffset + 3]) << 24); - - allNALsLength += len; - readOffset += 8; - } - - // calculate alignment bytes - alignmentBytes = (allNALsLength % 4 != 0) * ( 4 - (allNALsLength % 4) ); - - // get pointer to end of last frame - writeOffset = buffer.Length() - 4 - numNALUnits * 8; - - // get number of frame NAL's - numNALUnits -= iNumH264SPSPPS; - - // point to offset field of first frame - readOffset = buffer.Length(); - readOffset -= 4; - readOffset -= numNALUnits * 8; - - firstFrameStart = TInt(buffer[readOffset]) + - (TInt(buffer[readOffset + 1]) << 8) + - (TInt(buffer[readOffset + 2]) << 16) + - (TInt(buffer[readOffset + 3]) << 24); - - // The buffer should have enough space for the new NAL header - // if ( frameStart + frameSize + 12 < buffer.Length() ) - - // point to length field of first frame - readOffset += 4; - - // first frame begins from offset 0 - TInt nalOffset = 0; - TInt totalLength = 0; - - for (TInt i = 0; i < numNALUnits; i++) - { - - // read NAL length - TInt length = TInt(buffer[readOffset]) + - (TInt(buffer[readOffset + 1]) << 8) + - (TInt(buffer[readOffset + 2]) << 16) + - (TInt(buffer[readOffset + 3]) << 24); - - totalLength += length; - - // write offset - buffer[writeOffset + 0] = TUint8(nalOffset & 0xff); - buffer[writeOffset + 1] = TUint8((nalOffset >> 8) & 0xff); - buffer[writeOffset + 2] = TUint8((nalOffset >> 16) & 0xff); - buffer[writeOffset + 3] = TUint8((nalOffset >> 24) & 0xff); - - // Write NAL length - writeOffset +=4; - buffer[writeOffset + 0] = TUint8(length & 0xff); - buffer[writeOffset + 1] = TUint8((length >> 8) & 0xff); - buffer[writeOffset + 2] = TUint8((length >> 16) & 0xff); - buffer[writeOffset + 3] = TUint8((length >> 24) & 0xff); - - writeOffset += 4; - readOffset += 8; - - nalOffset += length; - } - - // Write the number of NAL units - buffer[writeOffset + 0] = TUint8(numNALUnits & 0xff); - buffer[writeOffset + 1] = TUint8((numNALUnits >> 8) & 0xff); - buffer[writeOffset + 2] = TUint8((numNALUnits >> 16) & 0xff); - buffer[writeOffset + 3] = TUint8((numNALUnits >> 24) & 0xff); - - // Get a pointer to the position where the frame starts - TPtrC8 tmp(buffer.Ptr() + firstFrameStart, totalLength + alignmentBytes + numNALUnits * 8 + 4); - - // Set output media buffer - iOutputMediaBuffer->Set( tmp, static_cast(iBufferType), - tmp.Length(), newBuffer->iRandomAccessPoint, - newBuffer->iCaptureTimestamp ); - - outputMediaBufferSet = ETrue; - - } - } - - if (!outputMediaBufferSet) - { - iOutputMediaBuffer->Set( newBuffer->iData, static_cast(iBufferType), - newBuffer->iData.Length(), newBuffer->iRandomAccessPoint, - newBuffer->iCaptureTimestamp ); - } - - iObserver.MtrdvcoNewBuffer(iOutputMediaBuffer); - - // Return buffer to devvideo here, since observer call is synchronous - iDevVideoRecord->ReturnBuffer(newBuffer); - } - else - { - PRINT((_L("CTRVideoEncoderClient::MdvroNewBuffers(), newBuffer is not available, nothing to do"))) - break; - } - } - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::StopL -// Stops encoding synchronously -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::StopL() - { - PRINT((_L("CTRVideoEncoderClient::StopL(), In"))) - - if (iFatalError == KErrNone) - { - iDevVideoRecord->Stop(); - } - - // Reset flags here - iVolHeaderSent = EFalse; - iState = ETRStopped; - - PRINT((_L("CTRVideoEncoderClient::StopL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::AsyncStopL -// Stops encoding asynchronoulsy -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::AsyncStopL() - { - PRINT((_L("CTRVideoEncoderClient::StopL(), Async In"))) - - if (iFatalError == KErrNone) - { - iDevVideoRecord->InputEnd(); - } - - // Reset flags here - iVolHeaderSent = EFalse; - iState = ETRStopping; - - PRINT((_L("CTRVideoEncoderClient::StopL(), Async Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::MdvroStreamEnd -// End of stream is reached -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::MdvroStreamEnd() - { - PRINT((_L("CTRVideoEncoderClient::MdvpoStreamEnd()"))) - iState = ETRStopped; - iObserver.MtrdvcoEncStreamEnd(); - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::MdvroSupplementalInfoSent -// Signals that the supplemental info send request has completed. The buffer used for supplemental information can be re-used or freed. -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::MdvroSupplementalInfoSent() - { - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::MdvroFatalError -// Reports the fatal error -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::MdvroFatalError(TInt aError) - { - PRINT((_L("CTRVideoEncoderClient::MdvroFatalError(), error[%d]"), aError)) - iFatalError = aError; - iObserver.MtrdvcoFatalError(iFatalError); - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::GetCodingStandardSpecificInitOutputLC -// Requests video encoder codinc options -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -HBufC8* CTRVideoEncoderClient::GetCodingStandardSpecificInitOutputLC() - { - if ( iDevVideoRecord ) - { - HBufC8* condigDecInfo = iDevVideoRecord->CodingStandardSpecificInitOutputLC(); - - if (condigDecInfo) - { - PRINT((_L("CTRVideoEncoderClient::GetCodingStandardSpecificInitOutputLC(), Vol header length[%d]"), condigDecInfo->Length())) - - if ( (condigDecInfo->Length() > 0) && (condigDecInfo->Length() <= KMaxDesC8Length /*256*/) ) - { - iVolHeader.Des().Copy( condigDecInfo->Des() ); - - // Keep vol length for further use - iVolLength = iVolHeader.Des().Length(); - PRINT((_L("CTRVideoEncoderClient::GetCodingStandardSpecificInitOutputLC(), VolLength[%d]"), iVolLength)) - - // VOS+VO+VOL header is now going to be stored to metadata, it must not be included in mediadata so remove it from the next buffer - iRemoveHeader = ETrue; - iVolHeaderSent = ETrue; - - if ( iCodecType == EH264 ) - { - TPtr8 temp = condigDecInfo->Des(); - - // get number of SPS/PPS units to be able to - // remove them later from a frame buffer - TInt index = condigDecInfo->Length() - 4; - - iNumH264SPSPPS = TInt(temp[index]) + - (TInt(temp[index + 1]) << 8 ) + - (TInt(temp[index + 2]) << 16) + - (TInt(temp[index + 3]) << 24); - - } - - // Return codingInfo to the client - return condigDecInfo; - } - } - } - - // If condigDecInfo is not valid or something is going wrong, return NULL - return NULL; - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::UseDataTransferOptimization -// Client's request to use optimized data transfer via CI -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::UseDataTransferOptimizationL() - { - PRINT((_L("CTRVideoEncoderClient::UseDataTransferOptimizationL(), In"))) - - // Check buffer management custom interface support before initializing - iVideoBufferManagementCI = (MMmfVideoBufferManagement*)iDevVideoRecord->CustomInterface( iHwDeviceId, KMmfVideoBuffermanagementUid ); - PRINT((_L("CTRVideoEncoderClient::UseDataTransferOptimizationL(), iVideoBufferManagementCI[0x%x]"), iVideoBufferManagementCI)) - - if (iVideoBufferManagementCI) - { - iVideoBufferManagementCI->MmvbmSetObserver(this); - iVideoBufferManagementCI->MmvbmEnable(ETrue); - - // Set buffer options for this mode - MMmfVideoBufferManagement::TBufferOptions bufferOptionsCI; - bufferOptionsCI.iNumInputBuffers = KTRPictureBuffersNumberBMCI; - bufferOptionsCI.iBufferSize = iPictureSize; - iVideoBufferManagementCI->MmvbmSetBufferOptionsL(bufferOptionsCI); - } - else - { - PRINT((_L("CTRVideoEncoderClient::UseDataTransferOptimizationL(), Optimized data transfer is not supported for this hwdevice"))) - User::Leave(KErrNotSupported); - } - - PRINT((_L("CTRVideoEncoderClient::UseDataTransferOptimizationL(), Out"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::MmvbmoNewBuffers -// One or several buffers are available throug CI -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::MmvbmoNewBuffers() - { - PRINT((_L("CTRVideoEncoderClient::MmvbmoNewBuffers()"))) - - if (iVideoBufferManagementCI) - { - // Call CI observer to the client only in case, if CI was successfully initialized - iObserver.MtrdvcoNewBuffers(); - } - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::MmvbmoReleaseBuffers -// Release buffers -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::MmvbmoReleaseBuffers() - { - PRINT((_L("CTRVideoEncoderClient::MmvbmoReleaseBuffers()"))) - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::GetTargetVideoPictureL -// Gets target video picture buffer -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TVideoPicture* CTRVideoEncoderClient::GetTargetVideoPictureL() - { - if (iVideoBufferManagementCI) - { - return iVideoBufferManagementCI->MmvbmGetBufferL(iPictureSize); - } - else - { - PRINT((_L("CTRVideoEncoderClient::GetTargetVideoPictureL(), optimized data transfer is not supported"))) - User::Leave(KErrNotSupported); - - // Make compiler happy - return NULL; - } - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::SetRandomAccessPoint -// Requests to set random access point to bitstream -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::SetRandomAccessPoint() - { - PRINT((_L("CTRVideoEncoderClient::SetRandomAccessPoint(), In"))) - - // There are several ways to requestI-Frame: - // 1. Pause() and immediately resume() should force to encoder to generate I-Frame. - // 2. Set TVideoPictureOption: some of encoders don't support this - // 3. PictureLoss(): some of encoders don't support this - - // Use TVideoPictureOption to request the I-frame later - iSetRandomAccessPoint = ETrue; - - PRINT((_L("CTRVideoEncoderClient::SetRandomAccessPoint(), Out"))) - } - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::EstimateEncodeFrameTimeL -// Returns a time estimate on long it takes to encode one frame -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TReal CTRVideoEncoderClient::EstimateEncodeFrameTimeL(const TTRVideoFormat& aOutput, TInt aCodecType) - { - if (iUid == TUid::Null()) - { - PRINT((_L("CTRVideoEncoderClient::EstimateEncodeFrameTimeL(), no encoder selected yet"))) - User::Leave(KErrNotReady); - } - - TReal time = 0.0; - - // Select the predefined constant using the current settings - if (aCodecType == EH263) - { - time = iAcceleratedCodecSelected ? KTREncodeTimeFactorH263HW : KTREncodeTimeFactorH263SW; - } - else if (aCodecType == EH264) - { - time = iAcceleratedCodecSelected ? KTREncodeTimeFactorH264HW : KTREncodeTimeFactorH264SW; - } - else - { - time = iAcceleratedCodecSelected ? KTREncodeTimeFactorMPEG4HW : KTREncodeTimeFactorMPEG4SW; - } - - // Multiply the time by the resolution of the output frame - time *= static_cast(aOutput.iSize.iWidth + aOutput.iSize.iHeight) * KTRTimeFactorScale; - - PRINT((_L("CTRVideoEncoderClient::EstimateEncodeFrameTimeL(), encode frame time: %.2f"), time)) - - return time; - } - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::Pause -// Pauses encoding -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::Pause() - { - if ((iFatalError == KErrNone) && (iState == ETRRunning)) - { - iDevVideoRecord->Pause(); - iState = ETRPaused; - } - } - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::Resume -// Resumes encoding -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::Resume() - { - if ((iFatalError == KErrNone) && (iState == ETRPaused)) - { - iDevVideoRecord->Resume(); - iState = ETRRunning; - } - } - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::EnableResourceObserver -// Enable / Disable resourece observer -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::EnableResourceObserver(TBool aEnable) - { - PRINT((_L("CTRVideoEncoderClient::EnableResourceObserver(), In"))) - - iVideoResourceHandlerCI = (MMmfVideoResourceHandler*)iDevVideoRecord->CustomInterface( iHwDeviceId, KUidMmfVideoResourceManagement ); - PRINT((_L("CTRVideoEncoderClient::EnableResourceObserver(), iVideoResourceHandlerCI[0x%x]"), iVideoResourceHandlerCI)) - - if (iVideoResourceHandlerCI) - { - if (aEnable) - { - iVideoResourceHandlerCI->MmvrhSetObserver(this); - PRINT((_L("CTRVideoEncoderClient::EnableResourceObserver(), Enabled"))) - } - else - { - iVideoResourceHandlerCI->MmvrhSetObserver(NULL); - } - } - - PRINT((_L("CTRVideoEncoderClient::EnableResourceObserver(), Out"))) - } - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::MmvroResourcesLost -// Indicates that a media device has lost its resources -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::MmvroResourcesLost(TUid /*aMediaDevice*/) - { - iObserver.MtrdvcoResourcesLost(EFalse); - } - - -// ----------------------------------------------------------------------------- -// CTRVideoEncoderClient::MmvroResourcesRestored -// Indicates that a media device has regained its resources -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CTRVideoEncoderClient::MmvroResourcesRestored(TUid /*aMediaDevice*/) - { - iObserver.MtrdvcoResourcesRestored(); - } - -// End of file -